standard_fragment.glsl 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. //
  2. // Fragment Shader template
  3. //
  4. #include <material>
  5. // Inputs from Vertex shader
  6. in vec3 ColorFrontAmbdiff;
  7. in vec3 ColorFrontSpec;
  8. in vec3 ColorBackAmbdiff;
  9. in vec3 ColorBackSpec;
  10. in vec2 FragTexcoord;
  11. // Output
  12. out vec4 FragColor;
  13. void main() {
  14. vec4 texCombined = vec4(1);
  15. #if MAT_TEXTURES > 0
  16. // Combine all texture colors and opacity
  17. for (int i = 0; i < MAT_TEXTURES; i++) {
  18. if (MatTexVisible(i) == false) {
  19. continue;
  20. }
  21. vec4 texcolor = texture(MatTexture[i], FragTexcoord * MatTexRepeat(i) + MatTexOffset(i));
  22. if (i == 0) {
  23. texCombined = texcolor;
  24. } else {
  25. texCombined = mix(texCombined, texcolor, texcolor.a);
  26. }
  27. }
  28. #endif
  29. vec4 colorAmbDiff;
  30. vec4 colorSpec;
  31. if (gl_FrontFacing) {
  32. colorAmbDiff = vec4(ColorFrontAmbdiff, MatOpacity);
  33. colorSpec = vec4(ColorFrontSpec, 0);
  34. } else {
  35. colorAmbDiff = vec4(ColorBackAmbdiff, MatOpacity);
  36. colorSpec = vec4(ColorBackSpec, 0);
  37. }
  38. FragColor = min(colorAmbDiff * texCombined + colorSpec, vec4(1));
  39. }