Sign in to follow this  
assainator

component system based engine with batch rendering?

Recommended Posts

assainator    685

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.

 

Share this post


Link to post
Share on other sites
Hodgman    51220

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.

Share this post


Link to post
Share on other sites
patrrr    1323

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.

Share this post


Link to post
Share on other sites
BornToCode    1185

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.

Edited by BornToCode

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this