Hi, I've got a simple question. I have 2 ways to draw objects that I can think of but I didn't know which one is better.
1. Use an abstract class Renderable for the parent of the objects and have an std::vector of the Renderable class and call an overloaded virtual function to draw.
E.g:
Code:class Renderable { public: virtual void draw()=0; }Code:class MovableObject:public Renderable { public: void draw() { } ......... } class TerrainObject:public Renderable { public: void draw() { } ........ } class OverlayObject:public Renderable { public: void draw() { } ........... } etc...2. Not using any inheritance and making the respective objects's vectors for drawingCode:std::vector <Renderable *> mRenderable ... mRenderable.push_back(new MovableObject() ); mRenderable.push_back(new TerrainObject() ); mRenderable.push_back(new OverlayObject() ); //Main loop while (!done) { .............. for (std::vector <Renderable *>::iterator itr=mRenderable.begin(); itr!=mRenderable.end(); itr++) { (*itr)->draw(); } } ........
e.g.:
Code:class MovableObject { public: void draw() { } ......... } class TerrainObject { public: void draw() { } ........ } class OverlayObject { public: void draw() { } ........... } etc...The question is which is better? I understand that using virtual calls can very much affect the performance. But how slow will it be?Code:std::vector <MovableObject *> mMovables std::vector <TerrainObject *> mTerrains std::vector <OverlayObject *> mOverlays ... mMovables.push_back(new MovableObject() ); mTerrains.push_back(new TerrainObject() ); mOverlays.push_back(new OverlayObject() ); //Main loop while (!done) { .............. //Movables for (std::vector <MovableObject *>::iterator itr=mMovables.begin(); itr!=mMovables.end(); itr++) { (*itr)->draw(); } //Terrains for (std::vector <TerrainObject *>::iterator itr=mTerrains.begin(); itr!=mTerrains.end(); itr++) { (*itr)->draw(); } //Overlays for (std::vector <OverlayObject *>::iterator itr=mOverlays.begin(); itr!=mOverlays.end(); itr++) { (*itr)->draw(); } } ........
Thanks in advance.



LinkBack URL
About LinkBacks


