OpenGL ES系列---使用与GLSurfaceView源码分析

举报
内核笔记 发表于 2021/06/09 00:44:17 2021/06/09
【摘要】 系列内核版本OpenGLOpenGL ES - 示例及GLSurfaceView源码分析 文章目录 1、OpenGL ES?2、Android OpenGL ES(2.0)使用:2.1、继承GLSurfaceView2.2、实现接口2.3、编写glsl脚本 3、GLSurfaceView源码分析4、GLSurfaceView流程图 1、OpenGL E...
系列 内核版本
OpenGL OpenGL ES - 示例及GLSurfaceView源码分析

1、OpenGL ES?

总结:一个嵌入式的(2D/3D)图形处理库。

2、Android OpenGL ES(2.0)使用:

对于class而言,Extends用于(单)继承一个类(class),而implements用于实现一个接口(interface)。

2.1、继承GLSurfaceView

public class WlGLSurfaceView extends GLSurfaceView{ @创建Render对象 private WlGlRender wlGlRender; public WlGLSurfaceView(Context context) { this(context, null); } public WlGLSurfaceView(Context context, AttributeSet attrs) { super(context, attrs); @实例化Render wlGlRender = new WlGlRender(); setRenderer(wlGlRender); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.2、实现接口


public class WlGlRender implements GLSurfaceView.Renderer{ public WlGlRender() {} @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { } @窗口 public void onSurfaceChanged(GL10 gl, int width, int height) { GLES20.glViewport(0, 0, width, height); } @颜色 public void onDrawFrame(GL10 gl) { GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f); }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2.3、编写glsl脚本

3、GLSurfaceView源码分析

构成 内容
GLThread OpenGL ES的运行线程
EglHelper 负责创建EGL环境
GLSurfaceView 负责提供Surface和状态改变

重点:
GLThreadOpenGL ES的运行线程。包含创建EGL环境、调用GLRenderonSurfaceCreatedonSurfaceChangedonDrawFrame方法以及生命周期的管理。

GLSurfaceView.java程序中的setRenderer(Renderer renderer)函数
new GLThread

 static class GLThread extends Thread { GLThread(WeakReference<GLSurfaceView> glSurfaceViewWeakRef) {
 ...
  @Override public void run() { setName("GLThread " + getId()); if (LOG_THREADS) { Log.i("GLThread", "starting tid=" + getId()); } try { guardedRun();
...

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

重点guardedRun
创建EGL环境

  private void guardedRun() throws InterruptedException { mEglHelper = new EglHelper(mGLSurfaceViewWeakRef); mHaveEglContext = false;

  
 
  • 1
  • 2
  • 3

4、GLSurfaceView流程图

在这里插入图片描述

文章来源: xuesong.blog.csdn.net,作者:内核笔记,版权归原作者所有,如需转载,请联系作者。

原文链接:xuesong.blog.csdn.net/article/details/89930260

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。