diff options
| author | Dan Goodliffe <dan.goodliffe@octal.co.uk> | 2026-03-30 13:04:36 +0100 |
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2026-03-31 00:37:24 +0100 |
| commit | fb78c88576d9fed90ee69dfa35a9fbd3179ff486 (patch) | |
| tree | 3666e8c7a7ebf56b5d9e6919093c3a9c7766a750 /game/scenary/foliage.cpp | |
| parent | Use uint32_t for indexes in InstanceVertices (diff) | |
| download | ilt-fb78c88576d9fed90ee69dfa35a9fbd3179ff486.tar.bz2 ilt-fb78c88576d9fed90ee69dfa35a9fbd3179ff486.tar.xz ilt-fb78c88576d9fed90ee69dfa35a9fbd3179ff486.zip | |
Use a single buffer for the location/rotation data of all renderable objects
Removes the BufferedLocation and BufferedLocationUpdater mess.
Note: appears to break bogie rendering in asset factory test only, same
symptom as broken network render test? (out of date buffer data)
Diffstat (limited to 'game/scenary/foliage.cpp')
| -rw-r--r-- | game/scenary/foliage.cpp | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/game/scenary/foliage.cpp b/game/scenary/foliage.cpp index ff00af4..5902e09 100644 --- a/game/scenary/foliage.cpp +++ b/game/scenary/foliage.cpp @@ -25,8 +25,8 @@ std::weak_ptr<glVertexArray> Foliage::commonInstanceVAO, Foliage::commonInstance std::any Foliage::createAt(const Location & position) const { - return std::make_shared<InstanceVertices<LocationVertex>::InstanceProxy>( - instances.acquire(position.getRotationTransform(), position.rot.y, position.pos)); + return std::make_shared<InstanceVertices<InstanceVertex>::InstanceProxy>( + instances.acquire(locationData->acquire(position))); } bool @@ -42,12 +42,11 @@ Foliage::postLoad() glDebugScope _ {0}; if (!(instanceVAO = commonInstanceVAO.lock())) { commonInstanceVAO = instanceVAO = std::make_shared<glVertexArray>(); - bodyMesh->configureVAO(*instanceVAO, 0) - .addAttribs<LocationVertex, &LocationVertex::rotation, &LocationVertex::position>(1); + bodyMesh->configureVAO(*instanceVAO, 0).addAttribs<InstanceVertex, &InstanceVertex::location>(1); } if (!(instancePointVAO = commonInstancePointVAO.lock())) { commonInstancePointVAO = instancePointVAO = std::make_shared<glVertexArray>(); - instancePointVAO->configure().addAttribs<LocationVertex, &LocationVertex::position, &LocationVertex::yaw>(0); + instancePointVAO->configure().addAttribs<InstanceVertex, &InstanceVertex::location>(0); } const auto & size = bodyMesh->getDimensions().size; billboardSize = billboardTextureSizeForObject(size); @@ -82,14 +81,14 @@ Foliage::preFrame(const Frustum & frustum, const Frustum & lighting) if (instances.size() > 0) { const auto & dims = bodyMesh->getDimensions(); instancePartitions = instances.partition( - [&frustum, &dims](const auto & location) { - return frustum.contains(location.position + dims.centre, dims.size); + [&frustum, &dims](const auto & instance) { + return frustum.contains(instance.location->position.xyz() + dims.centre, dims.size); }, - [&frustum, this](const auto & location) { - return distance(frustum.getPosition(), location.position) < useMeshClipDist; + [&frustum, this](const auto & instance) { + return distance(frustum.getPosition(), instance.location->position.xyz()) < useMeshClipDist; }, - [&lighting, &dims](const auto & location) { - return lighting.contains(location.position + dims.centre, dims.size); + [&lighting, &dims](const auto & instance) { + return lighting.contains(instance.location->position.xyz() + dims.centre, dims.size); }); // In view frustum / Outside view frustum / // Close to view / Far from view / Casts shadow into view / No shadow in view / |
