#pragma once #include "defines.hpp" #include "display_list_renderer.hpp" #include "opengl/base_texture.hpp" #include "opengl/buffer_object.hpp" #include "../std/set.hpp" namespace graphics { class DisplayList { private: typedef gl::GeometryRenderer::DrawGeometry DrawGeometryCmd; typedef gl::GeometryRenderer::DiscardStorage DiscardStorageCmd; typedef gl::GeometryRenderer::FreeTexture FreeTextureCmd; typedef gl::GeometryRenderer::UnlockStorage UnlockStorageCmd; typedef gl::GeometryRenderer::FreeStorage FreeStorageCmd; typedef gl::GeometryRenderer::ApplyBlitStates ApplyBlitStatesCmd; typedef gl::GeometryRenderer::ApplyStates ApplyStatesCmd; typedef gl::GeometryRenderer::ApplySharpStates ApplySharpStatesCmd; typedef gl::GeometryRenderer::UploadData UploadDataCmd; list > m_commands; typedef DisplayListRenderer::TextureRef TextureRef; typedef DisplayListRenderer::StorageRef StorageRef; set m_textures; set m_storages; DisplayListRenderer * m_parent; bool m_isDebugging; DisplayList(DisplayListRenderer * parent); friend class DisplayListRenderer; public: ~DisplayList(); void applyStates(shared_ptr const & cmd); void applyBlitStates(shared_ptr const & cmd); void applySharpStates(shared_ptr const & cmd); void drawGeometry(shared_ptr const & cmd); void unlockStorage(shared_ptr const & cmd); void discardStorage(shared_ptr const & cmd); void freeTexture(shared_ptr const & cmd); void freeStorage(shared_ptr const & cmd); void uploadResources(shared_ptr const & cmd); void addCheckPoint(); void draw(DisplayListRenderer * r, math::Matrix const & m); }; }