分享

Android使用OPENGL显示YUV图像

 mediatv 2017-11-08


需要流畅显示YUV图像需要使用Opengl库调用GPU资源,网上在这部分的资料很少。实际上Android已经为我们提供了相关的Opengl方法

主体过程如下:

1、建立GLSurfaceView

2、建立Render

4、设置GLSurfaceView的Render为你创建的Render,并设置RenderMode为RENDERMODE_WHEN_DIRTY

3、把数据推入Render

而在Render中需要实现3个方法

1、void onSurfaceCreated(GL10 gl, EGLConfig config)

2、void onDrawFrame(GL10 gl)

3、void onSurfaceChanged(GL10 gl, int width, int height)  

  onSurfaceCreated需要一些初始化工作,括号内是具体方法:

生成Textures的ID(glGenTextures)->绑定需要操作的Texture(glBindTexture)->设置相关参数(glTexParameterf)->操作下一个Texture....

->建立Shader(glCreateShader)->导入Shader代码字符串(glShaderSource)->编译Shader(glCompileShader)->检查编译状态(glGetShaderiv)->下一个Shader....

->建立Program(glCreateProgram)->绑定Shader(glAttachShader)->绑定属性(glBindAttribLocation)->链接Program(glLinkProgram)->检查Program链接状态(glGetProgramiv)

->取得attribute变量、uniform变量的句柄->告诉Opengl在rendering的时候使用这个Program(glUseProgram)

  onDrawFrame在视图刷新的时候会被使用

绑定需要操作的Texture(glBindTexture)->设置Texture内容(glTexImage2D)->操作下一个Texture....

清缓存->指定顶点属性数组(glVertexAttribPointer)->使能顶点数组(glEnableVertexAttribArray)

->激活Opengl的Texture(glActiveTexture)->绑定需要操作的Texture(glBindTexture)->设置纹理单元的一致变量(glUniform1i)->操作下一个Texture....

绘图!!!!(glDrawArrays)

在将数据准备完成的时候,使用requestRender()就会调用onDrawFrame

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多