什么是SDL_Surface?

3

我正在按照lazyfoo的教程学习SDL/01_hello_SDL,在向屏幕绘制时使用了“surface”对象。它是什么,是否与SDL_Texture类似?这与缓冲区有关吗?


5
此问题似乎不适合,因为它与阅读文档有关。 - Lightness Races in Orbit
1个回答

16

通过查看文档可以轻松回答这个问题。

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吗? - GLD
@user3731338,你应该尽量使用SDL_Texture,因为SDL_Surface没有进行优化。请查看我的更新答案。 - olevegard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接