我有一个RGBA16F纹理,深度为normal.x,normal.y就可以了.我想读取r,g,b并写入纹理上的a.我将完全击中每个像素一次.
如果我在这种情况下读取和写入相同的纹理,是否会出现性能问题?
不存在性能问题.会出现功能问题.如在,它将无法工作.
您无法从通过FBO写入的图像中读取并希望获得合理的结果.这会产生不确定的行为.
如果您使用shader_image_load_store进行阅读/写作,您可能可以逃脱它.但即使这样,它也是一个读/修改/写操作; 你必须回写你读的alpha.
话虽这么说,如果你确定你将" 完全击中每一个像素"(强调添加),你确实有一个追索权.即,NV_texture_barrier.不要让这个扩展名上的"NV"欺骗你; 它也广泛应用于AMD硬件(所有HD系列卡).此扩展允许您使用"屏障"功能(实际上是一个告诉GPU清除帧缓冲区和纹理缓存的函数),在调用之后,它将允许您在片段着色器中完成一次读取/修改/写入操作.在那一次传球之后,你需要在第二次传球之间的另一个障碍.