OpenGL ES->创建GLSurfaceView准备渲染环境
创始人
2024-11-04 05:36:56

XML文件

  

自定义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的初始化,不同设备之间存在编译失败初始化不成功的状况

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...