Merge pull request #63 from DavidWyand-GG/issue62-LargeDecalsDisappear

Fix for Issue #62 for Large decal disappears
This commit is contained in:
David Wyand 2012-10-04 13:40:08 -07:00
commit 59e7229088
2 changed files with 27 additions and 6 deletions

View file

@ -361,19 +361,28 @@ bool DecalManager::clipDecal( DecalInstance *decal, Vector<Point3F> *edgeVerts,
mClipper.cullUnusedVerts();
mClipper.triangulate();
const U32 numVerts = mClipper.mVertexList.size();
const U32 numIndices = mClipper.mIndexList.size();
if ( !numVerts || !numIndices )
return false;
// Fail if either of the buffer metrics exceeds our limits
// on dynamic geometry buffers.
if ( numVerts > smMaxVerts ||
numIndices > smMaxIndices )
return false;
if ( !decalData->skipVertexNormals )
mClipper.generateNormals();
if ( mClipper.mVertexList.empty() )
return false;
#ifdef DECALMANAGER_DEBUG
mDebugPlanes.clear();
mDebugPlanes.merge( mClipper.mPlaneList );
#endif
decal->mVertCount = mClipper.mVertexList.size();
decal->mIndxCount = mClipper.mIndexList.size();
decal->mVertCount = numVerts;
decal->mIndxCount = numIndices;
Vector<Point3F> tmpPoints;

View file

@ -394,7 +394,19 @@ void GuiDecalEditorCtrl::on3DMouseDragged(const Gui3DMouseEvent & event)
// Assign the appropriate changed value back to the decal.
if ( mGizmo->getMode() == ScaleMode )
mSELDecal->mSize = (scale.x + scale.y) * 0.5f;
{
// Save old size.
const F32 oldSize = mSELDecal->mSize;
// Set new size.
mSELDecal->mSize = ( scale.x + scale.y ) * 0.5f;
// See if the decal properly clips/projects at this size. If not,
// stick to the old size.
mSELEdgeVerts.clear();
if ( !gDecalManager->clipDecal( mSELDecal, &mSELEdgeVerts ) )
mSELDecal->mSize = oldSize;
}
else if ( mGizmo->getMode() == MoveMode )
mSELDecal->mPosition = gizmoPos;
else if ( mGizmo->getMode() == RotateMode )