首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >webgl drawArray()是否空/丢弃缓冲区?

webgl drawArray()是否空/丢弃缓冲区?
EN

Stack Overflow用户
提问于 2013-10-17 15:15:37
回答 1查看 690关注 0票数 1

为了加快WebGL中许多相近对象的显示速度,我尝试(我猜是天真地)重复使用缓冲区内容。在每个对象的绘图例程中,我(稍微简化了一些):

代码语言:javascript
复制
if (! dataBuffered) {
  dataBuffered = true;
  :
  : gl stuff here: texture loading, buffer binding and filling
  :
}
// set projection and model-view matrices
gl.uniformMatrix4fv (shaderProgram.uPMatrix, false, pMatrix);
gl.uniformMatrix4fv (shaderProgram.uMVMatrix, false, mvMatrix);
// draw rectangle filled with texture
gl.drawArrays(gl.TRIANGLE_STRIP, 0, starVertexPositionBuffer.numItems);

我的想法是纹理、顶点和纹理坐标缓冲区是相同的,但是模型视图矩阵会发生变化(在不同的地方相同的对象)。但是,唉,什么也没有出现。当我评论dataBuffered = true时,它是可见的。

所以我的问题是,drawArray()是丢弃还是清空缓冲区?还发生了什么?(如果这有关系的话,我正在learningwebgl.com学习课程。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-17 21:38:03

简单地说,是的,您可以重用为多个gl.drawArrays()设置的所有状态。

http://omino.com/experiments/webgl/simplestWebGlReuseBuffers.html就是一个很小的例子,它只是改变一个统一的浮动(Y-比例尺)和重画,每勾两次。

(在这种情况下,不存在纹理,但其他一些状态仍然很粘稠。)

希望这能帮上忙!

代码语言:javascript
复制
uniformSetFloat(gl,prog,"scaleY",1.0);
gl.drawArrays(gl.TRIANGLES, 0, posPoints.length / 3);

uniformSetFloat(gl,prog,"scaleY",0.2);
gl.drawArrays(gl.TRIANGLES, 0, posPoints.length / 3);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19430625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档