Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
606b459
#25 organize file
MrScriptX May 5, 2021
b267fc7
Merge pull request #43 from MrScriptX/engine
MrScriptX May 5, 2021
2e488e7
#26 #31 remove tiny_obj_loader & load obj with assimp
MrScriptX May 6, 2021
8b9a4c7
#23 update documentation
MrScriptX May 6, 2021
681bd52
Merge pull request #44 from MrScriptX/engine
MrScriptX May 6, 2021
9493ee0
dynamic texture binding
MrScriptX May 6, 2021
9dd104b
new shader for no texture material
MrScriptX May 7, 2021
15f1092
pipelines are now abstract and multiples shaders can be used
MrScriptX May 8, 2021
c40a9c0
pipeline are kept under an array
MrScriptX May 8, 2021
93eed83
abstract shader files
MrScriptX May 8, 2021
27ba33c
move shader files arr in a struct for modding
MrScriptX May 8, 2021
5d35d73
rename pipeline factory
MrScriptX May 8, 2021
42b93e4
material has now a factory
MrScriptX May 8, 2021
8673c4d
renderer is no longer needed to load texture
MrScriptX May 8, 2021
1c6ac5a
access to renderer is removed
MrScriptX May 8, 2021
5ed311d
abstract object creation to engine
MrScriptX May 8, 2021
c42212b
Merge pull request #45 from MrScriptX/engine
MrScriptX May 8, 2021
9445ef1
test on two objects with two different shaders | delete old code
MrScriptX May 8, 2021
bcdf510
camera position update moved in camera class | player class renamed c…
MrScriptX May 10, 2021
cc5ea52
key can now be binded
MrScriptX May 10, 2021
0795b11
main camera can be access from engine | some refactoring
MrScriptX May 10, 2021
9e94dc2
fix resizing errors and sync issues
MrScriptX May 10, 2021
246f49c
fix resizing : AcquireNextImage is now use to sync everything | we co…
MrScriptX May 10, 2021
f320dec
Merge pull request #47 from MrScriptX/engine
MrScriptX May 10, 2021
66c072c
action can be set to happen once on press or on release
MrScriptX May 10, 2021
18de9d1
can bind key without latency issues
MrScriptX May 10, 2021
c6f61f4
added non fill mode features
MrScriptX May 10, 2021
30a04e6
array of func is wrapped in ptr | if condition to check if func is as…
MrScriptX May 10, 2021
c69831f
Merge pull request #48 from MrScriptX/engine
MrScriptX May 10, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 0 additions & 77 deletions Engine/Camera.cpp

This file was deleted.

46 changes: 0 additions & 46 deletions Engine/Camera.h

This file was deleted.

81 changes: 61 additions & 20 deletions Engine/Engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,14 @@ Engine::Engine()
{
m_last_time = std::chrono::high_resolution_clock::now();

mp_camera = std::make_shared<Camera>();
mp_player = std::make_shared<Player>(mp_camera);
mp_main_camera = std::make_shared<Camera>();
mp_controller = std::make_shared<Controller>(mp_main_camera);
mp_config = std::make_shared<Config>();

mp_window = std::make_unique<Window>(mp_config, *mp_player.get());
mp_window = std::make_unique<Window>(mp_config, *mp_controller.get());

mp_renderer = std::make_shared<Renderer>(mp_window->getHandle(), mp_config->width, mp_config->height);


mp_renderer->createNewPipeline(base_pipeline);
mp_renderer->createDepthResources();
mp_renderer->createFramebuffer();

Expand All @@ -25,13 +23,13 @@ Engine::~Engine()
{
vkDeviceWaitIdle(mp_renderer->getDevice());

mp_renderer->cleanSwapchain(std::make_shared<Pipeline>(base_pipeline));
mp_renderer->cleanSwapchain();

for (size_t i = 0; i < mp_scene->getObjects().size(); i++)
{
for (size_t t = 0; t < mp_scene->getObjects()[i]->getMeshesCount(); t++)
{
mp_scene->getObjects()[i]->getMesh(t).getMaterial()->destroyTexture();
mp_scene->getObjects()[i]->getMesh(t).getMaterial()->DestroyTexture();
mp_scene->getObjects()[i]->getMesh(t).destroyMesh();
}

Expand All @@ -58,9 +56,53 @@ void Engine::registerGameObject(std::shared_ptr<GameObject> gameobject)
mp_scene->addGameObject(gameobject);
}

std::shared_ptr<Renderer> Engine::getRenderEngine()
const std::shared_ptr<Material> Engine::CreateMaterial(const TSHADER shader)
{
return std::make_shared<Material>(shader, mp_renderer);
}

const std::shared_ptr<Material> Engine::CreateMaterial(const TSHADER shader, const std::string& texture_file)
{
std::shared_ptr<Material> mat = std::make_shared<Material>(shader, mp_renderer);
mat->LoadTexture(texture_file);
return mat;
}

const std::shared_ptr<GameObject> Engine::CreateGameObject()
{
return std::make_shared<GameObject>(mp_renderer);
}

const std::shared_ptr<GameObject> Engine::CreateGameObject(const std::string& object_file)
{
std::shared_ptr<GameObject> go = std::make_shared<GameObject>(mp_renderer);
go->loadMesh(object_file);
return go;
}

void Engine::BindKeyToFunc(const int& key, std::function<void()>& func, const ActionType& type)
{
mp_controller->SetKeyToFunc(key, func, type);
}

const std::shared_ptr<Camera> Engine::GetMainCamera()
{
return mp_main_camera;
}

void Engine::SetWireframeMode()
{
mp_renderer->SetPolygonFillingMode(VK_POLYGON_MODE_LINE);
}

void Engine::SetPointMode()
{
mp_renderer->SetPolygonFillingMode(VK_POLYGON_MODE_POINT);
}

void Engine::SetFillMode()
{
return mp_renderer;
mp_renderer->SetPolygonFillingMode(VK_POLYGON_MODE_FILL);
}

const bool& Engine::shouldClose()
Expand All @@ -75,28 +117,27 @@ void Engine::update()
std::chrono::steady_clock::time_point current_time = std::chrono::high_resolution_clock::now();
float delta_time = std::chrono::duration<float, std::chrono::seconds::period>(current_time - m_last_time).count();

mp_player->setDeltaTime(delta_time);
mp_player->updatePosition();
mp_controller->Update(delta_time);

m_last_time = current_time;

const int frame = mp_renderer->getFrameIndex();
if (mp_scene->isUpdate(frame))
const int32_t frame = mp_renderer->AcquireNextImage();
if (frame != -1 && (mp_scene->isUpdate(frame) || mp_renderer->IsUpdated(frame)))
{
mp_renderer->beginRecordCommandBuffers(mp_renderer->getCommandBuffer(frame), mp_renderer->getFrameBuffer(frame), base_pipeline);

mp_scene->render(base_pipeline, mp_renderer->getCommandBuffer(frame), frame);

mp_renderer->beginRecordCommandBuffers(mp_renderer->getCommandBuffer(frame), mp_renderer->getFrameBuffer(frame));
mp_scene->render(mp_renderer->getCommandBuffer(frame), frame);
mp_renderer->endRecordCommandBuffers(mp_renderer->getCommandBuffer(frame));

mp_renderer->SetUpdate(frame);
}

mp_camera->updateUBO(static_cast<float>(mp_config->width), static_cast<float>(mp_config->height));
mp_scene->updateUBO(mp_camera, mp_renderer);
mp_main_camera->UpdateUBO(static_cast<float>(mp_config->width), static_cast<float>(mp_config->height));
mp_scene->updateUBO(mp_main_camera, mp_renderer);

//std::this_thread::sleep_for(std::chrono::nanoseconds(500));//delete when not streaming
}

void Engine::draw()
{
mp_renderer->draw(base_pipeline);
mp_renderer->draw();
}
31 changes: 24 additions & 7 deletions Engine/Engine.h
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
#ifndef _ENGINE_H
#define _ENGINE_H

#include "GameObject.h"
#include "Scene.h"
#include "Window.h"

#include "world/GameObject.h"
#include "world/Scene.h"

class Engine
{
public:
Expand All @@ -18,7 +19,24 @@ class Engine
void setScene(std::shared_ptr<Scene> p_scene);
void registerGameObject(std::shared_ptr<GameObject> gameobject);

std::shared_ptr<Renderer> getRenderEngine();
// CREATE MATERIAL
const std::shared_ptr<Material> CreateMaterial(const TSHADER shader);
const std::shared_ptr<Material> CreateMaterial(const TSHADER shader, const std::string& texture_file);

// CREATE GAMEOBJECT
const std::shared_ptr<GameObject> CreateGameObject();
const std::shared_ptr<GameObject> CreateGameObject(const std::string& object_file);

// CONTROLLER
void BindKeyToFunc(const int& key, std::function<void()>& func, const ActionType& type = ActionType::R3D_PRESS);

// CAMERA
const std::shared_ptr<Camera> GetMainCamera();

// VIEWING
void SetWireframeMode();
void SetPointMode();
void SetFillMode();

const bool& shouldClose();

Expand All @@ -28,11 +46,10 @@ class Engine
std::shared_ptr<Renderer> mp_renderer;
std::shared_ptr<Scene> mp_scene;

std::shared_ptr<Camera> mp_camera;
std::shared_ptr<Player> mp_player;
std::shared_ptr<Camera> mp_main_camera;
std::shared_ptr<Controller> mp_controller;
std::shared_ptr<Config> mp_config;

Pipeline base_pipeline;

std::chrono::steady_clock::time_point m_last_time;
};

Expand Down
Loading