[英]SDL2 either lost OpenGL context or functions not defined
我正在从显示器启动显示器,渲染器和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
的构造函数的描述,您的问题与调用构造函数时有关。
我在SceneManager的构造函数中调用了它,您可以看到它在创建所有内容后立即发生。 出于安全考虑,我再次尝试在Scenemanager之前调用它,但它没有输出任何内容。 因此,它以某种方式在这里的某个地方被破坏了?
在声明任何范围的SceneManager scene
开始时,C ++都会使用默认构造函数隐式构造该对象。 因此, scene
实际上是在您可以在此行上进行复制分配之前很久才构造的: scene = SceneManager ();
您并不是在“丢失OpenGL上下文”,而是在第一次调用scene
的构造函数时根本就没有。 这就是为什么通常要声明诸如SceneManager* scene
类的东西,然后将对象scene
点的实例化推迟到以后再使用new
。 您可以这样做,也可以在构造函数中停止这样做。 但是您不能以现在拥有它们的方式来做事情,否则您将在SDL甚至为它们创建上下文之前调用GL函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.