音视频开发十六:SDL基础概念

SDL

纹理渲染

纹理

在SDL中,纹理是图像的描述信息。用SDL_Texture表示一个纹理对象(texture),它是一个用于存储像素数据的结构体类型

渲染

​ **互联网解释:**渲染是在电脑绘图中是指用软件从模型生成图像的过程。模型是用严格定义的语言或者数据结构对于三维物体的描述,它包括几何、视点、纹理以及照明信息。

​ 常说的视频渲染:对采集下的数字影片进行了剪接、加效果、加字幕、音乐等操作,当生成影片时需要将后加入的素材融合到影片中并压缩成为影片最终格式,这个过程就是渲染。

​ **SDL中渲染:**就是将数据生成图像的过程。这个数据是纹理缓冲区储存的数据。

纹理渲染

纹理渲染就是将缓冲区(内存)中保存的图像描述的信息(纹理)生成图像的过程(渲染)。

案例理解: 小A同学画一幅画

下面,我们以生活中的一个例子‘小A同学画一幅画’ 来解释SDL渲染,纹理概念。

计算机使用SDL渲染显示一幅图就相当于小A同学在墙上画一幅画, 我们先将整个过程中的角色划分为纹理, 渲染器, gpu(画家), cpu(小A同学)

依据SDL编程方式,这里又分为两种情况:

  1. 不使用纹理

    即由cpu直接绘制一幅画(cpu需要将最原始的rgb/YUV数据,刷到屏幕上), 相当于学生小A直接在墙上画画

  2. 使用纹理

    相当于小A同学(cpu)指挥画家(gpu)在纸上画, 然后把纸贴在墙上。 这个过程中画是由画家(gpu)画的, 小A同学负责发号施令(即告诉画家画什么), 纸代表纹理, 画家代表gpu, 所有绘制的操作都是在纹理上进行。事实上,纹理的概念并不仅仅是一张纸, 还包括小A同学中对这幅画的构思,可以理解成画画的算法, 而纸相当于是一个载体(内存空间,用于保存这些构思)。 gpu根据纹理就可以计算出这幅图每个像素点的颜色( 相当于画家根据小A同学的描述,画出一幅画一样)

可以看出,使用纹理,可以减轻cpu的负担, cpu处于一个发号施令的角色,图片的计算过程交给效率更好的gpu来做,可以提高渲染的效率。

为什么纹理数据是GPU处理:因为GPU是图像处理单元,GPU通常有专门的纹理处理单元,所以能够纹理数据进行处理。

问题分析

为什么使用纹理?

​ 有一张图片,图片像素使用RGB24真彩色表示,把它传给显卡,显卡也能帮我们展现出来。既然这样,为什么还用纹理?

​ 假如画一条渐变颜色的直线。对于RGB数据来说,每一个像素点你都要描述出来,红黄蓝每个分量的比例多少。对于纹理来说,它不会这样描述,他只会描述有一条线,线的起点和重点在哪里,中间颜色是怎么渐变的,只会把这个描述信息介绍给你。所以呢像RGB或YUV数据,是比较大的主内存中的空间。CPU需要把这些相关数据传输到显卡,显卡接收到这些数字数据,然后把这些数字信号转换为可见的图像来显示视频。对于纹理来说,它只需要主内存很小的空间,只存储这些描述信息,将这些描述交给显卡之后,通过显卡的GPU计算,计算的结果实际和RGB所描述是一样的,最终展示到屏幕上。

总结:

  • 纹理占主内存的空间小。

  • 纹理数据的计算在显卡的GPU上,通过硬件加速去渲染。RGB数据需要经过CPU计算之后再交给显卡,显卡直接去显示就好了,GPU是专门用来处理图像和渲染的,它比CPU在处理图像方面更快。

为什么说RGB数据交给CPU来处理

​ 这个说法起始不妥当。RGB数据默认情况下会交给CPU来处理。因为在大多数情况下,CPU是计算机主控制器,它负责调度和管理所有的计算和处理任务,包括图像处理和渲染。

在处理图像和视频数据时,CPU会启动图像处理程序或其他相关应用程序来执行处理任务。CPU可以进行一些基本的图像处理任务,如裁剪、缩放、旋转、调整色度等。但是,CPU在处理大量数据时,可能会出现性能瓶颈,导致处理速度变慢。

如果需要进行大规模的图像或视频处理,可以考虑使用GPU来加速处理过程,提高处理效率。但是,需要注意的是,使用GPU处理RGB数据需要使用相关GPU加速库和图像处理软件,否则会影响处理效果和速度。

​ 具体使用CPU还是GPU来处理RGB数据,需要根据具体需求和处理任务来决定。如果需要进行大规模的数据处理和计算,建议使用GPU来处理RGB数据以获得更好的性能和效率。

渲染的基本流程

基本原理是,首先创建一个window窗口,它是我们要渲染的目标。然后,要有一个渲染上下文(就是渲染器),该上下文中一方面存放着要渲染的目标,也就是windows窗口;另一方面是存放着一个缓冲区(就是纹理对象),该缓冲区用于存放渲染的内容(渲染内容就是对图像的描述信息)。

渲染的内容可以是点、线、各种图形以及图片,视频的各种组合。这些组合后的内容首先被存放到缓冲区中,最终SDL将缓冲区中的内容渲染到窗口中。

说简单点:内存图像经过渲染器转换为纹理,再把纹理交给显卡计算,展示到窗口上去。

猜你喜欢

转载自blog.csdn.net/qq_38056514/article/details/130190835