Basic terrain

This commit is contained in:
Dynamitos
2024-09-26 17:09:53 +02:00
parent 81f29d1b3f
commit 1c7a3db939
8 changed files with 53 additions and 57 deletions
+1 -1
+1 -1
View File
@@ -46,7 +46,7 @@ void taskMain(
bounding.minCorner = float3(tile.location.x, tile.height, tile.location.y) * tile.extent; bounding.minCorner = float3(tile.location.x, tile.height, tile.location.y) * tile.extent;
bounding.maxCorner = float3(tile.location.x + 1, tile.height, tile.location.y + 1) * tile.extent; bounding.maxCorner = float3(tile.location.x + 1, tile.height, tile.location.y + 1) * tile.extent;
float3 median = (bounding.minCorner + bounding.maxCorner) / 2; float3 median = (bounding.minCorner + bounding.maxCorner) / 2;
float distance = distance(median, pViewParams.cameraPos_WS.xyz); float distance = distance(median, pViewParams.c.cameraPos_WS.xyz);
float tileDistance = distance / tile.extent; float tileDistance = distance / tile.extent;
uint numMeshes = groupID.y + 1; uint numMeshes = groupID.y + 1;
+3 -3
View File
@@ -111,12 +111,12 @@ void TextureLoader::import(TextureImportArgs args, PTextureAsset textureAsset) {
ktxBasisParams basisParams = { ktxBasisParams basisParams = {
.structSize = sizeof(ktxBasisParams), .structSize = sizeof(ktxBasisParams),
.uastc = true, .uastc = true,
.threadCount = 1, .threadCount = 14,
.uastcFlags = KTX_PACK_UASTC_LEVEL_FASTER, .uastcFlags = KTX_PACK_UASTC_LEVEL_SLOWER,
.uastcRDO = true, .uastcRDO = true,
}; };
KTX_ASSERT(ktxTexture2_CompressBasisEx(kTexture, &basisParams)); KTX_ASSERT(ktxTexture2_CompressBasisEx(kTexture, &basisParams));
KTX_ASSERT(ktxTexture2_DeflateZstd(kTexture, 2)); KTX_ASSERT(ktxTexture2_DeflateZstd(kTexture, 20));
char writer[100]; char writer[100];
snprintf(writer, sizeof(writer), "%s version %s", "SeeleEngine", "0.0.1"); snprintf(writer, sizeof(writer), "%s version %s", "SeeleEngine", "0.0.1");
+23 -20
View File
@@ -55,10 +55,10 @@ int main() {
// AssetImporter::importFont(FontImportArgs{ // AssetImporter::importFont(FontImportArgs{
// .filePath = "./fonts/Calibri.ttf", // .filePath = "./fonts/Calibri.ttf",
// }); // });
//AssetImporter::importMesh(MeshImportArgs{ AssetImporter::importMesh(MeshImportArgs{
// .filePath = sourcePath / "import/models/cube.fbx", .filePath = sourcePath / "import/models/cube.fbx",
//}); });
//AssetImporter::importMesh(MeshImportArgs{ // AssetImporter::importMesh(MeshImportArgs{
// .filePath = sourcePath / "import/models/culling.fbx", // .filePath = sourcePath / "import/models/culling.fbx",
//}); //});
AssetImporter::importTexture(TextureImportArgs{ AssetImporter::importTexture(TextureImportArgs{
@@ -69,22 +69,25 @@ int main() {
.filePath = sourcePath / "import/models/ship.fbx", .filePath = sourcePath / "import/models/ship.fbx",
.importPath = "ship", .importPath = "ship",
}); });
//AssetImporter::importMesh(MeshImportArgs{ AssetImporter::importTexture(TextureImportArgs{
// .filePath = sourcePath / "import/models/after-the-rain-vr-sound/source/Whitechapel.glb", .filePath = sourcePath / "import/textures/azeroth.png",
// .importPath = "Whitechapel", });
//}); // AssetImporter::importMesh(MeshImportArgs{
//AssetImporter::importMesh(MeshImportArgs{ // .filePath = sourcePath / "import/models/after-the-rain-vr-sound/source/Whitechapel.glb",
// .filePath = sourcePath / "import/models/city-suburbs/source/city-suburbs.obj", // .importPath = "Whitechapel",
// .importPath = "suburbs", // });
//}); // AssetImporter::importMesh(MeshImportArgs{
//AssetImporter::importMesh(MeshImportArgs{ // .filePath = sourcePath / "import/models/city-suburbs/source/city-suburbs.obj",
// .filePath = sourcePath / "import/models/minecraft-medieval-city.fbx", // .importPath = "suburbs",
// .importPath = "minecraft", // });
//}); // AssetImporter::importMesh(MeshImportArgs{
//AssetImporter::importMesh(MeshImportArgs{ // .filePath = sourcePath / "import/models/minecraft-medieval-city.fbx",
// .filePath = sourcePath / "import/models/Volvo/Volvo.fbx", // .importPath = "minecraft",
// .importPath = "Volvo", // });
//}); // AssetImporter::importMesh(MeshImportArgs{
// .filePath = sourcePath / "import/models/Volvo/Volvo.fbx",
// .importPath = "Volvo",
// });
getThreadPool().waitIdle(); getThreadPool().waitIdle();
vd->commitMeshes(); vd->commitMeshes();
WindowCreateInfo mainWindowInfo = { WindowCreateInfo mainWindowInfo = {
@@ -87,7 +87,7 @@ void TerrainRenderer::beginFrame() {
set = layout->allocateDescriptorSet(); set = layout->allocateDescriptorSet();
set->updateBuffer(0, tilesBuffer); set->updateBuffer(0, tilesBuffer);
set->updateTexture(1, 0, Gfx::PTexture2D(displacementMap)); set->updateTexture(1, Gfx::PTexture2D(displacementMap));
set->updateSampler(2, sampler); set->updateSampler(2, sampler);
set->writeChanges(); set->writeChanges();
} }
+1 -1
View File
@@ -134,7 +134,7 @@ void StaticMeshVertexData::init(Gfx::PGraphics _graphics) {
descriptorLayout->addDescriptorBinding(Gfx::DescriptorBinding{.binding = 2, .descriptorType = Gfx::SE_DESCRIPTOR_TYPE_STORAGE_BUFFER}); descriptorLayout->addDescriptorBinding(Gfx::DescriptorBinding{.binding = 2, .descriptorType = Gfx::SE_DESCRIPTOR_TYPE_STORAGE_BUFFER});
descriptorLayout->addDescriptorBinding(Gfx::DescriptorBinding{.binding = 3, .descriptorType = Gfx::SE_DESCRIPTOR_TYPE_STORAGE_BUFFER}); descriptorLayout->addDescriptorBinding(Gfx::DescriptorBinding{.binding = 3, .descriptorType = Gfx::SE_DESCRIPTOR_TYPE_STORAGE_BUFFER});
descriptorLayout->addDescriptorBinding(Gfx::DescriptorBinding{.binding = 4, .descriptorType = Gfx::SE_DESCRIPTOR_TYPE_STORAGE_BUFFER}); descriptorLayout->addDescriptorBinding(Gfx::DescriptorBinding{.binding = 4, .descriptorType = Gfx::SE_DESCRIPTOR_TYPE_STORAGE_BUFFER});
for(uint i = 0; i < MAX_TEXCOORDS; ++i) for(uint32 i = 0; i < MAX_TEXCOORDS; ++i)
{ {
descriptorLayout->addDescriptorBinding(Gfx::DescriptorBinding{ descriptorLayout->addDescriptorBinding(Gfx::DescriptorBinding{
.binding = 5 + i, .binding = 5 + i,
+22 -29
View File
@@ -248,27 +248,25 @@ void RenderCommand::bindPipeline(Gfx::PRayTracingPipeline gfxPipeline) {
boundResources.add(PBufferAllocation(rtPipeline->miss)); boundResources.add(PBufferAllocation(rtPipeline->miss));
} }
void RenderCommand::bindDescriptor(Gfx::PDescriptorSet descriptorSet, Array<uint32> dynamicOffsets) { void RenderCommand::bindDescriptor(Gfx::PDescriptorSet descriptorSet) {
assert(threadId == std::this_thread::get_id()); assert(threadId == std::this_thread::get_id());
auto descriptor = descriptorSet.cast<DescriptorSet>(); auto descriptor = descriptorSet.cast<DescriptorSet>();
assert(descriptor->writeDescriptors.size() == 0); assert(descriptor->writeDescriptors.size() == 0);
descriptor->bind(); descriptor->bind();
boundResources.add(descriptor); boundResources.add(descriptor);
for (auto binding : descriptor->boundResources) { for (auto binding : descriptor->boundResources) {
for (auto res : binding) { binding->bind();
res->bind(); boundResources.add(binding);
boundResources.add(res);
}
} }
VkDescriptorSet setHandle = descriptor->getHandle(); VkDescriptorSet setHandle = descriptor->getHandle();
Gfx::PPipelineLayout layout = pipeline != nullptr ? pipeline->getPipelineLayout() : rtPipeline->getPipelineLayout(); Gfx::PPipelineLayout layout = pipeline != nullptr ? pipeline->getPipelineLayout() : rtPipeline->getPipelineLayout();
vkCmdBindDescriptorSets(handle, pipeline != nullptr ? VK_PIPELINE_BIND_POINT_GRAPHICS : VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, vkCmdBindDescriptorSets(handle, pipeline != nullptr ? VK_PIPELINE_BIND_POINT_GRAPHICS : VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
pipeline->getLayout(), layout->findParameter(descriptorSet->getName()), 1, &setHandle, dynamicOffsets.size(), pipeline->getLayout(), layout->findParameter(descriptorSet->getName()), 1, &setHandle, 0,
dynamicOffsets.data()); nullptr);
} }
void RenderCommand::bindDescriptor(const Array<Gfx::PDescriptorSet>& descriptorSets, Array<uint32> dynamicOffsets) { void RenderCommand::bindDescriptor(const Array<Gfx::PDescriptorSet>& descriptorSets) {
assert(threadId == std::this_thread::get_id()); assert(threadId == std::this_thread::get_id());
VkDescriptorSet* sets = new VkDescriptorSet[descriptorSets.size()]; VkDescriptorSet* sets = new VkDescriptorSet[descriptorSets.size()];
std::memset(sets, 0, sizeof(VkDescriptorSet) * descriptorSets.size()); std::memset(sets, 0, sizeof(VkDescriptorSet) * descriptorSets.size());
@@ -280,19 +278,17 @@ void RenderCommand::bindDescriptor(const Array<Gfx::PDescriptorSet>& descriptorS
boundResources.add(descriptorSet); boundResources.add(descriptorSet);
for (auto binding : descriptorSet->boundResources) { for (auto binding : descriptorSet->boundResources) {
for (auto res : binding) { // partially bound descriptors can include nulls
// partially bound descriptors can include nulls if (binding != nullptr) {
if (res != nullptr) { binding->bind();
res->bind(); boundResources.add(binding);
boundResources.add(res);
}
} }
} }
sets[layout->findParameter(descriptorSet->getName())] = descriptorSet->getHandle(); sets[layout->findParameter(descriptorSet->getName())] = descriptorSet->getHandle();
} }
vkCmdBindDescriptorSets(handle, pipeline != nullptr ? VK_PIPELINE_BIND_POINT_GRAPHICS : VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, vkCmdBindDescriptorSets(handle, pipeline != nullptr ? VK_PIPELINE_BIND_POINT_GRAPHICS : VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR,
pipeline != nullptr ? pipeline->getLayout() : rtPipeline->getLayout(), 0, (uint32)descriptorSets.size(), sets, pipeline != nullptr ? pipeline->getLayout() : rtPipeline->getLayout(), 0, (uint32)descriptorSets.size(), sets,
dynamicOffsets.size(), dynamicOffsets.data()); 0, nullptr);
delete[] sets; delete[] sets;
} }
@@ -411,27 +407,26 @@ void ComputeCommand::bindPipeline(Gfx::PComputePipeline computePipeline) {
pipeline->bind(handle); pipeline->bind(handle);
} }
void ComputeCommand::bindDescriptor(Gfx::PDescriptorSet descriptorSet, Array<uint32> dynamicOffsets) { void ComputeCommand::bindDescriptor(Gfx::PDescriptorSet descriptorSet) {
assert(threadId == std::this_thread::get_id()); assert(threadId == std::this_thread::get_id());
auto descriptor = descriptorSet.cast<DescriptorSet>(); auto descriptor = descriptorSet.cast<DescriptorSet>();
assert(descriptor->writeDescriptors.size() == 0); assert(descriptor->writeDescriptors.size() == 0);
descriptor->bind(); descriptor->bind();
boundResources.add(descriptor.getHandle()); boundResources.add(descriptor.getHandle());
for (const auto& binding : descriptor->boundResources) { for (auto& binding : descriptor->boundResources) {
for (auto res : binding) { binding->bind();
res->bind(); boundResources.add(binding);
boundResources.add(res);
}
} }
VkDescriptorSet setHandle = descriptor->getHandle(); VkDescriptorSet setHandle = descriptor->getHandle();
vkCmdBindDescriptorSets(handle, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline->getLayout(), vkCmdBindDescriptorSets(handle, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline->getLayout(),
pipeline->getPipelineLayout()->findParameter(descriptorSet->getName()), 1, &setHandle, dynamicOffsets.size(), pipeline->getPipelineLayout()->findParameter(descriptorSet->getName()), 1, &setHandle,0,
dynamicOffsets.data()); nullptr);
} }
void ComputeCommand::bindDescriptor(const Array<Gfx::PDescriptorSet>& descriptorSets, Array<uint32> dynamicOffsets) { void ComputeCommand::bindDescriptor(const Array<Gfx::PDescriptorSet>& descriptorSets) {
assert(threadId == std::this_thread::get_id()); assert(threadId == std::this_thread::get_id());
VkDescriptorSet* sets = new VkDescriptorSet[descriptorSets.size()]; VkDescriptorSet* sets = new VkDescriptorSet[descriptorSets.size()];
for (uint32 i = 0; i < descriptorSets.size(); ++i) { for (uint32 i = 0; i < descriptorSets.size(); ++i) {
@@ -443,15 +438,13 @@ void ComputeCommand::bindDescriptor(const Array<Gfx::PDescriptorSet>& descriptor
// std::cout << "Binding descriptor " << descriptorSet->getHandle() << " to cmd " << handle << std::endl; // std::cout << "Binding descriptor " << descriptorSet->getHandle() << " to cmd " << handle << std::endl;
for (auto binding : descriptorSet->boundResources) { for (auto binding : descriptorSet->boundResources) {
for (auto res : binding) { binding->bind();
res->bind(); boundResources.add(binding);
boundResources.add(res);
}
} }
sets[pipeline->getPipelineLayout()->findParameter(descriptorSet->getName())] = descriptorSet->getHandle(); sets[pipeline->getPipelineLayout()->findParameter(descriptorSet->getName())] = descriptorSet->getHandle();
} }
vkCmdBindDescriptorSets(handle, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline->getLayout(), 0, (uint32)descriptorSets.size(), sets, vkCmdBindDescriptorSets(handle, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline->getLayout(), 0, (uint32)descriptorSets.size(), sets,
dynamicOffsets.size(), dynamicOffsets.data()); 0, nullptr);
delete[] sets; delete[] sets;
} }
+1 -1
View File
@@ -340,7 +340,7 @@ void DescriptorSet::updateSamplerArray(uint32_t binding, Array<Gfx::PSampler> sa
}); });
VkDescriptorType descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; VkDescriptorType descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE;
boundResources[binding][arrayElement] = vulkanSampler->getHandle(); boundResources[binding] = vulkanSampler->getHandle();
writeDescriptors.add(VkWriteDescriptorSet{ writeDescriptors.add(VkWriteDescriptorSet{
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
.pNext = nullptr, .pNext = nullptr,