Browse Source

Added AbstractShaderProgram::validate().

pull/278/head
Vladimír Vondruš 13 years ago
parent
commit
1fd8c7691a
  1. 19
      src/AbstractShaderProgram.cpp
  2. 10
      src/AbstractShaderProgram.h

19
src/AbstractShaderProgram.cpp

@ -96,6 +96,25 @@ AbstractShaderProgram::~AbstractShaderProgram() {
if(_id) glDeleteProgram(_id); if(_id) glDeleteProgram(_id);
} }
std::pair<bool, std::string> AbstractShaderProgram::validate() {
glValidateProgram(_id);
/* Check validation status */
GLint success, logLength;
glGetProgramiv(_id, GL_VALIDATE_STATUS, &success);
glGetProgramiv(_id, GL_INFO_LOG_LENGTH, &logLength);
/* Error or warning message. The string is returned null-terminated, scrap
the \0 at the end afterwards */
std::string message(logLength, '\n');
if(!message.empty()) {
glGetProgramInfoLog(_id, message.size(), nullptr, &message[0]);
message.resize(logLength-1);
}
return {success, std::move(message)};
}
void AbstractShaderProgram::use() { void AbstractShaderProgram::use() {
/* Use only if the program isn't already in use */ /* Use only if the program isn't already in use */
GLuint& current = Context::current()->state()->shaderProgram->current; GLuint& current = Context::current()->state()->shaderProgram->current;

10
src/AbstractShaderProgram.h

@ -322,6 +322,16 @@ class MAGNUM_EXPORT AbstractShaderProgram {
/** @brief OpenGL program ID */ /** @brief OpenGL program ID */
inline GLuint id() const { return _id; } inline GLuint id() const { return _id; }
/**
* @brief Validate program
*
* Returns validation status and optional validation message.
* @see @fn_gl{ValidateProgram}, @fn_gl{GetProgram} with
* @def_gl{VALIDATE_STATUS}, @def_gl{INFO_LOG_LENGTH},
* @fn_gl{GetProgramInfoLog}
*/
std::pair<bool, std::string> validate();
/** /**
* @brief Use shader for rendering * @brief Use shader for rendering
* *

Loading…
Cancel
Save