关于C#:表面和纹理之间的差异(SDL /常规)

Difference between surface and texture (SDL / general)

有人可以简单地向我解释纹理和表面之间的区别吗?我看到它在SDL2中用作SDL_SurfaceSDL_TextureSDL_Texture是从SDL_Surface创建的,而SDL_Surface是从图像/位图创建的。两者都是像素的集合。但是我看不到它们之间的主要区别(必须使用GPU做什么吗?)

我尝试用Google搜索它,但是我发现的所有解释都太复杂了,以至于无法理解它们而又不深入研究计算机图形学。


基本上您的假设是"必须使用GPU进行某些操作?"是正确的。

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

另一方面,

SDL_Texture用于硬件渲染,纹理存储在VRAM中,您无法像SDL_Surface那样直接访问它。 GPU通过内部使用OpenGL或DirectX(仅在Windows上可用)API来加速渲染操作,这些API依次使用您的视频硬件,因此也使用了硬件渲染名称。

不用说,硬件渲染比软件渲染快几个数量级,应该始终将其视为主要选择。


SDL_Texture加载到视频卡的VRAM中,而不是常规RAM中。


有关以下内容的更多信息:

https://thenumbat.github.io/cpp-course/sdl2/05/05.html

As mentioned in the last lesson, textures are the GPU rendering
equivalent of surfaces. Hence, textures are almost always created from
surfaces, using the function SDL_CreateTextureFromSurface(). This
function more or less does what you'd expecta€"the parameters are the
rendering context and a surface to create the texture from. As with
other creation functions, it will return NULL on failure.

希望对您有帮助!


表面使用您的RAM,纹理使用您的视频卡,速度更快
比表面。