Osd.GLPatchTable
是OpenSubdiv
中的一个类,用于管理OpenGL细分表并允许快速寻址。它支持多种类型的拓扑,例如三角形、四边形、点图案和六边形等。
Osd.GLPatchTable
提供了以下成员函数:
Osd.GLPatchTable()
默认构造函数。
void Reset(int numVertexElements, int numVaryingElements, Osd.PatchArrayVector const & patchArrays)
重置GLPatchTable
对象,初始化其成员变量。
参数numVertexElements
指定每个顶点包括的元素数,例如位置、法线、颜色等。
参数numVaryingElements
指定每个变量包括的元素数。
参数patchArrays
是一个Osd.PatchArrayVector
容器对象,其中包含了所有的细分拓扑和每一个拓扑(PatchArray
)需要的patchParam
数量数组。
void BindVertexArray()
绑定当前的VertexArray
对象。
void UnbindVertexArray()
解除当前的VertexArray
对象绑定。
void UpdateVertexBuffer(std::vector<float> const & src, int numVertices)
更新VertexBuffer
对象的数据。src
是一个包含VertexBuffer
数据的容器对象,numVertices
指定了容器中包含的顶点数量。
Osd.GLPatchTable
包含以下成员变量:
numPatches() const -> int
返回当前拓扑组包含的patch
的数量。
GetPatchArray(int patchIndex) const -> PatchArray const &
返回给定索引的拓扑。
以下示例代码展示了如何使用Osd.GLPatchTable
类:
Osd.GLPatchTable patchTable;
// ...
std::vector<float> vertexdata(numVertices * numVertexElements);
// ...
patchTable.Reset(numVertexElements, numVaryingElements, patchArrays);
patchTable.BindVertexArray();
patchTable.UpdateVertexBuffer(vertexdata, numVertices);