From 8cc0b081ef0188f850814b2af2cb077583eb9f2d Mon Sep 17 00:00:00 2001 From: tylermurphy534 Date: Mon, 19 Sep 2022 21:28:41 -0400 Subject: finish refactor --- src/first_app.cpp | 89 +++++++++++++++++-------------------------------------- 1 file changed, 27 insertions(+), 62 deletions(-) (limited to 'src/first_app.cpp') diff --git a/src/first_app.cpp b/src/first_app.cpp index e460c6b..7be857d 100755 --- a/src/first_app.cpp +++ b/src/first_app.cpp @@ -1,32 +1,20 @@ #include "first_app.hpp" #include "xe_camera.hpp" +#include "xe_engine.hpp" #include "xe_game_object.hpp" #include "xe_model.hpp" +#include "xe_render_system.hpp" #include "keyboard_movement_controller.hpp" - +#include "simple_renderer.hpp" #define GLM_FORCE_RADIANS #define GLM_FORCE_DEPTH_ZERO_TO_ONE #include #include - #include -#include -#include -#include -#include -namespace xe { - -struct UniformBuffer { - alignas(16) glm::mat4 projectionView{1.f}; - alignas(4) glm::vec3 lightDirection = glm::normalize(glm::vec3{-1.f, 3.f, 1.f}); -}; - -struct PushConstant { - alignas(16) glm::mat4 modelMatrix{1.f}; - alignas(16) glm::mat4 normalMatrix{1.f}; -}; + +namespace app { FirstApp::FirstApp() : xeEngine{WIDTH, HEIGHT, "Hello, Vulkan!"} { loadGameObjects(); @@ -36,53 +24,23 @@ FirstApp::~FirstApp() {} void FirstApp::run() { - std::unique_ptr simpleRenderSystem = xeEngine.createRenderSystem( - "res/shaders/simple_shader.vert.spv", - "res/shaders/simple_shader.frag.spv", - sizeof(PushConstant), - sizeof(UniformBuffer)); + SimpleRenderer renderer{xeEngine}; + + xeEngine.getCamera().setViewTarget(glm::vec3(-1.f, -2.f, 20.f), glm::vec3(0.f, 0.f, 2.5f)); - XeCamera camera{}; - camera.setViewTarget(glm::vec3(-1.f, -2.f, 20.f), glm::vec3(0.f, 0.f, 2.5f)); - - auto viewerObject = XeGameObject::createGameObject(); + auto viewerObject = xe::XeGameObject::createGameObject(); KeyboardMovementController cameraController{}; - auto currentTime = std::chrono::high_resolution_clock::now(); - - while (!xeEngine.getWindow().shouldClose()) { - glfwPollEvents(); + while (xeEngine.poll()) { - auto newTime = std::chrono::high_resolution_clock::now(); - float frameTime = std::chrono::duration(newTime - currentTime).count(); - currentTime = newTime; + float frameTime = xeEngine.getFrameTime(); cameraController.moveInPlaneXZ(xeEngine.getWindow().getGLFWwindow(), frameTime, viewerObject); - camera.setViewYXZ(viewerObject.transform.translation, viewerObject.transform.rotation); - - float aspect = xeEngine.getRenderer().getAspectRatio(); - camera.setPerspectiveProjection(glm::radians(50.f), aspect, 0.1f, 100.f); + xeEngine.getCamera().setViewYXZ(viewerObject.transform.translation, viewerObject.transform.rotation); if(xeEngine.beginFrame()) { - - PushConstant pc{}; - pc.modelMatrix = gameObjects[0].transform.mat4(); - pc.normalMatrix = gameObjects[0].transform.normalMatrix(); - - UniformBuffer ubo{}; - ubo.projectionView = camera.getProjection() * camera.getView(); - - xeEngine.render( - *simpleRenderSystem, - gameObjects, - &pc, - sizeof(pc), - &ubo, - sizeof(ubo) - ); - + renderer.render(gameObjects, xeEngine.getCamera()); xeEngine.endFrame(); - } } @@ -91,13 +49,20 @@ void FirstApp::run() { } void FirstApp::loadGameObjects() { - std::shared_ptr xeModel = xeEngine.createModel("res/models/stanford-dragon.obj"); - - auto cube = XeGameObject::createGameObject(); - cube.model = xeModel; - cube.transform.translation = {.0f, .0f, 2.5f}; - cube.transform.scale = {.5f, .5f, .5f}; - gameObjects.push_back(std::move(cube)); + std::shared_ptr xeModel = xeEngine.loadModelFromFile("res/models/stanford-dragon.obj"); + + auto dragon = xe::XeGameObject::createGameObject(); + dragon.model = xeModel; + dragon.transform.translation = {.0f, .0f, 2.5f}; + dragon.transform.scale = {.5f, .5f, .5f}; + gameObjects.push_back(std::move(dragon)); + + auto dragon2 = xe::XeGameObject::createGameObject(); + dragon2.model = xeModel; + dragon2.transform.translation = {5.0f, .0f, -1.5f}; + dragon2.transform.rotation.y = glm::radians(90.f); + dragon2.transform.scale = {.35f, .35f, .35f}; + gameObjects.push_back(std::move(dragon2)); } } \ No newline at end of file -- cgit v1.2.3-freya