glGetError()
GLenum error = glGetError()会返回错误码,利用此机制,配合C++的宏,写一个简易的错误处理warp
#define ASSERT(x) if(!(x)) __debugbreak();
#define GLCall(x) GLClearError();\
x;\
ASSERT(GLLogCall(#x, __FILE__, __LINE__));
static void GLClearError()
{
while (glGetError() != GL_NO_ERROR);
}
static bool GLLogCall(const char* function, const char* file, int line)
{
while (GLenum error = glGetError())
{
std::cout << "[OpenGL Error](" << error << "): " << function <<
" " << file << ":" << line << std::endl;
return false;
}
return true;
}
//使用例子
GLuint buffer;
GLCall(glGenBuffers(1, &buffer)); //其实buffer里面存的是句柄
GLCall(glBindBuffer(GL_ARRAY_BUFFER, buffer));
GLCall(glBufferData(GL_ARRAY_BUFFER, 4 * 2 * sizeof(float), positions, GL_STATIC_DRAW));
GLCall(glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, nullptr));