我有一个 RGBA16F 纹理,上面有深度、normal.x、normal.y。我想读取 r、g、b 并写入纹理上的 a。我将只击中每个像素一次。
如果我在这种情况下读取和写入相同的纹理,会不会有性能问题?
最佳答案
不会有性能问题。会有一个功能问题。就像这样,它不会起作用。
您不能从通过 FBO 写入的图像中读取并期望获得合理的结果。这会产生未定义的行为。
如果您使用 shader_image_load_store 进行读/写,您也许可以摆脱它。但即便如此,这也是一个读/修改/写操作;你必须写回你读到的阿尔法。
也就是说,如果您确定您将“准确地击中每个像素一次”(强调已添加),您确实有追索权。即 NV_texture_barrier .不要让这个扩展上的“NV”欺骗了你;它也广泛应用于 AMD 硬件(所有 HD 系列卡)。此扩展允许您使用“屏障”函数(实际上是一个告诉 GPU 清除帧缓冲区和纹理缓存的函数),在调用之后,您将允许您精确地执行一次读取/修改/写入您的片段着色器。在一次通过之后,您需要在第二次通过和第二次通过之间设置另一个屏障。
关于c++ - OpenGl 读取和写入相同的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11410292/