c++ - SDL OpenGL 应用程序在 Release模式下崩溃

标签 c++ visual-studio opengl sdl glew

<分区>

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

我试过 glew 和 gl3w 都不起作用

glew/gl3w 在创建上下文后初始化,在 Debug模式下它运行良好

项目设置是默认的,我只包括包含文件夹和相应的 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;
}

最佳答案

assert(!glewInit());

这不会在 Release模式下编译。因此 glewInit() 永远不会被调用,glGenVertexArrays() 将保持为 NULL。

调用 NULL 函数指针通常是行不通的。

关于c++ - SDL OpenGL 应用程序在 Release模式下崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39359315/

相关文章:

C++0x 可变参数模板通过引用传递

c++ - 使用自动引用类在 C++ 中创建堆栈时出现问题

c++ - 冒泡排序输出未排序

c++ - C++ 11的序列压缩函数?

windows - 如何在 Visual Studio 2008 中使用 Windows 符号包?

vb.net - 为什么我的基本默认 .acceptbutton 不起作用?

c++ - OpenGL 和 GLFW : Not drawing polygon

visual-studio - Visual Studio : multiple projects with same name in one solution

OpenGL:窗口坐标到实际像素坐标

c++ - 3D/FPS 相机问题 - SDL2