summaryrefslogtreecommitdiff
path: root/indra/newview/llspatialpartition.cpp
diff options
context:
space:
mode:
authorRunitai Linden <davep@lindenlab.com>2021-12-17 09:26:44 -0600
committerRunitai Linden <davep@lindenlab.com>2021-12-17 09:26:44 -0600
commitdd032467357a4aaf69c752c13e53122aff6c4755 (patch)
treeaf822bcc384efeb554d7de96f70f189e332f2fe7 /indra/newview/llspatialpartition.cpp
parent828e58432981e7c256618bd293f77906abaae699 (diff)
SL-16478 Fix for octree and render batch debug display not working with rigged meshes.
Diffstat (limited to 'indra/newview/llspatialpartition.cpp')
-rw-r--r--indra/newview/llspatialpartition.cpp41
1 files changed, 38 insertions, 3 deletions
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 48e9f3726f..c802e62e40 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -1593,10 +1593,14 @@ void renderOctree(LLSpatialGroup* group)
gGL.flush();
glLineWidth(1.f);
gGL.flush();
+
+ LLVOAvatar* lastAvatar = nullptr;
+ U64 lastMeshId = 0;
+
for (LLSpatialGroup::element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i)
{
LLDrawable* drawable = (LLDrawable*)(*i)->getDrawable();
- if(!drawable)
+ if(!drawable || drawable->getNumFaces() == 0)
{
continue;
}
@@ -1607,6 +1611,27 @@ void renderOctree(LLSpatialGroup* group)
gGL.translatef(trans.mV[0], trans.mV[1], trans.mV[2]);
}
+ LLFace* face = drawable->getFace(0);
+ bool rigged = face->isState(LLFace::RIGGED);
+ gDebugProgram.bind(rigged);
+
+ gGL.diffuseColor4f(1, 0, 0, 1);
+
+ if (rigged)
+ {
+ gGL.pushMatrix();
+ gGL.loadMatrix(gGLModelView);
+ if (lastAvatar != face->mAvatar ||
+ lastMeshId != face->mSkinInfo->mHash)
+ {
+ if (!LLRenderPass::uploadMatrixPalette(face->mAvatar, face->mSkinInfo))
+ {
+ continue;
+ }
+ lastAvatar = face->mAvatar;
+ lastMeshId = face->mSkinInfo->mHash;
+ }
+ }
for (S32 j = 0; j < drawable->getNumFaces(); j++)
{
LLFace* face = drawable->getFace(j);
@@ -1625,19 +1650,25 @@ void renderOctree(LLSpatialGroup* group)
continue;
}
- face->getVertexBuffer()->setBuffer(LLVertexBuffer::MAP_VERTEX);
+ face->getVertexBuffer()->setBuffer(LLVertexBuffer::MAP_VERTEX | (rigged ? LLVertexBuffer::MAP_WEIGHT4 : 0));
//drawBox((face->mExtents[0] + face->mExtents[1])*0.5f,
// (face->mExtents[1]-face->mExtents[0])*0.5f);
face->getVertexBuffer()->draw(LLRender::TRIANGLES, face->getIndicesCount(), face->getIndicesStart());
}
}
+ if (rigged)
+ {
+ gGL.popMatrix();
+ }
+
if (!group->getSpatialPartition()->isBridge())
{
gGL.popMatrix();
}
}
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+ gDebugProgram.bind(); // make sure non-rigged variant is bound
gGL.diffuseColor4f(1,1,1,1);
}
}
@@ -2778,6 +2809,8 @@ void renderBatchSize(LLDrawInfo* params)
bool bind = false;
if (params->mAvatar)
{
+ gGL.pushMatrix();
+ gGL.loadMatrix(gGLModelView);
bind = true;
old_shader->mRiggedVariant->bind();
LLRenderPass::uploadMatrixPalette(*params);
@@ -2789,6 +2822,7 @@ void renderBatchSize(LLDrawInfo* params)
if (bind)
{
+ gGL.popMatrix();
old_shader->bind();
}
}
@@ -3941,7 +3975,8 @@ LLDrawInfo::LLDrawInfo(U16 start, U16 end, U32 count, U32 offset,
{
mVertexBuffer->validateRange(mStart, mEnd, mCount, mOffset);
- mDebugColor = (rand() << 16) + rand();
+ mDebugColor = (rand() << 16) + rand();
+ ((U8*)&mDebugColor)[3] = 200;
}
LLDrawInfo::~LLDrawInfo()