当前位置: 首页> 健康> 科研 > OpenGL ES->创建GLSurfaceView准备渲染环境

OpenGL ES->创建GLSurfaceView准备渲染环境

时间:2025/7/13 13:42:50来源:https://blog.csdn.net/sunshine_guo/article/details/141000055 浏览次数:0次

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 {// 设置 OpenGL ES 3.0 版本setEGLContextClientVersion(3)// 设置当前类为渲染器, 注册回调接口的实现类setRenderer(this)// 设置渲染模式, 仅在需要重新绘制时才进行渲染,以节省资源renderMode = RENDERMODE_WHEN_DIRTY}override fun onSurfaceCreated(gl: GL10?, config: EGLConfig?) {// 当 Surface 创建时调用, 进行 OpenGL ES 环境的初始化操作, 设置清屏颜色为黑色 (Red=0, Green=0, Blue=0, Alpha=1)GLES30.glClearColor(0.0f, 0.0f, 0.0f, 1.0f)// 初始化缓冲区(如果需要)// initializeBuffers()}override fun onSurfaceChanged(gl: GL10?, width: Int, height: Int) {// 当 Surface 尺寸发生变化时调用,例如设备的屏幕方向发生改变, 设置视口为新的尺寸,视口是指渲染区域的大小GLES30.glViewport(0, 0, width, height)}override fun onDrawFrame(gl: GL10?) {// 每一帧绘制时调用, 清除颜色缓冲区和深度缓冲区GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT or GLES30.GL_DEPTH_BUFFER_BIT)// 绘制图形(如果需要)// drawSomething()}
}

总结

  • OpenGL ES只负责处理数据,但不知道如何渲染到屏幕,必须把数据交给EGL去渲染到屏幕
  • 应用层直接调用OpenGL ES绘制的好处:GLSurfaceViewAndroid 提供的一个用于处理 OpenGL ES 渲染的类。它封装了很多与 EGLOpenGL ES 相关的复杂性。如果在Native层方法中去进行EGL的初始化,不同设备之间存在编译失败初始化不成功的状况
关键字:OpenGL ES->创建GLSurfaceView准备渲染环境

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: