diff --git a/README.md b/README.md index 972c01d3466c2ad35e9bb86ad02b7363b71cca00..405a5d4fd1cb0111358ccdc0d661d127b274e126 100644 --- a/README.md +++ b/README.md @@ -19,4 +19,7 @@ cmake --build ./build Release Mode : ```shell cmake --build ./build --config Release -``` \ No newline at end of file +``` + +## Source +Type Erasure Inspiration : [Type Erasure - CppCon 2021 - Klaus Iglberger](https://www.youtube.com/watch?v=4eeESJQk-mw&ab_channel=CppCon) \ No newline at end of file diff --git a/source/engine/graphics/front/module/ImageModule.hpp b/old2/FrameBufferModule.hpp similarity index 60% rename from source/engine/graphics/front/module/ImageModule.hpp rename to old2/FrameBufferModule.hpp index ee339bda17d73e3b763f50aa88a0d81e9f97e728..cc90570ad2107ef02bad1441c49d0d3e8c53540e 100644 --- a/source/engine/graphics/front/module/ImageModule.hpp +++ b/old2/FrameBufferModule.hpp @@ -1,5 +1,7 @@ #pragma once +#include <any> + #include <engine/graphics/back/buffers/VertexArray.hpp> #include <engine/graphics/back/buffers/VerticeBuffer.hpp> #include <engine/graphics/back/shaders/Program.hpp> @@ -8,12 +10,12 @@ #include <engine/graphics/utility/module.hpp> namespace megu { - class Image_Module : public Module<Image> { - public: - Image_Module(); - ~Image_Module() = default; + class FrameBuffer_Module : public Module<std::any> { + public: + FrameBuffer_Module(); + ~FrameBuffer_Module() = default; - void render(const Window &, const Camera &, Image &, const TextureArray &) override; + void render(const Window &, const Camera &, std::any &, const TextureArray &) override; private: VertexArray _vao; diff --git a/old2/ImageModule.cpp b/old2/ImageModule.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f56a235cd0a48b19e32184936a9d560398a9b6a3 --- /dev/null +++ b/old2/ImageModule.cpp @@ -0,0 +1,26 @@ +#include "ImageModule.hpp" + +#include <engine/graphics/front/object/Image.hpp> +#include <engine/graphics/utility/array_generator.hpp> + +namespace megu { + ImageModule::ImageModule() + : _vbo(this->_vao, Quads::Layout(), Quads::Vertices().size(), megu::EditMode::STATIC) { + Source vert("assets/shaders/Image-Instanced-Fat.vert", Source::Categorie::VERTEX); + this->_program.attach(vert); + + Source frag("assets/shaders/Texture-Fat.frag", Source::Categorie::FRAGMENT); + this->_program.attach(frag); + + this->_program.link(); + + this->_vbo << Quads::Vertices(); + + vert.release(); + frag.release(); + } + + void ImageModule::render(Image & image) { + std::cout << "Image !" << std::endl; + } +} \ No newline at end of file diff --git a/old2/ImageModule.hpp b/old2/ImageModule.hpp new file mode 100644 index 0000000000000000000000000000000000000000..7f7adbc2b7c15d401149bfaa45eb3cda818806e1 --- /dev/null +++ b/old2/ImageModule.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include "QuadGraphicModule.hpp" + +#include <engine/graphics/back/buffers/VertexArray.hpp> +#include <engine/graphics/back/buffers/VerticeBuffer.hpp> +#include <engine/graphics/back/shaders/Program.hpp> + +namespace megu { + class ImageModule : public virtual QuadGraphicModule { + public: + ImageModule(); + ~ImageModule() = default; + + virtual void render(Image &) override; + + private: + VertexArray _vao; + VerticeBuffer _vbo; + Program _program; + }; +} \ No newline at end of file diff --git a/old2/SpriteModule.cpp b/old2/SpriteModule.cpp new file mode 100644 index 0000000000000000000000000000000000000000..70651e7d88715e438b6dcc19816dbc7d0c737c72 --- /dev/null +++ b/old2/SpriteModule.cpp @@ -0,0 +1,16 @@ +#include "SpriteModule.hpp" + +#include <engine/graphics/utility/array_generator.hpp> +#include <engine/graphics/front/object/Sprite.hpp> + +#include <iostream> + +namespace megu { + SpriteModule::SpriteModule() { + + } + + void SpriteModule::render(Sprite & sprite) { + std::cout << "Sprite !" << std::endl; + } +} \ No newline at end of file diff --git a/old2/SpriteModule.hpp b/old2/SpriteModule.hpp new file mode 100644 index 0000000000000000000000000000000000000000..383f0c8c5bb63a4db2b1f65bd9812be3774b54e3 --- /dev/null +++ b/old2/SpriteModule.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "QuadGraphicModule.hpp" + +#include <engine/graphics/back/buffers/VertexArray.hpp> +#include <engine/graphics/back/buffers/VerticeBuffer.hpp> +#include <engine/graphics/back/shaders/Program.hpp> + +namespace megu { + class SpriteModule : public virtual QuadGraphicModule { + public: + SpriteModule(); + ~SpriteModule() = default; + + virtual void render(Sprite &) override; + }; +} \ No newline at end of file diff --git a/source/engine/graphics/front/engine/Engine.cpp b/source/engine/graphics/front/engine/Engine.cpp index 1984061774f43a1069d8da06c8d834d865f0e36c..1cf053196cce5bc5d46cc11608fc1e0ff3773df5 100644 --- a/source/engine/graphics/front/engine/Engine.cpp +++ b/source/engine/graphics/front/engine/Engine.cpp @@ -17,9 +17,9 @@ namespace megu { this->_layers[priority] = std::make_unique<Layer>(renderer); } - void GraphicEngine::push(Priority layer_priority, Priority object_priority, Renderable & object) { - this->_layers[layer_priority].get()->push(object_priority, object); - } + //void GraphicEngine::push(Priority layer_priority, Priority object_priority, GraphicObject & object) { + // this->_layers[layer_priority].get()->push(object_priority, object); + //} void GraphicEngine::remove(Priority priority) { auto it = this->_layers.find(priority); @@ -51,7 +51,7 @@ namespace megu { glViewport(0, 0, static_cast<GLsizei>(this->_window.width()), static_cast<GLsizei>(this->_window.height())); glClear(GL_COLOR_BUFFER_BIT); std::any any = 1; - this->_module.render(this->_window, this->_view, any, textures); + this->_module.render(textures); this->_window.swapBuffers(); } } diff --git a/source/engine/graphics/front/engine/Engine.hpp b/source/engine/graphics/front/engine/Engine.hpp index b9525b45fc0a50808b861fb455fdc63c3c97bdc8..dc41a4f7fb77bf830e16076ec326e432cbc95376 100644 --- a/source/engine/graphics/front/engine/Engine.hpp +++ b/source/engine/graphics/front/engine/Engine.hpp @@ -17,7 +17,11 @@ namespace megu { ~GraphicEngine() = default; void push(Priority, Renderer &); - void push(Priority, Priority, Renderable &); + + template <class T> + void push(Priority layer_priority, Priority object_priority, T & object) { + this->_layers[layer_priority].get()->push<T>(object_priority, object); + } void remove(Priority); @@ -31,7 +35,7 @@ namespace megu { private: std::map<Priority, std::unique_ptr<Layer>> _layers; - FrameBuffer_Module _module; + FrameBufferModule _module; Window & _window; View _view; diff --git a/source/engine/graphics/front/engine/Layer.cpp b/source/engine/graphics/front/engine/Layer.cpp index 70130adf418fd169a4768796474d41caad3f46e6..f65c6c3beefde6cc8d26bb4e6a595385cba7f562 100644 --- a/source/engine/graphics/front/engine/Layer.cpp +++ b/source/engine/graphics/front/engine/Layer.cpp @@ -5,8 +5,4 @@ namespace megu { Layer::Layer(Renderer & renderer) : _renderer(renderer), _frameBuffer(static_cast<GLuint>(renderer.dimension().x), static_cast<GLuint>(renderer.dimension().y)) {} - - void Layer::push(Priority priority, Renderable & object) { - this->_objects[typeid(object)].insert(object); - } } \ No newline at end of file diff --git a/source/engine/graphics/front/engine/Layer.hpp b/source/engine/graphics/front/engine/Layer.hpp index a81e881bfe9f18f983adb029405e9ce26a24f87e..325b14430df24582fcad295b3435b70a00851e55 100644 --- a/source/engine/graphics/front/engine/Layer.hpp +++ b/source/engine/graphics/front/engine/Layer.hpp @@ -9,6 +9,9 @@ #include <engine/graphics/front/object/Renderable.hpp> #include <engine/graphics/utility/reference_sorter.hpp> +#include <engine/graphics/front/object/Renderable.hpp> +#include <engine/graphics/front/module/QuadGraphicModule.hpp> + #include "Priority.hpp" #include "Renderer.hpp" @@ -22,15 +25,15 @@ namespace megu { inline const Renderer & renderer() const {return this->_renderer;} - void push(Priority, Renderable &); + template <class T> + void push(Priority priority, T & object) { + this->_objects.insert({priority, Renderable(object, this->_module)}); + } const Texture & draw(const Window & w, const TextureArray & a) { this->_frameBuffer.bind(); - for(const auto & [type, objects] : this->_objects) { - if(!objects.empty()) { - //std::cout << typeid((*objects.begin()).get()).name() << std::endl; - this->_renderer.render(w, (*objects.begin()).get(), a); - } + for(auto & [type, object] : this->_objects) { + this->_renderer.render(w, object, a); } return this->_frameBuffer.texture(); @@ -39,6 +42,7 @@ namespace megu { private: Renderer & _renderer; FrameBuffer _frameBuffer; - std::map<std::type_index, std::set<std::reference_wrapper<Renderable>>> _objects; + QuadGraphicModule _module; + std::map<Priority, Renderable> _objects; }; } \ No newline at end of file diff --git a/source/engine/graphics/front/engine/Renderer.hpp b/source/engine/graphics/front/engine/Renderer.hpp index 3115f095a71ef68d75d75c15508a66c5812de351..c366b7993e0f68c4640369261604e76c3ecb5d45 100644 --- a/source/engine/graphics/front/engine/Renderer.hpp +++ b/source/engine/graphics/front/engine/Renderer.hpp @@ -6,7 +6,11 @@ #include <engine/graphics/back/buffers/FrameBuffer.hpp> #include <engine/graphics/back/cameras/View.hpp> -#include <engine/graphics/front/module/ImageModule.hpp> +#include <engine/io/Window.hpp> +#include <engine/graphics/front/object/Renderable.hpp> +#include <engine/graphics/front/engine/TextureArray.hpp> + +#include <engine/graphics/front/object/Renderable.hpp> namespace megu { class Renderer { @@ -17,7 +21,7 @@ namespace megu { void render(const Window & w, Renderable & r, const TextureArray & a) { this->clear(); - r.accept(w, this->_view, this->_module, a); + render_ext(r, w, this->_view, a); } const glm::vec2 dimension() const {return this->_view.dimension();} @@ -29,6 +33,5 @@ namespace megu { private: View _view; - Image_Module _module; }; } \ No newline at end of file diff --git a/source/engine/graphics/front/module/FrameBufferModule.cpp b/source/engine/graphics/front/module/FrameBufferModule.cpp index 8da4da83ec74d547b6c91f7863170f3af31e65c2..7f4e5a61f8dc8070d86ff4406df7cc4a970db1b5 100644 --- a/source/engine/graphics/front/module/FrameBufferModule.cpp +++ b/source/engine/graphics/front/module/FrameBufferModule.cpp @@ -4,7 +4,7 @@ #include <engine/graphics/utility/array_generator.hpp> namespace megu { - FrameBuffer_Module::FrameBuffer_Module() + FrameBufferModule::FrameBufferModule() : _vbo(this->_vao, Plane::Layout(), Plane::Vertices(), megu::EditMode::STATIC) { megu::Source vert("assets/shaders/FrameBuffer-Instanced.vert", Source::Categorie::VERTEX); this->_program.attach(vert); @@ -18,7 +18,7 @@ namespace megu { frag.release(); } - void FrameBuffer_Module::render(const Window & window, const Camera & camera, std::any & any, const TextureArray & textures) { + void FrameBufferModule::render(const TextureArray & textures) { this->_program.use(); this->_vao.bind(); diff --git a/source/engine/graphics/front/module/FrameBufferModule.hpp b/source/engine/graphics/front/module/FrameBufferModule.hpp index cc90570ad2107ef02bad1441c49d0d3e8c53540e..2355abbbb81a62d41925d9d862950ce11f5f2be7 100644 --- a/source/engine/graphics/front/module/FrameBufferModule.hpp +++ b/source/engine/graphics/front/module/FrameBufferModule.hpp @@ -7,15 +7,16 @@ #include <engine/graphics/back/shaders/Program.hpp> #include <engine/graphics/front/object/Image.hpp> -#include <engine/graphics/utility/module.hpp> + +#include "Module.hpp" namespace megu { - class FrameBuffer_Module : public Module<std::any> { + class FrameBufferModule { public: - FrameBuffer_Module(); - ~FrameBuffer_Module() = default; + FrameBufferModule(); + ~FrameBufferModule() = default; - void render(const Window &, const Camera &, std::any &, const TextureArray &) override; + void render(const TextureArray &); private: VertexArray _vao; diff --git a/source/engine/graphics/front/module/ImageModule.cpp b/source/engine/graphics/front/module/ImageModule.cpp deleted file mode 100644 index c945ac21285718628d0e9eddcabf5e8f8c9e6f41..0000000000000000000000000000000000000000 --- a/source/engine/graphics/front/module/ImageModule.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "ImageModule.hpp" - -#include <engine/graphics/utility/array_generator.hpp> - -namespace megu { - Image_Module::Image_Module() - : _vbo(this->_vao, Quads::Layout(), Quads::Vertices().size(), megu::EditMode::STATIC) { - Source vert("assets/shaders/Image-Instanced-Fat.vert", Source::Categorie::VERTEX); - this->_program.attach(vert); - - Source frag("assets/shaders/Texture-Fat.frag", Source::Categorie::FRAGMENT); - this->_program.attach(frag); - - this->_program.link(); - - this->_vbo << Quads::Vertices(); - - vert.release(); - frag.release(); - } - - void Image_Module::render(const Window &, const Camera & camera, Image & image, const TextureArray &) { - this->_vao.bind(); - this->_program.use(); - image.texture().bind(); - - this->_program.setUniform("uProj", camera.projection()); - this->_program.setUniform("uView", camera.view()); - - static auto uSampler = array_generator<GLint, 32>().array; - this->_program.setUniform("uSampler", uSampler); - - std::vector<glm::mat4> uModels; - std::vector<GLint> uTextures; - - uModels.push_back(image.transformation().model()); - uTextures.push_back(0); - - this->_program.setUniform("uModel", uModels); - this->_program.setUniform("uTextures", uTextures); - - glDrawArraysInstanced(Quads::Primitive(), 0, static_cast<GLsizei>(this->_vbo.size()), 1); - } -} \ No newline at end of file diff --git a/source/engine/graphics/front/module/Module.hpp b/source/engine/graphics/front/module/Module.hpp new file mode 100644 index 0000000000000000000000000000000000000000..99269edf9227923cde4e72da5541e4c16dfd0ae0 --- /dev/null +++ b/source/engine/graphics/front/module/Module.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include <engine/graphics/back/cameras/Camera.hpp> +#include <engine/graphics/front/engine/TextureArray.hpp> +#include <engine/graphics/utility/reference_sorter.hpp> +#include <engine/io/Window.hpp> + +namespace megu { + template <class T> + class Module { + public: + virtual void draw(T &, const Window &, const Camera &, const TextureArray &) const = 0; + }; + + template <class ... Ts> + class Multy_Module : public Module<Ts> ... {}; + + template <class T> + using ref_set = std::set<std::reference_wrapper<T>, reference_sorter<T>>; + + template <class T> + using Module_Array = Module<ref_set<T>>; + + template <class ... Ts> + class Multy_Module_Array : public Module_Array<Ts> ... {}; +} \ No newline at end of file diff --git a/source/engine/graphics/front/module/QuadGraphicModule.cpp b/source/engine/graphics/front/module/QuadGraphicModule.cpp new file mode 100644 index 0000000000000000000000000000000000000000..71357193b47f21a94155f19ed3ac4fcfe5584568 --- /dev/null +++ b/source/engine/graphics/front/module/QuadGraphicModule.cpp @@ -0,0 +1,16 @@ +#include "QuadGraphicModule.hpp" + +#include <engine/graphics/front/object/Image.hpp> +#include <engine/graphics/front/object/Sprite.hpp> + +#include <iostream> + +namespace megu { + void QuadGraphicModule::draw(Image &, const Window &, const Camera &, const TextureArray &) const { + std::cout << "Image !" << std::endl; + } + + void QuadGraphicModule::draw(Sprite &, const Window &, const Camera &, const TextureArray &) const { + std::cout << "Sprite !" << std::endl; + } +} \ No newline at end of file diff --git a/source/engine/graphics/front/module/QuadGraphicModule.hpp b/source/engine/graphics/front/module/QuadGraphicModule.hpp new file mode 100644 index 0000000000000000000000000000000000000000..972c2adf7b89e06f67b5979cc68526c9fd6ac13b --- /dev/null +++ b/source/engine/graphics/front/module/QuadGraphicModule.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "Module.hpp" + + + +namespace megu { + class Image; + class Sprite; + + class QuadGraphicModule : public Module<Image>, public Module<Sprite> { + public: + void draw(Image &, const Window &, const Camera &, const TextureArray &) const override; + void draw(Sprite &, const Window &, const Camera &, const TextureArray &) const override; + }; +} \ No newline at end of file diff --git a/source/engine/graphics/front/object/Image.hpp b/source/engine/graphics/front/object/Image.hpp index b92f031cb96fbec7c7cd269c770c8965b20be9e0..f6bd8d5c1a147fd31d4f95a93261cd3c605a743e 100644 --- a/source/engine/graphics/front/object/Image.hpp +++ b/source/engine/graphics/front/object/Image.hpp @@ -1,18 +1,15 @@ #pragma once -#include "Renderable.hpp" - #include <filesystem> #include <glm/vec2.hpp> #include <engine/graphics/back/geometry/Transformable.hpp> #include <engine/graphics/back/textures/Texture.hpp> - #include <engine/graphics/front/geometry/Quads.hpp> #include <engine/graphics/utility/type.hpp> namespace megu { - class Image : public Renderable { + class Image { public: Image() = default; Image(const std::filesystem::path &); @@ -45,7 +42,7 @@ namespace megu { void load(const std::filesystem::path &, bool = false); void load(const TextureBuffer &); void link(const Texture &); - + private: Texture _texture; Quads _geometry; diff --git a/source/engine/graphics/front/object/Renderable.hpp b/source/engine/graphics/front/object/Renderable.hpp index 441a0789a871aafffa935a538bcf40a173ecfa27..d70a3caf08d781d50998bf247d1eb50df58d5464 100644 --- a/source/engine/graphics/front/object/Renderable.hpp +++ b/source/engine/graphics/front/object/Renderable.hpp @@ -1,15 +1,61 @@ #pragma once -#include <engine/io/Window.hpp> -#include <engine/graphics/utility/module.hpp> -#include <engine/graphics/front/engine/TextureArray.hpp> +#include <memory> +#include <iostream> + +#include <engine/graphics/front/module/Module.hpp> namespace megu { class Renderable { public: - template <class T> - void accept(const Window & window, const Camera & camera, Module<T> & modul, const TextureArray & array) { - modul.render(window, camera, *static_cast<T *>(this), array); + Renderable() = delete; + + template <class T, class M> + Renderable(T & object, M & module) + : _pimpl(std::make_unique<RenderableModel<T, M>>(object, module)) {} + + Renderable(const Renderable & src) { + this->_pimpl = src._pimpl->clone(); + } + + Renderable & operator=(const Renderable & src) { + this->_pimpl = src._pimpl->clone(); + return *this; } + + Renderable(Renderable &&) = default; + Renderable & operator=(Renderable &&) = default; + + private: + struct RenderableConcept { + virtual ~RenderableConcept() {}; + + virtual void render(const Window &, const Camera &, const TextureArray &) const = 0; + virtual std::unique_ptr<RenderableConcept> clone() const = 0; + }; + + template <class T, class M> + struct RenderableModel : public RenderableConcept { + RenderableModel(T & v, M & m) + : _object{ v }, _module{ m } {} + + void render(const Window & window, const Camera & camera, const TextureArray & array) const override { + this->_module.draw(this->_object, window, camera, array); + + } + + std::unique_ptr<RenderableConcept> clone() const override { + return std::make_unique<RenderableModel>(*this); + } + + T & _object; + M & _module; + }; + + friend void render_ext(Renderable & renderable, const Window & window, const Camera & camera, const TextureArray & array) { + renderable._pimpl->render(window, camera, array); + } + + std::unique_ptr<RenderableConcept> _pimpl; }; } \ No newline at end of file diff --git a/source/engine/graphics/front/object/Sprite.hpp b/source/engine/graphics/front/object/Sprite.hpp index 3aab783edff4edb0ca6d2cf6611838b96bc6f53f..44ea1e68fb91c9c00fcc6c5ab3556f465cfc2027 100644 --- a/source/engine/graphics/front/object/Sprite.hpp +++ b/source/engine/graphics/front/object/Sprite.hpp @@ -4,9 +4,8 @@ #include <engine/graphics/back/textures/Texture.hpp> #include <engine/graphics/front/geometry/Quads.hpp> - namespace megu { - class Sprite { + class Sprite { public: Sprite(const Texture &); Sprite(const Texture &, const glm::vec4 &); diff --git a/source/engine/graphics/front/object/VerticesArray.hpp b/source/engine/graphics/front/object/VerticesArray.hpp index bbceaa9c19e51842c5acbb625d45ab971c48f6a3..550958f214b45a2f75abe04d5930c6b5068f80e3 100644 --- a/source/engine/graphics/front/object/VerticesArray.hpp +++ b/source/engine/graphics/front/object/VerticesArray.hpp @@ -4,7 +4,6 @@ #include <engine/graphics/back/geometry/Transformable.hpp> #include <engine/graphics/back/textures/Texture.hpp> - #include <engine/graphics/front/geometry/Quads.hpp> #include <engine/graphics/front/geometry/Vertex.hpp> diff --git a/source/engine/graphics/utility/module.hpp b/source/engine/graphics/utility/module.hpp deleted file mode 100644 index 7e90914c4f77cb06704e77d6ab8bce3a5a01060a..0000000000000000000000000000000000000000 --- a/source/engine/graphics/utility/module.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include <engine/graphics/back/cameras/Camera.hpp> -#include <engine/graphics/front/engine/TextureArray.hpp> -#include <engine/io/Window.hpp> - -namespace megu { - template <class T> - class Module { - public: - virtual void render(const Window &, const Camera &, T &, const TextureArray &) = 0; - }; - - template <class ... Ts> - class Multi_Module : public Module<Ts> ... {}; -} \ No newline at end of file diff --git a/source/engine/graphics/utility/overloaded.hpp b/source/engine/graphics/utility/overloaded.hpp new file mode 100644 index 0000000000000000000000000000000000000000..7fd32055955c0a72ea4958a81fb176e72e09e0c4 --- /dev/null +++ b/source/engine/graphics/utility/overloaded.hpp @@ -0,0 +1,10 @@ +#pragma once + +namespace megu { + template <class... Ts> + struct overloaded : Ts ... { + using Ts::operator()...; + }; + + template <class... Ts> overloaded(Ts...) -> overloaded<Ts...>; +} \ No newline at end of file diff --git a/source/engine/graphics/utility/ref_set.hpp b/source/engine/graphics/utility/ref_set.hpp deleted file mode 100644 index b394253f12c2b2bc7841c59118c74fd6544bd0ac..0000000000000000000000000000000000000000 --- a/source/engine/graphics/utility/ref_set.hpp +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include <set> -#include "reference_sorter.hpp" - -namespace megu { - template <class T> - using ref_set = std::set<std::reference_wrapper<T>, reference_sorter<T>>; -} \ No newline at end of file diff --git a/source/main.cpp b/source/main.cpp index ab619eb05e69b826236624f7848ae536e4a86b1f..2cfef63540deeb8b98433c9ceb9d59b4cce2bed8 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -169,7 +169,8 @@ int main(int argc, const char * argv[]) { megu::Renderer basic_renderer(360, 360); engine.push(0, basic_renderer); - engine.push(0, 0, *images.front()); + + engine.push<megu::Image>(0, 0, *((images.front()).get())); //? Render Loop std::cout << "Render Loop Begin !" << std::endl;