@@ -4,16 +4,14 @@ Engine::Engine()
44{
55 m_last_time = std::chrono::high_resolution_clock::now ();
66
7- mp_camera = std::make_shared<Camera>();
8- mp_player = std::make_shared<Player>(mp_camera );
7+ mp_main_camera = std::make_shared<Camera>();
8+ mp_controller = std::make_shared<Controller>(mp_main_camera );
99 mp_config = std::make_shared<Config>();
1010
11- mp_window = std::make_unique<Window>(mp_config, *mp_player .get ());
11+ mp_window = std::make_unique<Window>(mp_config, *mp_controller .get ());
1212
1313 mp_renderer = std::make_shared<Renderer>(mp_window->getHandle (), mp_config->width , mp_config->height );
1414
15-
16- mp_renderer->createNewPipeline (base_pipeline);
1715 mp_renderer->createDepthResources ();
1816 mp_renderer->createFramebuffer ();
1917
@@ -25,13 +23,13 @@ Engine::~Engine()
2523{
2624 vkDeviceWaitIdle (mp_renderer->getDevice ());
2725
28- mp_renderer->cleanSwapchain (std::make_shared<Pipeline>(base_pipeline) );
26+ mp_renderer->cleanSwapchain ();
2927
3028 for (size_t i = 0 ; i < mp_scene->getObjects ().size (); i++)
3129 {
3230 for (size_t t = 0 ; t < mp_scene->getObjects ()[i]->getMeshesCount (); t++)
3331 {
34- mp_scene->getObjects ()[i]->getMesh (t).getMaterial ()->destroyTexture ();
32+ mp_scene->getObjects ()[i]->getMesh (t).getMaterial ()->DestroyTexture ();
3533 mp_scene->getObjects ()[i]->getMesh (t).destroyMesh ();
3634 }
3735
@@ -58,9 +56,53 @@ void Engine::registerGameObject(std::shared_ptr<GameObject> gameobject)
5856 mp_scene->addGameObject (gameobject);
5957}
6058
61- std::shared_ptr<Renderer> Engine::getRenderEngine ()
59+ const std::shared_ptr<Material> Engine::CreateMaterial (const TSHADER shader)
60+ {
61+ return std::make_shared<Material>(shader, mp_renderer);
62+ }
63+
64+ const std::shared_ptr<Material> Engine::CreateMaterial (const TSHADER shader, const std::string& texture_file)
65+ {
66+ std::shared_ptr<Material> mat = std::make_shared<Material>(shader, mp_renderer);
67+ mat->LoadTexture (texture_file);
68+ return mat;
69+ }
70+
71+ const std::shared_ptr<GameObject> Engine::CreateGameObject ()
72+ {
73+ return std::make_shared<GameObject>(mp_renderer);
74+ }
75+
76+ const std::shared_ptr<GameObject> Engine::CreateGameObject (const std::string& object_file)
77+ {
78+ std::shared_ptr<GameObject> go = std::make_shared<GameObject>(mp_renderer);
79+ go->loadMesh (object_file);
80+ return go;
81+ }
82+
83+ void Engine::BindKeyToFunc (const int & key, std::function<void ()>& func, const ActionType& type)
84+ {
85+ mp_controller->SetKeyToFunc (key, func, type);
86+ }
87+
88+ const std::shared_ptr<Camera> Engine::GetMainCamera ()
89+ {
90+ return mp_main_camera;
91+ }
92+
93+ void Engine::SetWireframeMode ()
94+ {
95+ mp_renderer->SetPolygonFillingMode (VK_POLYGON_MODE_LINE);
96+ }
97+
98+ void Engine::SetPointMode ()
99+ {
100+ mp_renderer->SetPolygonFillingMode (VK_POLYGON_MODE_POINT);
101+ }
102+
103+ void Engine::SetFillMode ()
62104{
63- return mp_renderer;
105+ mp_renderer-> SetPolygonFillingMode (VK_POLYGON_MODE_FILL) ;
64106}
65107
66108const bool & Engine::shouldClose ()
@@ -75,28 +117,27 @@ void Engine::update()
75117 std::chrono::steady_clock::time_point current_time = std::chrono::high_resolution_clock::now ();
76118 float delta_time = std::chrono::duration<float , std::chrono::seconds::period>(current_time - m_last_time).count ();
77119
78- mp_player->setDeltaTime (delta_time);
79- mp_player->updatePosition ();
120+ mp_controller->Update (delta_time);
80121
81122 m_last_time = current_time;
82123
83- const int frame = mp_renderer->getFrameIndex ();
84- if (mp_scene->isUpdate (frame))
124+ const int32_t frame = mp_renderer->AcquireNextImage ();
125+ if (frame != - 1 && ( mp_scene->isUpdate (frame) || mp_renderer-> IsUpdated (frame) ))
85126 {
86- mp_renderer->beginRecordCommandBuffers (mp_renderer->getCommandBuffer (frame), mp_renderer->getFrameBuffer (frame), base_pipeline);
87-
88- mp_scene->render (base_pipeline, mp_renderer->getCommandBuffer (frame), frame);
89-
127+ mp_renderer->beginRecordCommandBuffers (mp_renderer->getCommandBuffer (frame), mp_renderer->getFrameBuffer (frame));
128+ mp_scene->render (mp_renderer->getCommandBuffer (frame), frame);
90129 mp_renderer->endRecordCommandBuffers (mp_renderer->getCommandBuffer (frame));
130+
131+ mp_renderer->SetUpdate (frame);
91132 }
92133
93- mp_camera-> updateUBO (static_cast <float >(mp_config->width ), static_cast <float >(mp_config->height ));
94- mp_scene->updateUBO (mp_camera , mp_renderer);
134+ mp_main_camera-> UpdateUBO (static_cast <float >(mp_config->width ), static_cast <float >(mp_config->height ));
135+ mp_scene->updateUBO (mp_main_camera , mp_renderer);
95136
96137 // std::this_thread::sleep_for(std::chrono::nanoseconds(500));//delete when not streaming
97138}
98139
99140void Engine::draw ()
100141{
101- mp_renderer->draw (base_pipeline );
142+ mp_renderer->draw ();
102143}
0 commit comments