当前位置 : 主页 > 网络安全 > 测试自动化 >

opengl – 交错顶点提交如何帮助提高性能?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我已经阅读并看到了其他一些问题,这些问题通常都指向将顶点位置和颜色等交织到一个数组中的建议,因为这样可以最大限度地减少从cpu发送到gpu的数据. 我不清楚的是OpenGL是如何做到这
我已经阅读并看到了其他一些问题,这些问题通常都指向将顶点位置和颜色等交织到一个数组中的建议,因为这样可以最大限度地减少从cpu发送到gpu的数据.

我不清楚的是OpenGL是如何做到这一点的,即使使用交错数组,你仍然必须对位置和颜色指针进行单独的GL调用.如果两个指针都使用相同的数组,只是设置为从该数组中的不同点开始,那么绘制调用是否会复制数组两次,因为它是两个不同指针的对象?

这主要是关于缓存.例如,假设我们有4个顶点和4个颜色.您可以通过这种方式提供信息(对不起,但我不记得确切的功能名称)

glVertexPointer(..., vertex);
glColorPointer(..., colors);

它内部做的是读取顶点[0],然后应用颜色[0],然后再应用颜色[1]的顶点[1].如您所见,如果顶点是例如20兆字符长,则顶点[0]和颜色[0]将至少相隔20兆字节.

现在,另一方面,如果你提供像{vertex0,color0,vertex1,color1等}这样的结构,会有很多缓存命中,因为,vertex0和color0在一起,vertex1和color1也是如此.

希望这有助于回答这个问题

编辑:第二次阅读时,我可能没有回答这个问题.您可能想知道OpenGL如何知道从该结构中读取哪些值?就像我之前说的{顶点,颜色,顶点,颜色}之类的结构一样,你告诉OpenGL顶点位于0位置,偏移量为2(所以下一个位于第2位,然后是4,等等)和颜色从位置1开始,偏移量也为2(所以位置1,然后是3等).

另外:如果你想要一个更实际的例子,请看这个链接http://www.lwjgl.org/wiki/index.php?title=Using_Vertex_Buffer_Objects_(VBO).你可以看到它如何只提供一次缓冲,然后使用偏移有效地渲染.

网友评论