diff options
author | tylermurphy534 <tylermurphy534@gmail.com> | 2022-09-19 21:28:41 -0400 |
---|---|---|
committer | tylermurphy534 <tylermurphy534@gmail.com> | 2022-09-19 21:28:41 -0400 |
commit | 8cc0b081ef0188f850814b2af2cb077583eb9f2d (patch) | |
tree | f90ba2da50c91f596672730706440149fecb2393 /src/first_app.cpp | |
parent | temp patch (diff) | |
download | minecraftvulkan-8cc0b081ef0188f850814b2af2cb077583eb9f2d.tar.gz minecraftvulkan-8cc0b081ef0188f850814b2af2cb077583eb9f2d.tar.bz2 minecraftvulkan-8cc0b081ef0188f850814b2af2cb077583eb9f2d.zip |
finish refactor
Diffstat (limited to 'src/first_app.cpp')
-rwxr-xr-x | src/first_app.cpp | 85 |
1 files changed, 25 insertions, 60 deletions
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 <glm/glm.hpp> #include <glm/gtc/constants.hpp> - #include <array> -#include <chrono> -#include <cassert> -#include <stdexcept> -#include <iostream> -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<XeRenderSystem> 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<float, std::chrono::seconds::period>(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> xeModel = xeEngine.createModel("res/models/stanford-dragon.obj"); + std::shared_ptr<xe::XeModel> 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 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)); + 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 |