Browse Source

Fix normal offset GLSL code for GLES. Set default mobile multiplier for normal offset to 2.

Lasse Öörni 9 years ago
parent
commit
f908fa4cfd

+ 1 - 1
Source/Urho3D/Graphics/Renderer.cpp

@@ -272,7 +272,7 @@ Renderer::Renderer(Context* context) :
     occluderSizeThreshold_(0.025f),
     mobileShadowBiasMul_(2.0f),
     mobileShadowBiasAdd_(0.0001f),
-    mobileNormalOffsetMul_(1.0f),
+    mobileNormalOffsetMul_(2.0f),
     numOcclusionBuffers_(0),
     numShadowCameras_(0),
     shadersChangedFrameNumber_(M_MAX_UNSIGNED),

+ 1 - 1
Source/Urho3D/Graphics/Renderer.h

@@ -236,7 +236,7 @@ public:
     void SetMobileShadowBiasMul(float mul);
     /// Set shadow depth bias addition for mobile platforms (OpenGL ES.) No effect on desktops. Default 0.0001.
     void SetMobileShadowBiasAdd(float add);
-    /// Set shadow normal offset multiplier for mobile platforms (OpenGL ES.) No effect on desktops. Default 1.
+    /// Set shadow normal offset multiplier for mobile platforms (OpenGL ES.) No effect on desktops. Default 2.
     void SetMobileNormalOffsetMul(float mul);
     /// Force reload of shaders.
     void ReloadShaders();

+ 6 - 1
bin/CoreData/Shaders/GLSL/Lighting.glsl

@@ -77,7 +77,12 @@ float GetVertexLightVolumetric(int index, vec3 worldPos)
 vec4 GetShadowPos(int index, vec3 normal, vec4 projWorldPos)
 {
     #ifdef NORMALOFFSET
-        float normalOffsetScale[4] = float[](cNormalOffsetScale.x, cNormalOffsetScale.y, cNormalOffsetScale.z, cNormalOffsetScale.w);
+        float normalOffsetScale[4];
+        normalOffsetScale[0] = cNormalOffsetScale.x;
+        normalOffsetScale[1] = cNormalOffsetScale.y;
+        normalOffsetScale[2] = cNormalOffsetScale.z;
+        normalOffsetScale[3] = cNormalOffsetScale.w;
+
         #ifdef DIRLIGHT
             float cosAngle = clamp(1.0 - dot(normal, cLightDir), 0.0, 1.0);
         #else