diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gles3/shaders/particles_copy.glsl | 9 | ||||
-rw-r--r-- | drivers/gles3/storage/material_storage.cpp | 1 |
2 files changed, 7 insertions, 3 deletions
diff --git a/drivers/gles3/shaders/particles_copy.glsl b/drivers/gles3/shaders/particles_copy.glsl index f273cb7b64..774aa139b3 100644 --- a/drivers/gles3/shaders/particles_copy.glsl +++ b/drivers/gles3/shaders/particles_copy.glsl @@ -44,8 +44,12 @@ uniform highp mat4 inv_emission_transform; #define PARTICLE_FLAG_ACTIVE uint(1) +#define FLT_MAX float(3.402823466e+38) + void main() { - mat4 txform = mat4(vec4(0.0), vec4(0.0), vec4(0.0), vec4(0.0)); // zero scale, becomes invisible. + // Set scale to zero and translate to -INF so particle will be invisible + // even for materials that ignore rotation/scale (i.e. billboards). + mat4 txform = mat4(vec4(0.0), vec4(0.0), vec4(0.0), vec4(-FLT_MAX, -FLT_MAX, -FLT_MAX, 0.0)); if (bool(floatBitsToUint(velocity_flags.w) & PARTICLE_FLAG_ACTIVE)) { #ifdef MODE_3D txform = transpose(mat4(xform_1, xform_2, xform_3, vec4(0.0, 0.0, 0.0, 1.0))); @@ -102,9 +106,8 @@ void main() { // as they will be drawn with the node position as origin. txform = inv_emission_transform * txform; #endif - - txform = transpose(txform); } + txform = transpose(txform); instance_color_custom_data = uvec4(packHalf2x16(color.xy), packHalf2x16(color.zw), packHalf2x16(custom.xy), packHalf2x16(custom.zw)); out_xform_1 = txform[0]; diff --git a/drivers/gles3/storage/material_storage.cpp b/drivers/gles3/storage/material_storage.cpp index f00124ab13..0379e98455 100644 --- a/drivers/gles3/storage/material_storage.cpp +++ b/drivers/gles3/storage/material_storage.cpp @@ -1603,6 +1603,7 @@ MaterialStorage::MaterialStorage() { //builtins actions.renames["TIME"] = "scene_data.time"; + actions.renames["EXPOSURE"] = "(1.0 / scene_data.emissive_exposure_normalization)"; actions.renames["PI"] = _MKSTR(Math_PI); actions.renames["TAU"] = _MKSTR(Math_TAU); actions.renames["E"] = _MKSTR(Math_E); |