DarkAngel wrote:
I've actually thought to myself for a while that the Horde library is kind of 2 libraries glued together -- one half is a rendering API and the other is a simple scene graph
I don't think I've any objections to the scene graph part being removed and just focusing on the clean graphics API part
Actually, Horde provides four areas of responsibility at the moment: a basic 3d engine taking care of culling, a rendering front- plus backend, a low-level animation system and a basic asset conditioning pipeline. I think we shouldn't get completely rid of the 3d engine part. Even if we remove the transformation hierarchy, Horde can still have a spatial graph internally which does the culling based on some culling primitives provided by the application (portals, anti-portals, etc.). I think that making Horde a purely
submission based renderer would put too much burden on most smaller projects that would have to do the culling then by their own.
DarkAngel wrote:
The main complication is that with a flat list, the application/client will really have to perform scene management itself. This isn't a problem, but it means there will need to be a mechanism for the app to tell horde how to traverse/cull a scene.
For example, say I've got 100,000 model nodes and in the app I've got a neat data structure to quickly cull them down to a visible set of 100 (for any camera viewpoint).
My Horde pipeline contains different viewpoints (e.g. main camera and shadow-casting-light viewpoints). Whenever Horde switches viewpoints, it should query my application for the correct visible set.
We could make the culling part optional (still part of the core though) and provide a mechanism that the user can specify render queues and which objects should go into what queue. In contrast to the transformation hierarchy (scene tree), the culling which in the end is just generating the render queues, is more orthogonal and wouldn't affect the performance or API style so much when not used.
DarkAngel wrote:
The first thing I think of when presented with this is some kind of call-back function -- this is fine for me, but -- what kind of problems does this present for binding with other languages
I'm not a fan of callbacks, especially if they are C-style.
But the main reason why I would be against them is that they will probably not work too well with multithreading. If we stick to a push approach (the user updates the transformations explicitly), Horde could double buffer data internally and completely transparent to the application.
Volker wrote:
Me too, and I would also suggest to release a Beta 5 before doing such a change
Yeah I agree. That would also give everyone a chance to build up a clean repository that can automatically be converted with the new batch processing of ColladaConv once the changes are in effect
Codepoet wrote:
I'm also in favor of having a scene graph in the utility library when it's removed from the core. That's ideal for small test applications or the knights / chicago examples.
This is true, for very small projects it is just convenient to have.