At least opens a window

This commit is contained in:
2026-04-06 20:35:13 +02:00
parent 0a4552a1a4
commit 0996bb3688
10 changed files with 62 additions and 61 deletions
+3 -2
View File
@@ -6,11 +6,12 @@
"configurations": [ "configurations": [
{ {
"name": "Launch", "name": "Launch",
"type": "lldb", "type": "cppdbg",
"request": "launch", "request": "launch",
"program": "${workspaceRoot}/build/FluidSimulation", "program": "${workspaceRoot}/build/FluidSimulation",
"args": [], "args": [],
"cwd": "${workspaceRoot}/build" "cwd": "${workspaceRoot}/build",
"MIMode": "lldb"
} }
] ]
} }
+2 -4
View File
@@ -25,8 +25,6 @@ target_link_libraries(FluidSimulation PRIVATE Engine)
target_include_directories(FluidSimulation PRIVATE src/) target_include_directories(FluidSimulation PRIVATE src/)
add_subdirectory(src/) add_subdirectory(src/)
add_custom_target(FluidSimulationAll ALL add_custom_command(TARGET FluidSimulation POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/res $<TARGET_FILE_DIR:FluidSimulation> ${CMAKE_SOURCE_DIR}/res $<TARGET_FILE_DIR:FluidSimulation>)
COMMAND
DEPENDS FluidSimulation)
+6 -6
View File
@@ -86,37 +86,37 @@
"name": "release", "name": "release",
"displayName": "Release (no ASan)", "displayName": "Release (no ASan)",
"configurePreset": "release", "configurePreset": "release",
"jobs": 0 "jobs": 14
}, },
{ {
"name": "release-asan", "name": "release-asan",
"displayName": "Release (ASan)", "displayName": "Release (ASan)",
"configurePreset": "release-asan", "configurePreset": "release-asan",
"jobs": 0 "jobs": 14
}, },
{ {
"name": "debug", "name": "debug",
"displayName": "Debug (no ASan)", "displayName": "Debug (no ASan)",
"configurePreset": "debug", "configurePreset": "debug",
"jobs": 0 "jobs": 14
}, },
{ {
"name": "debug-mac", "name": "debug-mac",
"displayName": "Debug Mac (no ASan)", "displayName": "Debug Mac (no ASan)",
"configurePreset": "debug-mac", "configurePreset": "debug-mac",
"jobs": 0 "jobs": 14
}, },
{ {
"name": "debug-mac-asan", "name": "debug-mac-asan",
"displayName": "Debug Mac (ASan)", "displayName": "Debug Mac (ASan)",
"configurePreset": "debug-mac-asan", "configurePreset": "debug-mac-asan",
"jobs": 0 "jobs": 14
}, },
{ {
"name": "debug-asan", "name": "debug-asan",
"displayName": "Debug (ASan)", "displayName": "Debug (ASan)",
"configurePreset": "debug-asan", "configurePreset": "debug-asan",
"jobs": 0 "jobs": 14
} }
] ]
} }
+1 -1
Submodule Seele updated: 7271fe8a0b...7af42b9bad
+1 -1
View File
@@ -1,4 +1,4 @@
static const uint3 gridSize = uint3(128, 128, 128); static const uint3 gridSize = uint3(64, 64, 64);
struct FluidGridData<T> struct FluidGridData<T>
{ {
RWStructuredBuffer<T> dataGrid; RWStructuredBuffer<T> dataGrid;
+38 -18
View File
@@ -1,4 +1,5 @@
#include "FluidRenderPass.h" #include "FluidRenderPass.h"
#include "Graphics/Command.h"
#include "Graphics/Enums.h" #include "Graphics/Enums.h"
#include "Graphics/Graphics.h" #include "Graphics/Graphics.h"
#include "Graphics/Initializer.h" #include "Graphics/Initializer.h"
@@ -7,7 +8,8 @@
using namespace Seele; using namespace Seele;
FluidRenderPass::FluidRenderPass(Seele::Gfx::PGraphics graphics) : RenderPass(graphics) { FluidRenderPass::FluidRenderPass(Seele::Gfx::PGraphics graphics)
: RenderPass(graphics) {
pipelineLayout = graphics->createPipelineLayout("FluidPipelineLayout"); pipelineLayout = graphics->createPipelineLayout("FluidPipelineLayout");
descriptorLayout = graphics->createDescriptorLayout("params"); descriptorLayout = graphics->createDescriptorLayout("params");
descriptorLayout->addDescriptorBinding(Gfx::DescriptorBinding{ descriptorLayout->addDescriptorBinding(Gfx::DescriptorBinding{
@@ -31,7 +33,8 @@ FluidRenderPass::FluidRenderPass(Seele::Gfx::PGraphics graphics) : RenderPass(gr
FluidRenderPass::~FluidRenderPass() {} FluidRenderPass::~FluidRenderPass() {}
void FluidRenderPass::beginFrame(const Seele::Component::Camera &camera, const Seele::Component::Transform &transform) { void FluidRenderPass::beginFrame(const Seele::Component::Camera &camera,
const Seele::Component::Transform &transform) {
updateViewParameters(camera, transform); updateViewParameters(camera, transform);
descriptorSet = descriptorLayout->allocateDescriptorSet(); descriptorSet = descriptorLayout->allocateDescriptorSet();
descriptorSet->updateBuffer("density", 0, densityBuffer); descriptorSet->updateBuffer("density", 0, densityBuffer);
@@ -40,6 +43,12 @@ void FluidRenderPass::beginFrame(const Seele::Component::Camera &camera, const S
void FluidRenderPass::render() { void FluidRenderPass::render() {
graphics->beginRenderPass(renderPass); graphics->beginRenderPass(renderPass);
Gfx::ORenderCommand renderCommand = graphics->createRenderCommand();
renderCommand->setViewport(viewport);
renderCommand->bindPipeline(pipeline);
renderCommand->bindDescriptor(descriptorSet);
renderCommand->draw(3, 1, 0, 0);
graphics->executeCommands(std::move(renderCommand));
graphics->endRenderPass(); graphics->endRenderPass();
} }
@@ -50,19 +59,21 @@ void FluidRenderPass::publishOutputs() {
.format = Gfx::SE_FORMAT_D32_SFLOAT, .format = Gfx::SE_FORMAT_D32_SFLOAT,
.width = viewport->getWidth(), .width = viewport->getWidth(),
.height = viewport->getHeight(), .height = viewport->getHeight(),
.name = "FluidDepth",
.usage = Gfx::SE_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, .usage = Gfx::SE_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
.name = "FluidDepth",
}); });
} }
void FluidRenderPass::createRenderPass() { void FluidRenderPass::createRenderPass() {
densityBuffer = resources->requestBuffer("DENSITY"); densityBuffer = resources->requestBuffer("DENSITY");
colorAttachment = Gfx::RenderTargetAttachment(viewport->getOwner()->getBackBuffer()->getDefaultView(), Gfx::SE_IMAGE_LAYOUT_UNDEFINED, colorAttachment = Gfx::RenderTargetAttachment(
Gfx::SE_IMAGE_LAYOUT_PRESENT_SRC_KHR, Gfx::SE_ATTACHMENT_LOAD_OP_CLEAR, viewport, Gfx::SE_IMAGE_LAYOUT_UNDEFINED,
Gfx::SE_ATTACHMENT_STORE_OP_STORE); Gfx::SE_IMAGE_LAYOUT_PRESENT_SRC_KHR, Gfx::SE_ATTACHMENT_LOAD_OP_CLEAR,
depthAttachment = Gfx::RenderTargetAttachment(depthTexture->getDefaultView(), Gfx::SE_IMAGE_LAYOUT_UNDEFINED, Gfx::SE_ATTACHMENT_STORE_OP_STORE);
Gfx::SE_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, Gfx::SE_ATTACHMENT_LOAD_OP_CLEAR, depthAttachment = Gfx::RenderTargetAttachment(
Gfx::SE_ATTACHMENT_STORE_OP_DONT_CARE); depthTexture->getDefaultView(), Gfx::SE_IMAGE_LAYOUT_UNDEFINED,
Gfx::SE_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
Gfx::SE_ATTACHMENT_LOAD_OP_CLEAR, Gfx::SE_ATTACHMENT_STORE_OP_DONT_CARE);
depthAttachment.clear.depthStencil.depth = 0.0f; depthAttachment.clear.depthStencil.depth = 0.0f;
Gfx::RenderTargetLayout layout = Gfx::RenderTargetLayout{ Gfx::RenderTargetLayout layout = Gfx::RenderTargetLayout{
.colorAttachments = {colorAttachment}, .colorAttachments = {colorAttachment},
@@ -72,29 +83,38 @@ void FluidRenderPass::createRenderPass() {
{ {
.srcSubpass = ~0U, .srcSubpass = ~0U,
.dstSubpass = 0, .dstSubpass = 0,
.srcStage = Gfx::SE_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | Gfx::SE_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | .srcStage = Gfx::SE_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Gfx::SE_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
Gfx::SE_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, Gfx::SE_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
.dstStage = Gfx::SE_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | Gfx::SE_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | .dstStage = Gfx::SE_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Gfx::SE_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
Gfx::SE_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, Gfx::SE_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
.srcAccess = Gfx::SE_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | .srcAccess = Gfx::SE_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
.dstAccess = Gfx::SE_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | .dstAccess = Gfx::SE_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
}, },
{ {
.srcSubpass = 0, .srcSubpass = 0,
.dstSubpass = ~0U, .dstSubpass = ~0U,
.srcStage = Gfx::SE_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | Gfx::SE_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | .srcStage = Gfx::SE_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Gfx::SE_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
Gfx::SE_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, Gfx::SE_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
.dstStage = Gfx::SE_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | Gfx::SE_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | .dstStage = Gfx::SE_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Gfx::SE_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
Gfx::SE_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, Gfx::SE_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
.srcAccess = Gfx::SE_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | .srcAccess = Gfx::SE_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
.dstAccess = Gfx::SE_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | .dstAccess = Gfx::SE_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
}, },
}; };
renderPass = graphics->createRenderPass(layout, dependency, viewport->getRenderArea(), "FluidRenderPass"); renderPass = graphics->createRenderPass(
layout, dependency, viewport->getRenderArea(), "FluidRenderPass");
pipeline = graphics->createGraphicsPipeline(Gfx::LegacyPipelineCreateInfo{ pipeline = graphics->createGraphicsPipeline(Gfx::LegacyPipelineCreateInfo{
.vertexShader = vertexShader, .vertexShader = vertexShader,
.fragmentShader = fragmentShader, .fragmentShader = fragmentShader,
+7
View File
@@ -208,10 +208,17 @@ SimulationComputePass::SimulationComputePass(Seele::Gfx::PGraphics graphics) : R
} }
uint64_t bufferSize = gridSize * gridSize * gridSize * sizeof(float); uint64_t bufferSize = gridSize * gridSize * gridSize * sizeof(float);
Array<float> initialData(bufferSize / sizeof(float));
for(int i = 0; i < 20; ++i) {
int x = rand() % gridSize;
int y = rand() % gridSize;
initialData[x + y * gridSize] = 1.0f;
}
densityBuffer = graphics->createShaderBuffer(ShaderBufferCreateInfo{ densityBuffer = graphics->createShaderBuffer(ShaderBufferCreateInfo{
.sourceData = .sourceData =
{ {
.size = bufferSize, .size = bufferSize,
.data = (uint8*)initialData.data(),
}, },
.name = "DensityBuffer", .name = "DensityBuffer",
}); });
+1 -1
View File
@@ -25,7 +25,7 @@ private:
float viscosity = 0.001f; float viscosity = 0.001f;
float diffusion = 0.0001f; float diffusion = 0.0001f;
float dt = 0.1f; float dt = 0.1f;
constexpr static uint gridSize = 128; constexpr static uint gridSize = 64;
struct SetBounds struct SetBounds
{ {
Seele::Gfx::OPipelineLayout pipelineLayout; Seele::Gfx::OPipelineLayout pipelineLayout;
+2 -2
View File
@@ -6,13 +6,13 @@
using namespace Seele; using namespace Seele;
int main() { int main() {
OWindowManager windowManager = new WindowManager();
Gfx::OGraphics graphics = new Vulkan::Graphics(); Gfx::OGraphics graphics = new Vulkan::Graphics();
graphics->init(GraphicsInitializer()); graphics->init(GraphicsInitializer());
OWindowManager windowManager = new WindowManager();
auto window = windowManager->addWindow(graphics, WindowCreateInfo{ auto window = windowManager->addWindow(graphics, WindowCreateInfo{
.title = "Seele Fluid Simulation",
.width = 1280, .width = 1280,
.height = 720, .height = 720,
.title = "FluidSimulation",
}); });
auto view = new FluidSimulationView(graphics, window, auto view = new FluidSimulationView(graphics, window,
ViewportCreateInfo{ ViewportCreateInfo{
-26
View File
@@ -1,26 +0,0 @@
{
"dependencies": [
{
"name": "vulkan"
},
"vulkan-loader",
{
"name": "vulkan-memory-allocator"
},
"assimp",
"stb",
"entt",
"freetype",
"glfw3",
"glm",
"ktx",
"nlohmann-json",
"fmt",
"gtest",
"lunasvg",
"harfbuzz",
"shader-slang",
"metis",
"meshoptimizer"
]
}
Symlink
+1
View File
@@ -0,0 +1 @@
Seele/vcpkg.json