LearnOpenGL - Android OpenGL ES 3.0 使用 FBO 进行离屏渲染
// 创建和配置FBO
val fbo = IntBuffer.allocate(1)
GLES30.glGenFramebuffers(1, fbo)
GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, fbo.get(0))
// 创建和配置纹理
val texture = IntBuffer.allocate(1)
GLES30.glGenTextures(1, texture)
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, texture.get(0))
GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_RGBA, width, height, 0, GLES30.GL_RGBA, GLES30.GL_UNSIGNED_BYTE, null)
GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR)
GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_LINEAR)
// 绑定纹理到FBO
GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, texture.get(0), 0)
// 检查FBO是否配置正确
if (GLES30.glCheckFramebufferStatus(GLES30.GL_FRAMEBUFFER) != GLES30.GL_FRAMEBUFFER_COMPLETE) {
// 处理错误情况
}
// 使用FBO进行渲染
GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, fbo.get(0))
// 渲染到纹理...
// 渲染完成后,解绑FBO并进行后续渲染工作
GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, 0)
这段代码展示了如何在OpenGL ES 3.0中创建一个帧缓冲对象(FBO)并将一个纹理附加到它,然后如何使用这个FBO进行离屏渲染。在渲染到纹理之前,它还配置了纹理的过滤设置。最后,它展示了如何检查FBO是否配置正确,并在完成渲染后解绑FBO。
评论已关闭