SDL2/表面/纹理/渲染



我正在努力学习SDL2。旧SDL和SDL2之间的主要区别(正如我所看到的)是,旧SDL的窗口由其表面表示,所有图片都是表面,所有图像操作和闪电战都是表面对表面的。在SDL2中,我们有曲面和纹理。如果我做对了,表面在RAM中,纹理在图形内存中。是这样吗?

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

  1. 像素操作应该在表面级别上吗
  2. 如果我想在不渲染的情况下将一张图片的一部分复制到另一张图片,它应该在表面级别上
  3. 只有当我想在屏幕上渲染它时,我才应该将表面闪电到纹理吗
  4. 是将其全部渲染到一个曲面,然后渲染到窗口纹理,还是将每张图片分别渲染到窗口质地

通常,我什么时候应该使用表面,什么时候应该用纹理?

感谢您抽出时间,欢迎所有帮助和建议:)

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

所以给你的问题:

  1. 纹理不提供对像素的直接访问,因此最好在曲面上进行
  2. 取决于。如果不经常在纹理上进行复制,并且希望稍后加速渲染,则复制不会有什么坏处
  3. 当谈到纹理时,您将始终渲染为SDL_Renderer,并且最好在纹理上预加载曲面
  4. 正如我在第一段中所解释的,并没有窗口纹理。可以使用完全基于曲面的渲染,也可以完全基于纹理的渲染。如果你真的需要两者(如果你想直接访问像素和加速渲染),最好按照你说的做:将所有东西闪电式地复制到一个表面,然后上传到纹理

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

相关内容

  • 没有找到相关文章

最新更新