读写一个纹理(OpenGL)
Read and Write in one Texture (OpenGL)
我想在纹理中存储和更新信息。因此,我的想法是,我创建了一个新纹理,并提供当前信息。在渲染过程中存储它时,我实际上想从同一像素中读取信息,并存储两个值的加权平均值。因此,呈现给该像素的值以及该像素上已经存在的值。
现在,我经常读到我无法在同一纹理上读写。现在我的问题是,可能有可能吗?如果没有,我应该在渲染步骤之前复制纹理信息并将副本传递给着色器?如果是这样,我该如何复制纹理?还是我应该做一个额外的渲染步骤?
我在这里看到了两个可能的选项,具体取决于混音方程
-
alpha混合:如果可以将所使用的方程式映射到
glBlendFunc
函数之一,那么这就是要走的方式。如果您想对存储的线性因子使用线性因子,并且应该可以使用新值。这也是我期望表现最好的选择。 -
图像加载存储:使用此方法,一个人可以同时读写并写入同一纹理(请参阅此处)。性能通常在这里非常糟糕,您将必须使用图像原子操作来确保在同一位置的多个片段始终读取正确的值。
我认为,复制纹理只能在您渲染图像然后之后执行一个加权平均计算时(否则,您必须在每个商店操作后都必须复制纹理)。但是,如果是这种情况,可以简单地将平均计算的结果渲染到不同的纹理,并完全避免复制输入数据的所有麻烦。
如果是一个选项,则可以使用NV_TEXTURE_BARRIER,允许从相同的纹理写和阅读。
相关文章:
- OpenGL大的3D纹理(>2GB)非常慢
- OpenGL将纹理四边形渲染为(0,0)
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- Qt OpenGL 渲染到纹理性能问题
- 使用 C++在 OpenGL 中对 3D 多边形进行纹理处理
- 无法获取要在 OpenGL ES2 中显示的 RGB 纹理
- 在 OpenGL 中加载纹理C++
- 添加新纹理OpenGL时,模型消失了
- 初始化多个纹理 OpenGL、SDL C++ 时出现问题
- 将多个纹理 OpenGL 绑定到不同的四边形
- 如何加载纹理Opengl
- 读写一个纹理(OpenGL)
- 渲染时加载纹理 (OpenGL)
- 如何绑定纹理openGL的一部分
- 将两个图像堆栈的非电源加载到 3D 纹理 OpenGL C++
- 我的精灵在纹理opengl之间切换
- 使用深度纹理OpenGL/GLSL的深度遮挡(3.3/330)
- 加载多纹理opengl 2.0
- 将位置写入纹理OpenGL/GLSL
- 为纹理OpenGL C++加载多个.bmp文件时出现问题