
#ifndef __WFX_SCENE_SCENEGRAPH_H__
#define __WFX_SCENE_SCENEGRAPH_H__

#include <WFX/WFXIncludes.h>
#include <WFX/scene/SceneGraphVisitor.h>
#include <WFX/renderer/Renderable.h>

namespace WFX {

    namespace scene {

        class SceneGraphVisitor;
            
        /**
         * abstract scenegraph base class
         */
        class SceneGraph : public WFX::renderer::Renderable {
            public:

                SceneGraph() {
                    Context.Lighting = true;
                    Context.DepthTesting = true;
                }
                
                /**
                 * update this scenegraph
                 */
                virtual void update() = 0;
                
                /**
                 * render this scenegraph
                 * using the given Camera to the RenderTarget
                 */
                virtual void render(WFX::renderer::Renderer* r);

                /** accept a SceneGraphVisitor */
                virtual void accept(SceneGraphVisitor& v) = 0;
            protected:

        };

    }

}


#endif //include guard


