mirror of
https://github.com/godotengine/godot
synced 2024-11-02 08:53:46 +00:00
Translate inactive particles to -INF
This commit is contained in:
parent
5860b02b63
commit
6229c2a1f9
2 changed files with 10 additions and 6 deletions
|
@ -44,8 +44,12 @@ uniform highp mat4 inv_emission_transform;
|
||||||
|
|
||||||
#define PARTICLE_FLAG_ACTIVE uint(1)
|
#define PARTICLE_FLAG_ACTIVE uint(1)
|
||||||
|
|
||||||
|
#define FLT_MAX float(3.402823466e+38)
|
||||||
|
|
||||||
void main() {
|
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)) {
|
if (bool(floatBitsToUint(velocity_flags.w) & PARTICLE_FLAG_ACTIVE)) {
|
||||||
#ifdef MODE_3D
|
#ifdef MODE_3D
|
||||||
txform = transpose(mat4(xform_1, xform_2, xform_3, vec4(0.0, 0.0, 0.0, 1.0)));
|
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.
|
// as they will be drawn with the node position as origin.
|
||||||
txform = inv_emission_transform * txform;
|
txform = inv_emission_transform * txform;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
txform = transpose(txform);
|
|
||||||
}
|
}
|
||||||
|
txform = transpose(txform);
|
||||||
|
|
||||||
instance_color_custom_data = uvec4(packHalf2x16(color.xy), packHalf2x16(color.zw), packHalf2x16(custom.xy), packHalf2x16(custom.zw));
|
instance_color_custom_data = uvec4(packHalf2x16(color.xy), packHalf2x16(color.zw), packHalf2x16(custom.xy), packHalf2x16(custom.zw));
|
||||||
out_xform_1 = txform[0];
|
out_xform_1 = txform[0];
|
||||||
|
|
|
@ -206,11 +206,12 @@ void main() {
|
||||||
// as they will be drawn with the node position as origin.
|
// as they will be drawn with the node position as origin.
|
||||||
txform = params.inv_emission_transform * txform;
|
txform = params.inv_emission_transform * txform;
|
||||||
}
|
}
|
||||||
|
|
||||||
txform = transpose(txform);
|
|
||||||
} else {
|
} else {
|
||||||
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).
|
||||||
|
txform = mat4(vec4(0.0), vec4(0.0), vec4(0.0), vec4(-1.0 / 0.0, -1.0 / 0.0, -1.0 / 0.0, 0.0));
|
||||||
}
|
}
|
||||||
|
txform = transpose(txform);
|
||||||
|
|
||||||
if (params.copy_mode_2d) {
|
if (params.copy_mode_2d) {
|
||||||
uint write_offset = gl_GlobalInvocationID.x * (2 + 1 + 1); //xform + color + custom
|
uint write_offset = gl_GlobalInvocationID.x * (2 + 1 + 1); //xform + color + custom
|
||||||
|
|
Loading…
Reference in a new issue