在渲染时重用WebGL中的纹理

时间:2016-03-30 03:42:03

标签: concurrency webgl

我在WebGL中有很长的着色器管道,每个着色器从输入纹理读取,渲染到另一个纹理,最后一个纹理包含所需的结果。

我可以在管道中重用纹理,就像同步运行一样吗?

// ... init texA to contain input  ...
shader1.samplingFrom(texA).renderTo(texB);
shader2.samplingFrom(texB).renderTo(texA);
shader3.samplingFrom(texA).renderTo(texB);
return readPixels(texB); // Always the same answer?

就此而言,我是否可以在下一阶段开始之前依赖着色器完成?

// ... init texA to contain input  ...
shader1.samplingFrom(texA).renderTo(texB);
shader2.samplingFrom(texB).renderTo(texC);
shader3.samplingFrom(texC).renderTo(texD);
return readPixels(texD); // Always the same answer?

我最初认为我可以重复使用纹理,但是我注意到如果我停止管道(意味着某种竞争条件),奇怪的行为会消失,所以现在我不确定提供了什么保证。

1 个答案:

答案 0 :(得分:1)

是的,您可以重复使用纹理。在OpenGL / WebGL中你可以做什么,在同一个绘图调用中读取并渲染到相同的纹理。

同样着色器一个接一个地运行,而不是并行运行,至少在OpenGL中运行。单个着色器可以在内部并行执行某些操作,但结果必须与串行运行的结果相同。