gpt4 book ai didi

c++ - glClear() 不工作

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

出于某种原因,我正在尝试创建一个旋转的立方体 bur,我在 OpenGL 中清除屏幕时遇到了问题。我将 OpenGL 与 SDL2 一起使用来创建窗口并将内容渲染到窗口,但我不确定为什么它不起作用。

#include <iostream>
#include "SDL2/SDL.h"
#include "GL/glew.h"

SDL_Window* window;
SDL_GLContext glContext;

void CreateWindow(SDL_Window* window, SDL_GLContext glContext, const std::string& title, int width, int height) {
SDL_Init(SDL_INIT_EVERYTHING);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
if (window == NULL) {
std::cerr << "Window could not be created" << std::endl;
}
glContext = SDL_GL_CreateContext(window);
if (glContext == NULL) {
std::cerr << "OpenGL context could not be opened" << std::endl;
}
GLuint status = glewInit();
if (status != GLEW_OK) {
std::cerr << "GLEW could not be initialized" << std::endl;
}
}
void DestroyWindow() {
SDL_GL_CreateContext(window);
SDL_DestroyWindow(window);
SDL_Quit();
}

void draw() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
SDL_GL_SwapWindow(window);
}

int main() {
CreateWindow(window, glContext, "Hello", 800, 600);
draw();
SDL_Delay(2000);
DestroyWindow();

return 0;
}

我构建并运行它创建窗口的程序,不清除屏幕然后在 SDL_Delay() 之后关闭窗口。我对 OpenGL 有点陌生,很想知道我做错了什么以避免将来出现这种情况。提前致谢!

最佳答案

问题在于函数 CreateWindow 按值接受 window。您创建一个窗口并将其存储在局部变量 中,而全局变量window 的值仍未定义。稍后,在 draw 函数中,您调用了 SDL_GL_SwapWindow(window),也就是说,您使用一些未定义的值调用了 SDL_GL_SwapWindow

查看您的代码风格,最简单的选择是从 CreateWindow 函数中删除 windowglContext 参数并直接写入全局变量。

更好的 C++ 解决方案是创建一个包含所有这些变量的类。

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

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