mirror of
https://github.com/holub/mame
synced 2025-05-29 00:53:09 +03:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
8c8359c288
2
3rdparty/README.md
vendored
2
3rdparty/README.md
vendored
@ -32,8 +32,6 @@ lua - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
|
||||
|
||||
lua-zlib - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
|
||||
|
||||
luabridge - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
|
||||
|
||||
luafilesystem - [The MIT License (MIT)](http://opensource.org/licenses/MIT)
|
||||
|
||||
lzma - [The GNU Lesser General Public License](http://opensource.org/licenses/LGPL-2.1)
|
||||
|
@ -1,6 +1,13 @@
|
||||
GLSL optimizer Change Log
|
||||
=========================
|
||||
|
||||
2016 09
|
||||
-------
|
||||
|
||||
* Metal: Fixed constant precision propagation in some cases.
|
||||
* Metal: Fixed shadowmap sampling when reference Z value is outside of 0..1 range (now clamps to match GLES specs).
|
||||
|
||||
|
||||
2016 06
|
||||
-------
|
||||
|
||||
|
@ -3046,6 +3046,11 @@ process_initializer(ir_variable *var, ast_declaration *decl,
|
||||
if (type->qualifier.flags.q.constant) {
|
||||
ir_constant *constant_value = rhs->constant_expression_value();
|
||||
constant_value->set_precision((glsl_precision)type->qualifier.precision);
|
||||
if (constant_value->type->is_array()) {
|
||||
for (unsigned i = 0; i < constant_value->type->length; i++) {
|
||||
constant_value->get_array_element(i)->set_precision((glsl_precision)type->qualifier.precision);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Calculate the constant value if this is a const or uniform
|
||||
|
@ -677,6 +677,20 @@ void ir_print_metal_visitor::visit(ir_variable *ir)
|
||||
buffer.asprintf_append (" = ");
|
||||
visit (ir->constant_value);
|
||||
}
|
||||
|
||||
if ((ir->data.mode == ir_var_auto || ir->data.mode == ir_var_temporary) && (ir->type->matrix_columns == 1)) {
|
||||
switch (ir->type->base_type) {
|
||||
case GLSL_TYPE_INT:
|
||||
case GLSL_TYPE_FLOAT:
|
||||
buffer.asprintf_append (" = 0");
|
||||
break;
|
||||
case GLSL_TYPE_BOOL:
|
||||
buffer.asprintf_append (" = false");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1110,9 +1124,10 @@ void ir_print_metal_visitor::visit(ir_expression *ir)
|
||||
else if (op0cast)
|
||||
{
|
||||
print_cast (buffer, arg_prec, ir->operands[0]);
|
||||
buffer.asprintf_append ("(");
|
||||
}
|
||||
ir->operands[0]->accept(this);
|
||||
if (op0castTo1)
|
||||
if (op0castTo1 || op0cast)
|
||||
{
|
||||
buffer.asprintf_append (")");
|
||||
}
|
||||
@ -1131,9 +1146,10 @@ void ir_print_metal_visitor::visit(ir_expression *ir)
|
||||
else if (op1cast)
|
||||
{
|
||||
print_cast (buffer, arg_prec, ir->operands[1]);
|
||||
buffer.asprintf_append ("(");
|
||||
}
|
||||
ir->operands[1]->accept(this);
|
||||
if (op1castTo0)
|
||||
if (op1castTo0 || op1cast)
|
||||
{
|
||||
buffer.asprintf_append (")");
|
||||
}
|
||||
@ -1214,14 +1230,17 @@ static void print_texture_uv (ir_print_metal_visitor* vis, ir_texture* ir, bool
|
||||
}
|
||||
else if (is_shadow)
|
||||
{
|
||||
// Note that on metal sample_compare works differently than shadow2DEXT on GLES:
|
||||
// it does not clamp neither the pixel value nor compare value to the [0.0, 1.0] range. To
|
||||
// preserve same behavior we're clamping the argument explicitly.
|
||||
if (!is_proj)
|
||||
{
|
||||
// regular shadow
|
||||
vis->buffer.asprintf_append (uv_dim == 4 ? "(float3)(" : "(float2)(");
|
||||
ir->coordinate->accept(vis);
|
||||
vis->buffer.asprintf_append (uv_dim == 4 ? ").xyz, (" : ").xy, (float)(");
|
||||
vis->buffer.asprintf_append (uv_dim == 4 ? ").xyz, (" : ").xy, saturate((float)(");
|
||||
ir->coordinate->accept(vis);
|
||||
vis->buffer.asprintf_append (uv_dim == 4 ? ").w" : ").z");
|
||||
vis->buffer.asprintf_append (uv_dim == 4 ? ").w" : ").z)");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1230,11 +1249,11 @@ static void print_texture_uv (ir_print_metal_visitor* vis, ir_texture* ir, bool
|
||||
ir->coordinate->accept(vis);
|
||||
vis->buffer.asprintf_append (").xy / (float)(");
|
||||
ir->coordinate->accept(vis);
|
||||
vis->buffer.asprintf_append (").w, (float)(");
|
||||
vis->buffer.asprintf_append (").w, saturate((float)(");
|
||||
ir->coordinate->accept(vis);
|
||||
vis->buffer.asprintf_append (").z / (float)(");
|
||||
ir->coordinate->accept(vis);
|
||||
vis->buffer.asprintf_append (").w");
|
||||
vis->buffer.asprintf_append (").w)");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1258,7 +1277,7 @@ void ir_print_metal_visitor::visit(ir_texture *ir)
|
||||
// For shadow sampling, Metal right now needs a hardcoded sampler state :|
|
||||
if (!ctx.shadowSamplerDone)
|
||||
{
|
||||
ctx.prefixStr.asprintf_append("constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less);\n");
|
||||
ctx.prefixStr.asprintf_append("constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less_equal);\n");
|
||||
ctx.shadowSamplerDone = true;
|
||||
}
|
||||
buffer.asprintf_append (".sample_compare(_mtl_xl_shadow_sampler");
|
||||
|
@ -11,7 +11,7 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half4 c_1 = 0;
|
||||
c_1.zw = half2(float2(0.0, 0.0));
|
||||
c_1.xy = half2(float2(-0.3441301, 0.05004501));
|
||||
_mtl_o._fragData = c_1;
|
||||
|
@ -11,7 +11,7 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half4 c_1 = 0;
|
||||
c_1.zw = half2(float2(0.0, 0.0));
|
||||
c_1.xy = half2(float2(-0.3441301, 0.05004501));
|
||||
_mtl_o._fragData = c_1;
|
||||
|
@ -12,7 +12,7 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float a_2;
|
||||
float a_2 = 0;
|
||||
if ((_mtl_i.gl_FragCoord.x == 1.0)) {
|
||||
discard_fragment();
|
||||
};
|
||||
|
@ -18,57 +18,57 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _MainTex [[texture(0)]], sampler _mtlsmp__MainTex [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 t_1;
|
||||
half4 tmpvar_2;
|
||||
half4 t_1 = 0;
|
||||
half4 tmpvar_2 = 0;
|
||||
tmpvar_2 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0));
|
||||
t_1 = tmpvar_2;
|
||||
if ((_mtl_u._NumPasses > (half)0.0)) {
|
||||
half passes_3;
|
||||
if ((_mtl_u._NumPasses > (half)(0.0))) {
|
||||
half passes_3 = 0;
|
||||
passes_3 = _mtl_u._NumPasses;
|
||||
float i_4;
|
||||
half3 res_5;
|
||||
float i_4 = 0;
|
||||
half3 res_5 = 0;
|
||||
res_5 = tmpvar_2.xyz;
|
||||
i_4 = 0.0;
|
||||
while (true) {
|
||||
if ((i_4 >= 4.0)) {
|
||||
break;
|
||||
};
|
||||
if ((i_4 == (float)passes_3)) {
|
||||
if ((i_4 == (float)(passes_3))) {
|
||||
break;
|
||||
};
|
||||
if ((i_4 == 0.0)) {
|
||||
half3 tmpvar_6;
|
||||
half val_7;
|
||||
val_7 = ((_mtl_u._ContrastShift.x * (half)3.0) + (half)12.0);
|
||||
half tmpvar_8;
|
||||
tmpvar_8 = pow ((cos(val_7) + (half)1.0), val_7);
|
||||
tmpvar_6 = ((res_5 - (half)0.5) * tmpvar_8);
|
||||
half3 tmpvar_6 = 0;
|
||||
half val_7 = 0;
|
||||
val_7 = ((_mtl_u._ContrastShift.x * (half)(3.0)) + (half)(12.0));
|
||||
half tmpvar_8 = 0;
|
||||
tmpvar_8 = pow ((cos(val_7) + (half)(1.0)), val_7);
|
||||
tmpvar_6 = ((res_5 - (half)(0.5)) * tmpvar_8);
|
||||
res_5 = tmpvar_6;
|
||||
} else {
|
||||
if ((i_4 == 1.0)) {
|
||||
half3 tmpvar_9;
|
||||
half val_10;
|
||||
val_10 = ((_mtl_u._SaturationShift.y * (half)3.0) + (half)12.0);
|
||||
half tmpvar_11;
|
||||
tmpvar_11 = pow ((cos(val_10) + (half)1.0), val_10);
|
||||
tmpvar_9 = ((res_5 - (half)0.5) * tmpvar_11);
|
||||
half3 tmpvar_9 = 0;
|
||||
half val_10 = 0;
|
||||
val_10 = ((_mtl_u._SaturationShift.y * (half)(3.0)) + (half)(12.0));
|
||||
half tmpvar_11 = 0;
|
||||
tmpvar_11 = pow ((cos(val_10) + (half)(1.0)), val_10);
|
||||
tmpvar_9 = ((res_5 - (half)(0.5)) * tmpvar_11);
|
||||
res_5 = tmpvar_9;
|
||||
} else {
|
||||
if ((i_4 == 2.0)) {
|
||||
half3 tmpvar_12;
|
||||
half val_13;
|
||||
val_13 = ((_mtl_u._HueShift.z * (half)3.0) + (half)12.0);
|
||||
half tmpvar_14;
|
||||
tmpvar_14 = pow ((cos(val_13) + (half)1.0), val_13);
|
||||
tmpvar_12 = ((res_5 - (half)0.5) * tmpvar_14);
|
||||
half3 tmpvar_12 = 0;
|
||||
half val_13 = 0;
|
||||
val_13 = ((_mtl_u._HueShift.z * (half)(3.0)) + (half)(12.0));
|
||||
half tmpvar_14 = 0;
|
||||
tmpvar_14 = pow ((cos(val_13) + (half)(1.0)), val_13);
|
||||
tmpvar_12 = ((res_5 - (half)(0.5)) * tmpvar_14);
|
||||
res_5 = tmpvar_12;
|
||||
} else {
|
||||
half3 tmpvar_15;
|
||||
half val_16;
|
||||
val_16 = ((_mtl_u._LuminosityShift.x * (half)3.0) + (half)12.0);
|
||||
half tmpvar_17;
|
||||
tmpvar_17 = pow ((cos(val_16) + (half)1.0), val_16);
|
||||
tmpvar_15 = ((res_5 - (half)0.5) * tmpvar_17);
|
||||
half3 tmpvar_15 = 0;
|
||||
half val_16 = 0;
|
||||
val_16 = ((_mtl_u._LuminosityShift.x * (half)(3.0)) + (half)(12.0));
|
||||
half tmpvar_17 = 0;
|
||||
tmpvar_17 = pow ((cos(val_16) + (half)(1.0)), val_16);
|
||||
tmpvar_15 = ((res_5 - (half)(0.5)) * tmpvar_17);
|
||||
res_5 = tmpvar_15;
|
||||
};
|
||||
};
|
||||
@ -77,7 +77,7 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
};
|
||||
t_1.xyz = res_5;
|
||||
};
|
||||
half4 tmpvar_18;
|
||||
half4 tmpvar_18 = 0;
|
||||
tmpvar_18.w = half(1.0);
|
||||
tmpvar_18.xyz = t_1.xyz;
|
||||
_mtl_o._fragData = tmpvar_18;
|
||||
|
@ -13,7 +13,7 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<float> _CameraDepthTexture [[texture(0)]], sampler _mtlsmp__CameraDepthTexture [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float4 tmpvar_1;
|
||||
float4 tmpvar_1 = 0;
|
||||
tmpvar_1 = _CameraDepthTexture.sample(_mtlsmp__CameraDepthTexture, (float2)(_mtl_i.varUV), level(0.0)).xxxx;
|
||||
_mtl_o._fragData = half4(tmpvar_1);
|
||||
return _mtl_o;
|
||||
|
@ -23,48 +23,48 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _NoiseTex [[texture(4)]], sampler _mtlsmp__NoiseTex [[sampler(4)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float2 tmpvar_1;
|
||||
float2 tmpvar_1 = 0;
|
||||
tmpvar_1 = _mtl_i.xlv_TEXCOORD0;
|
||||
float4 jitteredDir_3;
|
||||
float4 sum_4;
|
||||
float weight_5;
|
||||
float zx_6;
|
||||
float2 vx_7;
|
||||
float2 x_8;
|
||||
float2 xf_9;
|
||||
float4 jitteredDir_3 = 0;
|
||||
float4 sum_4 = 0;
|
||||
float weight_5 = 0;
|
||||
float zx_6 = 0;
|
||||
float2 vx_7 = 0;
|
||||
float2 x_8 = 0;
|
||||
float2 xf_9 = 0;
|
||||
xf_9 = _mtl_i.xlv_TEXCOORD0;
|
||||
x_8 = _mtl_i.xlv_TEXCOORD0;
|
||||
if ((_mtl_u._MainTex_TexelSize.y < 0.0)) {
|
||||
xf_9.y = (1.0 - _mtl_i.xlv_TEXCOORD0.y);
|
||||
};
|
||||
half4 tmpvar_10;
|
||||
half4 tmpvar_10 = 0;
|
||||
tmpvar_10 = _NeighbourMaxTex.sample(_mtlsmp__NeighbourMaxTex, (float2)(xf_9), level(0.0));
|
||||
float2 tmpvar_11;
|
||||
float2 tmpvar_11 = 0;
|
||||
tmpvar_11 = float2(tmpvar_10.xy);
|
||||
half4 tmpvar_12;
|
||||
half4 tmpvar_12 = 0;
|
||||
tmpvar_12 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0), level(0.0));
|
||||
float4 tmpvar_13;
|
||||
float4 tmpvar_13 = 0;
|
||||
tmpvar_13 = float4(tmpvar_12);
|
||||
half4 tmpvar_14;
|
||||
half4 tmpvar_14 = 0;
|
||||
tmpvar_14 = _VelTex.sample(_mtlsmp__VelTex, (float2)(xf_9), level(0.0));
|
||||
float2 tmpvar_15;
|
||||
float2 tmpvar_15 = 0;
|
||||
tmpvar_15 = float2(tmpvar_14.xy);
|
||||
vx_7 = tmpvar_15;
|
||||
float4 tmpvar_16;
|
||||
float4 tmpvar_16 = 0;
|
||||
tmpvar_16.zw = float2(0.0, 0.0);
|
||||
tmpvar_16.xy = _mtl_i.xlv_TEXCOORD0;
|
||||
float4 coord_17;
|
||||
float4 coord_17 = 0;
|
||||
coord_17 = (tmpvar_16 * 11.0);
|
||||
half4 tmpvar_18;
|
||||
half4 tmpvar_18 = 0;
|
||||
tmpvar_18 = _NoiseTex.sample(_mtlsmp__NoiseTex, (float2)(coord_17.xy), level(coord_17.w));
|
||||
float4 tmpvar_19;
|
||||
tmpvar_19 = float4(((tmpvar_18 * (half)2.0) - (half)1.0));
|
||||
float4 tmpvar_19 = 0;
|
||||
tmpvar_19 = float4(((tmpvar_18 * (half)(2.0)) - (half)(1.0)));
|
||||
zx_6 = -((1.0/((
|
||||
(_mtl_u._ZBufferParams.x * _CameraDepthTexture.sample(_mtlsmp__CameraDepthTexture, (float2)(_mtl_i.xlv_TEXCOORD0), level(0.0)).x)
|
||||
+ _mtl_u._ZBufferParams.y))));
|
||||
weight_5 = 1.0;
|
||||
sum_4 = tmpvar_13;
|
||||
float4 tmpvar_20;
|
||||
float4 tmpvar_20 = 0;
|
||||
tmpvar_20 = (tmpvar_11.xyxy + (tmpvar_19 * (_mtl_u._MainTex_TexelSize.xyxy * _mtl_u._Jitter)).xyyz);
|
||||
jitteredDir_3 = ((max (
|
||||
abs(tmpvar_20.xyxy)
|
||||
@ -72,50 +72,50 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
((_mtl_u._MainTex_TexelSize.xyxy * _mtl_u._MaxVelocity) * 0.15)
|
||||
) * sign(tmpvar_20.xyxy)) * float4(1.0, 1.0, -1.0, -1.0));
|
||||
for (int l_2 = 0; l_2 < 12; l_2++) {
|
||||
float zy_21;
|
||||
float4 yf_22;
|
||||
float4 tmpvar_23;
|
||||
float zy_21 = 0;
|
||||
float4 yf_22 = 0;
|
||||
float4 tmpvar_23 = 0;
|
||||
tmpvar_23 = (tmpvar_1.xyxy + ((jitteredDir_3.xyxy * _xlat_mtl_const1[l_2].xyxy) * float4(1.0, 1.0, -1.0, -1.0)));
|
||||
yf_22 = tmpvar_23;
|
||||
if ((_mtl_u._MainTex_TexelSize.y < 0.0)) {
|
||||
yf_22.yw = (1.0 - tmpvar_23.yw);
|
||||
};
|
||||
half4 tmpvar_24;
|
||||
half4 tmpvar_24 = 0;
|
||||
tmpvar_24 = _VelTex.sample(_mtlsmp__VelTex, (float2)(yf_22.xy), level(0.0));
|
||||
float2 tmpvar_25;
|
||||
float2 tmpvar_25 = 0;
|
||||
tmpvar_25 = float2(tmpvar_24.xy);
|
||||
zy_21 = -((1.0/((
|
||||
(_mtl_u._ZBufferParams.x * _CameraDepthTexture.sample(_mtlsmp__CameraDepthTexture, (float2)(tmpvar_23.xy), level(0.0)).x)
|
||||
+ _mtl_u._ZBufferParams.y))));
|
||||
float2 x_26;
|
||||
float2 x_26 = 0;
|
||||
x_26 = (x_8 - tmpvar_23.xy);
|
||||
float2 x_27;
|
||||
float2 x_27 = 0;
|
||||
x_27 = (tmpvar_23.xy - x_8);
|
||||
float tmpvar_28;
|
||||
float tmpvar_28 = 0;
|
||||
tmpvar_28 = sqrt(dot (tmpvar_25, tmpvar_25));
|
||||
float2 x_29;
|
||||
float2 x_29 = 0;
|
||||
x_29 = (tmpvar_23.xy - x_8);
|
||||
float edge0_30;
|
||||
float edge0_30 = 0;
|
||||
edge0_30 = (0.95 * tmpvar_28);
|
||||
float tmpvar_31;
|
||||
float tmpvar_31 = 0;
|
||||
tmpvar_31 = clamp (((
|
||||
sqrt(dot (x_29, x_29))
|
||||
- edge0_30) / (
|
||||
(1.05 * tmpvar_28)
|
||||
- edge0_30)), 0.0, 1.0);
|
||||
float tmpvar_32;
|
||||
float tmpvar_32 = 0;
|
||||
tmpvar_32 = sqrt(dot (vx_7, vx_7));
|
||||
float2 x_33;
|
||||
float2 x_33 = 0;
|
||||
x_33 = (x_8 - tmpvar_23.xy);
|
||||
float edge0_34;
|
||||
float edge0_34 = 0;
|
||||
edge0_34 = (0.95 * tmpvar_32);
|
||||
float tmpvar_35;
|
||||
float tmpvar_35 = 0;
|
||||
tmpvar_35 = clamp (((
|
||||
sqrt(dot (x_33, x_33))
|
||||
- edge0_34) / (
|
||||
(1.05 * tmpvar_32)
|
||||
- edge0_34)), 0.0, 1.0);
|
||||
float tmpvar_36;
|
||||
float tmpvar_36 = 0;
|
||||
tmpvar_36 = (((
|
||||
clamp ((1.0 - ((zy_21 - zx_6) / _mtl_u._SoftZDistance)), 0.0, 1.0)
|
||||
*
|
||||
@ -141,14 +141,14 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
(2.0 * tmpvar_35)
|
||||
))))
|
||||
) * 2.0));
|
||||
half4 tmpvar_37;
|
||||
half4 tmpvar_37 = 0;
|
||||
tmpvar_37 = _MainTex.sample(_mtlsmp__MainTex, (float2)(tmpvar_23.xy), level(0.0));
|
||||
float4 tmpvar_38;
|
||||
float4 tmpvar_38 = 0;
|
||||
tmpvar_38 = float4(tmpvar_37);
|
||||
sum_4 = (sum_4 + (tmpvar_38 * tmpvar_36));
|
||||
weight_5 = (weight_5 + tmpvar_36);
|
||||
};
|
||||
float4 tmpvar_39;
|
||||
float4 tmpvar_39 = 0;
|
||||
tmpvar_39 = (sum_4 / weight_5);
|
||||
_mtl_o._fragData = half4(tmpvar_39);
|
||||
return _mtl_o;
|
||||
|
@ -15,16 +15,16 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
c_1 = half4(((float4)_mtl_i.uv + _mtl_i.gl_FragCoord));
|
||||
float tmpvar_2;
|
||||
half4 c_1 = 0;
|
||||
c_1 = half4(((float4)(_mtl_i.uv) + _mtl_i.gl_FragCoord));
|
||||
float tmpvar_2 = 0;
|
||||
if (_mtl_i.gl_FrontFacing) {
|
||||
tmpvar_2 = 1.0;
|
||||
} else {
|
||||
tmpvar_2 = 0.0;
|
||||
};
|
||||
c_1.x = (c_1.x + (half)tmpvar_2);
|
||||
c_1.xy = half2(((float2)c_1.xy + _mtl_i.gl_PointCoord));
|
||||
c_1.x = (c_1.x + (half)(tmpvar_2));
|
||||
c_1.xy = half2(((float2)(c_1.xy) + _mtl_i.gl_PointCoord));
|
||||
_mtl_o._fragData = c_1;
|
||||
return _mtl_o;
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ mediump vec4 frag( in v2f i ) {
|
||||
h += ha[j];
|
||||
f += fa[j];
|
||||
f += (p * ha[0]);
|
||||
f += (ha[1] * p);
|
||||
}
|
||||
return vec4( h.xy, f.xy);
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ void main ()
|
||||
h_6 = (h_6 + vec3[3](vec3(1.0, 2.0, 3.0), vec3(4.0, 5.0, 6.0), vec3(7.0, 8.0, 9.0))[j_3]);
|
||||
f_5 = (f_5 + vec3[3](vec3(11.0, 12.0, 13.0), vec3(14.0, 15.0, 16.0), vec3(17.0, 18.0, 19.0))[j_3]);
|
||||
f_5 = (f_5 + (p_4 * vec3(1.0, 2.0, 3.0)));
|
||||
f_5 = (f_5 + (vec3(4.0, 5.0, 6.0) * p_4));
|
||||
};
|
||||
highp vec4 tmpvar_8;
|
||||
tmpvar_8.xy = h_6.xy;
|
||||
@ -28,6 +29,6 @@ void main ()
|
||||
}
|
||||
|
||||
|
||||
// stats: 12 alu 0 tex 2 flow
|
||||
// stats: 14 alu 0 tex 2 flow
|
||||
// inputs: 1
|
||||
// #0: xlv_TEXCOORD0 (medium float) 2x1 [-1]
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include <metal_stdlib>
|
||||
#pragma clang diagnostic ignored "-Wparentheses-equality"
|
||||
using namespace metal;
|
||||
constant half3 _xlat_mtl_const1[3] = {float3(1.0, 2.0, 3.0), float3(4.0, 5.0, 6.0), float3(7.0, 8.0, 9.0)};
|
||||
constant half3 _xlat_mtl_const1[3] = {half3(1.0, 2.0, 3.0), half3(4.0, 5.0, 6.0), half3(7.0, 8.0, 9.0)};
|
||||
constant float3 _xlat_mtl_const2[3] = {float3(11.0, 12.0, 13.0), float3(14.0, 15.0, 16.0), float3(17.0, 18.0, 19.0)};
|
||||
struct xlatMtlShaderInput {
|
||||
half2 xlv_TEXCOORD0;
|
||||
@ -14,24 +14,25 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 tmpvar_1;
|
||||
half2 tmpvar_2;
|
||||
half4 tmpvar_1 = 0;
|
||||
half2 tmpvar_2 = 0;
|
||||
tmpvar_2 = _mtl_i.xlv_TEXCOORD0;
|
||||
float3 p_4;
|
||||
float3 f_5;
|
||||
half3 h_6;
|
||||
float3 p_4 = 0;
|
||||
float3 f_5 = 0;
|
||||
half3 h_6 = 0;
|
||||
h_6 = half3(float3(0.0, 0.0, 0.0));
|
||||
f_5 = float3(0.0, 0.0, 0.0);
|
||||
half3 tmpvar_7;
|
||||
half3 tmpvar_7 = 0;
|
||||
tmpvar_7.z = half(1.0);
|
||||
tmpvar_7.xy = _mtl_i.xlv_TEXCOORD0;
|
||||
p_4 = float3(tmpvar_7);
|
||||
for (int j_3 = 0; j_3 < short((tmpvar_2.x * (half)3.0)); j_3++) {
|
||||
for (int j_3 = 0; j_3 < short((tmpvar_2.x * (half)(3.0))); j_3++) {
|
||||
h_6 = (h_6 + _xlat_mtl_const1[j_3]);
|
||||
f_5 = (f_5 + _xlat_mtl_const2[j_3]);
|
||||
f_5 = (f_5 + (p_4 * float3(1.0, 2.0, 3.0)));
|
||||
f_5 = (f_5 + (p_4 * (float3)(half3(1.0, 2.0, 3.0))));
|
||||
f_5 = (f_5 + ((float3)(half3(4.0, 5.0, 6.0)) * p_4));
|
||||
};
|
||||
float4 tmpvar_8;
|
||||
float4 tmpvar_8 = 0;
|
||||
tmpvar_8.xy = float2(h_6.xy);
|
||||
tmpvar_8.zw = f_5.xy;
|
||||
tmpvar_1 = half4(tmpvar_8);
|
||||
@ -40,6 +41,6 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
}
|
||||
|
||||
|
||||
// stats: 12 alu 0 tex 2 flow
|
||||
// stats: 14 alu 0 tex 2 flow
|
||||
// inputs: 1
|
||||
// #0: xlv_TEXCOORD0 (medium float) 2x1 [-1]
|
||||
|
@ -13,12 +13,12 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 xlt_ocol_1;
|
||||
half4 xlt_ocol_1 = 0;
|
||||
xlt_ocol_1 = _mtl_i._glesFragData_0;
|
||||
half4 ocol_2;
|
||||
half4 ocol_2 = 0;
|
||||
ocol_2.w = xlt_ocol_1.w;
|
||||
ocol_2.xy = _mtl_i.xlv_TEXCOORD0.xy;
|
||||
ocol_2.z = (xlt_ocol_1.z * (half)2.0);
|
||||
ocol_2.z = (xlt_ocol_1.z * (half)(2.0));
|
||||
xlt_ocol_1 = ocol_2;
|
||||
_mtl_o._glesFragData_0 = ocol_2;
|
||||
return _mtl_o;
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include <metal_stdlib>
|
||||
#pragma clang diagnostic ignored "-Wparentheses-equality"
|
||||
using namespace metal;
|
||||
constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less);
|
||||
constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less_equal);
|
||||
struct FragmentCommonData {
|
||||
half3 diffColor;
|
||||
half3 specColor;
|
||||
@ -45,125 +45,125 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, depth2d<float> _ShadowMapTexture [[texture(3)]], sampler _mtlsmp__ShadowMapTexture [[sampler(3)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half atten_2;
|
||||
half4 tmpvar_3;
|
||||
half4 c_1 = 0;
|
||||
half atten_2 = 0;
|
||||
half4 tmpvar_3 = 0;
|
||||
tmpvar_3 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0.xy));
|
||||
half2 tmpvar_4;
|
||||
half2 tmpvar_4 = 0;
|
||||
tmpvar_4.x = _mtl_u._Metallic;
|
||||
tmpvar_4.y = _mtl_u._Glossiness;
|
||||
half3 tmpvar_5;
|
||||
half3 tmpvar_5 = 0;
|
||||
tmpvar_5 = (_mtl_u._Color.xyz * tmpvar_3.xyz);
|
||||
half3 tmpvar_6;
|
||||
half3 tmpvar_7;
|
||||
half3 tmpvar_6 = 0;
|
||||
half3 tmpvar_7 = 0;
|
||||
tmpvar_7 = mix (_mtl_u.unity_ColorSpaceDielectricSpec.xyz, tmpvar_5, half3(_mtl_u._Metallic));
|
||||
half tmpvar_8;
|
||||
half tmpvar_8 = 0;
|
||||
tmpvar_8 = (_mtl_u.unity_ColorSpaceDielectricSpec.w - (_mtl_u._Metallic * _mtl_u.unity_ColorSpaceDielectricSpec.w));
|
||||
tmpvar_6 = (tmpvar_5 * tmpvar_8);
|
||||
half3 tmpvar_9;
|
||||
half3 tmpvar_9 = 0;
|
||||
tmpvar_9 = normalize(_mtl_i.xlv_TEXCOORD2_2.xyz);
|
||||
half3 tmpvar_10;
|
||||
half3 tmpvar_10 = 0;
|
||||
tmpvar_10 = normalize(_mtl_i.xlv_TEXCOORD1);
|
||||
half3 tmpvar_11;
|
||||
half3 tmpvar_11 = 0;
|
||||
tmpvar_11 = _mtl_u._LightColor0.xyz;
|
||||
half shadow_12;
|
||||
half tmpvar_13;
|
||||
half shadow_12 = 0;
|
||||
half tmpvar_13 = 0;
|
||||
tmpvar_13 = _ShadowMapTexture.sample_compare(_mtl_xl_shadow_sampler, (float2)(_mtl_i.xlv_TEXCOORD6.xyz).xy, (float)(_mtl_i.xlv_TEXCOORD6.xyz).z);
|
||||
half tmpvar_14;
|
||||
half tmpvar_14 = 0;
|
||||
tmpvar_14 = tmpvar_13;
|
||||
shadow_12 = (_mtl_u._LightShadowData.x + (tmpvar_14 * ((half)1.0 - _mtl_u._LightShadowData.x)));
|
||||
shadow_12 = (_mtl_u._LightShadowData.x + (tmpvar_14 * ((half)(1.0) - _mtl_u._LightShadowData.x)));
|
||||
atten_2 = shadow_12;
|
||||
half occ_15;
|
||||
half tmpvar_16;
|
||||
half occ_15 = 0;
|
||||
half tmpvar_16 = 0;
|
||||
tmpvar_16 = _OcclusionMap.sample(_mtlsmp__OcclusionMap, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).y;
|
||||
occ_15 = tmpvar_16;
|
||||
half tmpvar_17;
|
||||
tmpvar_17 = (((half)1.0 - _mtl_u._OcclusionStrength) + (occ_15 * _mtl_u._OcclusionStrength));
|
||||
half tmpvar_17 = 0;
|
||||
tmpvar_17 = (((half)(1.0) - _mtl_u._OcclusionStrength) + (occ_15 * _mtl_u._OcclusionStrength));
|
||||
FragmentCommonData s_18;
|
||||
s_18 = _xlat_mtl_const1;
|
||||
s_18.oneMinusRoughness = tmpvar_4.y;
|
||||
s_18.normalWorld = tmpvar_9;
|
||||
s_18.eyeVec = tmpvar_10;
|
||||
s_18.posWorld = half3(float3(0.0, 0.0, 0.0));
|
||||
half3 tmpvar_19;
|
||||
half3 tmpvar_20;
|
||||
half3 tmpvar_19 = 0;
|
||||
half3 tmpvar_20 = 0;
|
||||
tmpvar_19 = s_18.normalWorld;
|
||||
tmpvar_20 = s_18.eyeVec;
|
||||
float4 tmpvar_21;
|
||||
float4 tmpvar_21 = 0;
|
||||
tmpvar_21 = float4(_mtl_u.unity_SpecCube0_HDR);
|
||||
half tmpvar_22;
|
||||
tmpvar_22 = ((half)1.0 - s_18.oneMinusRoughness);
|
||||
half3 tmpvar_23;
|
||||
tmpvar_23 = (tmpvar_20 - ((half)2.0 * (
|
||||
half tmpvar_22 = 0;
|
||||
tmpvar_22 = ((half)(1.0) - s_18.oneMinusRoughness);
|
||||
half3 tmpvar_23 = 0;
|
||||
tmpvar_23 = (tmpvar_20 - ((half)(2.0) * (
|
||||
dot (tmpvar_19, tmpvar_20)
|
||||
* tmpvar_19)));
|
||||
half4 tmpvar_24;
|
||||
half4 tmpvar_24 = 0;
|
||||
tmpvar_24.w = half(1.0);
|
||||
tmpvar_24.xyz = tmpvar_19;
|
||||
half3 x_25;
|
||||
half3 x_25 = 0;
|
||||
x_25.x = dot (_mtl_u.unity_SHAr, tmpvar_24);
|
||||
x_25.y = dot (_mtl_u.unity_SHAg, tmpvar_24);
|
||||
x_25.z = dot (_mtl_u.unity_SHAb, tmpvar_24);
|
||||
half4 hdr_26;
|
||||
half4 hdr_26 = 0;
|
||||
hdr_26 = half4(tmpvar_21);
|
||||
half4 tmpvar_27;
|
||||
half4 tmpvar_27 = 0;
|
||||
tmpvar_27.xyz = tmpvar_23;
|
||||
tmpvar_27.w = ((tmpvar_22 * ((half)1.7 -
|
||||
((half)0.7 * tmpvar_22)
|
||||
)) * (half)6.0);
|
||||
half4 tmpvar_28;
|
||||
tmpvar_27.w = ((tmpvar_22 * ((half)(1.7) -
|
||||
((half)(0.7) * tmpvar_22)
|
||||
)) * (half)(6.0));
|
||||
half4 tmpvar_28 = 0;
|
||||
tmpvar_28 = unity_SpecCube0.sample(_mtlsmp_unity_SpecCube0, (float3)(tmpvar_23), level(tmpvar_27.w));
|
||||
half4 tmpvar_29;
|
||||
half4 tmpvar_29 = 0;
|
||||
tmpvar_29 = tmpvar_28;
|
||||
half3 viewDir_30;
|
||||
half3 viewDir_30 = 0;
|
||||
viewDir_30 = -(tmpvar_10);
|
||||
half3 tmpvar_31;
|
||||
half3 inVec_32;
|
||||
half3 tmpvar_31 = 0;
|
||||
half3 inVec_32 = 0;
|
||||
inVec_32 = (_mtl_u._WorldSpaceLightPos0.xyz + viewDir_30);
|
||||
tmpvar_31 = (inVec_32 * rsqrt(max ((half)0.001,
|
||||
dot (inVec_32, inVec_32)
|
||||
)));
|
||||
half tmpvar_33;
|
||||
half tmpvar_33 = 0;
|
||||
tmpvar_33 = max ((half)0.0, dot (_mtl_u._WorldSpaceLightPos0.xyz, tmpvar_31));
|
||||
half tmpvar_34;
|
||||
tmpvar_34 = ((half)1.0 - _mtl_u._Glossiness);
|
||||
half tmpvar_35;
|
||||
half tmpvar_34 = 0;
|
||||
tmpvar_34 = ((half)(1.0) - _mtl_u._Glossiness);
|
||||
half tmpvar_35 = 0;
|
||||
tmpvar_35 = max ((half)0.0001, (tmpvar_34 * tmpvar_34));
|
||||
half tmpvar_36;
|
||||
tmpvar_36 = max ((((half)2.0 /
|
||||
half tmpvar_36 = 0;
|
||||
tmpvar_36 = max ((((half)(2.0) /
|
||||
(tmpvar_35 * tmpvar_35)
|
||||
) - (half)2.0), (half)0.0001);
|
||||
half x_37;
|
||||
x_37 = ((half)1.0 - max ((half)0.0, dot (tmpvar_9, viewDir_30)));
|
||||
half4 tmpvar_38;
|
||||
) - (half)(2.0)), (half)0.0001);
|
||||
half x_37 = 0;
|
||||
x_37 = ((half)(1.0) - max ((half)0.0, dot (tmpvar_9, viewDir_30)));
|
||||
half4 tmpvar_38 = 0;
|
||||
tmpvar_38.w = half(1.0);
|
||||
tmpvar_38.xyz = (((
|
||||
((tmpvar_6 + (sqrt(
|
||||
max ((half)0.0001, (((tmpvar_36 + (half)1.0) * pow (
|
||||
max ((half)0.0001, (((tmpvar_36 + (half)(1.0)) * pow (
|
||||
max ((half)0.0, dot (tmpvar_9, tmpvar_31))
|
||||
, tmpvar_36)) / ((
|
||||
((half)8.0 * (((tmpvar_33 * tmpvar_33) * _mtl_u._Glossiness) + (tmpvar_34 * tmpvar_34)))
|
||||
* tmpvar_33) + (half)0.0001)))
|
||||
((half)(8.0) * (((tmpvar_33 * tmpvar_33) * _mtl_u._Glossiness) + (tmpvar_34 * tmpvar_34)))
|
||||
* tmpvar_33) + (half)(0.0001))))
|
||||
) * tmpvar_7)) * (tmpvar_11 * atten_2))
|
||||
*
|
||||
max ((half)0.0, dot (tmpvar_9, _mtl_u._WorldSpaceLightPos0.xyz))
|
||||
) + (
|
||||
(max ((((half)1.055 *
|
||||
(max ((((half)(1.055) *
|
||||
pow (max ((half3)float3(0.0, 0.0, 0.0), (_mtl_i.xlv_TEXCOORD5.xyz + x_25)), (half3)float3(0.4166667, 0.4166667, 0.4166667))
|
||||
) - (half)0.055), (half3)float3(0.0, 0.0, 0.0)) * tmpvar_17)
|
||||
) - (half)(0.055)), (half3)float3(0.0, 0.0, 0.0)) * tmpvar_17)
|
||||
* tmpvar_6)) + ((
|
||||
((half)1.0 - ((tmpvar_34 * tmpvar_34) * (tmpvar_34 * (half)0.28)))
|
||||
((half)(1.0) - ((tmpvar_34 * tmpvar_34) * (tmpvar_34 * (half)(0.28))))
|
||||
*
|
||||
(((hdr_26.x * tmpvar_29.w) * tmpvar_29.xyz) * tmpvar_17)
|
||||
) * mix (tmpvar_7, half3(
|
||||
clamp ((_mtl_u._Glossiness + ((half)1.0 - tmpvar_8)), (half)0.0, (half)1.0)
|
||||
clamp ((_mtl_u._Glossiness + ((half)(1.0) - tmpvar_8)), (half)0.0, (half)1.0)
|
||||
), half3(
|
||||
((x_37 * x_37) * (x_37 * x_37))
|
||||
))));
|
||||
c_1 = (tmpvar_38 * _mtl_i.xlv_COLOR);
|
||||
c_1.xyz = c_1.xyz;
|
||||
c_1.xyz = c_1.xyz;
|
||||
half4 xlat_varoutput_39;
|
||||
half4 xlat_varoutput_39 = 0;
|
||||
xlat_varoutput_39.xyz = c_1.xyz;
|
||||
xlat_varoutput_39.w = half(1.0);
|
||||
_mtl_o.FragData_0 = xlat_varoutput_39;
|
||||
|
@ -12,7 +12,7 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 v_1;
|
||||
half4 v_1 = 0;
|
||||
v_1.w = half(-1.0);
|
||||
v_1.x = ((half)(1.2 + _mtl_u.nonSqMat[0].x));
|
||||
v_1.y = half(6.0);
|
||||
|
@ -12,148 +12,148 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half4 c_1 = 0;
|
||||
c_1 = half4(float4(0.0, 0.0, 0.0, 0.0));
|
||||
float tmpvar_2;
|
||||
float tmpvar_2 = 0;
|
||||
tmpvar_2 = (_mtl_i.xlv_TEXCOORD0.x / 2.0);
|
||||
float tmpvar_3;
|
||||
float tmpvar_3 = 0;
|
||||
tmpvar_3 = (fract(abs(tmpvar_2)) * 2.0);
|
||||
float tmpvar_4;
|
||||
float tmpvar_4 = 0;
|
||||
if ((tmpvar_2 >= 0.0)) {
|
||||
tmpvar_4 = tmpvar_3;
|
||||
} else {
|
||||
tmpvar_4 = -(tmpvar_3);
|
||||
};
|
||||
c_1.x = half(tmpvar_4);
|
||||
float2 tmpvar_5;
|
||||
float2 tmpvar_5 = 0;
|
||||
tmpvar_5 = (_mtl_i.xlv_TEXCOORD0.xy / float2(2.0, 2.0));
|
||||
float2 tmpvar_6;
|
||||
float2 tmpvar_6 = 0;
|
||||
tmpvar_6 = (fract(abs(tmpvar_5)) * float2(2.0, 2.0));
|
||||
float tmpvar_7;
|
||||
float tmpvar_7 = 0;
|
||||
if ((tmpvar_5.x >= 0.0)) {
|
||||
tmpvar_7 = tmpvar_6.x;
|
||||
} else {
|
||||
tmpvar_7 = -(tmpvar_6.x);
|
||||
};
|
||||
float tmpvar_8;
|
||||
float tmpvar_8 = 0;
|
||||
if ((tmpvar_5.y >= 0.0)) {
|
||||
tmpvar_8 = tmpvar_6.y;
|
||||
} else {
|
||||
tmpvar_8 = -(tmpvar_6.y);
|
||||
};
|
||||
float2 tmpvar_9;
|
||||
float2 tmpvar_9 = 0;
|
||||
tmpvar_9.x = tmpvar_7;
|
||||
tmpvar_9.y = tmpvar_8;
|
||||
c_1.xy = ((half2)((float2)c_1.xy + tmpvar_9));
|
||||
float3 tmpvar_10;
|
||||
c_1.xy = ((half2)((float2)(c_1.xy) + tmpvar_9));
|
||||
float3 tmpvar_10 = 0;
|
||||
tmpvar_10 = (_mtl_i.xlv_TEXCOORD0.xyz / float3(2.0, 2.0, 2.0));
|
||||
float3 tmpvar_11;
|
||||
float3 tmpvar_11 = 0;
|
||||
tmpvar_11 = (fract(abs(tmpvar_10)) * float3(2.0, 2.0, 2.0));
|
||||
float tmpvar_12;
|
||||
float tmpvar_12 = 0;
|
||||
if ((tmpvar_10.x >= 0.0)) {
|
||||
tmpvar_12 = tmpvar_11.x;
|
||||
} else {
|
||||
tmpvar_12 = -(tmpvar_11.x);
|
||||
};
|
||||
float tmpvar_13;
|
||||
float tmpvar_13 = 0;
|
||||
if ((tmpvar_10.y >= 0.0)) {
|
||||
tmpvar_13 = tmpvar_11.y;
|
||||
} else {
|
||||
tmpvar_13 = -(tmpvar_11.y);
|
||||
};
|
||||
float tmpvar_14;
|
||||
float tmpvar_14 = 0;
|
||||
if ((tmpvar_10.z >= 0.0)) {
|
||||
tmpvar_14 = tmpvar_11.z;
|
||||
} else {
|
||||
tmpvar_14 = -(tmpvar_11.z);
|
||||
};
|
||||
float3 tmpvar_15;
|
||||
float3 tmpvar_15 = 0;
|
||||
tmpvar_15.x = tmpvar_12;
|
||||
tmpvar_15.y = tmpvar_13;
|
||||
tmpvar_15.z = tmpvar_14;
|
||||
c_1.xyz = ((half3)((float3)c_1.xyz + tmpvar_15));
|
||||
float4 tmpvar_16;
|
||||
c_1.xyz = ((half3)((float3)(c_1.xyz) + tmpvar_15));
|
||||
float4 tmpvar_16 = 0;
|
||||
tmpvar_16 = (_mtl_i.xlv_TEXCOORD0 / float4(2.0, 2.0, 2.0, 2.0));
|
||||
float4 tmpvar_17;
|
||||
float4 tmpvar_17 = 0;
|
||||
tmpvar_17 = (fract(abs(tmpvar_16)) * float4(2.0, 2.0, 2.0, 2.0));
|
||||
float tmpvar_18;
|
||||
float tmpvar_18 = 0;
|
||||
if ((tmpvar_16.x >= 0.0)) {
|
||||
tmpvar_18 = tmpvar_17.x;
|
||||
} else {
|
||||
tmpvar_18 = -(tmpvar_17.x);
|
||||
};
|
||||
float tmpvar_19;
|
||||
float tmpvar_19 = 0;
|
||||
if ((tmpvar_16.y >= 0.0)) {
|
||||
tmpvar_19 = tmpvar_17.y;
|
||||
} else {
|
||||
tmpvar_19 = -(tmpvar_17.y);
|
||||
};
|
||||
float tmpvar_20;
|
||||
float tmpvar_20 = 0;
|
||||
if ((tmpvar_16.z >= 0.0)) {
|
||||
tmpvar_20 = tmpvar_17.z;
|
||||
} else {
|
||||
tmpvar_20 = -(tmpvar_17.z);
|
||||
};
|
||||
float tmpvar_21;
|
||||
float tmpvar_21 = 0;
|
||||
if ((tmpvar_16.w >= 0.0)) {
|
||||
tmpvar_21 = tmpvar_17.w;
|
||||
} else {
|
||||
tmpvar_21 = -(tmpvar_17.w);
|
||||
};
|
||||
float4 tmpvar_22;
|
||||
float4 tmpvar_22 = 0;
|
||||
tmpvar_22.x = tmpvar_18;
|
||||
tmpvar_22.y = tmpvar_19;
|
||||
tmpvar_22.z = tmpvar_20;
|
||||
tmpvar_22.w = tmpvar_21;
|
||||
c_1 = ((half4)((float4)c_1 + tmpvar_22));
|
||||
float tmpvar_23;
|
||||
half ip_24;
|
||||
int tmpvar_25;
|
||||
c_1 = ((half4)((float4)(c_1) + tmpvar_22));
|
||||
float tmpvar_23 = 0;
|
||||
half ip_24 = 0;
|
||||
int tmpvar_25 = 0;
|
||||
tmpvar_25 = int(_mtl_i.xlv_TEXCOORD0.x);
|
||||
ip_24 = half(float(tmpvar_25));
|
||||
tmpvar_23 = (_mtl_i.xlv_TEXCOORD0.x - (float)ip_24);
|
||||
c_1.x = ((half)((float)c_1.x + tmpvar_23));
|
||||
float2 tmpvar_26;
|
||||
int2 tmpvar_27;
|
||||
tmpvar_23 = (_mtl_i.xlv_TEXCOORD0.x - (float)(ip_24));
|
||||
c_1.x = ((half)((float)(c_1.x) + tmpvar_23));
|
||||
float2 tmpvar_26 = 0;
|
||||
int2 tmpvar_27 = 0;
|
||||
tmpvar_27 = int2(_mtl_i.xlv_TEXCOORD0.xy);
|
||||
half2 tmpvar_28;
|
||||
half2 tmpvar_28 = 0;
|
||||
tmpvar_28 = half2(float2(tmpvar_27));
|
||||
tmpvar_26 = (_mtl_i.xlv_TEXCOORD0.xy - (float2)tmpvar_28);
|
||||
c_1.xy = ((half2)((float2)c_1.xy + tmpvar_26));
|
||||
float3 tmpvar_29;
|
||||
int3 tmpvar_30;
|
||||
tmpvar_26 = (_mtl_i.xlv_TEXCOORD0.xy - (float2)(tmpvar_28));
|
||||
c_1.xy = ((half2)((float2)(c_1.xy) + tmpvar_26));
|
||||
float3 tmpvar_29 = 0;
|
||||
int3 tmpvar_30 = 0;
|
||||
tmpvar_30 = int3(_mtl_i.xlv_TEXCOORD0.xyz);
|
||||
half3 tmpvar_31;
|
||||
half3 tmpvar_31 = 0;
|
||||
tmpvar_31 = half3(float3(tmpvar_30));
|
||||
tmpvar_29 = (_mtl_i.xlv_TEXCOORD0.xyz - (float3)tmpvar_31);
|
||||
c_1.xyz = ((half3)((float3)c_1.xyz + tmpvar_29));
|
||||
float4 tmpvar_32;
|
||||
int4 tmpvar_33;
|
||||
tmpvar_29 = (_mtl_i.xlv_TEXCOORD0.xyz - (float3)(tmpvar_31));
|
||||
c_1.xyz = ((half3)((float3)(c_1.xyz) + tmpvar_29));
|
||||
float4 tmpvar_32 = 0;
|
||||
int4 tmpvar_33 = 0;
|
||||
tmpvar_33 = int4(_mtl_i.xlv_TEXCOORD0);
|
||||
half4 tmpvar_34;
|
||||
half4 tmpvar_34 = 0;
|
||||
tmpvar_34 = half4(float4(tmpvar_33));
|
||||
tmpvar_32 = (_mtl_i.xlv_TEXCOORD0 - (float4)tmpvar_34);
|
||||
c_1 = ((half4)((float4)c_1 + tmpvar_32));
|
||||
float tmpvar_35;
|
||||
tmpvar_32 = (_mtl_i.xlv_TEXCOORD0 - (float4)(tmpvar_34));
|
||||
c_1 = ((half4)((float4)(c_1) + tmpvar_32));
|
||||
float tmpvar_35 = 0;
|
||||
tmpvar_35 = (float(fmod (_mtl_i.xlv_TEXCOORD0.x, (float)tmpvar_34.x)));
|
||||
c_1.x = half(((float)c_1.x + tmpvar_35));
|
||||
float2 tmpvar_36;
|
||||
c_1.x = half(((float)(c_1.x) + tmpvar_35));
|
||||
float2 tmpvar_36 = 0;
|
||||
tmpvar_36 = (float2(fmod (_mtl_i.xlv_TEXCOORD0.xy, (float2)tmpvar_34.xy)));
|
||||
c_1.xy = half2(((float2)c_1.xy + tmpvar_36));
|
||||
float3 tmpvar_37;
|
||||
c_1.xy = half2(((float2)(c_1.xy) + tmpvar_36));
|
||||
float3 tmpvar_37 = 0;
|
||||
tmpvar_37 = (float3(fmod (_mtl_i.xlv_TEXCOORD0.xyz, (float3)tmpvar_34.xyz)));
|
||||
c_1.xyz = half3(((float3)c_1.xyz + tmpvar_37));
|
||||
float tmpvar_38;
|
||||
c_1.xyz = half3(((float3)(c_1.xyz) + tmpvar_37));
|
||||
float tmpvar_38 = 0;
|
||||
tmpvar_38 = (1.0/(_mtl_i.xlv_TEXCOORD0.x));
|
||||
c_1.x = half(((float)c_1.x + tmpvar_38));
|
||||
float tmpvar_39;
|
||||
c_1.x = half(((float)(c_1.x) + tmpvar_38));
|
||||
float tmpvar_39 = 0;
|
||||
tmpvar_39 = max (0.0, tmpvar_38);
|
||||
c_1.x = half(((float)c_1.x + tmpvar_39));
|
||||
c_1.x = half(((float)(c_1.x) + tmpvar_39));
|
||||
c_1.y = (c_1.y + ((half)1.0/(c_1.z)));
|
||||
c_1.y = (c_1.y + max ((half)0.0, ((half)1.0/(c_1.w))));
|
||||
float tmpvar_40;
|
||||
float tmpvar_40 = 0;
|
||||
tmpvar_40 = max (_mtl_i.xlv_TEXCOORD0.x, (float)c_1.z);
|
||||
c_1.x = half(((float)c_1.x + tmpvar_40));
|
||||
c_1.x = half(((float)(c_1.x) + tmpvar_40));
|
||||
_mtl_o._fragData = c_1;
|
||||
return _mtl_o;
|
||||
}
|
||||
|
@ -15,14 +15,14 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _MainTex [[texture(0)]], sampler _mtlsmp__MainTex [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 tmpvar_1;
|
||||
half3 light_2;
|
||||
half4 col_3;
|
||||
half4 tmpvar_1 = 0;
|
||||
half3 light_2 = 0;
|
||||
half4 col_3 = 0;
|
||||
col_3 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_uv));
|
||||
light_2 = ((col_3.xyz * _mtl_i.xlv_nl.x) * _mtl_u._TerrainTreeLightColors[0].xyz);
|
||||
light_2 = (light_2 + ((col_3.xyz * _mtl_i.xlv_nl.y) * _mtl_u._TerrainTreeLightColors[1].xyz));
|
||||
light_2 = (light_2 + ((col_3.xyz * _mtl_i.xlv_nl.z) * _mtl_u._TerrainTreeLightColors[2].xyz));
|
||||
half4 tmpvar_4;
|
||||
half4 tmpvar_4 = 0;
|
||||
tmpvar_4.w = half(1.0);
|
||||
tmpvar_4.xyz = light_2;
|
||||
tmpvar_1 = tmpvar_4;
|
||||
|
@ -15,17 +15,17 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _MainTex [[texture(0)]], sampler _mtlsmp__MainTex [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 tmpvar_1;
|
||||
half3 light_2;
|
||||
half4 tmpvar_3;
|
||||
half4 tmpvar_1 = 0;
|
||||
half3 light_2 = 0;
|
||||
half4 tmpvar_3 = 0;
|
||||
tmpvar_3 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_uv));
|
||||
if ((tmpvar_3.w < (half)0.5)) {
|
||||
if ((tmpvar_3.w < (half)(0.5))) {
|
||||
discard_fragment();
|
||||
};
|
||||
light_2 = ((tmpvar_3.xyz * _mtl_i.xlv_nl.x) * _mtl_u._TerrainTreeLightColors[0].xyz);
|
||||
light_2 = (light_2 + ((tmpvar_3.xyz * _mtl_i.xlv_nl.y) * _mtl_u._TerrainTreeLightColors[1].xyz));
|
||||
light_2 = (light_2 + ((tmpvar_3.xyz * _mtl_i.xlv_nl.z) * _mtl_u._TerrainTreeLightColors[2].xyz));
|
||||
half4 tmpvar_4;
|
||||
half4 tmpvar_4 = 0;
|
||||
tmpvar_4.w = half(1.0);
|
||||
tmpvar_4.xyz = light_2;
|
||||
tmpvar_1 = tmpvar_4;
|
||||
|
@ -23,18 +23,18 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _DecalNorm [[texture(1)]], sampler _mtlsmp__DecalNorm [[sampler(1)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 res_1;
|
||||
half3 worldN_2;
|
||||
half3 combinedNormal_3;
|
||||
half3 tmpvar_4;
|
||||
tmpvar_4 = ((_DecalNorm.sample(_mtlsmp__DecalNorm, (float2)(_mtl_i.xlv_TEXCOORD0.zw)).xyz * (half)2.0) - (half)1.0);
|
||||
half3 tmpvar_5;
|
||||
tmpvar_5 = ((_PanelNorm.sample(_mtlsmp__PanelNorm, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).xyz * (half)2.0) - (half)1.0);
|
||||
half3 tmpvar_6;
|
||||
half4 res_1 = 0;
|
||||
half3 worldN_2 = 0;
|
||||
half3 combinedNormal_3 = 0;
|
||||
half3 tmpvar_4 = 0;
|
||||
tmpvar_4 = ((_DecalNorm.sample(_mtlsmp__DecalNorm, (float2)(_mtl_i.xlv_TEXCOORD0.zw)).xyz * (half)(2.0)) - (half)(1.0));
|
||||
half3 tmpvar_5 = 0;
|
||||
tmpvar_5 = ((_PanelNorm.sample(_mtlsmp__PanelNorm, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).xyz * (half)(2.0)) - (half)(1.0));
|
||||
half3 tmpvar_6 = 0;
|
||||
tmpvar_6.x = tmpvar_4.z;
|
||||
tmpvar_6.y = tmpvar_4.y;
|
||||
tmpvar_6.z = -(tmpvar_4.x);
|
||||
half3 tmpvar_7;
|
||||
half3 tmpvar_7 = 0;
|
||||
tmpvar_7.x = tmpvar_4.x;
|
||||
tmpvar_7.y = tmpvar_4.z;
|
||||
tmpvar_7.z = -(tmpvar_4.y);
|
||||
@ -50,33 +50,33 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
tmpvar_9[2].y = tmpvar_7.z;
|
||||
tmpvar_9[2].z = tmpvar_4.z;
|
||||
tmpvar_8 = _xlcast_float3x3(tmpvar_9);
|
||||
float3 v_10;
|
||||
float3 v_10 = 0;
|
||||
v_10.x = tmpvar_8[0].x;
|
||||
v_10.y = tmpvar_8[1].x;
|
||||
v_10.z = tmpvar_8[2].x;
|
||||
float3 v_11;
|
||||
float3 v_11 = 0;
|
||||
v_11.x = tmpvar_8[0].y;
|
||||
v_11.y = tmpvar_8[1].y;
|
||||
v_11.z = tmpvar_8[2].y;
|
||||
float3 v_12;
|
||||
float3 v_12 = 0;
|
||||
v_12.x = tmpvar_8[0].z;
|
||||
v_12.y = tmpvar_8[1].z;
|
||||
v_12.z = tmpvar_8[2].z;
|
||||
combinedNormal_3 = normalize(((
|
||||
((half3)((float)tmpvar_5.x * v_10))
|
||||
((half3)((float)(tmpvar_5.x) * v_10))
|
||||
+
|
||||
((half3)((float)tmpvar_5.y * v_11))
|
||||
) + ((half3)((float)tmpvar_5.z * v_12))));
|
||||
float tmpvar_13;
|
||||
((half3)((float)(tmpvar_5.y) * v_11))
|
||||
) + ((half3)((float)(tmpvar_5.z) * v_12))));
|
||||
float tmpvar_13 = 0;
|
||||
tmpvar_13 = dot (_mtl_i.xlv_TEXCOORD1.xyz, (float3)combinedNormal_3);
|
||||
worldN_2.x = half(tmpvar_13);
|
||||
float tmpvar_14;
|
||||
float tmpvar_14 = 0;
|
||||
tmpvar_14 = dot (_mtl_i.xlv_TEXCOORD2.xyz, (float3)combinedNormal_3);
|
||||
worldN_2.y = half(tmpvar_14);
|
||||
float tmpvar_15;
|
||||
float tmpvar_15 = 0;
|
||||
tmpvar_15 = dot (_mtl_i.xlv_TEXCOORD3.xyz, (float3)combinedNormal_3);
|
||||
worldN_2.z = half(tmpvar_15);
|
||||
res_1.xyz = ((worldN_2 * (half)0.5) + (half)0.5);
|
||||
res_1.xyz = ((worldN_2 * (half)(0.5)) + (half)(0.5));
|
||||
res_1.w = half(0.0);
|
||||
_mtl_o._fragData = res_1;
|
||||
return _mtl_o;
|
||||
|
@ -28,11 +28,11 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half2x2 halfMatrix_1;
|
||||
float2x2 rotationMatrix_2;
|
||||
float tmpvar_3;
|
||||
float tmpvar_4;
|
||||
float tmpvar_3 = 0;
|
||||
float tmpvar_4 = 0;
|
||||
tmpvar_4 = (_mtl_u._Speed * _mtl_u._Time.x);
|
||||
tmpvar_3 = sin(tmpvar_4);
|
||||
float tmpvar_5;
|
||||
float tmpvar_5 = 0;
|
||||
tmpvar_5 = cos(tmpvar_4);
|
||||
float2x2 tmpvar_6;
|
||||
tmpvar_6[0].x = tmpvar_5;
|
||||
@ -50,14 +50,14 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
tmpvar_7[1].x = -(tmpvar_3);
|
||||
tmpvar_7[1].y = tmpvar_5;
|
||||
halfMatrix_1 = _xlcast_half2x2(tmpvar_7);
|
||||
halfMatrix_1 = (halfMatrix_1 * (half)2.0);
|
||||
halfMatrix_1 = (halfMatrix_1 * (half)(2.0));
|
||||
halfMatrix_1 = (halfMatrix_1 - _xlinit_half2x2(1.0));
|
||||
halfMatrix_1 = _xlcast_half2x2(((float2x2)(_xlinit_half2x2(tmpvar_3) - halfMatrix_1)));
|
||||
halfMatrix_1 = _xlcast_half2x2(((float2x2)(_xlinit_half2x2(tmpvar_5) + halfMatrix_1)));
|
||||
halfMatrix_1 = _xlcast_half2x2(((float2x2)(halfMatrix_1 * (1.0h/half(tmpvar_3)))));
|
||||
float4 tmpvar_8;
|
||||
float4 tmpvar_8 = 0;
|
||||
tmpvar_8.xy = (rotationMatrix_2 * _mtl_i.uv);
|
||||
tmpvar_8.zw = ((float2)(halfMatrix_1 * (half2)_mtl_i.uv));
|
||||
tmpvar_8.zw = ((float2)(halfMatrix_1 * (half2)(_mtl_i.uv)));
|
||||
_mtl_o._fragData = half4(tmpvar_8);
|
||||
return _mtl_o;
|
||||
}
|
||||
|
@ -13,9 +13,9 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
float4 tmpvar_2;
|
||||
tmpvar_2 = ((float4)_mtl_i.xlv_COLOR0 * _mtl_u._Color);
|
||||
half4 c_1 = 0;
|
||||
float4 tmpvar_2 = 0;
|
||||
tmpvar_2 = ((float4)(_mtl_i.xlv_COLOR0) * _mtl_u._Color);
|
||||
c_1 = half4(tmpvar_2);
|
||||
_mtl_o._glesFragData_0 = c_1;
|
||||
return _mtl_o;
|
||||
|
@ -14,10 +14,10 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half tmpvar_2;
|
||||
half4 c_1 = 0;
|
||||
half tmpvar_2 = 0;
|
||||
tmpvar_2 = dot (_mtl_i.normal, _mtl_i.halfDir);
|
||||
half4 tmpvar_3;
|
||||
half4 tmpvar_3 = 0;
|
||||
tmpvar_3 = half4(pow (tmpvar_2, _mtl_u.specPower));
|
||||
c_1 = tmpvar_3;
|
||||
_mtl_o._fragData = c_1;
|
||||
|
@ -13,13 +13,13 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 r_1;
|
||||
half3 lightCoord_2;
|
||||
float4 tmpvar_3;
|
||||
half4 r_1 = 0;
|
||||
half3 lightCoord_2 = 0;
|
||||
float4 tmpvar_3 = 0;
|
||||
tmpvar_3.w = 1.0;
|
||||
tmpvar_3.xyz = _mtl_u._WorldPos;
|
||||
float3 tmpvar_4;
|
||||
tmpvar_4 = ((float4)(_mtl_u._LightMatrix * (half4)tmpvar_3)).xyz;
|
||||
float3 tmpvar_4 = 0;
|
||||
tmpvar_4 = ((float4)(_mtl_u._LightMatrix * (half4)(tmpvar_3))).xyz;
|
||||
lightCoord_2 = half3(tmpvar_4);
|
||||
r_1.xyz = lightCoord_2;
|
||||
r_1.w = half(1.0);
|
||||
|
@ -12,7 +12,7 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half4 c_1 = 0;
|
||||
half3x3 tmpvar_2;
|
||||
tmpvar_2[0].x = half(0.8164966);
|
||||
tmpvar_2[0].y = half(-0.4082483);
|
||||
|
@ -18,21 +18,21 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texturecube<float> cubehigh [[texture(5)]], sampler _mtlsmp_cubehigh [[sampler(5)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half4 tmpvar_2;
|
||||
half4 c_1 = 0;
|
||||
half4 tmpvar_2 = 0;
|
||||
tmpvar_2 = texlow.sample(_mtlsmp_texlow, (float2)(_mtl_i.varUV.xy));
|
||||
c_1 = tmpvar_2;
|
||||
c_1 = (c_1 + texmed.sample(_mtlsmp_texmed, (float2)(_mtl_i.varUV.xy)));
|
||||
float4 tmpvar_3;
|
||||
float4 tmpvar_3 = 0;
|
||||
tmpvar_3 = texhigh.sample(_mtlsmp_texhigh, (float2)(_mtl_i.varUV.xy));
|
||||
c_1 = half4(((float4)c_1 + tmpvar_3));
|
||||
half4 tmpvar_4;
|
||||
c_1 = half4(((float4)(c_1) + tmpvar_3));
|
||||
half4 tmpvar_4 = 0;
|
||||
tmpvar_4 = cubelow.sample(_mtlsmp_cubelow, (float3)(_mtl_i.varUV.xyz));
|
||||
c_1 = (c_1 + tmpvar_4);
|
||||
c_1 = (c_1 + cubemed.sample(_mtlsmp_cubemed, (float3)(_mtl_i.varUV.xyz)));
|
||||
float4 tmpvar_5;
|
||||
float4 tmpvar_5 = 0;
|
||||
tmpvar_5 = cubehigh.sample(_mtlsmp_cubehigh, (float3)(_mtl_i.varUV.xyz));
|
||||
c_1 = half4(((float4)c_1 + tmpvar_5));
|
||||
c_1 = half4(((float4)(c_1) + tmpvar_5));
|
||||
_mtl_o._fragData = c_1;
|
||||
return _mtl_o;
|
||||
}
|
||||
|
@ -12,45 +12,45 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half4 c_1 = 0;
|
||||
c_1 = half4(float4(0.0, 0.0, 0.0, 0.0));
|
||||
float tmpvar_2;
|
||||
float tmpvar_2 = 0;
|
||||
if ((_mtl_i.xlv_TEXCOORD0.x > 0.5)) {
|
||||
tmpvar_2 = 0.9;
|
||||
} else {
|
||||
tmpvar_2 = 0.1;
|
||||
};
|
||||
c_1 = half4(float4(tmpvar_2));
|
||||
float4 tmpvar_3;
|
||||
float4 tmpvar_3 = 0;
|
||||
if ((_mtl_i.xlv_TEXCOORD0.x > 0.5)) {
|
||||
tmpvar_3 = float4(0.9, 0.9, 0.9, 0.9);
|
||||
} else {
|
||||
tmpvar_3 = float4(0.1, 0.1, 0.1, 0.1);
|
||||
};
|
||||
c_1 = ((half4)(float4(tmpvar_2) + tmpvar_3));
|
||||
float3 tmpvar_4;
|
||||
float3 tmpvar_4 = 0;
|
||||
if ((_mtl_i.xlv_TEXCOORD0.x > 0.5)) {
|
||||
tmpvar_4 = float3(0.9, 0.9, 0.9);
|
||||
} else {
|
||||
tmpvar_4 = float3(0.1, 0.1, 0.1);
|
||||
};
|
||||
c_1.xyz = (c_1.xyz + (half3)tmpvar_4);
|
||||
float2 tmpvar_5;
|
||||
c_1.xyz = (c_1.xyz + (half3)(tmpvar_4));
|
||||
float2 tmpvar_5 = 0;
|
||||
if ((_mtl_i.xlv_TEXCOORD0.x > 0.5)) {
|
||||
tmpvar_5 = float2(0.9, 0.9);
|
||||
} else {
|
||||
tmpvar_5 = float2(0.1, 0.1);
|
||||
};
|
||||
c_1.xy = (c_1.xy + (half2)tmpvar_5);
|
||||
float tmpvar_6;
|
||||
c_1.xy = (c_1.xy + (half2)(tmpvar_5));
|
||||
float tmpvar_6 = 0;
|
||||
tmpvar_6 = fract(_mtl_i.xlv_TEXCOORD0.x);
|
||||
float tmpvar_7;
|
||||
float tmpvar_7 = 0;
|
||||
if (bool(tmpvar_6)) {
|
||||
tmpvar_7 = 0.9;
|
||||
} else {
|
||||
tmpvar_7 = 0.1;
|
||||
};
|
||||
c_1.x = (c_1.x + (half)tmpvar_7);
|
||||
c_1.x = (c_1.x + (half)(tmpvar_7));
|
||||
_mtl_o._fragData = c_1;
|
||||
return _mtl_o;
|
||||
}
|
||||
|
@ -12,164 +12,164 @@ struct xlatMtlShaderUniform {
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 tmpvar_1;
|
||||
float4 a_2;
|
||||
half4 tmpvar_1 = 0;
|
||||
float4 a_2 = 0;
|
||||
a_2 = float4(0.0, 0.0, 0.0, 0.0);
|
||||
bool4 tmpvar_3;
|
||||
bool4 tmpvar_3 = false;
|
||||
tmpvar_3 = bool4((_mtl_i.xlv_TEXCOORD0 > float4(0.5, 0.5, 0.5, 0.5)));
|
||||
float tmpvar_4;
|
||||
float tmpvar_4 = 0;
|
||||
if (tmpvar_3.x) {
|
||||
tmpvar_4 = 1.0;
|
||||
} else {
|
||||
tmpvar_4 = 5.0;
|
||||
};
|
||||
float tmpvar_5;
|
||||
float tmpvar_5 = 0;
|
||||
if (tmpvar_3.y) {
|
||||
tmpvar_5 = 2.0;
|
||||
} else {
|
||||
tmpvar_5 = 6.0;
|
||||
};
|
||||
float tmpvar_6;
|
||||
float tmpvar_6 = 0;
|
||||
if (tmpvar_3.z) {
|
||||
tmpvar_6 = 3.0;
|
||||
} else {
|
||||
tmpvar_6 = 7.0;
|
||||
};
|
||||
float tmpvar_7;
|
||||
float tmpvar_7 = 0;
|
||||
if (tmpvar_3.w) {
|
||||
tmpvar_7 = 4.0;
|
||||
} else {
|
||||
tmpvar_7 = 8.0;
|
||||
};
|
||||
float4 tmpvar_8;
|
||||
float4 tmpvar_8 = 0;
|
||||
tmpvar_8.x = tmpvar_4;
|
||||
tmpvar_8.y = tmpvar_5;
|
||||
tmpvar_8.z = tmpvar_6;
|
||||
tmpvar_8.w = tmpvar_7;
|
||||
a_2 = tmpvar_8;
|
||||
bool4 tmpvar_9;
|
||||
bool4 tmpvar_9 = false;
|
||||
tmpvar_9 = bool4((_mtl_i.xlv_TEXCOORD0 > float4(0.5, 0.5, 0.5, 0.5)));
|
||||
float tmpvar_10;
|
||||
float tmpvar_10 = 0;
|
||||
if (tmpvar_9.x) {
|
||||
tmpvar_10 = 1.0;
|
||||
} else {
|
||||
tmpvar_10 = 5.0;
|
||||
};
|
||||
float tmpvar_11;
|
||||
float tmpvar_11 = 0;
|
||||
if (tmpvar_9.y) {
|
||||
tmpvar_11 = 2.0;
|
||||
} else {
|
||||
tmpvar_11 = 6.0;
|
||||
};
|
||||
float tmpvar_12;
|
||||
float tmpvar_12 = 0;
|
||||
if (tmpvar_9.z) {
|
||||
tmpvar_12 = 3.0;
|
||||
} else {
|
||||
tmpvar_12 = 7.0;
|
||||
};
|
||||
float tmpvar_13;
|
||||
float tmpvar_13 = 0;
|
||||
if (tmpvar_9.w) {
|
||||
tmpvar_13 = 4.0;
|
||||
} else {
|
||||
tmpvar_13 = 8.0;
|
||||
};
|
||||
float4 tmpvar_14;
|
||||
float4 tmpvar_14 = 0;
|
||||
tmpvar_14.x = tmpvar_10;
|
||||
tmpvar_14.y = tmpvar_11;
|
||||
tmpvar_14.z = tmpvar_12;
|
||||
tmpvar_14.w = tmpvar_13;
|
||||
a_2 = (tmpvar_8 + tmpvar_14);
|
||||
bool4 tmpvar_15;
|
||||
bool4 tmpvar_15 = false;
|
||||
tmpvar_15 = bool4((_mtl_i.xlv_TEXCOORD0 > float4(0.5, 0.5, 0.5, 0.5)));
|
||||
float tmpvar_16;
|
||||
float tmpvar_16 = 0;
|
||||
if (tmpvar_15.x) {
|
||||
tmpvar_16 = 1.0;
|
||||
} else {
|
||||
tmpvar_16 = 2.0;
|
||||
};
|
||||
float tmpvar_17;
|
||||
float tmpvar_17 = 0;
|
||||
if (tmpvar_15.y) {
|
||||
tmpvar_17 = 1.0;
|
||||
} else {
|
||||
tmpvar_17 = 2.0;
|
||||
};
|
||||
float tmpvar_18;
|
||||
float tmpvar_18 = 0;
|
||||
if (tmpvar_15.z) {
|
||||
tmpvar_18 = 1.0;
|
||||
} else {
|
||||
tmpvar_18 = 2.0;
|
||||
};
|
||||
float tmpvar_19;
|
||||
float tmpvar_19 = 0;
|
||||
if (tmpvar_15.w) {
|
||||
tmpvar_19 = 1.0;
|
||||
} else {
|
||||
tmpvar_19 = 2.0;
|
||||
};
|
||||
float4 tmpvar_20;
|
||||
float4 tmpvar_20 = 0;
|
||||
tmpvar_20.x = tmpvar_16;
|
||||
tmpvar_20.y = tmpvar_17;
|
||||
tmpvar_20.z = tmpvar_18;
|
||||
tmpvar_20.w = tmpvar_19;
|
||||
a_2 = (a_2 + tmpvar_20);
|
||||
bool4 tmpvar_21;
|
||||
bool4 tmpvar_21 = false;
|
||||
tmpvar_21 = bool4((_mtl_i.xlv_TEXCOORD0 > float4(0.5, 0.5, 0.5, 0.5)));
|
||||
float tmpvar_22;
|
||||
float tmpvar_22 = 0;
|
||||
if (tmpvar_21.x) {
|
||||
tmpvar_22 = 1.0;
|
||||
} else {
|
||||
tmpvar_22 = 2.0;
|
||||
};
|
||||
float tmpvar_23;
|
||||
float tmpvar_23 = 0;
|
||||
if (tmpvar_21.y) {
|
||||
tmpvar_23 = 1.0;
|
||||
} else {
|
||||
tmpvar_23 = 2.0;
|
||||
};
|
||||
float tmpvar_24;
|
||||
float tmpvar_24 = 0;
|
||||
if (tmpvar_21.z) {
|
||||
tmpvar_24 = 1.0;
|
||||
} else {
|
||||
tmpvar_24 = 2.0;
|
||||
};
|
||||
float tmpvar_25;
|
||||
float tmpvar_25 = 0;
|
||||
if (tmpvar_21.w) {
|
||||
tmpvar_25 = 1.0;
|
||||
} else {
|
||||
tmpvar_25 = 2.0;
|
||||
};
|
||||
float4 tmpvar_26;
|
||||
float4 tmpvar_26 = 0;
|
||||
tmpvar_26.x = tmpvar_22;
|
||||
tmpvar_26.y = tmpvar_23;
|
||||
tmpvar_26.z = tmpvar_24;
|
||||
tmpvar_26.w = tmpvar_25;
|
||||
a_2 = (a_2 + tmpvar_26);
|
||||
bool4 tmpvar_27;
|
||||
bool4 tmpvar_27 = false;
|
||||
tmpvar_27 = bool4(fract(_mtl_i.xlv_TEXCOORD0));
|
||||
float tmpvar_28;
|
||||
float tmpvar_28 = 0;
|
||||
if (tmpvar_27.x) {
|
||||
tmpvar_28 = 1.0;
|
||||
} else {
|
||||
tmpvar_28 = 2.0;
|
||||
};
|
||||
float tmpvar_29;
|
||||
float tmpvar_29 = 0;
|
||||
if (tmpvar_27.y) {
|
||||
tmpvar_29 = 1.0;
|
||||
} else {
|
||||
tmpvar_29 = 2.0;
|
||||
};
|
||||
float tmpvar_30;
|
||||
float tmpvar_30 = 0;
|
||||
if (tmpvar_27.z) {
|
||||
tmpvar_30 = 1.0;
|
||||
} else {
|
||||
tmpvar_30 = 2.0;
|
||||
};
|
||||
float tmpvar_31;
|
||||
float tmpvar_31 = 0;
|
||||
if (tmpvar_27.w) {
|
||||
tmpvar_31 = 1.0;
|
||||
} else {
|
||||
tmpvar_31 = 2.0;
|
||||
};
|
||||
float4 tmpvar_32;
|
||||
float4 tmpvar_32 = 0;
|
||||
tmpvar_32.x = tmpvar_28;
|
||||
tmpvar_32.y = tmpvar_29;
|
||||
tmpvar_32.z = tmpvar_30;
|
||||
|
@ -13,21 +13,21 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d_array<half> myarr [[texture(0)]], sampler _mtlsmp_myarr [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 tmpvar_1;
|
||||
float4 slod_2;
|
||||
half4 tmpvar_3;
|
||||
half4 tmpvar_1 = 0;
|
||||
float4 slod_2 = 0;
|
||||
half4 tmpvar_3 = 0;
|
||||
tmpvar_3 = myarr.sample(_mtlsmp_myarr, (float2)((_mtl_i.uv.xyz).xy), (uint)((_mtl_i.uv.xyz).z));
|
||||
float4 tmpvar_4;
|
||||
float4 tmpvar_4 = 0;
|
||||
tmpvar_4 = float4(tmpvar_3);
|
||||
half4 tmpvar_5;
|
||||
half4 tmpvar_5 = 0;
|
||||
tmpvar_5 = myarr.sample(_mtlsmp_myarr, (float2)((_mtl_i.uv.xyw).xy), (uint)((_mtl_i.uv.xyw).z));
|
||||
float4 tmpvar_6;
|
||||
float4 tmpvar_6 = 0;
|
||||
tmpvar_6 = float4(tmpvar_5);
|
||||
half4 tmpvar_7;
|
||||
half4 tmpvar_7 = 0;
|
||||
tmpvar_7 = myarr.sample(_mtlsmp_myarr, (float2)((_mtl_i.uv.xyz).xy), (uint)((_mtl_i.uv.xyz).z), bias(1.5));
|
||||
float4 tmpvar_8;
|
||||
float4 tmpvar_8 = 0;
|
||||
tmpvar_8 = float4(tmpvar_7);
|
||||
half4 tmpvar_9;
|
||||
half4 tmpvar_9 = 0;
|
||||
tmpvar_9 = myarr.sample(_mtlsmp_myarr, (float2)((_mtl_i.uv.xyz).xy), (uint)((_mtl_i.uv.xyz).z), level(2.5));
|
||||
slod_2 = float4(tmpvar_9);
|
||||
tmpvar_1 = half4(((tmpvar_4 + tmpvar_6) + (tmpvar_8 + slod_2)));
|
||||
|
@ -15,13 +15,13 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> tex [[texture(0)]], sampler _mtlsmp_tex [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half2 tmpvar_1;
|
||||
half2 tmpvar_1 = 0;
|
||||
tmpvar_1 = dfdx(_mtl_i.uv1.xy);
|
||||
half2 tmpvar_2;
|
||||
half2 tmpvar_2 = 0;
|
||||
tmpvar_2 = dfdy(_mtl_i.uv1.xy);
|
||||
float2 tmpvar_3;
|
||||
float2 tmpvar_3 = 0;
|
||||
tmpvar_3 = dfdx(_mtl_i.uv2.xy);
|
||||
float2 tmpvar_4;
|
||||
float2 tmpvar_4 = 0;
|
||||
tmpvar_4 = dfdy(_mtl_i.uv2.xy);
|
||||
_mtl_o._fragColor = ((tex.sample(_mtlsmp_tex, (float2)(_mtl_i.uv1.xy), gradient2d((float2)(tmpvar_1), (float2)(tmpvar_2))) + tex.sample(_mtlsmp_tex, (float2)(_mtl_i.uv2.xy), gradient2d((float2)(tmpvar_3), (float2)(tmpvar_4)))) + tex.sample(_mtlsmp_tex, (float2)(_mtl_i.uv2.xy), gradient2d((float2)(_mtl_i.uv1.xy), (float2)(_mtl_i.uv1.xy))));
|
||||
return _mtl_o;
|
||||
|
@ -15,11 +15,11 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> tex [[texture(0)]], sampler _mtlsmp_tex [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 tmpvar_1;
|
||||
half4 tmpvar_2;
|
||||
half4 tmpvar_1 = 0;
|
||||
half4 tmpvar_2 = 0;
|
||||
tmpvar_2 = tex.sample(_mtlsmp_tex, (float2)(_mtl_i.uvHi.xy), level(0.0));
|
||||
tmpvar_1 = tmpvar_2;
|
||||
half4 tmpvar_3;
|
||||
half4 tmpvar_3 = 0;
|
||||
tmpvar_3 = tex.sample(_mtlsmp_tex, (float2)(_mtl_i.uvMed.xy), level(_mtl_i.uvMed.z));
|
||||
_mtl_o._fragColor = (tmpvar_1 + tmpvar_3);
|
||||
return _mtl_o;
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include <metal_stdlib>
|
||||
#pragma clang diagnostic ignored "-Wparentheses-equality"
|
||||
using namespace metal;
|
||||
constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less);
|
||||
constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less_equal);
|
||||
struct xlatMtlShaderInput {
|
||||
float4 uvHi;
|
||||
half4 uvMed;
|
||||
@ -16,11 +16,11 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, depth2d<float> shadowmap [[texture(0)]], sampler _mtlsmp_shadowmap [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 r_1;
|
||||
half4 tmpvar_2;
|
||||
tmpvar_2 = half4((shadowmap.sample_compare(_mtl_xl_shadow_sampler, (float2)(_mtl_i.uvHi.xyz).xy, (float)(_mtl_i.uvHi.xyz).z) + shadowmap.sample_compare(_mtl_xl_shadow_sampler, (float2)(_mtl_i.uvHi).xy / (float)(_mtl_i.uvHi).w, (float)(_mtl_i.uvHi).z / (float)(_mtl_i.uvHi).w)));
|
||||
half4 r_1 = 0;
|
||||
half4 tmpvar_2 = 0;
|
||||
tmpvar_2 = half4((shadowmap.sample_compare(_mtl_xl_shadow_sampler, (float2)(_mtl_i.uvHi.xyz).xy, saturate((float)(_mtl_i.uvHi.xyz).z)) + shadowmap.sample_compare(_mtl_xl_shadow_sampler, (float2)(_mtl_i.uvHi).xy / (float)(_mtl_i.uvHi).w, saturate((float)(_mtl_i.uvHi).z / (float)(_mtl_i.uvHi).w))));
|
||||
r_1.yzw = tmpvar_2.yzw;
|
||||
r_1.x = (tmpvar_2.x + shadowmap.sample_compare(_mtl_xl_shadow_sampler, (float2)(_mtl_i.uvMed.xyz).xy, (float)(_mtl_i.uvMed.xyz).z));
|
||||
r_1.x = (tmpvar_2.x + shadowmap.sample_compare(_mtl_xl_shadow_sampler, (float2)(_mtl_i.uvMed.xyz).xy, saturate((float)(_mtl_i.uvMed.xyz).z)));
|
||||
_mtl_o._fragColor = r_1;
|
||||
return _mtl_o;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include <metal_stdlib>
|
||||
#pragma clang diagnostic ignored "-Wparentheses-equality"
|
||||
using namespace metal;
|
||||
constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less);
|
||||
constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less_equal);
|
||||
struct xlatMtlShaderInput {
|
||||
half4 uv;
|
||||
};
|
||||
@ -15,7 +15,7 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, depthcube<float> shadowmap [[texture(0)]], sampler _mtlsmp_shadowmap [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 tmpvar_1;
|
||||
half4 tmpvar_1 = 0;
|
||||
tmpvar_1 = half4(shadowmap.sample_compare(_mtl_xl_shadow_sampler, (float3)(_mtl_i.uv).xyz, (_mtl_i.uv).w));
|
||||
_mtl_o._fragColor = tmpvar_1;
|
||||
return _mtl_o;
|
||||
|
@ -14,7 +14,7 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture3d<half> vol [[texture(1)]], sampler _mtlsmp_vol [[sampler(1)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half4 c_1 = 0;
|
||||
c_1 = (tex.sample(_mtlsmp_tex, (float2)(_mtl_i.uv.xy)) + tex.sample(_mtlsmp_tex, (float2)(_mtl_i.uv.xy), bias(0.5)));
|
||||
c_1 = (c_1 + vol.sample(_mtlsmp_vol, (float3)(_mtl_i.uv)));
|
||||
c_1 = (c_1 + vol.sample(_mtlsmp_vol, (float3)(_mtl_i.uv), bias(-0.5)));
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include <metal_stdlib>
|
||||
#pragma clang diagnostic ignored "-Wparentheses-equality"
|
||||
using namespace metal;
|
||||
constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less);
|
||||
constexpr sampler _mtl_xl_shadow_sampler(address::clamp_to_edge, filter::linear, compare_func::less_equal);
|
||||
struct xlatMtlShaderInput {
|
||||
float4 uv;
|
||||
};
|
||||
@ -15,12 +15,12 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, depth2d<float> shadowmap [[texture(1)]], sampler _mtlsmp_shadowmap [[sampler(1)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half4 c_1 = 0;
|
||||
c_1 = (tex.sample(_mtlsmp_tex, ((float2)(_mtl_i.uv).xy / (float)(_mtl_i.uv).w)) + tex.sample(_mtlsmp_tex, ((float2)(_mtl_i.uv.xyz).xy / (float)(_mtl_i.uv.xyz).z)));
|
||||
c_1 = (c_1 + tex.sample(_mtlsmp_tex, ((float2)(_mtl_i.uv).xy / (float)(_mtl_i.uv).w), level(1.0)));
|
||||
c_1 = (c_1 + tex.sample(_mtlsmp_tex, ((float2)(_mtl_i.uv.xyz).xy / (float)(_mtl_i.uv.xyz).z), level(1.0)));
|
||||
c_1 = (c_1 + half4(shadowmap.sample_compare(_mtl_xl_shadow_sampler, (float2)(_mtl_i.uv.xyz).xy, (float)(_mtl_i.uv.xyz).z)));
|
||||
c_1 = (c_1 + half4(shadowmap.sample_compare(_mtl_xl_shadow_sampler, (float2)(_mtl_i.uv).xy / (float)(_mtl_i.uv).w, (float)(_mtl_i.uv).z / (float)(_mtl_i.uv).w)));
|
||||
c_1 = (c_1 + half4(shadowmap.sample_compare(_mtl_xl_shadow_sampler, (float2)(_mtl_i.uv.xyz).xy, saturate((float)(_mtl_i.uv.xyz).z))));
|
||||
c_1 = (c_1 + half4(shadowmap.sample_compare(_mtl_xl_shadow_sampler, (float2)(_mtl_i.uv).xy / (float)(_mtl_i.uv).w, saturate((float)(_mtl_i.uv).z / (float)(_mtl_i.uv).w))));
|
||||
_mtl_o._fragData = c_1;
|
||||
return _mtl_o;
|
||||
}
|
||||
|
44
3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/variables-initialization-inES3.txt
vendored
Normal file
44
3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/variables-initialization-inES3.txt
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
#version 300 es
|
||||
#define gl_FragData _glesFragData
|
||||
layout(location = 0) out mediump vec4 _glesFragData[1];
|
||||
|
||||
uniform sampler2D _MainTex;
|
||||
|
||||
struct u2v {
|
||||
vec4 pos;
|
||||
vec2 uv;
|
||||
};
|
||||
|
||||
struct v2f {
|
||||
vec4 pos;
|
||||
vec2 uv;
|
||||
};
|
||||
|
||||
v2f vert (u2v v) {
|
||||
v2f o;
|
||||
o.pos = v.pos;
|
||||
o.uv = v.uv;
|
||||
return o;
|
||||
}
|
||||
|
||||
vec4 frag (in v2f i) {
|
||||
vec4 foo;
|
||||
bool bar;
|
||||
mat4 mat;
|
||||
vec4 leet = vec4(0.5);
|
||||
vec4 col = texture(_MainTex, i.uv);
|
||||
col += bar ? foo : leet;
|
||||
col += mat[0];
|
||||
return col;
|
||||
}
|
||||
|
||||
in mediump vec2 xlv_TEXCOORD0;
|
||||
void main() {
|
||||
mediump vec4 xl_retval;
|
||||
v2f xlt_i;
|
||||
xlt_i.pos = vec4(0.0);
|
||||
xlt_i.uv = vec2(xlv_TEXCOORD0);
|
||||
xl_retval = frag(xlt_i);
|
||||
gl_FragData[0] = vec4(xl_retval);
|
||||
}
|
||||
|
32
3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/variables-initialization-outES3.txt
vendored
Normal file
32
3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/variables-initialization-outES3.txt
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
#version 300 es
|
||||
layout(location=0) out mediump vec4 _glesFragData[1];
|
||||
uniform sampler2D _MainTex;
|
||||
in mediump vec2 xlv_TEXCOORD0;
|
||||
void main ()
|
||||
{
|
||||
mediump vec4 xl_retval_1;
|
||||
lowp vec4 col_2;
|
||||
highp vec4 mat_0_3;
|
||||
bool bar_4;
|
||||
highp vec4 foo_5;
|
||||
lowp vec4 tmpvar_6;
|
||||
tmpvar_6 = texture (_MainTex, xlv_TEXCOORD0);
|
||||
col_2 = tmpvar_6;
|
||||
highp vec4 tmpvar_7;
|
||||
if (bar_4) {
|
||||
tmpvar_7 = foo_5;
|
||||
} else {
|
||||
tmpvar_7 = vec4(0.5, 0.5, 0.5, 0.5);
|
||||
};
|
||||
col_2 = (tmpvar_6 + tmpvar_7);
|
||||
col_2 = (col_2 + mat_0_3);
|
||||
xl_retval_1 = col_2;
|
||||
_glesFragData[0] = xl_retval_1;
|
||||
}
|
||||
|
||||
|
||||
// stats: 3 alu 1 tex 1 flow
|
||||
// inputs: 1
|
||||
// #0: xlv_TEXCOORD0 (medium float) 2x1 [-1]
|
||||
// textures: 1
|
||||
// #0: _MainTex (low 2d) 0x0 [-1]
|
42
3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/variables-initialization-outES3Metal.txt
vendored
Normal file
42
3rdparty/bgfx/3rdparty/glsl-optimizer/tests/fragment/variables-initialization-outES3Metal.txt
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
#include <metal_stdlib>
|
||||
#pragma clang diagnostic ignored "-Wparentheses-equality"
|
||||
using namespace metal;
|
||||
struct xlatMtlShaderInput {
|
||||
half2 xlv_TEXCOORD0;
|
||||
};
|
||||
struct xlatMtlShaderOutput {
|
||||
half4 _glesFragData_0 [[color(0)]];
|
||||
};
|
||||
struct xlatMtlShaderUniform {
|
||||
};
|
||||
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]]
|
||||
, texture2d<half> _MainTex [[texture(0)]], sampler _mtlsmp__MainTex [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 xl_retval_1 = 0;
|
||||
half4 col_2 = 0;
|
||||
float4 mat_0_3 = 0;
|
||||
bool bar_4 = false;
|
||||
float4 foo_5 = 0;
|
||||
half4 tmpvar_6 = 0;
|
||||
tmpvar_6 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0));
|
||||
col_2 = tmpvar_6;
|
||||
float4 tmpvar_7 = 0;
|
||||
if (bar_4) {
|
||||
tmpvar_7 = foo_5;
|
||||
} else {
|
||||
tmpvar_7 = float4(0.5, 0.5, 0.5, 0.5);
|
||||
};
|
||||
col_2 = (tmpvar_6 + (half4)(tmpvar_7));
|
||||
col_2 = (col_2 + (half4)(mat_0_3));
|
||||
xl_retval_1 = col_2;
|
||||
_mtl_o._glesFragData_0 = xl_retval_1;
|
||||
return _mtl_o;
|
||||
}
|
||||
|
||||
|
||||
// stats: 3 alu 1 tex 1 flow
|
||||
// inputs: 1
|
||||
// #0: xlv_TEXCOORD0 (medium float) 2x1 [-1]
|
||||
// textures: 1
|
||||
// #0: _MainTex (low 2d) 0x0 [-1] loc 0
|
@ -16,15 +16,15 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _MainTex [[texture(2)]], sampler _mtlsmp__MainTex [[sampler(2)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half3 tmpvar_2;
|
||||
half3 tmpvar_3;
|
||||
half4 c_4;
|
||||
half4 tmpvar_5;
|
||||
half4 c_1 = 0;
|
||||
half3 tmpvar_2 = 0;
|
||||
half3 tmpvar_3 = 0;
|
||||
half4 c_4 = 0;
|
||||
half4 tmpvar_5 = 0;
|
||||
tmpvar_5 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0));
|
||||
c_4 = tmpvar_5;
|
||||
tmpvar_2 = c_4.xyz;
|
||||
tmpvar_3 = ((c_4.xyz * (half)2.0) - (half)1.0);
|
||||
tmpvar_3 = ((c_4.xyz * (half)(2.0)) - (half)(1.0));
|
||||
half3x3 tmpvar_6;
|
||||
tmpvar_6[0].x = half(0.8164966);
|
||||
tmpvar_6[0].y = half(-0.4082483);
|
||||
@ -35,15 +35,15 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
tmpvar_6[2].x = half(0.5773503);
|
||||
tmpvar_6[2].y = half(0.5773503);
|
||||
tmpvar_6[2].z = half(0.5773503);
|
||||
half3 normal_7;
|
||||
half3 normal_7 = 0;
|
||||
normal_7 = tmpvar_3;
|
||||
half3 scalePerBasisVector_8;
|
||||
half3 lm_9;
|
||||
half3 tmpvar_10;
|
||||
tmpvar_10 = ((half)2.0 * unity_Lightmap.sample(_mtlsmp_unity_Lightmap, (float2)(_mtl_i.xlv_TEXCOORD4.xy)).xyz);
|
||||
half3 scalePerBasisVector_8 = 0;
|
||||
half3 lm_9 = 0;
|
||||
half3 tmpvar_10 = 0;
|
||||
tmpvar_10 = ((half)(2.0) * unity_Lightmap.sample(_mtlsmp_unity_Lightmap, (float2)(_mtl_i.xlv_TEXCOORD4.xy)).xyz);
|
||||
lm_9 = tmpvar_10;
|
||||
half3 tmpvar_11;
|
||||
tmpvar_11 = ((half)2.0 * unity_LightmapInd.sample(_mtlsmp_unity_LightmapInd, (float2)(_mtl_i.xlv_TEXCOORD4.xy)).xyz);
|
||||
half3 tmpvar_11 = 0;
|
||||
tmpvar_11 = ((half)(2.0) * unity_LightmapInd.sample(_mtlsmp_unity_LightmapInd, (float2)(_mtl_i.xlv_TEXCOORD4.xy)).xyz);
|
||||
scalePerBasisVector_8 = tmpvar_11;
|
||||
lm_9 = (lm_9 * dot (clamp (
|
||||
(tmpvar_6 * normal_7)
|
||||
|
@ -20,101 +20,101 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _CameraDepthTexture [[texture(0)]], sampler _mtlsmp__CameraDepthTexture [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float4 depth_1;
|
||||
float2 coordTemp_2;
|
||||
float sampleOnEpipolarLine_3;
|
||||
float tmpvar_4;
|
||||
float4 depth_1 = 0;
|
||||
float2 coordTemp_2 = 0;
|
||||
float sampleOnEpipolarLine_3 = 0;
|
||||
float tmpvar_4 = 0;
|
||||
tmpvar_4 = clamp ((_mtl_i.xlv_TEXCOORD0.y - (0.5 / _mtl_u._CoordTexDim.y)), 0.0, 1.0);
|
||||
sampleOnEpipolarLine_3 = ((_mtl_i.xlv_TEXCOORD0.x - (0.5 / _mtl_u._CoordTexDim.x)) * (_mtl_u._CoordTexDim.x / (_mtl_u._CoordTexDim.x - 1.0)));
|
||||
float tmpvar_5;
|
||||
float tmpvar_5 = 0;
|
||||
tmpvar_5 = clamp (sampleOnEpipolarLine_3, 0.0, 1.0);
|
||||
sampleOnEpipolarLine_3 = tmpvar_5;
|
||||
int tmpvar_6;
|
||||
int tmpvar_6 = 0;
|
||||
tmpvar_6 = int(clamp (floor(
|
||||
(tmpvar_4 * 4.0)
|
||||
), 0.0, 3.0));
|
||||
float tmpvar_7;
|
||||
float tmpvar_7 = 0;
|
||||
tmpvar_7 = (-1.0 + (2.0 * fract(
|
||||
(tmpvar_4 * 4.0)
|
||||
)));
|
||||
float4 tmpvar_8;
|
||||
float4 tmpvar_8 = 0;
|
||||
tmpvar_8.xz = float2(-1.0, 1.0);
|
||||
tmpvar_8.y = tmpvar_7;
|
||||
tmpvar_8.w = -(tmpvar_7);
|
||||
float4 tmpvar_9;
|
||||
float4 tmpvar_9 = 0;
|
||||
tmpvar_9.yw = float2(-1.0, 1.0);
|
||||
tmpvar_9.x = -(tmpvar_7);
|
||||
tmpvar_9.z = tmpvar_7;
|
||||
bool4 tmpvar_10;
|
||||
bool4 tmpvar_10 = false;
|
||||
tmpvar_10 = bool4((int4(tmpvar_6) == int4(0, 1, 2, 3)));
|
||||
half4 tmpvar_11;
|
||||
half4 tmpvar_11 = 0;
|
||||
tmpvar_11 = half4(tmpvar_10);
|
||||
half4 tmpvar_12;
|
||||
half4 tmpvar_12 = 0;
|
||||
tmpvar_12 = half4(tmpvar_10);
|
||||
float2 tmpvar_13;
|
||||
float2 tmpvar_13 = 0;
|
||||
tmpvar_13.x = dot (tmpvar_9, (float4)tmpvar_11);
|
||||
tmpvar_13.y = dot (tmpvar_8, (float4)tmpvar_12);
|
||||
coordTemp_2 = ((mix (_mtl_u._LightPos.xy,
|
||||
-(tmpvar_13)
|
||||
, float2(tmpvar_5)) * 0.5) + 0.5);
|
||||
float4 tmpvar_14;
|
||||
float4 tmpvar_14 = 0;
|
||||
tmpvar_14.zw = float2(0.0, 0.0);
|
||||
tmpvar_14.xy = coordTemp_2;
|
||||
coordTemp_2 = ((floor(
|
||||
(coordTemp_2 * _mtl_u._ScreenTexDim.xy)
|
||||
) + 0.5) * _mtl_u._ScreenTexDim.zw);
|
||||
half4 tmpvar_15;
|
||||
half4 tmpvar_15 = 0;
|
||||
tmpvar_15 = _CameraDepthTexture.sample(_mtlsmp__CameraDepthTexture, (float2)(coordTemp_2));
|
||||
float tmpvar_16;
|
||||
float z_17;
|
||||
float tmpvar_16 = 0;
|
||||
float z_17 = 0;
|
||||
z_17 = float(tmpvar_15.x);
|
||||
tmpvar_16 = (1.0/(((_mtl_u._ZBufferParams.x * z_17) + _mtl_u._ZBufferParams.y)));
|
||||
depth_1 = float4(tmpvar_16);
|
||||
float4 v_18;
|
||||
float4 v_18 = 0;
|
||||
v_18.x = _mtl_u._FrustumRays[0].x;
|
||||
v_18.y = _mtl_u._FrustumRays[1].x;
|
||||
v_18.z = _mtl_u._FrustumRays[2].x;
|
||||
v_18.w = _mtl_u._FrustumRays[3].x;
|
||||
float4 v_19;
|
||||
float4 v_19 = 0;
|
||||
v_19.x = _mtl_u._FrustumRays[0].y;
|
||||
v_19.y = _mtl_u._FrustumRays[1].y;
|
||||
v_19.z = _mtl_u._FrustumRays[2].y;
|
||||
v_19.w = _mtl_u._FrustumRays[3].y;
|
||||
float4 v_20;
|
||||
float4 v_20 = 0;
|
||||
v_20.x = _mtl_u._FrustumRays[0].w;
|
||||
v_20.y = _mtl_u._FrustumRays[1].w;
|
||||
v_20.z = _mtl_u._FrustumRays[2].w;
|
||||
v_20.w = _mtl_u._FrustumRays[3].w;
|
||||
float4 v_21;
|
||||
float4 v_21 = 0;
|
||||
v_21.x = _mtl_u._FrustumRays[0].z;
|
||||
v_21.y = _mtl_u._FrustumRays[1].z;
|
||||
v_21.z = _mtl_u._FrustumRays[2].z;
|
||||
v_21.w = _mtl_u._FrustumRays[3].z;
|
||||
float3 tmpvar_22;
|
||||
float3 tmpvar_22 = 0;
|
||||
tmpvar_22 = mix (mix (v_18.xyz, v_19.xyz, tmpvar_14.xxx), mix (v_20.xyz, v_21.xyz, tmpvar_14.xxx), tmpvar_14.yyy);
|
||||
float tmpvar_23;
|
||||
float tmpvar_23 = 0;
|
||||
tmpvar_23 = sqrt(dot (tmpvar_22, tmpvar_22));
|
||||
bool tmpvar_24;
|
||||
float3 tmpvar_25;
|
||||
bool tmpvar_24 = false;
|
||||
float3 tmpvar_25 = 0;
|
||||
tmpvar_25 = (1.0/((tmpvar_22 / tmpvar_23)));
|
||||
float3 tmpvar_26;
|
||||
float3 tmpvar_26 = 0;
|
||||
tmpvar_26 = (tmpvar_25 * (-0.5 - _mtl_u._CameraPosLocal.xyz));
|
||||
float3 tmpvar_27;
|
||||
float3 tmpvar_27 = 0;
|
||||
tmpvar_27 = (tmpvar_25 * (0.5 - _mtl_u._CameraPosLocal.xyz));
|
||||
float3 tmpvar_28;
|
||||
float3 tmpvar_28 = 0;
|
||||
tmpvar_28 = min (tmpvar_27, tmpvar_26);
|
||||
float3 tmpvar_29;
|
||||
float3 tmpvar_29 = 0;
|
||||
tmpvar_29 = max (tmpvar_27, tmpvar_26);
|
||||
float2 tmpvar_30;
|
||||
float2 tmpvar_30 = 0;
|
||||
tmpvar_30 = max (tmpvar_28.xx, tmpvar_28.yz);
|
||||
float tmpvar_31;
|
||||
float tmpvar_31 = 0;
|
||||
tmpvar_31 = max (tmpvar_30.x, tmpvar_30.y);
|
||||
float2 tmpvar_32;
|
||||
float2 tmpvar_32 = 0;
|
||||
tmpvar_32 = min (tmpvar_29.xx, tmpvar_29.yz);
|
||||
float tmpvar_33;
|
||||
float tmpvar_33 = 0;
|
||||
tmpvar_33 = min (tmpvar_32.x, tmpvar_32.y);
|
||||
tmpvar_24 = bool(((tmpvar_31 < tmpvar_33) && (tmpvar_33 > 0.0)));
|
||||
if (((bool)!(tmpvar_24) || (tmpvar_16 < (tmpvar_31 / tmpvar_23)))) {
|
||||
if (((bool)(!(tmpvar_24)) || (tmpvar_16 < (tmpvar_31 / tmpvar_23)))) {
|
||||
depth_1 = -(float4(tmpvar_16));
|
||||
} else {
|
||||
depth_1 = min (depth_1, float4((tmpvar_33 / tmpvar_23)));
|
||||
|
@ -21,26 +21,26 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _MainTex [[texture(1)]], sampler _mtlsmp__MainTex [[sampler(1)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half3 tmpvar_2;
|
||||
half tmpvar_3;
|
||||
half4 tmpvar_4;
|
||||
half4 c_1 = 0;
|
||||
half3 tmpvar_2 = 0;
|
||||
half tmpvar_3 = 0;
|
||||
half4 tmpvar_4 = 0;
|
||||
tmpvar_4 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i._uv0.xy));
|
||||
tmpvar_2 = (tmpvar_4.xyz * _mtl_u._Color.xyz);
|
||||
tmpvar_3 = (tmpvar_4.w * _mtl_u._Color.w);
|
||||
half4 tmpvar_5;
|
||||
half4 tmpvar_5 = 0;
|
||||
tmpvar_5 = _BumpMap.sample(_mtlsmp__BumpMap, (float2)(_mtl_i._uv0.zw));
|
||||
half4 packednormal_6;
|
||||
half4 packednormal_6 = 0;
|
||||
packednormal_6 = tmpvar_5;
|
||||
half4 normal_7;
|
||||
normal_7.xy = ((packednormal_6.wy * (half)2.0) - (half)1.0);
|
||||
normal_7.z = sqrt((((half)1.0 -
|
||||
half4 normal_7 = 0;
|
||||
normal_7.xy = ((packednormal_6.wy * (half)(2.0)) - (half)(1.0));
|
||||
normal_7.z = sqrt((((half)(1.0) -
|
||||
(normal_7.x * normal_7.x)
|
||||
) - (normal_7.y * normal_7.y)));
|
||||
half4 c_8;
|
||||
half spec_9;
|
||||
half tmpvar_10;
|
||||
float y_11;
|
||||
half4 c_8 = 0;
|
||||
half spec_9 = 0;
|
||||
half tmpvar_10 = 0;
|
||||
float y_11 = 0;
|
||||
y_11 = (_mtl_u._Shininess * 128.0);
|
||||
tmpvar_10 = ((half)pow ((float)max ((half)0.0, dot (normal_7.xyz,
|
||||
normalize((_mtl_i._uv2 + normalize(_mtl_i._uv1)))
|
||||
@ -52,11 +52,11 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
max ((half)0.0, dot (normal_7.xyz, _mtl_i._uv2))
|
||||
) + (
|
||||
(_mtl_u._LightColor0.xyz * _mtl_u._SpecColor.xyz)
|
||||
* spec_9)) * (half)2.0);
|
||||
* spec_9)) * (half)(2.0));
|
||||
c_8.w = (tmpvar_3 + ((_mtl_u._LightColor0.w * _mtl_u._SpecColor.w) * spec_9));
|
||||
c_1.xyz = (c_8.xyz + (tmpvar_2 * _mtl_i._uv3));
|
||||
c_1.w = tmpvar_3;
|
||||
half4 tmpvar_12;
|
||||
half4 tmpvar_12 = 0;
|
||||
tmpvar_12 = c_1;
|
||||
_mtl_o._fragData = tmpvar_12;
|
||||
return _mtl_o;
|
||||
|
@ -23,34 +23,34 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _ShadowMapTexture [[texture(1)]], sampler _mtlsmp__ShadowMapTexture [[sampler(1)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 tmpvar_1;
|
||||
float4 res_2;
|
||||
float depth_3;
|
||||
half4 tmpvar_4;
|
||||
half4 tmpvar_1 = 0;
|
||||
float4 res_2 = 0;
|
||||
float depth_3 = 0;
|
||||
half4 tmpvar_4 = 0;
|
||||
tmpvar_4 = _CameraDepthTexture.sample(_mtlsmp__CameraDepthTexture, (float2)(_mtl_i.xlv_TEXCOORD0));
|
||||
depth_3 = float(tmpvar_4.x);
|
||||
float tmpvar_5;
|
||||
float tmpvar_5 = 0;
|
||||
tmpvar_5 = (1.0/(((_mtl_u._ZBufferParams.x * depth_3) + _mtl_u._ZBufferParams.y)));
|
||||
depth_3 = tmpvar_5;
|
||||
float4 tmpvar_6;
|
||||
float4 tmpvar_6 = 0;
|
||||
tmpvar_6.w = 1.0;
|
||||
tmpvar_6.xyz = (_mtl_i.xlv_TEXCOORD1 * tmpvar_5);
|
||||
half shadow_7;
|
||||
float4 weights_8;
|
||||
float4 far_9;
|
||||
float4 near_10;
|
||||
bool4 tmpvar_11;
|
||||
half shadow_7 = 0;
|
||||
float4 weights_8 = 0;
|
||||
float4 far_9 = 0;
|
||||
float4 near_10 = 0;
|
||||
bool4 tmpvar_11 = false;
|
||||
tmpvar_11 = bool4((tmpvar_6.zzzz >= _mtl_u._LightSplitsNear));
|
||||
half4 tmpvar_12;
|
||||
half4 tmpvar_12 = 0;
|
||||
tmpvar_12 = half4(tmpvar_11);
|
||||
near_10 = float4(tmpvar_12);
|
||||
bool4 tmpvar_13;
|
||||
bool4 tmpvar_13 = false;
|
||||
tmpvar_13 = bool4((tmpvar_6.zzzz < _mtl_u._LightSplitsFar));
|
||||
half4 tmpvar_14;
|
||||
half4 tmpvar_14 = 0;
|
||||
tmpvar_14 = half4(tmpvar_13);
|
||||
far_9 = float4(tmpvar_14);
|
||||
weights_8 = (near_10 * far_9);
|
||||
float4 tmpvar_15;
|
||||
float4 tmpvar_15 = 0;
|
||||
tmpvar_15.w = 1.0;
|
||||
tmpvar_15.xyz = (((
|
||||
((_mtl_u._View2Shadow * tmpvar_6).xyz * weights_8.x)
|
||||
@ -59,10 +59,10 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
) + (
|
||||
(_mtl_u._View2Shadow2 * tmpvar_6)
|
||||
.xyz * weights_8.z)) + ((_mtl_u._View2Shadow3 * tmpvar_6).xyz * weights_8.w));
|
||||
half4 tmpvar_16;
|
||||
half4 tmpvar_16 = 0;
|
||||
tmpvar_16 = _ShadowMapTexture.sample(_mtlsmp__ShadowMapTexture, (float2)(tmpvar_15.xy));
|
||||
float tmpvar_17;
|
||||
if (((float)tmpvar_16.x < tmpvar_15.z)) {
|
||||
float tmpvar_17 = 0;
|
||||
if (((float)(tmpvar_16.x) < tmpvar_15.z)) {
|
||||
tmpvar_17 = _mtl_u._LightShadowData.x;
|
||||
} else {
|
||||
tmpvar_17 = 1.0;
|
||||
@ -70,9 +70,9 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
shadow_7 = half(tmpvar_17);
|
||||
res_2.x = float(shadow_7);
|
||||
res_2.y = 1.0;
|
||||
float2 enc_18;
|
||||
float2 enc_18 = 0;
|
||||
enc_18 = (float2(1.0, 255.0) * (1.0 - tmpvar_5));
|
||||
float2 tmpvar_19;
|
||||
float2 tmpvar_19 = 0;
|
||||
tmpvar_19 = fract(enc_18);
|
||||
enc_18.y = tmpvar_19.y;
|
||||
enc_18.x = (tmpvar_19.x - (tmpvar_19.y * 0.00392157));
|
||||
|
@ -14,119 +14,119 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _MainTex [[texture(0)]], sampler _mtlsmp__MainTex [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float2 rcpFrame_1;
|
||||
float2 rcpFrame_1 = 0;
|
||||
rcpFrame_1 = _mtl_u._MainTex_TexelSize.xy;
|
||||
half3 tmpvar_2;
|
||||
bool doneP_4;
|
||||
bool doneN_5;
|
||||
half lumaEndP_6;
|
||||
half lumaEndN_7;
|
||||
float2 offNP_8;
|
||||
float2 posP_9;
|
||||
float2 posN_10;
|
||||
half gradientN_11;
|
||||
float lengthSign_12;
|
||||
half3 rgbL_13;
|
||||
half lumaS_14;
|
||||
half lumaN_15;
|
||||
float4 tmpvar_16;
|
||||
half3 tmpvar_2 = 0;
|
||||
bool doneP_4 = false;
|
||||
bool doneN_5 = false;
|
||||
half lumaEndP_6 = 0;
|
||||
half lumaEndN_7 = 0;
|
||||
float2 offNP_8 = 0;
|
||||
float2 posP_9 = 0;
|
||||
float2 posN_10 = 0;
|
||||
half gradientN_11 = 0;
|
||||
float lengthSign_12 = 0;
|
||||
half3 rgbL_13 = 0;
|
||||
half lumaS_14 = 0;
|
||||
half lumaN_15 = 0;
|
||||
float4 tmpvar_16 = 0;
|
||||
tmpvar_16.zw = float2(0.0, 0.0);
|
||||
tmpvar_16.xy = (_mtl_i.xlv_TEXCOORD0 + (float2(0.0, -1.0) * _mtl_u._MainTex_TexelSize.xy));
|
||||
half4 tmpvar_17;
|
||||
half4 tmpvar_17 = 0;
|
||||
tmpvar_17 = _MainTex.sample(_mtlsmp__MainTex, (float2)(tmpvar_16.xy), level(0.0));
|
||||
float4 tmpvar_18;
|
||||
float4 tmpvar_18 = 0;
|
||||
tmpvar_18.zw = float2(0.0, 0.0);
|
||||
tmpvar_18.xy = (_mtl_i.xlv_TEXCOORD0 + (float2(-1.0, 0.0) * _mtl_u._MainTex_TexelSize.xy));
|
||||
half4 tmpvar_19;
|
||||
half4 tmpvar_19 = 0;
|
||||
tmpvar_19 = _MainTex.sample(_mtlsmp__MainTex, (float2)(tmpvar_18.xy), level(0.0));
|
||||
half4 tmpvar_20;
|
||||
half4 tmpvar_20 = 0;
|
||||
tmpvar_20 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0), level(0.0));
|
||||
float4 tmpvar_21;
|
||||
float4 tmpvar_21 = 0;
|
||||
tmpvar_21.zw = float2(0.0, 0.0);
|
||||
tmpvar_21.xy = (_mtl_i.xlv_TEXCOORD0 + (float2(1.0, 0.0) * _mtl_u._MainTex_TexelSize.xy));
|
||||
half4 tmpvar_22;
|
||||
half4 tmpvar_22 = 0;
|
||||
tmpvar_22 = _MainTex.sample(_mtlsmp__MainTex, (float2)(tmpvar_21.xy), level(0.0));
|
||||
float4 tmpvar_23;
|
||||
float4 tmpvar_23 = 0;
|
||||
tmpvar_23.zw = float2(0.0, 0.0);
|
||||
tmpvar_23.xy = (_mtl_i.xlv_TEXCOORD0 + (float2(0.0, 1.0) * _mtl_u._MainTex_TexelSize.xy));
|
||||
half4 tmpvar_24;
|
||||
half4 tmpvar_24 = 0;
|
||||
tmpvar_24 = _MainTex.sample(_mtlsmp__MainTex, (float2)(tmpvar_23.xy), level(0.0));
|
||||
half tmpvar_25;
|
||||
tmpvar_25 = ((tmpvar_17.y * (half)1.963211) + tmpvar_17.x);
|
||||
half tmpvar_25 = 0;
|
||||
tmpvar_25 = ((tmpvar_17.y * (half)(1.963211)) + tmpvar_17.x);
|
||||
lumaN_15 = tmpvar_25;
|
||||
half tmpvar_26;
|
||||
tmpvar_26 = ((tmpvar_19.y * (half)1.963211) + tmpvar_19.x);
|
||||
half tmpvar_27;
|
||||
tmpvar_27 = ((tmpvar_20.y * (half)1.963211) + tmpvar_20.x);
|
||||
half tmpvar_28;
|
||||
tmpvar_28 = ((tmpvar_22.y * (half)1.963211) + tmpvar_22.x);
|
||||
half tmpvar_29;
|
||||
tmpvar_29 = ((tmpvar_24.y * (half)1.963211) + tmpvar_24.x);
|
||||
half tmpvar_26 = 0;
|
||||
tmpvar_26 = ((tmpvar_19.y * (half)(1.963211)) + tmpvar_19.x);
|
||||
half tmpvar_27 = 0;
|
||||
tmpvar_27 = ((tmpvar_20.y * (half)(1.963211)) + tmpvar_20.x);
|
||||
half tmpvar_28 = 0;
|
||||
tmpvar_28 = ((tmpvar_22.y * (half)(1.963211)) + tmpvar_22.x);
|
||||
half tmpvar_29 = 0;
|
||||
tmpvar_29 = ((tmpvar_24.y * (half)(1.963211)) + tmpvar_24.x);
|
||||
lumaS_14 = tmpvar_29;
|
||||
half tmpvar_30;
|
||||
half tmpvar_30 = 0;
|
||||
tmpvar_30 = max (max (tmpvar_27, tmpvar_25), max (max (tmpvar_26, tmpvar_29), tmpvar_28));
|
||||
half tmpvar_31;
|
||||
half tmpvar_31 = 0;
|
||||
tmpvar_31 = (tmpvar_30 - min (min (tmpvar_27, tmpvar_25), min (
|
||||
min (tmpvar_26, tmpvar_29)
|
||||
, tmpvar_28)));
|
||||
half tmpvar_32;
|
||||
tmpvar_32 = max ((half)0.04166667, (tmpvar_30 * (half)0.125));
|
||||
half tmpvar_32 = 0;
|
||||
tmpvar_32 = max ((half)0.04166667, (tmpvar_30 * (half)(0.125)));
|
||||
if ((tmpvar_31 < tmpvar_32)) {
|
||||
tmpvar_2 = tmpvar_20.xyz;
|
||||
} else {
|
||||
half tmpvar_33;
|
||||
half tmpvar_33 = 0;
|
||||
tmpvar_33 = min ((half)0.75, (max ((half)0.0,
|
||||
((abs((
|
||||
(((tmpvar_25 + tmpvar_26) + (tmpvar_28 + tmpvar_29)) * (half)0.25)
|
||||
- tmpvar_27)) / tmpvar_31) - (half)0.25)
|
||||
) * (half)1.333333));
|
||||
float4 tmpvar_34;
|
||||
(((tmpvar_25 + tmpvar_26) + (tmpvar_28 + tmpvar_29)) * (half)(0.25))
|
||||
- tmpvar_27)) / tmpvar_31) - (half)(0.25))
|
||||
) * (half)(1.333333)));
|
||||
float4 tmpvar_34 = 0;
|
||||
tmpvar_34.zw = float2(0.0, 0.0);
|
||||
tmpvar_34.xy = (_mtl_i.xlv_TEXCOORD0 - _mtl_u._MainTex_TexelSize.xy);
|
||||
half4 tmpvar_35;
|
||||
half4 tmpvar_35 = 0;
|
||||
tmpvar_35 = _MainTex.sample(_mtlsmp__MainTex, (float2)(tmpvar_34.xy), level(0.0));
|
||||
float4 tmpvar_36;
|
||||
float4 tmpvar_36 = 0;
|
||||
tmpvar_36.zw = float2(0.0, 0.0);
|
||||
tmpvar_36.xy = (_mtl_i.xlv_TEXCOORD0 + (float2(1.0, -1.0) * _mtl_u._MainTex_TexelSize.xy));
|
||||
half4 tmpvar_37;
|
||||
half4 tmpvar_37 = 0;
|
||||
tmpvar_37 = _MainTex.sample(_mtlsmp__MainTex, (float2)(tmpvar_36.xy), level(0.0));
|
||||
float4 tmpvar_38;
|
||||
float4 tmpvar_38 = 0;
|
||||
tmpvar_38.zw = float2(0.0, 0.0);
|
||||
tmpvar_38.xy = (_mtl_i.xlv_TEXCOORD0 + (float2(-1.0, 1.0) * _mtl_u._MainTex_TexelSize.xy));
|
||||
half4 tmpvar_39;
|
||||
half4 tmpvar_39 = 0;
|
||||
tmpvar_39 = _MainTex.sample(_mtlsmp__MainTex, (float2)(tmpvar_38.xy), level(0.0));
|
||||
float4 tmpvar_40;
|
||||
float4 tmpvar_40 = 0;
|
||||
tmpvar_40.zw = float2(0.0, 0.0);
|
||||
tmpvar_40.xy = (_mtl_i.xlv_TEXCOORD0 + _mtl_u._MainTex_TexelSize.xy);
|
||||
half4 tmpvar_41;
|
||||
half4 tmpvar_41 = 0;
|
||||
tmpvar_41 = _MainTex.sample(_mtlsmp__MainTex, (float2)(tmpvar_40.xy), level(0.0));
|
||||
rgbL_13 = (((tmpvar_17.xyz + tmpvar_19.xyz) + (tmpvar_20.xyz + tmpvar_22.xyz)) + ((tmpvar_24.xyz + tmpvar_35.xyz) + (
|
||||
(tmpvar_37.xyz + tmpvar_39.xyz)
|
||||
+ tmpvar_41.xyz)));
|
||||
rgbL_13 = (rgbL_13 * (half3)float3(0.1111111, 0.1111111, 0.1111111));
|
||||
half tmpvar_42;
|
||||
tmpvar_42 = ((tmpvar_35.y * (half)1.963211) + tmpvar_35.x);
|
||||
half tmpvar_43;
|
||||
tmpvar_43 = ((tmpvar_37.y * (half)1.963211) + tmpvar_37.x);
|
||||
half tmpvar_44;
|
||||
tmpvar_44 = ((tmpvar_39.y * (half)1.963211) + tmpvar_39.x);
|
||||
half tmpvar_45;
|
||||
tmpvar_45 = ((tmpvar_41.y * (half)1.963211) + tmpvar_41.x);
|
||||
bool tmpvar_46;
|
||||
rgbL_13 = (rgbL_13 * (half3)(float3(0.1111111, 0.1111111, 0.1111111)));
|
||||
half tmpvar_42 = 0;
|
||||
tmpvar_42 = ((tmpvar_35.y * (half)(1.963211)) + tmpvar_35.x);
|
||||
half tmpvar_43 = 0;
|
||||
tmpvar_43 = ((tmpvar_37.y * (half)(1.963211)) + tmpvar_37.x);
|
||||
half tmpvar_44 = 0;
|
||||
tmpvar_44 = ((tmpvar_39.y * (half)(1.963211)) + tmpvar_39.x);
|
||||
half tmpvar_45 = 0;
|
||||
tmpvar_45 = ((tmpvar_41.y * (half)(1.963211)) + tmpvar_41.x);
|
||||
bool tmpvar_46 = false;
|
||||
tmpvar_46 = (((
|
||||
abs(((((half)0.25 * tmpvar_42) + ((half)-0.5 * tmpvar_26)) + ((half)0.25 * tmpvar_44)))
|
||||
abs(((((half)(0.25) * tmpvar_42) + ((half)(-0.5) * tmpvar_26)) + ((half)(0.25) * tmpvar_44)))
|
||||
+
|
||||
abs(((((half)0.5 * tmpvar_25) - tmpvar_27) + ((half)0.5 * tmpvar_29)))
|
||||
abs(((((half)(0.5) * tmpvar_25) - tmpvar_27) + ((half)(0.5) * tmpvar_29)))
|
||||
) + abs(
|
||||
((((half)0.25 * tmpvar_43) + ((half)-0.5 * tmpvar_28)) + ((half)0.25 * tmpvar_45))
|
||||
((((half)(0.25) * tmpvar_43) + ((half)(-0.5) * tmpvar_28)) + ((half)(0.25) * tmpvar_45))
|
||||
)) >= ((
|
||||
abs(((((half)0.25 * tmpvar_42) + ((half)-0.5 * tmpvar_25)) + ((half)0.25 * tmpvar_43)))
|
||||
abs(((((half)(0.25) * tmpvar_42) + ((half)(-0.5) * tmpvar_25)) + ((half)(0.25) * tmpvar_43)))
|
||||
+
|
||||
abs(((((half)0.5 * tmpvar_26) - tmpvar_27) + ((half)0.5 * tmpvar_28)))
|
||||
abs(((((half)(0.5) * tmpvar_26) - tmpvar_27) + ((half)(0.5) * tmpvar_28)))
|
||||
) + abs(
|
||||
((((half)0.25 * tmpvar_44) + ((half)-0.5 * tmpvar_29)) + ((half)0.25 * tmpvar_45))
|
||||
((((half)(0.25) * tmpvar_44) + ((half)(-0.5) * tmpvar_29)) + ((half)(0.25) * tmpvar_45))
|
||||
)));
|
||||
float tmpvar_47;
|
||||
float tmpvar_47 = 0;
|
||||
if (tmpvar_46) {
|
||||
tmpvar_47 = -(_mtl_u._MainTex_TexelSize.y);
|
||||
} else {
|
||||
@ -139,14 +139,14 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
if (!(tmpvar_46)) {
|
||||
lumaS_14 = tmpvar_28;
|
||||
};
|
||||
half tmpvar_48;
|
||||
half tmpvar_48 = 0;
|
||||
tmpvar_48 = abs((lumaN_15 - tmpvar_27));
|
||||
gradientN_11 = tmpvar_48;
|
||||
half tmpvar_49;
|
||||
half tmpvar_49 = 0;
|
||||
tmpvar_49 = abs((lumaS_14 - tmpvar_27));
|
||||
lumaN_15 = ((lumaN_15 + tmpvar_27) * (half)0.5);
|
||||
lumaS_14 = ((lumaS_14 + tmpvar_27) * (half)0.5);
|
||||
bool tmpvar_50;
|
||||
lumaN_15 = ((lumaN_15 + tmpvar_27) * (half)(0.5));
|
||||
lumaS_14 = ((lumaS_14 + tmpvar_27) * (half)(0.5));
|
||||
bool tmpvar_50 = false;
|
||||
tmpvar_50 = (tmpvar_48 >= tmpvar_49);
|
||||
if (!(tmpvar_50)) {
|
||||
lumaN_15 = lumaS_14;
|
||||
@ -157,30 +157,30 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
if (!(tmpvar_50)) {
|
||||
lengthSign_12 = -(tmpvar_47);
|
||||
};
|
||||
float tmpvar_51;
|
||||
float tmpvar_51 = 0;
|
||||
if (tmpvar_46) {
|
||||
tmpvar_51 = 0.0;
|
||||
} else {
|
||||
tmpvar_51 = (lengthSign_12 * 0.5);
|
||||
};
|
||||
posN_10.x = (_mtl_i.xlv_TEXCOORD0.x + tmpvar_51);
|
||||
float tmpvar_52;
|
||||
float tmpvar_52 = 0;
|
||||
if (tmpvar_46) {
|
||||
tmpvar_52 = (lengthSign_12 * 0.5);
|
||||
} else {
|
||||
tmpvar_52 = 0.0;
|
||||
};
|
||||
posN_10.y = (_mtl_i.xlv_TEXCOORD0.y + tmpvar_52);
|
||||
gradientN_11 = (gradientN_11 * (half)0.25);
|
||||
gradientN_11 = (gradientN_11 * (half)(0.25));
|
||||
posP_9 = posN_10;
|
||||
float2 tmpvar_53;
|
||||
float2 tmpvar_53 = 0;
|
||||
if (tmpvar_46) {
|
||||
float2 tmpvar_54;
|
||||
float2 tmpvar_54 = 0;
|
||||
tmpvar_54.y = 0.0;
|
||||
tmpvar_54.x = rcpFrame_1.x;
|
||||
tmpvar_53 = tmpvar_54;
|
||||
} else {
|
||||
float2 tmpvar_55;
|
||||
float2 tmpvar_55 = 0;
|
||||
tmpvar_55.x = 0.0;
|
||||
tmpvar_55.y = rcpFrame_1.y;
|
||||
tmpvar_53 = tmpvar_55;
|
||||
@ -194,23 +194,23 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
posP_9 = (posP_9 + tmpvar_53);
|
||||
for (int i_3 = 0; i_3 < 16; i_3++) {
|
||||
if (!(doneN_5)) {
|
||||
half4 tmpvar_56;
|
||||
half4 tmpvar_56 = 0;
|
||||
tmpvar_56 = _MainTex.sample(_mtlsmp__MainTex, (float2)(posN_10), level(0.0));
|
||||
lumaEndN_7 = ((tmpvar_56.y * (half)1.963211) + tmpvar_56.x);
|
||||
lumaEndN_7 = ((tmpvar_56.y * (half)(1.963211)) + tmpvar_56.x);
|
||||
};
|
||||
if (!(doneP_4)) {
|
||||
half4 tmpvar_57;
|
||||
half4 tmpvar_57 = 0;
|
||||
tmpvar_57 = _MainTex.sample(_mtlsmp__MainTex, (float2)(posP_9), level(0.0));
|
||||
lumaEndP_6 = ((tmpvar_57.y * (half)1.963211) + tmpvar_57.x);
|
||||
lumaEndP_6 = ((tmpvar_57.y * (half)(1.963211)) + tmpvar_57.x);
|
||||
};
|
||||
bool tmpvar_58;
|
||||
bool tmpvar_58 = false;
|
||||
if (doneN_5) {
|
||||
tmpvar_58 = bool(bool(1));
|
||||
} else {
|
||||
tmpvar_58 = (abs((lumaEndN_7 - lumaN_15)) >= gradientN_11);
|
||||
};
|
||||
doneN_5 = tmpvar_58;
|
||||
bool tmpvar_59;
|
||||
bool tmpvar_59 = false;
|
||||
if (doneP_4) {
|
||||
tmpvar_59 = bool(bool(1));
|
||||
} else {
|
||||
@ -227,66 +227,66 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
posP_9 = (posP_9 + offNP_8);
|
||||
};
|
||||
};
|
||||
float tmpvar_60;
|
||||
float tmpvar_60 = 0;
|
||||
if (tmpvar_46) {
|
||||
tmpvar_60 = (_mtl_i.xlv_TEXCOORD0.x - posN_10.x);
|
||||
} else {
|
||||
tmpvar_60 = (_mtl_i.xlv_TEXCOORD0.y - posN_10.y);
|
||||
};
|
||||
float tmpvar_61;
|
||||
float tmpvar_61 = 0;
|
||||
if (tmpvar_46) {
|
||||
tmpvar_61 = (posP_9.x - _mtl_i.xlv_TEXCOORD0.x);
|
||||
} else {
|
||||
tmpvar_61 = (posP_9.y - _mtl_i.xlv_TEXCOORD0.y);
|
||||
};
|
||||
bool tmpvar_62;
|
||||
bool tmpvar_62 = false;
|
||||
tmpvar_62 = (tmpvar_60 < tmpvar_61);
|
||||
half tmpvar_63;
|
||||
half tmpvar_63 = 0;
|
||||
if (tmpvar_62) {
|
||||
tmpvar_63 = lumaEndN_7;
|
||||
} else {
|
||||
tmpvar_63 = lumaEndP_6;
|
||||
};
|
||||
lumaEndN_7 = tmpvar_63;
|
||||
if ((((tmpvar_27 - lumaN_15) < (half)0.0) == ((tmpvar_63 - lumaN_15) < (half)0.0))) {
|
||||
if ((((tmpvar_27 - lumaN_15) < (half)(0.0)) == ((tmpvar_63 - lumaN_15) < (half)(0.0)))) {
|
||||
lengthSign_12 = 0.0;
|
||||
};
|
||||
float tmpvar_64;
|
||||
float tmpvar_64 = 0;
|
||||
tmpvar_64 = (tmpvar_61 + tmpvar_60);
|
||||
float tmpvar_65;
|
||||
float tmpvar_65 = 0;
|
||||
if (tmpvar_62) {
|
||||
tmpvar_65 = tmpvar_60;
|
||||
} else {
|
||||
tmpvar_65 = tmpvar_61;
|
||||
};
|
||||
float tmpvar_66;
|
||||
float tmpvar_66 = 0;
|
||||
tmpvar_66 = ((0.5 + (tmpvar_65 *
|
||||
(-1.0 / tmpvar_64)
|
||||
)) * lengthSign_12);
|
||||
float tmpvar_67;
|
||||
float tmpvar_67 = 0;
|
||||
if (tmpvar_46) {
|
||||
tmpvar_67 = 0.0;
|
||||
} else {
|
||||
tmpvar_67 = tmpvar_66;
|
||||
};
|
||||
float tmpvar_68;
|
||||
float tmpvar_68 = 0;
|
||||
if (tmpvar_46) {
|
||||
tmpvar_68 = tmpvar_66;
|
||||
} else {
|
||||
tmpvar_68 = 0.0;
|
||||
};
|
||||
float2 tmpvar_69;
|
||||
float2 tmpvar_69 = 0;
|
||||
tmpvar_69.x = (_mtl_i.xlv_TEXCOORD0.x + tmpvar_67);
|
||||
tmpvar_69.y = (_mtl_i.xlv_TEXCOORD0.y + tmpvar_68);
|
||||
half4 tmpvar_70;
|
||||
half4 tmpvar_70 = 0;
|
||||
tmpvar_70 = _MainTex.sample(_mtlsmp__MainTex, (float2)(tmpvar_69), level(0.0));
|
||||
half3 tmpvar_71;
|
||||
half3 tmpvar_71 = 0;
|
||||
tmpvar_71.x = -(tmpvar_33);
|
||||
tmpvar_71.y = -(tmpvar_33);
|
||||
tmpvar_71.z = -(tmpvar_33);
|
||||
tmpvar_2 = ((tmpvar_71 * tmpvar_70.xyz) + ((rgbL_13 * half3(tmpvar_33)) + tmpvar_70.xyz));
|
||||
};
|
||||
half4 tmpvar_72;
|
||||
half4 tmpvar_72 = 0;
|
||||
tmpvar_72.w = half(0.0);
|
||||
tmpvar_72.xyz = tmpvar_2;
|
||||
_mtl_o._fragData = tmpvar_72;
|
||||
|
@ -28,138 +28,138 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texturecube<half> _ShadowMapTexture [[texture(4)]], sampler _mtlsmp__ShadowMapTexture [[sampler(4)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 res_1;
|
||||
float spec_2;
|
||||
half3 h_3;
|
||||
float atten_4;
|
||||
half3 lightDir_5;
|
||||
float3 tolight_6;
|
||||
float3 wpos_7;
|
||||
float depth_8;
|
||||
half3 normal_9;
|
||||
half4 nspec_10;
|
||||
float2 uv_11;
|
||||
half4 res_1 = 0;
|
||||
float spec_2 = 0;
|
||||
half3 h_3 = 0;
|
||||
float atten_4 = 0;
|
||||
half3 lightDir_5 = 0;
|
||||
float3 tolight_6 = 0;
|
||||
float3 wpos_7 = 0;
|
||||
float depth_8 = 0;
|
||||
half3 normal_9 = 0;
|
||||
half4 nspec_10 = 0;
|
||||
float2 uv_11 = 0;
|
||||
uv_11 = (_mtl_i.xlv_TEXCOORD0.xy / _mtl_i.xlv_TEXCOORD0.w);
|
||||
half4 tmpvar_12;
|
||||
half4 tmpvar_12 = 0;
|
||||
tmpvar_12 = _CameraNormalsTexture.sample(_mtlsmp__CameraNormalsTexture, (float2)(uv_11));
|
||||
nspec_10 = tmpvar_12;
|
||||
normal_9 = ((nspec_10.xyz * (half)2.0) - (half)1.0);
|
||||
normal_9 = ((nspec_10.xyz * (half)(2.0)) - (half)(1.0));
|
||||
normal_9 = normalize(normal_9);
|
||||
half4 tmpvar_13;
|
||||
half4 tmpvar_13 = 0;
|
||||
tmpvar_13 = _CameraDepthTexture.sample(_mtlsmp__CameraDepthTexture, (float2)(uv_11));
|
||||
depth_8 = float(tmpvar_13.x);
|
||||
float tmpvar_14;
|
||||
float tmpvar_14 = 0;
|
||||
tmpvar_14 = (1.0/(((_mtl_u._ZBufferParams.x * depth_8) + _mtl_u._ZBufferParams.y)));
|
||||
depth_8 = tmpvar_14;
|
||||
float4 tmpvar_15;
|
||||
float4 tmpvar_15 = 0;
|
||||
tmpvar_15.w = 1.0;
|
||||
tmpvar_15.xyz = ((_mtl_i.xlv_TEXCOORD1 * (_mtl_u._ProjectionParams.z / _mtl_i.xlv_TEXCOORD1.z)) * tmpvar_14);
|
||||
wpos_7 = (_mtl_u._CameraToWorld * tmpvar_15).xyz;
|
||||
tolight_6 = (wpos_7 - _mtl_u._LightPos.xyz);
|
||||
float3 tmpvar_16;
|
||||
float3 tmpvar_16 = 0;
|
||||
tmpvar_16 = normalize(tolight_6);
|
||||
lightDir_5 = half3(-(tmpvar_16));
|
||||
float2 tmpvar_17;
|
||||
float2 tmpvar_17 = 0;
|
||||
tmpvar_17 = float2((dot (tolight_6, tolight_6) * _mtl_u._LightPos.w));
|
||||
half4 tmpvar_18;
|
||||
half4 tmpvar_18 = 0;
|
||||
tmpvar_18 = _LightTextureB0.sample(_mtlsmp__LightTextureB0, (float2)(tmpvar_17));
|
||||
atten_4 = float(tmpvar_18.w);
|
||||
float mydist_19;
|
||||
float mydist_19 = 0;
|
||||
mydist_19 = (sqrt(dot (tolight_6, tolight_6)) * _mtl_u._LightPositionRange.w);
|
||||
mydist_19 = (mydist_19 * 0.97);
|
||||
float4 shadowVals_20;
|
||||
float3 vec_21;
|
||||
float4 shadowVals_20 = 0;
|
||||
float3 vec_21 = 0;
|
||||
vec_21 = (tolight_6 + float3(0.0078125, 0.0078125, 0.0078125));
|
||||
float4 packDist_22;
|
||||
half4 tmpvar_23;
|
||||
float4 packDist_22 = 0;
|
||||
half4 tmpvar_23 = 0;
|
||||
tmpvar_23 = _ShadowMapTexture.sample(_mtlsmp__ShadowMapTexture, (float3)(vec_21));
|
||||
packDist_22 = float4(tmpvar_23);
|
||||
shadowVals_20.x = dot (packDist_22, float4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09));
|
||||
float3 vec_24;
|
||||
float3 vec_24 = 0;
|
||||
vec_24 = (tolight_6 + float3(-0.0078125, -0.0078125, 0.0078125));
|
||||
float4 packDist_25;
|
||||
half4 tmpvar_26;
|
||||
float4 packDist_25 = 0;
|
||||
half4 tmpvar_26 = 0;
|
||||
tmpvar_26 = _ShadowMapTexture.sample(_mtlsmp__ShadowMapTexture, (float3)(vec_24));
|
||||
packDist_25 = float4(tmpvar_26);
|
||||
shadowVals_20.y = dot (packDist_25, float4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09));
|
||||
float3 vec_27;
|
||||
float3 vec_27 = 0;
|
||||
vec_27 = (tolight_6 + float3(-0.0078125, 0.0078125, -0.0078125));
|
||||
float4 packDist_28;
|
||||
half4 tmpvar_29;
|
||||
float4 packDist_28 = 0;
|
||||
half4 tmpvar_29 = 0;
|
||||
tmpvar_29 = _ShadowMapTexture.sample(_mtlsmp__ShadowMapTexture, (float3)(vec_27));
|
||||
packDist_28 = float4(tmpvar_29);
|
||||
shadowVals_20.z = dot (packDist_28, float4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09));
|
||||
float3 vec_30;
|
||||
float3 vec_30 = 0;
|
||||
vec_30 = (tolight_6 + float3(0.0078125, -0.0078125, -0.0078125));
|
||||
float4 packDist_31;
|
||||
half4 tmpvar_32;
|
||||
float4 packDist_31 = 0;
|
||||
half4 tmpvar_32 = 0;
|
||||
tmpvar_32 = _ShadowMapTexture.sample(_mtlsmp__ShadowMapTexture, (float3)(vec_30));
|
||||
packDist_31 = float4(tmpvar_32);
|
||||
shadowVals_20.w = dot (packDist_31, float4(1.0, 0.00392157, 1.53787e-05, 6.22737e-09));
|
||||
bool4 tmpvar_33;
|
||||
bool4 tmpvar_33 = false;
|
||||
tmpvar_33 = bool4((shadowVals_20 < float4(mydist_19)));
|
||||
float4 tmpvar_34;
|
||||
float4 tmpvar_34 = 0;
|
||||
tmpvar_34 = _mtl_u._LightShadowData.xxxx;
|
||||
float tmpvar_35;
|
||||
float tmpvar_35 = 0;
|
||||
if (tmpvar_33.x) {
|
||||
tmpvar_35 = tmpvar_34.x;
|
||||
} else {
|
||||
tmpvar_35 = 1.0;
|
||||
};
|
||||
float tmpvar_36;
|
||||
float tmpvar_36 = 0;
|
||||
if (tmpvar_33.y) {
|
||||
tmpvar_36 = tmpvar_34.y;
|
||||
} else {
|
||||
tmpvar_36 = 1.0;
|
||||
};
|
||||
float tmpvar_37;
|
||||
float tmpvar_37 = 0;
|
||||
if (tmpvar_33.z) {
|
||||
tmpvar_37 = tmpvar_34.z;
|
||||
} else {
|
||||
tmpvar_37 = 1.0;
|
||||
};
|
||||
float tmpvar_38;
|
||||
float tmpvar_38 = 0;
|
||||
if (tmpvar_33.w) {
|
||||
tmpvar_38 = tmpvar_34.w;
|
||||
} else {
|
||||
tmpvar_38 = 1.0;
|
||||
};
|
||||
half4 tmpvar_39;
|
||||
half4 tmpvar_39 = 0;
|
||||
tmpvar_39.x = half(tmpvar_35);
|
||||
tmpvar_39.y = half(tmpvar_36);
|
||||
tmpvar_39.z = half(tmpvar_37);
|
||||
tmpvar_39.w = half(tmpvar_38);
|
||||
half tmpvar_40;
|
||||
half tmpvar_40 = 0;
|
||||
tmpvar_40 = dot (tmpvar_39, (half4)float4(0.25, 0.25, 0.25, 0.25));
|
||||
atten_4 = (atten_4 * (float)tmpvar_40);
|
||||
float4 tmpvar_41;
|
||||
atten_4 = (atten_4 * (float)(tmpvar_40));
|
||||
float4 tmpvar_41 = 0;
|
||||
tmpvar_41.w = 1.0;
|
||||
tmpvar_41.xyz = wpos_7;
|
||||
half4 tmpvar_42;
|
||||
float3 P_43;
|
||||
half4 tmpvar_42 = 0;
|
||||
float3 P_43 = 0;
|
||||
P_43 = (_mtl_u._LightMatrix0 * tmpvar_41).xyz;
|
||||
tmpvar_42 = _LightTexture0.sample(_mtlsmp__LightTexture0, (float3)(P_43));
|
||||
atten_4 = (atten_4 * (float)tmpvar_42.w);
|
||||
float3 tmpvar_44;
|
||||
tmpvar_44 = normalize(((float3)lightDir_5 - normalize(
|
||||
atten_4 = (atten_4 * (float)(tmpvar_42.w));
|
||||
float3 tmpvar_44 = 0;
|
||||
tmpvar_44 = normalize(((float3)(lightDir_5) - normalize(
|
||||
(wpos_7 - _mtl_u._WorldSpaceCameraPos)
|
||||
)));
|
||||
h_3 = half3(tmpvar_44);
|
||||
half tmpvar_45;
|
||||
tmpvar_45 = pow (max ((half)0.0, dot (h_3, normal_9)), (nspec_10.w * (half)128.0));
|
||||
half tmpvar_45 = 0;
|
||||
tmpvar_45 = pow (max ((half)0.0, dot (h_3, normal_9)), (nspec_10.w * (half)(128.0)));
|
||||
spec_2 = float(tmpvar_45);
|
||||
spec_2 = (spec_2 * clamp (atten_4, 0.0, 1.0));
|
||||
res_1.xyz = half3((_mtl_u._LightColor.xyz * ((float)max ((half)0.0,
|
||||
res_1.xyz = half3((_mtl_u._LightColor.xyz * ((float)(max ((half)0.0,
|
||||
dot (lightDir_5, normal_9)
|
||||
) * atten_4)));
|
||||
half3 c_46;
|
||||
)) * atten_4)));
|
||||
half3 c_46 = 0;
|
||||
c_46 = half3(_mtl_u._LightColor.xyz);
|
||||
res_1.w = half((spec_2 * (float)dot (c_46, (half3)float3(0.22, 0.707, 0.071))));
|
||||
float tmpvar_47;
|
||||
res_1.w = half((spec_2 * (float)(dot (c_46, (half3)float3(0.22, 0.707, 0.071)))));
|
||||
float tmpvar_47 = 0;
|
||||
tmpvar_47 = clamp ((1.0 - (
|
||||
(tmpvar_15.z * _mtl_u.unity_LightmapFade.z)
|
||||
+ _mtl_u.unity_LightmapFade.w)), 0.0, 1.0);
|
||||
res_1 = ((half4)((float4)res_1 * tmpvar_47));
|
||||
res_1 = ((half4)((float4)(res_1) * tmpvar_47));
|
||||
_mtl_o._fragData = exp2(-(res_1));
|
||||
return _mtl_o;
|
||||
}
|
||||
|
@ -15,26 +15,26 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _Curve [[texture(1)]], sampler _mtlsmp__Curve [[sampler(1)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float newLum_1;
|
||||
float3 cie_2;
|
||||
float4 color_3;
|
||||
half4 tmpvar_4;
|
||||
float newLum_1 = 0;
|
||||
float3 cie_2 = 0;
|
||||
float4 color_3 = 0;
|
||||
half4 tmpvar_4 = 0;
|
||||
tmpvar_4 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0));
|
||||
color_3 = float4(tmpvar_4);
|
||||
float3 Yxy_5;
|
||||
float3 tmpvar_6;
|
||||
float3 Yxy_5 = 0;
|
||||
float3 tmpvar_6 = 0;
|
||||
tmpvar_6 = (float3x3(float3(0.514136, 0.265068, 0.0241188), float3(0.323879, 0.670234, 0.122818), float3(0.160364, 0.0640916, 0.844427)) * color_3.xyz);
|
||||
Yxy_5.x = tmpvar_6.y;
|
||||
Yxy_5.yz = (tmpvar_6.xy / dot (float3(1.0, 1.0, 1.0), tmpvar_6));
|
||||
cie_2.yz = Yxy_5.yz;
|
||||
float2 tmpvar_7;
|
||||
float2 tmpvar_7 = 0;
|
||||
tmpvar_7.y = 0.5;
|
||||
tmpvar_7.x = (tmpvar_6.y * _mtl_u._RangeScale);
|
||||
half tmpvar_8;
|
||||
half tmpvar_8 = 0;
|
||||
tmpvar_8 = _Curve.sample(_mtlsmp__Curve, (float2)(tmpvar_7)).x;
|
||||
newLum_1 = float(tmpvar_8);
|
||||
cie_2.x = newLum_1;
|
||||
float3 XYZ_9;
|
||||
float3 XYZ_9 = 0;
|
||||
XYZ_9.x = ((newLum_1 * Yxy_5.y) / Yxy_5.z);
|
||||
XYZ_9.y = cie_2.x;
|
||||
XYZ_9.z = ((newLum_1 * (
|
||||
|
@ -24,31 +24,31 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _TranslucencyMap [[texture(2)]], sampler _mtlsmp__TranslucencyMap [[sampler(2)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half nh_2;
|
||||
half nl_3;
|
||||
half3 lightColor_4;
|
||||
half3 backContribs_5;
|
||||
half3 light_6;
|
||||
half gloss_7;
|
||||
half specular_8;
|
||||
half3 albedo_9;
|
||||
half4 tmpvar_10;
|
||||
half4 c_1 = 0;
|
||||
half nh_2 = 0;
|
||||
half nl_3 = 0;
|
||||
half3 lightColor_4 = 0;
|
||||
half3 backContribs_5 = 0;
|
||||
half3 light_6 = 0;
|
||||
half gloss_7 = 0;
|
||||
half specular_8 = 0;
|
||||
half3 albedo_9 = 0;
|
||||
half4 tmpvar_10 = 0;
|
||||
tmpvar_10 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0));
|
||||
half x_11;
|
||||
half x_11 = 0;
|
||||
x_11 = (tmpvar_10.w - _mtl_u._Cutoff);
|
||||
if ((x_11 < (half)0.0)) {
|
||||
if ((x_11 < (half)(0.0))) {
|
||||
discard_fragment();
|
||||
};
|
||||
albedo_9 = half3(((float3)tmpvar_10.xyz * _mtl_i.xlv_TEXCOORD1));
|
||||
half4 tmpvar_12;
|
||||
albedo_9 = half3(((float3)(tmpvar_10.xyz) * _mtl_i.xlv_TEXCOORD1));
|
||||
half4 tmpvar_12 = 0;
|
||||
tmpvar_12 = _BumpSpecMap.sample(_mtlsmp__BumpSpecMap, (float2)(_mtl_i.xlv_TEXCOORD0));
|
||||
specular_8 = (tmpvar_12.x * (half)128.0);
|
||||
half4 tmpvar_13;
|
||||
specular_8 = (tmpvar_12.x * (half)(128.0));
|
||||
half4 tmpvar_13 = 0;
|
||||
tmpvar_13 = _TranslucencyMap.sample(_mtlsmp__TranslucencyMap, (float2)(_mtl_i.xlv_TEXCOORD0));
|
||||
gloss_7 = tmpvar_13.w;
|
||||
light_6 = (_mtl_u.UNITY_LIGHTMODEL_AMBIENT.xyz * albedo_9);
|
||||
backContribs_5 = half3((_mtl_i.xlv_TEXCOORD2 * (float)tmpvar_13.z));
|
||||
backContribs_5 = half3((_mtl_i.xlv_TEXCOORD2 * (float)(tmpvar_13.z)));
|
||||
lightColor_4 = half3(_mtl_u._TerrainTreeLightColors[0].xyz);
|
||||
nl_3 = half(_mtl_i.xlv_TEXCOORD3.x);
|
||||
nh_2 = half(_mtl_i.xlv_TEXCOORD4.x);
|
||||
@ -73,7 +73,7 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
+
|
||||
(_mtl_u._SpecColor.xyz * (pow (nh_2, specular_8) * gloss_7))
|
||||
) * lightColor_4));
|
||||
c_1.xyz = (light_6 * (half)2.0);
|
||||
c_1.xyz = (light_6 * (half)(2.0));
|
||||
c_1.w = half(1.0);
|
||||
_mtl_o._fragData = c_1;
|
||||
return _mtl_o;
|
||||
|
@ -35,10 +35,10 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _SelfIllum [[texture(11)]], sampler _mtlsmp__SelfIllum [[sampler(11)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half3 lightDir_1;
|
||||
half3 env_2;
|
||||
float3 tmpvar_3;
|
||||
float3 tmpvar_4;
|
||||
half3 lightDir_1 = 0;
|
||||
half3 env_2 = 0;
|
||||
float3 tmpvar_3 = 0;
|
||||
float3 tmpvar_4 = 0;
|
||||
tmpvar_3 = _mtl_i.xlv_TEXCOORD3.xyz;
|
||||
tmpvar_4 = (((_mtl_i.xlv_TEXCOORD2.yzx * _mtl_i.xlv_TEXCOORD3.zxy) - (_mtl_i.xlv_TEXCOORD2.zxy * _mtl_i.xlv_TEXCOORD3.yzx)) * _mtl_i.xlv_TEXCOORD3.www);
|
||||
float3x3 tmpvar_5;
|
||||
@ -51,51 +51,51 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
tmpvar_5[2].x = tmpvar_3.z;
|
||||
tmpvar_5[2].y = tmpvar_4.z;
|
||||
tmpvar_5[2].z = _mtl_i.xlv_TEXCOORD2.z;
|
||||
half3 normal_6;
|
||||
normal_6.xy = ((_BumpMap.sample(_mtlsmp__BumpMap, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).wy * (half)2.0) - (half)1.0);
|
||||
normal_6.xy = ((half2)((float2)normal_6.xy * _mtl_u._BumpScale));
|
||||
normal_6.z = sqrt(((half)1.0 - clamp (
|
||||
half3 normal_6 = 0;
|
||||
normal_6.xy = ((_BumpMap.sample(_mtlsmp__BumpMap, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).wy * (half)(2.0)) - (half)(1.0));
|
||||
normal_6.xy = ((half2)((float2)(normal_6.xy) * _mtl_u._BumpScale));
|
||||
normal_6.z = sqrt(((half)(1.0) - clamp (
|
||||
dot (normal_6.xy, normal_6.xy)
|
||||
, (half)0.0, (half)1.0)));
|
||||
half3 normal_7;
|
||||
normal_7.xy = ((_DetailNormalMap.sample(_mtlsmp__DetailNormalMap, (float2)(_mtl_i.xlv_TEXCOORD0.zw)).wy * (half)2.0) - (half)1.0);
|
||||
normal_7.xy = ((half2)((float2)normal_7.xy * _mtl_u._DetailNormalMapScale));
|
||||
normal_7.z = sqrt(((half)1.0 - clamp (
|
||||
half3 normal_7 = 0;
|
||||
normal_7.xy = ((_DetailNormalMap.sample(_mtlsmp__DetailNormalMap, (float2)(_mtl_i.xlv_TEXCOORD0.zw)).wy * (half)(2.0)) - (half)(1.0));
|
||||
normal_7.xy = ((half2)((float2)(normal_7.xy) * _mtl_u._DetailNormalMapScale));
|
||||
normal_7.z = sqrt(((half)(1.0) - clamp (
|
||||
dot (normal_7.xy, normal_7.xy)
|
||||
, (half)0.0, (half)1.0)));
|
||||
half3 tmpvar_8;
|
||||
half3 tmpvar_8 = 0;
|
||||
tmpvar_8.xy = (normal_6.xy + normal_7.xy);
|
||||
tmpvar_8.z = (normal_6.z * normal_7.z);
|
||||
half3 tmpvar_9;
|
||||
half3 tmpvar_9 = 0;
|
||||
tmpvar_9 = normalize(tmpvar_8);
|
||||
half3 tmpvar_10;
|
||||
tmpvar_10 = ((half3)((float3)tmpvar_9 * tmpvar_5));
|
||||
float3 tmpvar_11;
|
||||
half3 tmpvar_10 = 0;
|
||||
tmpvar_10 = ((half3)((float3)(tmpvar_9) * tmpvar_5));
|
||||
float3 tmpvar_11 = 0;
|
||||
tmpvar_11 = normalize((_mtl_i.xlv_TEXCOORD1.xyz - _mtl_u._WorldSpaceCameraPos));
|
||||
half4 tmpvar_12;
|
||||
half4 tmpvar_12 = 0;
|
||||
tmpvar_12 = _SpecGlossMap.sample(_mtlsmp__SpecGlossMap, (float2)(_mtl_i.xlv_TEXCOORD0.xy));
|
||||
half tmpvar_13;
|
||||
half tmpvar_13 = 0;
|
||||
tmpvar_13 = dot (tmpvar_12.xyz, (half3)float3(0.299, 0.587, 0.114));
|
||||
half tmpvar_14;
|
||||
tmpvar_14 = ((half)1.0 - tmpvar_12.w);
|
||||
half4 tmpvar_15;
|
||||
tmpvar_15.xyz = ((half3)(tmpvar_11 - (float3)((half)2.0 * (
|
||||
half tmpvar_14 = 0;
|
||||
tmpvar_14 = ((half)(1.0) - tmpvar_12.w);
|
||||
half4 tmpvar_15 = 0;
|
||||
tmpvar_15.xyz = ((half3)(tmpvar_11 - (float3)(((half)(2.0) * (
|
||||
((half)dot ((float3)tmpvar_10, tmpvar_11))
|
||||
* tmpvar_10))));
|
||||
tmpvar_15.w = (tmpvar_14 * (half)5.0);
|
||||
half4 tmpvar_16;
|
||||
* tmpvar_10)))));
|
||||
tmpvar_15.w = (tmpvar_14 * (half)(5.0));
|
||||
half4 tmpvar_16 = 0;
|
||||
tmpvar_16 = _SpecCube.sample(_mtlsmp__SpecCube, (float3)(tmpvar_15.xyz), level(tmpvar_15.w));
|
||||
half tmpvar_17;
|
||||
half tmpvar_17 = 0;
|
||||
tmpvar_17 = (tmpvar_16.w * tmpvar_16.w);
|
||||
half2 tmpvar_18;
|
||||
half2 tmpvar_18 = 0;
|
||||
tmpvar_18.x = tmpvar_17;
|
||||
tmpvar_18.y = (tmpvar_16.w * tmpvar_17);
|
||||
env_2 = (((half3)((float3)(tmpvar_16.xyz *
|
||||
env_2 = (((half3)((float3)((tmpvar_16.xyz *
|
||||
dot ((half2)float2(0.7532, 0.2468), tmpvar_18)
|
||||
) * _mtl_u._Exposure)) * _Occlusion.sample(_mtlsmp__Occlusion, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).x);
|
||||
half4 tmpvar_19;
|
||||
)) * _mtl_u._Exposure)) * _Occlusion.sample(_mtlsmp__Occlusion, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).x);
|
||||
half4 tmpvar_19 = 0;
|
||||
tmpvar_19 = unity_Lightmap.sample(_mtlsmp_unity_Lightmap, (float2)(_mtl_i.xlv_TEXCOORD4.xy));
|
||||
half4 tmpvar_20;
|
||||
half4 tmpvar_20 = 0;
|
||||
tmpvar_20 = unity_LightmapInd.sample(_mtlsmp_unity_LightmapInd, (float2)(_mtl_i.xlv_TEXCOORD4.xy));
|
||||
float3x3 tmpvar_21;
|
||||
tmpvar_21[0].x = 0.816497;
|
||||
@ -107,80 +107,80 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
tmpvar_21[2].x = 0.57735;
|
||||
tmpvar_21[2].y = 0.57735;
|
||||
tmpvar_21[2].z = 0.57735;
|
||||
half3 tmpvar_22;
|
||||
tmpvar_22 = (((half)8.0 * tmpvar_20.w) * tmpvar_20.xyz);
|
||||
float3 v_23;
|
||||
half3 tmpvar_22 = 0;
|
||||
tmpvar_22 = (((half)(8.0) * tmpvar_20.w) * tmpvar_20.xyz);
|
||||
float3 v_23 = 0;
|
||||
v_23.x = tmpvar_21[0].x;
|
||||
v_23.y = tmpvar_21[1].x;
|
||||
v_23.z = tmpvar_21[2].x;
|
||||
float3 v_24;
|
||||
float3 v_24 = 0;
|
||||
v_24.x = tmpvar_21[0].y;
|
||||
v_24.y = tmpvar_21[1].y;
|
||||
v_24.z = tmpvar_21[2].y;
|
||||
float3 v_25;
|
||||
float3 v_25 = 0;
|
||||
v_25.x = tmpvar_21[0].z;
|
||||
v_25.y = tmpvar_21[1].z;
|
||||
v_25.z = tmpvar_21[2].z;
|
||||
lightDir_1 = ((half3)((float3)normalize((
|
||||
((tmpvar_22.x * (half3)v_23) + (tmpvar_22.y * (half3)v_24))
|
||||
lightDir_1 = ((half3)((float3)(normalize((
|
||||
((tmpvar_22.x * (half3)(v_23)) + (tmpvar_22.y * (half3)(v_24)))
|
||||
+
|
||||
(tmpvar_22.z * (half3)v_25)
|
||||
)) * tmpvar_5));
|
||||
half3 tmpvar_26;
|
||||
(tmpvar_22.z * (half3)(v_25))
|
||||
))) * tmpvar_5));
|
||||
half3 tmpvar_26 = 0;
|
||||
tmpvar_26 = normalize(lightDir_1);
|
||||
lightDir_1 = tmpvar_26;
|
||||
half3 lightColor_27;
|
||||
half3 lightColor_27 = 0;
|
||||
lightColor_27 = (_ShadowMapTexture.sample(_mtlsmp__ShadowMapTexture, ((float2)(_mtl_i.xlv_TEXCOORD5).xy / (float)(_mtl_i.xlv_TEXCOORD5).w)).x * ((
|
||||
((half)8.0 * tmpvar_19.w)
|
||||
((half)(8.0) * tmpvar_19.w)
|
||||
* tmpvar_19.xyz) * dot (
|
||||
clamp (((half3)(tmpvar_21 * (float3)tmpvar_9)), (half)0.0, (half)1.0)
|
||||
clamp (((half3)(tmpvar_21 * (float3)(tmpvar_9))), (half)0.0, (half)1.0)
|
||||
, tmpvar_22)));
|
||||
float3 viewDir_28;
|
||||
float3 viewDir_28 = 0;
|
||||
viewDir_28 = -(tmpvar_11);
|
||||
half3 tmpvar_29;
|
||||
tmpvar_29 = normalize(((half3)((float3)tmpvar_26 + viewDir_28)));
|
||||
half tmpvar_30;
|
||||
half3 tmpvar_29 = 0;
|
||||
tmpvar_29 = normalize(((half3)((float3)(tmpvar_26) + viewDir_28)));
|
||||
half tmpvar_30 = 0;
|
||||
tmpvar_30 = max ((half)0.0, dot (tmpvar_10, tmpvar_26));
|
||||
half tmpvar_31;
|
||||
half tmpvar_31 = 0;
|
||||
tmpvar_31 = max ((half)0.0, dot (tmpvar_10, tmpvar_29));
|
||||
half tmpvar_32;
|
||||
half tmpvar_32 = 0;
|
||||
tmpvar_32 = max ((half)0.0, ((half)dot ((float3)tmpvar_10, viewDir_28)));
|
||||
half tmpvar_33;
|
||||
half tmpvar_33 = 0;
|
||||
tmpvar_33 = max ((half)0.0, ((half)dot (viewDir_28, (float3)tmpvar_29)));
|
||||
half VdotH_34;
|
||||
VdotH_34 = (tmpvar_33 + (half)1e-05);
|
||||
half tmpvar_35;
|
||||
half VdotH_34 = 0;
|
||||
VdotH_34 = (tmpvar_33 + (half)(1e-05));
|
||||
half tmpvar_35 = 0;
|
||||
tmpvar_35 = (((half)1.0/((
|
||||
pow (tmpvar_14, (half)4.0)
|
||||
+ (half)1e-05))) - (half)2.0);
|
||||
half tmpvar_36;
|
||||
half tmpvar_37;
|
||||
+ (half)(1e-05)))) - (half)(2.0));
|
||||
half tmpvar_36 = 0;
|
||||
half tmpvar_37 = 0;
|
||||
tmpvar_37 = max ((half)0.0, dot (tmpvar_26, tmpvar_29));
|
||||
tmpvar_36 = ((half)0.5 + (((half)2.0 * tmpvar_37) * (tmpvar_37 * tmpvar_14)));
|
||||
half4 tmpvar_38;
|
||||
tmpvar_36 = ((half)(0.5) + (((half)(2.0) * tmpvar_37) * (tmpvar_37 * tmpvar_14)));
|
||||
half4 tmpvar_38 = 0;
|
||||
tmpvar_38.xyz = (((
|
||||
(min ((((half3)(_mtl_u._Color.xyz * (float3)_MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).xyz)) * ((half)2.0 * _DetailAlbedoMap.sample(_mtlsmp__DetailAlbedoMap, (float2)(_mtl_i.xlv_TEXCOORD0.zw)).xyz)), ((half3)float3(1.0, 1.0, 1.0) - tmpvar_13)) * (((
|
||||
((half)1.0 + ((tmpvar_36 - (half)1.0) * pow (((half)1.00001 - tmpvar_30), (half)5.0)))
|
||||
(min ((((half3)(_mtl_u._Color.xyz * (float3)(_MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).xyz))) * ((half)(2.0) * _DetailAlbedoMap.sample(_mtlsmp__DetailAlbedoMap, (float2)(_mtl_i.xlv_TEXCOORD0.zw)).xyz)), ((half3)(float3(1.0, 1.0, 1.0)) - tmpvar_13)) * (((
|
||||
((half)(1.0) + ((tmpvar_36 - (half)(1.0)) * pow (((half)(1.00001) - tmpvar_30), (half)5.0)))
|
||||
*
|
||||
((half)1.0 + ((tmpvar_36 - (half)1.0) * pow (((half)1.00001 - tmpvar_32), (half)5.0)))
|
||||
((half)(1.0) + ((tmpvar_36 - (half)(1.0)) * pow (((half)(1.00001) - tmpvar_32), (half)5.0)))
|
||||
) * tmpvar_30) * lightColor_27))
|
||||
+
|
||||
(tmpvar_12.xyz * (env_2 + (lightColor_27 * max ((half)0.0,
|
||||
((((tmpvar_13 +
|
||||
(((half)1.0 - tmpvar_13) * pow (abs(((half)1.0 - tmpvar_33)), (half)5.0))
|
||||
(((half)(1.0) - tmpvar_13) * pow (abs(((half)(1.0) - tmpvar_33)), (half)5.0))
|
||||
) * min ((half)1.0,
|
||||
min (((((half)2.0 * tmpvar_31) * tmpvar_32) / VdotH_34), ((((half)2.0 * tmpvar_31) * tmpvar_30) / VdotH_34))
|
||||
min (((((half)(2.0) * tmpvar_31) * tmpvar_32) / VdotH_34), ((((half)(2.0) * tmpvar_31) * tmpvar_30) / VdotH_34))
|
||||
)) * max ((half)0.0, (
|
||||
pow (tmpvar_31, tmpvar_35)
|
||||
*
|
||||
((tmpvar_35 + (half)1.0) / (half)6.28318)
|
||||
))) / (((half)4.0 * tmpvar_32) + (half)1e-05))
|
||||
((tmpvar_35 + (half)(1.0)) / (half)(6.28318))
|
||||
))) / (((half)(4.0) * tmpvar_32) + (half)(1e-05)))
|
||||
))))
|
||||
) + (
|
||||
((((half)1.0 - dot (tmpvar_12.xyz, (half3)float3(0.299, 0.587, 0.114))) * ((half)1.0 - tmpvar_14)) * pow (abs(((half)1.0 - tmpvar_32)), (half)5.0))
|
||||
* env_2)) + ((half3)((float3)_SelfIllum.sample(_mtlsmp__SelfIllum, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).xyz * _mtl_u._SelfIllumScale)));
|
||||
tmpvar_38.w = ((half)((float)_AlphaMap.sample(_mtlsmp__AlphaMap, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).w * _mtl_u._Color.w));
|
||||
half4 tmpvar_39;
|
||||
((((half)(1.0) - dot (tmpvar_12.xyz, (half3)float3(0.299, 0.587, 0.114))) * ((half)(1.0) - tmpvar_14)) * pow (abs(((half)(1.0) - tmpvar_32)), (half)5.0))
|
||||
* env_2)) + ((half3)((float3)(_SelfIllum.sample(_mtlsmp__SelfIllum, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).xyz) * _mtl_u._SelfIllumScale)));
|
||||
tmpvar_38.w = ((half)((float)(_AlphaMap.sample(_mtlsmp__AlphaMap, (float2)(_mtl_i.xlv_TEXCOORD0.xy)).w) * _mtl_u._Color.w));
|
||||
half4 tmpvar_39 = 0;
|
||||
tmpvar_39 = tmpvar_38;
|
||||
_mtl_o._fragData = tmpvar_39;
|
||||
return _mtl_o;
|
||||
|
@ -20,44 +20,44 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _MainTex [[texture(2)]], sampler _mtlsmp__MainTex [[sampler(2)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half atten_2;
|
||||
half4 lightCoord_3;
|
||||
float3 tmpvar_4;
|
||||
half4 c_1 = 0;
|
||||
half atten_2 = 0;
|
||||
half4 lightCoord_3 = 0;
|
||||
float3 tmpvar_4 = 0;
|
||||
tmpvar_4 = normalize((_mtl_u._WorldSpaceLightPos0.xyz - _mtl_i.xlv_TEXCOORD2));
|
||||
half3 tmpvar_5;
|
||||
half tmpvar_6;
|
||||
half4 c_7;
|
||||
half4 tmpvar_8;
|
||||
half3 tmpvar_5 = 0;
|
||||
half tmpvar_6 = 0;
|
||||
half4 c_7 = 0;
|
||||
half4 tmpvar_8 = 0;
|
||||
tmpvar_8 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0));
|
||||
c_7 = tmpvar_8;
|
||||
tmpvar_5 = c_7.xyz;
|
||||
tmpvar_6 = c_7.w;
|
||||
float4 tmpvar_9;
|
||||
float4 tmpvar_9 = 0;
|
||||
tmpvar_9.w = 1.0;
|
||||
tmpvar_9.xyz = _mtl_i.xlv_TEXCOORD2;
|
||||
float4 tmpvar_10;
|
||||
tmpvar_10 = ((float4)(_mtl_u._LightMatrix0 * (half4)tmpvar_9));
|
||||
float4 tmpvar_10 = 0;
|
||||
tmpvar_10 = ((float4)(_mtl_u._LightMatrix0 * (half4)(tmpvar_9)));
|
||||
lightCoord_3 = half4(tmpvar_10);
|
||||
half4 tmpvar_11;
|
||||
half2 P_12;
|
||||
P_12 = ((lightCoord_3.xy / lightCoord_3.w) + (half)0.5);
|
||||
half4 tmpvar_11 = 0;
|
||||
half2 P_12 = 0;
|
||||
P_12 = ((lightCoord_3.xy / lightCoord_3.w) + (half)(0.5));
|
||||
tmpvar_11 = _LightTexture0.sample(_mtlsmp__LightTexture0, (float2)(P_12));
|
||||
half tmpvar_13;
|
||||
half tmpvar_13 = 0;
|
||||
tmpvar_13 = dot (lightCoord_3.xyz, lightCoord_3.xyz);
|
||||
half4 tmpvar_14;
|
||||
half4 tmpvar_14 = 0;
|
||||
tmpvar_14 = _LightTextureB0.sample(_mtlsmp__LightTextureB0, (float2)(half2(tmpvar_13)));
|
||||
half tmpvar_15;
|
||||
half tmpvar_15 = 0;
|
||||
tmpvar_15 = ((half(
|
||||
(lightCoord_3.z > (half)0.0)
|
||||
(lightCoord_3.z > (half)(0.0))
|
||||
) * tmpvar_11.w) * tmpvar_14.w);
|
||||
atten_2 = tmpvar_15;
|
||||
half3 lightDir_16;
|
||||
half3 lightDir_16 = 0;
|
||||
lightDir_16 = half3(tmpvar_4);
|
||||
half4 c_17;
|
||||
half4 c_17 = 0;
|
||||
c_17.xyz = ((tmpvar_5 * _mtl_u._LightColor0.xyz) * ((
|
||||
max ((half)0.0, dot (_mtl_i.xlv_TEXCOORD1, lightDir_16))
|
||||
* atten_2) * (half)2.0));
|
||||
* atten_2) * (half)(2.0)));
|
||||
c_17.w = tmpvar_6;
|
||||
c_1.xyz = c_17.xyz;
|
||||
c_1.w = half(0.0);
|
||||
|
@ -19,23 +19,23 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _MainTex [[texture(1)]], sampler _mtlsmp__MainTex [[sampler(1)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 c_1;
|
||||
half4 tmpvar_2;
|
||||
half4 c_1 = 0;
|
||||
half4 tmpvar_2 = 0;
|
||||
tmpvar_2 = _MainTex.sample(_mtlsmp__MainTex, (float2)(_mtl_i.xlv_TEXCOORD0));
|
||||
half3 tmpvar_3;
|
||||
tmpvar_3 = ((_BumpMap.sample(_mtlsmp__BumpMap, (float2)(_mtl_i.xlv_TEXCOORD0)).xyz * (half)2.0) - (half)1.0);
|
||||
half3 halfDir_4;
|
||||
half3 tmpvar_3 = 0;
|
||||
tmpvar_3 = ((_BumpMap.sample(_mtlsmp__BumpMap, (float2)(_mtl_i.xlv_TEXCOORD0)).xyz * (half)(2.0)) - (half)(1.0));
|
||||
half3 halfDir_4 = 0;
|
||||
halfDir_4 = _mtl_i.xlv_TEXCOORD1;
|
||||
half4 c_5;
|
||||
half spec_6;
|
||||
half tmpvar_7;
|
||||
half4 c_5 = 0;
|
||||
half spec_6 = 0;
|
||||
half tmpvar_7 = 0;
|
||||
tmpvar_7 = max ((half)0.0, dot (tmpvar_3, halfDir_4));
|
||||
half tmpvar_8;
|
||||
tmpvar_8 = pow (tmpvar_7, (_mtl_u._Shininess * (half)128.0));
|
||||
half tmpvar_8 = 0;
|
||||
tmpvar_8 = pow (tmpvar_7, (_mtl_u._Shininess * (half)(128.0)));
|
||||
spec_6 = (tmpvar_8 * tmpvar_2.w);
|
||||
c_5.xyz = (((
|
||||
(tmpvar_2.xyz * max ((half)0.0, dot (tmpvar_3, _mtl_i.xlv_TEXCOORD2)))
|
||||
+ spec_6) * _mtl_u._LightColor0.xyz) * (half)2.0);
|
||||
+ spec_6) * _mtl_u._LightColor0.xyz) * (half)(2.0));
|
||||
c_5.w = half(0.0);
|
||||
c_1.w = c_5.w;
|
||||
c_1.xyz = (c_5.xyz + (tmpvar_2.xyz * _mtl_i.xlv_TEXCOORD3));
|
||||
|
@ -18,23 +18,23 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
, texture2d<half> _RandomTexture [[texture(1)]], sampler _mtlsmp__RandomTexture [[sampler(1)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half tmpvar_1;
|
||||
float2 tmpvar_2;
|
||||
half tmpvar_1 = 0;
|
||||
float2 tmpvar_2 = 0;
|
||||
tmpvar_2 = _mtl_i.xlv_TEXCOORD0;
|
||||
float occ_4;
|
||||
float scale_5;
|
||||
float depth_6;
|
||||
float3 viewNorm_7;
|
||||
half3 randN_8;
|
||||
half3 tmpvar_9;
|
||||
tmpvar_9 = ((_RandomTexture.sample(_mtlsmp__RandomTexture, (float2)(_mtl_i.xlv_TEXCOORD1)).xyz * (half)2.0) - (half)1.0);
|
||||
float occ_4 = 0;
|
||||
float scale_5 = 0;
|
||||
float depth_6 = 0;
|
||||
float3 viewNorm_7 = 0;
|
||||
half3 randN_8 = 0;
|
||||
half3 tmpvar_9 = 0;
|
||||
tmpvar_9 = ((_RandomTexture.sample(_mtlsmp__RandomTexture, (float2)(_mtl_i.xlv_TEXCOORD1)).xyz * (half)(2.0)) - (half)(1.0));
|
||||
randN_8 = tmpvar_9;
|
||||
float4 tmpvar_10;
|
||||
float4 tmpvar_10 = 0;
|
||||
tmpvar_10 = _CameraDepthNormalsTexture.sample(_mtlsmp__CameraDepthNormalsTexture, (float2)(_mtl_i.xlv_TEXCOORD0));
|
||||
float3 n_11;
|
||||
float3 tmpvar_12;
|
||||
float3 n_11 = 0;
|
||||
float3 tmpvar_12 = 0;
|
||||
tmpvar_12 = ((tmpvar_10.xyz * float3(3.5554, 3.5554, 0.0)) + float3(-1.7777, -1.7777, 1.0));
|
||||
float tmpvar_13;
|
||||
float tmpvar_13 = 0;
|
||||
tmpvar_13 = (2.0 / dot (tmpvar_12, tmpvar_12));
|
||||
n_11.xy = (tmpvar_13 * tmpvar_12.xy);
|
||||
n_11.z = (tmpvar_13 - 1.0);
|
||||
@ -43,29 +43,29 @@ fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]]
|
||||
scale_5 = (_mtl_u._Params.x / depth_6);
|
||||
occ_4 = 0.0;
|
||||
for (int s_3 = 0; s_3 < 8; s_3++) {
|
||||
half3 randomDir_14;
|
||||
float3 tmpvar_15;
|
||||
float3 I_16;
|
||||
half3 randomDir_14 = 0;
|
||||
float3 tmpvar_15 = 0;
|
||||
float3 I_16 = 0;
|
||||
I_16 = _xlat_mtl_const1[s_3];
|
||||
tmpvar_15 = (I_16 - (float3)((half)2.0 * ((half3)(
|
||||
tmpvar_15 = (I_16 - (float3)(((half)(2.0) * ((half3)(
|
||||
dot ((float3)randN_8, I_16)
|
||||
* (float3)randN_8))));
|
||||
* (float3)(randN_8))))));
|
||||
randomDir_14 = half3(tmpvar_15);
|
||||
float tmpvar_17;
|
||||
float tmpvar_17 = 0;
|
||||
tmpvar_17 = dot (viewNorm_7, (float3)randomDir_14);
|
||||
half tmpvar_18;
|
||||
half tmpvar_18 = 0;
|
||||
if ((tmpvar_17 < 0.0)) {
|
||||
tmpvar_18 = half(1.0);
|
||||
} else {
|
||||
tmpvar_18 = half(-1.0);
|
||||
};
|
||||
randomDir_14 = (randomDir_14 * -(tmpvar_18));
|
||||
randomDir_14 = half3(((float3)randomDir_14 + (viewNorm_7 * 0.3)));
|
||||
float tmpvar_19;
|
||||
randomDir_14 = half3(((float3)(randomDir_14) + (viewNorm_7 * 0.3)));
|
||||
float tmpvar_19 = 0;
|
||||
tmpvar_19 = clamp (((depth_6 -
|
||||
((float)randomDir_14.z * _mtl_u._Params.x)
|
||||
((float)(randomDir_14.z) * _mtl_u._Params.x)
|
||||
) - (
|
||||
dot (_CameraDepthNormalsTexture.sample(_mtlsmp__CameraDepthNormalsTexture, (float2)((tmpvar_2 + ((float2)randomDir_14.xy * scale_5)))).zw, float2(1.0, 0.00392157))
|
||||
dot (_CameraDepthNormalsTexture.sample(_mtlsmp__CameraDepthNormalsTexture, (float2)((tmpvar_2 + ((float2)(randomDir_14.xy) * scale_5)))).zw, float2(1.0, 0.00392157))
|
||||
* _mtl_u._ProjectionParams.z)), 0.0, 1.0);
|
||||
if ((tmpvar_19 > _mtl_u._Params.y)) {
|
||||
occ_4 = (occ_4 + pow ((1.0 - tmpvar_19), _mtl_u._Params.z));
|
||||
|
@ -35,46 +35,46 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float3 tmpvar_1;
|
||||
float4 tmpvar_2;
|
||||
float3 tmpvar_1 = 0;
|
||||
float4 tmpvar_2 = 0;
|
||||
tmpvar_1 = float3(_mtl_i._inNormal);
|
||||
tmpvar_2 = float4(_mtl_i._color);
|
||||
half4 tmpvar_3;
|
||||
float noiseWave_4;
|
||||
float noiseTime_5;
|
||||
float wave_6;
|
||||
float time_7;
|
||||
float3 BBLocalPos_8;
|
||||
float3 localDir_9;
|
||||
float3 centerLocal_10;
|
||||
float3 centerOffs_11;
|
||||
float3 tmpvar_12;
|
||||
half4 tmpvar_3 = 0;
|
||||
float noiseWave_4 = 0;
|
||||
float noiseTime_5 = 0;
|
||||
float wave_6 = 0;
|
||||
float time_7 = 0;
|
||||
float3 BBLocalPos_8 = 0;
|
||||
float3 localDir_9 = 0;
|
||||
float3 centerLocal_10 = 0;
|
||||
float3 centerOffs_11 = 0;
|
||||
float3 tmpvar_12 = 0;
|
||||
tmpvar_12.z = 0.0;
|
||||
tmpvar_12.xy = (float2(0.5, 0.5) - tmpvar_2.xy);
|
||||
centerOffs_11 = (tmpvar_12 * _mtl_i._uv1.xyy);
|
||||
centerLocal_10 = (_mtl_i._inVertex.xyz + centerOffs_11);
|
||||
float4 tmpvar_13;
|
||||
float4 tmpvar_13 = 0;
|
||||
tmpvar_13.w = 1.0;
|
||||
tmpvar_13.xyz = _mtl_u._WorldSpaceCameraPos;
|
||||
localDir_9 = ((_mtl_u._World2Object * tmpvar_13).xyz - centerLocal_10);
|
||||
localDir_9.y = (localDir_9.y * _mtl_u._VerticalBillboarding);
|
||||
float tmpvar_14;
|
||||
float tmpvar_14 = 0;
|
||||
tmpvar_14 = sqrt(dot (localDir_9, localDir_9));
|
||||
float3 dir_15;
|
||||
float3 dir_15 = 0;
|
||||
dir_15 = (localDir_9 / tmpvar_14);
|
||||
float tmpvar_16;
|
||||
float tmpvar_16 = 0;
|
||||
tmpvar_16 = abs(dir_15.y);
|
||||
float3 tmpvar_17;
|
||||
float3 tmpvar_17 = 0;
|
||||
if ((tmpvar_16 > 0.999)) {
|
||||
tmpvar_17 = float3(0.0, 0.0, 1.0);
|
||||
} else {
|
||||
tmpvar_17 = float3(0.0, 1.0, 0.0);
|
||||
};
|
||||
float3 tmpvar_18;
|
||||
float3 tmpvar_18 = 0;
|
||||
tmpvar_18 = normalize(((tmpvar_17.yzx * dir_15.zxy) - (tmpvar_17.zxy * dir_15.yzx)));
|
||||
float3 tmpvar_19;
|
||||
float3 tmpvar_19 = 0;
|
||||
tmpvar_19 = ((dir_15.yzx * tmpvar_18.zxy) - (dir_15.zxy * tmpvar_18.yzx));
|
||||
float tmpvar_20;
|
||||
float tmpvar_20 = 0;
|
||||
tmpvar_20 = min ((max (
|
||||
(tmpvar_14 - _mtl_u._SizeGrowStartDist)
|
||||
, 0.0) / _mtl_u._SizeGrowEndDist), 1.0);
|
||||
@ -92,23 +92,23 @@ vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]],
|
||||
(_mtl_u._MaxGrowSize * tmpvar_2.w)
|
||||
)));
|
||||
time_7 = (_mtl_u._Time.y + (_mtl_u._BlinkingTimeOffsScale * tmpvar_2.z));
|
||||
float y_21;
|
||||
float y_21 = 0;
|
||||
y_21 = (_mtl_u._TimeOnDuration + _mtl_u._TimeOffDuration);
|
||||
float tmpvar_22;
|
||||
float tmpvar_22 = 0;
|
||||
tmpvar_22 = (time_7 / y_21);
|
||||
float tmpvar_23;
|
||||
float tmpvar_23 = 0;
|
||||
tmpvar_23 = (fract(abs(tmpvar_22)) * y_21);
|
||||
float tmpvar_24;
|
||||
float tmpvar_24 = 0;
|
||||
if ((tmpvar_22 >= 0.0)) {
|
||||
tmpvar_24 = tmpvar_23;
|
||||
} else {
|
||||
tmpvar_24 = -(tmpvar_23);
|
||||
};
|
||||
float tmpvar_25;
|
||||
float tmpvar_25 = 0;
|
||||
tmpvar_25 = clamp ((tmpvar_24 / (_mtl_u._TimeOnDuration * 0.25)), 0.0, 1.0);
|
||||
float edge0_26;
|
||||
float edge0_26 = 0;
|
||||
edge0_26 = (_mtl_u._TimeOnDuration * 0.75);
|
||||
float tmpvar_27;
|
||||
float tmpvar_27 = 0;
|
||||
tmpvar_27 = clamp (((tmpvar_24 - edge0_26) / (_mtl_u._TimeOnDuration - edge0_26)), 0.0, 1.0);
|
||||
wave_6 = ((tmpvar_25 * (tmpvar_25 *
|
||||
(3.0 - (2.0 * tmpvar_25))
|
||||
@ -123,19 +123,19 @@ vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]],
|
||||
(noiseTime_5 * 0.6366)
|
||||
+ 56.7272))) + 0.5)
|
||||
)) + (1.0 - _mtl_u._NoiseAmount));
|
||||
float tmpvar_28;
|
||||
float tmpvar_28 = 0;
|
||||
if ((_mtl_u._NoiseAmount < 0.01)) {
|
||||
tmpvar_28 = wave_6;
|
||||
} else {
|
||||
tmpvar_28 = noiseWave_4;
|
||||
};
|
||||
wave_6 = (tmpvar_28 + _mtl_u._Bias);
|
||||
float4 tmpvar_29;
|
||||
float4 tmpvar_29 = 0;
|
||||
tmpvar_29.w = 1.0;
|
||||
tmpvar_29.xyz = BBLocalPos_8;
|
||||
float ffadeout_30;
|
||||
float nfadeout_31;
|
||||
float tmpvar_32;
|
||||
float ffadeout_30 = 0;
|
||||
float nfadeout_31 = 0;
|
||||
float tmpvar_32 = 0;
|
||||
tmpvar_32 = clamp ((tmpvar_14 / _mtl_u._FadeOutDistNear), 0.0, 1.0);
|
||||
ffadeout_30 = (1.0 - clamp ((
|
||||
max ((tmpvar_14 - _mtl_u._FadeOutDistFar), 0.0)
|
||||
|
@ -17,33 +17,33 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float3 viewDir_1;
|
||||
float3 tmpvar_2;
|
||||
float4 tmpvar_3;
|
||||
float3 viewDir_1 = 0;
|
||||
float3 tmpvar_2 = 0;
|
||||
float4 tmpvar_3 = 0;
|
||||
tmpvar_3.w = 1.0;
|
||||
tmpvar_3.xyz = _mtl_u._WorldSpaceCameraPos;
|
||||
viewDir_1 = normalize(((_mtl_u._World2Object * tmpvar_3).xyz - _mtl_i._glesVertex.xyz));
|
||||
half tmpvar_4;
|
||||
float tmpvar_5;
|
||||
half tmpvar_4 = 0;
|
||||
float tmpvar_5 = 0;
|
||||
tmpvar_5 = clamp (dot (viewDir_1, -(_mtl_u._TerrainTreeLightDirections[0])), 0.0, 1.0);
|
||||
tmpvar_4 = half(tmpvar_5);
|
||||
float3 tmpvar_6;
|
||||
float3 tmpvar_6 = 0;
|
||||
tmpvar_6.yz = tmpvar_2.yz;
|
||||
tmpvar_6.x = float((tmpvar_4 * (half)2.0));
|
||||
half tmpvar_7;
|
||||
float tmpvar_8;
|
||||
tmpvar_6.x = float((tmpvar_4 * (half)(2.0)));
|
||||
half tmpvar_7 = 0;
|
||||
float tmpvar_8 = 0;
|
||||
tmpvar_8 = clamp (dot (viewDir_1, -(_mtl_u._TerrainTreeLightDirections[1])), 0.0, 1.0);
|
||||
tmpvar_7 = half(tmpvar_8);
|
||||
float3 tmpvar_9;
|
||||
float3 tmpvar_9 = 0;
|
||||
tmpvar_9.xz = tmpvar_6.xz;
|
||||
tmpvar_9.y = float((tmpvar_7 * (half)2.0));
|
||||
half tmpvar_10;
|
||||
float tmpvar_11;
|
||||
tmpvar_9.y = float((tmpvar_7 * (half)(2.0)));
|
||||
half tmpvar_10 = 0;
|
||||
float tmpvar_11 = 0;
|
||||
tmpvar_11 = clamp (dot (viewDir_1, -(_mtl_u._TerrainTreeLightDirections[2])), 0.0, 1.0);
|
||||
tmpvar_10 = half(tmpvar_11);
|
||||
float3 tmpvar_12;
|
||||
float3 tmpvar_12 = 0;
|
||||
tmpvar_12.xy = tmpvar_9.xy;
|
||||
tmpvar_12.z = float((tmpvar_10 * (half)2.0));
|
||||
tmpvar_12.z = float((tmpvar_10 * (half)(2.0)));
|
||||
tmpvar_2 = tmpvar_12;
|
||||
_mtl_o.gl_Position = (_mtl_u.glstate_matrix_mvp * _mtl_i._glesVertex);
|
||||
_mtl_o.xlv_TEXCOORD2 = tmpvar_12;
|
||||
|
@ -16,12 +16,12 @@ vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]],
|
||||
, uint gl_VertexID [[vertex_id]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float3 p_1;
|
||||
float3 p_1 = 0;
|
||||
p_1.z = _mtl_i._inPos.z;
|
||||
p_1.x = (_mtl_i._inPos.x + float(gl_VertexID));
|
||||
p_1.y = (_mtl_i._inPos.y + float(gl_InstanceID));
|
||||
p_1 = (p_1 + _mtl_i._inNor);
|
||||
float4 tmpvar_2;
|
||||
float4 tmpvar_2 = 0;
|
||||
tmpvar_2.w = 1.0;
|
||||
tmpvar_2.xyz = p_1;
|
||||
_mtl_o.gl_Position = tmpvar_2;
|
||||
|
@ -17,14 +17,14 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half2 tmpvar_1;
|
||||
half2 tmpvar_1 = 0;
|
||||
tmpvar_1 = half2(_mtl_i._glesMultiTexCoord0.xy);
|
||||
float4 tmpvar_2;
|
||||
float4 tmpvar_2 = 0;
|
||||
tmpvar_2.xyz = normalize(_mtl_i._glesTANGENT.xyz);
|
||||
tmpvar_2.w = _mtl_i._glesTANGENT.w;
|
||||
half4 tmpvar_3;
|
||||
tmpvar_3.xy = (tmpvar_1 * (half)0.3);
|
||||
tmpvar_3.xyz = half3(((float3)tmpvar_3.xyz + ((tmpvar_2.xyz * 0.5) + 0.5)));
|
||||
half4 tmpvar_3 = 0;
|
||||
tmpvar_3.xy = (tmpvar_1 * (half)(0.3));
|
||||
tmpvar_3.xyz = half3(((float3)(tmpvar_3.xyz) + ((tmpvar_2.xyz * 0.5) + 0.5)));
|
||||
tmpvar_3.w = half(0.0);
|
||||
_mtl_o.gl_Position = (_mtl_u.glstate_matrix_mvp * _mtl_i._glesVertex);
|
||||
_mtl_o.xlv_TEXCOORD0 = tmpvar_1;
|
||||
|
@ -48,12 +48,12 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float4 phase0_Output0_1;
|
||||
float4 Temp_0_2;
|
||||
float4 Temp_1_3;
|
||||
float4 Temp_2_4;
|
||||
float4 Temp_3_5;
|
||||
int4 Temp_int_0_6;
|
||||
float4 phase0_Output0_1 = 0;
|
||||
float4 Temp_0_2 = 0;
|
||||
float4 Temp_1_3 = 0;
|
||||
float4 Temp_2_4 = 0;
|
||||
float4 Temp_3_5 = 0;
|
||||
int4 Temp_int_0_6 = 0;
|
||||
Temp_0_2 = (_mtl_i.dcl_Input0_POSITION0.yyyy * _mtl_u.glstate_matrix_mvp[1]);
|
||||
Temp_0_2 = ((_mtl_u.glstate_matrix_mvp[0] * _mtl_i.dcl_Input0_POSITION0.xxxx) + Temp_0_2);
|
||||
Temp_0_2 = ((_mtl_u.glstate_matrix_mvp[2] * _mtl_i.dcl_Input0_POSITION0.zzzz) + Temp_0_2);
|
||||
|
@ -28,11 +28,11 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float4 phase0_Output2_1;
|
||||
float4 Temp_2_2;
|
||||
float4 Temp_3_3;
|
||||
int4 Temp_int_0_4;
|
||||
int4 Temp_int_1_5;
|
||||
float4 phase0_Output2_1 = 0;
|
||||
float4 Temp_2_2 = 0;
|
||||
float4 Temp_3_3 = 0;
|
||||
int4 Temp_int_0_4 = 0;
|
||||
int4 Temp_int_1_5 = 0;
|
||||
Temp_int_0_4 = as_type<int4>((_mtl_i.in_POSITION0.yyyy * _mtl_u.glstate_matrix_mvp[1]));
|
||||
Temp_int_0_4 = as_type<int4>(((_mtl_u.glstate_matrix_mvp[0] * _mtl_i.in_POSITION0.xxxx) + as_type<float4>(Temp_int_0_4)));
|
||||
Temp_int_0_4 = as_type<int4>(((_mtl_u.glstate_matrix_mvp[2] * _mtl_i.in_POSITION0.zzzz) + as_type<float4>(Temp_int_0_4)));
|
||||
|
@ -17,38 +17,38 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float3 tmpvar_1;
|
||||
float3 tmpvar_1 = 0;
|
||||
tmpvar_1 = _mtl_i._glesVertex.xyz;
|
||||
int j_2;
|
||||
int j_3;
|
||||
int il_4;
|
||||
half3 lcolor_5;
|
||||
half3 eyeNormal_6;
|
||||
half4 color_7;
|
||||
half4 tmpvar_8;
|
||||
int j_2 = 0;
|
||||
int j_3 = 0;
|
||||
int il_4 = 0;
|
||||
half3 lcolor_5 = 0;
|
||||
half3 eyeNormal_6 = 0;
|
||||
half4 color_7 = 0;
|
||||
half4 tmpvar_8 = 0;
|
||||
color_7 = half4(float4(0.0, 0.0, 0.0, 1.1));
|
||||
eyeNormal_6 = half3(_mtl_i._glesNormal);
|
||||
lcolor_5 = half3(float3(0.0, 0.0, 0.0));
|
||||
il_4 = 0;
|
||||
while (true) {
|
||||
float tmpvar_9;
|
||||
float tmpvar_9 = 0;
|
||||
tmpvar_9 = min (8.0, float(_mtl_u.unity_VertexLightParams.x));
|
||||
if ((float(il_4) >= tmpvar_9)) {
|
||||
break;
|
||||
};
|
||||
float3 tmpvar_10;
|
||||
float3 tmpvar_10 = 0;
|
||||
tmpvar_10 = _mtl_u.unity_LightPosition[il_4].xyz;
|
||||
half3 dirToLight_11;
|
||||
half3 dirToLight_11 = 0;
|
||||
dirToLight_11 = half3(tmpvar_10);
|
||||
lcolor_5 = (lcolor_5 + min ((
|
||||
(max (dot (eyeNormal_6, dirToLight_11), (half)0.0) * _mtl_u.unity_LightColor[il_4].xyz)
|
||||
* (half)0.5), (half3)float3(1.0, 1.0, 1.0)));
|
||||
* (half)(0.5)), (half3)float3(1.0, 1.0, 1.0)));
|
||||
il_4++;
|
||||
};
|
||||
color_7.xyz = lcolor_5;
|
||||
j_3 = 0;
|
||||
while (true) {
|
||||
float tmpvar_12;
|
||||
float tmpvar_12 = 0;
|
||||
tmpvar_12 = min (float(_mtl_u.unity_VertexLightParams.y), 4.0);
|
||||
if ((j_3 >= int(tmpvar_12))) {
|
||||
break;
|
||||
@ -58,7 +58,7 @@ vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]],
|
||||
};
|
||||
j_2 = 0;
|
||||
while (true) {
|
||||
int tmpvar_13;
|
||||
int tmpvar_13 = 0;
|
||||
tmpvar_13 = min (_mtl_u.unity_VertexLightParams.y, 4);
|
||||
if ((j_2 >= tmpvar_13)) {
|
||||
break;
|
||||
@ -67,7 +67,7 @@ vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]],
|
||||
j_2++;
|
||||
};
|
||||
tmpvar_8 = color_7;
|
||||
float4 tmpvar_14;
|
||||
float4 tmpvar_14 = 0;
|
||||
tmpvar_14.w = 1.0;
|
||||
tmpvar_14.xyz = tmpvar_1;
|
||||
_mtl_o.xlv_COLOR0 = tmpvar_8;
|
||||
|
@ -16,31 +16,31 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float4 l_1_1;
|
||||
float4 l_2;
|
||||
half4 tmpvar_3;
|
||||
half4 tmpvar_4;
|
||||
float4 l_1_1 = 0;
|
||||
float4 l_2 = 0;
|
||||
half4 tmpvar_3 = 0;
|
||||
half4 tmpvar_4 = 0;
|
||||
tmpvar_3 = half4((_mtl_u.UNITY_MATRIX_MVP * _mtl_i._inVertex));
|
||||
tmpvar_4 = half4(_mtl_u.unity_LightColor[0]);
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + _mtl_u.unity_LightColor[1]));
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + _mtl_u.unity_LightColor[0]));
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + _mtl_u.unity_LightColor[1]));
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + _mtl_u.unity_LightColor[2]));
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + _mtl_u.unity_LightColor[3]));
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + _mtl_u.unity_LightColor[3]));
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + _mtl_u.unity_LightColor[2]));
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + _mtl_u.unity_LightColor[1]));
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + _mtl_u.unity_LightColor[0]));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + _mtl_u.unity_LightColor[1]));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + _mtl_u.unity_LightColor[0]));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + _mtl_u.unity_LightColor[1]));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + _mtl_u.unity_LightColor[2]));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + _mtl_u.unity_LightColor[3]));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + _mtl_u.unity_LightColor[3]));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + _mtl_u.unity_LightColor[2]));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + _mtl_u.unity_LightColor[1]));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + _mtl_u.unity_LightColor[0]));
|
||||
l_2 = (_mtl_u.unity_LightColor[0] * _mtl_u.unity_LightAtten[0].x);
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + l_2));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + l_2));
|
||||
l_2 = (_mtl_u.unity_LightColor[1] * _mtl_u.unity_LightAtten[1].x);
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + l_2));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + l_2));
|
||||
l_1_1 = (_mtl_u.unity_LightColor[0] * _mtl_u.unity_LightAtten[0].z);
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + l_1_1));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + l_1_1));
|
||||
l_1_1 = (_mtl_u.unity_LightColor[1] * _mtl_u.unity_LightAtten[1].z);
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + l_1_1));
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + _mtl_u.unity_LightColor[1].x));
|
||||
tmpvar_4 = half4(((float4)tmpvar_4 + _mtl_u.unity_LightColor[2].x));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + l_1_1));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + _mtl_u.unity_LightColor[1].x));
|
||||
tmpvar_4 = half4(((float4)(tmpvar_4) + _mtl_u.unity_LightColor[2].x));
|
||||
_mtl_o.gl_Position = float4(tmpvar_3);
|
||||
_mtl_o.xlv_TEXCOORD0 = tmpvar_4;
|
||||
return _mtl_o;
|
||||
|
@ -27,13 +27,13 @@ vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]],
|
||||
float4x4 htof4_3;
|
||||
half2x2 ftoh2_4;
|
||||
half4x4 ftoh4_5;
|
||||
float4 r_6;
|
||||
float4 r_6 = 0;
|
||||
r_6.yzw = float3(0.0, 0.0, 0.0);
|
||||
ftoh4_5 = _xlcast_half4x4(_mtl_u.uniMat4F);
|
||||
r_6.x = float(ftoh4_5[0].x);
|
||||
r_6.x = (r_6.x + (float)ftoh4_5[0].x);
|
||||
r_6.x = (r_6.x + (float)(ftoh4_5[0].x));
|
||||
ftoh2_4 = _xlcast_half2x2(_mtl_u.uniMat2F);
|
||||
r_6.x = (r_6.x + (float)ftoh2_4[0].x);
|
||||
r_6.x = (r_6.x + (float)(ftoh2_4[0].x));
|
||||
htof4_3 = _xlcast_float4x4(_mtl_u.uniMat4H);
|
||||
r_6.x = (r_6.x + htof4_3[0].x);
|
||||
htof3_2 = _xlcast_float3x3(_mtl_u.uniMat3H);
|
||||
|
@ -23,21 +23,21 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half3 lightDir_1;
|
||||
float3 worldN_2;
|
||||
half3 tmpvar_3;
|
||||
half3 tmpvar_4;
|
||||
half3 tmpvar_5;
|
||||
half3 lightDir_1 = 0;
|
||||
float3 worldN_2 = 0;
|
||||
half3 tmpvar_3 = 0;
|
||||
half3 tmpvar_4 = 0;
|
||||
half3 tmpvar_5 = 0;
|
||||
float3x3 tmpvar_6;
|
||||
tmpvar_6[0] = _mtl_u._Object2World[0].xyz;
|
||||
tmpvar_6[1] = _mtl_u._Object2World[1].xyz;
|
||||
tmpvar_6[2] = _mtl_u._Object2World[2].xyz;
|
||||
half3 tmpvar_7;
|
||||
tmpvar_7 = ((half3)(tmpvar_6 * (float3)_mtl_i.attrNormal));
|
||||
half3 tmpvar_7 = 0;
|
||||
tmpvar_7 = ((half3)(tmpvar_6 * (float3)(_mtl_i.attrNormal)));
|
||||
worldN_2 = float3(tmpvar_7);
|
||||
tmpvar_5 = half3(worldN_2);
|
||||
half3 tmpvar_8;
|
||||
half3 tmpvar_9;
|
||||
half3 tmpvar_8 = 0;
|
||||
half3 tmpvar_9 = 0;
|
||||
tmpvar_8 = _mtl_i.attrTangent.xyz;
|
||||
tmpvar_9 = (((_mtl_i.attrNormal.yzx * _mtl_i.attrTangent.zxy) - (_mtl_i.attrNormal.zxy * _mtl_i.attrTangent.yzx)) * _mtl_i.attrTangent.w);
|
||||
half3x3 tmpvar_10;
|
||||
@ -50,16 +50,16 @@ vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]],
|
||||
tmpvar_10[2].x = tmpvar_8.z;
|
||||
tmpvar_10[2].y = tmpvar_9.z;
|
||||
tmpvar_10[2].z = _mtl_i.attrNormal.z;
|
||||
float3 tmpvar_11;
|
||||
tmpvar_11 = ((float3)(tmpvar_10 * (half3)(_mtl_u._World2Object * (float4)_mtl_u._WorldSpaceLightPos0).xyz));
|
||||
float3 tmpvar_11 = 0;
|
||||
tmpvar_11 = ((float3)(tmpvar_10 * (half3)((_mtl_u._World2Object * (float4)(_mtl_u._WorldSpaceLightPos0)).xyz)));
|
||||
lightDir_1 = half3(tmpvar_11);
|
||||
tmpvar_3 = lightDir_1;
|
||||
float4 tmpvar_12;
|
||||
float4 tmpvar_12 = 0;
|
||||
tmpvar_12.w = 1.0;
|
||||
tmpvar_12.xyz = _mtl_u._WorldSpaceCameraPos;
|
||||
float3 tmpvar_13;
|
||||
tmpvar_13 = normalize(((float3)lightDir_1 + normalize(
|
||||
((float3)(tmpvar_10 * (half3)(((_mtl_u._World2Object * tmpvar_12).xyz * _mtl_u.unity_Scale.w) - _mtl_i.attrVertex.xyz)))
|
||||
float3 tmpvar_13 = 0;
|
||||
tmpvar_13 = normalize(((float3)(lightDir_1) + normalize(
|
||||
((float3)(tmpvar_10 * (half3)((((_mtl_u._World2Object * tmpvar_12).xyz * _mtl_u.unity_Scale.w) - _mtl_i.attrVertex.xyz))))
|
||||
)));
|
||||
tmpvar_4 = half3(tmpvar_13);
|
||||
_mtl_o.gl_Position = (_mtl_u.glstate_matrix_mvp * _mtl_i.attrVertex);
|
||||
|
@ -16,9 +16,9 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half4 tmpvar_1;
|
||||
half4 tmpvar_1 = 0;
|
||||
tmpvar_1 = half4(_mtl_i._glesMultiTexCoord0);
|
||||
float4 tmpvar_2;
|
||||
float4 tmpvar_2 = 0;
|
||||
tmpvar_2 = (_mtl_u.glstate_matrix_mvp * _mtl_i._glesVertex);
|
||||
tmpvar_2.z = (tmpvar_2.z + clamp ((_mtl_u.unity_LightShadowBias.x / tmpvar_2.w), 0.0, 1.0));
|
||||
tmpvar_2.z = mix (tmpvar_2.z, max (tmpvar_2.z, -(tmpvar_2.w)), _mtl_u.unity_LightShadowBias.y);
|
||||
|
@ -18,8 +18,8 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half2 tmpvar_1;
|
||||
half4 tmpvar_2;
|
||||
half2 tmpvar_1 = 0;
|
||||
half4 tmpvar_2 = 0;
|
||||
tmpvar_2.w = _mtl_i._color.w;
|
||||
tmpvar_2.xyz = (_mtl_i._color.xyz + _mtl_i._inNormal);
|
||||
tmpvar_1 = half2(_mtl_i._uv0);
|
||||
|
@ -24,18 +24,18 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float3 tmpvar_1;
|
||||
float3 tmpvar_1 = 0;
|
||||
tmpvar_1 = _mtl_i._glesVertex.xyz;
|
||||
float3 n_2;
|
||||
float3 n_2 = 0;
|
||||
n_2 = float3(_mtl_i._glesNormal);
|
||||
half4 tmpvar_3;
|
||||
float4 tmpvar_4;
|
||||
half4 tmpvar_3 = 0;
|
||||
float4 tmpvar_4 = 0;
|
||||
tmpvar_4.w = 1.0;
|
||||
tmpvar_4.xyz = tmpvar_1;
|
||||
float3 lightColor_5;
|
||||
float3 viewN_6;
|
||||
float3 viewpos_7;
|
||||
float4 tmpvar_8;
|
||||
float3 lightColor_5 = 0;
|
||||
float3 viewN_6 = 0;
|
||||
float3 viewpos_7 = 0;
|
||||
float4 tmpvar_8 = 0;
|
||||
tmpvar_8.w = 1.0;
|
||||
tmpvar_8.xyz = tmpvar_1;
|
||||
viewpos_7 = (_mtl_u.glstate_matrix_modelview0 * tmpvar_8).xyz;
|
||||
@ -44,37 +44,37 @@ vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]],
|
||||
tmpvar_9[1] = _mtl_u.glstate_matrix_invtrans_modelview0[1].xyz;
|
||||
tmpvar_9[2] = _mtl_u.glstate_matrix_invtrans_modelview0[2].xyz;
|
||||
viewN_6 = (tmpvar_9 * n_2);
|
||||
float3 tmpvar_10;
|
||||
float3 tmpvar_10 = 0;
|
||||
tmpvar_10 = (_mtl_u.unity_LightPosition[0].xyz - (viewpos_7 * _mtl_u.unity_LightPosition[0].w));
|
||||
lightColor_5 = (_mtl_u.glstate_lightmodel_ambient.xyz + ((float3)_mtl_u.unity_LightColor[0].xyz * (
|
||||
lightColor_5 = (_mtl_u.glstate_lightmodel_ambient.xyz + ((float3)(_mtl_u.unity_LightColor[0].xyz) * (
|
||||
max (0.0, dot (viewN_6, normalize(tmpvar_10)))
|
||||
*
|
||||
(1.0/((1.0 + (dot (tmpvar_10, tmpvar_10) * (float)_mtl_u.unity_LightAtten[0].z))))
|
||||
(1.0/((1.0 + (dot (tmpvar_10, tmpvar_10) * (float)(_mtl_u.unity_LightAtten[0].z)))))
|
||||
)));
|
||||
float3 tmpvar_11;
|
||||
float3 tmpvar_11 = 0;
|
||||
tmpvar_11 = (_mtl_u.unity_LightPosition[1].xyz - (viewpos_7 * _mtl_u.unity_LightPosition[1].w));
|
||||
lightColor_5 = (lightColor_5 + ((float3)_mtl_u.unity_LightColor[1].xyz * (
|
||||
lightColor_5 = (lightColor_5 + ((float3)(_mtl_u.unity_LightColor[1].xyz) * (
|
||||
max (0.0, dot (viewN_6, normalize(tmpvar_11)))
|
||||
*
|
||||
(1.0/((1.0 + (dot (tmpvar_11, tmpvar_11) * (float)_mtl_u.unity_LightAtten[1].z))))
|
||||
(1.0/((1.0 + (dot (tmpvar_11, tmpvar_11) * (float)(_mtl_u.unity_LightAtten[1].z)))))
|
||||
)));
|
||||
float3 tmpvar_12;
|
||||
float3 tmpvar_12 = 0;
|
||||
tmpvar_12 = (_mtl_u.unity_LightPosition[2].xyz - (viewpos_7 * _mtl_u.unity_LightPosition[2].w));
|
||||
lightColor_5 = (lightColor_5 + ((float3)_mtl_u.unity_LightColor[2].xyz * (
|
||||
lightColor_5 = (lightColor_5 + ((float3)(_mtl_u.unity_LightColor[2].xyz) * (
|
||||
max (0.0, dot (viewN_6, normalize(tmpvar_12)))
|
||||
*
|
||||
(1.0/((1.0 + (dot (tmpvar_12, tmpvar_12) * (float)_mtl_u.unity_LightAtten[2].z))))
|
||||
(1.0/((1.0 + (dot (tmpvar_12, tmpvar_12) * (float)(_mtl_u.unity_LightAtten[2].z)))))
|
||||
)));
|
||||
float3 tmpvar_13;
|
||||
float3 tmpvar_13 = 0;
|
||||
tmpvar_13 = (_mtl_u.unity_LightPosition[3].xyz - (viewpos_7 * _mtl_u.unity_LightPosition[3].w));
|
||||
lightColor_5 = (lightColor_5 + ((float3)_mtl_u.unity_LightColor[3].xyz * (
|
||||
lightColor_5 = (lightColor_5 + ((float3)(_mtl_u.unity_LightColor[3].xyz) * (
|
||||
max (0.0, dot (viewN_6, normalize(tmpvar_13)))
|
||||
*
|
||||
(1.0/((1.0 + (dot (tmpvar_13, tmpvar_13) * (float)_mtl_u.unity_LightAtten[3].z))))
|
||||
(1.0/((1.0 + (dot (tmpvar_13, tmpvar_13) * (float)(_mtl_u.unity_LightAtten[3].z)))))
|
||||
)));
|
||||
float4 tmpvar_14;
|
||||
float4 tmpvar_14 = 0;
|
||||
tmpvar_14.w = 1.0;
|
||||
tmpvar_14.xyz = ((lightColor_5 * (float3)_mtl_u._Color.xyz) * 2.0);
|
||||
tmpvar_14.xyz = ((lightColor_5 * (float3)(_mtl_u._Color.xyz)) * 2.0);
|
||||
tmpvar_3 = half4(tmpvar_14);
|
||||
_mtl_o.gl_Position = (_mtl_u.glstate_matrix_mvp * tmpvar_4);
|
||||
_mtl_o.xlv_COLOR0 = tmpvar_3;
|
||||
|
@ -17,140 +17,140 @@ vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]],
|
||||
, texture2d<half> _DynLampInfo [[texture(0)]], sampler _mtlsmp__DynLampInfo [[sampler(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
half3 tmpvar_1;
|
||||
float3 tmpvar_2;
|
||||
half3 tmpvar_1 = 0;
|
||||
float3 tmpvar_2 = 0;
|
||||
tmpvar_2 = (_mtl_u._Object2World * _mtl_i._glesVertex).xyz;
|
||||
float3 tmpvar_3;
|
||||
half3 hybridCol_4;
|
||||
int4 tmpvar_5;
|
||||
float3 tmpvar_3 = 0;
|
||||
half3 hybridCol_4 = 0;
|
||||
int4 tmpvar_5 = 0;
|
||||
tmpvar_5.xyz = int3(tmpvar_2);
|
||||
tmpvar_5.w = int(-(tmpvar_2.x));
|
||||
float2 tmpvar_6;
|
||||
float2 tmpvar_6 = 0;
|
||||
tmpvar_6.y = 1.0;
|
||||
tmpvar_6.x = float(tmpvar_5.x);
|
||||
half2 coord_7;
|
||||
half2 coord_7 = 0;
|
||||
coord_7 = half2(tmpvar_6);
|
||||
half4 tmpvar_8;
|
||||
half4 tmpvar_8 = 0;
|
||||
tmpvar_8.zw = half2(float2(0.0, 0.0));
|
||||
tmpvar_8.xy = (coord_7 / _mtl_u._DynLampInfo_bufferSize);
|
||||
half4 tmpvar_9;
|
||||
half4 tmpvar_10;
|
||||
half4 tmpvar_9 = 0;
|
||||
half4 tmpvar_10 = 0;
|
||||
tmpvar_10 = _DynLampInfo.sample(_mtlsmp__DynLampInfo, (float2)(tmpvar_8.xy), level(0.0));
|
||||
tmpvar_9 = tmpvar_10;
|
||||
float2 tmpvar_11;
|
||||
float2 tmpvar_11 = 0;
|
||||
tmpvar_11.y = 2.0;
|
||||
tmpvar_11.x = float(tmpvar_5.x);
|
||||
half2 coord_12;
|
||||
half2 coord_12 = 0;
|
||||
coord_12 = half2(tmpvar_11);
|
||||
half4 tmpvar_13;
|
||||
half4 tmpvar_13 = 0;
|
||||
tmpvar_13.zw = half2(float2(0.0, 0.0));
|
||||
tmpvar_13.xy = (coord_12 / _mtl_u._DynLampInfo_bufferSize);
|
||||
half4 tmpvar_14;
|
||||
half4 tmpvar_15;
|
||||
half4 tmpvar_14 = 0;
|
||||
half4 tmpvar_15 = 0;
|
||||
tmpvar_15 = _DynLampInfo.sample(_mtlsmp__DynLampInfo, (float2)(tmpvar_13.xy), level(0.0));
|
||||
tmpvar_14 = tmpvar_15;
|
||||
float2 tmpvar_16;
|
||||
float2 tmpvar_16 = 0;
|
||||
tmpvar_16.y = 1.0;
|
||||
tmpvar_16.x = float(tmpvar_5.y);
|
||||
half2 coord_17;
|
||||
half2 coord_17 = 0;
|
||||
coord_17 = half2(tmpvar_16);
|
||||
half4 tmpvar_18;
|
||||
half4 tmpvar_18 = 0;
|
||||
tmpvar_18.zw = half2(float2(0.0, 0.0));
|
||||
tmpvar_18.xy = (coord_17 / _mtl_u._DynLampInfo_bufferSize);
|
||||
half4 tmpvar_19;
|
||||
half4 tmpvar_20;
|
||||
half4 tmpvar_19 = 0;
|
||||
half4 tmpvar_20 = 0;
|
||||
tmpvar_20 = _DynLampInfo.sample(_mtlsmp__DynLampInfo, (float2)(tmpvar_18.xy), level(0.0));
|
||||
tmpvar_19 = tmpvar_20;
|
||||
float2 tmpvar_21;
|
||||
float2 tmpvar_21 = 0;
|
||||
tmpvar_21.y = 2.0;
|
||||
tmpvar_21.x = float(tmpvar_5.y);
|
||||
half2 coord_22;
|
||||
half2 coord_22 = 0;
|
||||
coord_22 = half2(tmpvar_21);
|
||||
half4 tmpvar_23;
|
||||
half4 tmpvar_23 = 0;
|
||||
tmpvar_23.zw = half2(float2(0.0, 0.0));
|
||||
tmpvar_23.xy = (coord_22 / _mtl_u._DynLampInfo_bufferSize);
|
||||
half4 tmpvar_24;
|
||||
half4 tmpvar_25;
|
||||
half4 tmpvar_24 = 0;
|
||||
half4 tmpvar_25 = 0;
|
||||
tmpvar_25 = _DynLampInfo.sample(_mtlsmp__DynLampInfo, (float2)(tmpvar_23.xy), level(0.0));
|
||||
tmpvar_24 = tmpvar_25;
|
||||
float2 tmpvar_26;
|
||||
float2 tmpvar_26 = 0;
|
||||
tmpvar_26.y = 1.0;
|
||||
tmpvar_26.x = float(tmpvar_5.z);
|
||||
half2 coord_27;
|
||||
half2 coord_27 = 0;
|
||||
coord_27 = half2(tmpvar_26);
|
||||
half4 tmpvar_28;
|
||||
half4 tmpvar_28 = 0;
|
||||
tmpvar_28.zw = half2(float2(0.0, 0.0));
|
||||
tmpvar_28.xy = (coord_27 / _mtl_u._DynLampInfo_bufferSize);
|
||||
half4 tmpvar_29;
|
||||
half4 tmpvar_30;
|
||||
half4 tmpvar_29 = 0;
|
||||
half4 tmpvar_30 = 0;
|
||||
tmpvar_30 = _DynLampInfo.sample(_mtlsmp__DynLampInfo, (float2)(tmpvar_28.xy), level(0.0));
|
||||
tmpvar_29 = tmpvar_30;
|
||||
float2 tmpvar_31;
|
||||
float2 tmpvar_31 = 0;
|
||||
tmpvar_31.y = 2.0;
|
||||
tmpvar_31.x = float(tmpvar_5.z);
|
||||
half2 coord_32;
|
||||
half2 coord_32 = 0;
|
||||
coord_32 = half2(tmpvar_31);
|
||||
half4 tmpvar_33;
|
||||
half4 tmpvar_33 = 0;
|
||||
tmpvar_33.zw = half2(float2(0.0, 0.0));
|
||||
tmpvar_33.xy = (coord_32 / _mtl_u._DynLampInfo_bufferSize);
|
||||
half4 tmpvar_34;
|
||||
half4 tmpvar_35;
|
||||
half4 tmpvar_34 = 0;
|
||||
half4 tmpvar_35 = 0;
|
||||
tmpvar_35 = _DynLampInfo.sample(_mtlsmp__DynLampInfo, (float2)(tmpvar_33.xy), level(0.0));
|
||||
tmpvar_34 = tmpvar_35;
|
||||
float2 tmpvar_36;
|
||||
float2 tmpvar_36 = 0;
|
||||
tmpvar_36.y = 1.0;
|
||||
tmpvar_36.x = float(tmpvar_5.w);
|
||||
half2 coord_37;
|
||||
half2 coord_37 = 0;
|
||||
coord_37 = half2(tmpvar_36);
|
||||
half4 tmpvar_38;
|
||||
half4 tmpvar_38 = 0;
|
||||
tmpvar_38.zw = half2(float2(0.0, 0.0));
|
||||
tmpvar_38.xy = (coord_37 / _mtl_u._DynLampInfo_bufferSize);
|
||||
half4 tmpvar_39;
|
||||
half4 tmpvar_40;
|
||||
half4 tmpvar_39 = 0;
|
||||
half4 tmpvar_40 = 0;
|
||||
tmpvar_40 = _DynLampInfo.sample(_mtlsmp__DynLampInfo, (float2)(tmpvar_38.xy), level(0.0));
|
||||
tmpvar_39 = tmpvar_40;
|
||||
float2 tmpvar_41;
|
||||
float2 tmpvar_41 = 0;
|
||||
tmpvar_41.y = 2.0;
|
||||
tmpvar_41.x = float(tmpvar_5.w);
|
||||
half2 coord_42;
|
||||
half2 coord_42 = 0;
|
||||
coord_42 = half2(tmpvar_41);
|
||||
half4 tmpvar_43;
|
||||
half4 tmpvar_43 = 0;
|
||||
tmpvar_43.zw = half2(float2(0.0, 0.0));
|
||||
tmpvar_43.xy = (coord_42 / _mtl_u._DynLampInfo_bufferSize);
|
||||
half4 tmpvar_44;
|
||||
half4 tmpvar_45;
|
||||
half4 tmpvar_44 = 0;
|
||||
half4 tmpvar_45 = 0;
|
||||
tmpvar_45 = _DynLampInfo.sample(_mtlsmp__DynLampInfo, (float2)(tmpvar_43.xy), level(0.0));
|
||||
tmpvar_44 = tmpvar_45;
|
||||
half3 hybridCol_46;
|
||||
half4 atten_47;
|
||||
float3 tmpvar_48;
|
||||
tmpvar_48 = ((float3)tmpvar_9.xyz - tmpvar_2);
|
||||
float tmpvar_49;
|
||||
half3 hybridCol_46 = 0;
|
||||
half4 atten_47 = 0;
|
||||
float3 tmpvar_48 = 0;
|
||||
tmpvar_48 = ((float3)(tmpvar_9.xyz) - tmpvar_2);
|
||||
float tmpvar_49 = 0;
|
||||
tmpvar_49 = dot (tmpvar_48, tmpvar_48);
|
||||
half4 tmpvar_50;
|
||||
half4 tmpvar_50 = 0;
|
||||
tmpvar_50.yzw = atten_47.yzw;
|
||||
tmpvar_50.x = half((tmpvar_49 * (float)tmpvar_9.w));
|
||||
float3 tmpvar_51;
|
||||
tmpvar_51 = ((float3)tmpvar_19.xyz - tmpvar_2);
|
||||
float tmpvar_52;
|
||||
tmpvar_50.x = half((tmpvar_49 * (float)(tmpvar_9.w)));
|
||||
float3 tmpvar_51 = 0;
|
||||
tmpvar_51 = ((float3)(tmpvar_19.xyz) - tmpvar_2);
|
||||
float tmpvar_52 = 0;
|
||||
tmpvar_52 = dot (tmpvar_51, tmpvar_51);
|
||||
half4 tmpvar_53;
|
||||
half4 tmpvar_53 = 0;
|
||||
tmpvar_53.xzw = tmpvar_50.xzw;
|
||||
tmpvar_53.y = half((tmpvar_52 * (float)tmpvar_19.w));
|
||||
float3 tmpvar_54;
|
||||
tmpvar_54 = ((float3)tmpvar_29.xyz - tmpvar_2);
|
||||
float tmpvar_55;
|
||||
tmpvar_53.y = half((tmpvar_52 * (float)(tmpvar_19.w)));
|
||||
float3 tmpvar_54 = 0;
|
||||
tmpvar_54 = ((float3)(tmpvar_29.xyz) - tmpvar_2);
|
||||
float tmpvar_55 = 0;
|
||||
tmpvar_55 = dot (tmpvar_54, tmpvar_54);
|
||||
half4 tmpvar_56;
|
||||
half4 tmpvar_56 = 0;
|
||||
tmpvar_56.xyw = tmpvar_53.xyw;
|
||||
tmpvar_56.z = half((tmpvar_55 * (float)tmpvar_29.w));
|
||||
float3 tmpvar_57;
|
||||
tmpvar_57 = ((float3)tmpvar_39.xyz - tmpvar_2);
|
||||
float tmpvar_58;
|
||||
tmpvar_56.z = half((tmpvar_55 * (float)(tmpvar_29.w)));
|
||||
float3 tmpvar_57 = 0;
|
||||
tmpvar_57 = ((float3)(tmpvar_39.xyz) - tmpvar_2);
|
||||
float tmpvar_58 = 0;
|
||||
tmpvar_58 = dot (tmpvar_57, tmpvar_57);
|
||||
half4 tmpvar_59;
|
||||
half4 tmpvar_59 = 0;
|
||||
tmpvar_59.xyz = tmpvar_56.xyz;
|
||||
tmpvar_59.w = half((tmpvar_58 * (float)tmpvar_39.w));
|
||||
tmpvar_59.w = half((tmpvar_58 * (float)(tmpvar_39.w)));
|
||||
atten_47 = tmpvar_59;
|
||||
hybridCol_46 = (hybridCol_4 + (tmpvar_14.xyz * tmpvar_50.x));
|
||||
hybridCol_46 = (hybridCol_46 + (tmpvar_24.xyz * tmpvar_53.y));
|
||||
|
@ -18,18 +18,18 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float4 tmpvar_1;
|
||||
float3 tmpvar_2;
|
||||
float4 tmpvar_1 = 0;
|
||||
float3 tmpvar_2 = 0;
|
||||
tmpvar_1 = (_mtl_u.glstate_matrix_mvp * _mtl_i._vertex);
|
||||
float4 o_3;
|
||||
float4 o_3 = 0;
|
||||
o_3 = (tmpvar_1 * 0.5);
|
||||
float2 tmpvar_4;
|
||||
float2 tmpvar_4 = 0;
|
||||
tmpvar_4.x = o_3.x;
|
||||
tmpvar_4.y = (o_3.y * _mtl_u._ProjectionParams.x);
|
||||
o_3.xy = (tmpvar_4 + o_3.w);
|
||||
o_3.zw = tmpvar_1.zw;
|
||||
tmpvar_2 = ((_mtl_u.glstate_matrix_modelview0 * _mtl_i._vertex).xyz * float3(-1.0, -1.0, 1.0));
|
||||
float3 tmpvar_5;
|
||||
float3 tmpvar_5 = 0;
|
||||
tmpvar_5 = mix (tmpvar_2, _mtl_i._normal, float3(float((_mtl_i._normal.z != 0.0))));
|
||||
tmpvar_2 = tmpvar_5;
|
||||
_mtl_o.gl_Position = tmpvar_1;
|
||||
|
@ -36,56 +36,56 @@ struct xlatMtlShaderUniform {
|
||||
vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]])
|
||||
{
|
||||
xlatMtlShaderOutput _mtl_o;
|
||||
float4 tmpvar_1;
|
||||
float3 tmpvar_2;
|
||||
float4 tmpvar_3;
|
||||
float4 tmpvar_1 = 0;
|
||||
float3 tmpvar_2 = 0;
|
||||
float4 tmpvar_3 = 0;
|
||||
tmpvar_1 = float4(_mtl_i.TANGENT);
|
||||
tmpvar_2 = float3(_mtl_i._inNormal);
|
||||
tmpvar_3 = float4(_mtl_i._color);
|
||||
float3 binormal_4;
|
||||
float4 tmpvar_5;
|
||||
float4 tmpvar_6;
|
||||
float4 pos_7;
|
||||
float isBillboard_8;
|
||||
float3 binormal_4 = 0;
|
||||
float4 tmpvar_5 = 0;
|
||||
float4 tmpvar_6 = 0;
|
||||
float4 pos_7 = 0;
|
||||
float isBillboard_8 = 0;
|
||||
isBillboard_8 = (1.0 - abs(tmpvar_1.w));
|
||||
float4 tmpvar_9;
|
||||
float4 tmpvar_9 = 0;
|
||||
tmpvar_9.w = 0.0;
|
||||
tmpvar_9.xyz = tmpvar_2;
|
||||
float4 tmpvar_10;
|
||||
float4 tmpvar_10 = 0;
|
||||
tmpvar_10.w = 0.0;
|
||||
tmpvar_10.xyz = tmpvar_1.xyz;
|
||||
float4 tmpvar_11;
|
||||
float4 tmpvar_11 = 0;
|
||||
tmpvar_11.zw = float2(0.0, 0.0);
|
||||
tmpvar_11.xy = tmpvar_2.xy;
|
||||
pos_7 = (_mtl_i._inVertex + ((tmpvar_11 * _mtl_u.glstate_matrix_invtrans_modelview0) * isBillboard_8));
|
||||
float3 tmpvar_12;
|
||||
float3 tmpvar_12 = 0;
|
||||
tmpvar_12 = mix (tmpvar_2, normalize((tmpvar_9 * _mtl_u.glstate_matrix_invtrans_modelview0)).xyz, float3(isBillboard_8));
|
||||
float4 tmpvar_13;
|
||||
float4 tmpvar_13 = 0;
|
||||
tmpvar_13.w = -1.0;
|
||||
tmpvar_13.xyz = normalize((tmpvar_10 * _mtl_u.glstate_matrix_invtrans_modelview0)).xyz;
|
||||
float4 tmpvar_14;
|
||||
float4 tmpvar_14 = 0;
|
||||
tmpvar_14 = mix (tmpvar_1, tmpvar_13, float4(isBillboard_8));
|
||||
tmpvar_5.w = pos_7.w;
|
||||
tmpvar_6.w = tmpvar_14.w;
|
||||
tmpvar_5.xyz = (pos_7.xyz * _mtl_u._Scale.xyz);
|
||||
float4 pos_15;
|
||||
float4 pos_15 = 0;
|
||||
pos_15.w = tmpvar_5.w;
|
||||
float3 bend_16;
|
||||
float2 vWavesSum_17;
|
||||
float4 vWaves_18;
|
||||
float fBranchPhase_19;
|
||||
float3 bend_16 = 0;
|
||||
float2 vWavesSum_17 = 0;
|
||||
float4 vWaves_18 = 0;
|
||||
float fBranchPhase_19 = 0;
|
||||
fBranchPhase_19 = (dot (_mtl_u._Object2World[3].xyz, float3(1.0, 1.0, 1.0)) + tmpvar_3.x);
|
||||
float2 tmpvar_20;
|
||||
float2 tmpvar_20 = 0;
|
||||
tmpvar_20.x = dot (tmpvar_5.xyz, float3((tmpvar_3.y + fBranchPhase_19)));
|
||||
tmpvar_20.y = fBranchPhase_19;
|
||||
vWaves_18 = ((fract(
|
||||
((_mtl_u._Time.yy + tmpvar_20).xxyy * float4(1.975, 0.793, 0.375, 0.193))
|
||||
) * 2.0) - 1.0);
|
||||
float4 tmpvar_21;
|
||||
float4 tmpvar_21 = 0;
|
||||
tmpvar_21 = abs(((
|
||||
fract((vWaves_18 + 0.5))
|
||||
* 2.0) - 1.0));
|
||||
float4 tmpvar_22;
|
||||
float4 tmpvar_22 = 0;
|
||||
tmpvar_22 = ((tmpvar_21 * tmpvar_21) * (3.0 - (2.0 * tmpvar_21)));
|
||||
vWaves_18 = tmpvar_22;
|
||||
vWavesSum_17 = (tmpvar_22.xz + tmpvar_22.yw);
|
||||
@ -97,18 +97,18 @@ vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]],
|
||||
((_mtl_u._Wind.xyz * vWavesSum_17.y) * _mtl_i._uv1.y)
|
||||
) * _mtl_u._Wind.w));
|
||||
pos_15.xyz = (pos_15.xyz + (_mtl_i._uv1.x * _mtl_u._Wind.xyz));
|
||||
float3 tmpvar_23;
|
||||
float3 tmpvar_23 = 0;
|
||||
tmpvar_23 = mix ((pos_15.xyz - (
|
||||
(dot (_mtl_u._SquashPlaneNormal.xyz, pos_15.xyz) + _mtl_u._SquashPlaneNormal.w)
|
||||
* _mtl_u._SquashPlaneNormal.xyz)), pos_15.xyz, float3(_mtl_u._SquashAmount));
|
||||
float4 tmpvar_24;
|
||||
float4 tmpvar_24 = 0;
|
||||
tmpvar_24.w = 1.0;
|
||||
tmpvar_24.xyz = tmpvar_23;
|
||||
tmpvar_5 = tmpvar_24;
|
||||
float4 tmpvar_25;
|
||||
float4 tmpvar_25 = 0;
|
||||
tmpvar_25.xyz = float3(1.0, 1.0, 1.0);
|
||||
tmpvar_25.w = tmpvar_3.w;
|
||||
float3 tmpvar_26;
|
||||
float3 tmpvar_26 = 0;
|
||||
tmpvar_26 = normalize(tmpvar_12);
|
||||
tmpvar_6.xyz = normalize(tmpvar_14.xyz);
|
||||
binormal_4 = (((tmpvar_26.yzx * tmpvar_6.zxy) - (tmpvar_26.zxy * tmpvar_6.yzx)) * tmpvar_14.w);
|
||||
@ -122,21 +122,21 @@ vertex xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]],
|
||||
tmpvar_27[2].x = tmpvar_6.z;
|
||||
tmpvar_27[2].y = binormal_4.z;
|
||||
tmpvar_27[2].z = tmpvar_26.z;
|
||||
float4 tmpvar_28;
|
||||
float4 tmpvar_28 = 0;
|
||||
tmpvar_28.w = 1.0;
|
||||
tmpvar_28.xyz = _mtl_u._WorldSpaceCameraPos;
|
||||
_mtl_o.gl_Position = (_mtl_u.glstate_matrix_mvp * tmpvar_24);
|
||||
_mtl_o.xlv_TEXCOORD0 = ((_mtl_i._uv0.xy * _mtl_u._MainTex_ST.xy) + _mtl_u._MainTex_ST.zw);
|
||||
_mtl_o.xlv_COLOR0 = half4(tmpvar_25);
|
||||
float3 tmpvar_29;
|
||||
float3 tmpvar_29 = 0;
|
||||
tmpvar_29 = (tmpvar_27 * (_mtl_u._World2Object * _mtl_u._WorldSpaceLightPos0).xyz);
|
||||
_mtl_o.xlv_TEXCOORD1 = half3(tmpvar_29);
|
||||
float3 tmpvar_30;
|
||||
float3 tmpvar_30 = 0;
|
||||
tmpvar_30 = (tmpvar_27 * ((
|
||||
(_mtl_u._World2Object * tmpvar_28)
|
||||
.xyz * _mtl_u.unity_Scale.w) - tmpvar_23));
|
||||
_mtl_o.xlv_TEXCOORD2 = half3(tmpvar_30);
|
||||
float2 tmpvar_31;
|
||||
float2 tmpvar_31 = 0;
|
||||
tmpvar_31 = (_mtl_u._LightMatrix0 * (_mtl_u._Object2World * tmpvar_24)).xy;
|
||||
_mtl_o.xlv_TEXCOORD3 = half2(tmpvar_31);
|
||||
return _mtl_o;
|
||||
|
422
3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp
vendored
422
3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp
vendored
@ -150,6 +150,8 @@
|
||||
Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code.
|
||||
Also read releases logs https://github.com/ocornut/imgui/releases for more details.
|
||||
|
||||
- 2016/10/15 (1.50) - avoid 'void* user_data' parameter to io.SetClipboardTextFn/io.GetClipboardTextFn pointers. We pass io.ClipboardUserData to it.
|
||||
- 2016/09/25 (1.50) - style.WindowTitleAlign is now a ImVec2 (ImGuiAlign enum was removed). set to (0.5f,0.5f) for horizontal+vertical centering, (0.0f,0.0f) for upper-left, etc.
|
||||
- 2016/07/30 (1.50) - SameLine(x) with x>0.0f is now relative to left of column/group if any, and not always to left of window. This was sort of always the intent and hopefully breakage should be minimal.
|
||||
- 2016/05/12 (1.49) - title bar (using ImGuiCol_TitleBg/ImGuiCol_TitleBgActive colors) isn't rendered over a window background (ImGuiCol_WindowBg color) anymore.
|
||||
If your TitleBg/TitleBgActive alpha was 1.0f or you are using the default theme it will not affect you.
|
||||
@ -293,7 +295,7 @@
|
||||
Also make sure your orthographic projection matrix and io.DisplaySize matches your actual framebuffer dimension.
|
||||
|
||||
Q: I integrated ImGui in my engine and some elements are clipping or disappearing when I move windows around..
|
||||
A: Most likely you are mishandling the clipping rectangles in your render function. Rectangles provided by ImGui are defined as (x1,y1,x2,y2) and NOT as (x1,y1,width,height).
|
||||
A: Most likely you are mishandling the clipping rectangles in your render function. Rectangles provided by ImGui are defined as (x1=left,y1=top,x2=right,y2=bottom) and NOT as (x1,y1,width,height).
|
||||
|
||||
Q: Can I have multiple widgets with the same label? Can I have widget without a label? (Yes)
|
||||
A: Yes. A primer on the use of labels/IDs in ImGui..
|
||||
@ -301,7 +303,7 @@
|
||||
- Elements that are not clickable, such as Text() items don't need an ID.
|
||||
|
||||
- Interactive widgets require state to be carried over multiple frames (most typically ImGui often needs to remember what is the "active" widget).
|
||||
to do so they need an unique ID. unique ID are typically derived from a string label, an integer index or a pointer.
|
||||
to do so they need a unique ID. unique ID are typically derived from a string label, an integer index or a pointer.
|
||||
|
||||
Button("OK"); // Label = "OK", ID = hash of "OK"
|
||||
Button("Cancel"); // Label = "Cancel", ID = hash of "Cancel"
|
||||
@ -483,8 +485,9 @@
|
||||
!- main: make it so that a frame with no window registered won't refocus every window on subsequent frames (~bump LastFrameActive of all windows).
|
||||
- main: IsItemHovered() make it more consistent for various type of widgets, widgets with multiple components, etc. also effectively IsHovered() region sometimes differs from hot region, e.g tree nodes
|
||||
- main: IsItemHovered() info stored in a stack? so that 'if TreeNode() { Text; TreePop; } if IsHovered' return the hover state of the TreeNode?
|
||||
- input text: clean up the mess caused by converting UTF-8 <> wchar. the code is rather inefficient right now.
|
||||
- input text: clean up the mess caused by converting UTF-8 <> wchar. the code is rather inefficient right now and super fragile.
|
||||
- input text: reorganize event handling, allow CharFilter to modify buffers, allow multiple events? (#541)
|
||||
- input text: expose CursorPos in char filter event (#816)
|
||||
- input text: flag to disable live update of the user buffer (also applies to float/int text input)
|
||||
- input text: resize behavior - field could stretch when being edited? hover tooltip shows more text?
|
||||
- input text: add ImGuiInputTextFlags_EnterToApply? (off #218)
|
||||
@ -524,7 +527,7 @@
|
||||
!- popups/menus: clarify usage of popups id, how MenuItem/Selectable closing parent popups affects the ID, etc. this is quite fishy needs improvement! (#331, #402)
|
||||
- popups: add variant using global identifier similar to Begin/End (#402)
|
||||
- popups: border options. richer api like BeginChild() perhaps? (#197)
|
||||
- tooltip: tooltip that doesn't fit in entire screen seems to lose their "last prefered button" and may teleport when moving mouse
|
||||
- tooltip: tooltip that doesn't fit in entire screen seems to lose their "last preferred button" and may teleport when moving mouse
|
||||
- menus: local shortcuts, global shortcuts (#456, #126)
|
||||
- menus: icons
|
||||
- menus: menubars: some sort of priority / effect of main menu-bar on desktop size?
|
||||
@ -562,7 +565,6 @@
|
||||
- style: color-box not always square?
|
||||
- style: a concept of "compact style" that the end-user can easily rely on (e.g. PushStyleCompact()?) that maps to other settings? avoid implementing duplicate helpers such as SmallCheckbox(), etc.
|
||||
- style: try to make PushStyleVar() more robust to incorrect parameters (to be more friendly to edit & continues situation).
|
||||
- style/opt: PopStyleVar could be optimized by having GetStyleVar returns the type, using a table mapping stylevar enum to data type.
|
||||
- style: global scale setting.
|
||||
- style: WindowPadding needs to be EVEN needs the 0.5 multiplier probably have a subtle effect on clip rectangle
|
||||
- text: simple markup language for color change?
|
||||
@ -707,8 +709,8 @@ static bool DataTypeApplyOpFromText(const char* buf, const char* ini
|
||||
// Platform dependent default implementations
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
static const char* GetClipboardTextFn_DefaultImpl();
|
||||
static void SetClipboardTextFn_DefaultImpl(const char* text);
|
||||
static const char* GetClipboardTextFn_DefaultImpl(void* user_data);
|
||||
static void SetClipboardTextFn_DefaultImpl(void* user_data, const char* text);
|
||||
static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -734,7 +736,7 @@ ImGuiStyle::ImGuiStyle()
|
||||
WindowPadding = ImVec2(8,8); // Padding within a window
|
||||
WindowMinSize = ImVec2(32,32); // Minimum window size
|
||||
WindowRounding = 9.0f; // Radius of window corners rounding. Set to 0.0f to have rectangular windows
|
||||
WindowTitleAlign = ImGuiAlign_Left; // Alignment for title bar text
|
||||
WindowTitleAlign = ImVec2(0.0f,0.5f);// Alignment for title bar text
|
||||
ChildWindowRounding = 0.0f; // Radius of child window corners rounding. Set to 0.0f to have rectangular child windows
|
||||
FramePadding = ImVec2(4,3); // Padding within a framed rectangle (used by most widgets)
|
||||
FrameRounding = 0.0f; // Radius of frame corners rounding. Set to 0.0f to have rectangular frames (used by most widgets).
|
||||
@ -747,6 +749,7 @@ ImGuiStyle::ImGuiStyle()
|
||||
ScrollbarRounding = 9.0f; // Radius of grab corners rounding for scrollbar
|
||||
GrabMinSize = 10.0f; // Minimum width/height of a grab box for slider/scrollbar
|
||||
GrabRounding = 0.0f; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
|
||||
ButtonTextAlign = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text.
|
||||
DisplayWindowPadding = ImVec2(22,22); // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows.
|
||||
DisplaySafeAreaPadding = ImVec2(4,4); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows.
|
||||
AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really short on CPU/GPU.
|
||||
@ -832,6 +835,7 @@ ImGuiIO::ImGuiIO()
|
||||
MemFreeFn = free;
|
||||
GetClipboardTextFn = GetClipboardTextFn_DefaultImpl; // Platform dependent default implementations
|
||||
SetClipboardTextFn = SetClipboardTextFn_DefaultImpl;
|
||||
ClipboardUserData = NULL;
|
||||
ImeSetInputScreenPosFn = ImeSetInputScreenPosFn_DefaultImpl;
|
||||
|
||||
// Set OS X style defaults based on __APPLE__ compile time flag
|
||||
@ -1198,16 +1202,20 @@ int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_e
|
||||
ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
|
||||
{
|
||||
float s = 1.0f/255.0f;
|
||||
return ImVec4((in & 0xFF) * s, ((in >> 8) & 0xFF) * s, ((in >> 16) & 0xFF) * s, (in >> 24) * s);
|
||||
return ImVec4(
|
||||
((in >> IM_COL32_R_SHIFT) & 0xFF) * s,
|
||||
((in >> IM_COL32_G_SHIFT) & 0xFF) * s,
|
||||
((in >> IM_COL32_B_SHIFT) & 0xFF) * s,
|
||||
((in >> IM_COL32_A_SHIFT) & 0xFF) * s);
|
||||
}
|
||||
|
||||
ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
|
||||
{
|
||||
ImU32 out;
|
||||
out = ((ImU32)IM_F32_TO_INT8_SAT(in.x));
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.y)) << 8;
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.z)) << 16;
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.w)) << 24;
|
||||
out = ((ImU32)IM_F32_TO_INT8_SAT(in.x)) << IM_COL32_R_SHIFT;
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.y)) << IM_COL32_G_SHIFT;
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.z)) << IM_COL32_B_SHIFT;
|
||||
out |= ((ImU32)IM_F32_TO_INT8_SAT(in.w)) << IM_COL32_A_SHIFT;
|
||||
return out;
|
||||
}
|
||||
|
||||
@ -1215,14 +1223,14 @@ ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
|
||||
{
|
||||
ImVec4 c = GImGui->Style.Colors[idx];
|
||||
c.w *= GImGui->Style.Alpha * alpha_mul;
|
||||
return ImGui::ColorConvertFloat4ToU32(c);
|
||||
return ColorConvertFloat4ToU32(c);
|
||||
}
|
||||
|
||||
ImU32 ImGui::GetColorU32(const ImVec4& col)
|
||||
{
|
||||
ImVec4 c = col;
|
||||
c.w *= GImGui->Style.Alpha;
|
||||
return ImGui::ColorConvertFloat4ToU32(c);
|
||||
return ColorConvertFloat4ToU32(c);
|
||||
}
|
||||
|
||||
// Convert rgb floats ([0-1],[0-1],[0-1]) to hsv floats ([0-1],[0-1],[0-1]), from Foley & van Dam p592
|
||||
@ -1831,6 +1839,8 @@ void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window = NULL)
|
||||
g.ActiveId = id;
|
||||
g.ActiveIdAllowOverlap = false;
|
||||
g.ActiveIdIsJustActivated = true;
|
||||
if (id)
|
||||
g.ActiveIdIsAlive = true;
|
||||
g.ActiveIdWindow = window;
|
||||
}
|
||||
|
||||
@ -2007,13 +2017,13 @@ void ImGui::MemFree(void* ptr)
|
||||
|
||||
const char* ImGui::GetClipboardText()
|
||||
{
|
||||
return GImGui->IO.GetClipboardTextFn ? GImGui->IO.GetClipboardTextFn() : "";
|
||||
return GImGui->IO.GetClipboardTextFn ? GImGui->IO.GetClipboardTextFn(GImGui->IO.ClipboardUserData) : "";
|
||||
}
|
||||
|
||||
void ImGui::SetClipboardText(const char* text)
|
||||
{
|
||||
if (GImGui->IO.SetClipboardTextFn)
|
||||
GImGui->IO.SetClipboardTextFn(text);
|
||||
GImGui->IO.SetClipboardTextFn(GImGui->IO.ClipboardUserData, text);
|
||||
}
|
||||
|
||||
const char* ImGui::GetVersion()
|
||||
@ -2339,10 +2349,13 @@ void ImGui::Shutdown()
|
||||
}
|
||||
g.Windows.clear();
|
||||
g.WindowsSortBuffer.clear();
|
||||
g.CurrentWindow = NULL;
|
||||
g.CurrentWindowStack.clear();
|
||||
g.FocusedWindow = NULL;
|
||||
g.HoveredWindow = NULL;
|
||||
g.HoveredRootWindow = NULL;
|
||||
g.ActiveIdWindow = NULL;
|
||||
g.MovedWindow = NULL;
|
||||
for (int i = 0; i < g.Settings.Size; i++)
|
||||
ImGui::MemFree(g.Settings[i].Name);
|
||||
g.Settings.clear();
|
||||
@ -2351,6 +2364,8 @@ void ImGui::Shutdown()
|
||||
g.FontStack.clear();
|
||||
g.OpenPopupStack.clear();
|
||||
g.CurrentPopupStack.clear();
|
||||
g.SetNextWindowSizeConstraintCallback = NULL;
|
||||
g.SetNextWindowSizeConstraintCallbackUserData = NULL;
|
||||
for (int i = 0; i < IM_ARRAYSIZE(g.RenderDrawLists); i++)
|
||||
g.RenderDrawLists[i].clear();
|
||||
g.OverlayDrawList.ClearFreeMemory();
|
||||
@ -2546,9 +2561,9 @@ static void AddDrawListToRenderList(ImVector<ImDrawList*>& out_render_list, ImDr
|
||||
}
|
||||
|
||||
// Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc.
|
||||
IM_ASSERT(draw_list->_VtxWritePtr == draw_list->VtxBuffer.Data + draw_list->VtxBuffer.Size);
|
||||
IM_ASSERT(draw_list->_IdxWritePtr == draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size);
|
||||
IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size);
|
||||
IM_ASSERT(draw_list->VtxBuffer.Size == 0 || draw_list->_VtxWritePtr == draw_list->VtxBuffer.Data + draw_list->VtxBuffer.Size);
|
||||
IM_ASSERT(draw_list->IdxBuffer.Size == 0 || draw_list->_IdxWritePtr == draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size);
|
||||
IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size);
|
||||
|
||||
// Check that draw_list doesn't use more vertices than indexable (default ImDrawIdx = 2 bytes = 64K vertices)
|
||||
// If this assert triggers because you are drawing lots of stuff manually, A) workaround by calling BeginChild()/EndChild() to put your draw commands in multiple draw lists, B) #define ImDrawIdx to a 'unsigned int' in imconfig.h and render accordingly.
|
||||
@ -2866,8 +2881,9 @@ void ImGui::RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end
|
||||
}
|
||||
}
|
||||
|
||||
// Default clip_rect uses (pos_min,pos_max)
|
||||
// Handle clipping on CPU immediately (vs typically let the GPU clip the triangles that are overlapping the clipping rectangle edges)
|
||||
void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, ImGuiAlign align, const ImVec2* clip_min, const ImVec2* clip_max)
|
||||
void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect)
|
||||
{
|
||||
// Hide anything after a '##' string
|
||||
const char* text_display_end = FindRenderedTextEnd(text, text_end);
|
||||
@ -2882,14 +2898,15 @@ void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, cons
|
||||
ImVec2 pos = pos_min;
|
||||
const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_display_end, false, 0.0f);
|
||||
|
||||
if (!clip_max) clip_max = &pos_max;
|
||||
const ImVec2* clip_min = clip_rect ? &clip_rect->Min : &pos_min;
|
||||
const ImVec2* clip_max = clip_rect ? &clip_rect->Max : &pos_max;
|
||||
bool need_clipping = (pos.x + text_size.x >= clip_max->x) || (pos.y + text_size.y >= clip_max->y);
|
||||
if (!clip_min) clip_min = &pos_min; else need_clipping |= (pos.x < clip_min->x) || (pos.y < clip_min->y);
|
||||
if (clip_rect) // If we had no explicit clipping rectangle then pos==clip_min
|
||||
need_clipping |= (pos.x < clip_min->x) || (pos.y < clip_min->y);
|
||||
|
||||
// Align
|
||||
if (align & ImGuiAlign_Center) pos.x = ImMax(pos.x, (pos.x + pos_max.x - text_size.x) * 0.5f);
|
||||
else if (align & ImGuiAlign_Right) pos.x = ImMax(pos.x, pos_max.x - text_size.x);
|
||||
if (align & ImGuiAlign_VCenter) pos.y = ImMax(pos.y, (pos.y + pos_max.y - text_size.y) * 0.5f);
|
||||
// Align whole block. We should defer that to the better rendering function when we'll have support for individual line alignment.
|
||||
if (align.x > 0.0f) pos.x = ImMax(pos.x, pos.x + (pos_max.x - pos.x - text_size.x) * align.x);
|
||||
if (align.y > 0.0f) pos.y = ImMax(pos.y, pos.y + (pos_max.y - pos.y - text_size.y) * align.y);
|
||||
|
||||
// Render
|
||||
if (need_clipping)
|
||||
@ -2919,7 +2936,7 @@ void ImGui::RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border,
|
||||
}
|
||||
|
||||
// Render a triangle to denote expanded/collapsed state
|
||||
void ImGui::RenderCollapseTriangle(ImVec2 p_min, bool is_open, float scale, bool shadow)
|
||||
void ImGui::RenderCollapseTriangle(ImVec2 p_min, bool is_open, float scale)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
ImGuiWindow* window = GetCurrentWindow();
|
||||
@ -2943,8 +2960,6 @@ void ImGui::RenderCollapseTriangle(ImVec2 p_min, bool is_open, float scale, bool
|
||||
c = center + ImVec2(-0.500f,-0.866f)*r;
|
||||
}
|
||||
|
||||
if (shadow && (window->Flags & ImGuiWindowFlags_ShowBorders) != 0)
|
||||
window->DrawList->AddTriangleFilled(a+ImVec2(2,2), b+ImVec2(2,2), c+ImVec2(2,2), GetColorU32(ImGuiCol_BorderShadow));
|
||||
window->DrawList->AddTriangleFilled(a, b, c, GetColorU32(ImGuiCol_Text));
|
||||
}
|
||||
|
||||
@ -3360,8 +3375,7 @@ void ImGui::EndTooltip()
|
||||
static bool IsPopupOpen(ImGuiID id)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
const bool is_open = g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].PopupId == id;
|
||||
return is_open;
|
||||
return g.OpenPopupStack.Size > g.CurrentPopupStack.Size && g.OpenPopupStack[g.CurrentPopupStack.Size].PopupId == id;
|
||||
}
|
||||
|
||||
// Mark popup as open (toggle toward open state).
|
||||
@ -3481,11 +3495,11 @@ static bool BeginPopupEx(const char* str_id, ImGuiWindowFlags extra_flags)
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
|
||||
ImGuiWindowFlags flags = extra_flags|ImGuiWindowFlags_Popup|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize;
|
||||
|
||||
char name[32];
|
||||
char name[20];
|
||||
if (flags & ImGuiWindowFlags_ChildMenu)
|
||||
ImFormatString(name, 20, "##menu_%d", g.CurrentPopupStack.Size); // Recycle windows based on depth
|
||||
ImFormatString(name, IM_ARRAYSIZE(name), "##menu_%d", g.CurrentPopupStack.Size); // Recycle windows based on depth
|
||||
else
|
||||
ImFormatString(name, 20, "##popup_%08x", id); // Not recycling, so we can close/open during the same frame
|
||||
ImFormatString(name, IM_ARRAYSIZE(name), "##popup_%08x", id); // Not recycling, so we can close/open during the same frame
|
||||
|
||||
bool is_open = ImGui::Begin(name, NULL, flags);
|
||||
if (!(window->Flags & ImGuiWindowFlags_ShowBorders))
|
||||
@ -4063,7 +4077,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
|
||||
if (window_pos_center)
|
||||
{
|
||||
// Center (any sort of window)
|
||||
SetWindowPos(ImMax(style.DisplaySafeAreaPadding, fullscreen_rect.GetCenter() - window->SizeFull * 0.5f));
|
||||
SetWindowPos(window, ImMax(style.DisplaySafeAreaPadding, fullscreen_rect.GetCenter() - window->SizeFull * 0.5f), 0);
|
||||
}
|
||||
else if (flags & ImGuiWindowFlags_ChildMenu)
|
||||
{
|
||||
@ -4185,8 +4199,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
|
||||
window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f);
|
||||
window->BorderSize = (flags & ImGuiWindowFlags_ShowBorders) ? 1.0f : 0.0f;
|
||||
|
||||
// Window background
|
||||
// Default alpha
|
||||
// Window background, Default Alpha
|
||||
ImGuiCol bg_color_idx = ImGuiCol_WindowBg;
|
||||
if ((flags & ImGuiWindowFlags_ComboBox) != 0)
|
||||
bg_color_idx = ImGuiCol_ComboBg;
|
||||
@ -4199,19 +4212,19 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
|
||||
bg_color.w = bg_alpha;
|
||||
bg_color.w *= style.Alpha;
|
||||
if (bg_color.w > 0.0f)
|
||||
window->DrawList->AddRectFilled(window->Pos+ImVec2(0,window->TitleBarHeight()), window->Pos+window->Size, ColorConvertFloat4ToU32(bg_color), window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? 15 : 4|8);
|
||||
window->DrawList->AddRectFilled(window->Pos+ImVec2(0,window->TitleBarHeight()), window->Pos+window->Size, ColorConvertFloat4ToU32(bg_color), window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImGuiCorner_All : ImGuiCorner_BottomLeft|ImGuiCorner_BottomRight);
|
||||
|
||||
// Title bar
|
||||
if (!(flags & ImGuiWindowFlags_NoTitleBar))
|
||||
window->DrawList->AddRectFilled(title_bar_rect.GetTL(), title_bar_rect.GetBR(), GetColorU32((g.FocusedWindow && window->RootNonPopupWindow == g.FocusedWindow->RootNonPopupWindow) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg), window_rounding, 1|2);
|
||||
window->DrawList->AddRectFilled(title_bar_rect.GetTL(), title_bar_rect.GetBR(), GetColorU32((g.FocusedWindow && window->RootNonPopupWindow == g.FocusedWindow->RootNonPopupWindow) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg), window_rounding, ImGuiCorner_TopLeft|ImGuiCorner_TopRight);
|
||||
|
||||
// Menu bar
|
||||
if (flags & ImGuiWindowFlags_MenuBar)
|
||||
{
|
||||
ImRect menu_bar_rect = window->MenuBarRect();
|
||||
window->DrawList->AddRectFilled(menu_bar_rect.GetTL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, 1|2);
|
||||
if (flags & ImGuiWindowFlags_ShowBorders)
|
||||
window->DrawList->AddLine(menu_bar_rect.GetBL()-ImVec2(0,0), menu_bar_rect.GetBR()-ImVec2(0,0), GetColorU32(ImGuiCol_Border));
|
||||
window->DrawList->AddLine(menu_bar_rect.GetBL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_Border));
|
||||
window->DrawList->AddRectFilled(menu_bar_rect.GetTL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImGuiCorner_TopLeft|ImGuiCorner_TopRight);
|
||||
}
|
||||
|
||||
// Scrollbars
|
||||
@ -4303,18 +4316,19 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
|
||||
|
||||
const ImVec2 text_size = CalcTextSize(name, NULL, true);
|
||||
if (!(flags & ImGuiWindowFlags_NoCollapse))
|
||||
RenderCollapseTriangle(window->Pos + style.FramePadding, !window->Collapsed, 1.0f, true);
|
||||
RenderCollapseTriangle(window->Pos + style.FramePadding, !window->Collapsed, 1.0f);
|
||||
|
||||
ImVec2 text_min = window->Pos + style.FramePadding;
|
||||
ImVec2 text_max = window->Pos + ImVec2(window->Size.x - style.FramePadding.x, style.FramePadding.y*2 + text_size.y);
|
||||
ImVec2 clip_max = ImVec2(window->Pos.x + window->Size.x - (p_open ? title_bar_rect.GetHeight() - 3 : style.FramePadding.x), text_max.y); // Match the size of CloseWindowButton()
|
||||
bool pad_left = (flags & ImGuiWindowFlags_NoCollapse) == 0;
|
||||
bool pad_right = (p_open != NULL);
|
||||
if (style.WindowTitleAlign & ImGuiAlign_Center) pad_right = pad_left;
|
||||
if (pad_left) text_min.x += g.FontSize + style.ItemInnerSpacing.x;
|
||||
if (pad_right) text_max.x -= g.FontSize + style.ItemInnerSpacing.x;
|
||||
ImVec2 clip_min = ImVec2(text_min.x, window->Pos.y);
|
||||
RenderTextClipped(text_min, text_max, name, NULL, &text_size, style.WindowTitleAlign, &clip_min, &clip_max);
|
||||
ImVec2 text_min = window->Pos;
|
||||
ImVec2 text_max = window->Pos + ImVec2(window->Size.x, style.FramePadding.y*2 + text_size.y);
|
||||
ImRect clip_rect;
|
||||
clip_rect.Max = ImVec2(window->Pos.x + window->Size.x - (p_open ? title_bar_rect.GetHeight() - 3 : style.FramePadding.x), text_max.y); // Match the size of CloseWindowButton()
|
||||
float pad_left = (flags & ImGuiWindowFlags_NoCollapse) == 0 ? (style.FramePadding.x + g.FontSize + style.ItemInnerSpacing.x) : 0.0f;
|
||||
float pad_right = (p_open != NULL) ? (style.FramePadding.x + g.FontSize + style.ItemInnerSpacing.x) : 0.0f;
|
||||
if (style.WindowTitleAlign.x > 0.0f) pad_right = ImLerp(pad_right, pad_left, style.WindowTitleAlign.x);
|
||||
text_min.x += pad_left;
|
||||
text_max.x -= pad_right;
|
||||
clip_rect.Min = ImVec2(text_min.x, window->Pos.y);
|
||||
RenderTextClipped(text_min, text_max, name, NULL, &text_size, style.WindowTitleAlign, &clip_rect);
|
||||
}
|
||||
|
||||
// Save clipped aabb so we can access it in constant-time in FindHoveredWindow()
|
||||
@ -4418,9 +4432,9 @@ static void Scrollbar(ImGuiWindow* window, bool horizontal)
|
||||
float window_rounding = (window->Flags & ImGuiWindowFlags_ChildWindow) ? style.ChildWindowRounding : style.WindowRounding;
|
||||
int window_rounding_corners;
|
||||
if (horizontal)
|
||||
window_rounding_corners = 8 | (other_scrollbar ? 0 : 4);
|
||||
window_rounding_corners = ImGuiCorner_BottomLeft | (other_scrollbar ? 0 : ImGuiCorner_BottomRight);
|
||||
else
|
||||
window_rounding_corners = (((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar)) ? 2 : 0) | (other_scrollbar ? 0 : 4);
|
||||
window_rounding_corners = (((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar)) ? ImGuiCorner_TopRight : 0) | (other_scrollbar ? 0 : ImGuiCorner_BottomRight);
|
||||
window->DrawList->AddRectFilled(bb.Min, bb.Max, ImGui::GetColorU32(ImGuiCol_ScrollbarBg), window_rounding, window_rounding_corners);
|
||||
bb.Reduce(ImVec2(ImClamp((float)(int)((bb.Max.x - bb.Min.x - 2.0f) * 0.5f), 0.0f, 3.0f), ImClamp((float)(int)((bb.Max.y - bb.Min.y - 2.0f) * 0.5f), 0.0f, 3.0f)));
|
||||
|
||||
@ -4646,7 +4660,7 @@ void ImGui::PushStyleColor(ImGuiCol idx, const ImVec4& col)
|
||||
ImGuiContext& g = *GImGui;
|
||||
ImGuiColMod backup;
|
||||
backup.Col = idx;
|
||||
backup.PreviousValue = g.Style.Colors[idx];
|
||||
backup.BackupValue = g.Style.Colors[idx];
|
||||
g.ColorModifiers.push_back(backup);
|
||||
g.Style.Colors[idx] = col;
|
||||
}
|
||||
@ -4657,65 +4671,66 @@ void ImGui::PopStyleColor(int count)
|
||||
while (count > 0)
|
||||
{
|
||||
ImGuiColMod& backup = g.ColorModifiers.back();
|
||||
g.Style.Colors[backup.Col] = backup.PreviousValue;
|
||||
g.Style.Colors[backup.Col] = backup.BackupValue;
|
||||
g.ColorModifiers.pop_back();
|
||||
count--;
|
||||
}
|
||||
}
|
||||
|
||||
static float* GetStyleVarFloatAddr(ImGuiStyleVar idx)
|
||||
struct ImGuiStyleVarInfo
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
switch (idx)
|
||||
{
|
||||
case ImGuiStyleVar_Alpha: return &g.Style.Alpha;
|
||||
case ImGuiStyleVar_WindowRounding: return &g.Style.WindowRounding;
|
||||
case ImGuiStyleVar_ChildWindowRounding: return &g.Style.ChildWindowRounding;
|
||||
case ImGuiStyleVar_FrameRounding: return &g.Style.FrameRounding;
|
||||
case ImGuiStyleVar_IndentSpacing: return &g.Style.IndentSpacing;
|
||||
case ImGuiStyleVar_GrabMinSize: return &g.Style.GrabMinSize;
|
||||
case ImGuiStyleVar_ViewId: return &g.Style.ViewId;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
ImGuiDataType Type;
|
||||
ImU32 Offset;
|
||||
void* GetVarPtr() const { return (void*)((unsigned char*)&GImGui->Style + Offset); }
|
||||
};
|
||||
|
||||
static ImVec2* GetStyleVarVec2Addr(ImGuiStyleVar idx)
|
||||
static const ImGuiStyleVarInfo GStyleVarInfo[ImGuiStyleVar_Count_] =
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
switch (idx)
|
||||
{
|
||||
case ImGuiStyleVar_WindowPadding: return &g.Style.WindowPadding;
|
||||
case ImGuiStyleVar_WindowMinSize: return &g.Style.WindowMinSize;
|
||||
case ImGuiStyleVar_FramePadding: return &g.Style.FramePadding;
|
||||
case ImGuiStyleVar_ItemSpacing: return &g.Style.ItemSpacing;
|
||||
case ImGuiStyleVar_ItemInnerSpacing: return &g.Style.ItemInnerSpacing;
|
||||
}
|
||||
return NULL;
|
||||
{ ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) },
|
||||
{ ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) },
|
||||
{ ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) },
|
||||
{ ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) },
|
||||
{ ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildWindowRounding) },
|
||||
{ ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) },
|
||||
{ ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) },
|
||||
{ ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) },
|
||||
{ ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) },
|
||||
{ ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) },
|
||||
{ ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) },
|
||||
{ ImGuiDataType_Float2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) },
|
||||
{ ImGuiDataType_Float, (ImU32)IM_OFFSETOF(ImGuiStyle, ViewId) },
|
||||
};
|
||||
|
||||
static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx)
|
||||
{
|
||||
IM_ASSERT(idx >= 0 && idx < ImGuiStyleVar_Count_);
|
||||
return &GStyleVarInfo[idx];
|
||||
}
|
||||
|
||||
void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
float* pvar = GetStyleVarFloatAddr(idx);
|
||||
IM_ASSERT(pvar != NULL); // Called function with wrong-type? Variable is not a float.
|
||||
ImGuiStyleMod backup;
|
||||
backup.Var = idx;
|
||||
backup.PreviousValue = ImVec2(*pvar, 0.0f);
|
||||
g.StyleModifiers.push_back(backup);
|
||||
*pvar = val;
|
||||
const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
|
||||
if (var_info->Type == ImGuiDataType_Float)
|
||||
{
|
||||
float* pvar = (float*)var_info->GetVarPtr();
|
||||
GImGui->StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
|
||||
*pvar = val;
|
||||
return;
|
||||
}
|
||||
IM_ASSERT(0); // Called function with wrong-type? Variable is not a float.
|
||||
}
|
||||
|
||||
|
||||
void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
ImVec2* pvar = GetStyleVarVec2Addr(idx);
|
||||
IM_ASSERT(pvar != NULL); // Called function with wrong-type? Variable is not a ImVec2.
|
||||
ImGuiStyleMod backup;
|
||||
backup.Var = idx;
|
||||
backup.PreviousValue = *pvar;
|
||||
g.StyleModifiers.push_back(backup);
|
||||
*pvar = val;
|
||||
const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
|
||||
if (var_info->Type == ImGuiDataType_Float2)
|
||||
{
|
||||
ImVec2* pvar = (ImVec2*)var_info->GetVarPtr();
|
||||
GImGui->StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
|
||||
*pvar = val;
|
||||
return;
|
||||
}
|
||||
IM_ASSERT(0); // Called function with wrong-type? Variable is not a ImVec2.
|
||||
}
|
||||
|
||||
void ImGui::PopStyleVar(int count)
|
||||
@ -4724,10 +4739,10 @@ void ImGui::PopStyleVar(int count)
|
||||
while (count > 0)
|
||||
{
|
||||
ImGuiStyleMod& backup = g.StyleModifiers.back();
|
||||
if (float* pvar_f = GetStyleVarFloatAddr(backup.Var))
|
||||
*pvar_f = backup.PreviousValue.x;
|
||||
else if (ImVec2* pvar_v = GetStyleVarVec2Addr(backup.Var))
|
||||
*pvar_v = backup.PreviousValue;
|
||||
const ImGuiStyleVarInfo* info = GetStyleVarInfo(backup.VarIdx);
|
||||
if (info->Type == ImGuiDataType_Float) (*(float*)info->GetVarPtr()) = backup.BackupFloat[0];
|
||||
else if (info->Type == ImGuiDataType_Float2) (*(ImVec2*)info->GetVarPtr()) = ImVec2(backup.BackupFloat[0], backup.BackupFloat[1]);
|
||||
else if (info->Type == ImGuiDataType_Int) (*(int*)info->GetVarPtr()) = backup.BackupInt[0];
|
||||
g.StyleModifiers.pop_back();
|
||||
count--;
|
||||
}
|
||||
@ -4860,14 +4875,13 @@ static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiSetCond co
|
||||
|
||||
void ImGui::SetWindowPos(const ImVec2& pos, ImGuiSetCond cond)
|
||||
{
|
||||
ImGuiWindow* window = GetCurrentWindow();
|
||||
ImGuiWindow* window = GetCurrentWindowRead();
|
||||
SetWindowPos(window, pos, cond);
|
||||
}
|
||||
|
||||
void ImGui::SetWindowPos(const char* name, const ImVec2& pos, ImGuiSetCond cond)
|
||||
{
|
||||
ImGuiWindow* window = FindWindowByName(name);
|
||||
if (window)
|
||||
if (ImGuiWindow* window = FindWindowByName(name))
|
||||
SetWindowPos(window, pos, cond);
|
||||
}
|
||||
|
||||
@ -5448,7 +5462,7 @@ void ImGui::LabelTextV(const char* label, const char* fmt, va_list args)
|
||||
// Render
|
||||
const char* value_text_begin = &g.TempBuffer[0];
|
||||
const char* value_text_end = value_text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
|
||||
RenderTextClipped(value_bb.Min, value_bb.Max, value_text_begin, value_text_end, NULL, ImGuiAlign_VCenter);
|
||||
RenderTextClipped(value_bb.Min, value_bb.Max, value_text_begin, value_text_end, NULL, ImVec2(0.0f,0.5f));
|
||||
if (label_size.x > 0.0f)
|
||||
RenderText(ImVec2(value_bb.Max.x + style.ItemInnerSpacing.x, value_bb.Min.y + style.FramePadding.y), label);
|
||||
}
|
||||
@ -5565,7 +5579,7 @@ bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags
|
||||
const ImVec2 label_size = CalcTextSize(label, NULL, true);
|
||||
|
||||
ImVec2 pos = window->DC.CursorPos;
|
||||
if ((flags & ImGuiButtonFlags_AlignTextBaseLine) && style.FramePadding.y < window->DC.CurrentLineTextBaseOffset)
|
||||
if ((flags & ImGuiButtonFlags_AlignTextBaseLine) && style.FramePadding.y < window->DC.CurrentLineTextBaseOffset) // Try to vertically align buttons that are smaller/have no padding so that text baseline matches (bit hacky, since it shouldn't be a flag)
|
||||
pos.y += window->DC.CurrentLineTextBaseOffset - style.FramePadding.y;
|
||||
ImVec2 size = CalcItemSize(size_arg, label_size.x + style.FramePadding.x * 2.0f, label_size.y + style.FramePadding.y * 2.0f);
|
||||
|
||||
@ -5581,7 +5595,7 @@ bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags
|
||||
// Render
|
||||
const ImU32 col = GetColorU32((hovered && held) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
|
||||
RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding);
|
||||
RenderTextClipped(bb.Min, bb.Max, label, NULL, &label_size, ImGuiAlign_Center | ImGuiAlign_VCenter);
|
||||
RenderTextClipped(bb.Min + style.FramePadding, bb.Max - style.FramePadding, label, NULL, &label_size, style.ButtonTextAlign, &bb);
|
||||
|
||||
// Automatically close popups
|
||||
//if (pressed && !(flags & ImGuiButtonFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup))
|
||||
@ -5790,8 +5804,7 @@ void ImGui::LogFinish()
|
||||
}
|
||||
if (g.LogClipboard->size() > 1)
|
||||
{
|
||||
if (g.IO.SetClipboardTextFn)
|
||||
g.IO.SetClipboardTextFn(g.LogClipboard->begin());
|
||||
SetClipboardText(g.LogClipboard->begin());
|
||||
g.LogClipboard->clear();
|
||||
}
|
||||
}
|
||||
@ -5941,7 +5954,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
|
||||
{
|
||||
// Framed type
|
||||
RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding);
|
||||
RenderCollapseTriangle(bb.Min + padding + ImVec2(0.0f, text_base_offset_y), is_open, 1.0f, true);
|
||||
RenderCollapseTriangle(bb.Min + padding + ImVec2(0.0f, text_base_offset_y), is_open, 1.0f);
|
||||
if (g.LogEnabled)
|
||||
{
|
||||
// NB: '##' is normally used to hide text (as a library-wide feature), so we need to specify the text range to make sure the ## aren't stripped out here.
|
||||
@ -5965,7 +5978,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
|
||||
if (flags & ImGuiTreeNodeFlags_Bullet)
|
||||
RenderBullet(bb.Min + ImVec2(text_offset_x * 0.5f, g.FontSize*0.50f + text_base_offset_y));
|
||||
else if (!(flags & ImGuiTreeNodeFlags_Leaf))
|
||||
RenderCollapseTriangle(bb.Min + ImVec2(padding.x, g.FontSize*0.15f + text_base_offset_y), is_open, 0.70f, false);
|
||||
RenderCollapseTriangle(bb.Min + ImVec2(padding.x, g.FontSize*0.15f + text_base_offset_y), is_open, 0.70f);
|
||||
if (g.LogEnabled)
|
||||
LogRenderedText(text_pos, ">");
|
||||
RenderText(text_pos, label, label_end, false);
|
||||
@ -6101,7 +6114,7 @@ void ImGui::TreeAdvanceToLabelPos()
|
||||
g.CurrentWindow->DC.CursorPos.x += GetTreeNodeToLabelSpacing();
|
||||
}
|
||||
|
||||
// Horizontal distance preceeding label when using TreeNode() or Bullet()
|
||||
// Horizontal distance preceding label when using TreeNode() or Bullet()
|
||||
float ImGui::GetTreeNodeToLabelSpacing()
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
@ -6580,7 +6593,7 @@ bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, c
|
||||
// Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
|
||||
char value_buf[64];
|
||||
const char* value_buf_end = value_buf + ImFormatString(value_buf, IM_ARRAYSIZE(value_buf), display_format, *v);
|
||||
RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImGuiAlign_Center|ImGuiAlign_VCenter);
|
||||
RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.5f));
|
||||
|
||||
if (label_size.x > 0.0f)
|
||||
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
|
||||
@ -6627,7 +6640,7 @@ bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float
|
||||
// For the vertical slider we allow centered text to overlap the frame padding
|
||||
char value_buf[64];
|
||||
char* value_buf_end = value_buf + ImFormatString(value_buf, IM_ARRAYSIZE(value_buf), display_format, *v);
|
||||
RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, value_buf, value_buf_end, NULL, ImGuiAlign_Center);
|
||||
RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.0f));
|
||||
if (label_size.x > 0.0f)
|
||||
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
|
||||
|
||||
@ -6877,7 +6890,7 @@ bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, f
|
||||
// Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
|
||||
char value_buf[64];
|
||||
const char* value_buf_end = value_buf + ImFormatString(value_buf, IM_ARRAYSIZE(value_buf), display_format, *v);
|
||||
RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImGuiAlign_Center|ImGuiAlign_VCenter);
|
||||
RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.5f));
|
||||
|
||||
if (label_size.x > 0.0f)
|
||||
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, inner_bb.Min.y), label);
|
||||
@ -7071,64 +7084,67 @@ void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_ge
|
||||
|
||||
RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
|
||||
|
||||
int res_w = ImMin((int)graph_size.x, values_count) + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
|
||||
int item_count = values_count + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
|
||||
|
||||
// Tooltip on hover
|
||||
int v_hovered = -1;
|
||||
if (IsHovered(inner_bb, 0))
|
||||
if (values_count > 0)
|
||||
{
|
||||
const float t = ImClamp((g.IO.MousePos.x - inner_bb.Min.x) / (inner_bb.Max.x - inner_bb.Min.x), 0.0f, 0.9999f);
|
||||
const int v_idx = (int)(t * item_count);
|
||||
IM_ASSERT(v_idx >= 0 && v_idx < values_count);
|
||||
int res_w = ImMin((int)graph_size.x, values_count) + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
|
||||
int item_count = values_count + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
|
||||
|
||||
const float v0 = values_getter(data, (v_idx + values_offset) % values_count);
|
||||
const float v1 = values_getter(data, (v_idx + 1 + values_offset) % values_count);
|
||||
if (plot_type == ImGuiPlotType_Lines)
|
||||
SetTooltip("%d: %8.4g\n%d: %8.4g", v_idx, v0, v_idx+1, v1);
|
||||
else if (plot_type == ImGuiPlotType_Histogram)
|
||||
SetTooltip("%d: %8.4g", v_idx, v0);
|
||||
v_hovered = v_idx;
|
||||
}
|
||||
|
||||
const float t_step = 1.0f / (float)res_w;
|
||||
|
||||
float v0 = values_getter(data, (0 + values_offset) % values_count);
|
||||
float t0 = 0.0f;
|
||||
ImVec2 tp0 = ImVec2( t0, 1.0f - ImSaturate((v0 - scale_min) / (scale_max - scale_min)) ); // Point in the normalized space of our target rectangle
|
||||
|
||||
const ImU32 col_base = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLines : ImGuiCol_PlotHistogram);
|
||||
const ImU32 col_hovered = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLinesHovered : ImGuiCol_PlotHistogramHovered);
|
||||
|
||||
for (int n = 0; n < res_w; n++)
|
||||
{
|
||||
const float t1 = t0 + t_step;
|
||||
const int v1_idx = (int)(t0 * item_count + 0.5f);
|
||||
IM_ASSERT(v1_idx >= 0 && v1_idx < values_count);
|
||||
const float v1 = values_getter(data, (v1_idx + values_offset + 1) % values_count);
|
||||
const ImVec2 tp1 = ImVec2( t1, 1.0f - ImSaturate((v1 - scale_min) / (scale_max - scale_min)) );
|
||||
|
||||
// NB: Draw calls are merged together by the DrawList system. Still, we should render our batch are lower level to save a bit of CPU.
|
||||
ImVec2 pos0 = ImLerp(inner_bb.Min, inner_bb.Max, tp0);
|
||||
ImVec2 pos1 = ImLerp(inner_bb.Min, inner_bb.Max, (plot_type == ImGuiPlotType_Lines) ? tp1 : ImVec2(tp1.x, 1.0f));
|
||||
if (plot_type == ImGuiPlotType_Lines)
|
||||
// Tooltip on hover
|
||||
int v_hovered = -1;
|
||||
if (IsHovered(inner_bb, 0))
|
||||
{
|
||||
window->DrawList->AddLine(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base);
|
||||
}
|
||||
else if (plot_type == ImGuiPlotType_Histogram)
|
||||
{
|
||||
if (pos1.x >= pos0.x + 2.0f)
|
||||
pos1.x -= 1.0f;
|
||||
window->DrawList->AddRectFilled(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base);
|
||||
const float t = ImClamp((g.IO.MousePos.x - inner_bb.Min.x) / (inner_bb.Max.x - inner_bb.Min.x), 0.0f, 0.9999f);
|
||||
const int v_idx = (int)(t * item_count);
|
||||
IM_ASSERT(v_idx >= 0 && v_idx < values_count);
|
||||
|
||||
const float v0 = values_getter(data, (v_idx + values_offset) % values_count);
|
||||
const float v1 = values_getter(data, (v_idx + 1 + values_offset) % values_count);
|
||||
if (plot_type == ImGuiPlotType_Lines)
|
||||
SetTooltip("%d: %8.4g\n%d: %8.4g", v_idx, v0, v_idx+1, v1);
|
||||
else if (plot_type == ImGuiPlotType_Histogram)
|
||||
SetTooltip("%d: %8.4g", v_idx, v0);
|
||||
v_hovered = v_idx;
|
||||
}
|
||||
|
||||
t0 = t1;
|
||||
tp0 = tp1;
|
||||
const float t_step = 1.0f / (float)res_w;
|
||||
|
||||
float v0 = values_getter(data, (0 + values_offset) % values_count);
|
||||
float t0 = 0.0f;
|
||||
ImVec2 tp0 = ImVec2( t0, 1.0f - ImSaturate((v0 - scale_min) / (scale_max - scale_min)) ); // Point in the normalized space of our target rectangle
|
||||
|
||||
const ImU32 col_base = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLines : ImGuiCol_PlotHistogram);
|
||||
const ImU32 col_hovered = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLinesHovered : ImGuiCol_PlotHistogramHovered);
|
||||
|
||||
for (int n = 0; n < res_w; n++)
|
||||
{
|
||||
const float t1 = t0 + t_step;
|
||||
const int v1_idx = (int)(t0 * item_count + 0.5f);
|
||||
IM_ASSERT(v1_idx >= 0 && v1_idx < values_count);
|
||||
const float v1 = values_getter(data, (v1_idx + values_offset + 1) % values_count);
|
||||
const ImVec2 tp1 = ImVec2( t1, 1.0f - ImSaturate((v1 - scale_min) / (scale_max - scale_min)) );
|
||||
|
||||
// NB: Draw calls are merged together by the DrawList system. Still, we should render our batch are lower level to save a bit of CPU.
|
||||
ImVec2 pos0 = ImLerp(inner_bb.Min, inner_bb.Max, tp0);
|
||||
ImVec2 pos1 = ImLerp(inner_bb.Min, inner_bb.Max, (plot_type == ImGuiPlotType_Lines) ? tp1 : ImVec2(tp1.x, 1.0f));
|
||||
if (plot_type == ImGuiPlotType_Lines)
|
||||
{
|
||||
window->DrawList->AddLine(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base);
|
||||
}
|
||||
else if (plot_type == ImGuiPlotType_Histogram)
|
||||
{
|
||||
if (pos1.x >= pos0.x + 2.0f)
|
||||
pos1.x -= 1.0f;
|
||||
window->DrawList->AddRectFilled(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base);
|
||||
}
|
||||
|
||||
t0 = t1;
|
||||
tp0 = tp1;
|
||||
}
|
||||
}
|
||||
|
||||
// Text overlay
|
||||
if (overlay_text)
|
||||
RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, overlay_text, NULL, NULL, ImGuiAlign_Center);
|
||||
RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, overlay_text, NULL, NULL, ImVec2(0.5f,0.0f));
|
||||
|
||||
if (label_size.x > 0.0f)
|
||||
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, inner_bb.Min.y), label);
|
||||
@ -7204,7 +7220,7 @@ void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* over
|
||||
|
||||
ImVec2 overlay_size = CalcTextSize(overlay, NULL);
|
||||
if (overlay_size.x > 0.0f)
|
||||
RenderTextClipped(ImVec2(ImClamp(fill_br.x + style.ItemSpacing.x, bb.Min.x, bb.Max.x - overlay_size.x - style.ItemInnerSpacing.x), bb.Min.y), bb.Max, overlay, NULL, &overlay_size, ImGuiAlign_Left|ImGuiAlign_VCenter, &bb.Min, &bb.Max);
|
||||
RenderTextClipped(ImVec2(ImClamp(fill_br.x + style.ItemSpacing.x, bb.Min.x, bb.Max.x - overlay_size.x - style.ItemInnerSpacing.x), bb.Min.y), bb.Max, overlay, NULL, &overlay_size, ImVec2(0.0f,0.5f), &bb);
|
||||
}
|
||||
|
||||
bool ImGui::Checkbox(const char* label, bool* v)
|
||||
@ -7419,12 +7435,12 @@ static void STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, STB_TEXTEDIT_STRING* ob
|
||||
|
||||
static bool is_separator(unsigned int c) { return ImCharIsSpace(c) || c==',' || c==';' || c=='(' || c==')' || c=='{' || c=='}' || c=='[' || c==']' || c=='|'; }
|
||||
static int is_word_boundary_from_right(STB_TEXTEDIT_STRING* obj, int idx) { return idx > 0 ? (is_separator( obj->Text[idx-1] ) && !is_separator( obj->Text[idx] ) ) : 1; }
|
||||
static int STB_TEXTEDIT_MOVEWORDLEFT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { while (idx >= 0 && !is_word_boundary_from_right(obj, idx)) idx--; return idx < 0 ? 0 : idx; }
|
||||
static int STB_TEXTEDIT_MOVEWORDLEFT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { idx--; while (idx >= 0 && !is_word_boundary_from_right(obj, idx)) idx--; return idx < 0 ? 0 : idx; }
|
||||
#ifdef __APPLE__ // FIXME: Move setting to IO structure
|
||||
static int is_word_boundary_from_left(STB_TEXTEDIT_STRING* obj, int idx) { return idx > 0 ? (!is_separator( obj->Text[idx-1] ) && is_separator( obj->Text[idx] ) ) : 1; }
|
||||
static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_left(obj, idx)) idx++; return idx > len ? len : idx; }
|
||||
static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_left(obj, idx)) idx++; return idx > len ? len : idx; }
|
||||
#else
|
||||
static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_right(obj, idx)) idx++; return idx > len ? len : idx; }
|
||||
static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx) { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_right(obj, idx)) idx++; return idx > len ? len : idx; }
|
||||
#endif
|
||||
#define STB_TEXTEDIT_MOVEWORDLEFT STB_TEXTEDIT_MOVEWORDLEFT_IMPL // They need to be #define for stb_textedit.h
|
||||
#define STB_TEXTEDIT_MOVEWORDRIGHT STB_TEXTEDIT_MOVEWORDRIGHT_IMPL
|
||||
@ -7605,11 +7621,13 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
||||
const ImGuiIO& io = g.IO;
|
||||
const ImGuiStyle& style = g.Style;
|
||||
|
||||
const ImGuiID id = window->GetID(label);
|
||||
const bool is_multiline = (flags & ImGuiInputTextFlags_Multiline) != 0;
|
||||
const bool is_editable = (flags & ImGuiInputTextFlags_ReadOnly) == 0;
|
||||
const bool is_password = (flags & ImGuiInputTextFlags_Password) != 0;
|
||||
|
||||
if (is_multiline) // Open group before calling GetID() because groups tracks id created during their spawn
|
||||
BeginGroup();
|
||||
const ImGuiID id = window->GetID(label);
|
||||
const ImVec2 label_size = CalcTextSize(label, NULL, true);
|
||||
ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? GetTextLineHeight() * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line
|
||||
const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + size);
|
||||
@ -7618,7 +7636,6 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
||||
ImGuiWindow* draw_window = window;
|
||||
if (is_multiline)
|
||||
{
|
||||
BeginGroup();
|
||||
if (!BeginChildFrame(id, frame_bb.GetSize()))
|
||||
{
|
||||
EndChildFrame();
|
||||
@ -7849,7 +7866,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
||||
const int ie = edit_state.HasSelection() ? ImMax(edit_state.StbState.select_start, edit_state.StbState.select_end) : edit_state.CurLenW;
|
||||
edit_state.TempTextBuffer.resize((ie-ib) * 4 + 1);
|
||||
ImTextStrToUtf8(edit_state.TempTextBuffer.Data, edit_state.TempTextBuffer.Size, edit_state.Text.Data+ib, edit_state.Text.Data+ie);
|
||||
io.SetClipboardTextFn(edit_state.TempTextBuffer.Data);
|
||||
SetClipboardText(edit_state.TempTextBuffer.Data);
|
||||
}
|
||||
|
||||
if (cut)
|
||||
@ -7861,7 +7878,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
||||
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_V) && is_editable)
|
||||
{
|
||||
// Paste
|
||||
if (const char* clipboard = io.GetClipboardTextFn ? io.GetClipboardTextFn() : NULL)
|
||||
if (const char* clipboard = GetClipboardText())
|
||||
{
|
||||
// Filter pasted buffer
|
||||
const int clipboard_len = (int)strlen(clipboard);
|
||||
@ -8145,8 +8162,6 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
||||
Dummy(text_size + ImVec2(0.0f, g.FontSize)); // Always add room to scroll an extra line
|
||||
EndChildFrame();
|
||||
EndGroup();
|
||||
if (g.ActiveId == id || is_currently_scrolling) // Set LastItemId which was lost by EndChild/EndGroup, so user can use IsItemActive()
|
||||
window->DC.LastItemId = g.ActiveId;
|
||||
}
|
||||
|
||||
if (is_password)
|
||||
@ -8200,7 +8215,7 @@ bool ImGui::InputScalarEx(const char* label, ImGuiDataType data_type, void* data
|
||||
if (!(extra_flags & ImGuiInputTextFlags_CharsHexadecimal))
|
||||
extra_flags |= ImGuiInputTextFlags_CharsDecimal;
|
||||
extra_flags |= ImGuiInputTextFlags_AutoSelectAll;
|
||||
if (InputText("", buf, IM_ARRAYSIZE(buf), extra_flags))
|
||||
if (InputText("", buf, IM_ARRAYSIZE(buf), extra_flags)) // PushId(label) + "" gives us the expected ID from outside point of view
|
||||
value_changed = DataTypeApplyOpFromText(buf, GImGui->InputTextState.InitialText.begin(), data_type, data_ptr, scalar_format);
|
||||
|
||||
// Step buttons
|
||||
@ -8239,7 +8254,7 @@ bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast,
|
||||
if (decimal_precision < 0)
|
||||
strcpy(display_format, "%f"); // Ideally we'd have a minimum decimal precision of 1 to visually denote that this is a float, while hiding non-significant digits? %f doesn't have a minimum of 1
|
||||
else
|
||||
ImFormatString(display_format, 16, "%%.%df", decimal_precision);
|
||||
ImFormatString(display_format, IM_ARRAYSIZE(display_format), "%%.%df", decimal_precision);
|
||||
return InputScalarEx(label, ImGuiDataType_Float, (void*)v, (void*)(step>0.0f ? &step : NULL), (void*)(step_fast>0.0f ? &step_fast : NULL), display_format, extra_flags);
|
||||
}
|
||||
|
||||
@ -8418,7 +8433,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
|
||||
{
|
||||
const char* item_text;
|
||||
if (items_getter(data, *current_item, &item_text))
|
||||
RenderTextClipped(frame_bb.Min + style.FramePadding, value_bb.Max, item_text, NULL, NULL);
|
||||
RenderTextClipped(frame_bb.Min + style.FramePadding, value_bb.Max, item_text, NULL, NULL, ImVec2(0.0f,0.0f));
|
||||
}
|
||||
|
||||
if (label_size.x > 0)
|
||||
@ -8564,7 +8579,7 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
|
||||
}
|
||||
|
||||
if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
|
||||
RenderTextClipped(bb.Min, bb_with_spacing.Max, label, NULL, &label_size);
|
||||
RenderTextClipped(bb.Min, bb_with_spacing.Max, label, NULL, &label_size, ImVec2(0.0f,0.0f));
|
||||
if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor();
|
||||
|
||||
// Automatically close popups
|
||||
@ -8840,7 +8855,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
|
||||
tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f); // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale?
|
||||
tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f);
|
||||
moving_within_opened_triangle = ImIsPointInTriangle(g.IO.MousePos, ta, tb, tc);
|
||||
//window->DrawList->PushClipRectFullScreen(); window->DrawList->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? 0x80008000 : 0x80000080); window->DrawList->PopClipRect(); // Debug
|
||||
//window->DrawList->PushClipRectFullScreen(); window->DrawList->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); window->DrawList->PopClipRect(); // Debug
|
||||
}
|
||||
}
|
||||
|
||||
@ -9084,8 +9099,8 @@ void ImGui::Separator()
|
||||
if (!window->DC.GroupStack.empty())
|
||||
x1 += window->DC.IndentX;
|
||||
|
||||
const ImRect bb(ImVec2(x1, window->DC.CursorPos.y), ImVec2(x2, window->DC.CursorPos.y));
|
||||
ItemSize(ImVec2(0.0f, 0.0f)); // NB: we don't provide our width so that it doesn't get feed back into AutoFit // FIXME: Height should be 1.0f not 0.0f ?
|
||||
const ImRect bb(ImVec2(x1, window->DC.CursorPos.y), ImVec2(x2, window->DC.CursorPos.y+1.0f));
|
||||
ItemSize(ImVec2(0.0f, 0.0f)); // NB: we don't provide our width so that it doesn't get feed back into AutoFit, we don't provide height to not alter layout.
|
||||
if (!ItemAdd(bb, NULL))
|
||||
{
|
||||
if (window->DC.ColumnsCount > 1)
|
||||
@ -9093,7 +9108,7 @@ void ImGui::Separator()
|
||||
return;
|
||||
}
|
||||
|
||||
window->DrawList->AddLine(bb.Min, bb.Max, GetColorU32(ImGuiCol_Border));
|
||||
window->DrawList->AddLine(bb.Min, ImVec2(bb.Max.x,bb.Min.y), GetColorU32(ImGuiCol_Border));
|
||||
|
||||
ImGuiContext& g = *GImGui;
|
||||
if (g.LogEnabled)
|
||||
@ -9147,9 +9162,11 @@ void ImGui::BeginGroup()
|
||||
group_data.BackupCursorPos = window->DC.CursorPos;
|
||||
group_data.BackupCursorMaxPos = window->DC.CursorMaxPos;
|
||||
group_data.BackupIndentX = window->DC.IndentX;
|
||||
group_data.BackupGroupOffsetX = window->DC.GroupOffsetX;
|
||||
group_data.BackupCurrentLineHeight = window->DC.CurrentLineHeight;
|
||||
group_data.BackupCurrentLineTextBaseOffset = window->DC.CurrentLineTextBaseOffset;
|
||||
group_data.BackupLogLinePosY = window->DC.LogLinePosY;
|
||||
group_data.BackupActiveIdIsAlive = GImGui->ActiveIdIsAlive;
|
||||
group_data.AdvanceCursor = true;
|
||||
|
||||
window->DC.GroupOffsetX = window->DC.CursorPos.x - window->Pos.x - window->DC.ColumnsOffsetX;
|
||||
@ -9161,15 +9178,15 @@ void ImGui::BeginGroup()
|
||||
|
||||
void ImGui::EndGroup()
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
ImGuiWindow* window = GetCurrentWindow();
|
||||
ImGuiStyle& style = GetStyle();
|
||||
|
||||
IM_ASSERT(!window->DC.GroupStack.empty()); // Mismatched BeginGroup()/EndGroup() calls
|
||||
|
||||
ImGuiGroupData& group_data = window->DC.GroupStack.back();
|
||||
|
||||
ImRect group_bb(group_data.BackupCursorPos, window->DC.CursorMaxPos);
|
||||
group_bb.Max.y -= style.ItemSpacing.y; // Cancel out last vertical spacing because we are adding one ourselves.
|
||||
group_bb.Max.y -= g.Style.ItemSpacing.y; // Cancel out last vertical spacing because we are adding one ourselves.
|
||||
group_bb.Max = ImMax(group_bb.Min, group_bb.Max);
|
||||
|
||||
window->DC.CursorPos = group_data.BackupCursorPos;
|
||||
@ -9177,7 +9194,7 @@ void ImGui::EndGroup()
|
||||
window->DC.CurrentLineHeight = group_data.BackupCurrentLineHeight;
|
||||
window->DC.CurrentLineTextBaseOffset = group_data.BackupCurrentLineTextBaseOffset;
|
||||
window->DC.IndentX = group_data.BackupIndentX;
|
||||
window->DC.GroupOffsetX = window->DC.IndentX;
|
||||
window->DC.GroupOffsetX = group_data.BackupGroupOffsetX;
|
||||
window->DC.LogLinePosY = window->DC.CursorPos.y - 9999.0f;
|
||||
|
||||
if (group_data.AdvanceCursor)
|
||||
@ -9187,9 +9204,17 @@ void ImGui::EndGroup()
|
||||
ItemAdd(group_bb, NULL);
|
||||
}
|
||||
|
||||
// If the current ActiveId was declared within the boundary of our group, we copy it to LastItemId so IsItemActive() will function on the entire group.
|
||||
// It would be be neater if we replaced window.DC.LastItemId by e.g. 'bool LastItemIsActive', but if you search for LastItemId you'll notice it is only used in that context.
|
||||
const bool active_id_within_group = (!group_data.BackupActiveIdIsAlive && g.ActiveIdIsAlive && g.ActiveId && g.ActiveIdWindow->RootWindow == window->RootWindow);
|
||||
if (active_id_within_group)
|
||||
window->DC.LastItemId = g.ActiveId;
|
||||
if (active_id_within_group && g.HoveredId == g.ActiveId)
|
||||
window->DC.LastItemHoveredAndUsable = window->DC.LastItemHoveredRect = true;
|
||||
|
||||
window->DC.GroupStack.pop_back();
|
||||
|
||||
//window->DrawList->AddRect(group_bb.Min, group_bb.Max, 0xFFFF00FF); // Debug
|
||||
//window->DrawList->AddRect(group_bb.Min, group_bb.Max, IM_COL32(255,0,255,255)); // Debug
|
||||
}
|
||||
|
||||
// Gets back to previous line and continue with horizontal layout
|
||||
@ -9425,7 +9450,7 @@ void ImGui::Columns(int columns_count, const char* id, bool border)
|
||||
const ImGuiID column_id = window->DC.ColumnsSetId + ImGuiID(column_index);
|
||||
KeepAliveID(column_id);
|
||||
const float default_t = column_index / (float)window->DC.ColumnsCount;
|
||||
const float t = window->DC.StateStorage->GetFloat(column_id, default_t); // Cheaply store our floating point value inside the integer (could store an union into the map?)
|
||||
const float t = window->DC.StateStorage->GetFloat(column_id, default_t); // Cheaply store our floating point value inside the integer (could store a union into the map?)
|
||||
window->DC.ColumnsData[column_index].OffsetNorm = t;
|
||||
}
|
||||
window->DrawList->ChannelsSplit(window->DC.ColumnsCount);
|
||||
@ -9527,17 +9552,11 @@ void ImGui::ValueColor(const char* prefix, ImU32 v)
|
||||
{
|
||||
Text("%s: %08X", prefix, v);
|
||||
SameLine();
|
||||
|
||||
ImVec4 col;
|
||||
col.x = (float)((v >> 0) & 0xFF) / 255.0f;
|
||||
col.y = (float)((v >> 8) & 0xFF) / 255.0f;
|
||||
col.z = (float)((v >> 16) & 0xFF) / 255.0f;
|
||||
col.w = (float)((v >> 24) & 0xFF) / 255.0f;
|
||||
ColorButton(col, true);
|
||||
ColorButton(ColorConvertU32ToFloat4(v), true);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// PLATFORM DEPENDANT HELPERS
|
||||
// PLATFORM DEPENDENT HELPERS
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#if defined(_WIN32) && !defined(_WINDOWS_) && (!defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS) || !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS))
|
||||
@ -9553,7 +9572,7 @@ void ImGui::ValueColor(const char* prefix, ImU32 v)
|
||||
#pragma comment(lib, "user32")
|
||||
#endif
|
||||
|
||||
static const char* GetClipboardTextFn_DefaultImpl()
|
||||
static const char* GetClipboardTextFn_DefaultImpl(void*)
|
||||
{
|
||||
static ImVector<char> buf_local;
|
||||
buf_local.clear();
|
||||
@ -9573,7 +9592,7 @@ static const char* GetClipboardTextFn_DefaultImpl()
|
||||
return buf_local.Data;
|
||||
}
|
||||
|
||||
static void SetClipboardTextFn_DefaultImpl(const char* text)
|
||||
static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
|
||||
{
|
||||
if (!OpenClipboard(NULL))
|
||||
return;
|
||||
@ -9592,13 +9611,13 @@ static void SetClipboardTextFn_DefaultImpl(const char* text)
|
||||
#else
|
||||
|
||||
// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers
|
||||
static const char* GetClipboardTextFn_DefaultImpl()
|
||||
static const char* GetClipboardTextFn_DefaultImpl(void*)
|
||||
{
|
||||
return GImGui->PrivateClipboard;
|
||||
}
|
||||
|
||||
// Local ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers
|
||||
static void SetClipboardTextFn_DefaultImpl(const char* text)
|
||||
static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
|
||||
{
|
||||
ImGuiContext& g = *GImGui;
|
||||
if (g.PrivateClipboard)
|
||||
@ -9732,6 +9751,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
||||
if (!ImGui::TreeNode(window, "%s '%s', %d @ 0x%p", label, window->Name, window->Active || window->WasActive, window))
|
||||
return;
|
||||
NodeDrawList(window->DrawList, "DrawList");
|
||||
ImGui::BulletText("Pos: (%.1f,%.1f)", window->Pos.x, window->Pos.y);
|
||||
ImGui::BulletText("Size: (%.1f,%.1f), SizeContents (%.1f,%.1f)", window->Size.x, window->Size.y, window->SizeContents.x, window->SizeContents.y);
|
||||
ImGui::BulletText("Scroll: (%.2f,%.2f)", window->Scroll.x, window->Scroll.y);
|
||||
if (window->RootWindow != window) NodeWindow(window->RootWindow, "RootWindow");
|
||||
|
85
3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h
vendored
85
3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h
vendored
@ -30,7 +30,7 @@
|
||||
#endif
|
||||
|
||||
// Some compilers support applying printf-style warnings to user functions.
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
#if 0 //defined(__clang__) || defined(__GNUC__)
|
||||
#define IM_PRINTFARGS(FMT) __attribute__((format(printf, FMT, (FMT+1))))
|
||||
#else
|
||||
#define IM_PRINTFARGS(FMT)
|
||||
@ -70,7 +70,6 @@ typedef void* ImTextureID; // user data to identify a texture (this is
|
||||
typedef int ImGuiCol; // a color identifier for styling // enum ImGuiCol_
|
||||
typedef int ImGuiStyleVar; // a variable identifier for styling // enum ImGuiStyleVar_
|
||||
typedef int ImGuiKey; // a key identifier (ImGui-side enum) // enum ImGuiKey_
|
||||
typedef int ImGuiAlign; // alignment // enum ImGuiAlign_
|
||||
typedef int ImGuiColorEditMode; // color edit mode for ColorEdit*() // enum ImGuiColorEditMode_
|
||||
typedef int ImGuiMouseCursor; // a mouse cursor identifier // enum ImGuiMouseCursor_
|
||||
typedef int ImGuiWindowFlags; // window flags for Begin*() // enum ImGuiWindowFlags_
|
||||
@ -332,7 +331,7 @@ namespace ImGui
|
||||
IMGUI_API void TreePush(const void* ptr_id = NULL); // "
|
||||
IMGUI_API void TreePop(); // ~ Unindent()+PopId()
|
||||
IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing()
|
||||
IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceeding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode
|
||||
IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode
|
||||
IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiSetCond cond = 0); // set next TreeNode/CollapsingHeader open state.
|
||||
IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop().
|
||||
IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header
|
||||
@ -647,17 +646,9 @@ enum ImGuiStyleVar_
|
||||
ImGuiStyleVar_ItemInnerSpacing, // ImVec2
|
||||
ImGuiStyleVar_IndentSpacing, // float
|
||||
ImGuiStyleVar_GrabMinSize, // float
|
||||
ImGuiStyleVar_ViewId // uint8_t
|
||||
};
|
||||
|
||||
enum ImGuiAlign_
|
||||
{
|
||||
ImGuiAlign_Left = 1 << 0,
|
||||
ImGuiAlign_Center = 1 << 1,
|
||||
ImGuiAlign_Right = 1 << 2,
|
||||
ImGuiAlign_Top = 1 << 3,
|
||||
ImGuiAlign_VCenter = 1 << 4,
|
||||
ImGuiAlign_Default = ImGuiAlign_Left | ImGuiAlign_Top
|
||||
ImGuiStyleVar_ButtonTextAlign, // flags ImGuiAlign_*
|
||||
ImGuiStyleVar_ViewId, // uint8_t
|
||||
ImGuiStyleVar_Count_
|
||||
};
|
||||
|
||||
// Enumeration for ColorEditMode()
|
||||
@ -674,6 +665,7 @@ enum ImGuiColorEditMode_
|
||||
// Enumeration for GetMouseCursor()
|
||||
enum ImGuiMouseCursor_
|
||||
{
|
||||
ImGuiMouseCursor_None = -1,
|
||||
ImGuiMouseCursor_Arrow = 0,
|
||||
ImGuiMouseCursor_TextInput, // When hovering over InputText, etc.
|
||||
ImGuiMouseCursor_Move, // Unused
|
||||
@ -700,7 +692,7 @@ struct ImGuiStyle
|
||||
ImVec2 WindowPadding; // Padding within a window
|
||||
ImVec2 WindowMinSize; // Minimum window size
|
||||
float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows
|
||||
ImGuiAlign WindowTitleAlign; // Alignment for title bar text
|
||||
ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered.
|
||||
float ChildWindowRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows
|
||||
ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets)
|
||||
float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets).
|
||||
@ -714,6 +706,7 @@ struct ImGuiStyle
|
||||
float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar
|
||||
float ViewId;
|
||||
float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
|
||||
ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered.
|
||||
ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows.
|
||||
ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows.
|
||||
bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU.
|
||||
@ -766,8 +759,9 @@ struct ImGuiIO
|
||||
|
||||
// Optional: access OS clipboard
|
||||
// (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures)
|
||||
const char* (*GetClipboardTextFn)();
|
||||
void (*SetClipboardTextFn)(const char* text);
|
||||
const char* (*GetClipboardTextFn)(void* user_data);
|
||||
void (*SetClipboardTextFn)(void* user_data, const char* text);
|
||||
void* ClipboardUserData;
|
||||
|
||||
// Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer.
|
||||
// (default to posix malloc/free)
|
||||
@ -813,7 +807,7 @@ struct ImGuiIO
|
||||
int MetricsActiveWindows; // Number of visible windows (exclude child windows)
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// [Internal] ImGui will maintain those fields for you
|
||||
// [Private] ImGui will maintain those fields. Forward compatibility not guaranteed!
|
||||
//------------------------------------------------------------------
|
||||
|
||||
ImVec2 MousePosPrev; // Previous mouse position
|
||||
@ -960,10 +954,9 @@ struct ImGuiTextBuffer
|
||||
};
|
||||
|
||||
// Helper: Simple Key->value storage
|
||||
// - Store collapse state for a tree (Int 0/1)
|
||||
// - Store color edit options (Int using values in ImGuiColorEditMode enum).
|
||||
// - Custom user storage for temporary values.
|
||||
// Typically you don't have to worry about this since a storage is held within each Window.
|
||||
// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options.
|
||||
// You can use it as custom user storage for temporary values.
|
||||
// Declare your own storage if:
|
||||
// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state).
|
||||
// - You want to store custom debug data easily without adding or editing structures in your code.
|
||||
@ -995,9 +988,8 @@ struct ImGuiStorage
|
||||
|
||||
// - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set.
|
||||
// - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer.
|
||||
// - A typical use case where this is convenient:
|
||||
// - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct)
|
||||
// float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar;
|
||||
// - You can also use this to quickly create temporary editable values during a session of using Edit&Continue, without restarting your application.
|
||||
IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0);
|
||||
IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false);
|
||||
IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f);
|
||||
@ -1045,17 +1037,36 @@ struct ImGuiSizeConstraintCallbackData
|
||||
ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing.
|
||||
};
|
||||
|
||||
// Helpers macros to generate 32-bits encoded colors
|
||||
#ifdef IMGUI_USE_BGRA_PACKED_COLOR
|
||||
#define IM_COL32_R_SHIFT 16
|
||||
#define IM_COL32_G_SHIFT 8
|
||||
#define IM_COL32_B_SHIFT 0
|
||||
#define IM_COL32_A_SHIFT 24
|
||||
#define IM_COL32_A_MASK 0xFF000000
|
||||
#else
|
||||
#define IM_COL32_R_SHIFT 0
|
||||
#define IM_COL32_G_SHIFT 8
|
||||
#define IM_COL32_B_SHIFT 16
|
||||
#define IM_COL32_A_SHIFT 24
|
||||
#define IM_COL32_A_MASK 0xFF000000
|
||||
#endif
|
||||
#define IM_COL32(R,G,B,A) (((ImU32)(A)<<IM_COL32_A_SHIFT) | ((ImU32)(B)<<IM_COL32_B_SHIFT) | ((ImU32)(G)<<IM_COL32_G_SHIFT) | ((ImU32)(R)<<IM_COL32_R_SHIFT))
|
||||
#define IM_COL32_WHITE IM_COL32(255,255,255,255) // Opaque white
|
||||
#define IM_COL32_BLACK IM_COL32(0,0,0,255) // Opaque black
|
||||
#define IM_COL32_BLACK_TRANS IM_COL32(0,0,0,0) // Transparent black
|
||||
|
||||
// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float)
|
||||
// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API.
|
||||
// Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class.
|
||||
// None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats.
|
||||
// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class.
|
||||
// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats.
|
||||
struct ImColor
|
||||
{
|
||||
ImVec4 Value;
|
||||
|
||||
ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; }
|
||||
ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; }
|
||||
ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)(rgba&0xFF) * sc; Value.y = (float)((rgba>>8)&0xFF) * sc; Value.z = (float)((rgba>>16)&0xFF) * sc; Value.w = (float)(rgba >> 24) * sc; }
|
||||
ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; }
|
||||
ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; }
|
||||
ImColor(const ImVec4& col) { Value = col; }
|
||||
inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); }
|
||||
@ -1101,12 +1112,6 @@ struct ImGuiListClipper
|
||||
// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Helpers macros to generate 32-bits encoded colors
|
||||
#define IM_COL32(R,G,B,A) (((ImU32)(A)<<24) | ((ImU32)(B)<<16) | ((ImU32)(G)<<8) | ((ImU32)(R)))
|
||||
#define IM_COL32_WHITE (0xFFFFFFFF)
|
||||
#define IM_COL32_BLACK (0xFF000000)
|
||||
#define IM_COL32_BLACK_TRANS (0x00000000) // Transparent black
|
||||
|
||||
// Draw callbacks for advanced uses.
|
||||
// NB- You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering (you can poke into the draw list for that)
|
||||
// Draw callback may be useful for example, A) Change your GPU render state, B) render a complex 3D scene inside a UI element (without an intermediate texture/render target), etc.
|
||||
@ -1168,7 +1173,7 @@ struct ImDrawList
|
||||
ImVector<ImDrawVert> VtxBuffer; // Vertex buffer.
|
||||
|
||||
// [Internal, used while building lists]
|
||||
const char* _OwnerName; // Pointer to owner window's name (if any) for debugging
|
||||
const char* _OwnerName; // Pointer to owner window's name for debugging
|
||||
unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size
|
||||
ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
|
||||
ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
|
||||
@ -1179,7 +1184,7 @@ struct ImDrawList
|
||||
int _ChannelsCount; // [Internal] number of active channels (1+)
|
||||
ImVector<ImDrawChannel> _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size)
|
||||
|
||||
ImDrawList() { _OwnerName = NULL; Clear(); }
|
||||
ImDrawList() { _OwnerName = NULL; Clear(); }
|
||||
~ImDrawList() { ClearFreeMemory(); }
|
||||
IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling)
|
||||
IMGUI_API void PushClipRectFullScreen();
|
||||
@ -1189,8 +1194,8 @@ struct ImDrawList
|
||||
|
||||
// Primitives
|
||||
IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f);
|
||||
IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners = 0x0F, float thickness = 1.0f); // a: upper-left, b: lower-right
|
||||
IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners = 0x0F); // a: upper-left, b: lower-right
|
||||
IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ~0, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round
|
||||
IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ~0); // a: upper-left, b: lower-right
|
||||
IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left);
|
||||
IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f);
|
||||
IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col);
|
||||
@ -1212,9 +1217,9 @@ struct ImDrawList
|
||||
inline void PathFill(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col, true); PathClear(); }
|
||||
inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness, true); PathClear(); }
|
||||
IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10);
|
||||
IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle
|
||||
IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle
|
||||
IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0);
|
||||
IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners = 0x0F);
|
||||
IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ~0); // rounding_corners_flags: 4-bits corresponding to which corner to round
|
||||
|
||||
// Channels
|
||||
// - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives)
|
||||
@ -1392,9 +1397,7 @@ struct ImFont
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
|
||||
//---- Include imgui_user.h at the end of imgui.h
|
||||
//---- So you can include code that extends ImGui using any of the types declared above.
|
||||
//---- (also convenient for user to only explicitly include vanilla imgui.h)
|
||||
// Include imgui_user.h at the end of imgui.h (convenient for user to only explicitly include vanilla imgui.h)
|
||||
#ifdef IMGUI_INCLUDE_IMGUI_USER_H
|
||||
#include "imgui_user.h"
|
||||
#endif
|
||||
|
@ -30,7 +30,9 @@
|
||||
#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int'
|
||||
#pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal
|
||||
#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
|
||||
#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier //
|
||||
#if __has_warning("-Wreserved-id-macro")
|
||||
#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier //
|
||||
#endif
|
||||
#elif defined(__GNUC__)
|
||||
#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size
|
||||
#pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure)
|
||||
@ -71,7 +73,13 @@ static void ShowHelpMarker(const char* desc)
|
||||
{
|
||||
ImGui::TextDisabled("(?)");
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip(desc);
|
||||
{
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::PushTextWrapPos(450.0f);
|
||||
ImGui::TextUnformatted(desc);
|
||||
ImGui::PopTextWrapPos();
|
||||
ImGui::EndTooltip();
|
||||
}
|
||||
}
|
||||
|
||||
void ImGui::ShowUserGuide()
|
||||
@ -349,18 +357,18 @@ void ImGui::ShowTestWindow(bool* p_open)
|
||||
|
||||
ImGui::Text("Test paragraph 1:");
|
||||
ImVec2 pos = ImGui::GetCursorScreenPos();
|
||||
ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), 0xFFFF00FF);
|
||||
ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
|
||||
ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
|
||||
ImGui::Text("lazy dog. This paragraph is made to fit within %.0f pixels. The quick brown fox jumps over the lazy dog.", wrap_width);
|
||||
ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), 0xFF00FFFF);
|
||||
ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
|
||||
ImGui::PopTextWrapPos();
|
||||
|
||||
ImGui::Text("Test paragraph 2:");
|
||||
pos = ImGui::GetCursorScreenPos();
|
||||
ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), 0xFFFF00FF);
|
||||
ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
|
||||
ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
|
||||
ImGui::Text("aaaaaaaa bbbbbbbb, cccccccc,dddddddd. eeeeeeee ffffffff. gggggggg!hhhhhhhh");
|
||||
ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), 0xFF00FFFF);
|
||||
ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
|
||||
ImGui::PopTextWrapPos();
|
||||
|
||||
ImGui::TreePop();
|
||||
@ -790,7 +798,7 @@ void ImGui::ShowTestWindow(bool* p_open)
|
||||
ImGui::Separator();
|
||||
ImGui::PushItemWidth(100); ImGui::Combo("func", &func_type, "Sin\0Saw\0"); ImGui::PopItemWidth();
|
||||
ImGui::SameLine();
|
||||
ImGui::SliderInt("Sample count", &display_count, 1, 500);
|
||||
ImGui::SliderInt("Sample count", &display_count, 1, 400);
|
||||
float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw;
|
||||
ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
|
||||
ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
|
||||
@ -896,7 +904,7 @@ void ImGui::ShowTestWindow(bool* p_open)
|
||||
|
||||
if (ImGui::TreeNode("Basic Horizontal Layout"))
|
||||
{
|
||||
ImGui::TextWrapped("(Use ImGui::SameLine() to keep adding items to the right of the preceeding item)");
|
||||
ImGui::TextWrapped("(Use ImGui::SameLine() to keep adding items to the right of the preceding item)");
|
||||
|
||||
// Text
|
||||
ImGui::Text("Two items: Hello"); ImGui::SameLine();
|
||||
@ -1415,9 +1423,9 @@ void ImGui::ShowTestWindow(bool* p_open)
|
||||
ImGui::InputFloat("blue", &bar, 0.05f, 0, 3);
|
||||
ImGui::NextColumn();
|
||||
|
||||
if (ImGui::CollapsingHeader("Category A")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
|
||||
if (ImGui::CollapsingHeader("Category B")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
|
||||
if (ImGui::CollapsingHeader("Category C")) ImGui::Text("Blah blah blah"); ImGui::NextColumn();
|
||||
if (ImGui::CollapsingHeader("Category A")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
|
||||
if (ImGui::CollapsingHeader("Category B")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
|
||||
if (ImGui::CollapsingHeader("Category C")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
|
||||
ImGui::Columns(1);
|
||||
ImGui::Separator();
|
||||
ImGui::TreePop();
|
||||
@ -1534,7 +1542,7 @@ void ImGui::ShowTestWindow(bool* p_open)
|
||||
|
||||
if (ImGui::TreeNode("Dragging"))
|
||||
{
|
||||
ImGui::TextWrapped("You can use ImGui::GetItemActiveDragDelta() to query for the dragged amount on any widget.");
|
||||
ImGui::TextWrapped("You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget.");
|
||||
ImGui::Button("Drag Me");
|
||||
if (ImGui::IsItemActive())
|
||||
{
|
||||
@ -1632,7 +1640,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
||||
ImGui::TreePop();
|
||||
}
|
||||
|
||||
if (ImGui::TreeNode("Sizes"))
|
||||
if (ImGui::TreeNode("Settings"))
|
||||
{
|
||||
ImGui::SliderFloat2("WindowPadding", (float*)&style.WindowPadding, 0.0f, 20.0f, "%.0f");
|
||||
ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 16.0f, "%.0f");
|
||||
@ -1647,6 +1655,9 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
||||
ImGui::SliderFloat("ScrollbarRounding", &style.ScrollbarRounding, 0.0f, 16.0f, "%.0f");
|
||||
ImGui::SliderFloat("GrabMinSize", &style.GrabMinSize, 1.0f, 20.0f, "%.0f");
|
||||
ImGui::SliderFloat("GrabRounding", &style.GrabRounding, 0.0f, 16.0f, "%.0f");
|
||||
ImGui::Text("Alignment");
|
||||
ImGui::SliderFloat2("WindowTitleAlign", (float*)&style.WindowTitleAlign, 0.0f, 1.0f, "%.2f");
|
||||
ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); ShowHelpMarker("Alignment applies when a button is larger than its text content.");
|
||||
ImGui::TreePop();
|
||||
}
|
||||
|
||||
@ -1728,7 +1739,8 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
||||
ImGui::PopFont();
|
||||
if (ImGui::TreeNode("Details"))
|
||||
{
|
||||
ImGui::DragFloat("font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // scale only this font
|
||||
ImGui::DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font
|
||||
ImGui::SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)");
|
||||
ImGui::Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent);
|
||||
ImGui::Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar);
|
||||
for (int config_i = 0; config_i < font->ConfigDataCount; config_i++)
|
||||
@ -1736,6 +1748,47 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
||||
ImFontConfig* cfg = &font->ConfigData[config_i];
|
||||
ImGui::BulletText("Input %d: \'%s\'\nOversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH);
|
||||
}
|
||||
if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size))
|
||||
{
|
||||
// Display all glyphs of the fonts in separate pages of 256 characters
|
||||
const ImFont::Glyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return NULL on fallback, which isn't the default behavior.
|
||||
font->FallbackGlyph = NULL;
|
||||
for (int base = 0; base < 0x10000; base += 256)
|
||||
{
|
||||
int count = 0;
|
||||
for (int n = 0; n < 256; n++)
|
||||
count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0;
|
||||
if (count > 0 && ImGui::TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph"))
|
||||
{
|
||||
float cell_spacing = style.ItemSpacing.y;
|
||||
ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1);
|
||||
ImVec2 base_pos = ImGui::GetCursorScreenPos();
|
||||
ImDrawList* draw_list = ImGui::GetWindowDrawList();
|
||||
for (int n = 0; n < 256; n++)
|
||||
{
|
||||
ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing));
|
||||
ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y);
|
||||
const ImFont::Glyph* glyph = font->FindGlyph((ImWchar)(base+n));;
|
||||
draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50));
|
||||
font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui::GetColorU32(ImGuiCol_Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string.
|
||||
if (glyph && ImGui::IsMouseHoveringRect(cell_p1, cell_p2))
|
||||
{
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::Text("Codepoint: U+%04X", base+n);
|
||||
ImGui::Separator();
|
||||
ImGui::Text("XAdvance+1: %.1f", glyph->XAdvance);
|
||||
ImGui::Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1);
|
||||
ImGui::Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1);
|
||||
ImGui::EndTooltip();
|
||||
}
|
||||
}
|
||||
ImGui::Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16));
|
||||
ImGui::TreePop();
|
||||
}
|
||||
}
|
||||
font->FallbackGlyph = glyph_fallback;
|
||||
ImGui::TreePop();
|
||||
}
|
||||
ImGui::TreePop();
|
||||
}
|
||||
ImGui::TreePop();
|
||||
@ -1873,8 +1926,8 @@ static void ShowExampleAppConstrainedResize(bool* p_open)
|
||||
"Custom: Fixed Steps (100)",
|
||||
};
|
||||
ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc));
|
||||
if (ImGui::Button("200x200")) ImGui::SetWindowSize(ImVec2(200,200)); ImGui::SameLine();
|
||||
if (ImGui::Button("500x500")) ImGui::SetWindowSize(ImVec2(500,500)); ImGui::SameLine();
|
||||
if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200,200)); } ImGui::SameLine();
|
||||
if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500,500)); } ImGui::SameLine();
|
||||
if (ImGui::Button("800x200")) ImGui::SetWindowSize(ImVec2(800,200));
|
||||
for (int i = 0; i < 10; i++)
|
||||
ImGui::Text("Hello, sailor! Making this line long enough for the example.");
|
||||
@ -2012,7 +2065,7 @@ static void ShowExampleAppCustomRendering(bool* p_open)
|
||||
}
|
||||
draw_list->PushClipRect(canvas_pos, ImVec2(canvas_pos.x+canvas_size.x, canvas_pos.y+canvas_size.y)); // clip lines within the canvas (if we resize it, etc.)
|
||||
for (int i = 0; i < points.Size - 1; i += 2)
|
||||
draw_list->AddLine(ImVec2(canvas_pos.x + points[i].x, canvas_pos.y + points[i].y), ImVec2(canvas_pos.x + points[i+1].x, canvas_pos.y + points[i+1].y), 0xFF00FFFF, 2.0f);
|
||||
draw_list->AddLine(ImVec2(canvas_pos.x + points[i].x, canvas_pos.y + points[i].y), ImVec2(canvas_pos.x + points[i+1].x, canvas_pos.y + points[i+1].y), IM_COL32(255,255,0,255), 2.0f);
|
||||
draw_list->PopClipRect();
|
||||
if (adding_preview)
|
||||
points.pop_back();
|
||||
@ -2088,8 +2141,8 @@ struct ExampleAppConsole
|
||||
// TODO: display items starting from the bottom
|
||||
|
||||
if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine();
|
||||
if (ImGui::SmallButton("Add Dummy Error")) AddLog("[error] something went wrong"); ImGui::SameLine();
|
||||
if (ImGui::SmallButton("Clear")) ClearLog(); ImGui::SameLine();
|
||||
if (ImGui::SmallButton("Add Dummy Error")) { AddLog("[error] something went wrong"); } ImGui::SameLine();
|
||||
if (ImGui::SmallButton("Clear")) { ClearLog(); } ImGui::SameLine();
|
||||
if (ImGui::SmallButton("Scroll to bottom")) ScrollToBottom = true;
|
||||
//static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); }
|
||||
|
||||
@ -2143,7 +2196,7 @@ struct ExampleAppConsole
|
||||
if (ImGui::InputText("Input", InputBuf, IM_ARRAYSIZE(InputBuf), ImGuiInputTextFlags_EnterReturnsTrue|ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_CallbackHistory, &TextEditCallbackStub, (void*)this))
|
||||
{
|
||||
char* input_end = InputBuf+strlen(InputBuf);
|
||||
while (input_end > InputBuf && input_end[-1] == ' ') input_end--; *input_end = 0;
|
||||
while (input_end > InputBuf && input_end[-1] == ' ') { input_end--; } *input_end = 0;
|
||||
if (InputBuf[0])
|
||||
ExecCommand(InputBuf);
|
||||
strcpy(InputBuf, "");
|
||||
|
@ -39,7 +39,9 @@
|
||||
#pragma clang diagnostic ignored "-Wfloat-equal" // warning : comparing floating point with == or != is unsafe // storing and comparing against same constants ok.
|
||||
#pragma clang diagnostic ignored "-Wglobal-constructors" // warning : declaration requires a global destructor // similar to above, not sure what the exact difference it.
|
||||
#pragma clang diagnostic ignored "-Wsign-conversion" // warning : implicit conversion changes signedness //
|
||||
#if __has_warning("-Wreserved-id-macro")
|
||||
#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier //
|
||||
#endif
|
||||
#elif defined(__GNUC__)
|
||||
#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used
|
||||
#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function
|
||||
@ -431,7 +433,7 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32
|
||||
{
|
||||
// Anti-aliased stroke
|
||||
const float AA_SIZE = 1.0f;
|
||||
const ImU32 col_trans = col & 0x00ffffff;
|
||||
const ImU32 col_trans = col & IM_COL32(255,255,255,0);
|
||||
|
||||
const int idx_count = thick_line ? count*18 : count*12;
|
||||
const int vtx_count = thick_line ? points_count*4 : points_count*3;
|
||||
@ -604,7 +606,7 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun
|
||||
{
|
||||
// Anti-aliased Fill
|
||||
const float AA_SIZE = 1.0f;
|
||||
const ImU32 col_trans = col & 0x00ffffff;
|
||||
const ImU32 col_trans = col & IM_COL32(255,255,255,0);
|
||||
const int idx_count = (points_count-2)*3 + points_count*6;
|
||||
const int vtx_count = (points_count*2);
|
||||
PrimReserve(idx_count, vtx_count);
|
||||
@ -799,7 +801,7 @@ void ImDrawList::PathRect(const ImVec2& a, const ImVec2& b, float rounding, int
|
||||
|
||||
void ImDrawList::AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
PathLineTo(a + ImVec2(0.5f,0.5f));
|
||||
PathLineTo(b + ImVec2(0.5f,0.5f));
|
||||
@ -807,21 +809,21 @@ void ImDrawList::AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thic
|
||||
}
|
||||
|
||||
// a: upper-left, b: lower-right. we don't render 1 px sized rectangles properly.
|
||||
void ImDrawList::AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding, int rounding_corners, float thickness)
|
||||
void ImDrawList::AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding, int rounding_corners_flags, float thickness)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
PathRect(a + ImVec2(0.5f,0.5f), b - ImVec2(0.5f,0.5f), rounding, rounding_corners);
|
||||
PathRect(a + ImVec2(0.5f,0.5f), b - ImVec2(0.5f,0.5f), rounding, rounding_corners_flags);
|
||||
PathStroke(col, true, thickness);
|
||||
}
|
||||
|
||||
void ImDrawList::AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding, int rounding_corners)
|
||||
void ImDrawList::AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding, int rounding_corners_flags)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
if (rounding > 0.0f)
|
||||
{
|
||||
PathRect(a, b, rounding, rounding_corners);
|
||||
PathRect(a, b, rounding, rounding_corners_flags);
|
||||
PathFill(col);
|
||||
}
|
||||
else
|
||||
@ -833,7 +835,7 @@ void ImDrawList::AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, floa
|
||||
|
||||
void ImDrawList::AddRectFilledMultiColor(const ImVec2& a, const ImVec2& c, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left)
|
||||
{
|
||||
if (((col_upr_left | col_upr_right | col_bot_right | col_bot_left) >> 24) == 0)
|
||||
if (((col_upr_left | col_upr_right | col_bot_right | col_bot_left) & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
|
||||
const ImVec2 uv = GImGui->FontTexUvWhitePixel;
|
||||
@ -848,7 +850,7 @@ void ImDrawList::AddRectFilledMultiColor(const ImVec2& a, const ImVec2& c, ImU32
|
||||
|
||||
void ImDrawList::AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
|
||||
PathLineTo(a);
|
||||
@ -860,7 +862,7 @@ void ImDrawList::AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, cons
|
||||
|
||||
void ImDrawList::AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
|
||||
PathLineTo(a);
|
||||
@ -872,7 +874,7 @@ void ImDrawList::AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c
|
||||
|
||||
void ImDrawList::AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
|
||||
PathLineTo(a);
|
||||
@ -883,7 +885,7 @@ void ImDrawList::AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c,
|
||||
|
||||
void ImDrawList::AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
|
||||
PathLineTo(a);
|
||||
@ -894,7 +896,7 @@ void ImDrawList::AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec
|
||||
|
||||
void ImDrawList::AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments, float thickness)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
|
||||
const float a_max = IM_PI*2.0f * ((float)num_segments - 1.0f) / (float)num_segments;
|
||||
@ -904,7 +906,7 @@ void ImDrawList::AddCircle(const ImVec2& centre, float radius, ImU32 col, int nu
|
||||
|
||||
void ImDrawList::AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
|
||||
const float a_max = IM_PI*2.0f * ((float)num_segments - 1.0f) / (float)num_segments;
|
||||
@ -914,7 +916,7 @@ void ImDrawList::AddCircleFilled(const ImVec2& centre, float radius, ImU32 col,
|
||||
|
||||
void ImDrawList::AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
|
||||
PathLineTo(pos0);
|
||||
@ -924,7 +926,7 @@ void ImDrawList::AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImV
|
||||
|
||||
void ImDrawList::AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end, float wrap_width, const ImVec4* cpu_fine_clip_rect)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
|
||||
if (text_end == NULL)
|
||||
@ -959,7 +961,7 @@ void ImDrawList::AddText(const ImVec2& pos, ImU32 col, const char* text_begin, c
|
||||
|
||||
void ImDrawList::AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv0, const ImVec2& uv1, ImU32 col)
|
||||
{
|
||||
if ((col >> 24) == 0)
|
||||
if ((col & IM_COL32_A_MASK) == 0)
|
||||
return;
|
||||
|
||||
// FIXME-OPT: This is wasting draw calls.
|
||||
@ -1121,7 +1123,7 @@ void ImFontAtlas::GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_wid
|
||||
const unsigned char* src = pixels;
|
||||
unsigned int* dst = TexPixelsRGBA32;
|
||||
for (int n = TexWidth * TexHeight; n > 0; n--)
|
||||
*dst++ = ((unsigned int)(*src++) << 24) | 0x00FFFFFF;
|
||||
*dst++ = IM_COL32(255, 255, 255, (unsigned int)(*src++));
|
||||
}
|
||||
|
||||
*out_pixels = (unsigned char*)TexPixelsRGBA32;
|
||||
@ -1169,7 +1171,7 @@ static void Decode85(const unsigned char* src, unsigned char* dst)
|
||||
while (*src)
|
||||
{
|
||||
unsigned int tmp = Decode85Byte(src[0]) + 85*(Decode85Byte(src[1]) + 85*(Decode85Byte(src[2]) + 85*(Decode85Byte(src[3]) + 85*Decode85Byte(src[4]))));
|
||||
dst[0] = ((tmp >> 0) & 0xFF); dst[1] = ((tmp >> 8) & 0xFF); dst[2] = ((tmp >> 16) & 0xFF); dst[3] = ((tmp >> 24) & 0xFF); // We can't assume little-endianess.
|
||||
dst[0] = ((tmp >> 0) & 0xFF); dst[1] = ((tmp >> 8) & 0xFF); dst[2] = ((tmp >> 16) & 0xFF); dst[3] = ((tmp >> 24) & 0xFF); // We can't assume little-endianness.
|
||||
src += 5;
|
||||
dst += 4;
|
||||
}
|
||||
@ -1843,7 +1845,7 @@ const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const c
|
||||
}
|
||||
}
|
||||
|
||||
const float char_width = ((int)c < IndexXAdvance.Size) ? IndexXAdvance[(int)c] * scale : FallbackXAdvance;
|
||||
const float char_width = ((int)c < IndexXAdvance.Size ? IndexXAdvance[(int)c] : FallbackXAdvance) * scale;
|
||||
if (ImCharIsSpace(c))
|
||||
{
|
||||
if (inside_word)
|
||||
@ -2326,7 +2328,7 @@ static const char proggy_clean_ttf_compressed_data_base85[11980+1] =
|
||||
"%(?A%R$f<->Zts'^kn=-^@c4%-pY6qI%J%1IGxfLU9CP8cbPlXv);C=b),<2mOvP8up,UVf3839acAWAW-W?#ao/^#%KYo8fRULNd2.>%m]UK:n%r$'sw]J;5pAoO_#2mO3n,'=H5(et"
|
||||
"Hg*`+RLgv>=4U8guD$I%D:W>-r5V*%j*W:Kvej.Lp$<M-SGZ':+Q_k+uvOSLiEo(<aD/K<CCc`'Lx>'?;++O'>()jLR-^u68PHm8ZFWe+ej8h:9r6L*0//c&iH&R8pRbA#Kjm%upV1g:"
|
||||
"a_#Ur7FuA#(tRh#.Y5K+@?3<-8m0$PEn;J:rh6?I6uG<-`wMU'ircp0LaE_OtlMb&1#6T.#FDKu#1Lw%u%+GM+X'e?YLfjM[VO0MbuFp7;>Q&#WIo)0@F%q7c#4XAXN-U&VB<HFF*qL("
|
||||
"$/V,;(kXZejWO`<[5??ewY(*9=%wDc;,u<'9t3W-(H1th3+G]ucQ]kLs7df($/*JL]@*t7Bu_G3_7mp7<iaQjO@.kLg;x3B0lqp7Hf,^Ze7-##@/c58Mo(3;knp0%)A7?-W+eI'o8)b<"
|
||||
"$/V,;(kXZejWO`<[5?\?ewY(*9=%wDc;,u<'9t3W-(H1th3+G]ucQ]kLs7df($/*JL]@*t7Bu_G3_7mp7<iaQjO@.kLg;x3B0lqp7Hf,^Ze7-##@/c58Mo(3;knp0%)A7?-W+eI'o8)b<"
|
||||
"nKnw'Ho8C=Y>pqB>0ie&jhZ[?iLR@@_AvA-iQC(=ksRZRVp7`.=+NpBC%rh&3]R:8XDmE5^V8O(x<<aG/1N$#FX$0V5Y6x'aErI3I$7x%E`v<-BY,)%-?Psf*l?%C3.mM(=/M0:JxG'?"
|
||||
"7WhH%o'a<-80g0NBxoO(GH<dM]n.+%q@jH?f.UsJ2Ggs&4<-e47&Kl+f//9@`b+?.TeN_&B8Ss?v;^Trk;f#YvJkl&w$]>-+k?'(<S:68tq*WoDfZu';mM?8X[ma8W%*`-=;D.(nc7/;"
|
||||
")g:T1=^J$&BRV(-lTmNB6xqB[@0*o.erM*<SWF]u2=st-*(6v>^](H.aREZSi,#1:[IXaZFOm<-ui#qUq2$##Ri;u75OK#(RtaW-K-F`S+cF]uN`-KMQ%rP/Xri.LRcB##=YL3BgM/3M"
|
||||
|
@ -75,6 +75,7 @@ extern IMGUI_API ImGuiContext* GImGui; // current implicit ImGui context po
|
||||
|
||||
#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR)/sizeof(*_ARR)))
|
||||
#define IM_PI 3.14159265358979323846f
|
||||
#define IM_OFFSETOF(_TYPE,_ELM) ((size_t)&(((_TYPE*)0)->_ELM))
|
||||
|
||||
// Helpers: UTF-8 <> wchar
|
||||
IMGUI_API int ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, const ImWchar* in_text_end); // return output UTF-8 bytes count
|
||||
@ -192,7 +193,17 @@ enum ImGuiPlotType
|
||||
enum ImGuiDataType
|
||||
{
|
||||
ImGuiDataType_Int,
|
||||
ImGuiDataType_Float
|
||||
ImGuiDataType_Float,
|
||||
ImGuiDataType_Float2,
|
||||
};
|
||||
|
||||
enum ImGuiCorner
|
||||
{
|
||||
ImGuiCorner_TopLeft = 1 << 0, // 1
|
||||
ImGuiCorner_TopRight = 1 << 1, // 2
|
||||
ImGuiCorner_BottomRight = 1 << 2, // 4
|
||||
ImGuiCorner_BottomLeft = 1 << 3, // 8
|
||||
ImGuiCorner_All = 0x0F
|
||||
};
|
||||
|
||||
// 2D axis aligned bounding-box
|
||||
@ -241,14 +252,17 @@ struct IMGUI_API ImRect
|
||||
struct ImGuiColMod
|
||||
{
|
||||
ImGuiCol Col;
|
||||
ImVec4 PreviousValue;
|
||||
ImVec4 BackupValue;
|
||||
};
|
||||
|
||||
// Stacked style modifier, backup of modified data so we can restore it
|
||||
// Stacked style modifier, backup of modified data so we can restore it. Data type inferred from the variable.
|
||||
struct ImGuiStyleMod
|
||||
{
|
||||
ImGuiStyleVar Var;
|
||||
ImVec2 PreviousValue;
|
||||
ImGuiStyleVar VarIdx;
|
||||
union { int BackupInt[2]; float BackupFloat[2]; };
|
||||
ImGuiStyleMod(ImGuiStyleVar idx, int v) { VarIdx = idx; BackupInt[0] = v; }
|
||||
ImGuiStyleMod(ImGuiStyleVar idx, float v) { VarIdx = idx; BackupFloat[0] = v; }
|
||||
ImGuiStyleMod(ImGuiStyleVar idx, ImVec2 v) { VarIdx = idx; BackupFloat[0] = v.x; BackupFloat[1] = v.y; }
|
||||
};
|
||||
|
||||
// Stacked data for BeginGroup()/EndGroup()
|
||||
@ -257,9 +271,11 @@ struct ImGuiGroupData
|
||||
ImVec2 BackupCursorPos;
|
||||
ImVec2 BackupCursorMaxPos;
|
||||
float BackupIndentX;
|
||||
float BackupGroupOffsetX;
|
||||
float BackupCurrentLineHeight;
|
||||
float BackupCurrentLineTextBaseOffset;
|
||||
float BackupLogLinePosY;
|
||||
bool BackupActiveIdIsAlive;
|
||||
bool AdvanceCursor;
|
||||
};
|
||||
|
||||
@ -704,13 +720,13 @@ namespace ImGui
|
||||
IMGUI_API void OpenPopupEx(const char* str_id, bool reopen_existing);
|
||||
|
||||
// NB: All position are in absolute pixels coordinates (not window coordinates)
|
||||
// FIXME: All those functions are a mess and needs to be refactored into something decent. Avoid use outside of imgui.cpp!
|
||||
// FIXME: All those functions are a mess and needs to be refactored into something decent. AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION.
|
||||
// We need: a sort of symbol library, preferably baked into font atlas when possible + decent text rendering helpers.
|
||||
IMGUI_API void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);
|
||||
IMGUI_API void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width);
|
||||
IMGUI_API void RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, ImGuiAlign align = ImGuiAlign_Default, const ImVec2* clip_min = NULL, const ImVec2* clip_max = NULL);
|
||||
IMGUI_API void RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0,0), const ImRect* clip_rect = NULL);
|
||||
IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
|
||||
IMGUI_API void RenderCollapseTriangle(ImVec2 pos, bool is_open, float scale = 1.0f, bool shadow = false);
|
||||
IMGUI_API void RenderCollapseTriangle(ImVec2 pos, bool is_open, float scale = 1.0f);
|
||||
IMGUI_API void RenderBullet(ImVec2 pos);
|
||||
IMGUI_API void RenderCheckMark(ImVec2 pos, ImU32 col);
|
||||
IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
|
||||
|
@ -45,3 +45,4 @@ namespace ImGui
|
||||
#include "widgets/file_list.h"
|
||||
#include "widgets/memory_editor.h"
|
||||
#include "widgets/gizmo.h"
|
||||
#include "widgets/dock.h"
|
@ -75,3 +75,4 @@ namespace ImGui
|
||||
#include "widgets/file_list.inl"
|
||||
#include "widgets/memory_editor.inl"
|
||||
#include "widgets/gizmo.inl"
|
||||
#include "widgets/dock.inl"
|
1681
3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_wm.cpp
vendored
1681
3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_wm.cpp
vendored
File diff suppressed because it is too large
Load Diff
310
3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_wm.h
vendored
310
3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_wm.h
vendored
@ -1,310 +0,0 @@
|
||||
/*
|
||||
* Copyright 2011-2016 Branimir Karadzic. All rights reserved.
|
||||
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on ImWindow code from:
|
||||
* https://github.com/thennequin/ImWindow
|
||||
*
|
||||
* MIT license:
|
||||
* https://github.com/thennequin/ImWindow/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
#ifndef IMGUI_WM_H_HEADER_GUARD
|
||||
#define IMGUI_WM_H_HEADER_GUARD
|
||||
|
||||
#include "imgui.h"
|
||||
|
||||
typedef unsigned int ImU32;
|
||||
|
||||
#ifndef ImwList
|
||||
# include <list>
|
||||
# define ImwList std::list
|
||||
#endif // ImList
|
||||
|
||||
#ifndef ImwMap
|
||||
# include <unordered_map>
|
||||
# define ImwMap std::unordered_map
|
||||
#endif // ImMap
|
||||
|
||||
namespace ImGuiWM
|
||||
{
|
||||
enum EDockOrientation
|
||||
{
|
||||
E_DOCK_ORIENTATION_CENTER,
|
||||
E_DOCK_ORIENTATION_TOP,
|
||||
E_DOCK_ORIENTATION_LEFT,
|
||||
E_DOCK_ORIENTATION_RIGHT,
|
||||
E_DOCK_ORIENTATION_BOTTOM,
|
||||
};
|
||||
|
||||
class Id
|
||||
{
|
||||
public:
|
||||
Id();
|
||||
ImU32 GetId() const;
|
||||
const char* GetStr() const;
|
||||
|
||||
private:
|
||||
ImU32 m_iId;
|
||||
char m_pId[11];
|
||||
static int s_iNextId;
|
||||
};
|
||||
|
||||
class Window
|
||||
{
|
||||
friend class WindowManager;
|
||||
friend class Container;
|
||||
|
||||
public:
|
||||
virtual void OnGui() = 0;
|
||||
virtual void OnMenu() {};
|
||||
|
||||
const char* GetId() const { return m_oId.GetStr(); }
|
||||
|
||||
void Destroy();
|
||||
|
||||
void SetTitle(const char* pTitle);
|
||||
const char* GetTitle() const;
|
||||
|
||||
const ImVec2& GetLastPosition() const;
|
||||
const ImVec2& GetLastSize() const;
|
||||
|
||||
protected:
|
||||
Window();
|
||||
virtual ~Window();
|
||||
|
||||
char* m_pTitle;
|
||||
Id m_oId;
|
||||
|
||||
ImVec2 m_oLastPosition;
|
||||
ImVec2 m_oLastSize;
|
||||
};
|
||||
|
||||
typedef ImwList<Window*> WindowList;
|
||||
|
||||
class PlatformWindow;
|
||||
|
||||
class Container
|
||||
{
|
||||
friend class PlatformWindow;
|
||||
|
||||
public:
|
||||
void Dock(Window* pWindow,EDockOrientation eOrientation = E_DOCK_ORIENTATION_CENTER);
|
||||
bool UnDock(Window* pWindow);
|
||||
|
||||
bool IsEmpty();
|
||||
bool IsSplit();
|
||||
bool HasWindowTabbed();
|
||||
Container* HasWindow(const Window* pWindow);
|
||||
PlatformWindow* GetPlatformWindowParent() const;
|
||||
Container* GetBestDocking(const ImVec2 oCursorPosInContainer,EDockOrientation& oOutOrientation,ImVec2& oOutAreaPos,ImVec2& oOutAreaSize);
|
||||
|
||||
protected:
|
||||
Container(Container* pParent);
|
||||
Container(PlatformWindow* pParent);
|
||||
~Container();
|
||||
|
||||
void CreateSplits();
|
||||
void Paint();
|
||||
|
||||
Container* m_pParent;
|
||||
PlatformWindow* m_pParentWindow;
|
||||
WindowList m_lWindows;
|
||||
Container* m_pSplits[2];
|
||||
|
||||
float m_fSplitRatio;
|
||||
bool m_bVerticalSplit;
|
||||
int m_iActiveWindow;
|
||||
|
||||
bool m_bIsDrag;
|
||||
|
||||
ImVec2 m_oLastPosition;
|
||||
ImVec2 m_oLastSize;
|
||||
};
|
||||
|
||||
class PlatformWindow
|
||||
{
|
||||
friend class WindowManager;
|
||||
|
||||
public:
|
||||
PlatformWindow(bool bMainWindow,bool bIsDragWindow);
|
||||
virtual ~PlatformWindow();
|
||||
|
||||
virtual bool Init(PlatformWindow* pParent) = 0;
|
||||
|
||||
virtual const ImVec2& GetPosition() const = 0;
|
||||
virtual const ImVec2& GetSize() const = 0;
|
||||
|
||||
virtual void Show() = 0;
|
||||
virtual void Hide() = 0;
|
||||
virtual void SetSize(const ImVec2& size) = 0;
|
||||
virtual void SetPosition(const ImVec2& pos) = 0;
|
||||
virtual void SetTitle(const char* pTitle) = 0;
|
||||
|
||||
bool IsMain();
|
||||
|
||||
void Dock(Window* pWindow);
|
||||
bool UnDock(Window* pWindow);
|
||||
|
||||
Container* GetContainer();
|
||||
Container* HasWindow(Window* pWindow);
|
||||
bool IsStateSet();
|
||||
|
||||
protected:
|
||||
void SetState();
|
||||
void RestoreState();
|
||||
void OnLoseFocus();
|
||||
virtual void PreUpdate() = 0;
|
||||
virtual void PaintBegin() = 0;
|
||||
virtual void Paint();
|
||||
virtual void PaintEnd() = 0;
|
||||
virtual void Destroy() = 0;
|
||||
virtual void StartDrag() = 0;
|
||||
virtual void StopDrag() = 0;
|
||||
virtual bool IsDraging() = 0;
|
||||
|
||||
void PaintContainer();
|
||||
void OnClose();
|
||||
|
||||
Id m_oId;
|
||||
bool m_bMain;
|
||||
bool m_bIsDragWindow;
|
||||
Container* m_pContainer;
|
||||
ImGuiContext* m_pState;
|
||||
ImGuiContext* m_pPreviousState;
|
||||
};
|
||||
|
||||
typedef ImwList<PlatformWindow*> PlatformWindowList;
|
||||
|
||||
class WindowManager
|
||||
{
|
||||
friend class Window;
|
||||
friend class PlatformWindow;
|
||||
friend class Container;
|
||||
|
||||
struct PlatformWindowAction
|
||||
{
|
||||
PlatformWindow* m_pPlatformWindow;
|
||||
unsigned int m_iFlags;
|
||||
ImVec2 m_oPosition;
|
||||
ImVec2 m_oSize;
|
||||
};
|
||||
|
||||
struct DockAction
|
||||
{
|
||||
Window* m_pWindow;
|
||||
|
||||
// Is Dock or Float
|
||||
bool m_bFloat;
|
||||
|
||||
//For Docking
|
||||
Window* m_pWith;
|
||||
EDockOrientation m_eOrientation;
|
||||
PlatformWindow* m_pToPlatformWindow;
|
||||
Container* m_pToContainer;
|
||||
|
||||
//For Floating
|
||||
ImVec2 m_oPosition;
|
||||
ImVec2 m_oSize;
|
||||
};
|
||||
|
||||
struct DrawWindowAreaAction
|
||||
{
|
||||
DrawWindowAreaAction(PlatformWindow* pWindow,const ImVec2& oRectPos,const ImVec2& oRectSize,const ImColor& oColor);
|
||||
PlatformWindow* m_pWindow;
|
||||
ImVec2 m_oRectPos;
|
||||
ImVec2 m_oRectSize;
|
||||
ImColor m_oColor;
|
||||
};
|
||||
|
||||
public:
|
||||
struct Config
|
||||
{
|
||||
Config();
|
||||
float m_fDragMarginRatio;
|
||||
float m_fDragMarginSizeRatio;
|
||||
ImColor m_oHightlightAreaColor;
|
||||
};
|
||||
|
||||
WindowManager();
|
||||
virtual ~WindowManager();
|
||||
|
||||
bool Init();
|
||||
bool Run();
|
||||
void Exit();
|
||||
|
||||
PlatformWindow* GetMainPlatformWindow();
|
||||
Config& GetConfig();
|
||||
|
||||
void SetMainTitle(const char* pTitle);
|
||||
|
||||
void Dock(Window* pWindow, EDockOrientation eOrientation = E_DOCK_ORIENTATION_CENTER, PlatformWindow* pToPlatformWindow = NULL);
|
||||
void DockTo(Window* pWindow, EDockOrientation eOrientation = E_DOCK_ORIENTATION_CENTER, Container* pContainer = NULL);
|
||||
void DockWith(Window* pWindow, Window* pWithWindow,EDockOrientation eOrientation = E_DOCK_ORIENTATION_CENTER);
|
||||
void Float(Window* pWindow, const ImVec2& oPosition = ImVec2(-1,-1), const ImVec2& oSize = ImVec2(-1,-1));
|
||||
|
||||
const WindowList& GetWindowList() const;
|
||||
PlatformWindow* GetCurrentPlatformWindow();
|
||||
PlatformWindow* GetWindowParent(Window* pWindow);
|
||||
|
||||
void Log(const char* pFormat, ...);
|
||||
virtual void LogFormatted(const char* pStr) = 0;;
|
||||
|
||||
static WindowManager* GetInstance();
|
||||
|
||||
protected:
|
||||
virtual PlatformWindow* CreatePlatformWindow(bool bMain,PlatformWindow* pParent,bool bDragWindow) = 0;
|
||||
virtual void InternalRun() = 0;
|
||||
|
||||
void AddWindow(Window* pWindow);
|
||||
void RemoveWindow(Window* pWindow);
|
||||
void DestroyWindow(Window* pWindow);
|
||||
|
||||
void InternalDock(Window* pWindow,EDockOrientation eOrientation,PlatformWindow* pToPlatformWindow);
|
||||
void InternalDockTo(Window* pWindow,EDockOrientation eOrientation,Container* pToContainer);
|
||||
void InternalDockWith(Window* pWindow,Window* pWithWindow,EDockOrientation eOrientation);
|
||||
bool InternalFloat(Window* pWindow,ImVec2 oPosition,ImVec2 oSize);
|
||||
void InternalUnDock(Window* pWindow);
|
||||
void InternalDrag(Window* pWindow);
|
||||
|
||||
void OnClosePlatformWindow(PlatformWindow* pWindow);
|
||||
|
||||
void DrawWindowArea(PlatformWindow* pWindow,const ImVec2& oPos,const ImVec2& oSize,const ImColor& oColor);
|
||||
|
||||
void PreUpdate();
|
||||
void Update();
|
||||
void UpdatePlatformwWindowActions();
|
||||
void UpdateDockActions();
|
||||
void UpdateOrphans();
|
||||
|
||||
void Paint(PlatformWindow* pWindow);
|
||||
|
||||
void StartDragWindow(Window* pWindow);
|
||||
void StopDragWindow();
|
||||
void UpdateDragWindow();
|
||||
Container* GetBestDocking(PlatformWindow* pPlatformWindow,const ImVec2 oCursorPos,EDockOrientation& oOutOrientation,ImVec2& oOutAreaPos,ImVec2& oOutAreaSize);
|
||||
|
||||
Config m_oConfig;
|
||||
PlatformWindow* m_pMainPlatformWindow;
|
||||
PlatformWindowList m_lPlatformWindows;
|
||||
PlatformWindow* m_pDragPlatformWindow;
|
||||
WindowList m_lWindows;
|
||||
WindowList m_lOrphanWindows;
|
||||
WindowList m_lToDestroyWindows;
|
||||
PlatformWindowList m_lToDestroyPlatformWindows;
|
||||
ImwList<PlatformWindowAction*> m_lPlatformWindowActions;
|
||||
ImwList<DockAction*> m_lDockActions;
|
||||
ImwList<DrawWindowAreaAction> m_lDrawWindowAreas;
|
||||
|
||||
PlatformWindow* m_pCurrentPlatformWindow;
|
||||
Window* m_pDraggedWindow;
|
||||
|
||||
ImVec2 m_oDragPreviewOffset;
|
||||
|
||||
static WindowManager* s_pInstance;
|
||||
};
|
||||
}
|
||||
|
||||
#endif // IMGUI_WM_H_HEADER_GUARD
|
21
3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/dock.h
vendored
Normal file
21
3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/dock.h
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
namespace ImGui
|
||||
{
|
||||
///
|
||||
IMGUI_API void InitDockContext();
|
||||
|
||||
///
|
||||
IMGUI_API void ShutdownDockContext();
|
||||
|
||||
///
|
||||
IMGUI_API void RootDock(const ImVec2& pos, const ImVec2& size);
|
||||
|
||||
///
|
||||
IMGUI_API bool BeginDock(const char* label, bool* opened = NULL, ImGuiWindowFlags extra_flags = 0);
|
||||
|
||||
///
|
||||
IMGUI_API void EndDock();
|
||||
|
||||
///
|
||||
IMGUI_API void SetDockActive();
|
||||
|
||||
} // namespace ImGui
|
1084
3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/dock.inl
vendored
Normal file
1084
3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/dock.inl
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -16,7 +16,7 @@ namespace ImGui
|
||||
|
||||
void ImFileList::ChDir(const char* path)
|
||||
{
|
||||
#if BX_PLATFORM_NACL
|
||||
#if BX_PLATFORM_NACL || BX_PLATFORM_PS4
|
||||
BX_UNUSED(path);
|
||||
#else
|
||||
DIR* dir = opendir(path);
|
||||
@ -47,7 +47,7 @@ namespace ImGui
|
||||
|
||||
closedir(dir);
|
||||
}
|
||||
#endif // BX_PLATFORM_NACL
|
||||
#endif // BX_PLATFORM_NACL || BX_PLATFORM_PS4
|
||||
}
|
||||
|
||||
void ImFileList::Draw()
|
||||
|
109
3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.h
vendored
109
3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.h
vendored
@ -1,5 +1,5 @@
|
||||
// https://github.com/CedricGuillemet/ImGuizmo
|
||||
// v 1.0 WIP
|
||||
// v 1.04 WIP
|
||||
//
|
||||
// The MIT License(MIT)
|
||||
//
|
||||
@ -25,48 +25,81 @@
|
||||
//
|
||||
// -------------------------------------------------------------------------------------------
|
||||
// History :
|
||||
// 2016/09/11 Behind camera culling. Scaling Delta matrix not multiplied by source matrix scales. local/world rotation and translation fixed. Display message is incorrect (X: ... Y:...) in local mode.
|
||||
// 2016/09/09 Hatched negative axis. Snapping. Documentation update.
|
||||
// 2016/09/04 Axis switch and translation plan autohiding. Scale transform stability improved
|
||||
// 2016/09/01 Mogwai changed to Manipulate. Draw debug cube. Fixed inverted scale. Mixing scale and translation/rotation gives bad results.
|
||||
// 2016/08/31 First version
|
||||
//
|
||||
// -------------------------------------------------------------------------------------------
|
||||
// Future (no order):
|
||||
//
|
||||
// - Multi view
|
||||
// - display rotation/translation/scale infos in local/world space and not only local
|
||||
// - finish local/world matrix application
|
||||
// - OPERATION as bitmask
|
||||
//
|
||||
// -------------------------------------------------------------------------------------------
|
||||
// Example
|
||||
//
|
||||
// static ImGuizmo::OPERATION mCurrentGizmoOperation(ImGuizmo::TRANSLATE);
|
||||
// static ImGuizmo::MODE mCurrentGizmoMode(ImGuizmo::LOCAL);
|
||||
//
|
||||
// // Maya shortcut keys
|
||||
// if (ImGui::IsKeyPressed(90)) // w Key
|
||||
// mCurrentGizmoOperation = ImGuizmo::TRANSLATE;
|
||||
// if (ImGui::IsKeyPressed(69)) // e Key
|
||||
// mCurrentGizmoOperation = ImGuizmo::ROTATE;
|
||||
// if (ImGui::IsKeyPressed(82)) // r Key
|
||||
// mCurrentGizmoOperation = ImGuizmo::SCALE;
|
||||
//
|
||||
// if (ImGui::RadioButton("Translate", mCurrentGizmoOperation == ImGuizmo::TRANSLATE))
|
||||
// mCurrentGizmoOperation = ImGuizmo::TRANSLATE;
|
||||
// ImGui::SameLine();
|
||||
// if (ImGui::RadioButton("Rotate", mCurrentGizmoOperation == ImGuizmo::ROTATE))
|
||||
// mCurrentGizmoOperation = ImGuizmo::ROTATE;
|
||||
// ImGui::SameLine();
|
||||
// if (ImGui::RadioButton("Scale", mCurrentGizmoOperation == ImGuizmo::SCALE))
|
||||
// mCurrentGizmoOperation = ImGuizmo::SCALE;
|
||||
//
|
||||
// float matrixTranslation[3], matrixRotation[3], matrixScale[3];
|
||||
// ImGuizmo::DecomposeMatrixToComponents(gizmoMatrix.m16, matrixTranslation, matrixRotation, matrixScale);
|
||||
// ImGui::InputFloat3("Tr", matrixTranslation, 3);
|
||||
// ImGui::InputFloat3("Rt", matrixRotation, 3);
|
||||
// ImGui::InputFloat3("Sc", matrixScale, 3);
|
||||
// ImGuizmo::RecomposeMatrixFromComponents(matrixTranslation, matrixRotation, matrixScale, gizmoMatrix.m16);
|
||||
//
|
||||
// if (ImGui::RadioButton("Local", mCurrentGizmoMode == ImGuizmo::LOCAL))
|
||||
// mCurrentGizmoMode = ImGuizmo::LOCAL;
|
||||
// ImGui::SameLine();
|
||||
// if (ImGui::RadioButton("World", mCurrentGizmoMode == ImGuizmo::WORLD))
|
||||
// mCurrentGizmoMode = ImGuizmo::WORLD;
|
||||
//
|
||||
// ImGuizmo::Mogwai(gCurrentCamera->mView.m16, gCurrentCamera->mProjection.m16, mCurrentGizmoOperation, mCurrentGizmoMode, gizmoMatrix.m16);
|
||||
//
|
||||
#if 0
|
||||
void EditTransform(const Camera& camera, matrix_t& matrix)
|
||||
{
|
||||
static ImGuizmo::OPERATION mCurrentGizmoOperation(ImGuizmo::ROTATE);
|
||||
static ImGuizmo::MODE mCurrentGizmoMode(ImGuizmo::WORLD);
|
||||
if (ImGui::IsKeyPressed(90))
|
||||
mCurrentGizmoOperation = ImGuizmo::TRANSLATE;
|
||||
if (ImGui::IsKeyPressed(69))
|
||||
mCurrentGizmoOperation = ImGuizmo::ROTATE;
|
||||
if (ImGui::IsKeyPressed(82)) // r Key
|
||||
mCurrentGizmoOperation = ImGuizmo::SCALE;
|
||||
if (ImGui::RadioButton("Translate", mCurrentGizmoOperation == ImGuizmo::TRANSLATE))
|
||||
mCurrentGizmoOperation = ImGuizmo::TRANSLATE;
|
||||
ImGui::SameLine();
|
||||
if (ImGui::RadioButton("Rotate", mCurrentGizmoOperation == ImGuizmo::ROTATE))
|
||||
mCurrentGizmoOperation = ImGuizmo::ROTATE;
|
||||
ImGui::SameLine();
|
||||
if (ImGui::RadioButton("Scale", mCurrentGizmoOperation == ImGuizmo::SCALE))
|
||||
mCurrentGizmoOperation = ImGuizmo::SCALE;
|
||||
float matrixTranslation[3], matrixRotation[3], matrixScale[3];
|
||||
ImGuizmo::DecomposeMatrixToComponents(matrix.m16, matrixTranslation, matrixRotation, matrixScale);
|
||||
ImGui::InputFloat3("Tr", matrixTranslation, 3);
|
||||
ImGui::InputFloat3("Rt", matrixRotation, 3);
|
||||
ImGui::InputFloat3("Sc", matrixScale, 3);
|
||||
ImGuizmo::RecomposeMatrixFromComponents(matrixTranslation, matrixRotation, matrixScale, matrix.m16);
|
||||
|
||||
if (mCurrentGizmoOperation != ImGuizmo::SCALE)
|
||||
{
|
||||
if (ImGui::RadioButton("Local", mCurrentGizmoMode == ImGuizmo::LOCAL))
|
||||
mCurrentGizmoMode = ImGuizmo::LOCAL;
|
||||
ImGui::SameLine();
|
||||
if (ImGui::RadioButton("World", mCurrentGizmoMode == ImGuizmo::WORLD))
|
||||
mCurrentGizmoMode = ImGuizmo::WORLD;
|
||||
}
|
||||
static bool useSnap(false);
|
||||
if (ImGui::IsKeyPressed(83))
|
||||
useSnap = !useSnap;
|
||||
ImGui::Checkbox("", &useSnap);
|
||||
ImGui::SameLine();
|
||||
vec_t snap;
|
||||
switch (mCurrentGizmoOperation)
|
||||
{
|
||||
case ImGuizmo::TRANSLATE:
|
||||
snap = config.mSnapTranslation;
|
||||
ImGui::InputFloat3("Snap", &snap.x);
|
||||
break;
|
||||
case ImGuizmo::ROTATE:
|
||||
snap = config.mSnapRotation;
|
||||
ImGui::InputFloat("Angle Snap", &snap.x);
|
||||
break;
|
||||
case ImGuizmo::SCALE:
|
||||
snap = config.mSnapScale;
|
||||
ImGui::InputFloat("Scale Snap", &snap.x);
|
||||
break;
|
||||
}
|
||||
|
||||
ImGuizmo::Manipulate(camera.mView.m16, camera.mProjection.m16, mCurrentGizmoOperation, mCurrentGizmoMode, matrix.m16, NULL, useSnap ? &snap.x : NULL);
|
||||
}
|
||||
#endif
|
||||
#pragma once
|
||||
|
||||
namespace ImGuizmo
|
||||
@ -119,5 +152,5 @@ namespace ImGuizmo
|
||||
WORLD
|
||||
};
|
||||
|
||||
void Manipulate(const float *view, const float *projection, OPERATION operation, MODE mode, float *matrix, float *deltaMatrix = 0);
|
||||
void Manipulate(const float *view, const float *projection, OPERATION operation, MODE mode, float *matrix, float *deltaMatrix = 0, float *snap = 0);
|
||||
};
|
||||
|
2736
3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.inl
vendored
2736
3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/gizmo.inl
vendored
File diff suppressed because it is too large
Load Diff
@ -5682,7 +5682,8 @@ static void* rmtglGetProcAddress(OpenGL* opengl, const char* symbol)
|
||||
|
||||
#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX)
|
||||
|
||||
return NSGLGetProcAddress((const GLubyte*)symbol);
|
||||
extern void* nsglGetProcAddress(const GLubyte* _name);
|
||||
return nsglGetProcAddress((const GLubyte*)symbol);
|
||||
|
||||
#elif defined(RMT_PLATFORM_LINUX)
|
||||
|
||||
|
63
3rdparty/bgfx/3rdparty/renderdoc/renderdoc_app.h
vendored
63
3rdparty/bgfx/3rdparty/renderdoc/renderdoc_app.h
vendored
@ -24,6 +24,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Documentation for the API is available at https://renderdoc.org/docs/in_application_api.html
|
||||
//
|
||||
|
||||
#if !defined(RENDERDOC_NO_STDINT)
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
@ -380,18 +385,22 @@ typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetCapture)(uint32_t idx, char *logfil
|
||||
uint32_t *pathlength, uint64_t *timestamp);
|
||||
|
||||
// returns 1 if the RenderDoc UI is connected to this application, 0 otherwise
|
||||
// This was renamed to IsTargetControlConnected in API 1.1.1, the old typedef is kept here for
|
||||
// backwards compatibility with old code, it is castable either way since it's ABI compatible
|
||||
// as the same function pointer type.
|
||||
typedef uint32_t(RENDERDOC_CC *pRENDERDOC_IsRemoteAccessConnected)();
|
||||
typedef uint32_t(RENDERDOC_CC *pRENDERDOC_IsTargetControlConnected)();
|
||||
|
||||
// This function will launch the Replay UI associated with the RenderDoc library injected
|
||||
// into the running application.
|
||||
//
|
||||
// if connectRemoteAccess is 1, the Replay UI will be launched with a command line parameter
|
||||
// if connectTargetControl is 1, the Replay UI will be launched with a command line parameter
|
||||
// to connect to this application
|
||||
// cmdline is the rest of the command line, as a UTF-8 string. E.g. a captures to open
|
||||
// if cmdline is NULL, the command line will be empty.
|
||||
//
|
||||
// returns the PID of the replay UI if successful, 0 if not successful.
|
||||
typedef uint32_t(RENDERDOC_CC *pRENDERDOC_LaunchReplayUI)(uint32_t connectRemoteAccess,
|
||||
typedef uint32_t(RENDERDOC_CC *pRENDERDOC_LaunchReplayUI)(uint32_t connectTargetControl,
|
||||
const char *cmdline);
|
||||
|
||||
// RenderDoc can return a higher version than requested if it's backwards compatible,
|
||||
@ -474,6 +483,7 @@ typedef enum {
|
||||
eRENDERDOC_API_Version_1_0_1 = 10001, // RENDERDOC_API_1_0_1 = 1 00 01
|
||||
eRENDERDOC_API_Version_1_0_2 = 10002, // RENDERDOC_API_1_0_2 = 1 00 02
|
||||
eRENDERDOC_API_Version_1_1_0 = 10100, // RENDERDOC_API_1_1_0 = 1 01 00
|
||||
eRENDERDOC_API_Version_1_1_1 = 10101, // RENDERDOC_API_1_1_1 = 1 01 01
|
||||
} RENDERDOC_Version;
|
||||
|
||||
// API version changelog:
|
||||
@ -484,6 +494,8 @@ typedef enum {
|
||||
// 1.0.2 - Refactor: Renamed eRENDERDOC_Option_DebugDeviceMode to eRENDERDOC_Option_APIValidation
|
||||
// 1.1.0 - Add feature: TriggerMultiFrameCapture(). Backwards compatible with 1.0.x since the new
|
||||
// function pointer is added to the end of the struct, the original layout is identical
|
||||
// 1.1.1 - Refactor: Renamed remote access to target control (to better disambiguate from remote
|
||||
// replay/remote server concept in replay UI)
|
||||
|
||||
// eRENDERDOC_API_Version_1_1_0
|
||||
typedef struct
|
||||
@ -529,6 +541,53 @@ typedef RENDERDOC_API_1_1_0 RENDERDOC_API_1_0_0;
|
||||
typedef RENDERDOC_API_1_1_0 RENDERDOC_API_1_0_1;
|
||||
typedef RENDERDOC_API_1_1_0 RENDERDOC_API_1_0_2;
|
||||
|
||||
// although this structure is identical to RENDERDOC_API_1_1_0, the member
|
||||
// IsRemoteAccessConnected was renamed to IsTargetControlConnected. So that
|
||||
// old code can still compile with a new header, we must declare a new struct
|
||||
// type. It can be casted back and forth though, so we will still return a
|
||||
// pointer to this type for all previous API versions - the above struct is
|
||||
// purely legacy for compilation compatibility
|
||||
|
||||
// eRENDERDOC_API_Version_1_1_1
|
||||
typedef struct
|
||||
{
|
||||
pRENDERDOC_GetAPIVersion GetAPIVersion;
|
||||
|
||||
pRENDERDOC_SetCaptureOptionU32 SetCaptureOptionU32;
|
||||
pRENDERDOC_SetCaptureOptionF32 SetCaptureOptionF32;
|
||||
|
||||
pRENDERDOC_GetCaptureOptionU32 GetCaptureOptionU32;
|
||||
pRENDERDOC_GetCaptureOptionF32 GetCaptureOptionF32;
|
||||
|
||||
pRENDERDOC_SetFocusToggleKeys SetFocusToggleKeys;
|
||||
pRENDERDOC_SetCaptureKeys SetCaptureKeys;
|
||||
|
||||
pRENDERDOC_GetOverlayBits GetOverlayBits;
|
||||
pRENDERDOC_MaskOverlayBits MaskOverlayBits;
|
||||
|
||||
pRENDERDOC_Shutdown Shutdown;
|
||||
pRENDERDOC_UnloadCrashHandler UnloadCrashHandler;
|
||||
|
||||
pRENDERDOC_SetLogFilePathTemplate SetLogFilePathTemplate;
|
||||
pRENDERDOC_GetLogFilePathTemplate GetLogFilePathTemplate;
|
||||
|
||||
pRENDERDOC_GetNumCaptures GetNumCaptures;
|
||||
pRENDERDOC_GetCapture GetCapture;
|
||||
|
||||
pRENDERDOC_TriggerCapture TriggerCapture;
|
||||
|
||||
pRENDERDOC_IsTargetControlConnected IsTargetControlConnected;
|
||||
pRENDERDOC_LaunchReplayUI LaunchReplayUI;
|
||||
|
||||
pRENDERDOC_SetActiveWindow SetActiveWindow;
|
||||
|
||||
pRENDERDOC_StartFrameCapture StartFrameCapture;
|
||||
pRENDERDOC_IsFrameCapturing IsFrameCapturing;
|
||||
pRENDERDOC_EndFrameCapture EndFrameCapture;
|
||||
|
||||
pRENDERDOC_TriggerMultiFrameCapture TriggerMultiFrameCapture;
|
||||
} RENDERDOC_API_1_1_1;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// RenderDoc API entry point
|
||||
//
|
||||
|
84
3rdparty/bgfx/3rdparty/stb/stb_textedit.h
vendored
84
3rdparty/bgfx/3rdparty/stb/stb_textedit.h
vendored
@ -1,9 +1,10 @@
|
||||
// [ImGui] this is a slightly modified version of stb_truetype.h 1.8
|
||||
// [ImGui] this is a slightly modified version of stb_truetype.h 1.9. Those changes would need to be pushed into nothings/sb
|
||||
// [ImGui] - fixed linestart handler when over last character of multi-line buffer + simplified existing code (#588, #815)
|
||||
// [ImGui] - fixed a state corruption/crash bug in stb_text_redo and stb_textedit_discard_redo (#715)
|
||||
// [ImGui] - fixed a crash bug in stb_textedit_discard_redo (#681)
|
||||
// [ImGui] - fixed some minor warnings
|
||||
// [ImGui] - added STB_TEXTEDIT_MOVEWORDLEFT/STB_TEXTEDIT_MOVEWORDRIGHT custom handler (#473)
|
||||
|
||||
// stb_textedit.h - v1.8 - public domain - Sean Barrett
|
||||
// stb_textedit.h - v1.9 - public domain - Sean Barrett
|
||||
// Development of this library was sponsored by RAD Game Tools
|
||||
//
|
||||
// This C header file implements the guts of a multi-line text-editing
|
||||
@ -36,6 +37,7 @@
|
||||
//
|
||||
// VERSION HISTORY
|
||||
//
|
||||
// 1.9 (2016-08-27) customizable move-by-word
|
||||
// 1.8 (2016-04-02) better keyboard handling when mouse button is down
|
||||
// 1.7 (2015-09-13) change y range handling in case baseline is non-0
|
||||
// 1.6 (2015-04-15) allow STB_TEXTEDIT_memmove
|
||||
@ -424,10 +426,9 @@ static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, float y)
|
||||
// check if it's before the end of the line
|
||||
if (x < r.x1) {
|
||||
// search characters in row for one that straddles 'x'
|
||||
k = i;
|
||||
prev_x = r.x0;
|
||||
for (i=0; i < r.num_chars; ++i) {
|
||||
float w = STB_TEXTEDIT_GETWIDTH(str, k, i);
|
||||
for (k=0; k < r.num_chars; ++k) {
|
||||
float w = STB_TEXTEDIT_GETWIDTH(str, i, k);
|
||||
if (x < prev_x+w) {
|
||||
if (x < prev_x+w/2)
|
||||
return k+i;
|
||||
@ -617,15 +618,16 @@ static void stb_textedit_move_to_last(STB_TEXTEDIT_STRING *str, STB_TexteditStat
|
||||
}
|
||||
|
||||
#ifdef STB_TEXTEDIT_IS_SPACE
|
||||
static int is_word_boundary( STB_TEXTEDIT_STRING *_str, int _idx )
|
||||
static int is_word_boundary( STB_TEXTEDIT_STRING *str, int idx )
|
||||
{
|
||||
return _idx > 0 ? (STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(_str,_idx-1) ) && !STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(_str, _idx) ) ) : 1;
|
||||
return idx > 0 ? (STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str,idx-1) ) && !STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str, idx) ) ) : 1;
|
||||
}
|
||||
|
||||
#ifndef STB_TEXTEDIT_MOVEWORDLEFT
|
||||
static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *_str, int c )
|
||||
static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *str, int c )
|
||||
{
|
||||
while( c >= 0 && !is_word_boundary( _str, c ) )
|
||||
--c; // always move at least one character
|
||||
while( c >= 0 && !is_word_boundary( str, c ) )
|
||||
--c;
|
||||
|
||||
if( c < 0 )
|
||||
@ -637,10 +639,11 @@ static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *_str, int c
|
||||
#endif
|
||||
|
||||
#ifndef STB_TEXTEDIT_MOVEWORDRIGHT
|
||||
static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *_str, int c )
|
||||
static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *str, int c )
|
||||
{
|
||||
const int len = STB_TEXTEDIT_STRINGLEN(_str);
|
||||
while( c < len && !is_word_boundary( _str, c ) )
|
||||
const int len = STB_TEXTEDIT_STRINGLEN(str);
|
||||
++c; // always move at least one character
|
||||
while( c < len && !is_word_boundary( str, c ) )
|
||||
++c;
|
||||
|
||||
if( c > len )
|
||||
@ -777,7 +780,7 @@ retry:
|
||||
if (STB_TEXT_HAS_SELECTION(state))
|
||||
stb_textedit_move_to_first(state);
|
||||
else {
|
||||
state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor-1);
|
||||
state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor);
|
||||
stb_textedit_clamp( str, state );
|
||||
}
|
||||
break;
|
||||
@ -786,7 +789,7 @@ retry:
|
||||
if( !STB_TEXT_HAS_SELECTION( state ) )
|
||||
stb_textedit_prep_selection_at_cursor(state);
|
||||
|
||||
state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor-1);
|
||||
state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor);
|
||||
state->select_end = state->cursor;
|
||||
|
||||
stb_textedit_clamp( str, state );
|
||||
@ -798,7 +801,7 @@ retry:
|
||||
if (STB_TEXT_HAS_SELECTION(state))
|
||||
stb_textedit_move_to_last(str, state);
|
||||
else {
|
||||
state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor+1);
|
||||
state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor);
|
||||
stb_textedit_clamp( str, state );
|
||||
}
|
||||
break;
|
||||
@ -807,7 +810,7 @@ retry:
|
||||
if( !STB_TEXT_HAS_SELECTION( state ) )
|
||||
stb_textedit_prep_selection_at_cursor(state);
|
||||
|
||||
state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor+1);
|
||||
state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor);
|
||||
state->select_end = state->cursor;
|
||||
|
||||
stb_textedit_clamp( str, state );
|
||||
@ -990,58 +993,58 @@ retry:
|
||||
#ifdef STB_TEXTEDIT_K_LINESTART2
|
||||
case STB_TEXTEDIT_K_LINESTART2:
|
||||
#endif
|
||||
case STB_TEXTEDIT_K_LINESTART: {
|
||||
StbFindState find;
|
||||
case STB_TEXTEDIT_K_LINESTART:
|
||||
stb_textedit_clamp(str, state);
|
||||
stb_textedit_move_to_first(state);
|
||||
stb_textedit_find_charpos(&find, str, state->cursor, state->single_line);
|
||||
state->cursor = find.first_char;
|
||||
if (state->single_line)
|
||||
state->cursor = 0;
|
||||
else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE)
|
||||
--state->cursor;
|
||||
state->has_preferred_x = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef STB_TEXTEDIT_K_LINEEND2
|
||||
case STB_TEXTEDIT_K_LINEEND2:
|
||||
#endif
|
||||
case STB_TEXTEDIT_K_LINEEND: {
|
||||
StbFindState find;
|
||||
int n = STB_TEXTEDIT_STRINGLEN(str);
|
||||
stb_textedit_clamp(str, state);
|
||||
stb_textedit_move_to_first(state);
|
||||
stb_textedit_find_charpos(&find, str, state->cursor, state->single_line);
|
||||
|
||||
if (state->single_line)
|
||||
state->cursor = n;
|
||||
else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE)
|
||||
++state->cursor;
|
||||
state->has_preferred_x = 0;
|
||||
state->cursor = find.first_char + find.length;
|
||||
if (find.length > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) == STB_TEXTEDIT_NEWLINE)
|
||||
--state->cursor;
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef STB_TEXTEDIT_K_LINESTART2
|
||||
case STB_TEXTEDIT_K_LINESTART2 | STB_TEXTEDIT_K_SHIFT:
|
||||
#endif
|
||||
case STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT: {
|
||||
StbFindState find;
|
||||
case STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT:
|
||||
stb_textedit_clamp(str, state);
|
||||
stb_textedit_prep_selection_at_cursor(state);
|
||||
stb_textedit_find_charpos(&find, str, state->cursor, state->single_line);
|
||||
state->cursor = state->select_end = find.first_char;
|
||||
if (state->single_line)
|
||||
state->cursor = 0;
|
||||
else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE)
|
||||
--state->cursor;
|
||||
state->select_end = state->cursor;
|
||||
state->has_preferred_x = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef STB_TEXTEDIT_K_LINEEND2
|
||||
case STB_TEXTEDIT_K_LINEEND2 | STB_TEXTEDIT_K_SHIFT:
|
||||
#endif
|
||||
case STB_TEXTEDIT_K_LINEEND | STB_TEXTEDIT_K_SHIFT: {
|
||||
StbFindState find;
|
||||
int n = STB_TEXTEDIT_STRINGLEN(str);
|
||||
stb_textedit_clamp(str, state);
|
||||
stb_textedit_prep_selection_at_cursor(state);
|
||||
stb_textedit_find_charpos(&find, str, state->cursor, state->single_line);
|
||||
state->has_preferred_x = 0;
|
||||
state->cursor = find.first_char + find.length;
|
||||
if (find.length > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) == STB_TEXTEDIT_NEWLINE)
|
||||
--state->cursor;
|
||||
if (state->single_line)
|
||||
state->cursor = n;
|
||||
else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE)
|
||||
++state->cursor;
|
||||
state->select_end = state->cursor;
|
||||
state->has_preferred_x = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1101,8 +1104,8 @@ static void stb_textedit_discard_redo(StbUndoState *state)
|
||||
if (state->undo_rec[i].char_storage >= 0)
|
||||
state->undo_rec[i].char_storage = state->undo_rec[i].char_storage + (short) n; // vsnet05
|
||||
}
|
||||
STB_TEXTEDIT_memmove(state->undo_rec + state->redo_point, state->undo_rec + state->redo_point-1, (size_t) ((size_t)(STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point)*sizeof(state->undo_rec[0])));
|
||||
++state->redo_point;
|
||||
STB_TEXTEDIT_memmove(state->undo_rec + state->redo_point-1, state->undo_rec + state->redo_point, (size_t) ((size_t)(STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point)*sizeof(state->undo_rec[0])));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1260,6 +1263,7 @@ static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
|
||||
if (r.insert_length) {
|
||||
// easy case: need to insert n characters
|
||||
STB_TEXTEDIT_INSERTCHARS(str, r.where, &s->undo_char[r.char_storage], r.insert_length);
|
||||
s->redo_char_point += r.insert_length;
|
||||
}
|
||||
|
||||
state->cursor = r.where + r.insert_length;
|
||||
|
1
3rdparty/bgfx/README.md
vendored
1
3rdparty/bgfx/README.md
vendored
@ -58,6 +58,7 @@ Languages:
|
||||
* [Go language API bindings](https://github.com/james4k/go-bgfx)
|
||||
* [Haskell language API bindings](https://github.com/haskell-game/bgfx)
|
||||
* [Java language API bindings](https://github.com/enleeten/twilight-bgfx)
|
||||
* [Lightweight Java Game Library 3 bindings](https://github.com/LWJGL/lwjgl3)
|
||||
* [Lua language API bindings](https://github.com/excessive/lua-bgfx)
|
||||
* [Nim language API bindings](https://github.com/Halsys/nim-bgfx)
|
||||
* [Python language API bindings](https://github.com/jnadro/pybgfx#pybgf)
|
||||
|
@ -102,9 +102,9 @@ static const uint8_t fs_metaballs_dx11[660] =
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x3e, 0x00, 0x00, 0x01, // .....@.....?>...
|
||||
0x00, 0x00, 0x00, 0x00, // ....
|
||||
};
|
||||
static const uint8_t fs_metaballs_mtl[704] =
|
||||
static const uint8_t fs_metaballs_mtl[712] =
|
||||
{
|
||||
0x46, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0xb1, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH..,.?......us
|
||||
0x46, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0xb9, 0x02, 0x00, 0x00, 0x75, 0x73, // FSH..,.?......us
|
||||
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
|
||||
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
|
||||
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
|
||||
@ -127,25 +127,26 @@ static const uint8_t fs_metaballs_mtl[704] =
|
||||
0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, // er(0)]]).{. xla
|
||||
0x74, 0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, // tMtlShaderOutput
|
||||
0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, // _mtl_o;. float
|
||||
0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // tmpvar_1;. tmp
|
||||
0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x28, 0x6e, 0x6f, 0x72, // var_1 = dot (nor
|
||||
0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, // malize(_mtl_i.v_
|
||||
0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, // normal), float3(
|
||||
0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x29, 0x29, // 0.0, 0.0, -1.0))
|
||||
0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // ;. float4 tmpva
|
||||
0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, // r_2;. tmpvar_2.
|
||||
0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // w = 1.0;. tmpva
|
||||
0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x77, 0x20, 0x28, 0x28, // r_2.xyz = pow ((
|
||||
0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, 0x77, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // (. pow (_mtl_
|
||||
0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, // i.v_color0.xyz,
|
||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x32, 0x2e, 0x32, 0x2c, 0x20, 0x32, 0x2e, 0x32, 0x2c, // float3(2.2, 2.2,
|
||||
0x20, 0x32, 0x2e, 0x32, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, // 2.2)). * tmpv
|
||||
0x61, 0x72, 0x5f, 0x31, 0x29, 0x20, 0x2b, 0x20, 0x70, 0x6f, 0x77, 0x20, 0x28, 0x74, 0x6d, 0x70, // ar_1) + pow (tmp
|
||||
0x76, 0x61, 0x72, 0x5f, 0x31, 0x2c, 0x20, 0x33, 0x30, 0x2e, 0x30, 0x29, 0x29, 0x2c, 0x20, 0x66, // var_1, 30.0)), f
|
||||
0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x30, 0x2e, 0x34, 0x35, 0x34, 0x35, 0x34, 0x35, 0x34, 0x2c, // loat3(0.4545454,
|
||||
0x20, 0x30, 0x2e, 0x34, 0x35, 0x34, 0x35, 0x34, 0x35, 0x34, 0x2c, 0x20, 0x30, 0x2e, 0x34, 0x35, // 0.4545454, 0.45
|
||||
0x34, 0x35, 0x34, 0x35, 0x34, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // 45454));. _mtl_
|
||||
0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, // o.gl_FragColor =
|
||||
0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, // tmpvar_2;. ret
|
||||
0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // urn _mtl_o;.}...
|
||||
0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, // tmpvar_1 = 0;.
|
||||
0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x20, // tmpvar_1 = dot
|
||||
0x28, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // (normalize(_mtl_
|
||||
0x69, 0x2e, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x2c, 0x20, 0x66, 0x6c, 0x6f, // i.v_normal), flo
|
||||
0x61, 0x74, 0x33, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x2d, 0x31, // at3(0.0, 0.0, -1
|
||||
0x2e, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, // .0));. float4 t
|
||||
0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_2 = 0;. t
|
||||
0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, // mpvar_2.w = 1.0;
|
||||
0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, // . tmpvar_2.xyz
|
||||
0x3d, 0x20, 0x70, 0x6f, 0x77, 0x20, 0x28, 0x28, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x6f, // = pow (((. po
|
||||
0x77, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // w (_mtl_i.v_colo
|
||||
0x72, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x32, // r0.xyz, float3(2
|
||||
0x2e, 0x32, 0x2c, 0x20, 0x32, 0x2e, 0x32, 0x2c, 0x20, 0x32, 0x2e, 0x32, 0x29, 0x29, 0x0a, 0x20, // .2, 2.2, 2.2)).
|
||||
0x20, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x20, 0x2b, 0x20, // * tmpvar_1) +
|
||||
0x70, 0x6f, 0x77, 0x20, 0x28, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2c, 0x20, 0x33, // pow (tmpvar_1, 3
|
||||
0x30, 0x2e, 0x30, 0x29, 0x29, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x30, 0x2e, // 0.0)), float3(0.
|
||||
0x34, 0x35, 0x34, 0x35, 0x34, 0x35, 0x34, 0x2c, 0x20, 0x30, 0x2e, 0x34, 0x35, 0x34, 0x35, 0x34, // 4545454, 0.45454
|
||||
0x35, 0x34, 0x2c, 0x20, 0x30, 0x2e, 0x34, 0x35, 0x34, 0x35, 0x34, 0x35, 0x34, 0x29, 0x29, 0x3b, // 54, 0.4545454));
|
||||
0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, // . _mtl_o.gl_Fra
|
||||
0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // gColor = tmpvar_
|
||||
0x32, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // 2;. return _mtl
|
||||
0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // _o;.}...
|
||||
};
|
||||
|
@ -116,9 +116,9 @@ static const uint8_t vs_metaballs_dx11[726] =
|
||||
0x46, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x03, 0x05, 0x00, // F.......>.......
|
||||
0x02, 0x00, 0x01, 0x00, 0x40, 0x08, // ....@.
|
||||
};
|
||||
static const uint8_t vs_metaballs_mtl[855] =
|
||||
static const uint8_t vs_metaballs_mtl[863] =
|
||||
{
|
||||
0x56, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0x48, 0x03, 0x00, 0x00, 0x75, 0x73, // VSH..,.?..H...us
|
||||
0x56, 0x53, 0x48, 0x04, 0x03, 0x2c, 0xf5, 0x3f, 0x00, 0x00, 0x50, 0x03, 0x00, 0x00, 0x75, 0x73, // VSH..,.?..P...us
|
||||
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
|
||||
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
|
||||
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
|
||||
@ -152,24 +152,24 @@ static const uint8_t vs_metaballs_mtl[855] =
|
||||
0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, 0x6c, // )]]).{. xlatMtl
|
||||
0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, 0x74, // ShaderOutput _mt
|
||||
0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, // l_o;. float4 tm
|
||||
0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, // pvar_1;. tmpvar
|
||||
0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // _1.w = 1.0;. tm
|
||||
0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, // pvar_1.xyz = _mt
|
||||
0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, // l_i.a_position;.
|
||||
0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, // _mtl_o.gl_Posi
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, // tion = (_mtl_u.u
|
||||
0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, 0x2a, // _modelViewProj *
|
||||
0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, // tmpvar_1);. fl
|
||||
0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x3b, 0x0a, 0x20, // oat4 tmpvar_2;.
|
||||
0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x30, 0x2e, // tmpvar_2.w = 0.
|
||||
0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, // 0;. tmpvar_2.xy
|
||||
0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x6e, 0x6f, 0x72, // z = _mtl_i.a_nor
|
||||
0x6d, 0x61, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, // mal;. _mtl_o.v_
|
||||
0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, // normal = (_mtl_u
|
||||
0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5b, 0x30, 0x5d, 0x20, 0x2a, 0x20, 0x74, 0x6d, // .u_model[0] * tm
|
||||
0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // pvar_2).xyz;. _
|
||||
0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, // mtl_o.v_color0 =
|
||||
0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // _mtl_i.a_color0
|
||||
0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // ;. return _mtl_
|
||||
0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // o;.}...
|
||||
0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, // pvar_1 = 0;. tm
|
||||
0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, // pvar_1.w = 1.0;.
|
||||
0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, // tmpvar_1.xyz =
|
||||
0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, // _mtl_i.a_positi
|
||||
0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, // on;. _mtl_o.gl_
|
||||
0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, // Position = (_mtl
|
||||
0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, // _u.u_modelViewPr
|
||||
0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, // oj * tmpvar_1);.
|
||||
0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // float4 tmpvar_
|
||||
0x32, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, // 2 = 0;. tmpvar_
|
||||
0x32, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, // 2.w = 0.0;. tmp
|
||||
0x76, 0x61, 0x72, 0x5f, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, // var_2.xyz = _mtl
|
||||
0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // _i.a_normal;. _
|
||||
0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x3d, // mtl_o.v_normal =
|
||||
0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, // (_mtl_u.u_model
|
||||
0x5b, 0x30, 0x5d, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x32, 0x29, 0x2e, // [0] * tmpvar_2).
|
||||
0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, // xyz;. _mtl_o.v_
|
||||
0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, // color0 = _mtl_i.
|
||||
0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, // a_color0;. retu
|
||||
0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // rn _mtl_o;.}...
|
||||
};
|
||||
|
@ -377,7 +377,7 @@ int _main_(int _argc, char** _argv)
|
||||
|
||||
// Enumerate supported backend renderers.
|
||||
bgfx::RendererType::Enum renderers[bgfx::RendererType::Count];
|
||||
uint8_t numRenderers = bgfx::getSupportedRenderers(renderers);
|
||||
uint8_t numRenderers = bgfx::getSupportedRenderers(BX_COUNTOF(renderers), renderers);
|
||||
|
||||
bgfx::init(bgfx::RendererType::Count == args.m_type
|
||||
? renderers[bx::getHPCounter() % numRenderers] /* randomize renderer */
|
||||
|
32
3rdparty/bgfx/examples/08-update/cs_update.sc
vendored
Normal file
32
3rdparty/bgfx/examples/08-update/cs_update.sc
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2014 Stanlo Slasinski. All rights reserved.
|
||||
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
|
||||
*/
|
||||
|
||||
#include "bgfx_compute.sh"
|
||||
|
||||
IMAGE2D_ARRAY_WR(s_texColor,rgba32f,0);
|
||||
uniform vec4 u_time;
|
||||
|
||||
NUM_THREADS(16, 16, 1)
|
||||
void main()
|
||||
{
|
||||
vec3 colors[] = {
|
||||
vec3(1,0,0),
|
||||
vec3(1,1,0),
|
||||
vec3(1,0,1),
|
||||
vec3(0,1,0),
|
||||
vec3(0,1,1),
|
||||
vec3(0,0,1),
|
||||
};
|
||||
|
||||
for (int face=0;face<6;face++)
|
||||
{
|
||||
vec3 color = colors[face]*0.75 + sin( u_time.x*4.0 )*0.25;
|
||||
ivec3 dest = ivec3( gl_GlobalInvocationID.xy, face );
|
||||
imageStore( s_texColor, dest, vec4(color,1) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
93
3rdparty/bgfx/examples/08-update/update.cpp
vendored
93
3rdparty/bgfx/examples/08-update/update.cpp
vendored
@ -162,7 +162,8 @@ public:
|
||||
const bgfx::Caps* caps = bgfx::getCaps();
|
||||
m_texture3DSupported = !!(caps->supported & BGFX_CAPS_TEXTURE_3D);
|
||||
m_blitSupported = !!(caps->supported & BGFX_CAPS_TEXTURE_BLIT);
|
||||
m_numm_textures3d = 0;
|
||||
m_computeSupported = !!(caps->supported & BGFX_CAPS_COMPUTE);
|
||||
m_numTextures3d = 0;
|
||||
|
||||
if (m_texture3DSupported)
|
||||
{
|
||||
@ -186,17 +187,17 @@ public:
|
||||
|
||||
if (0 != (BGFX_CAPS_FORMAT_TEXTURE_2D & caps->formats[bgfx::TextureFormat::R8]) )
|
||||
{
|
||||
m_textures3d[m_numm_textures3d++] = bgfx::createTexture3D(32, 32, 32, false, bgfx::TextureFormat::R8, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem8);
|
||||
m_textures3d[m_numTextures3d++] = bgfx::createTexture3D(32, 32, 32, false, bgfx::TextureFormat::R8, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem8);
|
||||
}
|
||||
|
||||
if (0 != (BGFX_CAPS_FORMAT_TEXTURE_2D & caps->formats[bgfx::TextureFormat::R16F]) )
|
||||
{
|
||||
m_textures3d[m_numm_textures3d++] = bgfx::createTexture3D(32, 32, 32, false, bgfx::TextureFormat::R16F, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem16f);
|
||||
m_textures3d[m_numTextures3d++] = bgfx::createTexture3D(32, 32, 32, false, bgfx::TextureFormat::R16F, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem16f);
|
||||
}
|
||||
|
||||
if (0 != (BGFX_CAPS_FORMAT_TEXTURE_2D & caps->formats[bgfx::TextureFormat::R32F]) )
|
||||
{
|
||||
m_textures3d[m_numm_textures3d++] = bgfx::createTexture3D(32, 32, 32, false, bgfx::TextureFormat::R32F, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem32f);
|
||||
m_textures3d[m_numTextures3d++] = bgfx::createTexture3D(32, 32, 32, false, bgfx::TextureFormat::R32F, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem32f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -215,6 +216,12 @@ public:
|
||||
m_program3d = loadProgram("vs_update", "fs_update_3d");
|
||||
}
|
||||
|
||||
m_programCompute.idx = bgfx::invalidHandle;
|
||||
if (m_computeSupported)
|
||||
{
|
||||
m_programCompute = bgfx::createProgram( loadShader( "cs_update" ), true );
|
||||
}
|
||||
|
||||
// Create texture sampler uniforms.
|
||||
s_texCube = bgfx::createUniform("s_texCube", bgfx::UniformType::Int1);
|
||||
s_texColor = bgfx::createUniform("s_texColor", bgfx::UniformType::Int1);
|
||||
@ -222,6 +229,11 @@ public:
|
||||
// Create time uniform.
|
||||
u_time = bgfx::createUniform("u_time", bgfx::UniformType::Vec4);
|
||||
|
||||
for(uint32_t ii = 0; ii<BX_COUNTOF( m_textureCube ); ++ii)
|
||||
{
|
||||
m_textureCube[ii].idx = bgfx::invalidHandle;
|
||||
}
|
||||
|
||||
m_textureCube[0] = bgfx::createTextureCube(
|
||||
textureside
|
||||
, false
|
||||
@ -241,6 +253,17 @@ public:
|
||||
);
|
||||
}
|
||||
|
||||
if (m_computeSupported)
|
||||
{
|
||||
m_textureCube[2] = bgfx::createTextureCube(
|
||||
textureside
|
||||
, false
|
||||
, 1
|
||||
, bgfx::TextureFormat::RGBA8
|
||||
, BGFX_TEXTURE_COMPUTE_WRITE
|
||||
);
|
||||
}
|
||||
|
||||
m_texture2d = bgfx::createTexture2D(
|
||||
texture2dSize
|
||||
, texture2dSize
|
||||
@ -278,17 +301,21 @@ public:
|
||||
bgfx::destroyTexture(m_textures[ii]);
|
||||
}
|
||||
|
||||
for (uint32_t ii = 0; ii < m_numm_textures3d; ++ii)
|
||||
for (uint32_t ii = 0; ii < m_numTextures3d; ++ii)
|
||||
{
|
||||
bgfx::destroyTexture(m_textures3d[ii]);
|
||||
}
|
||||
|
||||
bgfx::destroyTexture(m_texture2d);
|
||||
bgfx::destroyTexture(m_textureCube[0]);
|
||||
if (m_blitSupported)
|
||||
|
||||
for (uint32_t ii = 0; ii<BX_COUNTOF(m_textureCube); ++ii)
|
||||
{
|
||||
bgfx::destroyTexture(m_textureCube[1]);
|
||||
if (bgfx::isValid(m_textureCube[ii]))
|
||||
{
|
||||
bgfx::destroyTexture(m_textureCube[ii]);
|
||||
}
|
||||
}
|
||||
|
||||
bgfx::destroyIndexBuffer(m_ibh);
|
||||
bgfx::destroyVertexBuffer(m_vbh);
|
||||
if (bgfx::isValid(m_program3d) )
|
||||
@ -296,6 +323,10 @@ public:
|
||||
bgfx::destroyProgram(m_program3d);
|
||||
}
|
||||
bgfx::destroyProgram(m_programCmp);
|
||||
if (bgfx::isValid(m_programCompute) )
|
||||
{
|
||||
bgfx::destroyProgram(m_programCompute);
|
||||
}
|
||||
bgfx::destroyProgram(m_program);
|
||||
bgfx::destroyUniform(u_time);
|
||||
bgfx::destroyUniform(s_texColor);
|
||||
@ -426,26 +457,36 @@ public:
|
||||
// Set view and projection matrix for view 0.
|
||||
bgfx::setViewTransform(0, view, proj);
|
||||
|
||||
for (uint32_t ii = 0; ii < 1 + uint32_t(m_blitSupported); ++ii)
|
||||
// Update texturecube using compute shader
|
||||
if (bgfx::isValid(m_programCompute) )
|
||||
{
|
||||
float mtx[16];
|
||||
bx::mtxSRT(mtx, 1.0f, 1.0f, 1.0f, time, time*0.37f, 0.0f, -1.5f*m_blitSupported + ii*3.0f, 0.0f, 0.0f);
|
||||
bgfx::setImage(0, s_texCube, m_textureCube[2], 0, bgfx::Access::Write);
|
||||
bgfx::dispatch(0, m_programCompute, textureside/16, textureside/16);
|
||||
}
|
||||
|
||||
// Set model matrix for rendering.
|
||||
bgfx::setTransform(mtx);
|
||||
for (uint32_t ii = 0; ii < BX_COUNTOF(m_textureCube); ++ii)
|
||||
{
|
||||
if (bgfx::isValid(m_textureCube[ii]))
|
||||
{
|
||||
float mtx[16];
|
||||
bx::mtxSRT( mtx, 0.7f, 0.7f, 0.7f, time, time*0.37f, 0.0f, -2.0f +ii*2.0f, 0.0f, 0.0f );
|
||||
|
||||
// Set vertex and index buffer.
|
||||
bgfx::setVertexBuffer(m_vbh);
|
||||
bgfx::setIndexBuffer(m_ibh);
|
||||
// Set model matrix for rendering.
|
||||
bgfx::setTransform( mtx );
|
||||
|
||||
// Bind texture.
|
||||
bgfx::setTexture(0, s_texCube, m_textureCube[ii]);
|
||||
// Set vertex and index buffer.
|
||||
bgfx::setVertexBuffer( m_vbh );
|
||||
bgfx::setIndexBuffer( m_ibh );
|
||||
|
||||
// Set render states.
|
||||
bgfx::setState(BGFX_STATE_DEFAULT);
|
||||
// Bind texture.
|
||||
bgfx::setTexture( 0, s_texCube, m_textureCube[ii] );
|
||||
|
||||
// Submit primitive for rendering to view 0.
|
||||
bgfx::submit(0, m_program);
|
||||
// Set render states.
|
||||
bgfx::setState( BGFX_STATE_DEFAULT );
|
||||
|
||||
// Submit primitive for rendering to view 0.
|
||||
bgfx::submit( 0, m_program );
|
||||
}
|
||||
}
|
||||
|
||||
// Set view and projection matrix for view 1.
|
||||
@ -496,7 +537,7 @@ public:
|
||||
bgfx::submit(1, m_programCmp);
|
||||
}
|
||||
|
||||
for (uint32_t ii = 0; ii < m_numm_textures3d; ++ii)
|
||||
for (uint32_t ii = 0; ii < m_numTextures3d; ++ii)
|
||||
{
|
||||
bx::mtxTranslate(mtx, xpos + ii*2.1f, -size+6.5f, 0.0f);
|
||||
|
||||
@ -554,9 +595,10 @@ public:
|
||||
uint32_t m_debug;
|
||||
uint32_t m_reset;
|
||||
|
||||
uint32_t m_numm_textures3d;
|
||||
uint32_t m_numTextures3d;
|
||||
bool m_texture3DSupported;
|
||||
bool m_blitSupported;
|
||||
bool m_computeSupported;
|
||||
|
||||
std::list<PackCube> m_quads;
|
||||
RectPackCubeT<256> m_cube;
|
||||
@ -573,11 +615,12 @@ public:
|
||||
bgfx::TextureHandle m_textures[9];
|
||||
bgfx::TextureHandle m_textures3d[3];
|
||||
bgfx::TextureHandle m_texture2d;
|
||||
bgfx::TextureHandle m_textureCube[2];
|
||||
bgfx::TextureHandle m_textureCube[3];
|
||||
bgfx::IndexBufferHandle m_ibh;
|
||||
bgfx::VertexBufferHandle m_vbh;
|
||||
bgfx::ProgramHandle m_program3d;
|
||||
bgfx::ProgramHandle m_programCmp;
|
||||
bgfx::ProgramHandle m_programCompute;
|
||||
bgfx::ProgramHandle m_program;
|
||||
bgfx::UniformHandle u_time;
|
||||
bgfx::UniformHandle s_texColor;
|
||||
|
@ -385,6 +385,7 @@ int _main_(int _argc, char** _argv)
|
||||
bgfx::destroyUniform(u_shadowMap);
|
||||
bgfx::destroyUniform(u_lightPos);
|
||||
bgfx::destroyUniform(u_lightMtx);
|
||||
bgfx::destroyUniform(u_depthScaleOffset);
|
||||
|
||||
// Shutdown bgfx.
|
||||
bgfx::shutdown();
|
||||
|
@ -97,7 +97,7 @@ class ExampleDrawStress : public entry::AppI
|
||||
bgfx::reset(m_width, m_height, m_reset);
|
||||
|
||||
const bgfx::Caps* caps = bgfx::getCaps();
|
||||
m_maxDim = (int32_t)powf(float(caps->maxDrawCalls), 1.0f/3.0f);
|
||||
m_maxDim = (int32_t)bx::fpow(float(caps->limits.maxDrawCalls), 1.0f/3.0f);
|
||||
|
||||
// Enable debug text.
|
||||
bgfx::setDebug(m_debug);
|
||||
|
@ -81,9 +81,9 @@ static const uint8_t vs_drawstress_dx11[510] =
|
||||
0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x00, 0x00, // ... ......F.....
|
||||
0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x02, 0x05, 0x00, 0x01, 0x00, 0x40, 0x00, // ..>.........@.
|
||||
};
|
||||
static const uint8_t vs_drawstress_mtl[647] =
|
||||
static const uint8_t vs_drawstress_mtl[651] =
|
||||
{
|
||||
0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x75, 0x73, // VSH....I..x...us
|
||||
0x56, 0x53, 0x48, 0x04, 0xa4, 0x8b, 0xef, 0x49, 0x00, 0x00, 0x7c, 0x02, 0x00, 0x00, 0x75, 0x73, // VSH....I..|...us
|
||||
0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x65, // ing namespace me
|
||||
0x74, 0x61, 0x6c, 0x3b, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x78, 0x6c, 0x61, 0x74, // tal;.struct xlat
|
||||
0x4d, 0x74, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x7b, // MtlShaderInput {
|
||||
@ -112,16 +112,16 @@ static const uint8_t vs_drawstress_mtl[647] =
|
||||
0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x78, 0x6c, 0x61, 0x74, 0x4d, 0x74, // 0)]]).{. xlatMt
|
||||
0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x5f, 0x6d, // lShaderOutput _m
|
||||
0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, // tl_o;. float4 t
|
||||
0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, // mpvar_1;. tmpva
|
||||
0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // r_1.w = 1.0;. t
|
||||
0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x3d, 0x20, 0x5f, 0x6d, // mpvar_1.xyz = _m
|
||||
0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b, // tl_i.a_position;
|
||||
0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, // . _mtl_o.gl_Pos
|
||||
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x75, 0x2e, // ition = (_mtl_u.
|
||||
0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x6a, 0x20, // u_modelViewProj
|
||||
0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x5f, // * tmpvar_1);. _
|
||||
0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, 0x20, 0x3d, // mtl_o.v_color0 =
|
||||
0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x30, // _mtl_i.a_color0
|
||||
0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, // ;. return _mtl_
|
||||
0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // o;.}...
|
||||
0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x74, // mpvar_1 = 0;. t
|
||||
0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, // mpvar_1.w = 1.0;
|
||||
0x0a, 0x20, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x20, // . tmpvar_1.xyz
|
||||
0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, // = _mtl_i.a_posit
|
||||
0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x67, 0x6c, // ion;. _mtl_o.gl
|
||||
0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x6d, 0x74, // _Position = (_mt
|
||||
0x6c, 0x5f, 0x75, 0x2e, 0x75, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x50, // l_u.u_modelViewP
|
||||
0x72, 0x6f, 0x6a, 0x20, 0x2a, 0x20, 0x74, 0x6d, 0x70, 0x76, 0x61, 0x72, 0x5f, 0x31, 0x29, 0x3b, // roj * tmpvar_1);
|
||||
0x0a, 0x20, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x2e, 0x76, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, // . _mtl_o.v_colo
|
||||
0x72, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x6d, 0x74, 0x6c, 0x5f, 0x69, 0x2e, 0x61, 0x5f, 0x63, 0x6f, // r0 = _mtl_i.a_co
|
||||
0x6c, 0x6f, 0x72, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, // lor0;. return _
|
||||
0x6d, 0x74, 0x6c, 0x5f, 0x6f, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, // mtl_o;.}...
|
||||
};
|
||||
|
2
3rdparty/bgfx/examples/20-nanovg/nanovg.cpp
vendored
2
3rdparty/bgfx/examples/20-nanovg/nanovg.cpp
vendored
@ -570,7 +570,7 @@ void drawThumbnails(struct NVGcontext* vg, float x, float y, float w, float h, c
|
||||
ix = -(iw-thumb)*0.5f;
|
||||
iy = 0;
|
||||
}
|
||||
imgPaint = nvgImagePattern(vg, tx+ix, ty+iy, iw,ih, 0.0f/180.0f*NVG_PI, images[i], 0);
|
||||
imgPaint = nvgImagePattern(vg, tx+ix, ty+iy, iw,ih, 0.0f/180.0f*NVG_PI, images[i], 1.0f);
|
||||
nvgBeginPath(vg);
|
||||
nvgRoundedRect(vg, tx,ty, thumb,thumb, 5);
|
||||
nvgFillPaint(vg, imgPaint);
|
||||
|
@ -393,7 +393,7 @@ class ExampleDeferred : public entry::AppI
|
||||
bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: MRT rendering and deferred shading.");
|
||||
bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs);
|
||||
|
||||
if (2 > m_caps->maxFBAttachments)
|
||||
if (2 > m_caps->limits.maxFBAttachments)
|
||||
{
|
||||
// When multiple render targets (MRT) is not supported by GPU,
|
||||
// implement alternative code path that doesn't use MRT.
|
||||
|
26
3rdparty/bgfx/examples/30-picking/picking.cpp
vendored
26
3rdparty/bgfx/examples/30-picking/picking.cpp
vendored
@ -214,30 +214,32 @@ class ExamplePicking : public entry::AppI
|
||||
bgfx::setViewTransform(RENDER_PASS_SHADING, view, proj);
|
||||
|
||||
// Set up picking pass
|
||||
float pickView[16];
|
||||
float pickAt[4]; // Need to inversly project the mouse pointer to determin what we're looking at
|
||||
float pickEye[3] = { eye[0], eye[1], eye[2] }; // Eye is same location as before
|
||||
float viewProj[16];
|
||||
bx::mtxMul(viewProj, view, proj);
|
||||
|
||||
float invViewProj[16];
|
||||
bx::mtxInverse(invViewProj, viewProj);
|
||||
|
||||
// Mouse coord in NDC
|
||||
float mouseXNDC = (m_mouseState.m_mx / (float)m_width) * 2.0f - 1.0f;
|
||||
float mouseXNDC = ( m_mouseState.m_mx / (float)m_width ) * 2.0f - 1.0f;
|
||||
float mouseYNDC = ((m_height - m_mouseState.m_my) / (float)m_height) * 2.0f - 1.0f;
|
||||
float mousePosNDC[4] = { mouseXNDC, mouseYNDC, 0, 1.0f };
|
||||
// Unproject and perspective divide
|
||||
bx::vec4MulMtx(pickAt, mousePosNDC, invViewProj);
|
||||
pickAt[3] = 1.0f / pickAt[3];
|
||||
pickAt[0] *= pickAt[3];
|
||||
pickAt[1] *= pickAt[3];
|
||||
pickAt[2] *= pickAt[3];
|
||||
|
||||
float pickEye[3];
|
||||
float mousePosNDC[3] = { mouseXNDC, mouseYNDC, 0.0f };
|
||||
bx::vec3MulMtxH(pickEye, mousePosNDC, invViewProj);
|
||||
|
||||
float pickAt[3];
|
||||
float mousePosNDCEnd[3] = { mouseXNDC, mouseYNDC, 1.0f };
|
||||
bx::vec3MulMtxH(pickAt, mousePosNDCEnd, invViewProj);
|
||||
|
||||
// Look at our unprojected point
|
||||
float pickView[16];
|
||||
bx::mtxLookAt(pickView, pickEye, pickAt);
|
||||
float pickProj[16];
|
||||
|
||||
// Tight FOV is best for picking
|
||||
float pickProj[16];
|
||||
bx::mtxProj(pickProj, m_fov, 1, 0.1f, 100.0f);
|
||||
|
||||
// View rect and transforms for picking pass
|
||||
bgfx::setViewRect(RENDER_PASS_ID, 0, 0, ID_DIM, ID_DIM);
|
||||
bgfx::setViewTransform(RENDER_PASS_ID, pickView, pickProj);
|
||||
|
@ -115,7 +115,11 @@ void main()
|
||||
vec2 texelSize = vec2_splat(u_shadowDimsInv.x);
|
||||
|
||||
shadowCoord.xy /= shadowCoord.w;
|
||||
shadowCoord.xy = shadowCoord.xy*0.5+0.5;
|
||||
shadowCoord.xy = shadowCoord.xy*0.5 + 0.5;
|
||||
|
||||
#if BGFX_SHADER_LANGUAGE_GLSL
|
||||
shadowCoord.z = shadowCoord.z*0.5 + 0.5;
|
||||
#endif // BGFX_SHADER_LANGUAGE_GLSL
|
||||
|
||||
float visibility = PCF(s_shadowMap, shadowCoord, shadowMapBias, texelSize);
|
||||
|
||||
|
30
3rdparty/bgfx/examples/common/bgfx_utils.cpp
vendored
30
3rdparty/bgfx/examples/common/bgfx_utils.cpp
vendored
@ -108,28 +108,22 @@ static bgfx::ShaderHandle loadShader(bx::FileReaderI* _reader, const char* _name
|
||||
{
|
||||
char filePath[512];
|
||||
|
||||
const char* shaderPath = "shaders/dx9/";
|
||||
const char* shaderPath = "???";
|
||||
|
||||
switch (bgfx::getRendererType() )
|
||||
{
|
||||
case bgfx::RendererType::Noop:
|
||||
case bgfx::RendererType::Direct3D9: shaderPath = "shaders/dx9/"; break;
|
||||
case bgfx::RendererType::Direct3D11:
|
||||
case bgfx::RendererType::Direct3D12:
|
||||
shaderPath = "shaders/dx11/";
|
||||
break;
|
||||
case bgfx::RendererType::Direct3D12: shaderPath = "shaders/dx11/"; break;
|
||||
case bgfx::RendererType::Gnm: shaderPath = "shaders/pssl/"; break;
|
||||
case bgfx::RendererType::Metal: shaderPath = "shaders/metal/"; break;
|
||||
case bgfx::RendererType::OpenGL: shaderPath = "shaders/glsl/"; break;
|
||||
case bgfx::RendererType::OpenGLES: shaderPath = "shaders/essl/"; break;
|
||||
case bgfx::RendererType::Vulkan: shaderPath = "shaders/spirv/"; break;
|
||||
|
||||
case bgfx::RendererType::OpenGL:
|
||||
shaderPath = "shaders/glsl/";
|
||||
break;
|
||||
|
||||
case bgfx::RendererType::Metal:
|
||||
shaderPath = "shaders/metal/";
|
||||
break;
|
||||
|
||||
case bgfx::RendererType::OpenGLES:
|
||||
shaderPath = "shaders/gles/";
|
||||
break;
|
||||
|
||||
default:
|
||||
case bgfx::RendererType::Count:
|
||||
BX_CHECK(false, "You should not be here!");
|
||||
break;
|
||||
}
|
||||
|
||||
@ -760,7 +754,7 @@ Args::Args(int _argc, char** _argv)
|
||||
}
|
||||
else if (cmdLine.hasArg("noop") )
|
||||
{
|
||||
m_type = bgfx::RendererType::Null;
|
||||
m_type = bgfx::RendererType::Noop;
|
||||
}
|
||||
else if (BX_ENABLED(BX_PLATFORM_WINDOWS) )
|
||||
{
|
||||
|
762
3rdparty/bgfx/examples/common/entry/entry_glfw.cpp
vendored
762
3rdparty/bgfx/examples/common/entry/entry_glfw.cpp
vendored
@ -7,6 +7,13 @@
|
||||
|
||||
#if ENTRY_CONFIG_USE_GLFW
|
||||
|
||||
#define GLFW_INCLUDE_NONE
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
#if GLFW_VERSION_MINOR < 2
|
||||
# error "GLFW 3.2 or later is required"
|
||||
#endif // GLFW_VERSION_MINOR < 2
|
||||
|
||||
#if BX_PLATFORM_LINUX || BX_PLATFORM_BSD
|
||||
# define GLFW_EXPOSE_NATIVE_X11
|
||||
# define GLFW_EXPOSE_NATIVE_GLX
|
||||
@ -17,16 +24,15 @@
|
||||
# define GLFW_EXPOSE_NATIVE_WIN32
|
||||
# define GLFW_EXPOSE_NATIVE_WGL
|
||||
#endif //
|
||||
|
||||
#define GLFW_DLL
|
||||
#include <GLFW/glfw3.h>
|
||||
#include <GLFW/glfw3native.h>
|
||||
|
||||
#include <bgfx/bgfxplatform.h>
|
||||
#include "dbg.h"
|
||||
|
||||
// This is just trivial implementation of GLFW3 integration.
|
||||
// It's here just for testing purpose.
|
||||
#include <bx/thread.h>
|
||||
#include <bx/handlealloc.h>
|
||||
#include <tinystl/string.h>
|
||||
|
||||
#include "dbg.h"
|
||||
|
||||
namespace entry
|
||||
{
|
||||
@ -34,85 +40,700 @@ namespace entry
|
||||
{
|
||||
bgfx::PlatformData pd;
|
||||
# if BX_PLATFORM_LINUX || BX_PLATFORM_BSD
|
||||
pd.ndt = glfwGetX11Display();
|
||||
pd.nwh = (void*)(uintptr_t)glfwGetGLXWindow(_window);
|
||||
pd.context = glfwGetGLXContext(_window);
|
||||
pd.ndt = glfwGetX11Display();
|
||||
pd.nwh = (void*)(uintptr_t)glfwGetX11Window(_window);
|
||||
# elif BX_PLATFORM_OSX
|
||||
pd.ndt = NULL;
|
||||
pd.nwh = glfwGetCocoaWindow(_window);
|
||||
pd.context = glfwGetNSGLContext(_window);
|
||||
pd.ndt = NULL;
|
||||
pd.nwh = glfwGetCocoaWindow(_window);
|
||||
# elif BX_PLATFORM_WINDOWS
|
||||
pd.ndt = NULL;
|
||||
pd.nwh = glfwGetWin32Window(_window);
|
||||
pd.context = NULL;
|
||||
pd.ndt = NULL;
|
||||
pd.nwh = glfwGetWin32Window(_window);
|
||||
pd.context = NULL;
|
||||
# endif // BX_PLATFORM_WINDOWS
|
||||
pd.backBuffer = NULL;
|
||||
pd.backBuffer = NULL;
|
||||
pd.backBufferDS = NULL;
|
||||
bgfx::setPlatformData(pd);
|
||||
}
|
||||
|
||||
static uint8_t translateKeyModifiers(int _glfw)
|
||||
{
|
||||
uint8_t modifiers = 0;
|
||||
|
||||
if (_glfw & GLFW_MOD_ALT)
|
||||
{
|
||||
modifiers |= Modifier::LeftAlt;
|
||||
}
|
||||
|
||||
if (_glfw & GLFW_MOD_CONTROL)
|
||||
{
|
||||
modifiers |= Modifier::LeftCtrl;
|
||||
}
|
||||
|
||||
if (_glfw & GLFW_MOD_SUPER)
|
||||
{
|
||||
modifiers |= Modifier::LeftMeta;
|
||||
}
|
||||
|
||||
if (_glfw & GLFW_MOD_SHIFT)
|
||||
{
|
||||
modifiers |= Modifier::LeftShift;
|
||||
}
|
||||
|
||||
return modifiers;
|
||||
}
|
||||
|
||||
static Key::Enum s_translateKey[GLFW_KEY_LAST + 1];
|
||||
|
||||
static Key::Enum translateKey(int _key)
|
||||
{
|
||||
return s_translateKey[_key];
|
||||
}
|
||||
|
||||
static MouseButton::Enum translateMouseButton(int _button)
|
||||
{
|
||||
if (_button == GLFW_MOUSE_BUTTON_LEFT)
|
||||
{
|
||||
return MouseButton::Left;
|
||||
}
|
||||
else if (_button == GLFW_MOUSE_BUTTON_RIGHT)
|
||||
{
|
||||
return MouseButton::Right;
|
||||
}
|
||||
|
||||
return MouseButton::Middle;
|
||||
}
|
||||
|
||||
static GamepadAxis::Enum translateGamepadAxis(int _axis)
|
||||
{
|
||||
// HACK: Map XInput 360 controller until GLFW gamepad API
|
||||
|
||||
static GamepadAxis::Enum axes[] =
|
||||
{
|
||||
GamepadAxis::LeftX,
|
||||
GamepadAxis::LeftY,
|
||||
GamepadAxis::RightX,
|
||||
GamepadAxis::RightY,
|
||||
GamepadAxis::LeftZ,
|
||||
GamepadAxis::RightZ,
|
||||
};
|
||||
return axes[_axis];
|
||||
}
|
||||
|
||||
static Key::Enum translateGamepadButton(int _button)
|
||||
{
|
||||
// HACK: Map XInput 360 controller until GLFW gamepad API
|
||||
|
||||
static Key::Enum buttons[] =
|
||||
{
|
||||
Key::GamepadA,
|
||||
Key::GamepadB,
|
||||
Key::GamepadX,
|
||||
Key::GamepadY,
|
||||
Key::GamepadShoulderL,
|
||||
Key::GamepadShoulderR,
|
||||
Key::GamepadBack,
|
||||
Key::GamepadStart,
|
||||
Key::GamepadThumbL,
|
||||
Key::GamepadThumbR,
|
||||
Key::GamepadUp,
|
||||
Key::GamepadRight,
|
||||
Key::GamepadDown,
|
||||
Key::GamepadLeft,
|
||||
Key::GamepadGuide,
|
||||
};
|
||||
return buttons[_button];
|
||||
}
|
||||
|
||||
struct GamepadGLFW
|
||||
{
|
||||
GamepadGLFW()
|
||||
: m_connected(false)
|
||||
{
|
||||
memset(m_axes, 0, sizeof(m_axes));
|
||||
memset(m_buttons, 0, sizeof(m_buttons));
|
||||
}
|
||||
|
||||
void update(EventQueue& _eventQueue)
|
||||
{
|
||||
int numButtons, numAxes;
|
||||
const unsigned char* buttons = glfwGetJoystickButtons(m_handle.idx, &numButtons);
|
||||
const float* axes = glfwGetJoystickAxes(m_handle.idx, &numAxes);
|
||||
|
||||
if (NULL == buttons || NULL == axes)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (numAxes > GamepadAxis::Count)
|
||||
{
|
||||
numAxes = GamepadAxis::Count;
|
||||
}
|
||||
|
||||
if (numButtons > Key::Count - Key::GamepadA)
|
||||
{
|
||||
numButtons = Key::Count - Key::GamepadA;
|
||||
}
|
||||
|
||||
WindowHandle defaultWindow = { 0 };
|
||||
|
||||
for (int ii = 0; ii < numAxes; ++ii)
|
||||
{
|
||||
GamepadAxis::Enum axis = translateGamepadAxis(ii);
|
||||
int32_t value = (int32_t) (axes[ii] * 32768.f);
|
||||
if (GamepadAxis::LeftY == axis || GamepadAxis::RightY == axis)
|
||||
{
|
||||
value = -value;
|
||||
}
|
||||
|
||||
if (m_axes[ii] != value)
|
||||
{
|
||||
m_axes[ii] = value;
|
||||
_eventQueue.postAxisEvent(defaultWindow
|
||||
, m_handle
|
||||
, axis
|
||||
, value);
|
||||
}
|
||||
}
|
||||
|
||||
for (int ii = 0; ii < numButtons; ++ii)
|
||||
{
|
||||
Key::Enum key = translateGamepadButton(ii);
|
||||
if (m_buttons[ii] != buttons[ii])
|
||||
{
|
||||
m_buttons[ii] = buttons[ii];
|
||||
_eventQueue.postKeyEvent(defaultWindow
|
||||
, key
|
||||
, 0
|
||||
, buttons[ii] != 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool m_connected;
|
||||
GamepadHandle m_handle;
|
||||
int32_t m_axes[GamepadAxis::Count];
|
||||
uint8_t m_buttons[Key::Count - Key::GamepadA];
|
||||
};
|
||||
|
||||
struct MainThreadEntry
|
||||
{
|
||||
int m_argc;
|
||||
char** m_argv;
|
||||
|
||||
static int32_t threadFunc(void* _userData);
|
||||
};
|
||||
|
||||
static void* glfwNativeWindowHandle(GLFWwindow* _window)
|
||||
{
|
||||
# if BX_PLATFORM_LINUX || BX_PLATFORM_BSD
|
||||
return (void*)(uintptr_t)glfwGetX11Window(_window);
|
||||
# elif BX_PLATFORM_OSX
|
||||
return glfwGetCocoaWindow(_window);
|
||||
# elif BX_PLATFORM_WINDOWS
|
||||
return glfwGetWin32Window(_window);
|
||||
# endif // BX_PLATFORM_
|
||||
}
|
||||
|
||||
enum MsgType
|
||||
{
|
||||
GLFW_WINDOW_CREATE,
|
||||
GLFW_WINDOW_DESTROY,
|
||||
GLFW_WINDOW_SET_TITLE,
|
||||
GLFW_WINDOW_SET_POS,
|
||||
GLFW_WINDOW_SET_SIZE,
|
||||
GLFW_WINDOW_TOGGLE_FRAME,
|
||||
GLFW_WINDOW_TOGGLE_FULL_SCREEN,
|
||||
GLFW_WINDOW_MOUSE_LOCK,
|
||||
};
|
||||
|
||||
struct Msg
|
||||
{
|
||||
Msg(MsgType _type)
|
||||
: m_type(_type)
|
||||
, m_x(0)
|
||||
, m_y(0)
|
||||
, m_width(0)
|
||||
, m_height(0)
|
||||
, m_value(false)
|
||||
{
|
||||
}
|
||||
|
||||
MsgType m_type;
|
||||
int32_t m_x;
|
||||
int32_t m_y;
|
||||
uint32_t m_width;
|
||||
uint32_t m_height;
|
||||
uint32_t m_flags;
|
||||
bool m_value;
|
||||
tinystl::string m_title;
|
||||
WindowHandle m_handle;
|
||||
};
|
||||
|
||||
static void errorCb(int _error, const char* _description)
|
||||
{
|
||||
DBG("GLFW error %d: %s", _error, _description);
|
||||
}
|
||||
|
||||
static void joystickCb(int _jid, int _action);
|
||||
|
||||
// Based on cutef8 by Jeff Bezanson (Public Domain)
|
||||
static uint8_t encodeUTF8(uint8_t _chars[4], unsigned int _scancode)
|
||||
{
|
||||
uint8_t length = 0;
|
||||
|
||||
if (_scancode < 0x80)
|
||||
{
|
||||
_chars[length++] = (char) _scancode;
|
||||
}
|
||||
else if (_scancode < 0x800)
|
||||
{
|
||||
_chars[length++] = (_scancode >> 6) | 0xc0;
|
||||
_chars[length++] = (_scancode & 0x3f) | 0x80;
|
||||
}
|
||||
else if (_scancode < 0x10000)
|
||||
{
|
||||
_chars[length++] = (_scancode >> 12) | 0xe0;
|
||||
_chars[length++] = ((_scancode >> 6) & 0x3f) | 0x80;
|
||||
_chars[length++] = (_scancode & 0x3f) | 0x80;
|
||||
}
|
||||
else if (_scancode < 0x110000)
|
||||
{
|
||||
_chars[length++] = (_scancode >> 18) | 0xf0;
|
||||
_chars[length++] = ((_scancode >> 12) & 0x3f) | 0x80;
|
||||
_chars[length++] = ((_scancode >> 6) & 0x3f) | 0x80;
|
||||
_chars[length++] = (_scancode & 0x3f) | 0x80;
|
||||
}
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
struct Context
|
||||
{
|
||||
Context()
|
||||
: m_scrollPos(0.0)
|
||||
{
|
||||
memset(s_translateKey, 0, sizeof(s_translateKey));
|
||||
s_translateKey[GLFW_KEY_ESCAPE] = Key::Esc;
|
||||
s_translateKey[GLFW_KEY_ENTER] = Key::Return;
|
||||
s_translateKey[GLFW_KEY_TAB] = Key::Tab;
|
||||
s_translateKey[GLFW_KEY_BACKSPACE] = Key::Backspace;
|
||||
s_translateKey[GLFW_KEY_SPACE] = Key::Space;
|
||||
s_translateKey[GLFW_KEY_UP] = Key::Up;
|
||||
s_translateKey[GLFW_KEY_DOWN] = Key::Down;
|
||||
s_translateKey[GLFW_KEY_LEFT] = Key::Left;
|
||||
s_translateKey[GLFW_KEY_RIGHT] = Key::Right;
|
||||
s_translateKey[GLFW_KEY_PAGE_UP] = Key::PageUp;
|
||||
s_translateKey[GLFW_KEY_PAGE_DOWN] = Key::PageDown;
|
||||
s_translateKey[GLFW_KEY_HOME] = Key::Home;
|
||||
s_translateKey[GLFW_KEY_END] = Key::End;
|
||||
s_translateKey[GLFW_KEY_PRINT_SCREEN] = Key::Print;
|
||||
s_translateKey[GLFW_KEY_KP_ADD] = Key::Plus;
|
||||
s_translateKey[GLFW_KEY_KP_SUBTRACT] = Key::Minus;
|
||||
s_translateKey[GLFW_KEY_F1] = Key::F1;
|
||||
s_translateKey[GLFW_KEY_F2] = Key::F2;
|
||||
s_translateKey[GLFW_KEY_F3] = Key::F3;
|
||||
s_translateKey[GLFW_KEY_F4] = Key::F4;
|
||||
s_translateKey[GLFW_KEY_F5] = Key::F5;
|
||||
s_translateKey[GLFW_KEY_F6] = Key::F6;
|
||||
s_translateKey[GLFW_KEY_F7] = Key::F7;
|
||||
s_translateKey[GLFW_KEY_F8] = Key::F8;
|
||||
s_translateKey[GLFW_KEY_F9] = Key::F9;
|
||||
s_translateKey[GLFW_KEY_F10] = Key::F10;
|
||||
s_translateKey[GLFW_KEY_F11] = Key::F11;
|
||||
s_translateKey[GLFW_KEY_F12] = Key::F12;
|
||||
s_translateKey[GLFW_KEY_KP_0] = Key::NumPad0;
|
||||
s_translateKey[GLFW_KEY_KP_1] = Key::NumPad1;
|
||||
s_translateKey[GLFW_KEY_KP_2] = Key::NumPad2;
|
||||
s_translateKey[GLFW_KEY_KP_3] = Key::NumPad3;
|
||||
s_translateKey[GLFW_KEY_KP_4] = Key::NumPad4;
|
||||
s_translateKey[GLFW_KEY_KP_5] = Key::NumPad5;
|
||||
s_translateKey[GLFW_KEY_KP_6] = Key::NumPad6;
|
||||
s_translateKey[GLFW_KEY_KP_7] = Key::NumPad7;
|
||||
s_translateKey[GLFW_KEY_KP_8] = Key::NumPad8;
|
||||
s_translateKey[GLFW_KEY_KP_9] = Key::NumPad9;
|
||||
s_translateKey[GLFW_KEY_0] = Key::Key0;
|
||||
s_translateKey[GLFW_KEY_1] = Key::Key1;
|
||||
s_translateKey[GLFW_KEY_2] = Key::Key2;
|
||||
s_translateKey[GLFW_KEY_3] = Key::Key3;
|
||||
s_translateKey[GLFW_KEY_4] = Key::Key4;
|
||||
s_translateKey[GLFW_KEY_5] = Key::Key5;
|
||||
s_translateKey[GLFW_KEY_6] = Key::Key6;
|
||||
s_translateKey[GLFW_KEY_7] = Key::Key7;
|
||||
s_translateKey[GLFW_KEY_8] = Key::Key8;
|
||||
s_translateKey[GLFW_KEY_9] = Key::Key9;
|
||||
s_translateKey[GLFW_KEY_A] = Key::KeyA;
|
||||
s_translateKey[GLFW_KEY_B] = Key::KeyB;
|
||||
s_translateKey[GLFW_KEY_C] = Key::KeyC;
|
||||
s_translateKey[GLFW_KEY_D] = Key::KeyD;
|
||||
s_translateKey[GLFW_KEY_E] = Key::KeyE;
|
||||
s_translateKey[GLFW_KEY_F] = Key::KeyF;
|
||||
s_translateKey[GLFW_KEY_G] = Key::KeyG;
|
||||
s_translateKey[GLFW_KEY_H] = Key::KeyH;
|
||||
s_translateKey[GLFW_KEY_I] = Key::KeyI;
|
||||
s_translateKey[GLFW_KEY_J] = Key::KeyJ;
|
||||
s_translateKey[GLFW_KEY_K] = Key::KeyK;
|
||||
s_translateKey[GLFW_KEY_L] = Key::KeyL;
|
||||
s_translateKey[GLFW_KEY_M] = Key::KeyM;
|
||||
s_translateKey[GLFW_KEY_N] = Key::KeyN;
|
||||
s_translateKey[GLFW_KEY_O] = Key::KeyO;
|
||||
s_translateKey[GLFW_KEY_P] = Key::KeyP;
|
||||
s_translateKey[GLFW_KEY_Q] = Key::KeyQ;
|
||||
s_translateKey[GLFW_KEY_R] = Key::KeyR;
|
||||
s_translateKey[GLFW_KEY_S] = Key::KeyS;
|
||||
s_translateKey[GLFW_KEY_T] = Key::KeyT;
|
||||
s_translateKey[GLFW_KEY_U] = Key::KeyU;
|
||||
s_translateKey[GLFW_KEY_V] = Key::KeyV;
|
||||
s_translateKey[GLFW_KEY_W] = Key::KeyW;
|
||||
s_translateKey[GLFW_KEY_X] = Key::KeyX;
|
||||
s_translateKey[GLFW_KEY_Y] = Key::KeyY;
|
||||
s_translateKey[GLFW_KEY_Z] = Key::KeyZ;
|
||||
}
|
||||
|
||||
int run(int _argc, char** _argv)
|
||||
{
|
||||
m_mte.m_argc = _argc;
|
||||
m_mte.m_argv = _argv;
|
||||
|
||||
glfwSetErrorCallback(errorCb);
|
||||
glfwSetJoystickCallback(joystickCb);
|
||||
|
||||
glfwInit();
|
||||
m_window = glfwCreateWindow(1280, 720, "bgfx", NULL, NULL);
|
||||
glfwMakeContextCurrent(m_window);
|
||||
if (!glfwInit() )
|
||||
{
|
||||
DBG("glfwInit failed!");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
glfwSetKeyCallback(m_window, keyCb);
|
||||
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
|
||||
|
||||
glfwSetWindow(m_window);
|
||||
int result = main(_argc, _argv);
|
||||
WindowHandle handle = { m_windowAlloc.alloc() };
|
||||
m_windows[0] = glfwCreateWindow(ENTRY_DEFAULT_WIDTH
|
||||
, ENTRY_DEFAULT_HEIGHT
|
||||
, "bgfx"
|
||||
, NULL
|
||||
, NULL
|
||||
);
|
||||
|
||||
glfwDestroyWindow(m_window);
|
||||
if (!m_windows[0])
|
||||
{
|
||||
DBG("glfwCreateWindow failed!");
|
||||
glfwTerminate();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
glfwSetKeyCallback(m_windows[0], keyCb);
|
||||
glfwSetCharCallback(m_windows[0], charCb);
|
||||
glfwSetScrollCallback(m_windows[0], scrollCb);
|
||||
glfwSetCursorPosCallback(m_windows[0], cursorPosCb);
|
||||
glfwSetMouseButtonCallback(m_windows[0], mouseButtonCb);
|
||||
glfwSetWindowSizeCallback(m_windows[0], windowSizeCb);
|
||||
|
||||
glfwSetWindow(m_windows[0]);
|
||||
m_eventQueue.postSizeEvent(handle, ENTRY_DEFAULT_WIDTH, ENTRY_DEFAULT_HEIGHT);
|
||||
|
||||
for (uint32_t ii = 0; ii < ENTRY_CONFIG_MAX_GAMEPADS; ++ii)
|
||||
{
|
||||
m_gamepad[ii].m_handle.idx = ii;
|
||||
if (glfwJoystickPresent(ii))
|
||||
{
|
||||
m_gamepad[ii].m_connected = true;
|
||||
m_eventQueue.postGamepadEvent(handle
|
||||
, m_gamepad[ii].m_handle
|
||||
, true);
|
||||
}
|
||||
}
|
||||
|
||||
m_thread.init(MainThreadEntry::threadFunc, &m_mte);
|
||||
|
||||
while (NULL != m_windows[0]
|
||||
&& !glfwWindowShouldClose(m_windows[0]))
|
||||
{
|
||||
glfwWaitEvents();
|
||||
|
||||
for (uint32_t ii = 0; ii < ENTRY_CONFIG_MAX_GAMEPADS; ++ii)
|
||||
{
|
||||
if (m_gamepad[ii].m_connected)
|
||||
{
|
||||
m_gamepad[ii].update(m_eventQueue);
|
||||
}
|
||||
}
|
||||
|
||||
while (Msg* msg = m_msgs.pop())
|
||||
{
|
||||
switch (msg->m_type)
|
||||
{
|
||||
case GLFW_WINDOW_CREATE:
|
||||
{
|
||||
GLFWwindow* window = glfwCreateWindow(msg->m_width
|
||||
, msg->m_height
|
||||
, msg->m_title.c_str()
|
||||
, NULL
|
||||
, NULL);
|
||||
if (!window)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
glfwSetWindowPos(window, msg->m_x, msg->m_y);
|
||||
if (msg->m_flags & ENTRY_WINDOW_FLAG_ASPECT_RATIO)
|
||||
{
|
||||
glfwSetWindowAspectRatio(window, msg->m_width, msg->m_height);
|
||||
}
|
||||
|
||||
glfwSetKeyCallback(window, keyCb);
|
||||
glfwSetCharCallback(window, charCb);
|
||||
glfwSetScrollCallback(window, scrollCb);
|
||||
glfwSetCursorPosCallback(window, cursorPosCb);
|
||||
glfwSetMouseButtonCallback(window, mouseButtonCb);
|
||||
glfwSetWindowSizeCallback(window, windowSizeCb);
|
||||
|
||||
m_windows[msg->m_handle.idx] = window;
|
||||
m_eventQueue.postSizeEvent(msg->m_handle, msg->m_width, msg->m_height);
|
||||
m_eventQueue.postWindowEvent(msg->m_handle, glfwNativeWindowHandle(window));
|
||||
}
|
||||
break;
|
||||
|
||||
case GLFW_WINDOW_DESTROY:
|
||||
{
|
||||
if (isValid(msg->m_handle) )
|
||||
{
|
||||
GLFWwindow* window = m_windows[msg->m_handle.idx];
|
||||
m_eventQueue.postWindowEvent(msg->m_handle);
|
||||
glfwDestroyWindow(window);
|
||||
m_windows[msg->m_handle.idx] = NULL;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case GLFW_WINDOW_SET_TITLE:
|
||||
{
|
||||
GLFWwindow* window = m_windows[msg->m_handle.idx];
|
||||
glfwSetWindowTitle(window, msg->m_title.c_str());
|
||||
}
|
||||
break;
|
||||
|
||||
case GLFW_WINDOW_SET_POS:
|
||||
{
|
||||
GLFWwindow* window = m_windows[msg->m_handle.idx];
|
||||
glfwSetWindowPos(window, msg->m_x, msg->m_y);
|
||||
}
|
||||
break;
|
||||
|
||||
case GLFW_WINDOW_SET_SIZE:
|
||||
{
|
||||
GLFWwindow* window = m_windows[msg->m_handle.idx];
|
||||
glfwSetWindowSize(window, msg->m_width, msg->m_height);
|
||||
}
|
||||
break;
|
||||
|
||||
case GLFW_WINDOW_TOGGLE_FRAME:
|
||||
{
|
||||
// Wait for glfwSetWindowDecorated to exist
|
||||
}
|
||||
break;
|
||||
|
||||
case GLFW_WINDOW_TOGGLE_FULL_SCREEN:
|
||||
{
|
||||
GLFWwindow* window = m_windows[msg->m_handle.idx];
|
||||
if (glfwGetWindowMonitor(window))
|
||||
{
|
||||
int width, height;
|
||||
glfwGetWindowSize(window, &width, &height);
|
||||
glfwSetWindowMonitor(window, NULL, 0, 0, width, height, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
|
||||
if (NULL != monitor)
|
||||
{
|
||||
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
|
||||
glfwSetWindowMonitor(window
|
||||
, monitor
|
||||
, 0
|
||||
, 0
|
||||
, mode->width
|
||||
, mode->height
|
||||
, mode->refreshRate
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case GLFW_WINDOW_MOUSE_LOCK:
|
||||
{
|
||||
GLFWwindow* window = m_windows[msg->m_handle.idx];
|
||||
if (msg->m_value)
|
||||
{
|
||||
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
||||
}
|
||||
else
|
||||
{
|
||||
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
delete msg;
|
||||
}
|
||||
}
|
||||
|
||||
m_eventQueue.postExitEvent();
|
||||
m_thread.shutdown();
|
||||
|
||||
glfwDestroyWindow(m_windows[0]);
|
||||
glfwTerminate();
|
||||
return result;
|
||||
|
||||
return m_thread.getExitCode();
|
||||
}
|
||||
|
||||
WindowHandle findHandle(GLFWwindow* _window)
|
||||
{
|
||||
bx::LwMutexScope scope(m_lock);
|
||||
for (uint32_t ii = 0, num = m_windowAlloc.getNumHandles(); ii < num; ++ii)
|
||||
{
|
||||
uint16_t idx = m_windowAlloc.getHandleAt(ii);
|
||||
if (_window == m_windows[idx])
|
||||
{
|
||||
WindowHandle handle = { idx };
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
|
||||
WindowHandle invalid = { UINT16_MAX };
|
||||
return invalid;
|
||||
}
|
||||
|
||||
static void keyCb(GLFWwindow* _window, int _key, int _scancode, int _action, int _mods);
|
||||
static void charCb(GLFWwindow* _window, unsigned int _scancode);
|
||||
static void scrollCb(GLFWwindow* _window, double _dx, double _dy);
|
||||
static void cursorPosCb(GLFWwindow* _window, double _mx, double _my);
|
||||
static void mouseButtonCb(GLFWwindow* _window, int _button, int _action, int _mods);
|
||||
static void windowSizeCb(GLFWwindow* _window, int _width, int _height);
|
||||
|
||||
MainThreadEntry m_mte;
|
||||
bx::Thread m_thread;
|
||||
|
||||
EventQueue m_eventQueue;
|
||||
bx::LwMutex m_lock;
|
||||
|
||||
GLFWwindow* m_window;
|
||||
GLFWwindow* m_windows[ENTRY_CONFIG_MAX_WINDOWS];
|
||||
bx::HandleAllocT<ENTRY_CONFIG_MAX_WINDOWS> m_windowAlloc;
|
||||
|
||||
GamepadGLFW m_gamepad[ENTRY_CONFIG_MAX_GAMEPADS];
|
||||
|
||||
bx::SpScUnboundedQueueLf<Msg> m_msgs;
|
||||
|
||||
double m_scrollPos;
|
||||
};
|
||||
|
||||
Context s_ctx;
|
||||
|
||||
void Context::keyCb(GLFWwindow* _window, int _key, int _scancode, int _action, int _mods)
|
||||
{
|
||||
BX_UNUSED(_window, _scancode, _mods);
|
||||
if (_key == GLFW_KEY_Q
|
||||
&& _action == GLFW_PRESS
|
||||
&& _mods == GLFW_MOD_CONTROL)
|
||||
BX_UNUSED(_scancode);
|
||||
if (_key == GLFW_KEY_UNKNOWN)
|
||||
{
|
||||
s_ctx.m_eventQueue.postExitEvent();
|
||||
return;
|
||||
}
|
||||
WindowHandle handle = s_ctx.findHandle(_window);
|
||||
int mods = translateKeyModifiers(_mods);
|
||||
Key::Enum key = translateKey(_key);
|
||||
bool down = (_action == GLFW_PRESS || _action == GLFW_REPEAT);
|
||||
s_ctx.m_eventQueue.postKeyEvent(handle, key, mods, down);
|
||||
}
|
||||
|
||||
void Context::charCb(GLFWwindow* _window, unsigned int _scancode)
|
||||
{
|
||||
WindowHandle handle = s_ctx.findHandle(_window);
|
||||
uint8_t chars[4];
|
||||
uint8_t length = encodeUTF8(chars, _scancode);
|
||||
if (!length)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
s_ctx.m_eventQueue.postCharEvent(handle, length, chars);
|
||||
}
|
||||
|
||||
void Context::scrollCb(GLFWwindow* _window, double _dx, double _dy)
|
||||
{
|
||||
BX_UNUSED(_dx);
|
||||
WindowHandle handle = s_ctx.findHandle(_window);
|
||||
double mx, my;
|
||||
glfwGetCursorPos(_window, &mx, &my);
|
||||
s_ctx.m_scrollPos += _dy;
|
||||
s_ctx.m_eventQueue.postMouseEvent(handle
|
||||
, (int32_t) mx
|
||||
, (int32_t) my
|
||||
, (int32_t) s_ctx.m_scrollPos
|
||||
);
|
||||
}
|
||||
|
||||
void Context::cursorPosCb(GLFWwindow* _window, double _mx, double _my)
|
||||
{
|
||||
WindowHandle handle = s_ctx.findHandle(_window);
|
||||
s_ctx.m_eventQueue.postMouseEvent(handle
|
||||
, (int32_t) _mx
|
||||
, (int32_t) _my
|
||||
, (int32_t) s_ctx.m_scrollPos
|
||||
);
|
||||
}
|
||||
|
||||
void Context::mouseButtonCb(GLFWwindow* _window, int _button, int _action, int _mods)
|
||||
{
|
||||
BX_UNUSED(_mods);
|
||||
WindowHandle handle = s_ctx.findHandle(_window);
|
||||
bool down = _action == GLFW_PRESS;
|
||||
double mx, my;
|
||||
glfwGetCursorPos(_window, &mx, &my);
|
||||
s_ctx.m_eventQueue.postMouseEvent(handle
|
||||
, (int32_t) mx
|
||||
, (int32_t) my
|
||||
, (int32_t) s_ctx.m_scrollPos
|
||||
, translateMouseButton(_button)
|
||||
, down
|
||||
);
|
||||
}
|
||||
|
||||
void Context::windowSizeCb(GLFWwindow* _window, int _width, int _height)
|
||||
{
|
||||
WindowHandle handle = s_ctx.findHandle(_window);
|
||||
s_ctx.m_eventQueue.postSizeEvent(handle, _width, _height);
|
||||
}
|
||||
|
||||
static void joystickCb(int _jid, int _action)
|
||||
{
|
||||
if (_jid >= ENTRY_CONFIG_MAX_GAMEPADS)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
WindowHandle defaultWindow = { 0 };
|
||||
GamepadHandle handle = { (uint16_t) _jid };
|
||||
|
||||
if (_action == GLFW_CONNECTED)
|
||||
{
|
||||
s_ctx.m_gamepad[_jid].m_connected = true;
|
||||
s_ctx.m_eventQueue.postGamepadEvent(defaultWindow, handle, true);
|
||||
}
|
||||
else if (_action == GLFW_DISCONNECTED)
|
||||
{
|
||||
s_ctx.m_gamepad[_jid].m_connected = false;
|
||||
s_ctx.m_eventQueue.postGamepadEvent(defaultWindow, handle, false);
|
||||
}
|
||||
}
|
||||
|
||||
const Event* poll()
|
||||
{
|
||||
glfwPollEvents();
|
||||
|
||||
if (glfwWindowShouldClose(s_ctx.m_window) )
|
||||
{
|
||||
s_ctx.m_eventQueue.postExitEvent();
|
||||
}
|
||||
glfwPostEmptyEvent();
|
||||
return s_ctx.m_eventQueue.poll();
|
||||
}
|
||||
|
||||
const Event* poll(WindowHandle _handle)
|
||||
{
|
||||
glfwPostEmptyEvent();
|
||||
return s_ctx.m_eventQueue.poll(_handle);
|
||||
}
|
||||
|
||||
@ -123,44 +744,93 @@ namespace entry
|
||||
|
||||
WindowHandle createWindow(int32_t _x, int32_t _y, uint32_t _width, uint32_t _height, uint32_t _flags, const char* _title)
|
||||
{
|
||||
BX_UNUSED(_x, _y, _width, _height, _flags, _title);
|
||||
WindowHandle handle = { UINT16_MAX };
|
||||
return handle;
|
||||
Msg* msg = new Msg(GLFW_WINDOW_CREATE);
|
||||
msg->m_x = _x;
|
||||
msg->m_y = _y;
|
||||
msg->m_width = _width;
|
||||
msg->m_height = _height;
|
||||
msg->m_flags = _flags;
|
||||
msg->m_title = _title;
|
||||
msg->m_handle.idx = s_ctx.m_windowAlloc.alloc();
|
||||
s_ctx.m_msgs.push(msg);
|
||||
glfwPostEmptyEvent();
|
||||
return msg->m_handle;
|
||||
}
|
||||
|
||||
void destroyWindow(WindowHandle _handle)
|
||||
{
|
||||
BX_UNUSED(_handle);
|
||||
Msg* msg = new Msg(GLFW_WINDOW_DESTROY);
|
||||
msg->m_handle = _handle;
|
||||
s_ctx.m_msgs.push(msg);
|
||||
glfwPostEmptyEvent();
|
||||
}
|
||||
|
||||
void setWindowPos(WindowHandle _handle, int32_t _x, int32_t _y)
|
||||
{
|
||||
BX_UNUSED(_handle, _x, _y);
|
||||
Msg* msg = new Msg(GLFW_WINDOW_SET_POS);
|
||||
msg->m_x = _x;
|
||||
msg->m_y = _y;
|
||||
msg->m_handle = _handle;
|
||||
s_ctx.m_msgs.push(msg);
|
||||
glfwPostEmptyEvent();
|
||||
}
|
||||
|
||||
void setWindowSize(WindowHandle _handle, uint32_t _width, uint32_t _height)
|
||||
{
|
||||
BX_UNUSED(_handle, _width, _height);
|
||||
Msg* msg = new Msg(GLFW_WINDOW_SET_SIZE);
|
||||
msg->m_width = _width;
|
||||
msg->m_height = _height;
|
||||
msg->m_handle = _handle;
|
||||
s_ctx.m_msgs.push(msg);
|
||||
glfwPostEmptyEvent();
|
||||
}
|
||||
|
||||
void setWindowTitle(WindowHandle _handle, const char* _title)
|
||||
{
|
||||
BX_UNUSED(_handle, _title);
|
||||
Msg* msg = new Msg(GLFW_WINDOW_SET_TITLE);
|
||||
msg->m_title = _title;
|
||||
msg->m_handle = _handle;
|
||||
s_ctx.m_msgs.push(msg);
|
||||
glfwPostEmptyEvent();
|
||||
}
|
||||
|
||||
void toggleWindowFrame(WindowHandle _handle)
|
||||
{
|
||||
BX_UNUSED(_handle);
|
||||
Msg* msg = new Msg(GLFW_WINDOW_TOGGLE_FRAME);
|
||||
msg->m_handle = _handle;
|
||||
s_ctx.m_msgs.push(msg);
|
||||
glfwPostEmptyEvent();
|
||||
}
|
||||
|
||||
void toggleFullscreen(WindowHandle _handle)
|
||||
{
|
||||
BX_UNUSED(_handle);
|
||||
Msg* msg = new Msg(GLFW_WINDOW_TOGGLE_FULL_SCREEN);
|
||||
msg->m_handle = _handle;
|
||||
s_ctx.m_msgs.push(msg);
|
||||
glfwPostEmptyEvent();
|
||||
}
|
||||
|
||||
void setMouseLock(WindowHandle _handle, bool _lock)
|
||||
{
|
||||
BX_UNUSED(_handle, _lock);
|
||||
Msg* msg = new Msg(GLFW_WINDOW_MOUSE_LOCK);
|
||||
msg->m_value = _lock;
|
||||
msg->m_handle = _handle;
|
||||
s_ctx.m_msgs.push(msg);
|
||||
glfwPostEmptyEvent();
|
||||
}
|
||||
|
||||
int32_t MainThreadEntry::threadFunc(void* _userData)
|
||||
{
|
||||
MainThreadEntry* self = (MainThreadEntry*)_userData;
|
||||
int32_t result = main(self->m_argc, self->m_argv);
|
||||
|
||||
// Destroy main window on exit...
|
||||
Msg* msg = new Msg(GLFW_WINDOW_DESTROY);
|
||||
msg->m_handle.idx = 0;
|
||||
s_ctx.m_msgs.push(msg);
|
||||
glfwPostEmptyEvent();
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include <string.h> // memcpy
|
||||
|
||||
#ifndef ENTRY_CONFIG_USE_NOOP
|
||||
# define ENTRY_CONFIG_USE_NOOP (BX_PLATFORM_QNX)
|
||||
# define ENTRY_CONFIG_USE_NOOP (BX_PLATFORM_QNX || BX_PLATFORM_PS4)
|
||||
#endif // ENTRY_CONFIG_USE_NOOP
|
||||
|
||||
#ifndef ENTRY_CONFIG_USE_SDL
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user