From 1df9ac00ca0eed1943c8df0c749ad0a91ebee49a Mon Sep 17 00:00:00 2001 From: kearwood Date: Fri, 20 Apr 2012 01:06:12 +0000 Subject: [PATCH] Reduced precision of shader variables to increase performance OSX library now compiling again --HG-- extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%4052 --- KREngine/KREngine/Classes/KRShader.cpp | 4 ++++ KREngine/KREngine/Classes/KRShader.h | 4 ++++ KREngine/KREngine/Shaders/ObjectShader.fsh | 2 -- KREngine/KREngine/Shaders/ObjectShader.vsh | 4 ++-- .../KREngine/Shaders/light_directional.fsh | 22 ++++--------------- 5 files changed, 14 insertions(+), 22 deletions(-) diff --git a/KREngine/KREngine/Classes/KRShader.cpp b/KREngine/KREngine/Classes/KRShader.cpp index 6fea6b7..d7be72c 100644 --- a/KREngine/KREngine/Classes/KRShader.cpp +++ b/KREngine/KREngine/Classes/KRShader.cpp @@ -167,6 +167,8 @@ KRShader::~KRShader() { } } +#if TARGET_OS_IPHONE + void KRShader::bind(KRCamera *pCamera, KRMat4 &matModelToView, KRMat4 &mvpMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, int gBufferPass) { glUseProgram(m_iProgram); @@ -240,6 +242,8 @@ void KRShader::bind(KRCamera *pCamera, KRMat4 &matModelToView, KRMat4 &mvpMatrix } +#endif + GLuint KRShader::getProgram() { return m_iProgram; } diff --git a/KREngine/KREngine/Classes/KRShader.h b/KREngine/KREngine/Classes/KRShader.h index 99af4b7..ffe8b8f 100644 --- a/KREngine/KREngine/Classes/KRShader.h +++ b/KREngine/KREngine/Classes/KRShader.h @@ -51,8 +51,12 @@ public: GLuint getProgram(); char *getKey(); +#if TARGET_OS_IPHONE + void bind(KRCamera *pCamera, KRMat4 &matModelToView, KRMat4 &mvpMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, int gBufferPass); +#endif + enum { KRENGINE_ATTRIB_VERTEX, KRENGINE_ATTRIB_NORMAL, diff --git a/KREngine/KREngine/Shaders/ObjectShader.fsh b/KREngine/KREngine/Shaders/ObjectShader.fsh index 8d40c7c..9d65408 100644 --- a/KREngine/KREngine/Shaders/ObjectShader.fsh +++ b/KREngine/KREngine/Shaders/ObjectShader.fsh @@ -258,7 +258,5 @@ void main() gl_FragColor = vec4(gl_FragColor.r * lightMapColor.r, gl_FragColor.g * lightMapColor.g, gl_FragColor.b * lightMapColor.b, 1.0); #endif - //gl_FragColor = vec4(vec3(specularFactor), 1.0); - #endif } diff --git a/KREngine/KREngine/Shaders/ObjectShader.vsh b/KREngine/KREngine/Shaders/ObjectShader.vsh index 44a0252..031d3c5 100644 --- a/KREngine/KREngine/Shaders/ObjectShader.vsh +++ b/KREngine/KREngine/Shaders/ObjectShader.vsh @@ -111,11 +111,11 @@ uniform highp mat4 mvp_matrix; // mvp_matrix is the result of multiplying t #endif #if HAS_DIFFUSE_MAP_SCALE == 1 - uniform highp vec2 diffuseTexture_Scale; + uniform highp vec2 diffuseTexture_Scale; #endif #if HAS_DIFFUSE_MAP_OFFSET == 1 - uniform highp vec2 diffuseTexture_Offset; + uniform highp vec2 diffuseTexture_Offset; #endif #if HAS_DIFFUSE_MAP_OFFSET == 1 || HAS_DIFFUSE_MAP_SCALE == 1 diff --git a/KREngine/KREngine/Shaders/light_directional.fsh b/KREngine/KREngine/Shaders/light_directional.fsh index 5b1e68a..4e49c28 100644 --- a/KREngine/KREngine/Shaders/light_directional.fsh +++ b/KREngine/KREngine/Shaders/light_directional.fsh @@ -30,42 +30,28 @@ uniform sampler2D gbuffer_frame; uniform sampler2D gbuffer_depth; uniform highp vec3 lightDirection; // Must be normalized and converted to view space before entering shader -uniform highp mat4 model_to_view_matrix; uniform mediump vec4 viewport; void main() { - - - - mediump vec2 gbuffer_uv = vec2(gl_FragCoord.xy / viewport.zw); - - - - lowp vec4 gbuffer_sample = texture2D(gbuffer_frame, gbuffer_uv); mediump vec3 gbuffer_normal = 2.0 * gbuffer_sample.rgb - 1.0; mediump float gbuffer_specular_exponent = gbuffer_sample.a * 100.0; - mediump vec3 view_space_light = lightDirection; // vec3(model_to_view_matrix * vec4(lightDirection, 1.0)); - - mediump float lamberFactor = max(0.0,dot(view_space_light, gbuffer_normal)); + mediump float lamberFactor = max(0.0,dot(lightDirection, gbuffer_normal)); - - - highp vec3 view_space_vertex_position; + mediump vec3 view_space_vertex_position; view_space_vertex_position.xy = ((2.0 * gl_FragCoord.xy) - (2.0 * viewport.xy)) / (viewport.zw) - 1.0; - //view_space_vertex_position.z = -texture2D(gbuffer_depth, gbuffer_uv).r * 2.0; view_space_vertex_position.z = (2.0 * -texture2D(gbuffer_depth, gbuffer_uv).r - gl_DepthRange.near - gl_DepthRange.far) / (gl_DepthRange.far - gl_DepthRange.near); - - highp vec3 halfVec = normalize((normalize(vec3(0.0, 0.0, 0.0) - view_space_vertex_position) + view_space_light)); // Normalizing anyways, no need to divide by 2 + mediump float specularFactor = 0.0; if(gbuffer_specular_exponent > 0.0) { + mediump vec3 halfVec = normalize((normalize(vec3(0.0, 0.0, 0.0) - view_space_vertex_position) + lightDirection)); // Normalizing anyways, no need to divide by 2 specularFactor = clamp(pow(dot(halfVec,normalize(gbuffer_normal)), gbuffer_specular_exponent), 0.0, 1.0); }