15

我正在尝试学习 SDL2。旧 SDL 和 SDL2 之间的主要区别(如我所见)是旧 SDL 具有由其表面表示的窗口,所有图片都是表面,所有图像操作和 blits 都是表面到表面。在 SDL2 中,我们有表面和纹理。如果我做对了,表面在 RAM 中,而纹理在图形内存中。那正确吗?

我的目标是为 SDL2 制作面向对象的包装器,因为我对 SDL 也有类似的东西。我想要班级窗口和班级图片(具有私有纹理和表面)。窗口的内容将由图片类的一个实例表示,并且所有块都是图片到图片对象块。如何组织这些图片操作:

  1. 像素操作应该在表面上吗?
  2. 如果我想将一张图片的一部分复制到另一张而不渲染它,它应该在表面上吗?
  3. 只有当我想在屏幕上渲染它时,我才应该将表面粘贴到纹理上吗?
  4. 将其全部渲染到一个表面然后将其渲染到窗口纹理还是将每张图片分别渲染到窗口纹理更好?

一般来说,什么时候应该使用表面,什么时候应该使用纹理?

感谢您的宝贵时间,欢迎所有帮助和建议 :)

4

1 回答 1

15

首先我需要澄清一些误解:基于纹理的渲染不像旧的表面渲染那样工作。虽然您可以将SDL_Surfaces 用作源或目标,但SDL_Textures 旨在用作渲染的源,而互补SDL_Renderer则用作目标。通常,您必须在完全在 CPU 上完成的旧渲染框架和用于 GPU 的新渲染框架之间进行选择,但混合是可能的。

所以对于你的问题:

  1. 纹理不提供对像素的直接访问,因此最好在表面上进行。
  2. 要看。如果不经常复制纹理并且您想稍后加速渲染它,那么复制纹理并没有什么坏处。
  3. 在谈论纹理时,您总是会渲染到SDL_Renderer,并且总是更好地在纹理上预加载表面。
  4. 正如我在第一段中解释的那样,没有窗口纹理。您可以使用完全基于表面的渲染或完全基于纹理的渲染。如果你真的需要两者(如果你想要直接访问像素和加速渲染),最好按照你说的做:将所有内容blit到一个表面,然后上传到纹理。

最后,您应该尽可能使用纹理。表面使用是一个例外,当您必须使用密集的像素操作或必须处理遗留代码时使用它。

于 2014-01-02T17:01:14.133 回答