Jump to content

  • Log In with Google      Sign In   
  • Create Account

component system based engine with batch rendering?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 assainator   Members   -  Reputation: 685

Like
0Likes
Like

Posted 23 January 2013 - 02:55 AM

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


Sponsor:

#2 Hodgman   Moderators   -  Reputation: 31851

Like
2Likes
Like

Posted 23 January 2013 - 03:46 AM

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.



#3 patrrr   Members   -  Reputation: 1050

Like
0Likes
Like

Posted 23 January 2013 - 03:47 AM

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.



#4 BornToCode   Members   -  Reputation: 949

Like
0Likes
Like

Posted 23 January 2013 - 01:48 PM

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, 23 January 2013 - 01:50 PM.


#5 assainator   Members   -  Reputation: 685

Like
0Likes
Like

Posted 24 January 2013 - 03:05 AM

Thanks a lot for all your input, it is very usable.

Edited by assainator, 24 January 2013 - 03:06 AM.

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

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





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS