Browse Source

Mostly fixed the precision of love's uniform matrices not matching between shader stages in OpenGL ES.

Alex Szpakowski 10 years ago
parent
commit
f2ab02da13
2 changed files with 47 additions and 10 deletions
  1. 11 3
      src/scripts/graphics.lua
  2. 36 7
      src/scripts/graphics.lua.h

+ 11 - 3
src/scripts/graphics.lua

@@ -42,9 +42,17 @@ GLSL.SYNTAX = [[
 -- Uniforms shared by the vertex and pixel shader stages.
 -- Uniforms shared by the vertex and pixel shader stages.
 GLSL.UNIFORMS = [[
 GLSL.UNIFORMS = [[
 #ifdef GL_ES
 #ifdef GL_ES
-uniform mat4 TransformMatrix;
-uniform mat4 ProjectionMatrix;
-uniform mat4 TransformProjectionMatrix;
+// According to the GLSL ES 1.0 spec, uniform precision must match between stages,
+// but we can't guarantee that highp is always supported in fragment shaders...
+// We *really* don't want to use mediump for these in vertex shaders though.
+#if defined(VERTEX) || defined(GL_FRAGMENT_PRECISION_HIGH)
+#define LOVE_UNIFORM_PRECISION highp
+#else
+#define LOVE_UNIFORM_PRECISION mediump
+#endif
+uniform LOVE_UNIFORM_PRECISION mat4 TransformMatrix;
+uniform LOVE_UNIFORM_PRECISION mat4 ProjectionMatrix;
+uniform LOVE_UNIFORM_PRECISION mat4 TransformProjectionMatrix;
 #else
 #else
 #define TransformMatrix gl_ModelViewMatrix
 #define TransformMatrix gl_ModelViewMatrix
 #define ProjectionMatrix gl_ProjectionMatrix
 #define ProjectionMatrix gl_ProjectionMatrix

+ 36 - 7
src/scripts/graphics.lua.h

@@ -109,13 +109,42 @@ const unsigned char graphics_lua[] =
 	0x65, 0x73, 0x2e, 0x0a,
 	0x65, 0x73, 0x2e, 0x0a,
 	0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x55, 0x4e, 0x49, 0x46, 0x4f, 0x52, 0x4d, 0x53, 0x20, 0x3d, 0x20, 0x5b, 0x5b, 0x0a,
 	0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x55, 0x4e, 0x49, 0x46, 0x4f, 0x52, 0x4d, 0x53, 0x20, 0x3d, 0x20, 0x5b, 0x5b, 0x0a,
 	0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x47, 0x4c, 0x5f, 0x45, 0x53, 0x0a,
 	0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x47, 0x4c, 0x5f, 0x45, 0x53, 0x0a,
-	0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 
-	0x66, 0x6f, 0x72, 0x6d, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x3b, 0x0a,
-	0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x3b, 0x0a,
-	0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 
-	0x66, 0x6f, 0x72, 0x6d, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x72, 
-	0x69, 0x78, 0x3b, 0x0a,
+	0x2f, 0x2f, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 
+	0x65, 0x20, 0x47, 0x4c, 0x53, 0x4c, 0x20, 0x45, 0x53, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x73, 0x70, 0x65, 0x63, 
+	0x2c, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 
+	0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 
+	0x65, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x67, 0x65, 0x73, 0x2c, 0x0a,
+	0x2f, 0x2f, 0x20, 0x62, 0x75, 0x74, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x27, 0x74, 0x20, 0x67, 0x75, 
+	0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 
+	0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 
+	0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x68, 0x61, 
+	0x64, 0x65, 0x72, 0x73, 0x2e, 0x2e, 0x2e, 0x0a,
+	0x2f, 0x2f, 0x20, 0x57, 0x65, 0x20, 0x2a, 0x72, 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x2a, 0x20, 0x64, 0x6f, 0x6e, 
+	0x27, 0x74, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x64, 
+	0x69, 0x75, 0x6d, 0x70, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 
+	0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x20, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x6f, 
+	0x75, 0x67, 0x68, 0x2e, 0x0a,
+	0x23, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x56, 0x45, 0x52, 0x54, 0x45, 0x58, 
+	0x29, 0x20, 0x7c, 0x7c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x47, 0x4c, 0x5f, 0x46, 0x52, 
+	0x41, 0x47, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 
+	0x49, 0x47, 0x48, 0x29, 0x0a,
+	0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4c, 0x4f, 0x56, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x46, 0x4f, 
+	0x52, 0x4d, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x0a,
+	0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a,
+	0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4c, 0x4f, 0x56, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x46, 0x4f, 
+	0x52, 0x4d, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x75, 
+	0x6d, 0x70, 0x0a,
+	0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a,
+	0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x4c, 0x4f, 0x56, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x46, 0x4f, 
+	0x52, 0x4d, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 
+	0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x3b, 0x0a,
+	0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x4c, 0x4f, 0x56, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x46, 0x4f, 
+	0x52, 0x4d, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 
+	0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x3b, 0x0a,
+	0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x4c, 0x4f, 0x56, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x46, 0x4f, 
+	0x52, 0x4d, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x20, 
+	0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 
+	0x6e, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x3b, 0x0a,
 	0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a,
 	0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a,
 	0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x4d, 
 	0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x4d, 
 	0x61, 0x74, 0x72, 0x69, 0x78, 0x20, 0x67, 0x6c, 0x5f, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77, 
 	0x61, 0x74, 0x72, 0x69, 0x78, 0x20, 0x67, 0x6c, 0x5f, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x69, 0x65, 0x77,