我想把当前深度缓冲区渲染到纹理中,以便在着色器中访问。由于各种原因,我不能进行单独的深度通道,但需要复制已经渲染好的深度。
使用
如何在GPU上完成这个任务?
使用
glReadPixels
会涉及到CPU并可能降低性能,据我所知glBlitFramebuffer
无法将深度复制到颜色,只能将深度复制到深度。如何在GPU上完成这个任务?
glBlitFramebuffer()
执行从一个到另一个的复制吗? - livin_amukglBlitFramebuffer()
复制方法吗? - livin_amuk最好的方法是使用FBO(Frame Buffer Object),这样可以获得更好的性能和一些编码风格问题。如果您不感兴趣,请查看此代码。这是我年轻时的代码!(当时并不知道FBO的存在)
int shadowMapWidth = 512;
int shadowMapHeight = 512;
glGenTextures(1, &m_depthTexture);
glBindTexture(GL_TEXTURE_2D, m_depthTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, shadowMapWidth, shadowMapHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 512,512);