gpt4 book ai didi

c - 调整窗口大小后 SDL2 无法正确渲染

转载 作者:行者123 更新时间:2023-11-30 16:07:08 28 4
gpt4 key购买 nike

增加窗口大小后,我无法在窗口上绘图。我仍然可以借鉴旧的部分。例如,我有一个 100x100 的窗口,我使用 SDL_SetWindowSize 将其大小增加到 200x200。我可以绘制到旧的 100x100 区域,但新区域不可用,除非我在使用它之前使用延迟。

以下是使用 SDL_RenderClear 出现问题的示例:

int main(void)
{
SDL_Init(SDL_INIT_VIDEO);

SDL_Window *win = SDL_CreateWindow("test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 100, 100, SDL_WINDOW_SHOWN);
SDL_Renderer *rend = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);

/* Draw red window */
SDL_SetRenderDrawColor(rend, 255, 0, 0, 255);
SDL_RenderClear(rend);
SDL_RenderPresent(rend); // Completely red

SDL_Delay(3000);

/* Increase window size and draw it green */
SDL_SetWindowSize(win, 800, 800);
SDL_SetRenderDrawColor(rend, 0, 255,0, 255);
SDL_RenderClear(rend);
SDL_RenderPresent(rend); // Partially green

SDL_Delay(3000);

/* Make window blue */
SDL_SetRenderDrawColor(rend, 0, 0, 255, 255);
SDL_RenderClear(rend);
SDL_RenderPresent(rend); // Completely blue

SDL_Delay(3000);

SDL_DestroyRenderer(rend);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}

这段代码应该:

  • 创建一个 100x100 的窗口并将其设置为红色,然后等待 3 秒。
  • 将窗口大小增加到 800x800 并将其着色为绿色,然后等待 3 秒。
  • 将同一窗口涂成蓝色,然后等待 3 秒。

代码实际上是这样的:

  • 创建一个 100x100 的窗口并将其设置为红色,然后等待 3 秒。
  • 将窗口大小增加到 800x800,并将仅 100x100 的正方形着色为绿色,然后等待 3 秒。
  • 将同一窗口涂成蓝色,然后等待 3 秒。

当我在 SDL_RenderPresent() 之前添加 100 毫秒的延迟时,它可以正常工作。然而,我在我的一个项目中遇到了同样的问题,我必须使用 200 毫秒的延迟才能使其工作。

为什么渲染前需要延迟?有没有办法知道 SDL_RenderPresent() 之前需要等待多长时间?

最佳答案

我发现你的问题了!

创建窗口时,需要传递标志SDL_WINDOW_RESIZABLE。像这样:

    SDL_Window *win = SDL_CreateWindow("test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 100, 100, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE );

进行此更改后,您的窗口将正常运行。

关于c - 调整窗口大小后 SDL2 无法正确渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59755457/

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