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));