From: Donald E. C. <don...@ui...> - 2007-04-10 00:19:18
|
In reading Geoff's initial design document it occurred to me that my rendering setup is a bit faulty. I realize now that to accuratly render things we need to let the GLWidget handle the actual order of rendering so that transparency is handled correctly. This is not a huge problem, we just need to kinda group our heads together and see how we should go about this. What *I* would suggest is having the rendering engines return a list of display lists and associated Z values. Then we can order Z from back to front. What i don't know is how we can do this and still allow individual rendering options per primitive. Right now (current implementation) this is simple. Each engine has a queue of primitives it needs to render and simply does it. If we don't want a primitive rendered by a certain engine we just remove it from the queue. This does no work though because rendering is not based off the Z value. Some transparency works and some doesnt. What I have in my head is that we create a helper class like such: Class DisplayList { GLuint dlNumber GLfloat zValue Engine *engine Primitive *primitive } This way when a primitive gets updated we can find all DisplayLists that need to be updated and then just call the engine to update the display list. Queue's would actually become queues that get cleaned out as they are rendered. Suggestions welcome. Technically these changes can be made without any "external" functionality changes to the GLWidget. Although it may require changes to the engines. I'm also not sure how to get the zValues correctly which i'm sure Benoit has some take on. -Donald |