minimal.shader 966 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. shader_type spatial;
  2. render_mode blend_mix,depth_draw_opaque,cull_back,unshaded;
  3. varying mat4 mtx;
  4. varying mat4 tmtx;
  5. void translate(inout mat4 m, vec3 d){
  6. m[3][0] = d.x;
  7. m[3][1] = d.y;
  8. m[3][2] = d.z;
  9. m[3].xyz=d; //does not matter, both does not work
  10. }
  11. void vertex() {
  12. mtx=mat4(vec4(1.),vec4(1.),vec4(1.),vec4(1.));
  13. tmtx=mat4(vec4(0.),vec4(0.),vec4(0.),vec4(0.));
  14. tmtx=mat4(mtx[0].xyzw,mtx[1].xyzw,mtx[2].xyzw,mtx[3].xyzw); //both work same
  15. tmtx=mtx; //both work same
  16. // at some point it also may not work same, in this shader it same
  17. vec3 a=vec3(1.,0.,0.);
  18. vec3 b=vec3(0.,1.,0.);
  19. //bug
  20. translate(tmtx,a); //this do nothing, and ruin tmtx value in more complex logic when tmtx used outside of Vertex function
  21. //tmtx[3].xyz=a; //fix
  22. //mat4 tm=tmtx;translate(tm,a);tmtx=tm; //do nothing
  23. mtx[3].xyz=b;
  24. //tmtx=mtx; //does work
  25. }
  26. void fragment() {
  27. vec4 col=vec4(0.);
  28. if(UV.x<0.5)ALBEDO = mtx[3].xyz;
  29. else ALBEDO = tmtx[3].xyz;
  30. }