我一直在尝试创建一个多视口 webgl 应用程序。
对于每个视图,我使用视口+剪刀将所有内容渲染得非常好。
但现在我想改进渲染并只渲染更新的视图,因此跳过过度绘制。
我做了一个小演示来展示这个想法:http://kile.stravaganza.org/lab/js/scissor/ http://kile.stravaganza.org/lab/js/scissor/
据我了解剪刀,假设它只会渲染当前的剪刀框并保持画布的其余部分不变。但无论我尝试什么,它似乎都会不断清除每一帧上的整个画布:(
这是渲染代码(最后一个视图应该只渲染一次并将其保留在每一帧上):
function drawScene()
{
gl.clearColor(1.0, 0.0, 0.0, 0.0);
gl.scissor(0,0,200,200);
gl.viewport(0,0,200,200);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
drawFigures();
gl.clearColor(0.0, 1.0, 0.0, 0.0);
gl.scissor(200,0,200,200);
gl.viewport(200,0,200,200);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
drawFigures();
gl.clearColor(0.0, 0.0, 1.0, 0.0);
gl.scissor(200,200,200,200);
gl.viewport(200,200,200,200);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
drawFigures();
// Render just once
if (first)
{
gl.clearColor(1.0, 1.0, 0.0, 0.0);
gl.scissor(0,200,200,200);
gl.viewport(0,200,200,200);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
drawFigures();
first=false;
}
}
知道我怎样才能达到这种效果吗?
预先非常感谢