summaryrefslogtreecommitdiff
path: root/indra/newview/gltf
diff options
context:
space:
mode:
authorBrad Linden <46733234+brad-linden@users.noreply.github.com>2024-06-12 14:33:01 -0700
committerGitHub <noreply@github.com>2024-06-12 14:33:01 -0700
commit071e464155a670a9a7e836ec52049fc80b507995 (patch)
treee129794d3f4c29c92d6515cbdbe6898ee8aa558b /indra/newview/gltf
parentf0de2ba6340e0d540aa70ac0086defde52cf60af (diff)
parent8444cd9562a6a7b755fcb075864e205122354192 (diff)
Merge pull request #1723 from secondlife/brad/maint-a-merge-to-gltf-dev
maint a merge to gltf dev
Diffstat (limited to 'indra/newview/gltf')
-rw-r--r--indra/newview/gltf/accessor.cpp5
-rw-r--r--indra/newview/gltf/animation.cpp13
-rw-r--r--indra/newview/gltf/buffer_util.h2
-rw-r--r--indra/newview/gltf/primitive.cpp26
4 files changed, 25 insertions, 21 deletions
diff --git a/indra/newview/gltf/accessor.cpp b/indra/newview/gltf/accessor.cpp
index 9f1cb0c1cd..2ef9237f2d 100644
--- a/indra/newview/gltf/accessor.cpp
+++ b/indra/newview/gltf/accessor.cpp
@@ -108,7 +108,8 @@ void Buffer::erase(Asset& asset, S32 offset, S32 length)
mData.erase(mData.begin() + offset, mData.begin() + offset + length);
- mByteLength = mData.size();
+ llassert(mData.size() <= size_t(INT_MAX));
+ mByteLength = S32(mData.size());
for (BufferView& view : asset.mBufferViews)
{
@@ -141,7 +142,7 @@ bool Buffer::prep(Asset& asset)
}
mData.resize(mByteLength);
- if (!file.read((U8*)mData.data(), mData.size()))
+ if (!file.read((U8*)mData.data(), mByteLength))
{
LL_WARNS("GLTF") << "Failed to load buffer data from asset: " << id << LL_ENDL;
return false;
diff --git a/indra/newview/gltf/animation.cpp b/indra/newview/gltf/animation.cpp
index 45e9e1ddef..8b85eba3e5 100644
--- a/indra/newview/gltf/animation.cpp
+++ b/indra/newview/gltf/animation.cpp
@@ -189,17 +189,16 @@ void Animation::Sampler::getFrameInfo(Asset& asset, F32 time, U32& frameIndex, F
if (mFrameTimes.size() > 1)
{
+ llassert(mFrameTimes.size() <= size_t(U32_MAX));
+ frameIndex = U32(mFrameTimes.size()) - 2;
+ t = 1.f;
+
if (time > mMaxTime)
{
- frameIndex = mFrameTimes.size() - 2;
- t = 1.0f;
return;
}
- frameIndex = mFrameTimes.size() - 2;
- t = 1.f;
-
- for (U32 i = 0; i < mFrameTimes.size() - 1; i++)
+ for (U32 i = 0; i < (U32)mFrameTimes.size() - 1; i++)
{
if (time >= mFrameTimes[i] && time < mFrameTimes[i + 1])
{
@@ -382,7 +381,7 @@ void Skin::uploadMatrixPalette(Asset& asset)
glGenBuffers(1, &mUBO);
}
- U32 joint_count = llmin(max_joints, mJoints.size());
+ size_t joint_count = llmin<size_t>(max_joints, mJoints.size());
std::vector<mat4> t_mp;
diff --git a/indra/newview/gltf/buffer_util.h b/indra/newview/gltf/buffer_util.h
index c1101818b7..40f9448aaf 100644
--- a/indra/newview/gltf/buffer_util.h
+++ b/indra/newview/gltf/buffer_util.h
@@ -845,7 +845,7 @@ namespace LL
arr.resize(2);
arr[0] = src.x;
arr[1] = src.y;
-
+
return true;
}
diff --git a/indra/newview/gltf/primitive.cpp b/indra/newview/gltf/primitive.cpp
index 4cff0622b3..2280c7004e 100644
--- a/indra/newview/gltf/primitive.cpp
+++ b/indra/newview/gltf/primitive.cpp
@@ -56,9 +56,9 @@ struct MikktMesh
bool copy(const Primitive* prim)
{
bool indexed = !prim->mIndexArray.empty();
- U32 vert_count = indexed ? prim->mIndexArray.size() : prim->mPositions.size();
+ size_t vert_count = indexed ? prim->mIndexArray.size() : prim->mPositions.size();
- U32 triangle_count = 0;
+ size_t triangle_count = 0;
if (prim->mMode == Primitive::Mode::TRIANGLE_STRIP ||
prim->mMode == Primitive::Mode::TRIANGLE_FAN)
@@ -76,6 +76,7 @@ struct MikktMesh
}
vert_count = triangle_count * 3;
+ llassert(vert_count <= size_t(U32_MAX)); // triangle_count will also naturally be under the limit
p.resize(vert_count);
n.resize(vert_count);
@@ -106,7 +107,7 @@ struct MikktMesh
tc1.resize(vert_count);
}
- for (int tri_idx = 0; tri_idx < triangle_count; ++tri_idx)
+ for (U32 tri_idx = 0; tri_idx < U32(triangle_count); ++tri_idx)
{
U32 idx[3];
@@ -171,8 +172,8 @@ struct MikktMesh
void genNormals()
{
- U32 tri_count = p.size() / 3;
- for (U32 i = 0; i < tri_count; ++i)
+ size_t tri_count = p.size() / 3;
+ for (size_t i = 0; i < tri_count; ++i)
{
LLVector3 v0 = p[i * 3];
LLVector3 v1 = p[i * 3 + 1];
@@ -222,7 +223,7 @@ struct MikktMesh
std::vector<U32> remap;
remap.resize(p.size());
- U32 stream_count = mos.size();
+ size_t stream_count = mos.size();
size_t vert_count = meshopt_generateVertexRemapMulti(&remap[0], nullptr, p.size(), p.size(), mos.data(), stream_count);
@@ -240,7 +241,7 @@ struct MikktMesh
{
prim->mTexCoords1.resize(vert_count);
}
-
+
prim->mIndexArray.resize(remap.size());
for (int i = 0; i < remap.size(); ++i)
@@ -511,7 +512,10 @@ bool Primitive::prep(Asset& asset)
}
mVertexBuffer = new LLVertexBuffer(mask);
- mVertexBuffer->allocateBuffer(mPositions.size(), mIndexArray.size() * 2); // double the size of the index buffer for 32-bit indices
+ // we store these buffer sizes as S32 elsewhere
+ llassert(mPositions.size() <= size_t(S32_MAX));
+ llassert(mIndexArray.size() <= size_t(S32_MAX / 2));
+ mVertexBuffer->allocateBuffer(U32(mPositions.size()), U32(mIndexArray.size() * 2)); // double the size of the index buffer for 32-bit indices
mVertexBuffer->setBuffer();
mVertexBuffer->setPositionData(mPositions.data());
@@ -544,7 +548,7 @@ bool Primitive::prep(Asset& asset)
mVertexBuffer->setTexCoord1Data(mTexCoords1.data());
vertical_flip(mTexCoords1);
}
-
+
if (!mIndexArray.empty())
{
@@ -724,8 +728,8 @@ const LLVolumeTriangle* Primitive::lineSegmentIntersect(const LLVector4a& start,
face.mTangents = mTangents.data();
face.mIndices = nullptr; // unreferenced
- face.mNumIndices = mIndexArray.size();
- face.mNumVertices = mPositions.size();
+ face.mNumIndices = S32(mIndexArray.size());
+ face.mNumVertices = S32(mPositions.size());
LLOctreeTriangleRayIntersect intersect(start, dir, &face, &closest_t, intersection, tex_coord, normal, tangent_out);
intersect.traverse(mOctree);