这个问题是特定于WebGL,并假定VAOs不可用。WebGL - 当我调用bindBuffer和vertexAttribPointer?
我试图通过限制低层次的状态变化的数量做出了3D引擎的一些小的改进。但事实证明,我是一个有点困惑使用bindBuffer
和vertexAttribPointer
的正确方法。
比方说,我要画两个对象:
- 的第一个对象使用两个缓冲区一个和ç与元素缓冲è;
- 第二对象使用缓冲器乙和Ç用相同的要素缓冲器ë。
缓冲器甲和乙使用相同的布局,并且两者都通过引用的位置0,而Ç由位置引用1.
最初,ARRAY_BUFFER_BINDING
点到零而ELEMENT_ARRAY_BUFFER_BINDING
点E。
冗余检验器输出具有(甲,乙,Ç,È)=(3,6,5,2)执行以下操作:
这意味着即:
bindBuffer(ELEMENT_ARRAY_BUFFER, [Buffer 2])
是不必要的vertexAttribPointer(1, 2, FLOAT, false, 0, 0)
可能已经避免
由于WebGL的可直接读ELEMENT_ARRAY_BUFFER_BINDING
知道索引存储在何处,1。对我来说很有意义。
但是,2.意味着缓冲器布局存储内部的VBO,这是错误的,因为缓冲甲和乙不会被视为冗余上线15和30(几个帧被渲染的已,所以他们应该保持自己的状态)
我觉得我很困惑如何drawElements
知道使用什么缓冲和何处/何时缓冲布局存储。
什么是bindBuffer
和vertexAttribPointer
这个例子的情况下,为什么最佳使用?