component system based engine with batch rendering?

Started by
3 comments, last by assainator 11 years, 3 months ago

Hello all,

Lately, I've been interested by component systems but I do have some questions about them with relation to batch rendering.

From a lot of documents/tutorials I've read in the past 3 years (although the documents/tutorials themselves are sometimes older), in order to come closer the the GPU's full potential, I should try to:

a. Prevent shader/texture/VBO switches.

b. Use batches to render multiple instances of a mesh.

But how would I implement this in a component based system? Is it as trivial as keeping a list of all entities that have a RenderComponent, keeping them sorted and create batches whenever possible or are there (potential) issues here?

I am relatively new to component based systems so please excuse me if this is a dumb question.

Thanks a lot in advance.

"What? It disintegrated. By definition, it cannot be fixed." - Gru - Dispicable me

"Dude, the world is only limited by your imagination" - Me

Advertisement

Whether or not you're using a 'component system' shouldn't make any difference.

However the scene is stored, I collect an array of pointers to the "renderables" (whatever they are) that need to be drawn for that frame, then sort that list to get decent batching.

That's similar to how I usually do, except that I have a "graphics subsystem" that contains a list of all the GraphicsComponents it has created (or the ones that should be visible in the scene) instead of references to the entity as a whole. When the graphics subsystem is asked to render what's visible in a certain view, it collects all the GraphicsComponents and asks them to "render" their vertices to batch buffers. Components can be sorted to minimize heavy state changes.

The way i have my component system set up is that i have a scene class which has a build in octree. Whenever you add an new GameObject to the Scene it gets added to the proper location in the octree. When i render i pass the camera to the Scene Render fuction. First thing it does is find which node in the Octree the camera is in. Once it find the node, it extract all the GameObjects from that node and child nodes into an array. Once i have a flat table of all the objects, I sort that table based on material/shader or anything else i want to sort it by. Then i render all Opaque Objects Front to Back, then render all Translucent Objects Back To front.

Thanks a lot for all your input, it is very usable.
"What? It disintegrated. By definition, it cannot be fixed." - Gru - Dispicable me

"Dude, the world is only limited by your imagination" - Me

This topic is closed to new replies.

Advertisement