diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2022-09-19 16:35:45 -0400 |
---|---|---|
committer | Tyler Murphy <tylermurphy534@gmail.com> | 2022-09-19 16:35:45 -0400 |
commit | 2f99eee7c5f0088e3c39c21a5d2efd7335953ae8 (patch) | |
tree | 210845819e39ad9df558ffa3234205e4cd14c48a /src | |
parent | more recatoring, doesnt compile (diff) | |
download | minecraftvulkan-2f99eee7c5f0088e3c39c21a5d2efd7335953ae8.tar.gz minecraftvulkan-2f99eee7c5f0088e3c39c21a5d2efd7335953ae8.tar.bz2 minecraftvulkan-2f99eee7c5f0088e3c39c21a5d2efd7335953ae8.zip |
even more refactoring
Diffstat (limited to '')
-rwxr-xr-x | src/first_app.cpp | 57 | ||||
-rw-r--r-- | src/simple_render_system.cpp | 94 | ||||
-rw-r--r-- | src/simple_render_system.hpp | 37 |
3 files changed, 35 insertions, 153 deletions
diff --git a/src/first_app.cpp b/src/first_app.cpp index 1813d75..e460c6b 100755 --- a/src/first_app.cpp +++ b/src/first_app.cpp @@ -3,7 +3,6 @@ #include "xe_camera.hpp" #include "xe_game_object.hpp" #include "xe_model.hpp" -#include "simple_render_system.hpp" #include "keyboard_movement_controller.hpp" @@ -16,12 +15,17 @@ #include <chrono> #include <cassert> #include <stdexcept> - +#include <iostream> namespace xe { -struct GlobalUbo { - glm::mat4 projectionView{1.f}; - glm::vec3 lightDirection = glm::normalize(glm::vec3{-1.f, 3.f, 1.f}); +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}; }; FirstApp::FirstApp() : xeEngine{WIDTH, HEIGHT, "Hello, Vulkan!"} { @@ -32,7 +36,12 @@ FirstApp::~FirstApp() {} void FirstApp::run() { - std::unique_ptr<XeRenderSystem> renderSystem = xeEngine.createRenderSystem("fw","fd",0,0); + std::unique_ptr<XeRenderSystem> simpleRenderSystem = xeEngine.createRenderSystem( + "res/shaders/simple_shader.vert.spv", + "res/shaders/simple_shader.frag.spv", + sizeof(PushConstant), + sizeof(UniformBuffer)); + XeCamera camera{}; camera.setViewTarget(glm::vec3(-1.f, -2.f, 20.f), glm::vec3(0.f, 0.f, 2.5f)); @@ -51,34 +60,38 @@ void FirstApp::run() { cameraController.moveInPlaneXZ(xeEngine.getWindow().getGLFWwindow(), frameTime, viewerObject); camera.setViewYXZ(viewerObject.transform.translation, viewerObject.transform.rotation); - float aspect = xeRenderer.getAspectRatio(); + float aspect = xeEngine.getRenderer().getAspectRatio(); camera.setPerspectiveProjection(glm::radians(50.f), aspect, 0.1f, 100.f); - if(auto commandBuffer = xeRenderer.beginFrame()) { + if(xeEngine.beginFrame()) { - int frameIndex = xeRenderer.getFrameIndex(); - - // update - GlobalUbo ubo{}; + PushConstant pc{}; + pc.modelMatrix = gameObjects[0].transform.mat4(); + pc.normalMatrix = gameObjects[0].transform.normalMatrix(); + + UniformBuffer ubo{}; ubo.projectionView = camera.getProjection() * camera.getView(); - // uboBuffers[frameIndex]->writeToBuffer(&ubo); - // uboBuffers[frameIndex]->flush(); + + xeEngine.render( + *simpleRenderSystem, + gameObjects, + &pc, + sizeof(pc), + &ubo, + sizeof(ubo) + ); - // // render - // xeRenderer.beginSwapChainRenderPass(commandBuffer); - // simpleRenderSystem.renderGameObjects(frameInfo, gameObjects); - // xeRenderer.endSwapChainRenderPass(commandBuffer); - // xeRenderer.endFrame(); - } + xeEngine.endFrame(); + } } - vkDeviceWaitIdle(xeDevice.device()); + xeEngine.close(); } void FirstApp::loadGameObjects() { - std::shared_ptr<XeModel> xeModel = XeModel::createModelFromFile(xeDevice, "res/models/stanford-dragon.obj"); + std::shared_ptr<XeModel> xeModel = xeEngine.createModel("res/models/stanford-dragon.obj"); auto cube = XeGameObject::createGameObject(); cube.model = xeModel; diff --git a/src/simple_render_system.cpp b/src/simple_render_system.cpp deleted file mode 100644 index 6e4ab30..0000000 --- a/src/simple_render_system.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "simple_render_system.hpp" -#include "xe_device.hpp" -#include <vector> -#include <vulkan/vulkan_core.h> - -#define GLM_FORCE_RADIANS -#define GLM_FORCE_DEPTH_ZERO_TO_ONE -#include <glm/glm.hpp> -#include <glm/gtc/constants.hpp> - -#include <array> -#include <cassert> -#include <stdexcept> - -namespace xe { - -struct SimplePushConstantData { - glm::mat4 modelMatrix{1.f}; - glm::mat4 normalMatrix{1.f}; -}; - -SimpleRenderSystem::SimpleRenderSystem(XeDevice& device, VkRenderPass renderPass, VkDescriptorSetLayout globalSetLayout) : xeDevice{device} { - createPipelineLayout(globalSetLayout); - createPipeline(renderPass); -} - -SimpleRenderSystem::~SimpleRenderSystem() { vkDestroyPipelineLayout(xeDevice.device(), pipelineLayout, nullptr); } - -void SimpleRenderSystem::createPipelineLayout(VkDescriptorSetLayout globalSetLayout) { - - VkPushConstantRange pushConstantRange; - pushConstantRange.stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT; - pushConstantRange.offset = 0; - pushConstantRange.size = sizeof(SimplePushConstantData); - - std::vector<VkDescriptorSetLayout> descriptorSetLayouts{globalSetLayout}; - - VkPipelineLayoutCreateInfo pipelineLayoutInfo{}; - pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; - pipelineLayoutInfo.setLayoutCount = static_cast<uint32_t>(descriptorSetLayouts.size()); - pipelineLayoutInfo.pSetLayouts = descriptorSetLayouts.data(); - pipelineLayoutInfo.pushConstantRangeCount = 1; - pipelineLayoutInfo.pPushConstantRanges = &pushConstantRange; - if(vkCreatePipelineLayout(xeDevice.device(), &pipelineLayoutInfo, nullptr, &pipelineLayout) != VK_SUCCESS) { - std::runtime_error("failed to create pipeline layout!"); - } -} - -void SimpleRenderSystem::createPipeline(VkRenderPass renderPass) { - assert(pipelineLayout != nullptr && "Canor create pipeline before pipeline layout"); - - PipelineConfigInfo pipelineConfig{}; - XePipeline::defaultPipelineConfigInfo(pipelineConfig); - pipelineConfig.renderPass = renderPass; - pipelineConfig.pipelineLayout = pipelineLayout; - xePipeline = std::make_unique<XePipeline>( - xeDevice, - "res/shaders/simple_shader.vert.spv", - "res/shaders/simple_shader.frag.spv", - pipelineConfig - ); -} - -void SimpleRenderSystem::renderGameObjects(XeFrameInfo &frameInfo, std::vector<XeGameObject> &gameObjects) { - xePipeline->bind(frameInfo.commandBuffer); - - vkCmdBindDescriptorSets( - frameInfo.commandBuffer, - VK_PIPELINE_BIND_POINT_GRAPHICS, - pipelineLayout, - 0, - 1, - &frameInfo.globalDescriptorSet, - 0, - nullptr); - - for (auto& obj: gameObjects) { - SimplePushConstantData push{}; - push.modelMatrix = obj.transform.mat4(); - push.normalMatrix = obj.transform.normalMatrix(); - - vkCmdPushConstants( - frameInfo.commandBuffer, - pipelineLayout, - VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, - 0, - sizeof(SimplePushConstantData), - &push); - obj.model->bind(frameInfo.commandBuffer); - obj.model->draw(frameInfo.commandBuffer); - } -} - -}
\ No newline at end of file diff --git a/src/simple_render_system.hpp b/src/simple_render_system.hpp deleted file mode 100644 index b0d4a39..0000000 --- a/src/simple_render_system.hpp +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#include "xe_camera.hpp" -#include "xe_pipeline.hpp" -#include "xe_device.hpp" -#include "xe_game_object.hpp" -#include "xe_frame_info.hpp" - -#include <memory> -#include <vector> -#include <vulkan/vulkan_core.h> - -namespace xe { -class SimpleRenderSystem { - public: - - SimpleRenderSystem(XeDevice& device, VkRenderPass renderPass, VkDescriptorSetLayout globalSetLayout); - ~SimpleRenderSystem(); - - SimpleRenderSystem(const SimpleRenderSystem &) = delete; - SimpleRenderSystem operator=(const SimpleRenderSystem &) = delete; - - void renderGameObjects( - XeFrameInfo &frameInfo, - std::vector<XeGameObject> &gameObjects - ); - - private: - void createPipelineLayout(VkDescriptorSetLayout globalSetLayout); - void createPipeline(VkRenderPass renderPass); - - XeDevice& xeDevice; - - std::unique_ptr<XePipeline> xePipeline; - VkPipelineLayout pipelineLayout; -}; -}
\ No newline at end of file |