美文网首页
OpenGL ES学习笔记(1)

OpenGL ES学习笔记(1)

作者: the_Zhang | 来源:发表于2020-06-06 12:20 被阅读0次

OpenGL ES学习笔记

1. 入门

在Android中使用OpenGL ES需要使用到GLSurfaceView和Renderer

1.1 GLSurfaceView

// 设置OpenGLES版本
gl_surfaceView.setEGLContextClientVersion(2)
// 设置渲染器
gl_surfaceView.setRenderer(OpenGLRender())
// 设置渲染模式 (RENDERMODE_CONTINUOUSLY | RENDERMODE_WHEN_DIRTY)
// RENDERMODE_CONTINUOUSLY 表示自动渲染(默认)
// RENDERMODE_WHEN_DIRTY   表示手动渲染,需要调用 GLSurfaceView.requestRender()方法渲染
gl_surfaceView.renderMode = GLSurfaceView.RENDERMODE_CONTINUOUSLY

// 注:gl_surfaceView是布局文件中GLSurfaceView的id

GLSurfaceView的渲染在OpenGL线程中,如果需要相互通信可以使用如下的方法

  • 通信方式
    • UI线程 -> OpenGL线程:GLSurfaceView.queueEvent()
    • OpenGL线程 -> UI线程:runOnUiThread()

1.2 Renderer

class OpenGLRender : GLSurfaceView.Renderer{

    override fun onSurfaceCreated(gl: GL10?, config: EGLConfig?) {
        // 设置清空屏幕时用的颜色(R, G, B, A)
        glClearColor(1f, 0f, 0f, 0f)
    }

    override fun onSurfaceChanged(gl: GL10?, width: Int, height: Int) {
        // 设置窗口大小
        glViewport(0, 0, width, height)
    }

    override fun onDrawFrame(gl: GL10?) {
        // 清空屏幕
        glClear(GL_COLOR_BUFFER_BIT)
    }
}
  • onSurfaceCreated

    在Surface被创建时的时候,GLSurfaceView会调用这个方法(可能会被调用多次: Activity切换,唤醒)

  • onSurfaceChanged

    在Surface创建后,每次Surface的尺寸发生改变时会调用

  • onDrawFrame

    在绘制的时候会被调用,在这个方法中需要绘制东西或者清空屏幕


  • 参考资料

    OpenGL ES应用开发实践指南(Android卷),第一章

  • 代码链接

    chapter1

相关文章

网友评论

      本文标题:OpenGL ES学习笔记(1)

      本文链接:https://www.haomeiwen.com/subject/jehxtktx.html