首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏曾大稳的博客

    OpenGLES帧缓冲FBO

    FBO Frame Buffer object 为什么要用FBO 我们需要对纹理进行多次渲染采样时,而这些渲染采样是不需要展示给用户看的,所以我们就可以用一个单独的缓冲对象(离屏渲染)来存储我们的这几次渲染采样的结果 渲染方式 渲染到纹理(Texture)- 图像渲染 渲染到缓冲区(Render)- 深度测试和模板测试 FBO纹理的坐标系 ? 渲染到纹理 ? 创建FBO的步骤: //1. 绑定FBO GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fboId); //3. 创建FBO纹理 fboTextureId = createTexture(); //4. , 0); 使用FBO的步骤: //1.

    2.2K20发布于 2018-09-11
  • 《WebGL中FBO的底层运行逻辑》

    理解FBO,就像掀开舞台幕布的一角,得以窥见那些令人惊叹的视觉效果背后,数据如何被驯服、被重塑、被赋予新的意义。要真正触摸到FBO的价值,需先拆解WebGL的基础渲染链条。 正是这种"接口+器材"的灵活组合,让FBO能应对从简单滤镜到复杂光影模拟的各种需求。离屏渲染的完整流程,是FBO功能的最佳诠释。 例如,制作带有光晕的角色技能特效时,可先在第一个FBO中渲染角色本体,在第二个FBO中绘制发光效果,然后通过混合算法将两个FBO的结果叠加,最终呈现出既有清晰轮廓又有朦胧光晕的效果。 此外,FBO的复用策略也能显著提升效率——预先创建多个FBO组成"对象池",需要时直接调用,避免频繁创建与销毁对象带来的性能损耗。 对于开发者而言,掌握FBO意味着跳出"所见即所得"的局限,进入"按需构建"的创作维度:想要什么样的效果,就搭建什么样的FBO流程,数据的流转路径完全由需求决定。

    28100编辑于 2025-08-14
  • 来自专栏字节流动

    NDK OpenGLES3.0 开发(五):FBO 离屏渲染

    什么是 FBO FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。 使用 FBO 作为渲染目标时,首先需要为 FBO 的附着添加连接对象,如颜色附着需要连接纹理或者渲染缓冲区对象的颜色缓冲区。 ? 因此,引入了帧缓冲区对象 FBO 来解决这个问题。 怎么用 FBO 创建并初始化 FBO 的步骤: // 创建一个 2D 纹理用于连接 FBO 的颜色附着 glGenTextures(1, &m_FboTextureId); glBindTexture( FBO 渲染结果图

    2.6K72发布于 2020-06-03
  • 来自专栏字节流动

    熟悉 OpenGL VAO、VBO、FBO、PBO 等对象,看这一篇就够了

    FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。 FBO 本身不能用于渲染,只有添加了纹理或者渲染缓冲区之后才能作为渲染目标,它仅且提供了 3 个附着(Attachment),分别是颜色附着、深度附着和模板附着。 渲染缓冲区可以用于分配和存储颜色、深度或者模板值,可以用作 FBO 中的颜色、深度或者模板附着。 使用 FBO 作为渲染目标时,首先需要为 FBO 的附着添加连接对象,如颜色附着需要连接纹理或者渲染缓冲区对象的颜色缓冲区。 PBO 仅用于执行像素传输,不连接到纹理,且与 FBO (帧缓冲区对象)无关。 PBO 类似于 VBO(顶点缓冲区对象),PBO 开辟的也是 GPU 缓存,而存储的是图像数据。

    12.2K85发布于 2021-10-27
  • 来自专栏进击的多媒体开发

    OpenGL 之 帧缓冲 使用实践

    帧缓冲(Framebuffer Object),简称 FBO,在渲染绘制中, 图像最终都是绘制到 FBO 上的,一般都是默认的 FBO 上,也就是我们的屏幕。 除此之外,还可以创建自己的 FBO,用来作为绘制的载体,当在自己的 FBO 上绘制好了之后,可以再把绘制内容显示到屏幕上,实现一个双缓冲的绘制。 FBO 的颜色和深度附件。 使用步骤 创建 FBO 按照上面的步骤,首先是创建 FBO 。 如果是使用 OpenGL 3.x 版本,在绑定 FBO 时,还可以选择是绑定只读还是只写的 FBO

    2K20发布于 2019-07-25
  • 来自专栏阿利民

    「Android音视频编码那点破事」第三章,使用OpenGL为Camera添加各种滤镜

    通过FBO,我们可以先把摄像头数据绘制到Camera SurfaceTexture纹理上,然后把这个纹理数据再绘制到一个离屏的FBO,我们可以在这个FBO上做各种特效处理,处理完之后再把离屏FBO中的数据绘制到 其实Camer SurfaceTexture也需要一个FBO,因为需要把摄像头数据缓存到这个FBO,那为什么TextureView却不需要呢,因为广义上来说,屏幕的缓存就是它的FBO。 从数据流方向来看,Camer SurfaceTexture从Camera中读取数据缓存到自己的FBO中,然后离屏FBO通过Camer SurfaceTexture的ID读取Camera FBO中的数据缓存到自己的内存中 ,在这里可以对这个FBO做各种处理,最后TextureView从离屏FBO的ID读取缓存的数据绘制到屏幕上。    ,通过这个往FBO内存中写入数据 frameBuffer = frameBuffer[0] //FBO ID,通过这个从FBO的内存中读取数据 frameBufferTexture

    93310编辑于 2022-05-16
  • 来自专栏关键帧Keyframe

    一看就懂的 OpenGL 基础概念(4):各种 O 之 FBO丨音视频基础

    接下来我们来介绍另外一种重要的对象:FBO。 8、FBO 上面我们介绍了通过 VBO、EBO 和 VAO 管理渲染过程中的数据来优化渲染性能,接下来我们来介绍另一个重要的 XXO:帧缓冲区对象 FBO(Frame Buffer Object)。 FBO 是 OpenGL 渲染管线的最终目标,但其实 FBO 本身不直接用于渲染,而是要为其绑定好附件后才能作为渲染目标。 下面是一个简单的使用纹理附件的例子: // 创建和绑定 FBO: GLuint fbo; glGenFramebuffers(1, &fbo); // 创建 FBO glBindFramebuffer( (1, &fbo); // 创建 FBO glBindFramebuffer(GL_FRAMEBUFFER, fbo); // 绑定 FBO,注意:如果这里用 glBindFramebuffer(GL_FRAMEBUFFER

    2.6K30编辑于 2022-11-29
  • 来自专栏即时通信与音视频

    TRTCSDK自定义采集Texture2D视频通话

    上操作,把输入的纹理ID上的图像,输出到FBO的纹理ID上然后返回。 FBO离屏渲染呢,什么是FBO呢。 帧缓冲对象FBO(Frame buffer Object)。 安卓端FBO写法 前文代码示例中,已经给出了FBO的写法了,这里再展示FBO的OpenGL.API 1、创建FBO //创建FrameBuffer mFrameBuffers = new int[1]; GLES20.glGenFramebuffers(mFrameBuffers.length, mFrameBuffers, 0); 2、绑定FBO 通过绑定纹理对象来锁定挂接渲染区 //绑定FBO,在

    1.6K41发布于 2020-12-04
  • 来自专栏程序员的园——原创文章

    渲染缓冲对象——高效帧缓冲附件

    引言 在上一章节讲解FBO时,使用纹理来存储颜色缓存附件、深度缓存附件、模板缓存附件,但纹理并不是唯一的选择。 渲染缓冲对象(RBO)是 OpenGL 提供的一种存储渲染结果的帧缓冲对象(FrameBuffer Object,FBO)附件,与帧缓冲对象(FBO)配合使用。 相关接口 RBO的相关接口涉及到其创建、绑定、分配存储空间、附加到FBO等操作,下面是相关接口的详细说明: // 创建渲染缓冲对象 // n: 要创建的 RBO 数量 // renderbuffers ,GLuint &colorTexture, GLuint &rbo, int width, int height) { // 创建 FBO glGenFramebuffers(1, &fbo ); glBindFramebuffer(GL_FRAMEBUFFER, fbo); // 创建并绑定颜色缓冲纹理 glGenTextures(1, &colorTexture);

    94210编辑于 2024-09-10
  • 来自专栏猫哥的专栏

    【Android 音视频开发打怪升级:OpenGL渲染视频画面篇】五、OpenGL FBO数据缓冲区

    而在视频编辑当中,FBO离屏渲染扮演着很重要的角色,许多的视频滤镜都会用到,接下来就来看看FBO如何使用吧。 二、FBO简介 OpenGL 在渲染到系统窗口之前,都会将数据送到 FBO 上,也就是说,FBO 其实一直在默默的为我们服务。 所以,OpenGL 在一开始就创建了一个默认的 FBO。 之所以说是缓冲索引,是因为FBO并不包含这些缓冲数据,仅仅保存了缓冲数据的索引地址。 FBO和这些缓冲区则通过附着点进行连接。 ? 可以看到FBO中包含了: 1. 上面说了,FBO可用于离屏渲染,下面就来看看如何通过FBO将画面渲染到一个“后台”的纹理中。 这里的后台,指不用于显示到窗口的纹理。 三、如何使用FBO 1. 的流程了: 新建纹理 新建FBO 绑定将纹理附着到FBO的颜色附着点上 【渲染】 解绑FBO 删除FBO 除了第4步以外,其他都是上面的封装好的方法。

    3.4K42发布于 2020-04-02
  • OpenGL中Framebuffer的学习

    着色器✅glReadPixels着色器访问✅可被采样❌无法绑定采样性能特点Mipmap/Filter支持硬件层优化(某些GPU更快)适合场景后处理/屏幕特效纯深度测试(如阴影生成)使用帧缓冲的步骤:创建FBO 展开代码语言:C++AI代码解释GLuintfbo;glGenFramebuffer(1,&fbo);为FBO创建texture或者renderbuffer,用于存储信息展开代码语言:C++AI代码解释 backwardSceneDepthRBO);//分配内存+格式glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH24_STENCIL8,width,height);为fbo texture,0);glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_STENCIL_ATTACHMENT,GL_RENDERBUFFER,rbo);//检查fbo (GL_FRAMEBUFFER,fbo);glViewport(0,0,width,height);//必须匹配fbo尺寸renderScene();glBindFramebuffer(GL_FRAMEBUFFER

    23810编辑于 2025-11-08
  • 来自专栏字节流动

    面试官:OpenGL ES 将一个纹理拷贝到另外一个纹理有哪些方式?

    一、添加目标纹理为 FBO 的颜色附着(颜色缓冲区) ,绑定源纹理渲染到目标纹理。 二、添加源纹理为 FBO 的颜色附着(颜色缓冲区) , 使用 glCopyTexImage2D 拷贝当前 FBO 的颜色缓冲区到目标纹理。 glBlitFramebuffer 一般用于帧缓冲区(颜色缓冲区)间高性能数据拷贝(OpenGL ES 3.0)参考:OpenGL ES 多目标渲染(MRT) glGenFramebuffers(1, &fbo ); // 源texture和目标texture共用一个FBO即可 glBindFramebuffer(GL_FRAMEBUFFER, fbo); glFramebufferTexture2D(GL_READ_FRAMEBUFFER

    5.4K20编辑于 2022-04-06
  • 来自专栏字节流动

    Android OpenGL ES 实现蓝线挑战特效

    在不了解其本质的时候就想得很复杂,把简单的事情复杂化,这样就算实现出来,也没什么意义,所以要观察其本质,保留上一帧就是其本质 笔者也是琢磨了很久,如何保留上一帧,保留后要如何再显示出来,当笔者一筹莫展的时候,突然发现Fbo 就有保留上一帧的功能,好了,本质找到了,那么就着手实现 FBO 保留上一帧 首先,Fbo 的概念性的东西,大家可以上网查查,这里就直接说说Fbo的作用 Oes纹理转换2D纹理 预览相机、播放视频等这些通过 ,之前笔者也说过,BaseRender是笔者自定义一个基础渲染类,包括渲染、绑定Fbo、绑定Vbo之类的操作 onDraw中,将当前渲染后的Fbo纹理传入lastRender的onDraw方法中,此时, 因为LaseRender绑定了Fbo,则对应的内容不渲染到屏幕,而是保留在帧缓存里,接着获取LaseRender的Fbo纹理,并赋值给LaseTextureId 于是,就得到了两个纹理,一个是当前相机纹理 的值,就可以达到对应的效果 到这里,还差一点,就是蓝线 那么,接下来就来绘制下蓝线 蓝线绘制 蓝线的绘制就比较简单,在「RetainFrameVerticalRender.java」绘制完成后,再使用其Fbo

    1.4K30发布于 2021-08-12
  • 来自专栏写个呆萌

    TRTCSDK自定义采集Texture2D视频通话

    上操作,把输入的纹理ID上的图像,输出到FBO的纹理ID上然后返回。 离屏渲染呢,什么是FBO呢。 帧缓冲对象FBO(Frame buffer Object)。 安卓端FBO写法 前文代码示例中,已经给出了FBO的写法了,这里再展示FBO的OpenGL.API 1、创建FBO //创建FrameBuffer mFrameBuffers = new int[1]; GLES20.glGenFramebuffers(mFrameBuffers.length, mFrameBuffers, 0); 2、绑定FBO 通过绑定纹理对象来锁定挂接渲染区 //绑定FBO

    1.6K40发布于 2020-12-03
  • 来自专栏腾讯云终端专家服务

    TRTCSDK自定义采集Texture2D视频通话

    上操作,把输入的纹理ID上的图像,输出到FBO的纹理ID上然后返回。 FBO离屏渲染呢,什么是FBO呢。 帧缓冲对象FBO(Frame buffer Object)。 安卓端FBO写法 前文代码示例中,已经给出了FBO的写法了,这里再展示FBO的OpenGL.API 1、创建FBO //创建FrameBuffer mFrameBuffers = new int[1]; GLES20.glGenFramebuffers(mFrameBuffers.length, mFrameBuffers, 0); 2、绑定FBO 通过绑定纹理对象来锁定挂接渲染区 //绑定FBO,在

    2K60发布于 2020-12-03
  • 来自专栏曾大稳的博客

    OpenGLES通过SurfaceTexture预览摄像头画面

    在这篇文章主要用到的知识点有如下,建议先看一下: OpenGLES绘制图片纹理 OpenGLES顶点缓冲VBO OpenGLES帧缓冲FBO 有一个渲染流数据的相关的示例,也可以看一下,这样对本篇理解就会很简单 ES生成纹理 2.OpenGL ES创建SurfaceTexture并绑定 3.OpenGL ES摄像头预览 比如美颜相机那些,处理摄像头数据展示出来,为了提高预览的效率,所以这里使用了VBO和FBO FBO所需的glsl: vertex_shader.glsl attribute vec4 av_Position;//顶点位置 attribute vec2 af_Position;//纹理位置 varying 处理,然后拿到fbo的纹理id渲染即可: @Override public void onDrawFrame() { //调用触发onFrameAvailable glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //使用程序 GLES20.glUseProgram(program); //绑定fbo

    4.7K20发布于 2018-09-11
  • 来自专栏字节流动

    OpenGL ES 如何一次性渲染到多个纹理?

    使用 MRT 技术,一般需要为帧缓冲区对象(FBO)的设置多个颜色附着。 FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。 FBO 帧缓冲区对象 FBO 本身不能用于渲染,只有添加了纹理或者渲染缓冲区之后才能作为渲染目标,它提供了 3 种附着(Attachment),分别是颜色附着、深度附着和模板附着。 本文为演示 MRT 技术的使用,为 FBO 的颜色附着设置 4 个纹理,一个纹理作为一个颜色附着(颜色缓冲区)。 ); glBindFramebuffer(GL_FRAMEBUFFER, m_FBO); //生成 4 个纹理 glGenTextures(ATTACHMENT_NUM, m_AttachTexIds

    3.7K51编辑于 2022-02-09
  • 来自专栏音视频技术

    ShareREC for iOS录屏原理解析

    然后根据当前的context,创建捕获屏幕纹理CVOOpenGLESTextureRef,随后创建中间渲染纹理;最后绑定纹理到FBO上面,此时,原本绘制到屏幕上的内容,将转为绘制到我们创建的中间渲染纹理上面 其实现流程如图所示: 其中绑定纹理到FBO的代码如下: //绑定纹理到FBO上 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 ; glGetIntegerv(GL_FRAMEBUFFER_BINDING, &fbo); //创建输出屏幕FBO glGenFramebuffers ); 上面主要阐述创建自己的renderTexture后,然后通过绑定纹理到FBO上面,执行这样的操作以后,原本输出到屏幕上的内容,将转为绘制到renderTexture中,然后再创建输出屏幕FBO,以及截图的 FBO;最后再通过_captureFbo画入捕捉纹理,通过_outFbo输出到屏幕。

    2.1K20发布于 2021-09-02
  • 来自专栏字节流动

    OpenGL ES 多目标渲染(MRT)

    使用 MRT 技术,一般需要为帧缓冲区对象(FBO)的设置多个颜色附着。 FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。 ? FBO 本身不能用于渲染,只有添加了纹理或者渲染缓冲区之后才能作为渲染目标,它提供了 3 种附着(Attachment),分别是颜色附着、深度附着和模板附着。 本文为演示 MRT 技术的使用,为 FBO 的颜色附着设置 4 个纹理,一个纹理作为一个颜色附着(颜色缓冲区)。 ); glBindFramebuffer(GL_FRAMEBUFFER, m_FBO); //生成 4 个纹理 glGenTextures(ATTACHMENT_NUM, m_AttachTexIds

    3.4K31发布于 2020-10-12
  • 来自专栏曾大稳的博客

    OpenGLES正交投影

    创建FBO int[] fbos = new int[1]; GLES20.glGenFramebuffers(1, fbos, 0); fboId = fbos 绑定FBO GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fboId); //3. 创建FBO纹理 fboTextureId = createTexture(); //4. 设置FBO分配内存大小 GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, w, h, 解绑纹理和FBO GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); GLES20.glBindFramebuffer(GLES20

    1K40发布于 2018-09-11
领券