既然我们有直接的状态访问,我想知道为什么没有更新的glDraw*DSA函数.
例如glDrawArrays
,依赖于当前的VAO,为什么没有glNamedDrawArrays
呢?
我还有电话吗?
glBindVertexArray(vao);
glDrawArrays(..);
Run Code Online (Sandbox Code Playgroud)
还是有另一种方式?
glDraw*只是告诉OGL在当前上下文中绘制一些东西,这可能与Shader,Blender,VBO/VAO,Z/Stencil,Texture等许多状态有关.即使微小的变化也可能带来不同的渲染效果,因此你可以成像DSA glDraw*将是一个很长的函数参数列表,这并不好.例如,您想要将剔除面从CW更改为CCW,可能需要在长函数调用中找到相应的参数,并进行更改.需要注意的是,OGL是最像C的,并且函数的默认参数功能是有限的,每次调用DSA glDraw*时,你需要有一个具有大多数相同值的长函数调用,这会让你发疯.
正如@Andon M. Coleman所提到的,DSA旨在减少一般OGL函数调用类型的调用顺序:bind-> modify-> unbind,而DSA只需要1个API调用.这将减少CPU时间,特别是你有一个非常大的OGL API调用.
谢谢你
归档时间: |
|
查看次数: |
528 次 |
最近记录: |