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

时间:2014-01-27 22:10:38

标签: c graphics sdl sdl-2

任何人都可以用简单的语言向我解释纹理和表面之间的区别是什么?我在SDL2中看到它用作SDL_SurfaceSDL_TextureSDL_Texture是从SDL_Surface创建的,{{1}}又是从图片/位图创建的。两者都是像素集合。但我没有看到它们之间的主要区别(必须用GPU做些什么?)

我试图谷歌,但我发现的所有解释都太复杂了,无法深入了解计算机图形内容。

4 个答案:

答案 0 :(得分:66)

基本上你的假设"必须用GPU做些什么?"是对的。

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

另一方面,

SDL_Texture用于硬件渲染,纹理存储在VRAM中,您无法像{{1}一样直接访问它}。渲染操作由GPU加速,在内部使用OpenGL或DirectX(仅在Windows上可用)API,后者又使用您的视频硬件,因此硬件呈现名称。

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

答案 1 :(得分:7)

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

答案 2 :(得分:2)

Surfaces使用你的RAM和纹理使用更快的视频卡 而不是表面。

答案 3 :(得分:0)

有关于此的更多信息:

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

  

如上一课所述,纹理是GPU渲染   相当于表面。因此,纹理几乎总是从中创建的   表面,使用函数SDL_CreateTextureFromSurface()。这个   功能或多或少做你期望的 - 参数是   渲染上下文和表面来创建纹理。和。一样   其他创建函数,失败时返回NULL。

我希望它可以帮到你!