使用glPrimitiveRestartIndex()进行细分?

时间:2017-07-02 22:41:15

标签: c opengl glsl shader opengl-4

我尝试使用细分和原始重启索引绘制多维数据集。使用原始重启索引,我可以将索引计数减少到17,并使用以下内容绘制多维数据集:

glEnable(GL_PRIMITIVE_RESTART);
glPrimitiveRestartIndex(0xFFFF);
glDrawElements(GL_TRIANGLE_STRIP, 17, GL_UNSIGNED_SHORT, NULL);

所以,在这种情况下,我得到了奇怪的结果,但绘制带有36个索引和GL_TRIANGLES类型的多维数据集效果很好。

如何在glPrimitiveRestartIndex()使用镶嵌细分?

1 个答案:

答案 0 :(得分:0)

曲面细分只允许一种原始类型:GL_PATCHES。因此,您无法对GL_TRIANGLE_STRIP进行细分。渲染时应该会出现GL_INVALID_OPERATION错误。

每个N个顶点都将被视为要进行细分的单个补丁,其中N由TCS或glPatchParameteri(GL_PATCH_VERTICES, N);调用定义。这很像GL_TRIANGLES:每3个顶点是一个三角形。每个补丁与其他所有路径完全分开。因此,如果N为4,那么绘制8个顶点将生成2个补丁。

这意味着将primitive restart用于曲面细分确实没有用处。