谁能用简单的词向我解释纹理和表面之间的区别是什么?我看到它用在SDL2
asSDL_Surface
和中SDL_Texture
。SDL_Texture
从中SDL_Surface
创建图像,然后从图像/位图中创建图像。两者都是像素的集合。但是我看不到它们之间的主要区别(是否需要对GPU进行处理?)
我试图用Google搜索它,但是我发现的所有解释都太复杂了,以至于无法理解它们而又不深入研究计算机图形学的东西。
谁能用简单的词向我解释纹理和表面之间的区别是什么?我看到它用在SDL2
asSDL_Surface
和中SDL_Texture
。SDL_Texture
从中SDL_Surface
创建图像,然后从图像/位图中创建图像。两者都是像素的集合。但是我看不到它们之间的主要区别(是否需要对GPU进行处理?)
我试图用Google搜索它,但是我发现的所有解释都太复杂了,以至于无法理解它们而又不深入研究计算机图形学的东西。
SDL_Surface
仅仅是一个像素的集合而SDL_Texture
被an efficient, driver-specific representation of pixel data
这意味着它可以通过GPU使用wiki.libsdl.org/SDL_Texture。那回答了你的问题吗?您确实应该更深入地研究计算机图形以了解更多信息
Answers:
基本上,您的假设是“必须使用GPU做什么?” 是正确的。
SDL_Surface
用于软件渲染。借助软件渲染,如saloomi2012可以正确注意到的那样,您正在使用常规RAM存储图像数据。因此,在大多数情况下,您可以直接访问与表面关联的数据缓冲区,修改其内容,即使用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
如上一课所述,纹理相当于GPU渲染的表面。因此,几乎总是使用函数SDL_CreateTextureFromSurface()从表面创建纹理。此功能或多或少地满足了您的期望-参数是渲染上下文和从中创建纹理的表面。与其他创建函数一样,它将在失败时返回NULL。
希望对您有帮助!
SDL_Texture
和SDL_Surface
以及SDL_Renderer
。通常,SDL_Texture
它是用于渲染的内容,但是当您使用SDL_Image
或加载纹理信息时SDL_ttf
,您将获得数据作为SDL_Surface