c++ - OpenGl 读取和写入相同的纹理

标签 c++ opengl

我有一个 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/

相关文章:

c++ - Qt MySQL 查询 - 无法绑定(bind)值

c++ - 我可以简化这个 std::list 的人口吗?

c++ - 用于数组数组的 opengl glUniform (ARB_arrays_of_arrays)

c++ - 我在笔记本电脑上找不到文件夹 C :\Program Files (x86)\Microsoft Visual Studio 14. 0\VC\include\gl。我该如何添加它?

C++/OpenGL : How does Tesselation work?

c++ - 需要以合理的精度创建自定义数据 2D 纹理

使用 GL_ELEMENT_ARRAY_BUFFER 时的 Java GLFW 段错误

c++ - C++ 代码中的这个 struct X 有什么问题?

c++ - 在C++中序列化二进制数据的正确方法

c++ - 日期函数定义的伪代码