OpenGL ES学习教程 --- FBO
OpenGL ES学习教程 — FBO
简介之什么是FBO
Frame Buffer Object帧缓冲对象,按照之前的学习绘制图像、纹理,着色器着色后最后一步,会将所有的数据都传给FBO,然后在屏幕上显示,只不过没使用自定义FBO之前都是使用默认的FBO,这个FBO id为0;使用我们自定义的FBO,绑定激活后,后续的渲染操作都会传递到这个FBO上,而且这个FBO不会显示屏幕上,我们可以对这个FBO内部存储的数据进行自己的操作,适合一些不需要显示屏幕上、突破屏幕尺寸的需求工作,也就是所谓的离屏渲染
FBO本身是没有分配渲染的内存,它更像一个资源的管理者,提供一些附着点,让纹理和渲染缓存(Render Buffer)附着,提供渲染;FBO实现有两种方式,一种是EGL实现 ,另一种是使用GLSurfaceView实现,本文以GLSurfaceView方式来阐述
今天没有心情写了,直接贴核心源码
创建
public static int getFramBufferId(){
int fboId[] = new int[1];
GLES20.glGenFramebuffers(1, fboId, 0);
return fboId[0];
}
激活FBO
这一步很重要,之前我总是搞混 GL_FRAMEBUFFER相当于一个激活的变量,应该只有一个才能激活,当前fbo被激活了, 后续对Render的渲染都会把数据放到这个fbo,所有对像素数据的读写操作都在这个fbo, 如果不需要在此fbo操作,要解除绑定,并切换使用以下同一个方法切换绑定
int fboId = GLHelper.getFramBufferId();
/**
* 这一步很重要,之前我总是搞混
* GL_FRAMEBUFFER相当于一个激活的变量,应该只有一个才能激活,当前fbo被激活了,
* 后续对Render的渲染都会把数据放到这个fbo,所有对像素数据的读写操作都在这个fbo,
* 如果不需要在此fbo操作,要解除绑定,并切换使用以下同一个方法切换绑定
*/
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fboId);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture[1]);
绑定
texture = GLHelper.loadTexture(context, bitmap);
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fboId);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture[1]);
//纹理作为颜色附着在FBO上
GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0,
GLES20.GL_TEXTURE_2D, texture[1], 0);
//创建render buffer并绑定
GLES20.glGenRenderbuffers(1, fRender, 0);
GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, fRender[0]);
GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER, GLES20.GL_DEPTH_COMPONENT16,
imgWidth, imgHeight);
GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER, GLES20.GL_DEPTH_ATTACHMENT,
GLES20.GL_RENDERBUFFER, fRender[0]);
以上要使用GLSurfaceView才能创建使用FBO,经过上面的配置,进行常规的纹理、图元绘制就会绘制到FBO上去了,而不会在屏幕上显示
最后,献上我的demo
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】