sandbox updates

This commit is contained in:
2026-10-07 11:51:14 -07:00
parent 3784d0fdec
commit 09a6c0283a
8 changed files with 296 additions and 6 deletions
+85 -6
View File
@@ -3,6 +3,7 @@
#include <cstdint>
#include <cstdlib>
#include <sophia/components.hpp>
#include <sophia/scene_registry.hpp>
#include <sophia/scene_view.hpp>
#include <tracy/Tracy.hpp>
@@ -12,13 +13,24 @@
#include "renderer/render_graph.hpp"
#include "renderer/scene_renderer.hpp"
#include "resources/resource_registry.hpp"
#include "vulkan/buffer.hpp"
#include "vulkan/device.hpp"
#include "vulkan/shader.hpp"
#include "window.hpp"
constexpr uint32_t WIDTH = 1280;
constexpr uint32_t HEIGHT = 720;
constexpr const char* NAME = "sandbox";
void immediate_submit(sophia::Device& device,
std::function<void(VkCommandBuffer cmd)>&& function) {
auto command = device.beginSingleTimeCommands();
function(command);
device.endSingleTimeCommands(command);
}
#include "material.hpp"
int main() {
sophia::Window window{WIDTH, HEIGHT, NAME};
sophia::Device device{&window};
@@ -30,10 +42,55 @@ int main() {
sophia::SceneRenderer sceneRenderer{sceneRegistry, resourceRegistry, device,
renderContext.getImageFormat()};
sophia::SceneHandle sceneHandle = sceneRegistry.create();
sophia::Scene& scene = sceneRegistry.get(sceneHandle);
sophia::Entity camera = scene.createCamera();
// {
// auto& transform = camera.getComponent<sophia::TransformComponent>();
// transform.position.z += 60;
// }
sophia::SceneView view;
view.scene = sceneRegistry.create();
view.scene = sceneHandle;
view.clearColor = {0.01f, 0.01f, 0.02f, 1.0f};
view.camera = sceneRegistry.get(view.scene).createCamera();
view.camera = camera;
auto vertexShader = sophia::Shader::Builder()
.fromGLSL(SANDBOX_SHADER_DIR "/triangle.vert")
.setStage(sophia::ShaderStage::VERTEX)
.build();
auto fragmentShader = sophia::Shader::Builder()
.fromGLSL(SANDBOX_SHADER_DIR "/triangle.frag")
.setStage(sophia::ShaderStage::FRAGMENT)
.build();
vk::Format depthFormat = resourceRegistry.renderTargetPool.getDepthFormat();
sophia::Material material{device, std::move(vertexShader),
std::move(fragmentShader),
renderContext.getImageFormat(), depthFormat};
struct TriangleVertex {
sophia::vec4 vertex;
sophia::vec4 color;
};
TriangleVertex verticies[] = {
{{-1.f, 1.f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f, 0.0f}},
{{1.f, 1.f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f, 0.0f}},
{{0.f, -1.f, 0.0f, 0.0f}, {0.0f, 0.0f, 1.0f, 0.0f}}};
sophia::u32 triangleVerticiesCount = 3;
sophia::Buffer triangleBuffer{device, sizeof(TriangleVertex),
triangleVerticiesCount,
vk::BufferUsageFlagBits::eShaderDeviceAddress,
vk::MemoryPropertyFlagBits::eHostVisible |
vk::MemoryPropertyFlagBits::eHostCoherent};
triangleBuffer.map();
triangleBuffer.writeToBuffer(verticies);
vk::DeviceAddress address =
device.get()->getBufferAddress({triangleBuffer.getBuffer()});
while (!window.shouldClose()) {
glfwPollEvents();
@@ -52,7 +109,7 @@ int main() {
renderContext.getCurrentDepthImage(), sophia::Access::DepthWrite);
graph.addPass(
"scene",
"sandbox",
[&](sophia::RenderGraph::PassBuilder& pass) {
const sophia::vec4& c = view.clearColor;
pass.writeColor(color, vk::AttachmentLoadOp::eClear,
@@ -60,11 +117,33 @@ int main() {
pass.writeDepth(depth, vk::AttachmentLoadOp::eClear);
},
[&](vk::CommandBuffer commandBuffer) {
ZoneScopedN("scene pass");
sceneRenderer.render(commandBuffer, view, view.camera,
renderContext.getExtent());
ZoneScopedN("main sandbox pass");
material.bind(commandBuffer);
sophia::Material::PushConstants push;
push.data0 = address;
commandBuffer.pushConstants(
material.getLayout(), vk::ShaderStageFlagBits::eVertex, 0,
sizeof(sophia::Material::PushConstants), &push);
commandBuffer.draw(3, 1, 0, 0);
});
/*
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();