XML
文件
<?xml version="1.0" encoding="utf-8"?>
<com.yang.openglesproject.MyGLSurfaceViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" />
自定义View
代码
public interface Renderer {void onSurfaceCreated(GL10 gl, EGLConfig config);void onSurfaceChanged(GL10 gl, int width, int height);void onDrawFrame(GL10 gl);
}class MyGLSurfaceView(context: Context, attrs: AttributeSet) : GLSurfaceView(context, attrs), GLSurfaceView.Renderer {init {setEGLContextClientVersion(3)setRenderer(this)renderMode = RENDERMODE_WHEN_DIRTY}override fun onSurfaceCreated(gl: GL10?, config: EGLConfig?) {GLES30.glClearColor(0.0f, 0.0f, 0.0f, 1.0f)}override fun onSurfaceChanged(gl: GL10?, width: Int, height: Int) {GLES30.glViewport(0, 0, width, height)}override fun onDrawFrame(gl: GL10?) {GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT or GLES30.GL_DEPTH_BUFFER_BIT)}
}
总结
OpenGL ES
只负责处理数据,但不知道如何渲染到屏幕,必须把数据交给EGL
去渲染到屏幕- 应用层直接调用
OpenGL ES
绘制的好处:GLSurfaceView
是 Android
提供的一个用于处理 OpenGL ES
渲染的类。它封装了很多与 EGL
和 OpenGL ES
相关的复杂性。如果在Native
层方法中去进行EGL
的初始化,不同设备之间存在编译失败初始化不成功的状况