OpenGL 4.4がインストールされ、対応する4.4コアGLADビルドとGLFWバージョン3.2(Visual Studio 2015で編集中)があります。私はhttps://learnopengl.com/#!In-Practice/Debuggingで説明するようにコールバック関数を使用しています:glDebugMessageCallbackが原因でアクセス違反が発生しました(GLFW + GLAD)
void APIENTRY glDebugOutput(GLenum source, GLenum type, GLuint id, GLenum severity,
GLsizei length, const GLchar *message, const void *userParam);
私は、次の機能があります。
GLFWwindow* init(int width, int height, const char* header) {
GLFWwindow* window;
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
window = glfwCreateWindow(width, height, header, NULL, NULL);
if (window == NULL) {
glfwTerminate();
throw std::runtime_error("Failed to create GLFW window.");
}
glfwMakeContextCurrent(window);
glfwSetFramebufferSizeCallback(window, resizeCallback);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
glfwTerminate();
throw std::runtime_error("Failed to initialize GLAD");
}
GLint flags; glGetIntegerv(GL_CONTEXT_FLAGS, &flags);
if (flags & GL_CONTEXT_FLAG_DEBUG_BIT)
{
glEnable(GL_DEBUG_OUTPUT);
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
glDebugMessageCallback(glDebugOutput, nullptr); // segfault on this line
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE);
}
return window;
}
を私は無駄に、GLAD再インストールし、コールバックにAPIENTRYを変更しようとしました。私は完全に迷っています。
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
はGL 3.3コアである:あなたがここに要求しているもの
GL 4.4を使用している場合、なぜGL 3.3のみをロードしていますか? –
あなたの 'glDebugOutput'コールバックには何がありますか? –
@NicolBolasすべてのもののうち...うまくいけば、ありがとう! –