OpenGL,不能将 glDebugMessageCallback 与 sdl 一起使用,访问冲突错误,GLEW + SDL,C++

问题描述 投票:0回答:0

我是 OpenGL 的新手,我不知道出了什么问题,似乎我不能使用 glDebugMessageCallback 函数,在下一行代码中抛出访问冲突错误,当我将它与“glfw”一起使用时它起作用了但它现在似乎不起作用,提前致谢

ErrorHandler.hpp

#define GLCall(x) x;\
    if(isError) __debugbreak();

static bool isError{ false };
namespace ErrorHandler {
    void APIENTRY GLDebugMessageCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam);
}

ErrorHandler.cpp

void APIENTRY ErrorHandler::GLDebugMessageCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam)
{
    isError = true;
    const char* _source;
    const char* _type;
    const char* _severity;

    switch (source) ...
    switch (type) ...
    switch (severity) ...

    if (_severity != "NOTIFICATION") {
        fprintf(stderr, "OpenGL error [%d]: %s of %s severity, raised from %s: %s\n",
            id, _type, _severity, _source, message);
    }
 }

Game.cpp

Game::Game(const char* title, uint16_t width, uint16_t height)
{
    if (SDL_Init(SDL_INIT_VIDEO) < 0) ...

    m_window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL);
    if (!m_window) ...
    
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_DEBUG_FLAG);

    SDL_GL_SetSwapInterval(1);
    glewExperimental = GL_TRUE;
    if (!glewInit()) ...
    m_context = SDL_GL_CreateContext(m_window);
    if (!m_context) ...

    printf("%s\n", glGetString(GL_VERSION));

#ifdef _DEBUG
    glEnable(GL_DEBUG_OUTPUT);
    glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
    glDebugMessageCallback(ErrorHandler::GLDebugMessageCallback, 0);
#endif
    m_run();
}

我试过:

1- 将 glDebugMessageCallback 移动到不同的行(在初始化 glew 之后,在创建上下文之后)。

2-我尝试使用另一个函数作为回调。

3- 我试图明确设置 OpenGL 版本 (4.6.0) 和 (4.4.0)。

4-我试图删除任何 sdl 标志(配置文件标志和版本标志)。

一切都给出相同的结果(访问冲突),而它在 GLFW 项目中运行良好

c++ opengl sdl glew
© www.soinside.com 2019 - 2024. All rights reserved.