[ad_1]
当我打电话时
while (glGetError() != GL_NO_ERROR);
它给出了以下异常:
Exception thrown at 0x00000000 in Application.exe: 0xC0000005: Access violation executing location 0x00000000.
我的错误检查代码是这样的:
#pragma once #include <glad/glad.h> #include <iostream> #define ASSERT(x) if (!(x)) __debugbreak(); #define GLCall(x) GLClearError(); x; ASSERT(GLLogCall(#x, __FILE__, __LINE__)); static void GLClearError(); static bool GLLogCall(const char* function, const char* file, int line); static void GLClearError() { while (glGetError() != GL_NO_ERROR); } static bool GLLogCall(const char* function, const char* file, int line) { GLenum error = glGetError(); if (error) { std::cout << "GL Error of type (" << error << ") at " << function << " in file: " << file << " called on line: " << line << std::endl; return false; } return true; }
我打电话后打电话
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { std::cout << "Failed to initialize GLAD" << std::endl; return -1; } glViewport(0, 0, 640, 480);
。 当我通过打印 GL_VERSION 字符串进行检查时,OpenGL 似乎已正确初始化。
确实很混乱,没什么好说的。
我尝试过的:
我只尝试更改我的初始化代码,但是也失败了。
再说一次,我很不清楚该做什么,所以我只能勉强做任何事情。
解决方案1
这很奇怪。 主要是因为我广泛使用 OpenGL,但我从未发现有必要这样做。 您可能会更成功地找出错误并修复它们。 我不久前编写了这个函数,它对我很有用。 它为最后一个错误代码生成一个文本字符串。 这里是 :
C++
/////////////////////////////////////////////////////////////////////////////// // generate an error string from the last OpenGL error along with a formatted message int GetGLerrorMsg( PSTR buffer, int bufferSize, PCSTR format, ... ) { va_list args; va_start( args, format ); int amount = vsnprintf( buffer, bufferSize, format, args ); GLenum errorno = glGetError(); if( errorno != GL_NO_ERROR ) _sntprintf( buffer + amount, bufferSize - amount, " - %d: %s", errorno, (PCSTR) gluErrorString( errorno ) ); va_end( args ); return errorno; }
需要注意的是:它使用 GLU 库为消息生成错误字符串。 这会生成一个文本字符串,其中包含用户定义的消息以及错误的文本描述。 以下是调用它的代码示例:
C++
GetGLerrorMsg( buffer, bufferSize, "Call of wglCreateContext failed : " );
请注意,它接受变量参数,因此您几乎可以传递任何可以显示的内容。 从那里,您可以对消息字符串执行您想要的操作,例如将其发送到调试器、将其记录到文件、显示在控制台上等。
[ad_2]
コメント