From 0d7cdffd24b8ce2e85a189347145246d61934b29 Mon Sep 17 00:00:00 2001 From: kearwood Date: Fri, 13 Apr 2012 22:48:13 +0000 Subject: [PATCH] Shader cleanup, deferred lighting in progress --HG-- extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%4045 --- KREngine/KREngine/Classes/KREngine.mm | 28 +- KREngine/KREngine/Classes/KRShader.cpp | 58 ++- KREngine/KREngine/Classes/KRShader.h | 2 + KREngine/KREngine/Shaders/ObjectShader.fsh | 395 +++++++++++---------- KREngine/KREngine/Shaders/ObjectShader.vsh | 364 +++++++++---------- KREngine/KREngine/Shaders/ShadowShader.vsh | 14 +- 6 files changed, 471 insertions(+), 390 deletions(-) diff --git a/KREngine/KREngine/Classes/KREngine.mm b/KREngine/KREngine/Classes/KREngine.mm index 144ae33..33c0080 100644 --- a/KREngine/KREngine/Classes/KREngine.mm +++ b/KREngine/KREngine/Classes/KREngine.mm @@ -390,6 +390,12 @@ double const PI = 3.141592653589793f; glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); + // Set source to buffers from pass 1 + glActiveTexture(GL_TEXTURE6); + glBindTexture(GL_TEXTURE_2D, compositeColorTexture); + glActiveTexture(GL_TEXTURE7); + glBindTexture(GL_TEXTURE_2D, compositeDepthTexture); + // Enable additive blending glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); @@ -404,6 +410,10 @@ double const PI = 3.141592653589793f; glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); + // Set source to buffers from pass 2 + glActiveTexture(GL_TEXTURE6); + glBindTexture(GL_TEXTURE_2D, lightAccumulationBuffer); + // Enable backface culling glCullFace(GL_BACK); glEnable(GL_CULL_FACE); @@ -416,6 +426,12 @@ double const PI = 3.141592653589793f; // Render the geometry pScene->render(&m_camera, m_pContext, frustrumVolume, false, viewMatrix, cameraPosition, lightDirection, shadowmvpmatrix, shadowDepthTexture, m_cShadowBuffers, 3); + // Deactivate source buffer texture units + glActiveTexture(GL_TEXTURE6); + glBindTexture(GL_TEXTURE_2D, 0); + glActiveTexture(GL_TEXTURE7); + glBindTexture(GL_TEXTURE_2D, 0); + } else { // ----====---- Opaque Geometry, Forward Rendering ----====---- @@ -588,11 +604,11 @@ double const PI = 3.141592653589793f; // This needs to be done prior to linking. glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_VERTEX, "position"); glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_TEXUVA, "inputTextureCoordinate"); - glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_TEXUVB, "shadowuv"); - glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_VERTEX, "myVertex"); - glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_NORMAL, "myNormal"); - glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_TANGENT, "myTangent"); - glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_TEXUVA, "myUV"); + glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_TEXUVB, "vertex_lightmap_uv"); + glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_VERTEX, "vertex_position"); + glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_NORMAL, "vertex_normal"); + glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_TANGENT, "vertex_tangent"); + glBindAttribLocation(*programPointer, KRShader::KRENGINE_ATTRIB_TEXUVA, "vertex_uv"); // Link program. if (![self linkProgram:*programPointer]) @@ -635,7 +651,7 @@ double const PI = 3.141592653589793f; { [self loadVertexShader:@"ShadowShader" fragmentShader:@"ShadowShader" forProgram:&m_shadowShaderProgram withOptions: NULL]; - m_shadowUniforms[KRENGINE_UNIFORM_SHADOWMVP1] = glGetUniformLocation(m_shadowShaderProgram, "myShadowMVPMatrix1"); + m_shadowUniforms[KRENGINE_UNIFORM_SHADOWMVP1] = glGetUniformLocation(m_shadowShaderProgram, "shadow_mvp1"); return TRUE; diff --git a/KREngine/KREngine/Classes/KRShader.cpp b/KREngine/KREngine/Classes/KRShader.cpp index ff73bd0..85a0f51 100644 --- a/KREngine/KREngine/Classes/KRShader.cpp +++ b/KREngine/KREngine/Classes/KRShader.cpp @@ -47,11 +47,31 @@ KRShader::KRShader(char *szKey, std::string options, const GLchar *szVertShaderS glShaderSource(vertexShader, 2, vertSource, NULL); glCompileShader(vertexShader); + // Report any compile issues to stderr + GLint logLength; + glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH, &logLength); + if (logLength > 0) { + GLchar *log = (GLchar *)malloc(logLength); + glGetShaderInfoLog(vertexShader, logLength, &logLength, log); + fprintf(stderr, "KREngine - Failed to compile vertex shader: %s\nShader compile log:\n%s", szKey, log); + free(log); + } + + // Create and compile vertex shader. fragShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragShader, 2, fragSource, NULL); glCompileShader(fragShader); + // Report any compile issues to stderr + glGetShaderiv(fragShader, GL_INFO_LOG_LENGTH, &logLength); + if (logLength > 0) { + GLchar *log = (GLchar *)malloc(logLength); + glGetShaderInfoLog(vertexShader, logLength, &logLength, log); + fprintf(stderr, "KREngine - Failed to compile fragment shader: %s\nShader compile log:\n%s", szKey, log); + free(log); + } + // Attach vertex shader to program. glAttachShader(m_iProgram, vertexShader); @@ -62,15 +82,25 @@ KRShader::KRShader(char *szKey, std::string options, const GLchar *szVertShaderS // This needs to be done prior to linking. glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_VERTEX, "position"); glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_TEXUVA, "inputTextureCoordinate"); - glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_TEXUVB, "shadowuv"); - glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_VERTEX, "myVertex"); - glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_NORMAL, "myNormal"); - glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_TANGENT, "myTangent"); - glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_TEXUVA, "myUV"); + glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_TEXUVB, "vertex_lightmap_uv"); + glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_VERTEX, "vertex_position"); + glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_NORMAL, "vertex_normal"); + glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_TANGENT, "vertex_tangent"); + glBindAttribLocation(m_iProgram, KRENGINE_ATTRIB_TEXUVA, "vertex_uv"); // Link program. glLinkProgram(m_iProgram); + // Report any linking issues to stderr + glGetProgramiv(m_iProgram, GL_INFO_LOG_LENGTH, &logLength); + if (logLength > 0) + { + GLchar *log = (GLchar *)malloc(logLength); + glGetProgramInfoLog(m_iProgram, logLength, &logLength, log); + fprintf(stderr, "KREngine - Failed to link shader program: %s\nProgram link log:\n%s", szKey, log); + free(log); + } + // Get uniform locations m_uniforms[KRENGINE_UNIFORM_MATERIAL_AMBIENT] = glGetUniformLocation(m_iProgram, "material_ambient"); m_uniforms[KRENGINE_UNIFORM_MATERIAL_DIFFUSE] = glGetUniformLocation(m_iProgram, "material_diffuse"); @@ -78,11 +108,11 @@ KRShader::KRShader(char *szKey, std::string options, const GLchar *szVertShaderS m_uniforms[KRENGINE_UNIFORM_MATERIAL_ALPHA] = glGetUniformLocation(m_iProgram, "material_alpha"); m_uniforms[KRENGINE_UNIFORM_MATERIAL_SHININESS] = glGetUniformLocation(m_iProgram, "material_shininess"); - m_uniforms[KRENGINE_UNIFORM_MVP] = glGetUniformLocation(m_iProgram, "myMVPMatrix"); - m_uniforms[KRENGINE_UNIFORM_M2V] = glGetUniformLocation(m_iProgram, "model_to_view"); - m_uniforms[KRENGINE_UNIFORM_SHADOWMVP1] = glGetUniformLocation(m_iProgram, "myShadowMVPMatrix1"); - m_uniforms[KRENGINE_UNIFORM_SHADOWMVP2] = glGetUniformLocation(m_iProgram, "myShadowMVPMatrix2"); - m_uniforms[KRENGINE_UNIFORM_SHADOWMVP3] = glGetUniformLocation(m_iProgram, "myShadowMVPMatrix3"); + m_uniforms[KRENGINE_UNIFORM_MVP] = glGetUniformLocation(m_iProgram, "mvp_matrix"); + m_uniforms[KRENGINE_UNIFORM_M2V] = glGetUniformLocation(m_iProgram, "model_to_view_matrix"); + m_uniforms[KRENGINE_UNIFORM_SHADOWMVP1] = glGetUniformLocation(m_iProgram, "shadow_mvp1"); + m_uniforms[KRENGINE_UNIFORM_SHADOWMVP2] = glGetUniformLocation(m_iProgram, "shadow_mvp2"); + m_uniforms[KRENGINE_UNIFORM_SHADOWMVP3] = glGetUniformLocation(m_iProgram, "shadow_mvp3"); m_uniforms[KRENGINE_UNIFORM_LIGHTDIRECTION] = glGetUniformLocation(m_iProgram, "lightDirection"); m_uniforms[KRENGINE_UNIFORM_CAMERAPOS] = glGetUniformLocation(m_iProgram, "cameraPosition"); @@ -104,6 +134,9 @@ KRShader::KRShader(char *szKey, std::string options, const GLchar *szVertShaderS m_uniforms[KRENGINE_UNIFORM_SHADOWTEXTURE3] = glGetUniformLocation(m_iProgram, "shadowTexture3"); + m_uniforms[KRENGINE_UNIFORM_GBUFFER_FRAME] = glGetUniformLocation(m_iProgram, "gbuffer_frame"); + m_uniforms[KRENGINE_UNIFORM_GBUFFER_DEPTH] = glGetUniformLocation(m_iProgram, "gbuffer_depth"); + } catch(...) { if(vertexShader) { glDeleteShader(vertexShader); @@ -180,6 +213,9 @@ void KRShader::bind(KRCamera *pCamera, KRMat4 &matModelToView, KRMat4 &mvpMatrix glUniform1i(m_uniforms[KRENGINE_UNIFORM_SHADOWTEXTURE2], 4); glUniform1i(m_uniforms[KRENGINE_UNIFORM_SHADOWTEXTURE3], 5); + glUniform1i(m_uniforms[KRENGINE_UNIFORM_GBUFFER_FRAME], 6); + glUniform1i(m_uniforms[KRENGINE_UNIFORM_GBUFFER_DEPTH], 7); + #if defined(DEBUG) GLint logLength; @@ -189,7 +225,7 @@ void KRShader::bind(KRCamera *pCamera, KRMat4 &matModelToView, KRMat4 &mvpMatrix { GLchar *log = (GLchar *)malloc(logLength); glGetProgramInfoLog(m_iProgram, logLength, &logLength, log); - fprintf(stderr, "Program validate log:\n%s", log); + fprintf(stderr, "KREngine - Failed to validate shader program: %s\n Program validate log:\n%s", m_szKey, log); free(log); } #endif diff --git a/KREngine/KREngine/Classes/KRShader.h b/KREngine/KREngine/Classes/KRShader.h index 165202f..aee1d83 100644 --- a/KREngine/KREngine/Classes/KRShader.h +++ b/KREngine/KREngine/Classes/KRShader.h @@ -89,6 +89,8 @@ public: KRENGINE_UNIFORM_SHADOWTEXTURE1, KRENGINE_UNIFORM_SHADOWTEXTURE2, KRENGINE_UNIFORM_SHADOWTEXTURE3, + KRENGINE_UNIFORM_GBUFFER_FRAME, + KRENGINE_UNIFORM_GBUFFER_DEPTH, KRENGINE_NUM_UNIFORMS }; diff --git a/KREngine/KREngine/Shaders/ObjectShader.fsh b/KREngine/KREngine/Shaders/ObjectShader.fsh index 44acacf..a749cf6 100644 --- a/KREngine/KREngine/Shaders/ObjectShader.fsh +++ b/KREngine/KREngine/Shaders/ObjectShader.fsh @@ -25,213 +25,238 @@ // or implied, of Kearwood Gilbert. // -uniform lowp vec3 material_ambient, material_diffuse, material_specular; -uniform lowp float material_alpha; + +#if ENABLE_PER_PIXEL == 1 || GBUFFER_PASS == 1 + uniform mediump float material_shininess; + #if HAS_NORMAL_MAP == 1 + uniform sampler2D normalTexture; + #else + varying mediump vec3 normal; + #endif + + #if HAS_DIFFUSE_MAP == 1 || HAS_NORMAL_MAP == 1 || HAS_SPEC_MAP == 1 + varying highp vec2 texCoord; + #endif + #if HAS_NORMAL_MAP_OFFSET == 1 || HAS_NORMAL_MAP_SCALE == 1 + varying highp vec2 normal_uv; + #else + #define normal_uv texCoord + #endif +#else + #if HAS_DIFFUSE_MAP == 1 + varying highp vec2 texCoord; + #endif +#endif + + +#if GBUFFER_PASS == 2 || GBUFFER_PASS == 3 + uniform sampler2D gbuffer_frame; + uniform sampler2D gbuffer_depth; + + varying mediump vec2 gbuffer_uv; +#endif #if GBUFFER_PASS == 1 -#if HAS_NORMAL_MAP == 1 -varying highp mat3 tangent_to_view; + #if HAS_NORMAL_MAP == 1 + varying highp mat3 tangent_to_view_matrix; + #else + uniform highp mat4 model_to_view_matrix; + #endif #else -uniform highp mat4 model_to_view; -#endif -#endif + uniform lowp vec3 material_ambient, material_diffuse, material_specular; + uniform lowp float material_alpha; + #if HAS_DIFFUSE_MAP == 1 + uniform sampler2D diffuseTexture; + #endif + #if HAS_SPEC_MAP == 1 + uniform sampler2D specularTexture; + #endif -#if ENABLE_PER_PIXEL == 1 -uniform mediump float material_shininess; -#endif + #if SHADOW_QUALITY >= 1 + uniform sampler2D shadowTexture1; + varying highp vec4 shadowMapCoord1; + #endif -#if HAS_DIFFUSE_MAP == 1 -uniform sampler2D diffuseTexture; -#endif + #if HAS_LIGHT_MAP == 1 + uniform sampler2D shadowTexture1; + varying mediump vec2 lightmap_uv; + #endif -#if HAS_SPEC_MAP == 1 -uniform sampler2D specularTexture; -#endif + #if SHADOW_QUALITY >= 2 + uniform sampler2D shadowTexture2; + varying highp vec4 shadowMapCoord2; + #endif -#if HAS_NORMAL_MAP == 1 && ENABLE_PER_PIXEL == 1 -uniform sampler2D normalTexture; -#endif + #if SHADOW_QUALITY >= 3 + uniform sampler2D shadowTexture3; + varying highp vec4 shadowMapCoord3; + #endif -#if SHADOW_QUALITY >= 1 -uniform sampler2D shadowTexture1; -varying highp vec4 shadowMapCoord1; -#endif + #if ENABLE_PER_PIXEL == 1 + varying mediump vec3 lightVec; + varying mediump vec3 halfVec; + #else + varying mediump float lamberFactor; + varying mediump float specularFactor; + #endif -#if HAS_LIGHT_MAP == 1 -uniform sampler2D shadowTexture1; -varying mediump vec2 shadowCoord; -#endif + #if (HAS_SPEC_MAP_OFFSET == 1|| HAS_SPEC_MAP_SCALE == 1) && ENABLE_PER_PIXEL == 1 + varying mediump vec2 spec_uv; + #else + #define spec_uv texCoord + #endif -#if SHADOW_QUALITY >= 2 -uniform sampler2D shadowTexture2; -varying highp vec4 shadowMapCoord2; -#endif + #if HAS_DIFFUSE_MAP_OFFSET == 1 || HAS_DIFFUSE_MAP_SCALE == 1 + varying highp vec2 diffuse_uv; + #else + #define diffuse_uv texCoord + #endif -#if SHADOW_QUALITY >= 3 -uniform sampler2D shadowTexture3; -varying highp vec4 shadowMapCoord3; -#endif - -#if HAS_DIFFUSE_MAP == 1 || (HAS_NORMAL_MAP == 1 && ENABLE_PER_PIXEL == 1) || HAS_SPEC_MAP == 1 -varying highp vec2 texCoord; -#endif - -#if HAS_NORMAL_MAP == 0 && ENABLE_PER_PIXEL == 1 -varying mediump vec3 normal; -#endif - -#if ENABLE_PER_PIXEL == 1 -varying mediump vec3 lightVec; -varying mediump vec3 halfVec; -#else -varying mediump float lamberFactor; -varying mediump float specularFactor; -#endif - - -#if (HAS_NORMAL_MAP_OFFSET == 1 || HAS_NORMAL_MAP_SCALE == 1) && ENABLE_PER_PIXEL == 1 -varying highp vec2 normal_uv; -#else -#define normal_uv texCoord -#endif - -#if (HAS_SPEC_MAP_OFFSET == 1|| HAS_SPEC_MAP_SCALE == 1) && ENABLE_PER_PIXEL == 1 -varying mediump vec2 spec_uv; -#else -#define spec_uv texCoord -#endif - -#if HAS_DIFFUSE_MAP_OFFSET == 1 || HAS_DIFFUSE_MAP_SCALE == 1 -varying highp vec2 diffuse_uv; -#else -#define diffuse_uv texCoord #endif void main() { -#if HAS_NORMAL_MAP == 1 && ENABLE_PER_PIXEL == 1 - // lookup normal from normal map, move from [0,1] to [-1, 1] range, normalize - mediump vec3 normal = normalize(2.0 * texture2D(normalTexture,normal_uv).rgb - 1.0); -#endif - -#if ENABLE_PER_PIXEL == 1 - mediump float lamberFactor = max(0.0,dot(lightVec, normal)); - mediump float specularFactor = 0.0; - if(material_shininess > 0.0) { - specularFactor = max(0.0,pow(dot(halfVec,normal), material_shininess)); - } -#endif - -#if HAS_DIFFUSE_MAP == 1 - mediump vec4 diffuseMaterial = vec4(vec3(texture2D(diffuseTexture, diffuse_uv)), material_alpha); -#else - mediump vec4 diffuseMaterial = vec4(vec3(1.0), material_alpha); -#endif - -#if SHADOW_QUALITY == 1 - highp float shadowMapDepth = 1.0; - highp float vertexShadowDepth = 1.0; - highp vec2 shadowMapPos = ((shadowMapCoord1 / shadowMapCoord1.w + 1.0) / 2.0).st; - - if(shadowMapCoord1.x >= -1.0 && shadowMapCoord1.x <= 1.0 && shadowMapCoord1.y >= -1.0 && shadowMapCoord1.y <= 1.0 && shadowMapCoord1.z >= 0.0 && shadowMapCoord1.z <= 1.0) { -#if DEBUG_PSSM == 1 - diffuseMaterial = diffuseMaterial * vec4(0.75, 0.75, 0.5, 1.0) + vec4(0.0, 0.0, 0.5, 0.0); -#endif - shadowMapDepth = texture2D(shadowTexture1, shadowMapPos).z; - vertexShadowDepth = ((shadowMapCoord1 / shadowMapCoord1.w + 1.0) / 2.0).z; - } -#endif - -#if SHADOW_QUALITY >= 2 - - highp float shadowMapDepth = 1.0; - highp float vertexShadowDepth = 1.0; - - if(shadowMapCoord1.x >= -1.0 && shadowMapCoord1.x <= 1.0 && shadowMapCoord1.y >= -1.0 && shadowMapCoord1.y <= 1.0 && shadowMapCoord1.z >= 0.0 && shadowMapCoord1.z <= 1.0) { -#if DEBUG_PSSM == 1 - diffuseMaterial = diffuseMaterial * vec4(0.75, 0.75, 0.5, 1.0) + vec4(0.0, 0.0, 0.5, 0.0); -#endif - - highp vec2 shadowMapPos = ((shadowMapCoord1 / shadowMapCoord1.w + 1.0) / 2.0).st; - shadowMapDepth = texture2D(shadowTexture1, shadowMapPos).z; - vertexShadowDepth = ((shadowMapCoord1 / shadowMapCoord1.w + 1.0) / 2.0).z; - } - - else if(shadowMapCoord2.s >= -1.0 && shadowMapCoord2.s <= 1.0 && shadowMapCoord2.t >= -1.0 && shadowMapCoord2.t <= 1.0 && shadowMapCoord2.z >= 0.0 && shadowMapCoord2.z <= 1.0) { -#if DEBUG_PSSM == 1 - diffuseMaterial = diffuseMaterial * vec4(0.75, 0.50, 0.75, 1.0) + vec4(0.0, 0.5, 0.0, 0.0); -#endif - highp vec2 shadowMapPos = ((shadowMapCoord2 / shadowMapCoord2.w + 1.0) / 2.0).st; - shadowMapDepth = texture2D(shadowTexture2, shadowMapPos).z; - vertexShadowDepth = ((shadowMapCoord2 / shadowMapCoord2.w + 1.0) / 2.0).z; - } - -#if SHADOW_QUALITY >= 3 - - else if(shadowMapCoord3.s >= -1.0 && shadowMapCoord3.s <= 1.0 && shadowMapCoord3.t >= -1.0 && shadowMapCoord3.t <= 1.0 && shadowMapCoord3.z >= 0.0 && shadowMapCoord3.z <= 1.0) { -#if DEBUG_PSSM == 1 - diffuseMaterial = diffuseMaterial * vec4(0.50, 0.75, 0.75, 1.0) + vec4(0.5, 0.0, 0.0, 0.0); -#endif - highp vec2 shadowMapPos = ((shadowMapCoord3 / shadowMapCoord3.w + 1.0) / 2.0).st; - shadowMapDepth = texture2D(shadowTexture3, shadowMapPos).z; - vertexShadowDepth = ((shadowMapCoord3 / shadowMapCoord3.w + 1.0) / 2.0).z; - } - -#endif -#endif - -#if SHADOW_QUALITY >= 1 - if(vertexShadowDepth >= shadowMapDepth && shadowMapDepth < 1.0) { - lamberFactor = 0.0; - specularFactor = 0.0; - } -#endif - - -#if GBUFFER_PASS == 0 || GBUFFER_PASS == 2 - - #if ENABLE_AMBIENT - // -------------------- Add ambient light and alpha component -------------------- - gl_FragColor = vec4(vec3(diffuseMaterial) * material_ambient, material_alpha); - #else - gl_FragColor = vec4(0.0, 0.0, 0.0, material_alpha); + #if GBUFFER_PASS == 2 + lowp vec4 gbuffer_sample = texture2D(gbuffer_frame, gbuffer_uv); + mediump vec3 gbuffer_normal = normalize(2.0 * gbuffer_sample.rgb - 1.0); + mediump float gbuffer_specular_exponent = gbuffer_sample.a; #endif - - #if ENABLE_DIFFUSE - // -------------------- Add diffuse light -------------------- - gl_FragColor += vec4(vec3(diffuseMaterial) * material_diffuse * lamberFactor, 0.0); - #endif - - #if ENABLE_SPECULAR - - // -------------------- Add specular light -------------------- - #if HAS_SPEC_MAP == 1 - gl_FragColor += vec4(material_specular * vec3(texture2D(specularTexture, spec_uv)) * specularFactor, 0.0); - #else - gl_FragColor += vec4(material_specular * specularFactor, 0.0); - #endif - - #endif - - - // -------------------- Multiply light map -------------------- - - #if HAS_LIGHT_MAP - mediump vec3 shadowColor = vec3(texture2D(shadowTexture1, shadowCoord)); - gl_FragColor = vec4(gl_FragColor.r * shadowColor.r, gl_FragColor.g * shadowColor.g, gl_FragColor.b * shadowColor.b, 1.0); - #endif -#endif -#if GBUFFER_PASS == 1 - #if HAS_NORMAL_MAP == 1 - mediump vec3 view_space_normal = tangent_to_view * normal; - #else - mediump vec3 view_space_normal = vec3(model_to_view * vec4(normal, 1.0)); + #if GBUFFER_PASS == 3 + lowp vec4 gbuffer_sample = texture2D(gbuffer_frame, gbuffer_uv); + lowp vec3 gbuffer_lamber_factor = gbuffer_sample.rgb; + lowp float gbuffer_specular_factor = gbuffer_sample.a; #endif + + #if GBUFFER_PASS == 1 + #if HAS_NORMAL_MAP == 1 + // lookup normal from normal map, move from [0,1] to [-1, 1] range, normalize + mediump vec3 normal = normalize(2.0 * texture2D(normalTexture,normal_uv).rgb - 1.0); + mediump vec3 view_space_normal = tangent_to_view_matrix * normal; + #else + mediump vec3 view_space_normal = vec3(model_to_view_matrix * vec4(normal, 1.0)); + #endif gl_FragColor = vec4(view_space_normal * 0.5 + 0.5, material_shininess / 100.0); + #else + #if HAS_DIFFUSE_MAP == 1 + mediump vec4 diffuseMaterial = vec4(vec3(texture2D(diffuseTexture, diffuse_uv)), material_alpha); + #else + mediump vec4 diffuseMaterial = vec4(vec3(1.0), material_alpha); + #endif + + #if ENABLE_PER_PIXEL == 1 + #if HAS_NORMAL_MAP == 1 + // lookup normal from normal map, move from [0,1] to [-1, 1] range, normalize + mediump vec3 normal = normalize(2.0 * texture2D(normalTexture,normal_uv).rgb - 1.0); + #endif + mediump float lamberFactor = max(0.0,dot(lightVec, normal)); + mediump float specularFactor = 0.0; + if(material_shininess > 0.0) { + specularFactor = max(0.0,pow(dot(halfVec,normal), material_shininess)); + } + + + + #if SHADOW_QUALITY == 1 + highp float shadowMapDepth = 1.0; + highp float vertexShadowDepth = 1.0; + highp vec2 shadowMapPos = ((shadowMapCoord1 / shadowMapCoord1.w + 1.0) / 2.0).st; + + if(shadowMapCoord1.x >= -1.0 && shadowMapCoord1.x <= 1.0 && shadowMapCoord1.y >= -1.0 && shadowMapCoord1.y <= 1.0 && shadowMapCoord1.z >= 0.0 && shadowMapCoord1.z <= 1.0) { + #if DEBUG_PSSM == 1 + diffuseMaterial = diffuseMaterial * vec4(0.75, 0.75, 0.5, 1.0) + vec4(0.0, 0.0, 0.5, 0.0); + #endif + shadowMapDepth = texture2D(shadowTexture1, shadowMapPos).z; + vertexShadowDepth = ((shadowMapCoord1 / shadowMapCoord1.w + 1.0) / 2.0).z; + } + #endif + + #if SHADOW_QUALITY >= 2 + + highp float shadowMapDepth = 1.0; + highp float vertexShadowDepth = 1.0; + + if(shadowMapCoord1.x >= -1.0 && shadowMapCoord1.x <= 1.0 && shadowMapCoord1.y >= -1.0 && shadowMapCoord1.y <= 1.0 && shadowMapCoord1.z >= 0.0 && shadowMapCoord1.z <= 1.0) { + #if DEBUG_PSSM == 1 + diffuseMaterial = diffuseMaterial * vec4(0.75, 0.75, 0.5, 1.0) + vec4(0.0, 0.0, 0.5, 0.0); + #endif + highp vec2 shadowMapPos = ((shadowMapCoord1 / shadowMapCoord1.w + 1.0) / 2.0).st; + shadowMapDepth = texture2D(shadowTexture1, shadowMapPos).z; + vertexShadowDepth = ((shadowMapCoord1 / shadowMapCoord1.w + 1.0) / 2.0).z; + } else if(shadowMapCoord2.s >= -1.0 && shadowMapCoord2.s <= 1.0 && shadowMapCoord2.t >= -1.0 && shadowMapCoord2.t <= 1.0 && shadowMapCoord2.z >= 0.0 && shadowMapCoord2.z <= 1.0) { + #if DEBUG_PSSM == 1 + diffuseMaterial = diffuseMaterial * vec4(0.75, 0.50, 0.75, 1.0) + vec4(0.0, 0.5, 0.0, 0.0); + #endif + highp vec2 shadowMapPos = ((shadowMapCoord2 / shadowMapCoord2.w + 1.0) / 2.0).st; + shadowMapDepth = texture2D(shadowTexture2, shadowMapPos).z; + vertexShadowDepth = ((shadowMapCoord2 / shadowMapCoord2.w + 1.0) / 2.0).z; + } + #if SHADOW_QUALITY >= 3 + else if(shadowMapCoord3.s >= -1.0 && shadowMapCoord3.s <= 1.0 && shadowMapCoord3.t >= -1.0 && shadowMapCoord3.t <= 1.0 && shadowMapCoord3.z >= 0.0 && shadowMapCoord3.z <= 1.0) { + #if DEBUG_PSSM == 1 + diffuseMaterial = diffuseMaterial * vec4(0.50, 0.75, 0.75, 1.0) + vec4(0.5, 0.0, 0.0, 0.0); + #endif + highp vec2 shadowMapPos = ((shadowMapCoord3 / shadowMapCoord3.w + 1.0) / 2.0).st; + shadowMapDepth = texture2D(shadowTexture3, shadowMapPos).z; + vertexShadowDepth = ((shadowMapCoord3 / shadowMapCoord3.w + 1.0) / 2.0).z; + } + + #endif + #endif + + #if SHADOW_QUALITY >= 1 + if(vertexShadowDepth >= shadowMapDepth && shadowMapDepth < 1.0) { + lamberFactor = 0.0; + specularFactor = 0.0; + } + #endif + #endif + + #if ENABLE_AMBIENT + // -------------------- Add ambient light and alpha component -------------------- + gl_FragColor = vec4(vec3(diffuseMaterial) * material_ambient, material_alpha); + #else + gl_FragColor = vec4(0.0, 0.0, 0.0, material_alpha); + #endif + + #if ENABLE_DIFFUSE + // -------------------- Add diffuse light -------------------- + gl_FragColor += vec4(vec3(diffuseMaterial) * material_diffuse * lamberFactor, 0.0); + #endif + + #if ENABLE_SPECULAR + + // -------------------- Add specular light -------------------- + #if HAS_SPEC_MAP == 1 && ENABLE_PER_PIXEL == 1 + gl_FragColor += vec4(material_specular * vec3(texture2D(specularTexture, spec_uv)) * specularFactor, 0.0); + #else + gl_FragColor += vec4(material_specular * specularFactor, 0.0); + #endif + + #endif + + + // -------------------- Multiply light map -------------------- + + #if HAS_LIGHT_MAP + mediump vec3 lightMapColor = vec3(texture2D(shadowTexture1, lightmap_uv)); + gl_FragColor = vec4(gl_FragColor.r * lightMapColor.r, gl_FragColor.g * lightMapColor.g, gl_FragColor.b * lightMapColor.b, 1.0); + #endif + #endif + +#if GBUFFER_PASS == 2 + // mediump vec3 gbuffer_normal = normalize(2.0 * gbuffer_sample.rgb - 1.0); + // mediump float gbuffer_specular_exponent = gbuffer_sample.a; #endif +#if GBUFFER_PASS == 3 + // lowp vec3 gbuffer_lamber_factor = gbuffer_sample.rgb; + // lowp float gbuffer_specular_factor = gbuffer_sample.a; + + gl_FragColor = vec4(vec3(gbuffer_lamber_factor), 1.0); + gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0); +#endif } diff --git a/KREngine/KREngine/Shaders/ObjectShader.vsh b/KREngine/KREngine/Shaders/ObjectShader.vsh index 46951f7..21ecae0 100644 --- a/KREngine/KREngine/Shaders/ObjectShader.vsh +++ b/KREngine/KREngine/Shaders/ObjectShader.vsh @@ -29,204 +29,210 @@ // or implied, of Kearwood Gilbert. // -attribute highp vec3 myVertex, myNormal; -attribute highp vec3 myTangent; -attribute mediump vec2 myUV; -attribute mediump vec2 shadowuv; -uniform highp mat4 myMVPMatrix, myShadowMVPMatrix1,myShadowMVPMatrix2,myShadowMVPMatrix3; // mvpmatrix is the result of multiplying the model, view, and projection matrices +attribute highp vec3 vertex_position, vertex_normal, vertex_tangent; +attribute mediump vec2 vertex_uv; +uniform highp mat4 mvp_matrix; // mvp_matrix is the result of multiplying the model, view, and projection matrices -#if GBUFFER_PASS == 1 && HAS_NORMAL_MAP == 1 -uniform highp mat4 model_to_view; -varying highp mat3 tangent_to_view; +#if ENABLE_PER_PIXEL == 1 || GBUFFER_PASS == 1 + #if HAS_DIFFUSE_MAP == 1 || HAS_NORMAL_MAP == 1 || HAS_SPEC_MAP == 1 + varying highp vec2 texCoord; + #endif + #if HAS_NORMAL_MAP == 1 + #if HAS_NORMAL_MAP_SCALE == 1 + uniform highp vec2 normalTexture_Scale; + #endif -#endif + #if HAS_NORMAL_MAP_OFFSET == 1 + uniform highp vec2 normalTexture_Offset; + #endif - -// uniform lowp vec3 material_ambient, material_diffuse, material_specular; -uniform highp vec3 lightDirection; // Must be normalized before entering shader -uniform highp vec3 cameraPosition; - -#if ENABLE_PER_PIXEL == 0 -uniform mediump float material_shininess; -#endif - -#if HAS_DIFFUSE_MAP == 1 || (HAS_NORMAL_MAP == 1 && ENABLE_PER_PIXEL == 1) || HAS_SPEC_MAP == 1 -varying highp vec2 texCoord; -#endif - -#if HAS_LIGHT_MAP == 1 -varying mediump vec2 shadowCoord; -#endif - - -#if ENABLE_PER_PIXEL == 1 -varying mediump vec3 lightVec; -varying mediump vec3 halfVec; + #if HAS_NORMAL_MAP_OFFSET == 1 || HAS_NORMAL_MAP_SCALE == 1 + varying highp vec2 normal_uv; + #endif + #else + varying mediump vec3 normal; + #endif #else -varying mediump float lamberFactor; -varying mediump float specularFactor; + uniform mediump float material_shininess; + #if HAS_DIFFUSE_MAP == 1 + varying highp vec2 texCoord; + #endif #endif -#if HAS_DIFFUSE_MAP_SCALE == 1 -uniform highp vec2 diffuseTexture_Scale; +#if GBUFFER_PASS == 2 || GBUFFER_PASS == 3 + varying mediump vec2 gbuffer_uv; #endif -#if HAS_NORMAL_MAP_SCALE == 1 -uniform highp vec2 normalTexture_Scale; +#if GBUFFER_PASS == 1 + #if HAS_NORMAL_MAP == 1 + uniform highp mat4 model_to_view_matrix; + varying highp mat3 tangent_to_view_matrix; + #endif +#else + + uniform highp vec3 lightDirection; // Must be normalized before entering shader + uniform highp vec3 cameraPosition; + + #if HAS_LIGHT_MAP == 1 + attribute mediump vec2 vertex_lightmap_uv; + varying mediump vec2 lightmap_uv; + #endif + + #if ENABLE_PER_PIXEL == 1 + varying mediump vec3 lightVec; + varying mediump vec3 halfVec; + + #if HAS_SPEC_MAP_OFFSET == 1 || HAS_SPEC_MAP_SCALE == 1 + varying highp vec2 spec_uv; + #endif + + #if HAS_SPEC_MAP_SCALE == 1 + uniform highp vec2 specularTexture_Scale; + #endif + + #if HAS_SPEC_MAP_OFFSET == 1 + uniform highp vec2 specularTexture_Offset; + #endif + + #if SHADOW_QUALITY >= 1 + uniform highp mat4 shadow_mvp1; + varying highp vec4 shadowMapCoord1; + #endif + + #if SHADOW_QUALITY >= 2 + uniform highp mat4 shadow_mvp2; + varying highp vec4 shadowMapCoord2; + #endif + + #if SHADOW_QUALITY >= 3 + uniform highp mat4 shadow_mvp3; + varying highp vec4 shadowMapCoord3; + #endif + + #else + varying mediump float lamberFactor; + varying mediump float specularFactor; + #endif + + #if HAS_DIFFUSE_MAP_SCALE == 1 + uniform highp vec2 diffuseTexture_Scale; + #endif + + #if HAS_DIFFUSE_MAP_OFFSET == 1 + uniform highp vec2 diffuseTexture_Offset; + #endif + + #if HAS_DIFFUSE_MAP_OFFSET == 1 || HAS_DIFFUSE_MAP_SCALE == 1 + varying highp vec2 diffuse_uv; + #endif + #endif -#if HAS_SPEC_MAP_SCALE == 1 -uniform highp vec2 specularTexture_Scale; -#endif -#if HAS_NORMAL_MAP_OFFSET == 1 -uniform highp vec2 normalTexture_Offset; -#endif - -#if HAS_SPEC_MAP_OFFSET == 1 -uniform highp vec2 specularTexture_Offset; -#endif - -#if HAS_DIFFUSE_MAP_OFFSET == 1 -uniform highp vec2 diffuseTexture_Offset; -#endif - -#if HAS_NORMAL_MAP == 0 && ENABLE_PER_PIXEL == 1 -varying mediump vec3 normal; -#endif - -#if SHADOW_QUALITY >= 1 -varying highp vec4 shadowMapCoord1; -#endif - -#if SHADOW_QUALITY >= 2 -varying highp vec4 shadowMapCoord2; -#endif - -#if SHADOW_QUALITY >= 3 -varying highp vec4 shadowMapCoord3; -#endif - -#if (HAS_NORMAL_MAP_OFFSET == 1 || HAS_NORMAL_MAP_SCALE == 1) && ENABLE_PER_PIXEL == 1 -varying highp vec2 normal_uv; -#endif - -#if (HAS_SPEC_MAP_OFFSET == 1|| HAS_SPEC_MAP_SCALE == 1) && ENABLE_PER_PIXEL == 1 -varying highp vec2 spec_uv; -#endif - -#if HAS_DIFFUSE_MAP_OFFSET == 1 || HAS_DIFFUSE_MAP_SCALE == 1 -varying highp vec2 diffuse_uv; -#endif void main() { // Transform position - gl_Position = myMVPMatrix * vec4(myVertex,1.0); + gl_Position = mvp_matrix * vec4(vertex_position,1.0); + +#if GBUFFER_PASS == 2 || GBUFFER_PASS == 3 + gbuffer_uv = gl_Position.xy; +#endif + + #if HAS_DIFFUSE_MAP == 1 || (HAS_NORMAL_MAP == 1 && ENABLE_PER_PIXEL == 1) || (HAS_SPEC_MAP == 1 && ENABLE_PER_PIXEL == 1) + // Pass UV co-ordinates + texCoord = vertex_uv.st; + #endif - -#if HAS_DIFFUSE_MAP == 1 || (HAS_NORMAL_MAP == 1 && ENABLE_PER_PIXEL == 1) || HAS_SPEC_MAP == 1 - // Pass UV co-ordinates - texCoord = myUV.st; -#endif - + // Scaled and translated normal map UV's + #if (HAS_NORMAL_MAP_OFFSET == 1 || HAS_NORMAL_MAP_SCALE == 1) && ENABLE_PER_PIXEL == 1 + normal_uv = texCoord; + + #if HAS_NORMAL_MAP_OFFSET == 1 + normal_uv + normalTexture_Offset; + #endif + + #if HAS_NORMAL_MAP_SCALE == 1 + normal_uv *= normalTexture_Scale; + #endif + + #endif -// Scaled and translated normal map UV's -#if (HAS_NORMAL_MAP_OFFSET == 1 || HAS_NORMAL_MAP_SCALE == 1) && ENABLE_PER_PIXEL == 1 - normal_uv = texCoord; + #if GBUFFER_PASS == 1 + #if HAS_NORMAL_MAP == 1 + mediump vec3 a_bitangent = cross(vertex_normal, vertex_tangent); + tangent_to_view_matrix[0] = vec3(model_to_view_matrix * vec4(vertex_tangent, 1.0)); + tangent_to_view_matrix[1] = vec3(model_to_view_matrix * vec4(a_bitangent, 1.0)); + tangent_to_view_matrix[2] = vec3(model_to_view_matrix * vec4(vertex_normal, 1.0)); + #else + normal = vertex_normal; + #endif + #else + #if HAS_LIGHT_MAP == 1 + // Pass shadow UV co-ordinates + lightmap_uv = vertex_lightmap_uv.st; + #endif -#if HAS_NORMAL_MAP_OFFSET == 1 - normal_uv + normalTexture_Offset; -#endif - -#if HAS_NORMAL_MAP_SCALE == 1 - normal_uv *= normalTexture_Scale; -#endif - -#endif + // Scaled and translated diffuse map UV's + #if HAS_DIFFUSE_MAP_OFFSET == 1 || HAS_DIFFUSE_MAP_SCALE == 1 + diffuse_uv = texCoord; + + #if HAS_DIFFUSE_MAP_OFFSET == 1 + diffuse_uv + diffuseTexture_Offset; + #endif + + #if HAS_DIFFUSE_MAP_SCALE == 1 + diffuse_uv *= diffuseTexture_Scale; + #endif + #endif - -// Scaled and translated diffuse map UV's -#if HAS_DIFFUSE_MAP_OFFSET == 1 || HAS_DIFFUSE_MAP_SCALE == 1 - diffuse_uv = texCoord; - -#if HAS_DIFFUSE_MAP_OFFSET == 1 - diffuse_uv + diffuseTexture_Offset; -#endif - -#if HAS_DIFFUSE_MAP_SCALE == 1 - diffuse_uv *= diffuseTexture_Scale; -#endif - -#endif + #if ENABLE_PER_PIXEL == 1 + // Scaled and translated specular map UV's + #if (HAS_SPEC_MAP_OFFSET == 1 || HAS_SPEC_MAP_SCALE == 1) && ENABLE_PER_PIXEL == 1 + spec_uv = texCoord; + #if HAS_SPEC_MAP_OFFSET == 1 + spec_uv + specularTexture_Offset; + #endif + + #if HAS_SPEC_MAP_SCALE == 1 + spec_uv *= specularTexture_Scale; + #endif + #endif + + + #if SHADOW_QUALITY >= 1 + shadowMapCoord1 = shadow_mvp1 * vec4(vertex_position,1.0); + #endif + + #if SHADOW_QUALITY >= 2 + shadowMapCoord2 = shadow_mvp2 * vec4(vertex_position,1.0); + #endif + + #if SHADOW_QUALITY >= 3 + shadowMapCoord3 = shadow_mvp3 * vec4(vertex_position,1.0); + #endif - -// Scaled and translated specular map UV's -#if (HAS_SPEC_MAP_OFFSET == 1 || HAS_SPEC_MAP_SCALE == 1) && ENABLE_PER_PIXEL == 1 - spec_uv = texCoord; -#if HAS_SPEC_MAP_OFFSET == 1 - spec_uv + specularTexture_Offset; -#endif - -#if HAS_SPEC_MAP_SCALE == 1 - spec_uv *= specularTexture_Scale; -#endif - -#endif - - - -#if HAS_LIGHT_MAP == 1 - // Pass shadow UV co-ordinates - shadowCoord = shadowuv.st; -#endif - -#if SHADOW_QUALITY >= 1 - shadowMapCoord1 = myShadowMVPMatrix1 * vec4(myVertex,1.0); -#endif - -#if SHADOW_QUALITY >= 2 - shadowMapCoord2 = myShadowMVPMatrix2 * vec4(myVertex,1.0); -#endif - -#if SHADOW_QUALITY >= 3 - shadowMapCoord3 = myShadowMVPMatrix3 * vec4(myVertex,1.0); -#endif - - -#if (HAS_NORMAL_MAP == 1 && ENABLE_PER_PIXEL == 1) || GBUFFER_PASS == 1 - mediump vec3 a_bitangent = cross(myNormal, myTangent); -#endif - - // ----------- Directional Light (Sun) ----------- -#if HAS_NORMAL_MAP == 1 && ENABLE_PER_PIXEL == 1 - // ----- Calculate per-pixel lighting in tangent space, for normal mapping ------ - mediump vec3 eyeVec = normalize(cameraPosition - myVertex); - - lightVec = normalize(vec3(dot(lightDirection, myTangent), dot(lightDirection, a_bitangent), dot(lightDirection, myNormal))); - halfVec = normalize(vec3(dot(eyeVec, myTangent), dot(eyeVec, a_bitangent), dot(eyeVec, myNormal))); - halfVec = normalize(halfVec + lightVec); // Normalizing anyways, no need to divide by 2 - -#else - -#if ENABLE_PER_PIXEL == 1 - // ------ Calculate per-pixel lighting without normal mapping ------ - normal = myNormal; - lightVec = lightDirection; - halfVec = normalize((normalize(cameraPosition - myVertex) + lightVec)); // Normalizing anyways, no need to divide by 2 -#else - // ------ Calculate per-vertex lighting ------ - mediump vec3 halfVec = normalize((normalize(cameraPosition - myVertex) + lightDirection)); // Normalizing anyways, no need to divide by 2 - lamberFactor = max(0.0,dot(lightDirection, myNormal)); - specularFactor = max(0.0,pow(dot(halfVec,myNormal), material_shininess)); -#endif -#endif - - -#if GBUFFER_PASS == 1 && HAS_NORMAL_MAP == 1 - tangent_to_view[0] = vec3(model_to_view * vec4(myTangent, 1.0)); - tangent_to_view[1] = vec3(model_to_view * vec4(a_bitangent, 1.0)); - tangent_to_view[2] = vec3(model_to_view * vec4(myNormal, 1.0)); -#endif + // ----------- Directional Light (Sun) ----------- + #if HAS_NORMAL_MAP == 1 + // ----- Calculate per-pixel lighting in tangent space, for normal mapping ------ + mediump vec3 a_bitangent = cross(vertex_normal, vertex_tangent); + mediump vec3 eyeVec = normalize(cameraPosition - vertex_position); + + lightVec = normalize(vec3(dot(lightDirection, vertex_tangent), dot(lightDirection, a_bitangent), dot(lightDirection, vertex_normal))); + halfVec = normalize(vec3(dot(eyeVec, vertex_tangent), dot(eyeVec, a_bitangent), dot(eyeVec, vertex_normal))); + halfVec = normalize(halfVec + lightVec); // Normalizing anyways, no need to divide by 2 + #else + // ------ Calculate per-pixel lighting without normal mapping ------ + normal = vertex_normal; + lightVec = lightDirection; + halfVec = normalize((normalize(cameraPosition - vertex_position) + lightVec)); // Normalizing anyways, no need to divide by 2 + #endif + #else + // ------ Calculate per-vertex lighting ------ + mediump vec3 halfVec = normalize((normalize(cameraPosition - vertex_position) + lightDirection)); // Normalizing anyways, no need to divide by 2 + lamberFactor = max(0.0,dot(lightDirection, vertex_normal)); + specularFactor = max(0.0,pow(dot(halfVec,vertex_normal), material_shininess)); + #endif + #endif } diff --git a/KREngine/KREngine/Shaders/ShadowShader.vsh b/KREngine/KREngine/Shaders/ShadowShader.vsh index d04c1f3..759aced 100644 --- a/KREngine/KREngine/Shaders/ShadowShader.vsh +++ b/KREngine/KREngine/Shaders/ShadowShader.vsh @@ -28,12 +28,8 @@ #define SHADOW_BIAS 0.01 -attribute highp vec3 myVertex; -/* -attribute mediump vec2 myUV; -varying mediump vec2 texCoord; -*/ -uniform highp mat4 myShadowMVPMatrix1; // Shadowmvpmatrix is the result of multiplying the model, view, and projection matrices +attribute highp vec3 vertex_position; +uniform highp mat4 shadow_mvp1; // Shadowmvpmatrix is the result of multiplying the model, view, and projection matrices @@ -41,13 +37,13 @@ void main() { // Transform position /* - position = myShadowMVPMatrix1 * vec4(myVertex,1.0); + position = shadow_mvp1 * vec4(vertex_position,1.0); */ - gl_Position = myShadowMVPMatrix1 * vec4(myVertex,1.0); + gl_Position = shadow_mvp1 * vec4(vertex_position,1.0); gl_Position.z += SHADOW_BIAS; /* // Pass UV co-ordinates - texCoord = myUV.st; + texCoord = vertex_uv.st; */ }