From f2ab02da135a0142f0f65e744775c40856a84211 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Fri, 10 Apr 2015 13:00:36 -0300 Subject: [PATCH] Mostly fixed the precision of love's uniform matrices not matching between shader stages in OpenGL ES. --- src/scripts/graphics.lua | 14 ++++++++++--- src/scripts/graphics.lua.h | 43 +++++++++++++++++++++++++++++++------- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/scripts/graphics.lua b/src/scripts/graphics.lua index b031f9484..70bdf92f6 100644 --- a/src/scripts/graphics.lua +++ b/src/scripts/graphics.lua @@ -42,9 +42,17 @@ GLSL.SYNTAX = [[ -- Uniforms shared by the vertex and pixel shader stages. GLSL.UNIFORMS = [[ #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 #define TransformMatrix gl_ModelViewMatrix #define ProjectionMatrix gl_ProjectionMatrix diff --git a/src/scripts/graphics.lua.h b/src/scripts/graphics.lua.h index 29a1bcd8d..6dd2139a9 100644 --- a/src/scripts/graphics.lua.h +++ b/src/scripts/graphics.lua.h @@ -109,13 +109,42 @@ const unsigned char graphics_lua[] = 0x65, 0x73, 0x2e, 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, - 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, 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,