mirror of
https://github.com/godotengine/godot.git
synced 2024-12-18 09:03:16 +00:00
Fix canvas particle material for old GLSL versions
This commit is contained in:
parent
a7a21bd9fe
commit
4d933b1530
@ -131,19 +131,15 @@ void CanvasItemMaterial::_update_shader() {
|
||||
|
||||
code += "\tVERTEX.xy /= vec2(h_frames, v_frames);\n";
|
||||
|
||||
code += "\tint total_frames = particles_anim_h_frames * particles_anim_v_frames;\n";
|
||||
code += "\tint frame = int(float(total_frames) * INSTANCE_CUSTOM.z);\n";
|
||||
code += "\tif (particles_anim_loop) {\n";
|
||||
code += "\t\tframe = int(abs(frame) % total_frames);\n";
|
||||
code += "\tfloat particle_total_frames = float(particles_anim_h_frames * particles_anim_v_frames);\n";
|
||||
code += "\tfloat particle_frame = floor(INSTANCE_CUSTOM.z * float(particle_total_frames));\n";
|
||||
code += "\tif (!particles_anim_loop) {\n";
|
||||
code += "\t\tparticle_frame = clamp(particle_frame, 0.0, particle_total_frames - 1.0);\n";
|
||||
code += "\t} else {\n";
|
||||
code += "\t\tframe = clamp(frame, 0, total_frames - 1);\n";
|
||||
code += "\t}\n";
|
||||
|
||||
code += "\tfloat frame_w = 1.0 / h_frames;\n";
|
||||
code += "\tfloat frame_h = 1.0 / v_frames;\n";
|
||||
code += "\tUV.x = UV.x * frame_w + frame_w * float(frame % particles_anim_h_frames);\n";
|
||||
code += "\tUV.y = UV.y * frame_h + frame_h * float(frame / particles_anim_h_frames);\n";
|
||||
|
||||
code += "\t\tparticle_frame = mod(particle_frame, particle_total_frames);\n";
|
||||
code += "\t}";
|
||||
code += "\tUV /= vec2(h_frames, v_frames);\n";
|
||||
code += "\tUV += vec2(mod(particle_frame, h_frames) / h_frames, floor(particle_frame / h_frames) / v_frames);\n";
|
||||
code += "}\n";
|
||||
}
|
||||
|
||||
|
@ -617,11 +617,17 @@ void SpatialMaterial::_update_shader() {
|
||||
code += "\tMODELVIEW_MATRIX = INV_CAMERA_MATRIX * mat_world;\n";
|
||||
|
||||
//handle animation
|
||||
code += "\tfloat h_frames = float(particles_anim_h_frames);\n";
|
||||
code += "\tfloat v_frames = float(particles_anim_v_frames);\n";
|
||||
code += "\tfloat particle_total_frames = float(particles_anim_h_frames * particles_anim_v_frames);\n";
|
||||
code += "\tfloat particle_frame = floor(INSTANCE_CUSTOM.z * float(particle_total_frames));\n";
|
||||
code += "\tif (!particles_anim_loop) particle_frame=clamp(particle_frame,0.0,particle_total_frames-1.0); else particle_frame=mod(particle_frame,float(particle_total_frames));\n";
|
||||
code += "\tUV /= vec2(float(particles_anim_h_frames),float(particles_anim_v_frames));\n";
|
||||
code += "\tUV += vec2(mod(particle_frame,float(particles_anim_h_frames)) / float(particles_anim_h_frames), floor(particle_frame / float(particles_anim_h_frames)) / float(particles_anim_v_frames));\n";
|
||||
code += "\tif (!particles_anim_loop) {\n";
|
||||
code += "\t\tparticle_frame = clamp(particle_frame, 0.0, particle_total_frames - 1.0);\n";
|
||||
code += "\t} else {\n";
|
||||
code += "\t\tparticle_frame = mod(particle_frame, particle_total_frames);\n";
|
||||
code += "\t}";
|
||||
code += "\tUV /= vec2(h_frames, v_frames);\n";
|
||||
code += "\tUV += vec2(mod(particle_frame, h_frames) / h_frames, floor(particle_frame / h_frames) / v_frames);\n";
|
||||
} break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user