gpt4 book ai didi

c++ - SDL2 丢失 OpenGL 上下文或函数未定义

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:32 26 4
gpt4 key购买 nike

我正在启动显示、渲染器和 OGL 上下文。这些都没有给出错误,以下是我如何创建这些元素。

if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
{
printf("SDL initialization failed: %s\n", SDL_GetError());
return false;
}

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

if ((display = SDL_CreateWindow("",
50, 50, 600, 600, SDL_WINDOW_OPENGL)) == NULL)
{
printf("Could not create window: %s\n", SDL_GetError());
return false;
}

if ((graphics = SDL_CreateRenderer(display, -1, 0)) == NULL)
{
printf("Could not get renderer: %s\n", SDL_GetError());
return false;
}

if ((*context = SDL_GL_CreateContext(display)) == NULL)
{
printf("Could not get context: %s\n", SDL_GetError());
return false;
}

GLenum err = glewInit();
if (GLEW_OK != err)
{
printf("GLEW couldn't be initialized: %s\n", glewGetErrorString(err));
return false;
}

scene = SceneManager();

return true;

现在,在这些之后,像 glClearColor 或 glClear 这样的方法按预期工作,但是,像 glCreateProgram 或 glActiveTexture 这样的方法指向 NULL 并抛出运行时异常。如果我不在标题中包含 glew,那么这些函数甚至都不会被识别。

我是否以某种方式丢失了我的 OpenGL 上下文并以错误结束,或者这些函数是否未在 SDL 中定义,我必须使用另一个库来链接这些函数?

最佳答案

根据您在评论中对SceneManager 构造函数的描述,您的问题与何时调用构造函数有关。

I called it in the constructor of SceneManager, and as you can see it happens right after everything is created. Again to be on the safe side, I tried calling it before scenemanager, it didn't output anything. So it somehow gets destroyed in here somewhere?

在声明任何范围 SceneManager scene 的开头,C++ 使用默认构造函数隐式构造对象。因此,scene 实际上是 long 在您开始在此行上进行复制分配之前构建的:scene = SceneManager ();

您并没有“失去您的 OpenGL 上下文”,您只是在第一次调用 scene 的构造函数时没有这样的上下文。这就是为什么您通常会像 SceneManager* scene 一样声明这些东西,然后将 scene 指向的对象的实例化推迟到很久以后使用 new。您可以这样做,也可以在构造函数中停止这样做。但是您不能按照现在的方式做事,否则您会在 SDL 甚至为它们创建上下文之前调用 GL 函数。

关于c++ - SDL2 丢失 OpenGL 上下文或函数未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21319371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com