专栏首页字节流动面试官:OpenGL ES 将一个纹理拷贝到另外一个纹理有哪些方式?

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

一、添加目标纹理为 FBO 的颜色附着(颜色缓冲区) ,绑定源纹理渲染到目标纹理。

二、添加源纹理为 FBO 的颜色附着(颜色缓冲区) , 使用 glCopyTexImage2D 拷贝当前 FBO 的颜色缓冲区到目标纹理。

    glBindFramebuffer(GL_FRAMEBUFFER, fboId);
    glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, srcTextureId, 0);

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, dstTextureId);

    glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, width, height);

    glBindTexture(GL_TEXTURE_2D, 0);
    glBindFramebuffer(GL_FRAMEBUFFER, 0);

三、glBlitFramebuffer 一般用于帧缓冲区(颜色缓冲区)间高性能数据拷贝(OpenGL ES 3.0)参考:OpenGL ES 多目标渲染(MRT)

glGenFramebuffers(1, &fbo);  // 源texture和目标texture共用一个FBO即可

glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 
                       GL_TEXTURE_2D, srcTextureId, 0);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, 
                       GL_TEXTURE_2D, dstTextureId, 0);

glReadBuffer(GL_COLOR_ATTACHMENT0);
glDrawBuffer(GL_COLOR_ATTACHMENT1);

glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, 
                  GL_COLOR_BUFFER_BIT, GL_NEAREST);
glBindFramebuffer(GL_FRAMEBUFFER, 0);

参考整理自:https://www.jianshu.com/p/9e5e7e62e466

-- END --

文章分享自微信公众号:
字节流动

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:字节流动
原始发表时间:2022-04-02
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • OpenGL ES 传输一个大数组给着色器有哪些方式?

    在 OpenGL ES 图形图像处理中,会经常遇到一种情况:如何将一个超大的数组传给着色器程序?

    字节流动
  • 全平台硬件解码渲染方法与优化实践

    大家好,我是来自PPTV的王斌。接下来我将围绕以下几个话题,为大家分享有关全平台硬件解码的渲染与优化的实践经验。

    LiveVideoStack
  • 面试中经常被问到的 OpenGL ES 对象,你知道的有哪些?

    VBO(Vertex Buffer Object)是指顶点缓冲区对象,而 EBO(Element Buffer Object)是指图元索引缓冲区对象,VBO 和...

    字节流动
  • 熟悉 OpenGL VAO、VBO、FBO、PBO 等对象,看这一篇就够了

    VBO(Vertex Buffer Object)是指顶点缓冲区对象,而 EBO(Element Buffer Object)是指图元索引缓冲区对象,VAO 和...

    字节流动
  • OpenGL ES for Android 世界

    大家好,本文是 iOS/Android 音视频专题的第五篇,该专题中 AVPlayer 项目代码将在 Github 进行托管,你可在微信公众号(GeekDev)...

    100001509164
  • 使用 OpenGL 实现 RGB 到 YUV 的图像格式转换

    最近,有位读者大人在后台反馈:在参加一场面试的时候,面试官要求他用 shader 实现图像格式 RGB 转 YUV ,他听了之后一脸懵,然后悻悻地对面试官说,他...

    字节流动
  • OpenGL ES 对象

    VBO(Vertex Buffer Object)是指顶点缓冲区对象,而 EBO(Element Buffer Object)是指图元索引缓冲区对象,VAO

    ruochen
  • 【Android 音视频开发打怪升级:OpenGL渲染视频画面篇】一、初步了解OpenGL ES

    提到OpenGL,想必很多人都会说,我知道这个东西,可以用来渲染2D画面和3D模型,同时又会说,OpenGL很难、很高级,不知道怎么用。

    开发的猫
  • 面试官:请使用 OpenGL ES 将 RGB 图像转换为 YUV 格式。我 ……

    最近,有位读者大人在后台反馈:在参加一场面试的时候,面试官要求他用 shader 实现图像格式 RGB 转 YUV ,他听了之后一脸懵,然后悻悻地对面试官说,他...

    字节流动
  • OpenGL ES 如何传输一个大数组到着色器程序?

    在 OpenGL ES 图形图像处理中,会经常遇到一种情况:如何将一个超大的数组传给着色器程序?

    字节流动
  • 使用 iOS OpenGL ES 实现长腿功能

    本文介绍了如何使用 OpenGL ES 来实现长腿功能。学习这个例子可以加深我们对纹理渲染流程的理解。另外,还会着重介绍一下「渲染到纹理」这个新知识点。

    iOSSir
  • (转载非原创)OpenGL ES 压缩纹理

    在实际应用特别是游戏中纹理占用了相当大的包体积,而且GPU无法直接解码目前流行的图片格式,图片必须转换为RGB等类型的格式才能上传到GPU内存,这显然增加了GP...

    xlj
  • Android OpenGL开发实践 - GLSurfaceView对摄像头数据的再处理

    文首先对GLSurfaceView相关知识进行讲解,然后介绍Android系统如何获取摄像头数据并利用GLSurfaceView渲染到屏幕上。

    天天P图攻城狮
  • iOS下 WebRTC 视频渲染

    今天为大家介绍一下 iOS 下 WebRTC是如何渲染视频的。在iOS中有两种加速渲染视频的方法。一种是使用OpenGL;另一种是使用 Metal。

    音视频_李超
  • 《Cocos2D权威指南》——3.5 CCTexture纹理类「建议收藏」

    游戏运行中,所有图像文件(PNG、PVR)都被加载成GPU可以理解的OpenGL ES纹理,而精灵则对应着这些纹理图。Cocos2D内置一个纹理缓存管理器(CC...

    全栈程序员站长
  • OpenGL ES 多目标渲染(MRT)

    OpenGL ES 多目标渲染(MRT),即多重渲染目标,是 OpenGL ES 3.0 新特性,它允许应用程序一次渲染到多个缓冲区。

    字节流动
  • OpenGL ES 如何一次性渲染到多个纹理?

    OpenGL ES 多目标渲染(MRT),即多重渲染目标,是 OpenGL ES 3.0 新特性,它允许应用程序一次渲染到多个缓冲区。

    字节流动
  • OpenGL ES实践教程(四)VR全景视频播放

    教程 OpenGL ES实践教程1-Demo01-AVPlayer OpenGL ES实践教程2-Demo02-摄像头采集数据和渲染 OpenGL ES实践...

    落影
  • OpenGL ES 共享上下文实现多线程渲染

    EGL 是 OpenGL ES 和本地窗口系统(Native Window System)之间的通信接口,它的主要作用:

    字节流动

扫码关注腾讯云开发者

领取腾讯云代金券