好的,标题很糟糕,但我不确定如何一目了然地传达我的问题。
目前,在使用OpenGL渲染时的显示回调中,可以在不同类型的几何体上调用名为render
的函数,这些函数存储为顶点,法线和/或纹理坐标列表(作为单个,对或三,取决于使用哪一个)。
当我渲染时,我将其展平为[GLfloat]
,以便我可以将其传递给VBO和VAO。然后我存储VAO,并渲染它。通常,这是在初始化阶段完成的,然后在显示回调中应用转换等,但是如果用户想要在显示回调中执行此操作,则每次都会使几何图形变平,并设置VBO, VAO和属性变量都会渲染通过。如果在显示回调中有任何对象(几何),这显然会使它变得非常慢。
我想要做的是,如果它是一个对象,将它展平等等到VAO,然后在下次遇到它时,使用VAO。我有一个构造函数,它将VAO作为相同类型的参数,因此可以很容易地替换它。
compile
与渲染相同,除了返回保存VAO的CompiledDrawable
。
我希望使用类似的东西:
getObject :: Drawable -> IORef Drawable
getObject drawable = unsafePerformIO $ compile drawable
唯一的问题是,不仅仅是其中之一,我需要能够为我的所有对象执行此操作并拥有自己的引用。有任何想法吗?