Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SDL基础:纹理与图像_C++_Opengl_Arm_Textures_Sdl 2 - Fatal编程技术网

C++ SDL基础:纹理与图像

C++ SDL基础:纹理与图像,c++,opengl,arm,textures,sdl-2,C++,Opengl,Arm,Textures,Sdl 2,我正在编写一些代码,使用SDL2来显示一个带有移动标记的图像,我想我会使用新的(?)2D硬件加速渲染。据我所知,我必须加载图像并将其转换为纹理——但有什么区别?搜索“image texture 2d sdl”只能获得有关如何加载纹理的教程,我要查找的是更多的背景,而不是操作指南 因此,有些问题: 纹理和图像是什么?他们不是一回事吗 如果我想要硬件加速渲染,我是否正确地假设需要将静态背景图像作为纹理加载?事实上,听起来所有的比特都需要是纹理才能工作 说到OpenGL,SDL纹理实际上是OpenG

我正在编写一些代码,使用SDL2来显示一个带有移动标记的图像,我想我会使用新的(?)2D硬件加速渲染。据我所知,我必须加载图像并将其转换为纹理——但有什么区别?搜索“image texture 2d sdl”只能获得有关如何加载纹理的教程,我要查找的是更多的背景,而不是操作指南

因此,有些问题:

  • 纹理和图像是什么?他们不是一回事吗
  • 如果我想要硬件加速渲染,我是否正确地假设需要将静态背景图像作为纹理加载?事实上,听起来所有的比特都需要是纹理才能工作
  • 说到OpenGL,SDL纹理实际上是OpenGL纹理吗
  • 我正在为一台资源有限的单用途机器编写主应用程序(双核ARM CPU、双核Mali 400 GPU、4GB RAM:)。我所需要做的就是渲染一个480x800(是的,纵向布局)的图像并在其上放置标记。我预计标记将有一个不透明层和两个透明层,更新速度约为15 fps,我预计其中大约125个,最多。使用2D硬件加速值得吗?还是应该只使用软件

要了解纹理的基本知识,我建议您看一下。这里,术语
pixmap
的使用方式与SDL的
texture
相同。基本上,这些已经被转换并上传到GPU的内存中,这使得操作速度大大加快,但处理起来也更加复杂

OpenGL纹理是另一个野兽,但我们基本上可以说它们是相同的,即视频内存中的图像。在OpenGL中绑定纹理时,需要将其上载到GPU内存,这与此纹理变换有些类似

对于125个对象,我认为考虑使用2D加速度是值得的,特别是如果你必须移动它们。如果这只是一个静态图像,我想你可以选择常规图像路径

作为一般规则,我鼓励您尽可能使用2D加速(或者只是加速),如果只是为了电池的改进。也就是说,如果图像是静态的,结果将完全相同,可能只是代码路径略有不同。因此,我认为您可以像加载常规图像一样加载静态背景图像,而不存在任何缺点(请注意,我不是SDL专业人士,因此这种混合方法在这里可能不起作用,但值得尝试,因为它可以在大多数2D工具包上使用)


我希望我回答了你所有的问题:)

要了解纹理的基本知识,我建议你看看。这里,术语
pixmap
的使用方式与SDL的
texture
相同。基本上,这些已经被转换并上传到GPU的内存中,这使得操作速度大大加快,但处理起来也更加复杂

OpenGL纹理是另一个野兽,但我们基本上可以说它们是相同的,即视频内存中的图像。在OpenGL中绑定纹理时,需要将其上载到GPU内存,这与此纹理变换有些类似

对于125个对象,我认为考虑使用2D加速度是值得的,特别是如果你必须移动它们。如果这只是一个静态图像,我想你可以选择常规图像路径

作为一般规则,我鼓励您尽可能使用2D加速(或者只是加速),如果只是为了电池的改进。也就是说,如果图像是静态的,结果将完全相同,可能只是代码路径略有不同。因此,我认为您可以像加载常规图像一样加载静态背景图像,而不存在任何缺点(请注意,我不是SDL专业人士,因此这种混合方法在这里可能不起作用,但值得尝试,因为它可以在大多数2D工具包上使用)


我希望我回答了你们所有的问题:)

Mayeuc说了什么,至于第三个问题——这要看情况而定。它不仅仅是
GLuint
铸造为
SDL_Texture*
类型,它具有内部结构,而且是的,通过GL渲染实现,它在其内部代码中使用GL纹理。当然,对于其他目标(如d3d,甚至软件渲染),将不会有OpenGL。它不仅仅是
GLuint
铸造为
SDL_Texture*
类型,它具有内部结构,而且是的,通过GL渲染实现,它在其内部代码中使用GL纹理。对于其他目标(例如d3d,甚至软件渲染),当然没有OpenGL。谢谢你的回答!所以,从我收集的信息来看,“纹理”只是上传到GPU硬件上的位图?嗨,基本上就是这样。通过这种方式,纹理访问和转换更快、更省电,因为它们已经上传到GPU内存中。与之相反的方法是,每次转换时,您通常会在CPU上转换图片,然后将其发送到GPU;这在计算上可能很昂贵。谢谢你的回答!所以,从我收集的信息来看,“纹理”只是上传到GPU硬件上的位图?嗨,基本上就是这样。通过这种方式,纹理访问和转换更快、更省电,因为它们已经上传到GPU内存中。与之相反的方法是,每次转换时,您通常会在CPU上转换图片,然后将其发送到GPU;这在计算上可能很昂贵。