【发布时间】:2013-08-21 17:54:21
【问题描述】:
我有一个迭代调度的计算着色器,它使用 2d 纹理来临时存储值。每个调用 id 访问纹理中的特定行。
问题是,这个纹理必须在每次着色器调度之前初始化为 0。
目前我在着色器代码末尾使用了一个循环,该循环使用 imageStore() 将相应行中的所有像素重置回 0。
for (uint i = 0; i < CONSTANT_SIZE; i++)
{
imageStore( myTexture, ivec2( i, global_invocation_id ), vec4( 0, 0, 0, 0) );
}
我想知道是否有更快的方法来做到这一点,一种通过一次调用(最好是整行)设置多个像素的方法?我查看了有关图像操作的 GLSL 4.3 规范,但找不到不需要特定像素位置的规范。
如果有更快的方法在 CPU 上实现这一点,我也会对此持开放态度,我已经尝试使用 glTexImage2D() 重新缓冲纹理,但是对于每个使用 imageStore 并没有任何明显的性能变化单个像素。
【问题讨论】:
-
你的意思是“着色器调用”吗?
-
我可能用错了这个词。 “在每次着色器调用结束时”应更改为“在着色器代码结束时”。我进行了编辑。
-
你能发布你的着色器代码吗?
标签: opengl input textures glsl