是否可以使用glBlitFramebuffer将带有RGBA颜色附件的读取帧缓冲区中的alpha组件复制到带有R8颜色附件的绘制帧缓冲区的红色组件中?如果没有,你会怎么做?
很明显,glBlitFramebuffer并没有使用swizzle面罩。
发布于 2016-06-10 13:14:19
这样做的唯一方法(不将内存从GPU拉回CPU)是使用某种形式的呈现操作。布利特不能这么做。
如果可用的话,可以使用计算着色器。只需通过图像加载库绑定源映像和目标映像,然后根据计算着色器的调用索引对它们进行读/写。
但是,还不清楚通过执行此复制操作您希望得到什么。如果您只计划将GL_R8纹理读取为绑定纹理/图像,那么您所需要做的就是创建RGBA映像的视图纹理。创建视图的原因是能够为视图提供一个不同的摆动面罩。只需将alpha设置为红色,并将绿色/蓝色/alpha设置为0,1。
显然,访问一个真正的GL_R8纹理是不那么有效的。但是,您也不必执行可能昂贵的复制操作。
使用GL4.5直接状态访问呼叫:
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);https://stackoverflow.com/questions/37748770
复制相似问题