opengl渲染yuv,opengl渲染gpu怎么设置

http://www.itjxue.com  2023-01-06 14:42  来源:未知  点击次数: 

opengl渲染gpu会提高帧数嘛

opengl渲染gpu会提高帧数。根据查询相关资料信息显示:由于图形渲染是通过图形硬件来完成的,相对于使用CPU,能够获得更高的帧率同时不会因为负载过大而造成卡顿。OpenGL渲染GPU开启渲染加速后可以提升图形加载速度,降低处理器的负担,使系统运行更加流畅,但是也更加耗电。

opengl渲染gpu怎么设置

OpenGL被定义为“图形硬件的一种软件接口”。从本质上说,它是一个3D图形和模型库,具有高度的可移植性,具有非常快的速度。

OpenGL默认的渲染步骤基本是在GPU上执行的

使用GPU渲染的话,你得用到GLSL,使用着色器语言

可以看下红皮书后面的GLSL简介,还有CG教程

OpenGL如何使用固定管线下的着色器渲染一个正方形,并用特殊键控制移动

双缓冲窗口 、 RGBA颜色模式 、 深度测试 、 模板缓冲区 。

GLUT 内部运行着一个本地消息循环,用来调用我们不同时间注册进来的回调函数。我们可以注册2个回调函数:1,为窗口改变大小而设置的一个回调函数;2,包含OpenGL渲染的回调函数。

注册的重塑函数 changeSize 方法的实现,通过 glViewport (GLint x, GLint y, GLsizei width, GLsizei height); 来重新设置窗口的大小,x,y 参数代表窗口中视图的左下角坐标,而宽度、高度是像素,为表示,通常x,y 都是为0。

注册的显示函数 void RenderScene(void) 实现,显示函数的具体实现步骤

第一步 : 在该方法中我们需要清除一个或者一组特定的缓存区;

缓存区是一块存着图像信息的存储空间,红色、绿色、蓝色和alpha分量通常一起作为颜色缓存区或像素缓存区引用。OpenGL 中不止一种缓冲区(颜色缓存区、深度缓存区和模板缓存区)清除缓存区对数值进行预置; 参数:指定将要清除的缓存的 GL_COLOR_BUFFER_BIT :指示当前激活的用来进行颜色写入缓冲区 GL_DEPTH_BUFFER_BIT :指示深度缓存区 GL_STENCIL_BUFFER_BIT:指示模板缓冲区。

第二步 :使用一组浮点数来表示红色,设置绘制需要的颜色

第三步 :将设置的颜色传递到存储着色器,即 GLT_SHADER_IDENTITY 着色器,这个着色器只是使用指定颜色以默认笛卡尔坐标第在屏幕上渲染几何图形

第四步 :提交着色器

第五步 :将后台缓冲区进行渲染,然后结束后交换给前台, 在开始的设置openGL 窗口的时候,我们指定要一个双缓冲区的渲染环境。这就意味着将在后台缓冲区进行渲染,渲染结束后交换给前台。这种方式可以防止观察者看到可能伴随着动画帧与动画帧之间的闪烁的渲染过程。缓冲区交换平台将以平台特定的方式进行。

第一步 :设置清屏颜色

第二步 :没有着色器,在OpenGL 核心框架中是无法进行任何渲染的。初始化一个渲染管理器。

第三步 :指定顶点。

OpenGL第三课:离屏渲染

1.大小:屏幕像素的2.5倍!

1、CPU(central processing Unit)中央处理器。是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。它的功能主要是解释计算机指令以及计算机软件的中的数据。

2、GPU(Graphics Processing Unit)图形处理器,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。是连接计算机和显示终端的纽带。

完美情况:在60FPS内每扫描一张图就不断显示不断刷新图像。

掉帧就是因为帧缓存区(旧的数据)显示到了屏幕中而帧缓存区已经拿到了下一帧数据的图像,从而显示到屏幕上出现撕裂的现象。

图像撕裂是我们肉眼看到的一张图片上下发生错位,即断层,其本质是拿到图像后,GPU进?渲染-帧缓存区? -视频控制器-读取帧缓存区信息(位图) - 数模转化(数字信号处-模 拟型号) -(逐?扫描)显示,当第一帧图像扫描到某个位置时,GPU拿到新的数据并存到帧缓冲区,这个时候视频控制器从帧缓冲区扫描的是新拿到的一帧的图像,最后就形成了在我们肉眼看到的断层现象,即我们看到的一张图片其本质是两张图片组合而来,究其原因就是视频控制器显示速度大于了GPU处理图形的速度

为了解决撕裂,苹果爸爸引入了: 垂直同步Vsync + 双缓存区 DoubleBuffering

(1)垂直同步Vsync:帧缓存区加锁 防?出现撕裂情况

(2)双缓存区 DoubleBuffering :就是GPU开辟AB两个帧缓冲区

执行流程就是当A帧缓冲区拿到第一帧数据,给A缓冲区加上一把锁,屏幕控制器从A拿到数据并逐行扫描完成,A帧缓冲区解锁,并且屏幕控制器指向B帧缓冲区,B帧缓冲区加锁并逐行扫描显示,在屏幕控制器扫描B帧缓冲区的时候,A帧缓冲区拿到GPU传过来的新一帧数据,以此类推,解决撕裂问题

掉帧即重复渲染同一帧数据。

为了减少掉帧(注意不是解决,掉帧问题只能尽量的减少,而不是解决,三级缓冲区也有可能出现掉帧),引入三级缓存区,三级缓冲区是为了充分利用CPU/GPU的空余时间,开辟ABC三个帧缓冲区,A显示屏幕, B也渲染好,C再从GPU拿取渲染数据,当屏幕缓冲区和帧缓冲区都弄好了,然后视频控制器再指向帧缓冲区的另外一个,再显示,这样交替,达到减少掉帧的情况,这样做就比二级缓冲区多了一个确认的操作

1、CPU/GPU渲染流水线耗时过长出现掉帧

2、垂直同步Vsync + 双缓存区DoubleBuffering 以掉帧作为代价解决屏幕撕裂的问题

3、三缓存区:合理使用CPU/GPU,减少掉帧次数。

显示器显示的内容来自帧缓冲区,

视频控制器:控制刷新部件,帧缓冲区与显示器的对应关系进行显示

帧缓存区:颜色值(帧缓冲,显存)

内存:连续的计算机存储器,主要存储刷新图像信息;

位图:60 * 60 = 3600 * 4(RGBA)= 1440;

不开启离屏渲染的逻辑为帧缓冲区(双缓存区)直接显示到屏幕,画完即可丢弃从而 节省空间 。

如果layer不能被复用,则没有必要打开光栅化。

如果layer不是静态的,需要被频繁修改,比如处于动画之中,那么开启离屏渲染反而影响效率了。

离屏渲染缓存内容有时间限制,缓存内容100ms内容如果没有被使用,那么就会被丢弃;无法进行复用了。

离屏渲染缓存空间有限,超过2.5倍屏幕像素大小的话,也会失效且无法进行复用了。

(责任编辑:IT教学网)

更多

推荐鼠标代码文章