|
@@ -292,8 +292,10 @@ void ParticlesMaterial::_update_shader() {
|
|
code += " ivec2 emission_tex_ofs = ivec2(point % emission_tex_size.x, point / emission_tex_size.x);\n";
|
|
code += " ivec2 emission_tex_ofs = ivec2(point % emission_tex_size.x, point / emission_tex_size.x);\n";
|
|
}
|
|
}
|
|
code += " bool restart = false;\n";
|
|
code += " bool restart = false;\n";
|
|
|
|
+ code += " float tv = 0.0;\n";
|
|
code += " if (CUSTOM.y > CUSTOM.w) {\n";
|
|
code += " if (CUSTOM.y > CUSTOM.w) {\n";
|
|
code += " restart = true;\n";
|
|
code += " restart = true;\n";
|
|
|
|
+ code += " tv = 1.0;\n";
|
|
code += " }\n\n";
|
|
code += " }\n\n";
|
|
code += " if (RESTART || restart) {\n";
|
|
code += " if (RESTART || restart) {\n";
|
|
|
|
|
|
@@ -388,56 +390,57 @@ void ParticlesMaterial::_update_shader() {
|
|
code += " } else {\n";
|
|
code += " } else {\n";
|
|
|
|
|
|
code += " CUSTOM.y += DELTA / LIFETIME;\n";
|
|
code += " CUSTOM.y += DELTA / LIFETIME;\n";
|
|
|
|
+ code += " tv = CUSTOM.y / CUSTOM.w;\n";
|
|
if (tex_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid())
|
|
if (tex_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid())
|
|
- code += " float tex_linear_velocity = textureLod(linear_velocity_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_linear_velocity = textureLod(linear_velocity_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_linear_velocity = 0.0;\n";
|
|
code += " float tex_linear_velocity = 0.0;\n";
|
|
|
|
|
|
if (flags[FLAG_DISABLE_Z]) {
|
|
if (flags[FLAG_DISABLE_Z]) {
|
|
|
|
|
|
if (tex_parameters[PARAM_ORBIT_VELOCITY].is_valid())
|
|
if (tex_parameters[PARAM_ORBIT_VELOCITY].is_valid())
|
|
- code += " float tex_orbit_velocity = textureLod(orbit_velocity_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_orbit_velocity = textureLod(orbit_velocity_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_orbit_velocity = 0.0;\n";
|
|
code += " float tex_orbit_velocity = 0.0;\n";
|
|
}
|
|
}
|
|
|
|
|
|
if (tex_parameters[PARAM_ANGULAR_VELOCITY].is_valid())
|
|
if (tex_parameters[PARAM_ANGULAR_VELOCITY].is_valid())
|
|
- code += " float tex_angular_velocity = textureLod(angular_velocity_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_angular_velocity = textureLod(angular_velocity_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_angular_velocity = 0.0;\n";
|
|
code += " float tex_angular_velocity = 0.0;\n";
|
|
|
|
|
|
if (tex_parameters[PARAM_LINEAR_ACCEL].is_valid())
|
|
if (tex_parameters[PARAM_LINEAR_ACCEL].is_valid())
|
|
- code += " float tex_linear_accel = textureLod(linear_accel_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_linear_accel = textureLod(linear_accel_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_linear_accel = 0.0;\n";
|
|
code += " float tex_linear_accel = 0.0;\n";
|
|
|
|
|
|
if (tex_parameters[PARAM_RADIAL_ACCEL].is_valid())
|
|
if (tex_parameters[PARAM_RADIAL_ACCEL].is_valid())
|
|
- code += " float tex_radial_accel = textureLod(radial_accel_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_radial_accel = textureLod(radial_accel_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_radial_accel = 0.0;\n";
|
|
code += " float tex_radial_accel = 0.0;\n";
|
|
|
|
|
|
if (tex_parameters[PARAM_TANGENTIAL_ACCEL].is_valid())
|
|
if (tex_parameters[PARAM_TANGENTIAL_ACCEL].is_valid())
|
|
- code += " float tex_tangent_accel = textureLod(tangent_accel_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_tangent_accel = textureLod(tangent_accel_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_tangent_accel = 0.0;\n";
|
|
code += " float tex_tangent_accel = 0.0;\n";
|
|
|
|
|
|
if (tex_parameters[PARAM_DAMPING].is_valid())
|
|
if (tex_parameters[PARAM_DAMPING].is_valid())
|
|
- code += " float tex_damping = textureLod(damping_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_damping = textureLod(damping_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_damping = 0.0;\n";
|
|
code += " float tex_damping = 0.0;\n";
|
|
|
|
|
|
if (tex_parameters[PARAM_ANGLE].is_valid())
|
|
if (tex_parameters[PARAM_ANGLE].is_valid())
|
|
- code += " float tex_angle = textureLod(angle_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_angle = textureLod(angle_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_angle = 0.0;\n";
|
|
code += " float tex_angle = 0.0;\n";
|
|
|
|
|
|
if (tex_parameters[PARAM_ANIM_SPEED].is_valid())
|
|
if (tex_parameters[PARAM_ANIM_SPEED].is_valid())
|
|
- code += " float tex_anim_speed = textureLod(anim_speed_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_anim_speed = textureLod(anim_speed_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_anim_speed = 0.0;\n";
|
|
code += " float tex_anim_speed = 0.0;\n";
|
|
|
|
|
|
if (tex_parameters[PARAM_ANIM_OFFSET].is_valid())
|
|
if (tex_parameters[PARAM_ANIM_OFFSET].is_valid())
|
|
- code += " float tex_anim_offset = textureLod(anim_offset_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_anim_offset = textureLod(anim_offset_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_anim_offset = 0.0;\n";
|
|
code += " float tex_anim_offset = 0.0;\n";
|
|
|
|
|
|
@@ -495,12 +498,12 @@ void ParticlesMaterial::_update_shader() {
|
|
// apply color
|
|
// apply color
|
|
// apply hue rotation
|
|
// apply hue rotation
|
|
if (tex_parameters[PARAM_SCALE].is_valid())
|
|
if (tex_parameters[PARAM_SCALE].is_valid())
|
|
- code += " float tex_scale = textureLod(scale_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_scale = textureLod(scale_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_scale = 1.0;\n";
|
|
code += " float tex_scale = 1.0;\n";
|
|
|
|
|
|
if (tex_parameters[PARAM_HUE_VARIATION].is_valid())
|
|
if (tex_parameters[PARAM_HUE_VARIATION].is_valid())
|
|
- code += " float tex_hue_variation = textureLod(hue_variation_texture, vec2(CUSTOM.y, 0.0), 0.0).r;\n";
|
|
|
|
|
|
+ code += " float tex_hue_variation = textureLod(hue_variation_texture, vec2(tv, 0.0), 0.0).r;\n";
|
|
else
|
|
else
|
|
code += " float tex_hue_variation = 0.0;\n";
|
|
code += " float tex_hue_variation = 0.0;\n";
|
|
|
|
|
|
@@ -520,7 +523,7 @@ void ParticlesMaterial::_update_shader() {
|
|
code += " vec4(1.250, -1.050, -0.203, 0.0),\n";
|
|
code += " vec4(1.250, -1.050, -0.203, 0.0),\n";
|
|
code += " vec4(0.000, 0.000, 0.000, 0.0)) * hue_rot_s;\n";
|
|
code += " vec4(0.000, 0.000, 0.000, 0.0)) * hue_rot_s;\n";
|
|
if (color_ramp.is_valid()) {
|
|
if (color_ramp.is_valid()) {
|
|
- code += " COLOR = hue_rot_mat * textureLod(color_ramp, vec2(CUSTOM.y, 0.0), 0.0);\n";
|
|
|
|
|
|
+ code += " COLOR = hue_rot_mat * textureLod(color_ramp, vec2(tv, 0.0), 0.0);\n";
|
|
} else {
|
|
} else {
|
|
code += " COLOR = hue_rot_mat * color_value;\n";
|
|
code += " COLOR = hue_rot_mat * color_value;\n";
|
|
}
|
|
}
|