Browse Source

Merge pull request #48 from Neo7k/dev

Added error policy to ShaderProgramGL.
Denis Muratshin 9 years ago
parent
commit
e80bbf7269
2 changed files with 24 additions and 15 deletions
  1. 22 14
      oxygine/src/core/gl/ShaderProgramGL.cpp
  2. 2 1
      oxygine/src/core/gl/ShaderProgramGL.h

+ 22 - 14
oxygine/src/core/gl/ShaderProgramGL.cpp

@@ -33,31 +33,25 @@ namespace oxygine
         return i;
     }
 
-    void printShaderInfoLog(GLuint shader)
+    GLint ShaderProgramGL::getShaderInfoLog(GLuint shader, std::vector<char>& log)
     {
         GLint length = 0;
+        GLint success = GL_TRUE;
         oxglGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
         if (length)
         {
-            GLint success;
             oxglGetShaderiv(shader, GL_COMPILE_STATUS, &success);
             if (success != GL_TRUE)
             {
-
-                std::vector<char> bf;
-                bf.resize(length);
-                oxglGetShaderInfoLog(shader, (int)bf.size(), NULL, &bf.front());
-
-                log::messageln("shader build error: %s", &bf.front());
-                OX_ASSERT(!"shader build error");
-                exit(1);
+                log.resize(length);
+                oxglGetShaderInfoLog(shader, (int)log.size(), NULL, &log.front());
             }
         }
 
-        CHECKGL();
+        return success;
     }
 
-    unsigned int ShaderProgramGL::createShader(unsigned int type, const char* data, const char* prepend, const char* append)
+    unsigned int ShaderProgramGL::createShader(unsigned int type, const char* data, const char* prepend, const char* append, error_policy ep)
     {
         GLuint shader = oxglCreateShader(type);
 
@@ -111,9 +105,23 @@ namespace oxygine
         int num = (int)(ptr - sources);
         oxglShaderSource(shader, num, sources, 0);
         oxglCompileShader(shader);
-        printShaderInfoLog(shader);
+        
+        if(ep == ep_show_error || ep == ep_show_warning)
+        {
+            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();
+            CHECKGL();
+        }
 
         return shader;
     }

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

@@ -13,8 +13,9 @@ namespace oxygine
         unsigned int    getID() const;
         int             getUniformLocation(const char* id) const;
 
-        static unsigned int createShader(unsigned int type, const char* data, const char* prepend, const char* append);
+        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 GLint getShaderInfoLog(GLuint shader, std::vector<char>& log);
 
     private:
         GLuint _program;