summaryrefslogtreecommitdiff
path: root/src/first_app.cpp
diff options
context:
space:
mode:
authortylermurphy534 <tylermurphy534@gmail.com>2022-09-19 21:28:41 -0400
committertylermurphy534 <tylermurphy534@gmail.com>2022-09-19 21:28:41 -0400
commit8cc0b081ef0188f850814b2af2cb077583eb9f2d (patch)
treef90ba2da50c91f596672730706440149fecb2393 /src/first_app.cpp
parenttemp patch (diff)
downloadminecraftvulkan-8cc0b081ef0188f850814b2af2cb077583eb9f2d.tar.gz
minecraftvulkan-8cc0b081ef0188f850814b2af2cb077583eb9f2d.tar.bz2
minecraftvulkan-8cc0b081ef0188f850814b2af2cb077583eb9f2d.zip
finish refactor
Diffstat (limited to 'src/first_app.cpp')
-rwxr-xr-xsrc/first_app.cpp85
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