// // Created by lukas on 05.02.22. // #ifndef OPENGLTEST_RENDERBASE_H #define OPENGLTEST_RENDERBASE_H #include "../gl/Renderer.h" #include "../gl/Shader.h" template class RenderBase { public: virtual VertexArray* setVertexArray() = 0; virtual Shader setShader() = 0; virtual IndexBuffer* setIndexBuffer() = 0; static RenderBase* getInstance() { if (instance == nullptr) { instance = new T(); instance->init(); } return instance; } private: static RenderBase* instance; private: Renderer r; VertexArray* va; IndexBuffer* ib; Shader s; public: RenderBase(){}; void render(){ r.render(*va, *ib, s); } void init() { s = setShader(); va = setVertexArray(); ib = setIndexBuffer(); } void deinit(){} unsigned getMVPhandle(){ return s.getUniformHandle("MVP"); } unsigned getUniformhandle(std::string name){ return s.getUniformHandle(std::move(name)); } }; template RenderBase *RenderBase::instance = nullptr; #endif //OPENGLTEST_RENDERBASE_H