在默认的网格顶点构造中,我们这样做。
//v = vertex, p = position, c = color
buffer = { v0 , p0, c0,
v1 , p0, c0,
v2 , p0, c0 };
我们有一个三角形。 但是我想重用这样明显的属性:
//p and c are the same for all vertexes
buffer = { v0, p0, c0 ,
v1,
v2 };
我们可以在着色器上使用统一值来执行此操作,但我将在同一缓冲区中渲染数千个具有不同位置的三角形:
buffer = { v0, p0, c0 ,
v1,
v2,
v3, p1, c1,
v4,
v5,
v6, p2, c2,
...};
我现在的解决方案是:
1)像第一个例子一样发送每个顶点的属性副本(不想,但可能是最好的解决方案)。
2)发送索引属性(用于搜索)和位置/颜色的统一数组(统一大小限制问题?)
3)最佳解决方案?
答案 0 :(得分:3)
//p and c are the same for all vertexes
不,他们不是。在您的情况下,顶点是v,p和c的整个组合。改变其中一个,你就得到了一个完全不同的顶点。常见的误解,但它是如何运作的
答案 1 :(得分:2)
假设你不是一个古老的硬件,并且顶点内存并不是那么重要,只需复制数据并保持每个顶点都有一整套属性。它肯定不会慢。
以这种方式“重用”数据通常会导致性能下降,因为GPU无法优化数据访问;它必须做你想做的复杂事情。