首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glBlitFramebuffer & swizzle

glBlitFramebuffer & swizzle
EN

Stack Overflow用户
提问于 2016-06-10 12:50:35
回答 1查看 586关注 0票数 1

是否可以使用glBlitFramebuffer将带有RGBA颜色附件的读取帧缓冲区中的alpha组件复制到带有R8颜色附件的绘制帧缓冲区的红色组件中?如果没有,你会怎么做?

很明显,glBlitFramebuffer并没有使用swizzle面罩。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-10 13:14:19

这样做的唯一方法(不将内存从GPU拉回CPU)是使用某种形式的呈现操作。布利特不能这么做。

如果可用的话,可以使用计算着色器。只需通过图像加载库绑定源映像和目标映像,然后根据计算着色器的调用索引对它们进行读/写。

但是,还不清楚通过执行此复制操作您希望得到什么。如果您只计划将GL_R8纹理读取为绑定纹理/图像,那么您所需要做的就是创建RGBA映像的视图纹理。创建视图的原因是能够为视图提供一个不同的摆动面罩。只需将alpha设置为红色,并将绿色/蓝色/alpha设置为0,1。

显然,访问一个真正的GL_R8纹理是不那么有效的。但是,您也不必执行可能昂贵的复制操作。

使用GL4.5直接状态访问呼叫:

代码语言:javascript
复制
GLuint alpha_tex;
glCreateTexture(GL_TEXTURE_2D, &alpha_tex);
glTextureView​(alpha_tex, GL_TEXTURE_2D, rgba_tex, GL_RGBA8, 0, num_mipmaps(rgba_tex)​, 0, 1​)
GLint swizzleMask[] = {GL_ALPHA, GL_ZERO, GL_ZERO, GL_ONE};
glTexureParameteriv(alpha_tex, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37748770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档