SDL2 中如何实现双缓冲?

问题描述

在尝试学习 SDL2 时,我阅读了有关双缓冲的内容。我知道 SDL 自己使用双缓冲。但是,我对如何在软件渲染中实现双缓冲感到困惑。

首先,您必须创建一个窗口:

SDL_Window *window = SDL_CreateWindow("SDL2 Window",SDL_WINDOWPOS_CENTERED,680,480,0);

然后你会得到一个指向窗口表面的指针:

SDL_Surface *window_surface = SDL_GetwindowSurface(window);

您现在可以使用此指针将某些内容 blit 到表面并通过更新窗口的表面来显示它:

 SDL_BlitSurface(image,NULL,window_surface,NULL);
 SDL_UpdateWindowSurface(window);

我知道 UpdateWindowSurface() 相当于 SDL1.2 的 Flip()。这意味着在此处执行缓冲区交换。从理论上讲,作为窗口后台缓冲区的缓冲区(window_surface 指向的那个缓冲区)现在应该是前台缓冲区,您应该需要另一个指向旧前台缓冲区的指针,它现在是新的后台缓冲区 - 至少在我看来.但你没有。您可以再次像上面那样 blit 和更新以显示可能更改的帧。这怎么可能?

此处 (Where can I find the definition of 'SDL_Window') 您可以看到结构体 SDL_Window 也只有一个成员 SDL_Surface* surface。没有“背面”和“正面”。一个表面既没有两个缓冲区可以作为前缓冲区和后缓冲区。那么双缓冲在这里是如何工作的呢? UpdateWindowSurface() 不再是翻转了吗? WindowSurface 是否只是复制到实现双缓冲的图形卡输出的图形中的缓冲区中?我错过了什么?非常感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)