ecere/gfx/drivers/OpenGL/Default Shader: Fixed mistakes in lights 3,4,7
authorJerome St-Louis <jerome@ecere.com>
Wed, 3 Aug 2016 00:16:09 +0000 (20:16 -0400)
committerJerome St-Louis <jerome@ecere.com>
Wed, 3 Aug 2016 00:16:09 +0000 (20:16 -0400)
- Also properly set to version 110 and changed normal and cube map matrices to be 3x3

ecere/src/gfx/drivers/gl3/default.frag
ecere/src/gfx/drivers/gl3/default.vert
ecere/src/gfx/drivers/gl3/defaultShader.ec

index 80728fb..a748ddc 100644 (file)
@@ -1,4 +1,4 @@
-precision highp float;
+// precision highp float;
 
 #if LIGHTING_ON
    #if PER_VERTEX_COLOR
@@ -48,7 +48,7 @@ precision highp float;
 
 #if ENVIRONMENT_MAPPING
    uniform samplerCube envTex;
-   uniform mat4 cubemap_matrix;
+   uniform mat3 cubemap_matrix;
 
    #if ENVIRONMENT_REFLECTION
       uniform float matReflectivity;
@@ -253,7 +253,7 @@ void main(void)
       computeLight(bool(LIGHT3_POSITIONAL) ? lights[3] : lightsPos[3], n, lEye, ambient, diffuse, specular,
          bool(LIGHT3_POSITIONAL), bool(LIGHT3_SPOT), bool(LIGHT3_ATT),
          bool(LIGHT3_SPOT) ? lightsSpotDir[3] : vec3(0), bool(LIGHT3_SPOT) ? lightsSpotCutOffCos[3] : 0.0, bool(LIGHT3_SPOT) ? lightsSpotExp[3] : 0.0,
-         bool(LIGHT3_ATT) ? lightsAtt[3] : vec(1,0,0),
+         bool(LIGHT3_ATT) ? lightsAtt[3] : vec3(1,0,0),
          lightsAmbient[3], lightsDiffuse[3], lightsSpecular[3]);
    #endif
    #if NUM_LIGHTS > 4 && LIGHT4_ON
@@ -274,15 +274,15 @@ void main(void)
       computeLight(bool(LIGHT6_POSITIONAL) ? lights[6] : lightsPos[6], n, lEye, ambient, diffuse, specular,
          bool(LIGHT6_POSITIONAL), bool(LIGHT6_SPOT), bool(LIGHT6_ATT),
          bool(LIGHT6_SPOT) ? lightsSpotDir[6] : vec3(0), bool(LIGHT6_SPOT) ? lightsSpotCutOffCos[6] : 0.0, bool(LIGHT6_SPOT) ? lightsSpotExp[6] : 0.0,
-         lightsAmbient[6], lightsDiffuse[6], lightsSpecular[6],
-         bool(LIGHT6_ATT) ? lightsAtt[6] : vec3(1,0,0));
+         bool(LIGHT6_ATT) ? lightsAtt[6] : vec3(1,0,0),
+         lightsAmbient[6], lightsDiffuse[6], lightsSpecular[6]);
    #endif
    #if NUM_LIGHTS > 7 && LIGHT7_ON
       computeLight(bool(LIGHT7_POSITIONAL) ? lights[7] : lightsPos[7], n, lEye, ambient, diffuse, specular,
          bool(LIGHT7_POSITIONAL), bool(LIGHT7_SPOT), bool(LIGHT7_ATT),
          bool(LIGHT7_SPOT) ? lightsSpotDir[7] : vec3(0), bool(LIGHT7_SPOT) ? lightsSpotCutOffCos[7] : 0.0, bool(LIGHT7_SPOT) ? lightsSpotExp[7] : 0.0,
-         lightsAmbient[7], lightsDiffuse[7], lightsSpecular[7],
-         bool(LIGHT7_ATT) ? lightsAtt[7] : vec3(1,0,0));
+         bool(LIGHT7_ATT) ? lightsAtt[7] : vec3(1,0,0),
+         lightsAmbient[7], lightsDiffuse[7], lightsSpecular[7]);
    #endif
 
    #if MAT_SPECULAR && SPECULAR_MAPPING
@@ -329,7 +329,7 @@ void main(void)
    {
       float opacity = c.w;
       v = refract(eyeToSurface, n, matRefractionETA);
-      c = vec4(opacity * c + (1.0 - opacity) * textureCube(envTex, vec3(cubemap_matrix * vec4(v, 1.0))));
+      c = vec4(opacity * c + (1.0 - opacity) * textureCube(envTex, vec3(cubemap_matrix * v)));
    }
    #endif
 
@@ -340,7 +340,7 @@ void main(void)
       reflectivity *= texture2D(reflectTex, texCoord).r;
    #endif
       v = reflect(eyeToSurface, n);
-      c = (1.0 - reflectivity) * c + reflectivity * textureCube(envTex, vec3(cubemap_matrix * vec4(v, 1.0)));
+      c = (1.0 - reflectivity) * c + reflectivity * textureCube(envTex, vec3(cubemap_matrix * v));
    }
    #endif
 #endif
index 26a84ce..bf9f859 100644 (file)
@@ -19,7 +19,7 @@ uniform mat4 projection_matrix;
    attribute vec3 tangent2;
 
    uniform float nearPlane;
-   uniform mat4 normals_matrix;
+   uniform mat3 normals_matrix;
 
    #if PER_VERTEX_COLOR
       varying vec4 diffuseColor; // w: opacity
@@ -69,10 +69,10 @@ void main(void)
       ambientColor = color.xyz;
    #endif
 
-   tNormal = mat3(normals_matrix) * normal;
+   tNormal = normals_matrix * normal;
 #if NORMALS_MAPPING
-   tTangent1 = mat3(normals_matrix) * tangent1;
-   tTangent2 = mat3(normals_matrix) * tangent2;
+   tTangent1 = normals_matrix * tangent1;
+   tTangent2 = normals_matrix * tangent2;
 #endif
 #elif PER_VERTEX_COLOR
    fColor = matDiffuse * color;
index ca968e1..ef4640e 100644 (file)
@@ -190,9 +190,9 @@ public:
    float modelView[16];
    float projection[16];
    float matTexture[16];
-   float cubemap_matrix[16];
+   float cubemap_matrix[9];
 
-   float normalsMatrix[16];
+   float normalsMatrix[9];
    float nearPlane;
    float globalAmbient[3];
 
@@ -263,10 +263,14 @@ public:
       int i;
 
 #ifdef _DEBUG
-       PrintLn("Compiling shader for state: ", state);
+       //PrintLn("Compiling shader for state: ", state);
 #endif
 
+#if defined(__EMSCRIPTEN__)
       defs.concatf("#version 100\n");
+#else
+      defs.concatf("#version 110\n");
+#endif
       defs.concatf("\n#define NUM_LIGHTS %d",               8);
       defs.concatf("\n#define MODELVIEW %d",                state.modelView          ? 1 : 0);
       defs.concatf("\n#define PER_VERTEX_COLOR %d",         state.perVertexColor     ? 1 : 0);
@@ -300,7 +304,7 @@ public:
       defs.concatf("\n\n#line 0\n");
 
 #ifdef _DEBUG
-        printf((String)defs._string);
+      //puts((String)defs._string);
 #endif
       return defs;
    }
@@ -378,7 +382,7 @@ public:
          glUniform1f(shader.uNearPlane, nearPlane);
          glUniform3fv(shader.uGlobalAmbient, 1, globalAmbient);
 
-         glUniformMatrix4fv(shader.uNormalsMatrix, 1, GL_FALSE, normalsMatrix);
+         glUniformMatrix3fv(shader.uNormalsMatrix, 1, GL_FALSE, normalsMatrix);
 
          if(state.normalsMapping)
             glUniform1i(shader.uBumpTex, 1);
@@ -392,7 +396,7 @@ public:
       if(state.environmentMapping)
       {
          glUniform1i(shader.uEnvTex, 3);
-         glUniformMatrix4fv(shader.uCubeMapMatrix, 1, GL_FALSE, cubemap_matrix);
+         glUniformMatrix3fv(shader.uCubeMapMatrix, 1, GL_FALSE, cubemap_matrix);
          if(state.reflection)
             glUniform1f(shader.uMatReflectivity, reflectivity);
          if(state.refraction)
@@ -417,14 +421,13 @@ public:
    void setCamera(Camera camera)
    {
       double * c = camera.inverseTranspose.array;
-      float m[16] =
+      float m[9] =
       {
-         (float) c[0], (float) c[1], (float)-c[2], 0,
-         (float)-c[4], (float) c[5], (float) c[6], 0,
-         (float)-c[8], (float) c[9], (float) c[10], 0,
-         0, 0, 0, 1
+         (float) c[0], (float) c[1], (float)-c[2],
+         (float)-c[4], (float) c[5], (float) c[6],
+         (float)-c[8], (float) c[9], (float) c[10]
       };
-      memcpy(cubemap_matrix, m, 16 * sizeof(float));
+      memcpy(cubemap_matrix, m, 9 * sizeof(float));
       uniformsModified = true;
    }
 
@@ -459,14 +462,13 @@ public:
          t.Transpose(inv);
          inv.Inverse(t);
          {
-            float m[16] =
+            float m[9] =
             {
-               (float)i[0],(float)i[1],(float)i[2],(float)i[3],
-               (float)i[4],(float)i[5],(float)i[6],(float)i[7],
-               (float)i[8],(float)i[9],(float)i[10],(float)i[11],
-               (float)i[12],(float)i[13],(float)i[14],(float)i[15]
+               (float)i[0],(float)i[1],(float)i[2],
+               (float)i[4],(float)i[5],(float)i[6],
+               (float)i[8],(float)i[9],(float)i[10]
             };
-            memcpy(normalsMatrix, m, 16 * sizeof(float));
+            memcpy(normalsMatrix, m, 9 * sizeof(float));
          }
 
          uniformsModified = true;