diff --git a/Editor/ObjectWindow.cpp b/Editor/ObjectWindow.cpp index d5971c600..1edca7586 100644 --- a/Editor/ObjectWindow.cpp +++ b/Editor/ObjectWindow.cpp @@ -784,9 +784,9 @@ void ObjectWindow::Create(EditorComponent* _editor) Ray ray_local = Ray(rayOrigin_local, rayDirection_local); hit = mesh->bvh.IntersectsFirst(ray_local, [&](uint32_t index) { - const uint32_t userdata = mesh->bvh_leaf_aabbs[index].userdata; - const uint32_t triangleIndex = userdata & 0xFFFFFF; - const uint32_t subsetIndex = userdata >> 24u; + const AABB& leaf = mesh->bvh_leaf_aabbs[index]; + const uint32_t triangleIndex = leaf.layerMask; + const uint32_t subsetIndex = leaf.userdata; const MeshComponent::MeshSubset& subset = mesh->subsets[subsetIndex]; if (subset.indexCount == 0) return false; diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index afd9046eb..2e0a252bc 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -2830,8 +2830,6 @@ void RenderMeshes( device->BindDynamicConstantBuffer(cb, CB_GETBINDSLOT(ForwardEntityMaskCB), cmd); } - bool index_buffer_set_for_mesh = false; - uint32_t first_subset = 0; uint32_t last_subset = 0; mesh.GetLODSubsetRange(instancedBatch.lod, first_subset, last_subset); @@ -2928,8 +2926,6 @@ void RenderMeshes( device->BindShadingRate(material.shadingRate, cmd); } - assert(subsetIndex < 256u); // subsets must be represented as 8-bit - ObjectPushConstants push; push.geometryIndex = mesh.geometryOffset + subsetIndex; push.materialIndex = subset.materialIndex; diff --git a/WickedEngine/wiScene.cpp b/WickedEngine/wiScene.cpp index f7941c7d9..85cfd2bc6 100644 --- a/WickedEngine/wiScene.cpp +++ b/WickedEngine/wiScene.cpp @@ -5207,9 +5207,9 @@ namespace wi::scene Ray ray_local = Ray(rayOrigin_local, rayDirection_local); mesh->bvh.Intersects(ray_local, 0, [&](uint32_t index) { - const uint32_t userdata = mesh->bvh_leaf_aabbs[index].userdata; - const uint32_t triangleIndex = userdata & 0xFFFFFF; - const uint32_t subsetIndex = userdata >> 24u; + const AABB& leaf = mesh->bvh_leaf_aabbs[index]; + const uint32_t triangleIndex = leaf.layerMask; + const uint32_t subsetIndex = leaf.userdata; const MeshComponent::MeshSubset& subset = mesh->subsets[subsetIndex]; if (subset.indexCount == 0) return; @@ -5370,9 +5370,9 @@ namespace wi::scene Ray ray_local = Ray(rayOrigin_local, rayDirection_local); mesh->bvh.IntersectsFirst(ray_local, [&](uint32_t index) { - const uint32_t userdata = mesh->bvh_leaf_aabbs[index].userdata; - const uint32_t triangleIndex = userdata & 0xFFFFFF; - const uint32_t subsetIndex = userdata >> 24u; + const AABB& leaf = mesh->bvh_leaf_aabbs[index]; + const uint32_t triangleIndex = leaf.layerMask; + const uint32_t subsetIndex = leaf.userdata; const MeshComponent::MeshSubset& subset = mesh->subsets[subsetIndex]; if (subset.indexCount == 0) return false; @@ -5646,9 +5646,9 @@ namespace wi::scene Sphere sphere_local = Sphere(center_local, radius_local); mesh->bvh.Intersects(sphere_local, 0, [&](uint32_t index) { - const uint32_t userdata = mesh->bvh_leaf_aabbs[index].userdata; - const uint32_t triangleIndex = userdata & 0xFFFFFF; - const uint32_t subsetIndex = userdata >> 24u; + const AABB& leaf = mesh->bvh_leaf_aabbs[index]; + const uint32_t triangleIndex = leaf.layerMask; + const uint32_t subsetIndex = leaf.userdata; const MeshComponent::MeshSubset& subset = mesh->subsets[subsetIndex]; if (subset.indexCount == 0) return; @@ -6042,9 +6042,9 @@ namespace wi::scene AABB capsule_local_aabb = Capsule(base_local, tip_local, radius_local).getAABB(); mesh->bvh.Intersects(capsule_local_aabb, 0, [&](uint32_t index){ - const uint32_t userdata = mesh->bvh_leaf_aabbs[index].userdata; - const uint32_t triangleIndex = userdata & 0xFFFFFF; - const uint32_t subsetIndex = userdata >> 24u; + const AABB& leaf = mesh->bvh_leaf_aabbs[index]; + const uint32_t triangleIndex = leaf.layerMask; + const uint32_t subsetIndex = leaf.userdata; const MeshComponent::MeshSubset& subset = mesh->subsets[subsetIndex]; if (subset.indexCount == 0) return; diff --git a/WickedEngine/wiScene_Components.cpp b/WickedEngine/wiScene_Components.cpp index 5049e1471..e2046a6a5 100644 --- a/WickedEngine/wiScene_Components.cpp +++ b/WickedEngine/wiScene_Components.cpp @@ -1338,7 +1338,6 @@ namespace wi::scene GetLODSubsetRange(0, first_subset, last_subset); for (uint32_t subsetIndex = first_subset; subsetIndex < last_subset; ++subsetIndex) { - assert(subsetIndex <= 0xFF); // must fit into 8 bits userdata packing const MeshComponent::MeshSubset& subset = subsets[subsetIndex]; if (subset.indexCount == 0) continue; @@ -1346,7 +1345,6 @@ namespace wi::scene const uint32_t triangleCount = subset.indexCount / 3; for (uint32_t triangleIndex = 0; triangleIndex < triangleCount; ++triangleIndex) { - assert(triangleIndex <= 0xFFFFFF); // must fit into 24 bits userdata packing const uint32_t i0 = indices[indexOffset + triangleIndex * 3 + 0]; const uint32_t i1 = indices[indexOffset + triangleIndex * 3 + 1]; const uint32_t i2 = indices[indexOffset + triangleIndex * 3 + 2]; @@ -1354,7 +1352,8 @@ namespace wi::scene const XMFLOAT3& p1 = vertex_positions[i1]; const XMFLOAT3& p2 = vertex_positions[i2]; AABB aabb = wi::primitive::AABB(wi::math::Min(p0, wi::math::Min(p1, p2)), wi::math::Max(p0, wi::math::Max(p1, p2))); - aabb.userdata = (triangleIndex & 0xFFFFFF) | ((subsetIndex & 0xFF) << 24u); + aabb.layerMask = triangleIndex; + aabb.userdata = subsetIndex; bvh_leaf_aabbs.push_back(aabb); } } diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index d660e5de4..37c198ee0 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wi::version // minor features, major updates, breaking compatibility changes const int minor = 71; // minor bug fixes, alterations, refactors, updates - const int revision = 501; + const int revision = 502; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision); @@ -50,7 +50,7 @@ All contributors: https://github.com/turanszkij/WickedEngine/graphs/contributors Patreon supporters --------------------------- -Nemerle, James Webb, Quifeng Jin, TheGameCreators, Joseph Goldin, Yuri, Sergey K, Yukawa Kanta, Dragon Josh, John, LurkingNinja, Bernardo Del Castillo, Invictus, Scott Hunt, Yazan Altaki, Tuan NV, Robert MacGregor, cybernescence, Alexander Dahlin, blueapples, Delhills, NI NI, Sherief, ktopoet, Justin Macklin, Cédric Fabre, TogetherTeam, Bartosz Boczula, Arne Koenig, Ivan Trajchev, nathants, Fahd Ahmed, Gabriel Jadderson, SAS_Controller, Dominik Madarász, Segfault, Mike amanfo, Dennis Brakhane, rookie, Peter Moore, therealjtgill, Nicolas Embleton, Desuuc, radino1977, Anthony Curtis, manni heck, Matthias Hölzl, Phyffer, Lucas Pinheiro, Tapkaara, gpman, Anthony Python, Gnowos, Klaus, slaughternaut, Paul Brain, Connor Greaves, Alexandr, Lee Bamber, MCAlarm MC2, Titoutan, Willow, Aldo, lokimx, K. Osterman, Nomad, ykl, Alex Krokos, Timmy, Avaflow, mat, Hexegonel Samael Michael, Joe Spataro, soru, GeniokV, Mammoth, Ignacio, datae, Jason Rice, MarsBEKET, Tim +Nemerle, James Webb, Quifeng Jin, TheGameCreators, Joseph Goldin, Yuri, Sergey K, Yukawa Kanta, Dragon Josh, John, LurkingNinja, Bernardo Del Castillo, Invictus, Scott Hunt, Yazan Altaki, Tuan NV, Robert MacGregor, cybernescence, Alexander Dahlin, blueapples, Delhills, NI NI, Sherief, ktopoet, Justin Macklin, Cédric Fabre, TogetherTeam, Bartosz Boczula, Arne Koenig, Ivan Trajchev, nathants, Fahd Ahmed, Gabriel Jadderson, SAS_Controller, Dominik Madarász, Segfault, Mike amanfo, Dennis Brakhane, rookie, Peter Moore, therealjtgill, Nicolas Embleton, Desuuc, radino1977, Anthony Curtis, manni heck, Matthias Hölzl, Phyffer, Lucas Pinheiro, Tapkaara, gpman, Anthony Python, Gnowos, Klaus, slaughternaut, Paul Brain, Connor Greaves, Alexandr, Lee Bamber, MCAlarm MC2, Titoutan, Willow, Aldo, lokimx, K. Osterman, Nomad, ykl, Alex Krokos, Timmy, Avaflow, mat, Hexegonel Samael Michael, Joe Spataro, soru, GeniokV, Mammoth, Ignacio, datae, Jason Rice, MarsBEKET, Tim, Twisty )"; return credits;