gpt4 book ai didi

opengl - 使用 OpenGL 和 SDL 处理窗口大小调整

转载 作者:行者123 更新时间:2023-12-03 18:54:47 25 4
gpt4 key购买 nike

根据我在应用程序窗口周围绘制和移动正方形的程序的代码,我在调整应用程序窗口大小时遇到​​了麻烦。当我相应地处理调整大小并更改状态时,屏幕上应该绘制并且在调整大小之前的所有内容都消失了。我不知道为什么,因为在调整窗口大小期间没有任何对象内部坐标发生变化。

我的问题是谁能指出我正确的方向来解决我的问题。(代码编译得很好)

void ResizeWindow()
{
screen_width = event.resize.w;
screen_height = event.resize.h;

SDL_SetVideoMode(screen_width, screen_height, bpp, SDL_OPENGL | SDL_RESIZABLE | SDL_DOUBLEBUF);

glViewport(0, 0, screen_width, screen_height);
glMatrixMode(GL_PROJECTION);
glOrtho(0, screen_width, 0, screen_height, -1, 1);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
}

主循环:
while (running == true)

{

while(SDL_PollEvent(&event))

{

switch(event.type)

{

case SDL_VIDEORESIZE: ResizeWindow(); break; // resizing called here
case SDL_QUIT: running = false; break;
case SDL_KEYDOWN: square.Handle_Input(down); break;
case SDL_KEYUP: square.Handle_Input(up); break;

}

}

square.Move();
square.Check_Collision();

glClear(GL_COLOR_BUFFER_BIT);

square.Draw();

SDL_GL_SwapBuffers();

}

在调整窗口大小之前,这一切都运行良好。

最佳答案

您可能遇到的一个问题是,使用 SDL 调整窗口大小会创建一个新的 OpenGL 上下文,这意味着您之前上传的所有内容(纹理、顶点缓冲区对象)和您设置的状态(如顶点数组指针)都将丢失。如果使用 SDL,您需要重新初始化它们。如果要保留它们,请不要使用 SDL 进行窗口管理。我推荐 GLFW。


void ResizeWindow()

{

screen_width = event.resize.w;
screen_height = event.resize.h;

SDL_SetVideoMode(screen_width, screen_height, bpp, SDL_OPENGL | SDL_RESIZABLE | SDL_DOUBLEBUF);

glViewport(0, 0, screen_width, screen_height);
glMatrixMode(GL_PROJECTION);
glOrtho(0, screen_width, 0, screen_height, -1, 1);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();

}

是初学者 OpenGL 代码中最常见的反模式。影响绘图的绘图命令和状态管理属于绘图功能。也就是以下内容:
glViewport(0, 0, screen_width, screen_height);
glMatrixMode(GL_PROJECTION);
glOrtho(0, screen_width, 0, screen_height, -1, 1);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();

如果您想要一个健壮的 OpenGL 程序,请永远不要(仅)将它们放入调整大小处理程序中。它们属于其他绘图命令。

关于opengl - 使用 OpenGL 和 SDL 处理窗口大小调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9138559/

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