【发布时间】:2013-04-12 14:12:59
【问题描述】:
我想将纹理 1 复制到纹理 2。 最笨的方法是把tex1数据从GPU复制到CPU,然后再把CPU数据复制到GPU。 愚蠢的代码如下:
float *data = new float[width*height*4];
glBindTexture(GL_TEXTURE_2D, tex1);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_FLOAT, data);
glBindTexture(GL_TEXTURE_2D, tex2]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_FLOAT, data);
据我所知,它必须存在一种支持将数据从 GPU tex 复制到 GPU tex 而不涉及 CPU 的方法。我考虑使用将 tex1 四边形渲染到 tex2 的 FBO。但不知何故,我认为这仍然是幼稚的。那么实现这一点的最有效方法是什么?
【问题讨论】:
-
glCopyTexImage2D 从颜色缓冲区复制到纹理。我认为它应该有一种方法可以避免渲染到颜色缓冲区或帧缓冲区。
-
FBO 中的颜色缓冲区也可以是纹理。
-
你的意思是使用FBO renderingToTexture?我知道这可行。我认为应该有更好的方法。就像在 CUDA 中一样,我们可以使用 cudamemcpy(..,cudaMemcpyDeviceToDevice)
-
由于 CUDA ist NV 特定并且基本上会做同样的事情,我认为 FBO 使用更好是可能的。