谁能用简单的话向我解释纹理和表面有什么区别?我看到它在SDL2
用作SDL_Surface
和SDL_Texture
.SDL_Texture
是从SDL_Surface
创建的,而又是从图像/位图创建的。两者都是像素的集合。但我看不出它们之间的主要区别(必须与 GPU 做点什么?
我试图用谷歌搜索它,但我发现的所有解释都太复杂了,如果不深入研究计算机图形学的东西,就无法理解它们。
基本上你的假设"必须与GPU做点什么?"是正确的。
SDL_Surface
用于软件渲染。通过软件渲染,正如saloomi2012正确注意到的那样,您正在使用常规RAM来存储图像数据。因此,在大多数情况下,您可以直接访问与表面关联的数据缓冲区,修改其内容,即它正在使用CPU,因此软件名称。
另一方面,SDL_Texture
用于硬件渲染,纹理存储在VRAM中,您无法像SDL_Surface
那样直接访问它。渲染操作由 GPU 加速,在内部使用 OpenGL 或 DirectX(仅在 Windows 上可用)API,而 API 又使用您的视频硬件,因此硬件渲染名称。
不用说,硬件渲染比软件渲染快几个数量级,应始终被视为主要选择。
SDL_Texture
加载到视频卡的VRAM中,而不是常规RAM。
表面使用您的 RAM,纹理使用您的视频卡更快 比表面。
有关这方面的更多信息,请参阅:
https://thenumbat.github.io/cpp-course/sdl2/05/05.html
如上一课所述,纹理是 GPU 渲染 等效于表面。因此,纹理几乎总是从中创建 曲面,使用函数 SDL_CreateTextureFromSurface()。这 函数或多或少地满足您的期望 - 参数是 渲染上下文和要从中创建纹理的表面。与 其他创建函数,它将在失败时返回 NULL。
希望对您有所帮助!