OpenGLRenderer: Add shader source on compilation error
This commit is contained in:
parent
c33ab779d1
commit
ebd1318512
|
|
@ -26,7 +26,8 @@ namespace Nz::GL
|
||||||
|
|
||||||
inline void Compile();
|
inline void Compile();
|
||||||
|
|
||||||
inline bool GetCompilationStatus(std::string* error = nullptr);
|
inline bool GetCompilationStatus(std::string* error = nullptr) const;
|
||||||
|
inline std::string GetSource() const;
|
||||||
|
|
||||||
inline void SetBinarySource(GLenum binaryFormat, const void* binary, GLsizei length);
|
inline void SetBinarySource(GLenum binaryFormat, const void* binary, GLsizei length);
|
||||||
inline void SetSource(const char* source, GLint length);
|
inline void SetSource(const char* source, GLint length);
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ namespace Nz::GL
|
||||||
context.glCompileShader(m_objectId);
|
context.glCompileShader(m_objectId);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool Shader::GetCompilationStatus(std::string* error)
|
inline bool Shader::GetCompilationStatus(std::string* error) const
|
||||||
{
|
{
|
||||||
assert(m_objectId);
|
assert(m_objectId);
|
||||||
const Context& context = EnsureDeviceContext();
|
const Context& context = EnsureDeviceContext();
|
||||||
|
|
@ -45,6 +45,28 @@ namespace Nz::GL
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline std::string Shader::GetSource() const
|
||||||
|
{
|
||||||
|
assert(m_objectId);
|
||||||
|
const Context& context = EnsureDeviceContext();
|
||||||
|
|
||||||
|
GLint sourceLength;
|
||||||
|
context.glGetShaderiv(m_objectId, GL_SHADER_SOURCE_LENGTH, &sourceLength);
|
||||||
|
|
||||||
|
if (sourceLength <= 1)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
std::string source;
|
||||||
|
source.resize(sourceLength - 1);
|
||||||
|
|
||||||
|
GLsizei length;
|
||||||
|
context.glGetShaderSource(m_objectId, sourceLength, &length, &source[0]);
|
||||||
|
|
||||||
|
assert(length == sourceLength - 1);
|
||||||
|
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
inline void Shader::SetBinarySource(GLenum binaryFormat, const void* binary, GLsizei length)
|
inline void Shader::SetBinarySource(GLenum binaryFormat, const void* binary, GLsizei length)
|
||||||
{
|
{
|
||||||
assert(m_objectId);
|
assert(m_objectId);
|
||||||
|
|
|
||||||
|
|
@ -159,6 +159,10 @@ namespace Nz
|
||||||
{
|
{
|
||||||
std::string errorLog;
|
std::string errorLog;
|
||||||
if (!shader.GetCompilationStatus(&errorLog))
|
if (!shader.GetCompilationStatus(&errorLog))
|
||||||
throw std::runtime_error("Failed to compile shader: " + errorLog);
|
{
|
||||||
|
std::string source = shader.GetSource();
|
||||||
|
|
||||||
|
throw std::runtime_error("Failed to compile shader: " + errorLog + "\nSource: " + source);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue