繁体   English   中英

读取和写入一个纹理(OpenGL)

[英]Read and Write in one Texture (OpenGL)

我想在纹理中存储和更新信息。 因此,我的想法是,使用当前信息创建一个新纹理。 在将其存储在渲染过程中时,我实际上想从同一像素中读取信息,并存储两个值的加权平均值。 因此,渲染到该像素的值以及该像素上已经存在的值。

现在,我经常阅读,无法在同一纹理上读写。 现在我的问题是,可能吗? 如果不是,我是否应该在渲染步骤之前复制纹理信息并将副本传递给着色器? 如果是这样,如何复制纹理? 还是应该做一个额外的渲染步骤来复制?

我在这里看到两个可能的选择,具体取决于混合方程式

  • Alpha混合:如果可以将使用的方程式映射到glBlendFunc函数之一,则可以采用这种方法。 如果要对存储的值和新值使用线性因子,则应该可行。 这也是我希望获得最佳性能的选项。

  • 图像加载存储:使用这种方法,可以同时读取和写入相同的纹理( 请参见此处 )。 在这里,性能通常会很差,您将不得不使用原子映像操作来确保同一位置的多个片段始终读取正确的值。

在我看来,复制纹理仅在渲染图像后对其进行一次加权平均计算才有效(否则,每次存储操作后都必须复制纹理)。 但是,如果是这种情况,则可以将平均计算的结果简单地呈现为不同的纹理,并完全避免了复制输入数据的所有麻烦。

如果选择扩展,则可以使用NV_texture_barrier ,它允许从相同的纹理进行写入和读取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM