Bläddra i källkod

minor fix to shader logging after merge

dmuratshin 9 år sedan
förälder
incheckning
55c32e4fa8
2 ändrade filer med 20 tillägg och 28 borttagningar
  1. 18 26
      oxygine/src/core/gl/ShaderProgramGL.cpp
  2. 2 2
      oxygine/src/core/gl/ShaderProgramGL.h

+ 18 - 26
oxygine/src/core/gl/ShaderProgramGL.cpp

@@ -33,22 +33,19 @@ namespace oxygine
         return i;
         return i;
     }
     }
 
 
-    GLint ShaderProgramGL::getShaderInfoLog(GLuint shader, std::vector<char>& log)
+    bool ShaderProgramGL::getShaderBuildLog(GLuint shader, std::string& str)
     {
     {
         GLint length = 0;
         GLint length = 0;
         GLint success = GL_TRUE;
         GLint success = GL_TRUE;
         oxglGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
         oxglGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
-        if (length)
-        {
-            oxglGetShaderiv(shader, GL_COMPILE_STATUS, &success);
-            if (success != GL_TRUE)
-            {
-                log.resize(length);
-                oxglGetShaderInfoLog(shader, (int)log.size(), NULL, &log.front());
-            }
-        }
+        str.resize(length);
+
+        oxglGetShaderInfoLog(shader, (int)str.size(), NULL, &str.front());
+
+        GLint status = GL_TRUE;
+        oxglGetShaderiv(shader, GL_COMPILE_STATUS, &status);
 
 
-        return success;
+        return status == GL_TRUE;
     }
     }
 
 
     unsigned int ShaderProgramGL::createShader(unsigned int type, const char* data, const char* prepend, const char* append, error_policy ep)
     unsigned int ShaderProgramGL::createShader(unsigned int type, const char* data, const char* prepend, const char* append, error_policy ep)
@@ -105,22 +102,17 @@ namespace oxygine
         int num = (int)(ptr - sources);
         int num = (int)(ptr - sources);
         oxglShaderSource(shader, num, sources, 0);
         oxglShaderSource(shader, num, sources, 0);
         oxglCompileShader(shader);
         oxglCompileShader(shader);
-        
-        if(ep == ep_show_error || ep == ep_show_warning)
+
+        std::string log;
+        bool success = getShaderBuildLog(shader, log);
+
+        if (success)
+        {
+            log::messageln("compiled shader: %s", log.c_str());
+        }
+        else
         {
         {
-            std::vector<char> log;
-            GLint status = getShaderInfoLog(shader, log);
-            if(status != GL_TRUE)
-            {
-                log::messageln("shader build error: %s", &log.front());
-                if(ep == ep_show_error)
-                {
-                    OX_ASSERT(!"shader build error");
-                    exit(1);
-                }
-            }
-
-            CHECKGL();
+            handleErrorPolicy(ep, "can't compile shader: %s", log.c_str());
         }
         }
 
 
         return shader;
         return shader;

+ 2 - 2
oxygine/src/core/gl/ShaderProgramGL.h

@@ -13,9 +13,9 @@ namespace oxygine
         unsigned int    getID() const;
         unsigned int    getID() const;
         int             getUniformLocation(const char* id) const;
         int             getUniformLocation(const char* id) const;
 
 
-        static unsigned int createShader(unsigned int type, const char* data, const char* prepend, const char* append, error_policy ep = ep_show_error );
+        static unsigned int createShader(unsigned int type, const char* data, const char* prepend, const char* append, error_policy ep = ep_show_error);
         static unsigned int createProgram(int vs, int fs, const VertexDeclarationGL* decl);
         static unsigned int createProgram(int vs, int fs, const VertexDeclarationGL* decl);
-        static GLint getShaderInfoLog(GLuint shader, std::vector<char>& log);
+        static bool getShaderBuildLog(GLuint shader, std::string& str);
 
 
     private:
     private:
         GLuint _program;
         GLuint _program;