At least opens a window
This commit is contained in:
Vendored
+3
-2
@@ -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
@@ -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
@@ -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,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
@@ -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,
|
||||||
|
|||||||
@@ -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",
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -0,0 +1 @@
|
|||||||
|
Seele/vcpkg.json
|
||||||
Reference in New Issue
Block a user