#define GLFW_INCLUDE_VULKAN #include #include #include #include #include #include #include #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; }