Browse Source

Fixed GLSL #version statement to come before defines.

Lasse Öörni 14 years ago
parent
commit
28dedc34c4
2 changed files with 22 additions and 5 deletions
  1. 20 5
      Engine/Graphics/OpenGL/OGLShaderVariation.cpp
  2. 2 0
      SourceAssets/GLSLShaders/Bloom.vert

+ 20 - 5
Engine/Graphics/OpenGL/OGLShaderVariation.cpp

@@ -85,18 +85,33 @@ bool ShaderVariation::Create()
     }
     
     // Prepend the defines to the shader code
-    String shaderCode;
+    // Check if there is a version definition; it must stay in the beginning
+    String shaderCode(sourceCode_.Get(), sourceCodeLength_);
+    String defines;
+    String version;
+    
+    if (shaderCode.StartsWith("#version"))
+    {
+        unsigned firstLineEnd = shaderCode.Find('\n') + 1;
+        if (firstLineEnd != String::NPOS)
+        {
+            version = shaderCode.Substring(0, firstLineEnd);
+            shaderCode = shaderCode.Substring(firstLineEnd);
+        }
+    }
+    
     for (unsigned i = 0; i < defines_.Size(); ++i)
     {
         Vector<String> nameAndValue = defines_[i].Split('=');
         if (nameAndValue.Size() < 2)
-            shaderCode += "#define " + defines_[i] + "\n";
+            defines += "#define " + defines_[i] + "\n";
         else
-            shaderCode += "#define " + nameAndValue[0] + " " + nameAndValue[1] + "\n";
+            defines += "#define " + nameAndValue[0] + " " + nameAndValue[1] + "\n";
     }
     if (!defines_.Empty())
-        shaderCode += "\n";
-    shaderCode += String(sourceCode_.Get(), sourceCodeLength_);
+        defines += "\n";
+    
+    shaderCode = version + defines + shaderCode;
     
     const char* shaderCStr = shaderCode.CString();
     glShaderSource(object_, 1, &shaderCStr, 0);

+ 2 - 0
SourceAssets/GLSLShaders/Bloom.vert

@@ -1,3 +1,5 @@
+#version 120
+
 #include "Uniforms.vert"
 #include "Transform.vert"
 #include "ScreenPos.vert"