removed 256 subset limitation

This commit is contained in:
Turánszki János
2024-07-06 06:13:45 +02:00
parent 1a2bac999f
commit 431e823234
5 changed files with 19 additions and 24 deletions
+3 -3
View File
@@ -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;
-4
View File
@@ -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;
+12 -12
View File
@@ -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;
+2 -3
View File
@@ -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);
}
}
+2 -2
View File
@@ -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;