Files
Cheap-Vulkan-Renderer/first_app.cpp

54 lines
1.4 KiB
C++

#include "first_app.hpp"
#include "simple_render_system.hpp"
#include <stdexcept>
#include <array>
#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/glm.hpp>
#include <glm/gtc/constants.hpp>
namespace cve {
FirstApp::FirstApp() {
loadGameObjects();
}
FirstApp::~FirstApp() {}
void FirstApp::run() {
SimpleRenderSystem simpleRenderSystem{cveDevice, cveRenderer.getSwapChainRenderPass()};
while (!cveWindow.shouldClose()) {
glfwPollEvents();
if (auto commandBuffer = cveRenderer.beginFrame()) {
cveRenderer.beginSwapChainRenderPass(commandBuffer);
simpleRenderSystem.renderGameObjects(commandBuffer, gameObjects);
cveRenderer.endSwapChainRenderPass(commandBuffer);
cveRenderer.endFrame();
}
}
vkDeviceWaitIdle(cveDevice.device());
}
void FirstApp::loadGameObjects() {
std::vector<CveModel::Vertex> verticies {
{{0.0f, -0.5f}, {1.0f, 0.0f, 0.0f}},
{{0.5f, 0.5f}, {0.0f, 1.0f, 0.0f}},
{{-0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}}
};
auto cveModel = std::make_shared<CveModel>(cveDevice, verticies);
auto triangle = CveGameObject::createGameObject();
triangle.model = cveModel;
triangle.color = {0.1f, 0.8f, 0.1f};
triangle.transform2d.translation.x = .2f;
triangle.transform2d.scale = {2.f, .5f};
triangle.transform2d.rotation = .25f * glm::two_pi<float>();
gameObjects.push_back(std::move(triangle));
}
}