表面和纹理之间的差异(SDL /一般)

dev*_*ull 69 c graphics sdl sdl-2

任何人都可以用简单的词语向我解释纹理和表面之间的区别是什么?我看到它用在SDL2SDL_SurfaceSDL_Texture.SDL_Texture创建SDL_Surface,然后从图像/位图创建.两者都是像素集合.但是我没看到它们之间的主要区别(必须用GPU做些什么?)

我试图谷歌它,但我发现的所有解释都太复杂,无法深入了解计算机图形的东西.

Pet*_*lin 71

基本上你的假设"必须用GPU做点什么?" 是正确的.

SDL_Surface用于软件渲染.通过软件渲染,正如saloomi2012正确注意到的那样,您使用常规RAM来存储图像数据.因此,在大多数情况下,您可以直接访问与曲面关联的数据缓冲区,修改其内容,即使用CPU,因此使用软件名称.

SDL_Texture另一方面,在硬件渲染中使用,纹理存储在VRAM中,您无法直接访问它SDL_Surface.渲染操作由GPU加速,在内部使用OpenGL或DirectX(仅在Windows上可用)API,后者又使用您的视频硬件,因此使用硬件渲染名称.

毋庸置疑,硬件渲染比软件渲染快几个数量级,应该始终被视为主要选项.

  • 如果硬件加速可用,使用SDL_Surface有什么好处吗?例如,对于小型渲染操作,进入硬件的开销太大了? (3认同)
  • @Timmos硬件渲染总是比软件更快.但是,软件表面有一个优点:由于它存储在CPU可访问的主存储器中,因此可以直接向其中写入数据.如果您想要实时生成纹理,例如在视频游戏中作为程序生成的内容,这将非常有用.(请注意,现在许多类型的程序生成也可以使用着色器在GPU上完成.) (3认同)
  • @Timmos你可以完全控制表面的工作方式、生成方式、完全的读写控制,我的意思是真的......控制是表面给你的。OpenGL 和此类 API 需要与 GPU 配合使用,因为 GPU 制造商不允许直接访问 GPU,这就是为什么您经常会听到人们抱怨 OpenGL 或 DX 效率低下,或者这些 API 所做的事情很愚蠢,因为它们可以编写更快或更高效的东西,但他们不能,因为他们无法访问 GPU。 (2认同)

小智 8

SDL_Texture 加载到您的视频卡的VRAM而不是常规RAM.