gpt4 book ai didi

c++ - SDL_GL_CreateContext() 不工作

转载 作者:行者123 更新时间:2023-11-28 05:14:05 27 4
gpt4 key购买 nike

我正在尝试使用 SDL 学习 openGL。我的程序在我家里的电脑上运行良好,但在我学校的电脑上却无法运行。更具体地说,它不适用于我学校的特定型号计算机 OptiPlex 9030 AIO。当我调用函数 SDL_GL_CreateContext() 时,它返回 null,表示它失败了。我的问题是为什么以及如何解决它?在过去的几天里,我一直在努力弄清楚,但我就是不明白。我认为唯一可能导致此问题的是,它不适用于所有使用 intel hd 4000 gpu 的计算机。

SDL_GetError() 的输出是操作成功完成。

我正在使用适用于 visual studio 和 openGL 4.5 的最新版本的 SDL2 开发人员库。

这是我的代码

this->window = NULL;
// Initialize SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0)
sdl_die("Couldn't initialize SDL");
atexit(SDL_Quit);
SDL_GL_LoadLibrary(NULL); // Default OpenGL is fine.

// Request an OpenGL 4.5 context (should be core)
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 5);
// Also request a depth buffer
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
// Request a debug context.
SDL_GL_SetAttribute(
SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_DEBUG_FLAG
);

// Create the window
if (SCREEN_FULLSCREEN) {
this->window = SDL_CreateWindow(
caption,
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
0, 0, SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_OPENGL
);
}
else {
this->window = SDL_CreateWindow(
caption,
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_OPENGL
);
}
if (this->window == NULL) sdl_die("Couldn't set video mode");


//not working code
this->maincontext = SDL_GL_CreateContext(this->window);
if (maincontext == NULL)
sdl_die("Failed to create OpenGL context");

// Check OpenGL properties
printf("OpenGL loaded\n");
gladLoadGLLoader(SDL_GL_GetProcAddress);
printf("Vendor: %s\n", glGetString(GL_VENDOR));
printf("Renderer: %s\n", glGetString(GL_RENDERER));
printf("Version: %s\n", glGetString(GL_VERSION));

// Enable the debug callback
glEnable(GL_DEBUG_OUTPUT);
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
glDebugMessageCallback(this->openglCallbackFunction, nullptr);
glDebugMessageControl(
GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, true
);

// Use v-sync
SDL_GL_SetSwapInterval(1);

// Disable depth test and face culling.
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);

int w, h;
SDL_GetWindowSize(this->window, &w, &h);
glViewport(0, 0, w, h);
glClearColor(0.0f, 0.5f, 1.0f, 0.0f);

我的 sdl_die() 代码也给出错误信息是

void sdl_die(const char * message)
{
fprintf(stderr, "%s: %s\n", message, SDL_GetError());
exit(2);
}

提前致谢。

最佳答案

代码对我来说看起来没问题,所以你应该检查当前安装的 GPU 是否支持你请求的 OpenGL 版本 4.5。您可以使用 Caps-Viewer 来检查这一点(例如,您可以在这里找到一个:[GL-CapsViewer 1])。如果不是:确保安装了最新的 GPU 驱动程序,并检查 GPU 是否支持您请求的 OpenGL 版本。

如果不支持,请尝试将版本降低到 3.1。

关于c++ - SDL_GL_CreateContext() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43002599/

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