您好、欢迎来到现金彩票网!
当前位置:斗牛棋牌 > 纹理图像 >

开发一个完整iOS直播app——GPUImage渲染底层实现

发布时间:2019-06-04 02:08 来源:未知 编辑:admin

  本篇主要讲解GPUImage底层是如何渲染的,GPUImage底层使用的是OPENGL,操控GPU来实现屏幕展示

  由于网上OpenGL实战资料特别少,官方文档对一些方法也是解释不清楚,避免广大同学再次爬坑,本篇讲解了不少OpenGL的知识,并且还讲解了花了大量时间解决bug的注意点,曾经因为对glDrawArrays这个方法不熟悉,遇上Bug,晚上熬到凌晨四点都没解决,还是第二天中午解决的。

  如果喜欢我的文章,可以关注我微博:袁峥Seemygo,也可以来小码哥,了解下我们的iOS培训课程。后续还会更新更多内容,有任何问题,欢迎关注微,信号“小码哥订阅号”。

  暴露一个接口,获取采集到的帧数据,然后把帧数据传递给渲染View,展示出来

  1.不透明度(opaque)=YES,CALayer默认是透明的,透明性能不好,最好设置为不透明.

  需要将它设置为当前context,所有的OpenGL ES渲染默认渲染到当前上下文

  EAGLContext管理所有使用OpenGL ES进行描绘的状态,命令以及资源信息,要绘制东西,必须要有上下文,跟图形上下文类似。

  它是为renderbuffer(渲染缓存)申请一个id(名字),创建渲染缓存

  参数drawable,绑定在哪个渲染图层,会根据渲染图层里的绘图属性生成共享内存。

  该函数是将相关buffer()三大buffer之一)attach到framebuffer上,就会自动把渲染缓存的内容填充到帧缓存,在由帧缓存渲染到屏幕

  什么是着色器? 通常用来处理纹理对象,并且把处理好的纹理对象渲染到帧缓存上,从而显示到屏幕上。

  提取纹理信息,可以处理顶点坐标空间转换,纹理色彩度调整(滤镜效果)等操作。

  采集的是一张一张的图片,可以把图片转换为OpenGL中的纹理, 然后再把纹理画到OpenGL的上下文中

  纹理映射,我们可以把这幅图像的整体或部分贴到我们先前用顶点勾画出的物体上去.

  比如绘制一面砖墙,就可以用一幅真实的砖墙图像或照片作为纹理贴到一个矩形上,这样,一面逼真的砖墙就画好了。如果不用纹理映射的方法,则墙上的每一块砖都必须作为一个独立的多边形来画。另外,纹理映射能够保证在变换多边形时,多边形上的纹理图案也随之变化。

  一般来说,纹理图像为正方形或长方形。但当它映射到一个多边形或曲面上并变换到屏幕坐标时,纹理的单个纹素很少对应于屏幕图像上的像素。根据所用变换和所用纹理映射,屏幕上单个象素可以对应于一个纹素的一小部分(即放大)或一大批纹素(即缩小)

  一种是GL_PACK_ALIGNMENT用于将像素数据打包,一般用于压缩。

  另一种是GL_UNPACK_ALIGNMENT,用于将像素数据解包,一般生成纹理对象,就需要用到解包.

  param:用于指定存储器中每个像素行有多少个字节对齐。这个数值一般是1、2、4或8,

  注意点(熬夜凌晨的bug):glDrawArrays如果要绘制着色器上的点和片段,必须和着色器赋值代码放在一个代码块中,否则找不到绘制的信息,就绘制不上去,造成屏幕黑屏

  count:数组中顶点数量,在定义顶点着色器的时候,就定义过了,比如vec4,表示4个顶点

  注意点,如果要绘制着色器上的点和片段,必须和着色器赋值代码放在一个代码块中,否则找不到绘制的信息,就绘制不上去,造成屏幕黑屏。

  原因:因为是多线程,每一个线程都有一个上下文,只要在一个上下文绘制就好,设置线程的上下文为我们自己的上下文,就能绘制在一起了,否则会黑屏.

  注意点:每次创建纹理前,先把之前的纹理引用清空[self cleanUpTextures],否则卡顿

  注意:在我们绘制之前还有一件重要的事情要做,我们必须告诉OpenGL渲染窗口的尺寸大小

http://paris-hotels-fr.com/wenlituxiang/102.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有