sandbox updates
This commit is contained in:
+85
-6
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user