removed 256 subset limitation
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user