系列 | 内核版本 |
---|---|
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);
}
}
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);
}
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();
...
重点guardedRun
创建EGL
环境
private void guardedRun() throws InterruptedException {
mEglHelper = new EglHelper(mGLSurfaceViewWeakRef);
mHaveEglContext = false;