SDL2 /表面/纹理/渲染

时间:2013-12-26 21:09:38

标签: graphics textures render sdl-2

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

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

  1. 像素操作应该在表面上吗?
  2. 如果我想将一张图片的一部分复制到另一张图片而不进行渲染,那么它应该在表面上?
  3. 只有当我想在屏幕上渲染时,我才应该将表面blit到纹理?
  4. 最好将它全部渲染到一个曲面,然后将其渲染到窗口纹理或将每个图片分别渲染到窗口纹理?
  5. 一般来说,我何时应该使用表面?何时应该使用纹理?

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

1 个答案:

答案 0 :(得分:13)

首先,我需要澄清一些误解:基于纹理的渲染不像旧的表面渲染那样有效。虽然您可以使用SDL_Surface作为源或目标,但SDL_Texture用作渲染源,而免费SDL_Renderer用作目标。通常,您必须在完全在CPU上完成的旧渲染框架和用于GPU的新渲染框架之间进行选择,但可以进行混合。

所以对你问题:

  1. 纹理不提供对像素的直接访问,因此最好在曲面上进行。
  2. 取决于。复制纹理如果不经常并且你想在以后加速渲染它并没有什么坏处。
  3. 在谈论纹理时,您将始终渲染到SDL_Renderer,并且总是更好地在纹理上预加载曲面。
  4. 正如我在第一段中解释的那样,没有窗口纹理。您可以使用完全基于曲面的渲染或完全基于纹理的渲染。如果你真的需要两者(如果你想直接像素访问和加速渲染),最好按照你的说法:将所有内容blit到一个表面,然后上传到纹理。
  5. 最后,你应该尽可能使用纹理。表面使用是一个例外,当您必须使用密集像素操作或必须处理遗留代码时使用它。