我正在按照lazyfoo的教程学习SDL/01_hello_SDL,在向屏幕绘制时使用了“surface”对象。它是什么,是否与SDL_Texture类似?这与缓冲区有关吗?
我正在按照lazyfoo的教程学习SDL/01_hello_SDL,在向屏幕绘制时使用了“surface”对象。它是什么,是否与SDL_Texture类似?这与缓冲区有关吗?
通过查看文档可以轻松回答这个问题。
SDL_Texture
SDL_Texture
包含一个高效/优化的像素数据表示。它是在SDL2.0中引入的,并且实现了硬件渲染。渲染 SDL_Texture
的方式是:
void <a rel="noreferrer" href="https://wiki.libsdl.org/SDL_RenderPresent">SDL_RenderPresent</a>
(
SDL_Renderer* renderer
)
你应该尽可能使用 SDL_Texture
,因为它们经过优化以便于渲染,与 SDL_Surface
相反。
SDL_Surface
SDL_Surface
基本上是一个包含所有原始像素数据以及一些元信息(如大小和像素格式)的结构体。由于 SDL_Surface
只是原始像素数据,因此在渲染时不会进行任何优化,应该避免使用。
SDL2.0 的某些部分仍然使用 SDL_Texture
(例如图像加载或文本渲染)。
幸运的是,你可以使用下面的方法将 SDL_Surface
转换为 SDL_Texture
:
SDL_Texture* <a rel="noreferrer" href="https://wiki.libsdl.org/SDL_CreateTextureFromSurface?highlight=%28%5CbCategoryAPI%5Cb%29%7C%28SDLFunctionTemplate%29">SDL_CreateTextureFromSurface</a>
(
SDL_Renderer* renderer,
SDL_Surface* surface
)
要了解有关SDL2及其如何用于制作游戏的更多信息,您可以查看我的博客。
SDL_Texture
,因为SDL_Surface
没有进行优化。请查看我的更新答案。 - olevegard