Kaydet (Commit) 8f1b58b5 authored tarafından Michael Meeks's avatar Michael Meeks

vcl: fix un-initialized log length & clean copy/paste bits.

Change-Id: I39cd9ef32fafa2894ffde961d87adc6aac9d4a4f
üst fa6a174b
...@@ -59,6 +59,39 @@ OString loadShader(const OUString& rFilename) ...@@ -59,6 +59,39 @@ OString loadShader(const OUString& rFilename)
} }
namespace {
int LogCompilerError(GLuint nId, const rtl::OUString &rDetail,
const rtl::OUString &rName, bool bShaderNotProgram)
{
int InfoLogLength = 0;
CHECK_GL_ERROR();
if (bShaderNotProgram)
glGetShaderiv (nId, GL_INFO_LOG_LENGTH, &InfoLogLength);
else
glGetProgramiv(nId, GL_INFO_LOG_LENGTH, &InfoLogLength);
CHECK_GL_ERROR();
if ( InfoLogLength > 0 )
{
std::vector<char> ErrorMessage(InfoLogLength+1);
if (bShaderNotProgram)
glGetShaderInfoLog (nId, InfoLogLength, NULL, &ErrorMessage[0]);
else
glGetProgramInfoLog(nId, InfoLogLength, NULL, &ErrorMessage[0]);
CHECK_GL_ERROR();
ErrorMessage.push_back('\0');
SAL_WARN("vcl.opengl", rDetail << " shader " << nId << " compile for " << rName << " failed : " << &ErrorMessage[0]);
}
else
SAL_WARN("vcl.opengl", rDetail << " shader: " << rName << " compile " << nId << "failed without error log");
return 0;
}
}
GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName,const OUString& rFragmentShaderName) GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName,const OUString& rFragmentShaderName)
{ {
// Create the shaders // Create the shaders
...@@ -66,7 +99,6 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName,const OUString ...@@ -66,7 +99,6 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName,const OUString
GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER); GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
GLint Result = GL_FALSE; GLint Result = GL_FALSE;
int InfoLogLength;
// Compile Vertex Shader // Compile Vertex Shader
OString aVertexShaderSource = loadShader(rVertexShaderName); OString aVertexShaderSource = loadShader(rVertexShaderName);
...@@ -76,21 +108,9 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName,const OUString ...@@ -76,21 +108,9 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName,const OUString
// Check Vertex Shader // Check Vertex Shader
glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result); glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result);
if ( !Result ) if (!Result)
{ return LogCompilerError(VertexShaderID, "vertex",
glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); rVertexShaderName, true);
if ( InfoLogLength > 0 )
{
std::vector<char> VertexShaderErrorMessage(InfoLogLength+1);
glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
VertexShaderErrorMessage.push_back('\0');
SAL_WARN("vcl.opengl", "vertex shader compile for " << rVertexShaderName << " failed : " << &VertexShaderErrorMessage[0]);
}
else
SAL_WARN("vcl.opengl", "vertex shader: " << rVertexShaderName << " compile failed without error log");
return 0;
}
// Compile Fragment Shader // Compile Fragment Shader
OString aFragmentShaderSource = loadShader(rFragmentShaderName); OString aFragmentShaderSource = loadShader(rFragmentShaderName);
...@@ -100,22 +120,9 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName,const OUString ...@@ -100,22 +120,9 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName,const OUString
// Check Fragment Shader // Check Fragment Shader
glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result); glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result);
if ( !Result ) if (!Result)
{ return LogCompilerError(FragmentShaderID, "fragment",
glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); rFragmentShaderName, true);
if ( InfoLogLength > 0 )
{
std::vector<char> FragmentShaderErrorMessage(InfoLogLength+1);
glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
FragmentShaderErrorMessage.push_back('\0');
SAL_WARN("vcl.opengl", "fragment shader compile for " << rFragmentShaderName << " failed : " << &FragmentShaderErrorMessage[0]);
}
else
SAL_WARN("vcl.opengl", "fragment shader compile failed without error log");
return 0;
}
// Link the program // Link the program
GLint ProgramID = glCreateProgram(); GLint ProgramID = glCreateProgram();
...@@ -128,21 +135,8 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName,const OUString ...@@ -128,21 +135,8 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName,const OUString
// Check the program // Check the program
glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result);
if ( !Result ) if (!Result)
{ return LogCompilerError(ProgramID, "program", "<both>", false);
glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
if ( InfoLogLength > 0 )
{
std::vector<char> ProgramErrorMessage(InfoLogLength+1);
glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
ProgramErrorMessage.push_back('\0');
SAL_WARN("vcl.opengl", "Shader Program failed : " << &ProgramErrorMessage[0]);
}
else
SAL_WARN("vcl.opengl", "shader program link failed without error log");
return 0;
}
CHECK_GL_ERROR(); CHECK_GL_ERROR();
return ProgramID; return ProgramID;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment