OpenGL ES系列---使用与GLSurfaceView源码分析
【摘要】 系列内核版本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和状态改变 |
重点:
GLThread
:OpenGL ES
的运行线程。包含创建EGL
环境、调用GLRender
的onSurfaceCreated
、onSurfaceChanged
和onDrawFrame
方法以及生命周期的管理。
在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)