SDL OpenGL 应用程序在发布模式下崩溃 [重复]

Posted

技术标签:

【中文标题】SDL OpenGL 应用程序在发布模式下崩溃 [重复]【英文标题】:SDL OpenGL app crashing in release mode [duplicate] 【发布时间】:2016-09-06 23:42:51 【问题描述】:

我在visualstudio中遇到了一个奇怪的opengl问题,如果我在发布模式下构建程序,每个opengl函数都指向NULL。

我试过 glew 和 gl3w 都没有用

glew/gl3w 在上下文创建后初始化并在调试模式下运行良好

项目设置是默认的,我只包括包含文件夹和相应的 lib 文件夹

有人遇到过类似的问题吗?

#include<SDL.h>
#include<GL\glew.h>
#include<assert.h>

int main(int argc, char* args[])

    SDL_Init(SDL_INIT_VIDEO);

    SDL_Window *window;
    SDL_GLContext context;

    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);

    window = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
    context = SDL_GL_CreateContext(window);
    SDL_GL_MakeCurrent(window, context);
    glewExperimental = GL_TRUE;
    assert(!glewInit());

    GLuint id;
    glGenVertexArrays(1, &id);

    SDL_Quit();
    return 0;

【问题讨论】:

感谢对我的帖子投反对票非常有帮助,顺便说一句,我是新人 请您提供更多信息 - 您是如何加载 GLEW/GL3W 的,您的项目设置是什么等。如果某些内容正在发布但未调试,则意味着您遇到了一些未定义的行为,或者您的项目设置配置不正确。 我使用默认项目选项,除了额外的包含/库 @Creysys 如果你需要帮助,你需要做一个minimal, complete, and verifiable example,而不是在这里发布。根据您提供的信息,几乎不可能知道出了什么问题。 好的,谢谢我添加了一个最小的、完整的、可验证的例子 【参考方案1】:
assert(!glewInit());

这不会在发布模式下编译。所以glewInit() 永远不会被调用,glGenVertexArrays() 将保持为 NULL。

调用 NULL 函数指针通常不起作用。

【讨论】:

谢谢,现在我觉得自己像个白痴一样尝试每个编译器选项^^

以上是关于SDL OpenGL 应用程序在发布模式下崩溃 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SDL 窗口没有响应

我的 C++ OpenGL SDL 程序没有按预期工作

SDL2:如何同时拥有 SDL2 菜单和 OpenGL 上下文?

SDL/C++ OpenGL 程序,如何阻止 SDL 捕获 SIGINT

SDL+OpenGL 程序没有出现在 linux 上

OpenGL / SDL2:模板缓冲区位在 PC 上始终为 0