我使用帧缓冲区将图形绘制到纹理,然后我想将这个纹理的内容复制到另一个纹理。这两个纹理是在不同的 gl 上下文中创建的。
有一个方法可以,但是性能比较差。首先使用glReadPixels从帧缓冲区读取数据,然后反预乘(因为帧缓冲区中的数据是预乘的),然后使用glTexImage2D将数据传输到另一个纹理。
网上有建议使用glCopyTexImage2D。但是我试了之后,发现贴图被复制并再次预乘,导致半透明部分渲染异常。
[EAGLContext setCurrentContext:sourceCtx];
glBindFramebuffer(GL_FRAMEBUFFER, sourceFbo);
glBindTexture(GL_TEXTURE_2D, targetTexture);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, w, h, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glBindTexture(GL_TEXTURE_2D, 0);
[EAGLContext setCurrentContext:targetCtx];
从openGL读取的像素是预乘的,那么通过glTexImage2D/glCopyTexImage2D方法传入的数据是不是非预乘的?