这不是一个OpenGL问题,而是更多的C++组织问题。OpenGL状态集
我将会有一个简单的场景图(一棵n-tree),其节点(为了这个问题)将会渲染一些几何图形。更具体地说,它们在draw()
方法中都有一些OpenGL绘图命令。
出于优化的原因,我想将相似的对象批量打包并一次绘制。出于这个原因,我想要表达一种我称之为“状态集”的OpenGL。一个状态集只是一堆OpenGL绑定,或者是在X对象上调用绘制之前获取的命令,之后会被取消设置。
所以一个状态集至少有set()
和unset()
,并且在渲染系统使用这个状态集的节点的绘制命令之前和之后将被调用系统调用。
我的问题是如何表达所说的状态集?肯定有一堆功能可以做,但我宁愿能够命名一组并记住它。与节点A相似,状态集为LIGHTING_AND_SHADOW
,节点B为CEL_SHADING
。
由于这个原因,抽象类叫做stateSet
,它本质上是一个接口,用于set()
和unset()
方法,并且每个状态集都从它继承,这似乎是一个好主意。但是,它需要创建一堆对象才能获得名称。似乎可能会有更好的方法。
理想情况下,我想列出所有可以轻松召回的stateSets
。例如,在渲染开始之前,能够按照它们的stateSet
对场景图中的所有节点进行排序会很好。
任何想法?
这听起来像是你要求我们给你的状态集命名。你能否详细说明你正在寻找哪种帮助。 – Mads
如果活动的GLSL程序是你的“状态集”的一部分,那么你可以让这些“状态集”成为你的GLSL程序类的一部分:每个人都知道它需要设置什么状态以及它需要激活的程序。然后在渲染之前按节目对节点进行分组。 – Gigi