MAINT-639 Fix for random rainbow effects on some prims.
parent
67221663fe
commit
defbd61d31
|
|
@ -187,12 +187,6 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
|
|||
|
||||
mFaceColor = LLColor4(1,0,0,1);
|
||||
|
||||
mLastVertexBuffer = mVertexBuffer;
|
||||
mLastGeomCount = mGeomCount;
|
||||
mLastGeomIndex = mGeomIndex;
|
||||
mLastIndicesCount = mIndicesCount;
|
||||
mLastIndicesIndex = mIndicesIndex;
|
||||
|
||||
mImportanceToCamera = 0.f ;
|
||||
mBoundingSphereRadius = 0.0f ;
|
||||
|
||||
|
|
@ -219,6 +213,7 @@ void LLFace::destroy()
|
|||
mIndicesIndex != 0xFFFFFFFF)
|
||||
{
|
||||
LLVOPartGroup::freeVBSlot(getGeomIndex()/4);
|
||||
mIndicesIndex = 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
if (mDrawPoolp)
|
||||
|
|
@ -390,7 +385,6 @@ void LLFace::setSize(S32 num_vertices, S32 num_indices, bool align)
|
|||
mGeomCount = num_vertices;
|
||||
mIndicesCount = num_indices;
|
||||
mVertexBuffer = NULL;
|
||||
mLastVertexBuffer = NULL;
|
||||
}
|
||||
|
||||
llassert(verify());
|
||||
|
|
@ -783,12 +777,6 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
|
|||
LLMatrix4a mat_normal;
|
||||
mat_normal.loadu(mat_normal_in);
|
||||
|
||||
//if (mDrawablep->isState(LLDrawable::REBUILD_VOLUME))
|
||||
//{ //vertex buffer no longer valid
|
||||
// mVertexBuffer = NULL;
|
||||
// mLastVertexBuffer = NULL;
|
||||
//}
|
||||
|
||||
//VECTORIZE THIS
|
||||
LLVector4a min,max;
|
||||
|
||||
|
|
@ -1050,30 +1038,13 @@ bool LLFace::calcAlignedPlanarTE(const LLFace* align_to, LLVector2* res_st_offs
|
|||
|
||||
void LLFace::updateRebuildFlags()
|
||||
{
|
||||
if (!mDrawablep->isState(LLDrawable::REBUILD_VOLUME))
|
||||
{
|
||||
BOOL moved = TRUE;
|
||||
if (mLastVertexBuffer == mVertexBuffer &&
|
||||
!mVertexBuffer->isEmpty())
|
||||
{ //this face really doesn't need to be regenerated, try real hard not to do so
|
||||
if (mLastGeomCount == mGeomCount &&
|
||||
mLastGeomIndex == mGeomIndex &&
|
||||
mLastIndicesCount == mIndicesCount &&
|
||||
mLastIndicesIndex == mIndicesIndex)
|
||||
{ //data is in same location in vertex buffer
|
||||
moved = FALSE;
|
||||
}
|
||||
}
|
||||
mLastMoveTime = gFrameTimeSeconds;
|
||||
|
||||
if (moved)
|
||||
{
|
||||
mDrawablep->setState(LLDrawable::REBUILD_VOLUME);
|
||||
}
|
||||
if (mDrawablep->isState(LLDrawable::REBUILD_VOLUME))
|
||||
{ //this rebuild is zero overhead (direct consequence of some change that affects this face)
|
||||
mLastUpdateTime = gFrameTimeSeconds;
|
||||
}
|
||||
else
|
||||
{
|
||||
mLastUpdateTime = gFrameTimeSeconds;
|
||||
{ //this rebuild is overhead (side effect of some change that does not affect this face)
|
||||
mLastMoveTime = gFrameTimeSeconds;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1228,9 +1199,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
|||
<< " VF Num Indices: " << num_indices
|
||||
<< " Indices Index: " << mIndicesIndex
|
||||
<< " VB Num Indices: " << mVertexBuffer->getNumIndices() << llendl;
|
||||
llwarns << "Last Indices Count: " << mLastIndicesCount
|
||||
<< " Last Indices Index: " << mLastIndicesIndex
|
||||
<< " Face Index: " << f
|
||||
llwarns << " Face Index: " << f
|
||||
<< " Pool Type: " << mPoolType << llendl;
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -1404,6 +1373,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
|||
|
||||
static LLCachedControl<bool> use_transform_feedback(gSavedSettings, "RenderUseTransformFeedback");
|
||||
|
||||
#ifdef GL_TRANSFORM_FEEDBACK_BUFFER
|
||||
if (use_transform_feedback &&
|
||||
gTransformPositionProgram.mProgramObject && //transform shaders are loaded
|
||||
mVertexBuffer->useVBOs() && //target buffer is in VRAM
|
||||
|
|
@ -1547,6 +1517,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
|||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
//if it's not fullbright and has no normals, bake sunlight based on face normal
|
||||
//bool bake_sunlight = !getTextureEntry()->getFullbright() &&
|
||||
|
|
@ -2167,12 +2138,6 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
|||
}
|
||||
|
||||
|
||||
mLastVertexBuffer = mVertexBuffer;
|
||||
mLastGeomCount = mGeomCount;
|
||||
mLastGeomIndex = mGeomIndex;
|
||||
mLastIndicesCount = mIndicesCount;
|
||||
mLastIndicesIndex = mIndicesIndex;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -2751,7 +2716,6 @@ void LLFace::setVertexBuffer(LLVertexBuffer* buffer)
|
|||
void LLFace::clearVertexBuffer()
|
||||
{
|
||||
mVertexBuffer = NULL;
|
||||
mLastVertexBuffer = NULL;
|
||||
}
|
||||
|
||||
//static
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ public:
|
|||
|
||||
//vertex buffer tracking
|
||||
void setVertexBuffer(LLVertexBuffer* buffer);
|
||||
void clearVertexBuffer(); //sets mVertexBuffer and mLastVertexBuffer to NULL
|
||||
void clearVertexBuffer(); //sets mVertexBuffer to NULL
|
||||
LLVertexBuffer* getVertexBuffer() const { return mVertexBuffer; }
|
||||
U32 getRiggedVertexBufferDataMask() const;
|
||||
S32 getRiggedIndex(U32 type) const;
|
||||
|
|
@ -257,8 +257,7 @@ public:
|
|||
|
||||
private:
|
||||
LLPointer<LLVertexBuffer> mVertexBuffer;
|
||||
LLPointer<LLVertexBuffer> mLastVertexBuffer;
|
||||
|
||||
|
||||
U32 mState;
|
||||
LLFacePool* mDrawPoolp;
|
||||
U32 mPoolType;
|
||||
|
|
@ -271,12 +270,6 @@ private:
|
|||
U32 mIndicesIndex; // index into draw pool for indices (yeah, I know!)
|
||||
S32 mIndexInTex ;
|
||||
|
||||
//previous rebuild's geometry info
|
||||
U16 mLastGeomCount;
|
||||
U16 mLastGeomIndex;
|
||||
U32 mLastIndicesCount;
|
||||
U32 mLastIndicesIndex;
|
||||
|
||||
LLXformMatrix* mXform;
|
||||
LLPointer<LLViewerTexture> mTexture;
|
||||
LLPointer<LLDrawable> mDrawablep;
|
||||
|
|
|
|||
|
|
@ -4987,45 +4987,13 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
|
|||
}
|
||||
}
|
||||
|
||||
//create/delete/resize vertex buffer if needed
|
||||
//create vertex buffer
|
||||
LLVertexBuffer* buffer = NULL;
|
||||
|
||||
if (group->mBufferUsage != GL_DYNAMIC_DRAW_ARB)
|
||||
{ //try to find a buffer to reuse
|
||||
LLFastTimer t(FTM_GEN_DRAW_INFO_FIND_VB);
|
||||
LLSpatialGroup::buffer_texture_map_t::iterator found_iter = group->mBufferMap[mask].find(*face_iter);
|
||||
|
||||
if (found_iter != group->mBufferMap[mask].end())
|
||||
{
|
||||
if ((U32) buffer_index < found_iter->second.size())
|
||||
{
|
||||
buffer = found_iter->second[buffer_index];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
LLFastTimer t(FTM_GEN_DRAW_INFO_ALLOCATE);
|
||||
|
||||
if (!buffer || !buffer->isWriteable())
|
||||
{ //create new buffer if needed
|
||||
buffer = createVertexBuffer(mask, buffer_usage);
|
||||
buffer->allocateBuffer(geom_count, index_count, TRUE);
|
||||
}
|
||||
else
|
||||
{ //resize pre-existing buffer
|
||||
LLFastTimer t(FTM_GEN_DRAW_INFO_RESIZE_VB);
|
||||
if (LLVertexBuffer::sEnableVBOs && buffer->getUsage() != buffer_usage ||
|
||||
buffer->getTypeMask() != mask)
|
||||
{
|
||||
buffer = createVertexBuffer(mask, buffer_usage);
|
||||
buffer->allocateBuffer(geom_count, index_count, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer->resizeBuffer(geom_count, index_count);
|
||||
}
|
||||
}
|
||||
buffer = createVertexBuffer(mask, buffer_usage);
|
||||
buffer->allocateBuffer(geom_count, index_count, TRUE);
|
||||
}
|
||||
|
||||
group->mGeometryBytes += buffer->getSize() + buffer->getIndicesSize();
|
||||
|
|
@ -5070,7 +5038,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
|
|||
llassert(!facep->isState(LLFace::RIGGED));
|
||||
|
||||
facep->getGeometryVolume(*volume, te_idx,
|
||||
vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), index_offset);
|
||||
vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), index_offset,true);
|
||||
|
||||
if (drawablep->isState(LLDrawable::ANIMATED_CHILD))
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue