78 lines
2.4 KiB
C++
78 lines
2.4 KiB
C++
#define GLFW_INCLUDE_VULKAN
|
|
#include <GLFW/glfw3.h>
|
|
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <sophia/scene_registry.hpp>
|
|
#include <sophia/scene_view.hpp>
|
|
#include <tracy/Tracy.hpp>
|
|
#include <vulkan/vulkan.hpp>
|
|
|
|
#include "renderer/render_context.hpp"
|
|
#include "renderer/render_graph.hpp"
|
|
#include "renderer/scene_renderer.hpp"
|
|
#include "resources/resource_registry.hpp"
|
|
#include "vulkan/device.hpp"
|
|
#include "window.hpp"
|
|
|
|
constexpr uint32_t WIDTH = 1280;
|
|
constexpr uint32_t HEIGHT = 720;
|
|
constexpr const char* NAME = "sandbox";
|
|
|
|
int main() {
|
|
sophia::Window window{WIDTH, HEIGHT, NAME};
|
|
sophia::Device device{&window};
|
|
sophia::RenderContext renderContext{window, device};
|
|
sophia::ResourceRegistry resourceRegistry{device,
|
|
renderContext.getImageFormat()};
|
|
|
|
sophia::SceneRegistry sceneRegistry;
|
|
sophia::SceneRenderer sceneRenderer{sceneRegistry, resourceRegistry, device,
|
|
renderContext.getImageFormat()};
|
|
|
|
sophia::SceneView view;
|
|
view.scene = sceneRegistry.create();
|
|
view.clearColor = {0.01f, 0.01f, 0.02f, 1.0f};
|
|
view.camera = sceneRegistry.get(view.scene).createCamera();
|
|
|
|
while (!window.shouldClose()) {
|
|
glfwPollEvents();
|
|
|
|
vk::CommandBuffer commandBuffer = renderContext.beginFrame();
|
|
if (!commandBuffer) {
|
|
continue;
|
|
}
|
|
|
|
sceneRenderer.beginFrame(renderContext.getFrameIndex());
|
|
|
|
sophia::RenderGraph graph{renderContext.getTracyContext()};
|
|
sophia::ImageRef color = graph.importImage(renderContext.getCurrentImage(),
|
|
sophia::Access::Present);
|
|
sophia::ImageRef depth = graph.importImage(
|
|
renderContext.getCurrentDepthImage(), sophia::Access::DepthWrite);
|
|
|
|
graph.addPass(
|
|
"scene",
|
|
[&](sophia::RenderGraph::PassBuilder& pass) {
|
|
const sophia::vec4& c = view.clearColor;
|
|
pass.writeColor(color, vk::AttachmentLoadOp::eClear,
|
|
{c.r, c.g, c.b, c.a});
|
|
pass.writeDepth(depth, vk::AttachmentLoadOp::eClear);
|
|
},
|
|
[&](vk::CommandBuffer commandBuffer) {
|
|
ZoneScopedN("scene pass");
|
|
sceneRenderer.render(commandBuffer, view, view.camera,
|
|
renderContext.getExtent());
|
|
});
|
|
|
|
graph.execute(commandBuffer);
|
|
|
|
renderContext.endFrame();
|
|
FrameMark;
|
|
}
|
|
|
|
device.waitIdle();
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|