From c006ff6b038fdd12908a69db5186db7695f59eca Mon Sep 17 00:00:00 2001 From: Trithilon Date: Sat, 20 Aug 2022 18:48:21 +0530 Subject: [PATCH] Missing glsl1.2 shader for the Basic_Lighting example If you run the /shaders/shaders_basic_lighting example on a platform with GLSL_VERSION set to 120, raylib isn't able to find the corresponding shader. I merely copied the GLSL 1.0 version of the same shader from the other folder (and removed the precision mediump float line which was causing it not to compile) and pasted it in the glsl120 folder. It works well now. Tested on RPi 0 2W running RPIOS Buster. --- .../resources/shaders/glsl120/lighting.fs | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 examples/shaders/resources/shaders/glsl120/lighting.fs diff --git a/examples/shaders/resources/shaders/glsl120/lighting.fs b/examples/shaders/resources/shaders/glsl120/lighting.fs new file mode 100644 index 000000000..0cf5d2270 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/lighting.fs @@ -0,0 +1,79 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec3 fragPosition; +varying vec2 fragTexCoord; +varying vec4 fragColor; +varying vec3 fragNormal; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +#define MAX_LIGHTS 4 +#define LIGHT_DIRECTIONAL 0 +#define LIGHT_POINT 1 + +struct MaterialProperty { + vec3 color; + int useSampler; + sampler2D sampler; +}; + +struct Light { + int enabled; + int type; + vec3 position; + vec3 target; + vec4 color; +}; + +// Input lighting values +uniform Light lights[MAX_LIGHTS]; +uniform vec4 ambient; +uniform vec3 viewPos; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord); + vec3 lightDot = vec3(0.0); + vec3 normal = normalize(fragNormal); + vec3 viewD = normalize(viewPos - fragPosition); + vec3 specular = vec3(0.0); + + // NOTE: Implement here your fragment shader code + + for (int i = 0; i < MAX_LIGHTS; i++) + { + if (lights[i].enabled == 1) + { + vec3 light = vec3(0.0); + + if (lights[i].type == LIGHT_DIRECTIONAL) + { + light = -normalize(lights[i].target - lights[i].position); + } + + if (lights[i].type == LIGHT_POINT) + { + light = normalize(lights[i].position - fragPosition); + } + + float NdotL = max(dot(normal, light), 0.0); + lightDot += lights[i].color.rgb*NdotL; + + float specCo = 0.0; + if (NdotL > 0.0) specCo = pow(max(0.0, dot(viewD, reflect(-(light), normal))), 16.0); // 16 refers to shine + specular += specCo; + } + } + + vec4 finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0))); + finalColor += texelColor*(ambient/10.0); + + // Gamma correction + gl_FragColor = pow(finalColor, vec4(1.0/2.2)); +}