|
|
@@ -33,22 +33,19 @@ namespace oxygine
|
|
|
return i;
|
|
|
}
|
|
|
|
|
|
- GLint ShaderProgramGL::getShaderInfoLog(GLuint shader, std::vector<char>& log)
|
|
|
+ bool ShaderProgramGL::getShaderBuildLog(GLuint shader, std::string& str)
|
|
|
{
|
|
|
GLint length = 0;
|
|
|
GLint success = GL_TRUE;
|
|
|
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)
|
|
|
@@ -105,22 +102,17 @@ namespace oxygine
|
|
|
int num = (int)(ptr - sources);
|
|
|
oxglShaderSource(shader, num, sources, 0);
|
|
|
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;
|