| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #version 460 core
- //--------------------------------------------------------------------------------------
- // Globals
- //--------------------------------------------------------------------------------------
- layout(std140, binding = 0) uniform cbMatrices
- {
- mat4 g_mWorldViewProjection;
- mat4 g_mWorld;
- };
- layout(std140, binding = 1) uniform cbLights
- {
- vec4 g_LightDiffuse[8]; // Light's diffuse color - up to 8 lights
- vec4 g_LightDir[8]; // Light's direction in world space
- vec4 g_fAmbient;
- int g_nNumLights;
- };
- layout(std140, binding = 2) uniform cbObjectColors
- {
- vec4 g_vDiffuseObjectColor;
- vec4 g_vAmbientObjectColor;
- bool g_bHasTexture;
- };
- //--------------------------------------------------------------------------------------
- // Input / Output structures
- //--------------------------------------------------------------------------------------
- layout(location = 0) in vec3 position;
- layout(location = 1) in vec3 vNormal;
- layout(location = 2) in vec2 vertex_uv;
- out vec2 uv;
- out vec4 diffuse;
- void main() {
- vec3 vNormalWorldSpace;
- float dotProduct;
- vec4 dottedLightColor;
- gl_Position = g_mWorldViewProjection * vec4(position, 1.0);
- vNormalWorldSpace = mat3(g_mWorld) * vNormal;
- uv = vertex_uv;
- // Compute simple directional lighting equation
- vec4 vTotalLightDiffuse = vec4(0,0,0,0);
- for(int i=0; i<g_nNumLights; i++)
- {
- dotProduct = dot(vNormalWorldSpace, g_LightDir[i].xyz);
- dotProduct = max(0.0f, dotProduct);
- dottedLightColor = g_LightDiffuse[i] * dotProduct;
- vTotalLightDiffuse += dottedLightColor;
- }
- diffuse.rgb = (g_vDiffuseObjectColor * vTotalLightDiffuse +
- g_vAmbientObjectColor * g_fAmbient).rgb;
- diffuse.a = g_vDiffuseObjectColor.a;
- }
|