From 161a1d3efdfea4b814b7ac41d8356ccdf008cd1b Mon Sep 17 00:00:00 2001 From: Sergey Kosarevsky Date: Sun, 2 Feb 2025 18:20:57 -0800 Subject: [PATCH] Updated code to match the book text --- Chapter05/07_MeshRenderer/src/main.cpp | 4 ++-- Chapter08/VKMesh08.h | 4 ++-- Chapter11/01_CullingCPU/src/main.cpp | 7 ++++--- Chapter11/02_CullingGPU/src/FrustumCulling.comp | 2 +- Chapter11/02_CullingGPU/src/main.cpp | 7 ++++--- Chapter11/06_FinalDemo/src/main.cpp | 11 ++++++----- Chapter11/VKMesh11.h | 2 +- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/Chapter05/07_MeshRenderer/src/main.cpp b/Chapter05/07_MeshRenderer/src/main.cpp index eefd8db..d962d94 100644 --- a/Chapter05/07_MeshRenderer/src/main.cpp +++ b/Chapter05/07_MeshRenderer/src/main.cpp @@ -169,7 +169,7 @@ struct DrawIndexedIndirectCommand { uint32_t count; uint32_t instanceCount; uint32_t firstIndex; - uint32_t baseVertex; + int32_t baseVertex; uint32_t baseInstance; }; @@ -213,7 +213,7 @@ class VKMesh final .count = meshData.meshes[i].getLODIndicesCount(0), .instanceCount = 1, .firstIndex = meshData.meshes[i].indexOffset, - .baseVertex = meshData.meshes[i].vertexOffset, + .baseVertex = (int32_t)meshData.meshes[i].vertexOffset, .baseInstance = 0, }; } diff --git a/Chapter08/VKMesh08.h b/Chapter08/VKMesh08.h index 07a57d0..5e4db89 100644 --- a/Chapter08/VKMesh08.h +++ b/Chapter08/VKMesh08.h @@ -8,7 +8,7 @@ struct DrawIndexedIndirectCommand { uint32_t count; uint32_t instanceCount; uint32_t firstIndex; - uint32_t baseVertex; + int32_t baseVertex; uint32_t baseInstance; }; @@ -412,7 +412,7 @@ class VKMesh final .count = mesh.getLODIndicesCount(lod), .instanceCount = 1, .firstIndex = mesh.indexOffset, // + mesh.lodOffset[lod], - .baseVertex = mesh.vertexOffset, + .baseVertex = (int32_t)mesh.vertexOffset, .baseInstance = ddIndex++, }; *dd++ = { diff --git a/Chapter11/01_CullingCPU/src/main.cpp b/Chapter11/01_CullingCPU/src/main.cpp index 3d4a99f..1ca929f 100644 --- a/Chapter11/01_CullingCPU/src/main.cpp +++ b/Chapter11/01_CullingCPU/src/main.cpp @@ -83,9 +83,10 @@ int main() { DrawIndexedIndirectCommand* cmd = mesh.getDrawIndexedIndirectCommandPtr(); for (auto& p : scene.meshForNode) { - const BoundingBox box = meshData.boxes[p.second].getTransformed(scene.globalTransform[p.first]); - cmd->instanceCount = isBoxInFrustum(frustumPlanes, frustumCorners, box) ? 1 : 0; - numVisibleMeshes += (cmd++)->instanceCount; + const BoundingBox box = meshData.boxes[p.second].getTransformed(scene.globalTransform[p.first]); + const uint32_t count = isBoxInFrustum(frustumPlanes, frustumCorners, box) ? 1 : 0; + (cmd++)->instanceCount = count; + numVisibleMeshes += count; } ctx->flushMappedMemory(mesh.indirectBuffer_.bufferIndirect_, 0, mesh.numMeshes_ * sizeof(DrawIndexedIndirectCommand)); } diff --git a/Chapter11/02_CullingGPU/src/FrustumCulling.comp b/Chapter11/02_CullingGPU/src/FrustumCulling.comp index 70648b8..c6beb6e 100644 --- a/Chapter11/02_CullingGPU/src/FrustumCulling.comp +++ b/Chapter11/02_CullingGPU/src/FrustumCulling.comp @@ -9,7 +9,7 @@ struct DrawIndexedIndirectCommand { uint count; uint instanceCount; uint firstIndex; - uint baseVertex; + int baseVertex; uint baseInstance; }; diff --git a/Chapter11/02_CullingGPU/src/main.cpp b/Chapter11/02_CullingGPU/src/main.cpp index 9261922..be06990 100644 --- a/Chapter11/02_CullingGPU/src/main.cpp +++ b/Chapter11/02_CullingGPU/src/main.cpp @@ -164,9 +164,10 @@ int main() DrawIndexedIndirectCommand* cmd = mesh.getDrawIndexedIndirectCommandPtr(); for (auto& p : scene.meshForNode) { - const BoundingBox box = reorderedBoxes[p.first]; - cmd->instanceCount = isBoxInFrustum(cullingData.frustumPlanes, cullingData.frustumCorners, box) ? 1 : 0; - numVisibleMeshes += (cmd++)->instanceCount; + const BoundingBox box = reorderedBoxes[p.first]; + const uint32_t count = isBoxInFrustum(cullingData.frustumPlanes, cullingData.frustumCorners, box) ? 1 : 0; + (cmd++)->instanceCount = count; + numVisibleMeshes += count; } ctx->flushMappedMemory(mesh.indirectBuffer_.bufferIndirect_, 0, mesh.numMeshes_ * sizeof(DrawIndexedIndirectCommand)); } else if (cullingMode == CullingMode_GPU) { diff --git a/Chapter11/06_FinalDemo/src/main.cpp b/Chapter11/06_FinalDemo/src/main.cpp index 77855a2..55e11ab 100644 --- a/Chapter11/06_FinalDemo/src/main.cpp +++ b/Chapter11/06_FinalDemo/src/main.cpp @@ -160,8 +160,8 @@ int main() .debugName = "texLuminance", }) }; - for (uint32_t l = 1; l != LVK_ARRAY_NUM_ELEMENTS(texLumViews); l++) { - texLumViews[l] = ctx->createTextureView(texLumViews[0], { .mipLevel = l, .swizzle = swizzle }); + for (uint32_t v = 1; v != LVK_ARRAY_NUM_ELEMENTS(texLumViews); v++) { + texLumViews[v] = ctx->createTextureView(texLumViews[0], { .mipLevel = v, .swizzle = swizzle }); } const uint16_t brightPixel = glm::packHalf1x16(50.0f); @@ -579,9 +579,10 @@ int main() DrawIndexedIndirectCommand* cmd = meshesOpaque.getDrawIndexedIndirectCommandPtr(); for (size_t i = 0; i != meshesOpaque.drawCommands_.size(); i++) { - const BoundingBox box = reorderedBoxes[mesh.drawData_[cmd->baseInstance].transformId]; - cmd->instanceCount = isBoxInFrustum(cullingData.frustumPlanes, cullingData.frustumCorners, box) ? 1 : 0; - numVisibleMeshes += (cmd++)->instanceCount; + const BoundingBox box = reorderedBoxes[mesh.drawData_[cmd->baseInstance].transformId]; + const uint32_t count = isBoxInFrustum(cullingData.frustumPlanes, cullingData.frustumCorners, box) ? 1 : 0; + (cmd++)->instanceCount = count; + numVisibleMeshes += count; } ctx->flushMappedMemory(meshesOpaque.bufferIndirect_, 0, meshesOpaque.drawCommands_.size() * sizeof(DrawIndexedIndirectCommand)); } else if (cullingMode == CullingMode_GPU) { diff --git a/Chapter11/VKMesh11.h b/Chapter11/VKMesh11.h index af159d5..daf3b06 100644 --- a/Chapter11/VKMesh11.h +++ b/Chapter11/VKMesh11.h @@ -170,7 +170,7 @@ class VKMesh11 .count = mesh.getLODIndicesCount(lod), .instanceCount = 1, .firstIndex = mesh.indexOffset, // + mesh.lodOffset[lod], - .baseVertex = mesh.vertexOffset, + .baseVertex = (int32_t)mesh.vertexOffset, .baseInstance = ddIndex++, }; *dd++ = {