2024-02-21 13:28:50 +08:00
|
|
|
#include "first_app.hpp"
|
2024-04-03 22:22:29 +08:00
|
|
|
#include "simple_render_system.hpp"
|
2024-02-21 13:28:50 +08:00
|
|
|
|
2024-04-03 21:28:08 +08:00
|
|
|
// libs
|
|
|
|
#define GLM_FORCE_RADIANS
|
|
|
|
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
|
|
|
#include <glm/glm.hpp>
|
|
|
|
#include <glm/gtc/constants.hpp>
|
|
|
|
|
2024-02-21 13:28:50 +08:00
|
|
|
// std
|
|
|
|
#include <stdexcept>
|
|
|
|
#include <array>
|
|
|
|
|
|
|
|
namespace hk
|
|
|
|
{
|
|
|
|
FirstApp::FirstApp()
|
|
|
|
{
|
2024-04-03 21:28:08 +08:00
|
|
|
loadGameObjects();
|
2024-02-21 13:28:50 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
FirstApp::~FirstApp()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void FirstApp::run()
|
|
|
|
{
|
2024-04-03 22:22:29 +08:00
|
|
|
SimpleRenderSystem simpleRenderSystem{m_device, m_renderer.getSwapChainRenderPass()};
|
2024-04-03 21:28:08 +08:00
|
|
|
while (!m_window.shouldClose())
|
2024-02-21 13:28:50 +08:00
|
|
|
{
|
|
|
|
glfwPollEvents();
|
2024-04-03 21:28:08 +08:00
|
|
|
|
|
|
|
if (auto commandBuffer = m_renderer.beginFrame())
|
|
|
|
{
|
|
|
|
m_renderer.beginSwapChainRenderPass(commandBuffer);
|
2024-04-03 22:22:29 +08:00
|
|
|
simpleRenderSystem.renderGameObjects(commandBuffer, m_gameObjects);
|
2024-04-03 21:28:08 +08:00
|
|
|
m_renderer.endSwapChainRenderPass(commandBuffer);
|
|
|
|
m_renderer.endFrame();
|
|
|
|
}
|
2024-02-21 13:28:50 +08:00
|
|
|
}
|
|
|
|
|
2024-04-03 21:28:08 +08:00
|
|
|
vkDeviceWaitIdle(m_device.device());
|
2024-02-21 13:28:50 +08:00
|
|
|
}
|
|
|
|
|
2024-04-03 21:28:08 +08:00
|
|
|
void FirstApp::loadGameObjects()
|
2024-02-21 13:28:50 +08:00
|
|
|
{
|
|
|
|
std::vector<Model::Vertex> vertices{
|
|
|
|
{{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}}
|
|
|
|
};
|
2024-04-03 21:28:08 +08:00
|
|
|
auto model = std::make_shared<Model>(m_device, vertices);
|
|
|
|
|
|
|
|
auto triangle = GameObject::createGameObject();
|
|
|
|
triangle.m_model = model;
|
|
|
|
triangle.m_color = {.1f, .8f, .1f};
|
|
|
|
triangle.m_transform2d.translation.x = .2f;
|
|
|
|
triangle.m_transform2d.scale = {2.0f, .5f};
|
|
|
|
triangle.m_transform2d.rotation = .25f * glm::two_pi<float>();
|
|
|
|
|
|
|
|
m_gameObjects.push_back(std::move(triangle));
|
2024-02-21 13:28:50 +08:00
|
|
|
}
|
2024-04-03 22:22:29 +08:00
|
|
|
} // namespace hk
|