Merge pull request #1352 from Areloch/PVS_Cleanup_807

Unnecessarily repeated expressions
This commit is contained in:
Daniel Buckmaster 2015-07-16 15:45:32 +10:00
commit 86e0e67496
38 changed files with 465 additions and 371 deletions

View file

@ -113,9 +113,11 @@ void GuiClockHud::initPersistFields()
void GuiClockHud::onRender(Point2I offset, const RectI &updateRect) void GuiClockHud::onRender(Point2I offset, const RectI &updateRect)
{ {
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
// Background first // Background first
if (mShowFill) if (mShowFill)
GFX->getDrawUtil()->drawRectFill(updateRect, mFillColor); drawUtil->drawRectFill(updateRect, mFillColor);
// Convert ms time into hours, minutes and seconds. // Convert ms time into hours, minutes and seconds.
S32 time = S32(getTime()); S32 time = S32(getTime());
@ -129,13 +131,13 @@ void GuiClockHud::onRender(Point2I offset, const RectI &updateRect)
// Center the text // Center the text
offset.x += (getWidth() - mProfile->mFont->getStrWidth((const UTF8 *)buf)) / 2; offset.x += (getWidth() - mProfile->mFont->getStrWidth((const UTF8 *)buf)) / 2;
offset.y += (getHeight() - mProfile->mFont->getHeight()) / 2; offset.y += (getHeight() - mProfile->mFont->getHeight()) / 2;
GFX->getDrawUtil()->setBitmapModulation(mTextColor); drawUtil->setBitmapModulation(mTextColor);
GFX->getDrawUtil()->drawText(mProfile->mFont, offset, buf); drawUtil->drawText(mProfile->mFont, offset, buf);
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
// Border last // Border last
if (mShowFrame) if (mShowFrame)
GFX->getDrawUtil()->drawRect(updateRect, mFrameColor); drawUtil->drawRect(updateRect, mFrameColor);
} }

View file

@ -162,10 +162,12 @@ void GuiHealthTextHud::onRender(Point2I offset, const RectI &updateRect)
else else
mValue = 100 - (100 * control->getDamageValue()); mValue = 100 - (100 * control->getDamageValue());
} }
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
// If enabled draw background first // If enabled draw background first
if (mShowFill) if (mShowFill)
GFX->getDrawUtil()->drawRectFill(updateRect, mFillColor); drawUtil->drawRectFill(updateRect, mFillColor);
// Prepare text and center it // Prepare text and center it
S32 val = (S32)mValue; S32 val = (S32)mValue;
@ -190,11 +192,11 @@ void GuiHealthTextHud::onRender(Point2I offset, const RectI &updateRect)
} }
} }
GFX->getDrawUtil()->setBitmapModulation(tColor); drawUtil->setBitmapModulation(tColor);
GFX->getDrawUtil()->drawText(mProfile->mFont, offset, buf); drawUtil->drawText(mProfile->mFont, offset, buf);
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
// If enabled draw the border last // If enabled draw the border last
if (mShowFrame) if (mShowFrame)
GFX->getDrawUtil()->drawRect(updateRect, mFrameColor); drawUtil->drawRect(updateRect, mFrameColor);
} }

View file

@ -301,18 +301,20 @@ void GuiShapeNameHud::drawName(Point2I offset, const char *name, F32 opacity)
offset.x -= width / 2; offset.x -= width / 2;
offset.y -= height / 2; offset.y -= height / 2;
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
// Background fill first // Background fill first
if (mShowLabelFill) if (mShowLabelFill)
GFX->getDrawUtil()->drawRectFill(RectI(offset, extent), mLabelFillColor); drawUtil->drawRectFill(RectI(offset, extent), mLabelFillColor);
// Deal with opacity and draw. // Deal with opacity and draw.
mTextColor.alpha = opacity; mTextColor.alpha = opacity;
GFX->getDrawUtil()->setBitmapModulation(mTextColor); drawUtil->setBitmapModulation(mTextColor);
GFX->getDrawUtil()->drawText(mProfile->mFont, offset + mLabelPadding, name); drawUtil->drawText(mProfile->mFont, offset + mLabelPadding, name);
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
// Border last // Border last
if (mShowLabelFrame) if (mShowLabelFrame)
GFX->getDrawUtil()->drawRect(RectI(offset, extent), mLabelFrameColor); drawUtil->drawRect(RectI(offset, extent), mLabelFrameColor);
} }

View file

@ -1171,8 +1171,10 @@ DefineEngineMethod( TSStatic, changeMaterial, void, ( const char* mapTo, Materia
return; return;
} }
TSMaterialList* shapeMaterialList = object->getShape()->materialList;
// Check the mapTo name exists for this shape // Check the mapTo name exists for this shape
S32 matIndex = object->getShape()->materialList->getMaterialNameList().find_next(String(mapTo)); S32 matIndex = shapeMaterialList->getMaterialNameList().find_next(String(mapTo));
if (matIndex < 0) if (matIndex < 0)
{ {
Con::errorf("TSShape::changeMaterial failed: Invalid mapTo name '%s'", mapTo); Con::errorf("TSShape::changeMaterial failed: Invalid mapTo name '%s'", mapTo);
@ -1190,13 +1192,13 @@ DefineEngineMethod( TSStatic, changeMaterial, void, ( const char* mapTo, Materia
// Replace instances with the new material being traded in. Lets make sure that we only // Replace instances with the new material being traded in. Lets make sure that we only
// target the specific targets per inst, this is actually doing more than we thought // target the specific targets per inst, this is actually doing more than we thought
delete object->getShape()->materialList->mMatInstList[matIndex]; delete shapeMaterialList->mMatInstList[matIndex];
object->getShape()->materialList->mMatInstList[matIndex] = newMat->createMatInstance(); shapeMaterialList->mMatInstList[matIndex] = newMat->createMatInstance();
// Finish up preparing the material instances for rendering // Finish up preparing the material instances for rendering
const GFXVertexFormat *flags = getGFXVertexFormat<GFXVertexPNTTB>(); const GFXVertexFormat *flags = getGFXVertexFormat<GFXVertexPNTTB>();
FeatureSet features = MATMGR->getDefaultFeatures(); FeatureSet features = MATMGR->getDefaultFeatures();
object->getShape()->materialList->getMaterialInst(matIndex)->init( features, flags ); shapeMaterialList->getMaterialInst(matIndex)->init(features, flags);
} }
DefineEngineMethod( TSStatic, getModelFile, const char *, (),, DefineEngineMethod( TSStatic, getModelFile, const char *, (),,

View file

@ -637,12 +637,13 @@ void ScatterSky::prepRenderImage( SceneRenderState *state )
return; return;
// Regular sky render instance. // Regular sky render instance.
ObjectRenderInst *ri = state->getRenderPass()->allocInst<ObjectRenderInst>(); RenderPassManager* renderPass = state->getRenderPass();
ObjectRenderInst *ri = renderPass->allocInst<ObjectRenderInst>();
ri->renderDelegate.bind( this, &ScatterSky::_render ); ri->renderDelegate.bind( this, &ScatterSky::_render );
ri->type = RenderPassManager::RIT_Sky; ri->type = RenderPassManager::RIT_Sky;
ri->defaultKey = 10; ri->defaultKey = 10;
ri->defaultKey2 = 0; ri->defaultKey2 = 0;
state->getRenderPass()->addInst( ri ); renderPass->addInst(ri);
// Debug render instance. // Debug render instance.
/* /*
@ -685,13 +686,13 @@ void ScatterSky::prepRenderImage( SceneRenderState *state )
mMatrixSet->setSceneProjection(GFX->getProjectionMatrix()); mMatrixSet->setSceneProjection(GFX->getProjectionMatrix());
mMatrixSet->setWorld(GFX->getWorldMatrix()); mMatrixSet->setWorld(GFX->getWorldMatrix());
ObjectRenderInst *ri = state->getRenderPass()->allocInst<ObjectRenderInst>(); ObjectRenderInst *ri = renderPass->allocInst<ObjectRenderInst>();
ri->renderDelegate.bind( this, &ScatterSky::_renderMoon ); ri->renderDelegate.bind( this, &ScatterSky::_renderMoon );
ri->type = RenderPassManager::RIT_Sky; ri->type = RenderPassManager::RIT_Sky;
// Render after sky objects and before CloudLayer! // Render after sky objects and before CloudLayer!
ri->defaultKey = 5; ri->defaultKey = 5;
ri->defaultKey2 = 0; ri->defaultKey2 = 0;
state->getRenderPass()->addInst( ri ); renderPass->addInst(ri);
} }
} }

View file

@ -450,10 +450,11 @@ void ForestSelectionTool::onRender2D()
F32 hscale = wwidth * 2 / F32(mEditor->getWidth()); F32 hscale = wwidth * 2 / F32(mEditor->getWidth());
F32 vscale = wheight * 2 / F32(mEditor->getHeight()); F32 vscale = wheight * 2 / F32(mEditor->getHeight());
F32 left = (mDragRect.point.x - mEditor->getPosition().x) * hscale - wwidth; Point2I editorPosition = mEditor->getPosition();
F32 right = (mDragRect.point.x - mEditor->getPosition().x + mDragRect.extent.x) * hscale - wwidth; F32 left = (mDragRect.point.x - editorPosition.x) * hscale - wwidth;
F32 top = wheight - vscale * (mDragRect.point.y - mEditor->getPosition().y); F32 right = (mDragRect.point.x - editorPosition.x + mDragRect.extent.x) * hscale - wwidth;
F32 bottom = wheight - vscale * (mDragRect.point.y - mEditor->getPosition().y + mDragRect.extent.y); F32 top = wheight - vscale * (mDragRect.point.y - editorPosition.y);
F32 bottom = wheight - vscale * (mDragRect.point.y - editorPosition.y + mDragRect.extent.y);
gDragFrustum.set(lastCameraQuery.ortho, left, right, top, bottom, lastCameraQuery.nearPlane, lastCameraQuery.farPlane, lastCameraQuery.cameraMatrix ); gDragFrustum.set(lastCameraQuery.ortho, left, right, top, bottom, lastCameraQuery.nearPlane, lastCameraQuery.farPlane, lastCameraQuery.cameraMatrix );
mForest->getData()->getItems( gDragFrustum, &mDragSelection ); mForest->getData()->getItems( gDragFrustum, &mDragSelection );

View file

@ -918,17 +918,18 @@ void GFont::importStrip(const char *fileName, U32 padding, U32 kerning)
// Allocate a new bitmap for this glyph, taking into account kerning and padding. // Allocate a new bitmap for this glyph, taking into account kerning and padding.
glyphList.increment(); glyphList.increment();
glyphList.last().bitmap = new GBitmap(mCharInfoList[i].width + kerning + 2*padding, mCharInfoList[i].height + 2*padding, false, strip->getFormat()); GlyphMap& lastGlyphMap = glyphList.last();
glyphList.last().charId = i; lastGlyphMap.bitmap = new GBitmap(mCharInfoList[i].width + kerning + 2 * padding, mCharInfoList[i].height + 2 * padding, false, strip->getFormat());
lastGlyphMap.charId = i;
// Copy the rect. // Copy the rect.
RectI ri(curWidth, getBaseline() - mCharInfoList[i].yOrigin, glyphList.last().bitmap->getWidth(), glyphList.last().bitmap->getHeight()); RectI ri(curWidth, getBaseline() - mCharInfoList[i].yOrigin, lastGlyphMap.bitmap->getWidth(), lastGlyphMap.bitmap->getHeight());
Point2I outRi(0,0); Point2I outRi(0,0);
glyphList.last().bitmap->copyRect(strip, ri, outRi); lastGlyphMap.bitmap->copyRect(strip, ri, outRi);
// Update glyph attributes. // Update glyph attributes.
mCharInfoList[i].width = glyphList.last().bitmap->getWidth(); mCharInfoList[i].width = lastGlyphMap.bitmap->getWidth();
mCharInfoList[i].height = glyphList.last().bitmap->getHeight(); mCharInfoList[i].height = lastGlyphMap.bitmap->getHeight();
mCharInfoList[i].xOffset -= kerning + padding; mCharInfoList[i].xOffset -= kerning + padding;
mCharInfoList[i].xIncrement += kerning; mCharInfoList[i].xIncrement += kerning;
mCharInfoList[i].yOffset -= padding; mCharInfoList[i].yOffset -= padding;

View file

@ -1041,7 +1041,8 @@ void GFXTextureManager::_validateTexParams( const U32 width, const U32 height,
} }
// inOutFormat is not modified by this method // inOutFormat is not modified by this method
bool chekFmt = GFX->getCardProfiler()->checkFormat( testingFormat, profile, autoGenSupp ); GFXCardProfiler* cardProfiler = GFX->getCardProfiler();
bool chekFmt = cardProfiler->checkFormat(testingFormat, profile, autoGenSupp);
if( !chekFmt ) if( !chekFmt )
{ {
@ -1057,16 +1058,16 @@ void GFXTextureManager::_validateTexParams( const U32 width, const U32 height,
{ {
case GFXFormatR8G8B8: case GFXFormatR8G8B8:
testingFormat = GFXFormatR8G8B8X8; testingFormat = GFXFormatR8G8B8X8;
chekFmt = GFX->getCardProfiler()->checkFormat( testingFormat, profile, autoGenSupp ); chekFmt = cardProfiler->checkFormat(testingFormat, profile, autoGenSupp);
break; break;
case GFXFormatA8: case GFXFormatA8:
testingFormat = GFXFormatR8G8B8A8; testingFormat = GFXFormatR8G8B8A8;
chekFmt = GFX->getCardProfiler()->checkFormat( testingFormat, profile, autoGenSupp ); chekFmt = cardProfiler->checkFormat(testingFormat, profile, autoGenSupp);
break; break;
default: default:
chekFmt = GFX->getCardProfiler()->checkFormat( testingFormat, profile, autoGenSupp ); chekFmt = cardProfiler->checkFormat(testingFormat, profile, autoGenSupp);
break; break;
} }
} }

View file

@ -114,10 +114,11 @@ void GFXVertexFormat::addElement( const String& semantic, GFXDeclType type, U32
{ {
mDirty = true; mDirty = true;
mElements.increment(); mElements.increment();
mElements.last().mStreamIndex = stream; GFXVertexElement& lastElement = mElements.last();
mElements.last().mSemantic = semantic.intern(); lastElement.mStreamIndex = stream;
mElements.last().mSemanticIndex = index; lastElement.mSemantic = semantic.intern();
mElements.last().mType = type; lastElement.mSemanticIndex = index;
lastElement.mType = type;
} }
const String& GFXVertexFormat::getDescription() const const String& GFXVertexFormat::getDescription() const

View file

@ -1091,8 +1091,9 @@ void GuiScrollCtrl::drawVScrollBar(const Point2I &offset)
} }
// Render Up Arrow. // Render Up Arrow.
GFX->getDrawUtil()->clearBitmapModulation(); GFXDrawUtil* drawUtil = GFX->getDrawUtil();
GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[upArrowBitmap] ); drawUtil->clearBitmapModulation();
drawUtil->drawBitmapSR(mTextureObject, pos, mBitmapBounds[upArrowBitmap]);
// Update Pos. // Update Pos.
pos.y += mBitmapBounds[upArrowBitmap].extent.y; pos.y += mBitmapBounds[upArrowBitmap].extent.y;
@ -1118,8 +1119,8 @@ void GuiScrollCtrl::drawVScrollBar(const Point2I &offset)
if ( trackRect.extent.y > 0 ) if ( trackRect.extent.y > 0 )
{ {
// Render Track. // Render Track.
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretchSR( mTextureObject, trackRect, mBitmapBounds[trackBitmap] ); drawUtil->drawBitmapStretchSR(mTextureObject, trackRect, mBitmapBounds[trackBitmap]);
} }
// Update Pos. // Update Pos.
@ -1137,8 +1138,8 @@ void GuiScrollCtrl::drawVScrollBar(const Point2I &offset)
} }
// Render Down Arrow. // Render Down Arrow.
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[downArrowBitmap] ); drawUtil->drawBitmapSR(mTextureObject, pos, mBitmapBounds[downArrowBitmap]);
// Render the Thumb? // Render the Thumb?
if ( !mVBarEnabled ) if ( !mVBarEnabled )
@ -1163,8 +1164,8 @@ void GuiScrollCtrl::drawVScrollBar(const Point2I &offset)
} }
// Render Thumb Top. // Render Thumb Top.
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[thumbBitmapTop] ); drawUtil->drawBitmapSR(mTextureObject, pos, mBitmapBounds[thumbBitmapTop]);
// Update Pos. // Update Pos.
pos.y += mBitmapBounds[thumbBitmapTop].extent.y; pos.y += mBitmapBounds[thumbBitmapTop].extent.y;
@ -1179,16 +1180,16 @@ void GuiScrollCtrl::drawVScrollBar(const Point2I &offset)
if ( thumbRect.extent.y > 0 ) if ( thumbRect.extent.y > 0 )
{ {
// Render Track. // Render Track.
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretchSR( mTextureObject, thumbRect, mBitmapBounds[thumbBitmapMiddle] ); drawUtil->drawBitmapStretchSR(mTextureObject, thumbRect, mBitmapBounds[thumbBitmapMiddle]);
} }
// Update Pos. // Update Pos.
pos.y += thumbRect.extent.y; pos.y += thumbRect.extent.y;
// Render the Thumb Bottom. // Render the Thumb Bottom.
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[thumbBitmapBottom] ); drawUtil->drawBitmapSR(mTextureObject, pos, mBitmapBounds[thumbBitmapBottom]);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -1215,8 +1216,9 @@ void GuiScrollCtrl::drawHScrollBar(const Point2I &offset)
} }
// Render Up Arrow. // Render Up Arrow.
GFX->getDrawUtil()->clearBitmapModulation(); GFXDrawUtil* drawUtil = GFX->getDrawUtil();
GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[leftArrowBitmap] ); drawUtil->clearBitmapModulation();
drawUtil->drawBitmapSR(mTextureObject, pos, mBitmapBounds[leftArrowBitmap]);
// Update Pos. // Update Pos.
pos.x += mBitmapBounds[leftArrowBitmap].extent.x; pos.x += mBitmapBounds[leftArrowBitmap].extent.x;
@ -1242,8 +1244,8 @@ void GuiScrollCtrl::drawHScrollBar(const Point2I &offset)
if ( trackRect.extent.x > 0 ) if ( trackRect.extent.x > 0 )
{ {
// Render Track. // Render Track.
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretchSR( mTextureObject, trackRect, mBitmapBounds[trackBitmap] ); drawUtil->drawBitmapStretchSR(mTextureObject, trackRect, mBitmapBounds[trackBitmap]);
} }
// Update Pos. // Update Pos.
@ -1261,8 +1263,8 @@ void GuiScrollCtrl::drawHScrollBar(const Point2I &offset)
} }
// Render Right Arrow. // Render Right Arrow.
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[rightArrowBitmap] ); drawUtil->drawBitmapSR(mTextureObject, pos, mBitmapBounds[rightArrowBitmap]);
// Render the Thumb? // Render the Thumb?
if ( !mHBarEnabled ) if ( !mHBarEnabled )
@ -1287,8 +1289,8 @@ void GuiScrollCtrl::drawHScrollBar(const Point2I &offset)
} }
// Render Thumb Left. // Render Thumb Left.
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[thumbBitmapLeft] ); drawUtil->drawBitmapSR(mTextureObject, pos, mBitmapBounds[thumbBitmapLeft]);
// Update Pos. // Update Pos.
pos.x += mBitmapBounds[thumbBitmapLeft].extent.x; pos.x += mBitmapBounds[thumbBitmapLeft].extent.x;
@ -1303,16 +1305,16 @@ void GuiScrollCtrl::drawHScrollBar(const Point2I &offset)
if ( thumbRect.extent.x > 0 ) if ( thumbRect.extent.x > 0 )
{ {
// Render Track. // Render Track.
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretchSR( mTextureObject, thumbRect, mBitmapBounds[thumbBitmapMiddle] ); drawUtil->drawBitmapStretchSR(mTextureObject, thumbRect, mBitmapBounds[thumbBitmapMiddle]);
} }
// Update Pos. // Update Pos.
pos.x += thumbRect.extent.x; pos.x += thumbRect.extent.x;
// Render the Thumb Bottom. // Render the Thumb Bottom.
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[thumbBitmapRight] ); drawUtil->drawBitmapSR(mTextureObject, pos, mBitmapBounds[thumbBitmapRight]);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View file

@ -1294,11 +1294,13 @@ void GuiWindowCtrl::onRender(Point2I offset, const RectI &updateRect)
winRect.extent.x += 1; winRect.extent.x += 1;
GFX->getDrawUtil()->drawRectFill(winRect, mProfile->mFillColor); GFXDrawUtil* drawUtil = GFX->getDrawUtil();
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->drawRectFill(winRect, mProfile->mFillColor);
GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset, mBitmapBounds[topBase]);
GFX->getDrawUtil()->drawBitmapSR(mTextureObject, Point2I(offset.x + getWidth() - mBitmapBounds[topBase+1].extent.x, offset.y), drawUtil->clearBitmapModulation();
drawUtil->drawBitmapSR(mTextureObject, offset, mBitmapBounds[topBase]);
drawUtil->drawBitmapSR(mTextureObject, Point2I(offset.x + getWidth() - mBitmapBounds[topBase+1].extent.x, offset.y),
mBitmapBounds[topBase + 1]); mBitmapBounds[topBase + 1]);
RectI destRect; RectI destRect;
@ -1308,7 +1310,7 @@ void GuiWindowCtrl::onRender(Point2I offset, const RectI &updateRect)
destRect.extent.y = mBitmapBounds[topBase + 2].extent.y; destRect.extent.y = mBitmapBounds[topBase + 2].extent.y;
RectI stretchRect = mBitmapBounds[topBase + 2]; RectI stretchRect = mBitmapBounds[topBase + 2];
stretchRect.inset(1,0); stretchRect.inset(1,0);
GFX->getDrawUtil()->drawBitmapStretchSR(mTextureObject, destRect, stretchRect); drawUtil->drawBitmapStretchSR(mTextureObject, destRect, stretchRect);
destRect.point.x = offset.x; destRect.point.x = offset.x;
destRect.point.y = offset.y + mBitmapBounds[topBase].extent.y; destRect.point.y = offset.y + mBitmapBounds[topBase].extent.y;
@ -1316,7 +1318,7 @@ void GuiWindowCtrl::onRender(Point2I offset, const RectI &updateRect)
destRect.extent.y = getHeight() - mBitmapBounds[topBase].extent.y - mBitmapBounds[BorderBottomLeft].extent.y; destRect.extent.y = getHeight() - mBitmapBounds[topBase].extent.y - mBitmapBounds[BorderBottomLeft].extent.y;
stretchRect = mBitmapBounds[BorderLeft]; stretchRect = mBitmapBounds[BorderLeft];
stretchRect.inset(0,1); stretchRect.inset(0,1);
GFX->getDrawUtil()->drawBitmapStretchSR(mTextureObject, destRect, stretchRect); drawUtil->drawBitmapStretchSR(mTextureObject, destRect, stretchRect);
destRect.point.x = offset.x + getWidth() - mBitmapBounds[BorderRight].extent.x; destRect.point.x = offset.x + getWidth() - mBitmapBounds[BorderRight].extent.x;
destRect.extent.x = mBitmapBounds[BorderRight].extent.x; destRect.extent.x = mBitmapBounds[BorderRight].extent.x;
@ -1325,10 +1327,10 @@ void GuiWindowCtrl::onRender(Point2I offset, const RectI &updateRect)
stretchRect = mBitmapBounds[BorderRight]; stretchRect = mBitmapBounds[BorderRight];
stretchRect.inset(0,1); stretchRect.inset(0,1);
GFX->getDrawUtil()->drawBitmapStretchSR(mTextureObject, destRect, stretchRect); drawUtil->drawBitmapStretchSR(mTextureObject, destRect, stretchRect);
GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset + Point2I(0, getHeight() - mBitmapBounds[BorderBottomLeft].extent.y), mBitmapBounds[BorderBottomLeft]); drawUtil->drawBitmapSR(mTextureObject, offset + Point2I(0, getHeight() - mBitmapBounds[BorderBottomLeft].extent.y), mBitmapBounds[BorderBottomLeft]);
GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset + getExtent() - mBitmapBounds[BorderBottomRight].extent, mBitmapBounds[BorderBottomRight]); drawUtil->drawBitmapSR(mTextureObject, offset + getExtent() - mBitmapBounds[BorderBottomRight].extent, mBitmapBounds[BorderBottomRight]);
destRect.point.x = offset.x + mBitmapBounds[BorderBottomLeft].extent.x; destRect.point.x = offset.x + mBitmapBounds[BorderBottomLeft].extent.x;
destRect.extent.x = getWidth() - mBitmapBounds[BorderBottomLeft].extent.x - mBitmapBounds[BorderBottomRight].extent.x; destRect.extent.x = getWidth() - mBitmapBounds[BorderBottomLeft].extent.x - mBitmapBounds[BorderBottomRight].extent.x;
@ -1338,13 +1340,13 @@ void GuiWindowCtrl::onRender(Point2I offset, const RectI &updateRect)
stretchRect = mBitmapBounds[BorderBottom]; stretchRect = mBitmapBounds[BorderBottom];
stretchRect.inset(1,0); stretchRect.inset(1,0);
GFX->getDrawUtil()->drawBitmapStretchSR(mTextureObject, destRect, stretchRect); drawUtil->drawBitmapStretchSR(mTextureObject, destRect, stretchRect);
// Draw the title // Draw the title
// dhc addition: copied/modded from renderJustifiedText, since we enforce a // dhc addition: copied/modded from renderJustifiedText, since we enforce a
// different color usage here. NOTE: it currently CAN overdraw the controls // different color usage here. NOTE: it currently CAN overdraw the controls
// if mis-positioned or 'scrunched' in a small width. // if mis-positioned or 'scrunched' in a small width.
GFX->getDrawUtil()->setBitmapModulation(mProfile->mFontColor); drawUtil->setBitmapModulation(mProfile->mFontColor);
S32 textWidth = mProfile->mFont->getStrWidth((const UTF8 *)mText); S32 textWidth = mProfile->mFont->getStrWidth((const UTF8 *)mText);
Point2I start(0,0); Point2I start(0,0);
@ -1359,7 +1361,7 @@ void GuiWindowCtrl::onRender(Point2I offset, const RectI &updateRect)
if( textWidth > winRect.extent.x ) start.set( 0, 0 ); if( textWidth > winRect.extent.x ) start.set( 0, 0 );
// center the vertical // center the vertical
// start.y = ( winRect.extent.y - ( font->getHeight() - 2 ) ) / 2; // start.y = ( winRect.extent.y - ( font->getHeight() - 2 ) ) / 2;
GFX->getDrawUtil()->drawText( mProfile->mFont, start + offset + mProfile->mTextOffset, mText ); drawUtil->drawText( mProfile->mFont, start + offset + mProfile->mTextOffset, mText );
// Deal with rendering the titlebar controls // Deal with rendering the titlebar controls
AssertFatal(root, "Unable to get the root GuiCanvas."); AssertFatal(root, "Unable to get the root GuiCanvas.");
@ -1378,8 +1380,8 @@ void GuiWindowCtrl::onRender(Point2I offset, const RectI &updateRect)
bmp += BmpHilite; bmp += BmpHilite;
} }
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset + mCloseButton.point, mBitmapBounds[bmp]); drawUtil->drawBitmapSR(mTextureObject, offset + mCloseButton.point, mBitmapBounds[bmp]);
} }
// Draw the maximize button // Draw the maximize button
@ -1397,8 +1399,8 @@ void GuiWindowCtrl::onRender(Point2I offset, const RectI &updateRect)
bmp += BmpHilite; bmp += BmpHilite;
} }
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapSR( mTextureObject, offset + mMaximizeButton.point, mBitmapBounds[bmp] ); drawUtil->drawBitmapSR( mTextureObject, offset + mMaximizeButton.point, mBitmapBounds[bmp] );
} }
// Draw the minimize button // Draw the minimize button
@ -1416,8 +1418,8 @@ void GuiWindowCtrl::onRender(Point2I offset, const RectI &updateRect)
bmp += BmpHilite; bmp += BmpHilite;
} }
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapSR( mTextureObject, offset + mMinimizeButton.point, mBitmapBounds[bmp] ); drawUtil->drawBitmapSR( mTextureObject, offset + mMinimizeButton.point, mBitmapBounds[bmp] );
} }
if( !mMinimized ) if( !mMinimized )

View file

@ -136,6 +136,8 @@ void GuiBitmapBorderCtrl::onRender(Point2I offset, const RectI &updateRect)
{ {
GFX->setClipRect(updateRect); GFX->setClipRect(updateRect);
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
//draw the outline //draw the outline
RectI winRect; RectI winRect;
winRect.point = offset; winRect.point = offset;
@ -148,11 +150,11 @@ void GuiBitmapBorderCtrl::onRender(Point2I offset, const RectI &updateRect)
winRect.extent.y -= mBitmapBounds[BorderTop].extent.y + mBitmapBounds[BorderBottom].extent.y; winRect.extent.y -= mBitmapBounds[BorderTop].extent.y + mBitmapBounds[BorderBottom].extent.y;
if(mProfile->mOpaque) if(mProfile->mOpaque)
GFX->getDrawUtil()->drawRectFill(winRect, mProfile->mFillColor); drawUtil->drawRectFill(winRect, mProfile->mFillColor);
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset, mBitmapBounds[BorderTopLeft]); drawUtil->drawBitmapSR(mTextureObject, offset, mBitmapBounds[BorderTopLeft]);
GFX->getDrawUtil()->drawBitmapSR(mTextureObject, Point2I(offset.x + getWidth() - mBitmapBounds[BorderTopRight].extent.x, offset.y), drawUtil->drawBitmapSR(mTextureObject, Point2I(offset.x + getWidth() - mBitmapBounds[BorderTopRight].extent.x, offset.y),
mBitmapBounds[BorderTopRight]); mBitmapBounds[BorderTopRight]);
RectI destRect; RectI destRect;
@ -162,7 +164,7 @@ void GuiBitmapBorderCtrl::onRender(Point2I offset, const RectI &updateRect)
destRect.extent.y = mBitmapBounds[BorderTop].extent.y; destRect.extent.y = mBitmapBounds[BorderTop].extent.y;
RectI stretchRect = mBitmapBounds[BorderTop]; RectI stretchRect = mBitmapBounds[BorderTop];
stretchRect.inset(1,0); stretchRect.inset(1,0);
GFX->getDrawUtil()->drawBitmapStretchSR(mTextureObject, destRect, stretchRect); drawUtil->drawBitmapStretchSR(mTextureObject, destRect, stretchRect);
destRect.point.x = offset.x; destRect.point.x = offset.x;
destRect.point.y = offset.y + mBitmapBounds[BorderTopLeft].extent.y; destRect.point.y = offset.y + mBitmapBounds[BorderTopLeft].extent.y;
@ -170,7 +172,7 @@ void GuiBitmapBorderCtrl::onRender(Point2I offset, const RectI &updateRect)
destRect.extent.y = getHeight() - mBitmapBounds[BorderTopLeft].extent.y - mBitmapBounds[BorderBottomLeft].extent.y; destRect.extent.y = getHeight() - mBitmapBounds[BorderTopLeft].extent.y - mBitmapBounds[BorderBottomLeft].extent.y;
stretchRect = mBitmapBounds[BorderLeft]; stretchRect = mBitmapBounds[BorderLeft];
stretchRect.inset(0,1); stretchRect.inset(0,1);
GFX->getDrawUtil()->drawBitmapStretchSR(mTextureObject, destRect, stretchRect); drawUtil->drawBitmapStretchSR(mTextureObject, destRect, stretchRect);
destRect.point.x = offset.x + getWidth() - mBitmapBounds[BorderRight].extent.x; destRect.point.x = offset.x + getWidth() - mBitmapBounds[BorderRight].extent.x;
destRect.extent.x = mBitmapBounds[BorderRight].extent.x; destRect.extent.x = mBitmapBounds[BorderRight].extent.x;
@ -179,10 +181,10 @@ void GuiBitmapBorderCtrl::onRender(Point2I offset, const RectI &updateRect)
stretchRect = mBitmapBounds[BorderRight]; stretchRect = mBitmapBounds[BorderRight];
stretchRect.inset(0,1); stretchRect.inset(0,1);
GFX->getDrawUtil()->drawBitmapStretchSR(mTextureObject, destRect, stretchRect); drawUtil->drawBitmapStretchSR(mTextureObject, destRect, stretchRect);
GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset + Point2I(0, getHeight() - mBitmapBounds[BorderBottomLeft].extent.y), mBitmapBounds[BorderBottomLeft]); drawUtil->drawBitmapSR(mTextureObject, offset + Point2I(0, getHeight() - mBitmapBounds[BorderBottomLeft].extent.y), mBitmapBounds[BorderBottomLeft]);
GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset + getExtent() - mBitmapBounds[BorderBottomRight].extent, mBitmapBounds[BorderBottomRight]); drawUtil->drawBitmapSR(mTextureObject, offset + getExtent() - mBitmapBounds[BorderBottomRight].extent, mBitmapBounds[BorderBottomRight]);
destRect.point.x = offset.x + mBitmapBounds[BorderBottomLeft].extent.x; destRect.point.x = offset.x + mBitmapBounds[BorderBottomLeft].extent.x;
destRect.extent.x = getWidth() - mBitmapBounds[BorderBottomLeft].extent.x - mBitmapBounds[BorderBottomRight].extent.x; destRect.extent.x = getWidth() - mBitmapBounds[BorderBottomLeft].extent.x - mBitmapBounds[BorderBottomRight].extent.x;
@ -192,6 +194,6 @@ void GuiBitmapBorderCtrl::onRender(Point2I offset, const RectI &updateRect)
stretchRect = mBitmapBounds[BorderBottom]; stretchRect = mBitmapBounds[BorderBottom];
stretchRect.inset(1,0); stretchRect.inset(1,0);
GFX->getDrawUtil()->drawBitmapStretchSR(mTextureObject, destRect, stretchRect); drawUtil->drawBitmapStretchSR(mTextureObject, destRect, stretchRect);
} }
} }

View file

@ -56,6 +56,8 @@ void GuiGameListMenuCtrl::onRender(Point2I offset, const RectI &updateRect)
{ {
GuiGameListMenuProfile * profile = (GuiGameListMenuProfile *) mProfile; GuiGameListMenuProfile * profile = (GuiGameListMenuProfile *) mProfile;
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
F32 xScale = (float) getWidth() / profile->getRowWidth(); F32 xScale = (float) getWidth() / profile->getRowWidth();
bool profileHasIcons = profile->hasArrows(); bool profileHasIcons = profile->hasArrows();
@ -121,19 +123,19 @@ void GuiGameListMenuCtrl::onRender(Point2I offset, const RectI &updateRect)
} }
// render the row bitmap // render the row bitmap
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretchSR(profile->mTextureObject, RectI(currentOffset, rowExtent), profile->getBitmapArrayRect(buttonTextureIndex)); drawUtil->drawBitmapStretchSR(profile->mTextureObject, RectI(currentOffset, rowExtent), profile->getBitmapArrayRect(buttonTextureIndex));
// render the row icon if it has one // render the row icon if it has one
if ((iconIndex != NO_ICON) && profileHasIcons && (! profile->getBitmapArrayRect((U32)iconIndex).extent.isZero())) if ((iconIndex != NO_ICON) && profileHasIcons && (! profile->getBitmapArrayRect((U32)iconIndex).extent.isZero()))
{ {
iconIndex += Profile::TEX_FIRST_ICON; iconIndex += Profile::TEX_FIRST_ICON;
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretchSR(profile->mTextureObject, RectI(currentOffset + iconOffset, iconExtent), profile->getBitmapArrayRect(iconIndex)); drawUtil->drawBitmapStretchSR(profile->mTextureObject, RectI(currentOffset + iconOffset, iconExtent), profile->getBitmapArrayRect(iconIndex));
} }
// render the row text // render the row text
GFX->getDrawUtil()->setBitmapModulation(fontColor); drawUtil->setBitmapModulation(fontColor);
renderJustifiedText(currentOffset + textOffset, textExtent, (*row)->mLabel); renderJustifiedText(currentOffset + textOffset, textExtent, (*row)->mLabel);
} }

View file

@ -249,8 +249,9 @@ bool GuiGradientCtrl::onAdd()
{ {
Parent::onAdd(); Parent::onAdd();
S32 l = getBounds().point.x + mSwatchFactor, r = getBounds().point.x + getBounds().extent.x - mSwatchFactor; RectI bounds = getBounds();
S32 t = getBounds().point.y, b = getBounds().point.y + getBounds().extent.y - mSwatchFactor; S32 l = bounds.point.x + mSwatchFactor, r = bounds.point.x + bounds.extent.x - mSwatchFactor;
S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - mSwatchFactor;
mBlendRangeBox = RectI( Point2I(l, t), Point2I(r, b) ); mBlendRangeBox = RectI( Point2I(l, t), Point2I(r, b) );
setupDefaultRange(); setupDefaultRange();
@ -330,16 +331,18 @@ void GuiGradientCtrl::drawBlendRangeBox(RectI &bounds, bool vertical, Vector<Col
// Update local dimensions // Update local dimensions
mBlendRangeBox.point = globalToLocalCoord(Point2I(l, t)); mBlendRangeBox.point = globalToLocalCoord(Point2I(l, t));
mBlendRangeBox.extent = globalToLocalCoord(Point2I(r, b)); mBlendRangeBox.extent = globalToLocalCoord(Point2I(r, b));
ColorRange& firstColorRange = colorRange.first();
if(colorRange.size() == 1) // Only one color to draw if(colorRange.size() == 1) // Only one color to draw
{ {
PrimBuild::begin( GFXTriangleFan, 4 ); PrimBuild::begin( GFXTriangleFan, 4 );
PrimBuild::color( colorRange.first().swatch->getColor() ); PrimBuild::color(firstColorRange.swatch->getColor());
PrimBuild::vertex2i( l, t ); PrimBuild::vertex2i( l, t );
PrimBuild::vertex2i( l, b ); PrimBuild::vertex2i( l, b );
PrimBuild::color( colorRange.first().swatch->getColor() ); PrimBuild::color(firstColorRange.swatch->getColor());
PrimBuild::vertex2i( r, b ); PrimBuild::vertex2i( r, b );
PrimBuild::vertex2i( r, t ); PrimBuild::vertex2i( r, t );
@ -349,13 +352,13 @@ void GuiGradientCtrl::drawBlendRangeBox(RectI &bounds, bool vertical, Vector<Col
{ {
PrimBuild::begin( GFXTriangleFan, 4 ); PrimBuild::begin( GFXTriangleFan, 4 );
PrimBuild::color( colorRange.first().swatch->getColor() ); PrimBuild::color(firstColorRange.swatch->getColor());
PrimBuild::vertex2i( l, t ); PrimBuild::vertex2i( l, t );
PrimBuild::vertex2i( l, b ); PrimBuild::vertex2i( l, b );
PrimBuild::color( colorRange.first().swatch->getColor() ); PrimBuild::color(firstColorRange.swatch->getColor());
PrimBuild::vertex2i( l + colorRange.first().swatch->getPosition().x, b ); PrimBuild::vertex2i(l + firstColorRange.swatch->getPosition().x, b);
PrimBuild::vertex2i( l + colorRange.first().swatch->getPosition().x, t ); PrimBuild::vertex2i(l + firstColorRange.swatch->getPosition().x, t);
PrimBuild::end(); PrimBuild::end();
@ -377,13 +380,15 @@ void GuiGradientCtrl::drawBlendRangeBox(RectI &bounds, bool vertical, Vector<Col
PrimBuild::end(); PrimBuild::end();
} }
ColorRange& lastColorRange = colorRange.last();
PrimBuild::begin( GFXTriangleFan, 4 ); PrimBuild::begin( GFXTriangleFan, 4 );
PrimBuild::color( colorRange.last().swatch->getColor() ); PrimBuild::color(lastColorRange.swatch->getColor());
PrimBuild::vertex2i( l + colorRange.last().swatch->getPosition().x, t ); PrimBuild::vertex2i(l + lastColorRange.swatch->getPosition().x, t);
PrimBuild::vertex2i( l + colorRange.last().swatch->getPosition().x, b ); PrimBuild::vertex2i(l + lastColorRange.swatch->getPosition().x, b);
PrimBuild::color( colorRange.last().swatch->getColor() ); PrimBuild::color(lastColorRange.swatch->getColor());
PrimBuild::vertex2i( r, b ); PrimBuild::vertex2i( r, b );
PrimBuild::vertex2i( r, t ); PrimBuild::vertex2i( r, t );

View file

@ -852,6 +852,8 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect )
if ( mScrollDir != GuiScrollCtrl::None ) if ( mScrollDir != GuiScrollCtrl::None )
autoScroll(); autoScroll();
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
RectI r( offset, getExtent() ); RectI r( offset, getExtent() );
if ( mInAction ) if ( mInAction )
{ {
@ -868,30 +870,30 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect )
else else
{ {
//renderSlightlyLoweredBox(r, mProfile); //renderSlightlyLoweredBox(r, mProfile);
GFX->getDrawUtil()->drawRectFill( r, mProfile->mFillColor ); drawUtil->drawRectFill( r, mProfile->mFillColor );
} }
// Draw a bitmap over the background? // Draw a bitmap over the background?
if ( mTextureDepressed ) if ( mTextureDepressed )
{ {
RectI rect(offset, mBitmapBounds); RectI rect(offset, mBitmapBounds);
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretch( mTextureDepressed, rect ); drawUtil->drawBitmapStretch( mTextureDepressed, rect );
} }
else if ( mTextureNormal ) else if ( mTextureNormal )
{ {
RectI rect(offset, mBitmapBounds); RectI rect(offset, mBitmapBounds);
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect ); drawUtil->drawBitmapStretch( mTextureNormal, rect );
} }
// Do we render a bitmap border or lines? // Do we render a bitmap border or lines?
if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) ) if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) )
{ {
GFX->getDrawUtil()->drawLine( l, t, l, b, colorWhite ); drawUtil->drawLine( l, t, l, b, colorWhite );
GFX->getDrawUtil()->drawLine( l, t, r2, t, colorWhite ); drawUtil->drawLine( l, t, r2, t, colorWhite );
GFX->getDrawUtil()->drawLine( l + 1, b, r2, b, mProfile->mBorderColor ); drawUtil->drawLine( l + 1, b, r2, b, mProfile->mBorderColor );
GFX->getDrawUtil()->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor ); drawUtil->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor );
} }
} }
@ -912,24 +914,24 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect )
} }
else else
{ {
GFX->getDrawUtil()->drawRectFill( r, mProfile->mFillColorHL ); drawUtil->drawRectFill( r, mProfile->mFillColorHL );
} }
// Draw a bitmap over the background? // Draw a bitmap over the background?
if ( mTextureNormal ) if ( mTextureNormal )
{ {
RectI rect( offset, mBitmapBounds ); RectI rect( offset, mBitmapBounds );
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect ); drawUtil->drawBitmapStretch( mTextureNormal, rect );
} }
// Do we render a bitmap border or lines? // Do we render a bitmap border or lines?
if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) ) if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) )
{ {
GFX->getDrawUtil()->drawLine( l, t, l, b, colorWhite ); drawUtil->drawLine( l, t, l, b, colorWhite );
GFX->getDrawUtil()->drawLine( l, t, r2, t, colorWhite ); drawUtil->drawLine( l, t, r2, t, colorWhite );
GFX->getDrawUtil()->drawLine( l + 1, b, r2, b, mProfile->mBorderColor ); drawUtil->drawLine( l + 1, b, r2, b, mProfile->mBorderColor );
GFX->getDrawUtil()->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor ); drawUtil->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor );
} }
} }
else else
@ -942,21 +944,21 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect )
} }
else else
{ {
GFX->getDrawUtil()->drawRectFill( r, mProfile->mFillColorNA ); drawUtil->drawRectFill( r, mProfile->mFillColorNA );
} }
// Draw a bitmap over the background? // Draw a bitmap over the background?
if ( mTextureNormal ) if ( mTextureNormal )
{ {
RectI rect(offset, mBitmapBounds); RectI rect(offset, mBitmapBounds);
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect ); drawUtil->drawBitmapStretch( mTextureNormal, rect );
} }
// Do we render a bitmap border or lines? // Do we render a bitmap border or lines?
if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) ) if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) )
{ {
GFX->getDrawUtil()->drawRect( r, mProfile->mBorderColorNA ); drawUtil->drawRect( r, mProfile->mBorderColorNA );
} }
} }
// renderSlightlyRaisedBox(r, mProfile); // Used to be the only 'else' condition to mInAction above. // renderSlightlyRaisedBox(r, mProfile); // Used to be the only 'else' condition to mInAction above.
@ -1027,8 +1029,8 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect )
{ {
Point2I coloredboxsize( 15, 10 ); Point2I coloredboxsize( 15, 10 );
RectI r( offset.x + mProfile->mTextOffset.x, offset.y + ( (getHeight() - coloredboxsize.y ) / 2 ), coloredboxsize.x, coloredboxsize.y ); RectI r( offset.x + mProfile->mTextOffset.x, offset.y + ( (getHeight() - coloredboxsize.y ) / 2 ), coloredboxsize.x, coloredboxsize.y );
GFX->getDrawUtil()->drawRectFill( r, boxColor); drawUtil->drawRectFill( r, boxColor);
GFX->getDrawUtil()->drawRect( r, ColorI(0,0,0)); drawUtil->drawRect( r, ColorI(0,0,0));
localStart.x += coloredboxsize.x + mProfile->mTextOffset.x; localStart.x += coloredboxsize.x + mProfile->mTextOffset.x;
} }
@ -1036,7 +1038,7 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect )
// Draw the text // Draw the text
Point2I globalStart = localToGlobalCoord( localStart ); Point2I globalStart = localToGlobalCoord( localStart );
ColorI fontColor = mActive ? ( mInAction ? mProfile->mFontColor : mProfile->mFontColorNA ) : mProfile->mFontColorNA; ColorI fontColor = mActive ? ( mInAction ? mProfile->mFontColor : mProfile->mFontColorNA ) : mProfile->mFontColorNA;
GFX->getDrawUtil()->setBitmapModulation( fontColor ); // was: (mProfile->mFontColor); drawUtil->setBitmapModulation( fontColor ); // was: (mProfile->mFontColor);
// Get the number of columns in the text // Get the number of columns in the text
S32 colcount = getColumnCount( mText, "\t" ); S32 colcount = getColumnCount( mText, "\t" );
@ -1048,7 +1050,7 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect )
// Draw the first column // Draw the first column
getColumn( mText, buff, 0, "\t" ); getColumn( mText, buff, 0, "\t" );
GFX->getDrawUtil()->drawText( mProfile->mFont, globalStart, buff, mProfile->mFontColors ); drawUtil->drawText( mProfile->mFont, globalStart, buff, mProfile->mFontColors );
// Draw the second column to the right // Draw the second column to the right
getColumn( mText, buff, 1, "\t" ); getColumn( mText, buff, 1, "\t" );
@ -1059,17 +1061,17 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect )
// right cap of the border. // right cap of the border.
RectI* bitmapBounds = mProfile->mBitmapArrayRects.address(); RectI* bitmapBounds = mProfile->mBitmapArrayRects.address();
Point2I textpos = localToGlobalCoord( Point2I( getWidth() - txt_w - bitmapBounds[2].extent.x, localStart.y ) ); Point2I textpos = localToGlobalCoord( Point2I( getWidth() - txt_w - bitmapBounds[2].extent.x, localStart.y ) );
GFX->getDrawUtil()->drawText( mProfile->mFont, textpos, buff, mProfile->mFontColors ); drawUtil->drawText( mProfile->mFont, textpos, buff, mProfile->mFontColors );
} else } else
{ {
Point2I textpos = localToGlobalCoord( Point2I( getWidth() - txt_w - 12, localStart.y ) ); Point2I textpos = localToGlobalCoord( Point2I( getWidth() - txt_w - 12, localStart.y ) );
GFX->getDrawUtil()->drawText( mProfile->mFont, textpos, buff, mProfile->mFontColors ); drawUtil->drawText( mProfile->mFont, textpos, buff, mProfile->mFontColors );
} }
} else } else
{ {
GFX->getDrawUtil()->drawText( mProfile->mFont, globalStart, mText, mProfile->mFontColors ); drawUtil->drawText( mProfile->mFont, globalStart, mText, mProfile->mFontColors );
} }
// If we're rendering a bitmap border, then it will take care of the arrow. // If we're rendering a bitmap border, then it will take care of the arrow.

View file

@ -1034,6 +1034,8 @@ void GuiPopUpMenuCtrlEx::onRender(Point2I offset, const RectI &updateRect)
if ( mScrollDir != GuiScrollCtrl::None ) if ( mScrollDir != GuiScrollCtrl::None )
autoScroll(); autoScroll();
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
RectI r( offset, getExtent() ); RectI r( offset, getExtent() );
if ( mInAction ) if ( mInAction )
{ {
@ -1050,30 +1052,30 @@ void GuiPopUpMenuCtrlEx::onRender(Point2I offset, const RectI &updateRect)
else else
{ {
//renderSlightlyLoweredBox(r, mProfile); //renderSlightlyLoweredBox(r, mProfile);
GFX->getDrawUtil()->drawRectFill( r, mProfile->mFillColor ); drawUtil->drawRectFill( r, mProfile->mFillColor );
} }
// Draw a bitmap over the background? // Draw a bitmap over the background?
if ( mTextureDepressed ) if ( mTextureDepressed )
{ {
RectI rect(offset, mBitmapBounds); RectI rect(offset, mBitmapBounds);
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretch( mTextureDepressed, rect ); drawUtil->drawBitmapStretch( mTextureDepressed, rect );
} }
else if ( mTextureNormal ) else if ( mTextureNormal )
{ {
RectI rect(offset, mBitmapBounds); RectI rect(offset, mBitmapBounds);
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect ); drawUtil->drawBitmapStretch( mTextureNormal, rect );
} }
// Do we render a bitmap border or lines? // Do we render a bitmap border or lines?
if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) ) if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) )
{ {
GFX->getDrawUtil()->drawLine( l, t, l, b, colorWhite ); drawUtil->drawLine( l, t, l, b, colorWhite );
GFX->getDrawUtil()->drawLine( l, t, r2, t, colorWhite ); drawUtil->drawLine( l, t, r2, t, colorWhite );
GFX->getDrawUtil()->drawLine( l + 1, b, r2, b, mProfile->mBorderColor ); drawUtil->drawLine( l + 1, b, r2, b, mProfile->mBorderColor );
GFX->getDrawUtil()->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor ); drawUtil->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor );
} }
} }
@ -1094,24 +1096,24 @@ void GuiPopUpMenuCtrlEx::onRender(Point2I offset, const RectI &updateRect)
} }
else else
{ {
GFX->getDrawUtil()->drawRectFill( r, mProfile->mFillColorHL ); drawUtil->drawRectFill( r, mProfile->mFillColorHL );
} }
// Draw a bitmap over the background? // Draw a bitmap over the background?
if ( mTextureNormal ) if ( mTextureNormal )
{ {
RectI rect( offset, mBitmapBounds ); RectI rect( offset, mBitmapBounds );
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect ); drawUtil->drawBitmapStretch( mTextureNormal, rect );
} }
// Do we render a bitmap border or lines? // Do we render a bitmap border or lines?
if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) ) if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) )
{ {
GFX->getDrawUtil()->drawLine( l, t, l, b, colorWhite ); drawUtil->drawLine( l, t, l, b, colorWhite );
GFX->getDrawUtil()->drawLine( l, t, r2, t, colorWhite ); drawUtil->drawLine( l, t, r2, t, colorWhite );
GFX->getDrawUtil()->drawLine( l + 1, b, r2, b, mProfile->mBorderColor ); drawUtil->drawLine( l + 1, b, r2, b, mProfile->mBorderColor );
GFX->getDrawUtil()->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor ); drawUtil->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor );
} }
} }
else else
@ -1124,21 +1126,21 @@ void GuiPopUpMenuCtrlEx::onRender(Point2I offset, const RectI &updateRect)
} }
else else
{ {
GFX->getDrawUtil()->drawRectFill( r, mProfile->mFillColorNA ); drawUtil->drawRectFill( r, mProfile->mFillColorNA );
} }
// Draw a bitmap over the background? // Draw a bitmap over the background?
if ( mTextureNormal ) if ( mTextureNormal )
{ {
RectI rect(offset, mBitmapBounds); RectI rect(offset, mBitmapBounds);
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect ); drawUtil->drawBitmapStretch( mTextureNormal, rect );
} }
// Do we render a bitmap border or lines? // Do we render a bitmap border or lines?
if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) ) if ( !( mProfile->getChildrenProfile() && mProfile->mBitmapArrayRects.size() ) )
{ {
GFX->getDrawUtil()->drawRect( r, mProfile->mBorderColorNA ); drawUtil->drawRect( r, mProfile->mBorderColorNA );
} }
} }
// renderSlightlyRaisedBox(r, mProfile); // Used to be the only 'else' condition to mInAction above. // renderSlightlyRaisedBox(r, mProfile); // Used to be the only 'else' condition to mInAction above.
@ -1209,8 +1211,8 @@ void GuiPopUpMenuCtrlEx::onRender(Point2I offset, const RectI &updateRect)
{ {
Point2I coloredboxsize( 15, 10 ); Point2I coloredboxsize( 15, 10 );
RectI r( offset.x + mProfile->mTextOffset.x, offset.y + ( (getHeight() - coloredboxsize.y ) / 2 ), coloredboxsize.x, coloredboxsize.y ); RectI r( offset.x + mProfile->mTextOffset.x, offset.y + ( (getHeight() - coloredboxsize.y ) / 2 ), coloredboxsize.x, coloredboxsize.y );
GFX->getDrawUtil()->drawRectFill( r, boxColor); drawUtil->drawRectFill( r, boxColor);
GFX->getDrawUtil()->drawRect( r, ColorI(0,0,0)); drawUtil->drawRect( r, ColorI(0,0,0));
localStart.x += coloredboxsize.x + mProfile->mTextOffset.x; localStart.x += coloredboxsize.x + mProfile->mTextOffset.x;
} }
@ -1218,7 +1220,7 @@ void GuiPopUpMenuCtrlEx::onRender(Point2I offset, const RectI &updateRect)
// Draw the text // Draw the text
Point2I globalStart = localToGlobalCoord( localStart ); Point2I globalStart = localToGlobalCoord( localStart );
ColorI fontColor = mActive ? ( mInAction ? mProfile->mFontColor : mProfile->mFontColorNA ) : mProfile->mFontColorNA; ColorI fontColor = mActive ? ( mInAction ? mProfile->mFontColor : mProfile->mFontColorNA ) : mProfile->mFontColorNA;
GFX->getDrawUtil()->setBitmapModulation( fontColor ); // was: (mProfile->mFontColor); drawUtil->setBitmapModulation( fontColor ); // was: (mProfile->mFontColor);
// Get the number of columns in the text // Get the number of columns in the text
S32 colcount = getColumnCount( mText, "\t" ); S32 colcount = getColumnCount( mText, "\t" );
@ -1230,7 +1232,7 @@ void GuiPopUpMenuCtrlEx::onRender(Point2I offset, const RectI &updateRect)
// Draw the first column // Draw the first column
getColumn( mText, buff, 0, "\t" ); getColumn( mText, buff, 0, "\t" );
GFX->getDrawUtil()->drawText( mProfile->mFont, globalStart, buff, mProfile->mFontColors ); drawUtil->drawText( mProfile->mFont, globalStart, buff, mProfile->mFontColors );
// Draw the second column to the right // Draw the second column to the right
getColumn( mText, buff, 1, "\t" ); getColumn( mText, buff, 1, "\t" );
@ -1241,17 +1243,17 @@ void GuiPopUpMenuCtrlEx::onRender(Point2I offset, const RectI &updateRect)
// right cap of the border. // right cap of the border.
RectI* bitmapBounds = mProfile->mBitmapArrayRects.address(); RectI* bitmapBounds = mProfile->mBitmapArrayRects.address();
Point2I textpos = localToGlobalCoord( Point2I( getWidth() - txt_w - bitmapBounds[2].extent.x, localStart.y ) ); Point2I textpos = localToGlobalCoord( Point2I( getWidth() - txt_w - bitmapBounds[2].extent.x, localStart.y ) );
GFX->getDrawUtil()->drawText( mProfile->mFont, textpos, buff, mProfile->mFontColors ); drawUtil->drawText( mProfile->mFont, textpos, buff, mProfile->mFontColors );
} else } else
{ {
Point2I textpos = localToGlobalCoord( Point2I( getWidth() - txt_w - 12, localStart.y ) ); Point2I textpos = localToGlobalCoord( Point2I( getWidth() - txt_w - 12, localStart.y ) );
GFX->getDrawUtil()->drawText( mProfile->mFont, textpos, buff, mProfile->mFontColors ); drawUtil->drawText( mProfile->mFont, textpos, buff, mProfile->mFontColors );
} }
} else } else
{ {
GFX->getDrawUtil()->drawText( mProfile->mFont, globalStart, mText, mProfile->mFontColors ); drawUtil->drawText( mProfile->mFont, globalStart, mText, mProfile->mFontColors );
} }
// If we're rendering a bitmap border, then it will take care of the arrow. // If we're rendering a bitmap border, then it will take care of the arrow.

View file

@ -363,6 +363,8 @@ void GuiSliderCtrl::onRender(Point2I offset, const RectI &updateRect)
Point2I ext(getWidth() - mShiftExtent, getHeight()); Point2I ext(getWidth() - mShiftExtent, getHeight());
RectI thumb = mThumb; RectI thumb = mThumb;
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
if( mHasTexture ) if( mHasTexture )
{ {
if(mTicks > 0) if(mTicks > 0)
@ -402,12 +404,12 @@ void GuiSliderCtrl::onRender(Point2I offset, const RectI &updateRect)
S32 index = SliderButtonNormal; S32 index = SliderButtonNormal;
if(mMouseOver) if(mMouseOver)
index = SliderButtonHighlight; index = SliderButtonHighlight;
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
//left border //left border
GFX->getDrawUtil()->drawBitmapSR(mProfile->mTextureObject, Point2I(offset.x,offset.y), mBitmapBounds[SliderLineLeft]); drawUtil->drawBitmapSR(mProfile->mTextureObject, Point2I(offset.x,offset.y), mBitmapBounds[SliderLineLeft]);
//right border //right border
GFX->getDrawUtil()->drawBitmapSR(mProfile->mTextureObject, Point2I(offset.x + getWidth() - mBitmapBounds[SliderLineRight].extent.x, offset.y), mBitmapBounds[SliderLineRight]); drawUtil->drawBitmapSR(mProfile->mTextureObject, Point2I(offset.x + getWidth() - mBitmapBounds[SliderLineRight].extent.x, offset.y), mBitmapBounds[SliderLineRight]);
//draw our center piece to our slider control's border and stretch it //draw our center piece to our slider control's border and stretch it
@ -421,11 +423,11 @@ void GuiSliderCtrl::onRender(Point2I offset, const RectI &updateRect)
stretchRect = mBitmapBounds[SliderLineCenter]; stretchRect = mBitmapBounds[SliderLineCenter];
stretchRect.inset(1,0); stretchRect.inset(1,0);
GFX->getDrawUtil()->drawBitmapStretchSR(mProfile->mTextureObject, destRect, stretchRect); drawUtil->drawBitmapStretchSR(mProfile->mTextureObject, destRect, stretchRect);
//draw our control slider button //draw our control slider button
thumb.point += pos; thumb.point += pos;
GFX->getDrawUtil()->drawBitmapSR(mProfile->mTextureObject,Point2I(thumb.point.x,offset.y ),mBitmapBounds[index]); drawUtil->drawBitmapSR(mProfile->mTextureObject,Point2I(thumb.point.x,offset.y ),mBitmapBounds[index]);
} }
else if (getWidth() >= getHeight()) else if (getWidth() >= getHeight())
@ -490,8 +492,8 @@ void GuiSliderCtrl::onRender(Point2I offset, const RectI &updateRect)
else if(textStart.x + txt_w > offset.x+getWidth()) else if(textStart.x + txt_w > offset.x+getWidth())
textStart.x -=((textStart.x + txt_w) - (offset.x+getWidth())); textStart.x -=((textStart.x + txt_w) - (offset.x+getWidth()));
GFX->getDrawUtil()->setBitmapModulation(mProfile->mFontColor); drawUtil->setBitmapModulation(mProfile->mFontColor);
GFX->getDrawUtil()->drawText(mProfile->mFont, textStart, buf, mProfile->mFontColors); drawUtil->drawText(mProfile->mFont, textStart, buf, mProfile->mFontColors);
} }
renderChildControls(offset, updateRect); renderChildControls(offset, updateRect);
} }

View file

@ -465,6 +465,8 @@ bool GuiControl::defaultTooltipRender( const Point2I &hoverPos, const Point2I &c
GFont *font = mTooltipProfile->mFont; GFont *font = mTooltipProfile->mFont;
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
// Support for multi-line tooltip text... // Support for multi-line tooltip text...
Vector<U32> startLineOffsets, lineLengths; Vector<U32> startLineOffsets, lineLengths;
@ -521,12 +523,12 @@ bool GuiControl::defaultTooltipRender( const Point2I &hoverPos, const Point2I &c
GFX->setClipRect( rect ); GFX->setClipRect( rect );
// Draw Filler bit, then border on top of that // Draw Filler bit, then border on top of that
GFX->getDrawUtil()->drawRectFill( rect, mTooltipProfile->mFillColor ); drawUtil->drawRectFill( rect, mTooltipProfile->mFillColor );
GFX->getDrawUtil()->drawRect( rect, mTooltipProfile->mBorderColor ); drawUtil->drawRect( rect, mTooltipProfile->mBorderColor );
// Draw the text centered in the tool tip box... // Draw the text centered in the tool tip box...
GFX->getDrawUtil()->setBitmapModulation( mTooltipProfile->mFontColor ); drawUtil->setBitmapModulation( mTooltipProfile->mFontColor );
for ( U32 i = 0; i < lineLengths.size(); i++ ) for ( U32 i = 0; i < lineLengths.size(); i++ )
{ {
@ -534,7 +536,7 @@ bool GuiControl::defaultTooltipRender( const Point2I &hoverPos, const Point2I &c
const UTF8 *line = renderTip.c_str() + startLineOffsets[i]; const UTF8 *line = renderTip.c_str() + startLineOffsets[i];
U32 lineLen = lineLengths[i]; U32 lineLen = lineLengths[i];
GFX->getDrawUtil()->drawTextN( font, start + offset, line, lineLen, mProfile->mFontColors ); drawUtil->drawTextN( font, start + offset, line, lineLen, mProfile->mFontColors );
} }
GFX->setClipRect( oldClip ); GFX->setClipRect( oldClip );

View file

@ -41,15 +41,17 @@ void renderRaisedBox( const RectI &bounds, GuiControlProfile *profile )
S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x - 1; S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x - 1;
S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - 1; S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - 1;
GFX->getDrawUtil()->drawRectFill( bounds, profile->mFillColor); GFXDrawUtil* drawUtil = GFX->getDrawUtil();
GFX->getDrawUtil()->drawLine(l, t, l, b - 1, colorWhite);
GFX->getDrawUtil()->drawLine(l, t, r - 1, t, colorWhite);
GFX->getDrawUtil()->drawLine(l, b, r, b, colorBlack); drawUtil->drawRectFill( bounds, profile->mFillColor);
GFX->getDrawUtil()->drawLine(r, b - 1, r, t, colorBlack); drawUtil->drawLine(l, t, l, b - 1, colorWhite);
drawUtil->drawLine(l, t, r - 1, t, colorWhite);
GFX->getDrawUtil()->drawLine(l + 1, b - 1, r - 1, b - 1, profile->mBorderColor); drawUtil->drawLine(l, b, r, b, colorBlack);
GFX->getDrawUtil()->drawLine(r - 1, b - 2, r - 1, t + 1, profile->mBorderColor); drawUtil->drawLine(r, b - 1, r, t, colorBlack);
drawUtil->drawLine(l + 1, b - 1, r - 1, b - 1, profile->mBorderColor);
drawUtil->drawLine(r - 1, b - 2, r - 1, t + 1, profile->mBorderColor);
} }
void renderSlightlyRaisedBox( const RectI &bounds, GuiControlProfile *profile ) void renderSlightlyRaisedBox( const RectI &bounds, GuiControlProfile *profile )
@ -70,16 +72,18 @@ void renderLoweredBox( const RectI &bounds, GuiControlProfile *profile )
S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x - 1; S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x - 1;
S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - 1; S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - 1;
GFX->getDrawUtil()->drawRectFill( bounds, profile->mFillColor); GFXDrawUtil* drawUtil = GFX->getDrawUtil();
GFX->getDrawUtil()->drawLine(l, b, r, b, colorWhite); drawUtil->drawRectFill( bounds, profile->mFillColor);
GFX->getDrawUtil()->drawLine(r, b - 1, r, t, colorWhite);
GFX->getDrawUtil()->drawLine(l, t, r - 1, t, colorBlack); drawUtil->drawLine(l, b, r, b, colorWhite);
GFX->getDrawUtil()->drawLine(l, t + 1, l, b - 1, colorBlack); drawUtil->drawLine(r, b - 1, r, t, colorWhite);
GFX->getDrawUtil()->drawLine(l + 1, t + 1, r - 2, t + 1, profile->mBorderColor); drawUtil->drawLine(l, t, r - 1, t, colorBlack);
GFX->getDrawUtil()->drawLine(l + 1, t + 2, l + 1, b - 2, profile->mBorderColor); drawUtil->drawLine(l, t + 1, l, b - 1, colorBlack);
drawUtil->drawLine(l + 1, t + 1, r - 2, t + 1, profile->mBorderColor);
drawUtil->drawLine(l + 1, t + 2, l + 1, b - 2, profile->mBorderColor);
} }
void renderSlightlyLoweredBox( const RectI &bounds, GuiControlProfile *profile ) void renderSlightlyLoweredBox( const RectI &bounds, GuiControlProfile *profile )
@ -87,11 +91,13 @@ void renderSlightlyLoweredBox( const RectI &bounds, GuiControlProfile *profile )
S32 l = bounds.point.x + 1, r = bounds.point.x + bounds.extent.x - 1; S32 l = bounds.point.x + 1, r = bounds.point.x + bounds.extent.x - 1;
S32 t = bounds.point.y + 1, b = bounds.point.y + bounds.extent.y - 1; S32 t = bounds.point.y + 1, b = bounds.point.y + bounds.extent.y - 1;
GFX->getDrawUtil()->drawRectFill( bounds, profile->mFillColor); GFXDrawUtil* drawUtil = GFX->getDrawUtil();
GFX->getDrawUtil()->drawLine(l, b, r, b, profile->mBorderColor);
GFX->getDrawUtil()->drawLine(r, t, r, b - 1, profile->mBorderColor); drawUtil->drawRectFill( bounds, profile->mFillColor);
GFX->getDrawUtil()->drawLine(l, t, l, b - 1, profile->mBorderColor); drawUtil->drawLine(l, b, r, b, profile->mBorderColor);
GFX->getDrawUtil()->drawLine(l + 1, t, r - 1, t, profile->mBorderColor); drawUtil->drawLine(r, t, r, b - 1, profile->mBorderColor);
drawUtil->drawLine(l, t, l, b - 1, profile->mBorderColor);
drawUtil->drawLine(l + 1, t, r - 1, t, profile->mBorderColor);
} }
void renderBorder( const RectI &bounds, GuiControlProfile *profile ) void renderBorder( const RectI &bounds, GuiControlProfile *profile )

View file

@ -1278,12 +1278,13 @@ void GuiMenuBar::onMouseUp(const GuiEvent &event)
void GuiMenuBar::onRender(Point2I offset, const RectI &updateRect) void GuiMenuBar::onRender(Point2I offset, const RectI &updateRect)
{ {
RectI ctrlRect(offset, getExtent()); RectI ctrlRect(offset, getExtent());
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
//if opaque, fill the update rect with the fill color //if opaque, fill the update rect with the fill color
if (mProfile->mOpaque) if (mProfile->mOpaque)
GFX->getDrawUtil()->drawRectFill(RectI(offset, getExtent()), mProfile->mFillColor); drawUtil->drawRectFill(RectI(offset, getExtent()), mProfile->mFillColor);
//if there's a border, draw the border //if there's a border, draw the border
if (mProfile->mBorder) if (mProfile->mBorder)
@ -1327,20 +1328,20 @@ void GuiMenuBar::onRender(Point2I offset, const RectI &updateRect)
Point2I bitmapstart(start); Point2I bitmapstart(start);
bitmapstart.y = walk->bounds.point.y + ( walk->bounds.extent.y - rect.extent.y ) / 2; bitmapstart.y = walk->bounds.point.y + ( walk->bounds.extent.y - rect.extent.y ) / 2;
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
GFX->getDrawUtil()->drawBitmapSR( mProfile->mTextureObject, offset + bitmapstart, rect); drawUtil->drawBitmapSR( mProfile->mTextureObject, offset + bitmapstart, rect);
// Should we also draw the text? // Should we also draw the text?
if(!walk->drawBitmapOnly) if(!walk->drawBitmapOnly)
{ {
start.x += mBitmapMargin; start.x += mBitmapMargin;
GFX->getDrawUtil()->setBitmapModulation( fontColor ); drawUtil->setBitmapModulation( fontColor );
GFX->getDrawUtil()->drawText( mProfile->mFont, start + offset, walk->text, mProfile->mFontColors ); drawUtil->drawText( mProfile->mFont, start + offset, walk->text, mProfile->mFontColors );
} }
} else } else
{ {
GFX->getDrawUtil()->setBitmapModulation( fontColor ); drawUtil->setBitmapModulation( fontColor );
GFX->getDrawUtil()->drawText( mProfile->mFont, start + offset, walk->text, mProfile->mFontColors ); drawUtil->drawText( mProfile->mFont, start + offset, walk->text, mProfile->mFontColors );
} }
} }

View file

@ -287,33 +287,35 @@ void GuiRectHandles::onRender(Point2I offset, const RectI &updateRect)
Point2I size(extent.x*mHandleRect.extent.x, extent.y*mHandleRect.extent.y); Point2I size(extent.x*mHandleRect.extent.x, extent.y*mHandleRect.extent.y);
RectI box(offset+pos, size); RectI box(offset+pos, size);
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
// Draw border // Draw border
GFX->getDrawUtil()->drawRect(box, handleColor); drawUtil->drawRect(box, handleColor);
// Draw each handle // Draw each handle
Point2I handleSize(mHandleSize, mHandleSize); Point2I handleSize(mHandleSize, mHandleSize);
RectI handleRect(box.point, handleSize); RectI handleRect(box.point, handleSize);
GFX->getDrawUtil()->drawRectFill(handleRect, handleColor); // Upper left drawUtil->drawRectFill(handleRect, handleColor); // Upper left
handleRect.point = Point2I(box.point.x+size.x-handleSize.x, box.point.y); handleRect.point = Point2I(box.point.x+size.x-handleSize.x, box.point.y);
GFX->getDrawUtil()->drawRectFill(handleRect, handleColor); // Upper right drawUtil->drawRectFill(handleRect, handleColor); // Upper right
handleRect.point = Point2I(box.point.x, box.point.y+size.y-handleSize.y); handleRect.point = Point2I(box.point.x, box.point.y+size.y-handleSize.y);
GFX->getDrawUtil()->drawRectFill(handleRect, handleColor); // Lower left drawUtil->drawRectFill(handleRect, handleColor); // Lower left
handleRect.point = Point2I(box.point.x+size.x-handleSize.x, box.point.y+size.y-handleSize.y); handleRect.point = Point2I(box.point.x+size.x-handleSize.x, box.point.y+size.y-handleSize.y);
GFX->getDrawUtil()->drawRectFill(handleRect, handleColor); // Lower right drawUtil->drawRectFill(handleRect, handleColor); // Lower right
Point2I halfSize = size / 2; Point2I halfSize = size / 2;
Point2I halfHandleSize = handleSize / 2; Point2I halfHandleSize = handleSize / 2;
handleRect.point = Point2I(box.point.x+halfSize.x-halfHandleSize.x, box.point.y); handleRect.point = Point2I(box.point.x+halfSize.x-halfHandleSize.x, box.point.y);
GFX->getDrawUtil()->drawRectFill(handleRect, handleColor); // Upper middle drawUtil->drawRectFill(handleRect, handleColor); // Upper middle
handleRect.point = Point2I(box.point.x+halfSize.x-halfHandleSize.x, box.point.y+size.y-handleSize.y); handleRect.point = Point2I(box.point.x+halfSize.x-halfHandleSize.x, box.point.y+size.y-handleSize.y);
GFX->getDrawUtil()->drawRectFill(handleRect, handleColor); // Lower middle drawUtil->drawRectFill(handleRect, handleColor); // Lower middle
handleRect.point = Point2I(box.point.x, box.point.y+halfSize.y-halfHandleSize.y); handleRect.point = Point2I(box.point.x, box.point.y+halfSize.y-halfHandleSize.y);
GFX->getDrawUtil()->drawRectFill(handleRect, handleColor); // Left middle drawUtil->drawRectFill(handleRect, handleColor); // Left middle
handleRect.point = Point2I(box.point.x+size.x-handleSize.x, box.point.y+halfSize.y-halfHandleSize.y); handleRect.point = Point2I(box.point.x+size.x-handleSize.x, box.point.y+halfSize.y-halfHandleSize.y);
GFX->getDrawUtil()->drawRectFill(handleRect, handleColor); // Right middle drawUtil->drawRectFill(handleRect, handleColor); // Right middle
handleRect.point = Point2I(box.point.x+halfSize.x-halfHandleSize.x, box.point.y+halfSize.y-halfHandleSize.y); handleRect.point = Point2I(box.point.x+halfSize.x-halfHandleSize.x, box.point.y+halfSize.y-halfHandleSize.y);
GFX->getDrawUtil()->drawRectFill(handleRect, handleColor); // Middle drawUtil->drawRectFill(handleRect, handleColor); // Middle
renderChildControls(offset, updateRect); renderChildControls(offset, updateRect);
} }

View file

@ -330,10 +330,11 @@ void GuiShapeEdPreview::setCurrentDetail(S32 dl)
{ {
if ( mModel ) if ( mModel )
{ {
S32 smallest = mModel->getShape()->mSmallestVisibleDL; TSShape* shape = mModel->getShape();
mModel->getShape()->mSmallestVisibleDL = mModel->getShape()->details.size()-1; S32 smallest = shape->mSmallestVisibleDL;
shape->mSmallestVisibleDL = shape->details.size() - 1;
mModel->setCurrentDetail( dl ); mModel->setCurrentDetail( dl );
mModel->getShape()->mSmallestVisibleDL = smallest; shape->mSmallestVisibleDL = smallest;
// Match the camera distance to this detail if necessary // Match the camera distance to this detail if necessary
//@todo if ( !gui->mFixedDetail ) //@todo if ( !gui->mFixedDetail )
@ -359,19 +360,21 @@ bool GuiShapeEdPreview::setObjectModel(const char* modelName)
mModel = new TSShapeInstance( model, true ); mModel = new TSShapeInstance( model, true );
AssertFatal( mModel, avar("GuiShapeEdPreview: Failed to load model %s. Please check your model name and load a valid model.", modelName )); AssertFatal( mModel, avar("GuiShapeEdPreview: Failed to load model %s. Please check your model name and load a valid model.", modelName ));
TSShape* shape = mModel->getShape();
// Initialize camera values: // Initialize camera values:
mOrbitPos = mModel->getShape()->center; mOrbitPos = shape->center;
// Set camera move and zoom speed according to model size // Set camera move and zoom speed according to model size
mMoveSpeed = mModel->getShape()->radius / sMoveScaler; mMoveSpeed = shape->radius / sMoveScaler;
mZoomSpeed = mModel->getShape()->radius / sZoomScaler; mZoomSpeed = shape->radius / sZoomScaler;
// Reset node selection // Reset node selection
mHoverNode = -1; mHoverNode = -1;
mSelectedNode = -1; mSelectedNode = -1;
mSelectedObject = -1; mSelectedObject = -1;
mSelectedObjDetail = 0; mSelectedObjDetail = 0;
mProjectedNodes.setSize( mModel->getShape()->nodes.size() ); mProjectedNodes.setSize( shape->nodes.size() );
// Reset detail stats // Reset detail stats
mCurrentDL = 0; mCurrentDL = 0;
@ -683,9 +686,11 @@ void GuiShapeEdPreview::refreshShape()
mModel->initNodeTransforms(); mModel->initNodeTransforms();
mModel->initMeshObjects(); mModel->initMeshObjects();
mProjectedNodes.setSize( mModel->getShape()->nodes.size() ); TSShape* shape = mModel->getShape();
if ( mSelectedObject >= mModel->getShape()->objects.size() ) mProjectedNodes.setSize( shape->nodes.size() );
if ( mSelectedObject >= shape->objects.size() )
{ {
mSelectedObject = -1; mSelectedObject = -1;
mSelectedObjDetail = 0; mSelectedObjDetail = 0;
@ -694,22 +699,22 @@ void GuiShapeEdPreview::refreshShape()
// Re-compute the collision mesh stats // Re-compute the collision mesh stats
mColMeshes = 0; mColMeshes = 0;
mColPolys = 0; mColPolys = 0;
for ( S32 i = 0; i < mModel->getShape()->details.size(); i++ ) for ( S32 i = 0; i < shape->details.size(); i++ )
{ {
const TSShape::Detail& det = mModel->getShape()->details[i]; const TSShape::Detail& det = shape->details[i];
const String& detName = mModel->getShape()->getName( det.nameIndex ); const String& detName = shape->getName( det.nameIndex );
if ( ( det.subShapeNum < 0 ) || !detName.startsWith( "collision-" ) ) if ( ( det.subShapeNum < 0 ) || !detName.startsWith( "collision-" ) )
continue; continue;
mColPolys += det.polyCount; mColPolys += det.polyCount;
S32 od = det.objectDetailNum; S32 od = det.objectDetailNum;
S32 start = mModel->getShape()->subShapeFirstObject[det.subShapeNum]; S32 start = shape->subShapeFirstObject[det.subShapeNum];
S32 end = start + mModel->getShape()->subShapeNumObjects[det.subShapeNum]; S32 end = start + shape->subShapeNumObjects[det.subShapeNum];
for ( S32 j = start; j < end; j++ ) for ( S32 j = start; j < end; j++ )
{ {
const TSShape::Object &obj = mModel->getShape()->objects[j]; const TSShape::Object &obj = shape->objects[j];
const TSMesh* mesh = ( od < obj.numMeshes ) ? mModel->getShape()->meshes[obj.startMeshIndex + od] : NULL; const TSMesh* mesh = ( od < obj.numMeshes ) ? shape->meshes[obj.startMeshIndex + od] : NULL;
if ( mesh ) if ( mesh )
mColMeshes++; mColMeshes++;
} }
@ -1542,10 +1547,12 @@ void GuiShapeEdPreview::renderSunDirection() const
GFXStateBlockDesc desc; GFXStateBlockDesc desc;
desc.setZReadWrite( true, true ); desc.setZReadWrite( true, true );
GFX->getDrawUtil()->drawArrow( desc, start, end, color ); GFXDrawUtil* drawUtil = GFX->getDrawUtil();
GFX->getDrawUtil()->drawArrow( desc, start + up, end + up, color );
GFX->getDrawUtil()->drawArrow( desc, start + right, end + right, color ); drawUtil->drawArrow( desc, start, end, color );
GFX->getDrawUtil()->drawArrow( desc, start + up + right, end + up + right, color ); drawUtil->drawArrow( desc, start + up, end + up, color );
drawUtil->drawArrow( desc, start + right, end + right, color );
drawUtil->drawArrow( desc, start + up + right, end + up + right, color );
} }
} }

View file

@ -206,8 +206,10 @@ void GuiProgressBitmapCtrl::onRender(Point2I offset, const RectI &updateRect)
mDim = getHeight(); mDim = getHeight();
else else
mDim = getWidth(); mDim = getWidth();
GFXDrawUtil* drawUtil = GFX->getDrawUtil();
GFX->getDrawUtil()->clearBitmapModulation(); drawUtil->clearBitmapModulation();
if(mNumberOfBitmaps == 1) if(mNumberOfBitmaps == 1)
{ {
@ -218,14 +220,14 @@ void GuiProgressBitmapCtrl::onRender(Point2I offset, const RectI &updateRect)
//drawing stretch bitmap //drawing stretch bitmap
RectI progressRect = ctrlRect; RectI progressRect = ctrlRect;
progressRect.extent.x = width; progressRect.extent.x = width;
GFX->getDrawUtil()->drawBitmapStretchSR(mProfile->mTextureObject, progressRect, mProfile->mBitmapArrayRects[0]); drawUtil->drawBitmapStretchSR(mProfile->mTextureObject, progressRect, mProfile->mBitmapArrayRects[0]);
} }
} }
else if(mNumberOfBitmaps >= 3) else if(mNumberOfBitmaps >= 3)
{ {
//drawing left-end bitmap //drawing left-end bitmap
RectI progressRectLeft(ctrlRect.point.x, ctrlRect.point.y, mDim, mDim); RectI progressRectLeft(ctrlRect.point.x, ctrlRect.point.y, mDim, mDim);
GFX->getDrawUtil()->drawBitmapStretchSR(mProfile->mTextureObject, progressRectLeft, mProfile->mBitmapArrayRects[0]); drawUtil->drawBitmapStretchSR(mProfile->mTextureObject, progressRectLeft, mProfile->mBitmapArrayRects[0]);
//draw the progress with image //draw the progress with image
S32 width = (S32)((F32)(getWidth()) * mProgress); S32 width = (S32)((F32)(getWidth()) * mProgress);
@ -237,11 +239,11 @@ void GuiProgressBitmapCtrl::onRender(Point2I offset, const RectI &updateRect)
progressRect.extent.x = (width - mDim - mDim); progressRect.extent.x = (width - mDim - mDim);
if (progressRect.extent.x < 0) if (progressRect.extent.x < 0)
progressRect.extent.x = 0; progressRect.extent.x = 0;
GFX->getDrawUtil()->drawBitmapStretchSR(mProfile->mTextureObject, progressRect, mProfile->mBitmapArrayRects[1]); drawUtil->drawBitmapStretchSR(mProfile->mTextureObject, progressRect, mProfile->mBitmapArrayRects[1]);
//drawing right-end bitmap //drawing right-end bitmap
RectI progressRectRight(progressRect.point.x + progressRect.extent.x, ctrlRect.point.y, mDim, mDim ); RectI progressRectRight(progressRect.point.x + progressRect.extent.x, ctrlRect.point.y, mDim, mDim );
GFX->getDrawUtil()->drawBitmapStretchSR(mProfile->mTextureObject, progressRectRight, mProfile->mBitmapArrayRects[2]); drawUtil->drawBitmapStretchSR(mProfile->mTextureObject, progressRectRight, mProfile->mBitmapArrayRects[2]);
} }
} }
else else
@ -249,7 +251,7 @@ void GuiProgressBitmapCtrl::onRender(Point2I offset, const RectI &updateRect)
//if there's a border, draw it //if there's a border, draw it
if (mProfile->mBorder) if (mProfile->mBorder)
GFX->getDrawUtil()->drawRect(ctrlRect, mProfile->mBorderColor); drawUtil->drawRect(ctrlRect, mProfile->mBorderColor);
Parent::onRender( offset, updateRect ); Parent::onRender( offset, updateRect );

View file

@ -575,12 +575,13 @@ void MessageVector::registerSpectator(SpectatorCallback callBack, void *spectato
} }
mSpectators.increment(); mSpectators.increment();
mSpectators.last().callback = callBack; SpectatorRef& lastSpectatorRef = mSpectators.last();
mSpectators.last().key = spectatorKey; lastSpectatorRef.callback = callBack;
lastSpectatorRef.key = spectatorKey;
// Need to message this spectator of all the lines currently inserted... // Need to message this spectator of all the lines currently inserted...
for (i = 0; i < mMessageLines.size(); i++) { for (i = 0; i < mMessageLines.size(); i++) {
(*mSpectators.last().callback)(mSpectators.last().key, (*lastSpectatorRef.callback)(lastSpectatorRef.key,
LineInserted, i); LineInserted, i);
} }
} }

View file

@ -1449,14 +1449,15 @@ void TerrainEditor::renderSelection( const Selection & sel, const ColorF & inCol
// walk the points in the selection // walk the points in the selection
for(U32 i = 0; i < sel.size(); i++) for(U32 i = 0; i < sel.size(); i++)
{ {
Point2I gPos = sel[i].mGridPoint.gridPos; GridPoint selectedGridPoint = sel[i].mGridPoint;
Point2I gPos = selectedGridPoint.gridPos;
GFXVertexPC *verts = &(vertexBuffer[i * 5]); GFXVertexPC *verts = &(vertexBuffer[i * 5]);
bool center = gridToWorld(sel[i].mGridPoint, verts[0].point); bool center = gridToWorld(selectedGridPoint, verts[0].point);
gridToWorld(Point2I(gPos.x + 1, gPos.y), verts[1].point, sel[i].mGridPoint.terrainBlock); gridToWorld(Point2I(gPos.x + 1, gPos.y), verts[1].point, selectedGridPoint.terrainBlock);
gridToWorld(Point2I(gPos.x + 1, gPos.y + 1), verts[2].point, sel[i].mGridPoint.terrainBlock); gridToWorld(Point2I(gPos.x + 1, gPos.y + 1), verts[2].point, selectedGridPoint.terrainBlock);
gridToWorld(Point2I(gPos.x, gPos.y + 1), verts[3].point, sel[i].mGridPoint.terrainBlock); gridToWorld(Point2I(gPos.x, gPos.y + 1), verts[3].point, selectedGridPoint.terrainBlock);
verts[4].point = verts[0].point; verts[4].point = verts[0].point;
F32 weight = sel[i].mWeight; F32 weight = sel[i].mWeight;

View file

@ -1631,10 +1631,11 @@ void WorldEditor::renderScreenObj( SceneObject *obj, const Point3F& projPos, con
// Save an IconObject for performing icon-click testing later. // Save an IconObject for performing icon-click testing later.
mIcons.increment(); mIcons.increment();
mIcons.last().object = obj; IconObject& lastIcon = mIcons.last();
mIcons.last().rect = renderRect; lastIcon.object = obj;
mIcons.last().dist = projPos.z; lastIcon.rect = renderRect;
mIcons.last().alpha = iconAlpha; lastIcon.dist = projPos.z;
lastIcon.alpha = iconAlpha;
} }
// //

View file

@ -1012,13 +1012,14 @@ void SceneLighting::processCache()
// go through and remove the best candidate first (sorted reverse) // go through and remove the best candidate first (sorted reverse)
while(((curCacheSize >> 10) > quota) && files.size()) while(((curCacheSize >> 10) > quota) && files.size())
{ {
curCacheSize -= files.last().mFileObject->getSize(); CacheEntry& lastFile = files.last();
curCacheSize -= lastFile.mFileObject->getSize();
// no sneaky names // no sneaky names
if(!dStrstr(files.last().mFileName, "..")) if (!dStrstr(lastFile.mFileName, ".."))
{ {
Con::warnf("Removing lighting file '%s'.", files.last().mFileName); Con::warnf("Removing lighting file '%s'.", lastFile.mFileName);
dFileDelete(files.last().mFileName); dFileDelete(lastFile.mFileName);
} }
files.pop_back(); files.pop_back();

View file

@ -811,14 +811,16 @@ void PostEffect::_setupConstants( const SceneRenderState *state )
lightDir.y * (6378.0f * 1000.0f), lightDir.y * (6378.0f * 1000.0f),
lightDir.z * (6378.0f * 1000.0f) ); lightDir.z * (6378.0f * 1000.0f) );
RectI viewPort = GFX->getViewport();
// Get the screen space sun position. // Get the screen space sun position.
MathUtils::mProjectWorldToScreen( lightPos, &sunPos, GFX->getViewport(), tmp, proj ); MathUtils::mProjectWorldToScreen(lightPos, &sunPos, viewPort, tmp, proj);
// And normalize it to the 0 to 1 range. // And normalize it to the 0 to 1 range.
sunPos.x -= (F32)GFX->getViewport().point.x; sunPos.x -= (F32)viewPort.point.x;
sunPos.y -= (F32)GFX->getViewport().point.y; sunPos.y -= (F32)viewPort.point.y;
sunPos.x /= (F32)GFX->getViewport().extent.x; sunPos.x /= (F32)viewPort.extent.x;
sunPos.y /= (F32)GFX->getViewport().extent.y; sunPos.y /= (F32)viewPort.extent.y;
mShaderConsts->set( mScreenSunPosSC, Point2F( sunPos.x, sunPos.y ) ); mShaderConsts->set( mScreenSunPosSC, Point2F( sunPos.x, sunPos.y ) );
} }

View file

@ -815,8 +815,10 @@ bool SceneCullingState::isOccludedByTerrain( SceneObject* object ) const
if( !terrain ) if( !terrain )
continue; continue;
MatrixF terrWorldTransform = terrain->getWorldTransform();
Point3F localCamPos = getCameraState().getViewPosition(); Point3F localCamPos = getCameraState().getViewPosition();
terrain->getWorldTransform().mulP( localCamPos ); terrWorldTransform.mulP(localCamPos);
F32 height; F32 height;
terrain->getHeight( Point2F( localCamPos.x, localCamPos.y ), &height ); terrain->getHeight( Point2F( localCamPos.x, localCamPos.y ), &height );
bool aboveTerrain = ( height <= localCamPos.z ); bool aboveTerrain = ( height <= localCamPos.z );
@ -837,10 +839,10 @@ bool SceneCullingState::isOccludedByTerrain( SceneObject* object ) const
Point3F ll(rBox.maxExtents.x, rBox.minExtents.y, rBox.maxExtents.z); Point3F ll(rBox.maxExtents.x, rBox.minExtents.y, rBox.maxExtents.z);
Point3F lr(rBox.maxExtents.x, rBox.maxExtents.y, rBox.maxExtents.z); Point3F lr(rBox.maxExtents.x, rBox.maxExtents.y, rBox.maxExtents.z);
terrain->getWorldTransform().mulP(ul); terrWorldTransform.mulP(ul);
terrain->getWorldTransform().mulP(ur); terrWorldTransform.mulP(ur);
terrain->getWorldTransform().mulP(ll); terrWorldTransform.mulP(ll);
terrain->getWorldTransform().mulP(lr); terrWorldTransform.mulP(lr);
Point3F xBaseL0_s = ul - localCamPos; Point3F xBaseL0_s = ul - localCamPos;
Point3F xBaseL0_e = lr - localCamPos; Point3F xBaseL0_e = lr - localCamPos;

View file

@ -1353,15 +1353,16 @@ F32 SceneContainer::containerSearchCurrRadiusDist()
return 0.0; return 0.0;
Point3F pos; Point3F pos;
(*mSearchList[mCurrSearchPos])->getWorldBox().getCenter(&pos); Box3F worldBox = (*mSearchList[mCurrSearchPos])->getWorldBox();
worldBox.getCenter(&pos);
F32 dist = (pos - mSearchReferencePoint).len(); F32 dist = (pos - mSearchReferencePoint).len();
F32 min = (*mSearchList[mCurrSearchPos])->getWorldBox().len_x(); F32 min = worldBox.len_x();
if ((*mSearchList[mCurrSearchPos])->getWorldBox().len_y() < min) if (worldBox.len_y() < min)
min = (*mSearchList[mCurrSearchPos])->getWorldBox().len_y(); min = worldBox.len_y();
if ((*mSearchList[mCurrSearchPos])->getWorldBox().len_z() < min) if (worldBox.len_z() < min)
min = (*mSearchList[mCurrSearchPos])->getWorldBox().len_z(); min = worldBox.len_z();
dist -= min; dist -= min;
if (dist < 0) if (dist < 0)

View file

@ -279,10 +279,11 @@ void TerrainConvex::getFeatures(const MatrixF& mat,const VectorF& n, ConvexFeatu
cf->mFaceList.increment(numFaces); cf->mFaceList.increment(numFaces);
for (i = 0; i < numFaces; i++) for (i = 0; i < numFaces; i++)
{ {
cf->mFaceList[faceListStart + i].normal = normal[fp[i * 4 + 0]]; ConvexFeature::Face& face = cf->mFaceList[faceListStart + i];
cf->mFaceList[faceListStart + i].vertex[0] = vertexCount + fp[i * 4 + 1]; face.normal = normal[fp[i * 4 + 0]];
cf->mFaceList[faceListStart + i].vertex[1] = vertexCount + fp[i * 4 + 2]; face.vertex[0] = vertexCount + fp[i * 4 + 1];
cf->mFaceList[faceListStart + i].vertex[2] = vertexCount + fp[i * 4 + 3]; face.vertex[1] = vertexCount + fp[i * 4 + 2];
face.vertex[2] = vertexCount + fp[i * 4 + 3];
} }
} }

View file

@ -283,11 +283,12 @@ void TSShapeLoader::recurseSubshape(AppNode* appNode, S32 parentIndex, bool recu
// Create the 3space node // Create the 3space node
shape->nodes.increment(); shape->nodes.increment();
shape->nodes.last().nameIndex = shape->addName(nodeName); TSShape::Node& lastNode = shape->nodes.last();
shape->nodes.last().parentIndex = parentIndex; lastNode.nameIndex = shape->addName(nodeName);
shape->nodes.last().firstObject = -1; lastNode.parentIndex = parentIndex;
shape->nodes.last().firstChild = -1; lastNode.firstObject = -1;
shape->nodes.last().nextSibling = -1; lastNode.firstChild = -1;
lastNode.nextSibling = -1;
// Add the AppNode to a matching list (so AppNodes can be accessed using 3space // Add the AppNode to a matching list (so AppNodes can be accessed using 3space
// node indices) // node indices)
@ -323,12 +324,14 @@ void TSShapeLoader::recurseSubshape(AppNode* appNode, S32 parentIndex, bool recu
appNode->getBool("BB::INCLUDE_POLES", includePoles); appNode->getBool("BB::INCLUDE_POLES", includePoles);
S32 detIndex = shape->addDetail( "bbDetail", size, -1 ); S32 detIndex = shape->addDetail( "bbDetail", size, -1 );
shape->details[detIndex].bbEquatorSteps = numEquatorSteps;
shape->details[detIndex].bbPolarSteps = numPolarSteps; TSShape::Detail& detIndexDetail = shape->details[detIndex];
shape->details[detIndex].bbDetailLevel = dl; detIndexDetail.bbEquatorSteps = numEquatorSteps;
shape->details[detIndex].bbDimension = dim; detIndexDetail.bbPolarSteps = numPolarSteps;
shape->details[detIndex].bbIncludePoles = includePoles; detIndexDetail.bbDetailLevel = dl;
shape->details[detIndex].bbPolarAngle = polarAngle; detIndexDetail.bbDimension = dim;
detIndexDetail.bbIncludePoles = includePoles;
detIndexDetail.bbPolarAngle = polarAngle;
} }
} }
} }
@ -462,10 +465,11 @@ void TSShapeLoader::generateObjects()
if (!lastName || (meshNames[iMesh] != *lastName)) if (!lastName || (meshNames[iMesh] != *lastName))
{ {
shape->objects.increment(); shape->objects.increment();
shape->objects.last().nameIndex = shape->addName(meshNames[iMesh]); TSShape::Object& lastObject = shape->objects.last();
shape->objects.last().nodeIndex = subshape->objNodes[iMesh]; lastObject.nameIndex = shape->addName(meshNames[iMesh]);
shape->objects.last().startMeshIndex = appMeshes.size(); lastObject.nodeIndex = subshape->objNodes[iMesh];
shape->objects.last().numMeshes = 0; lastObject.startMeshIndex = appMeshes.size();
lastObject.numMeshes = 0;
lastName = &meshNames[iMesh]; lastName = &meshNames[iMesh];
} }
@ -1190,10 +1194,12 @@ void TSShapeLoader::install()
shape->meshes.push_back(NULL); shape->meshes.push_back(NULL);
shape->objects.increment(); shape->objects.increment();
shape->objects.last().nameIndex = shape->addName("dummy");
shape->objects.last().nodeIndex = 0; TSShape::Object& lastObject = shape->objects.last();
shape->objects.last().startMeshIndex = 0; lastObject.nameIndex = shape->addName("dummy");
shape->objects.last().numMeshes = 1; lastObject.nodeIndex = 0;
lastObject.startMeshIndex = 0;
lastObject.numMeshes = 1;
shape->objectStates.increment(); shape->objectStates.increment();
shape->objectStates.last().frameIndex = 0; shape->objectStates.last().frameIndex = 0;

View file

@ -88,16 +88,18 @@ void TSShapeInstance::animateNodes(S32 ss)
{ {
TSThread * th = mThreadList[i]; TSThread * th = mThreadList[i];
if (th->getSequence()->isBlend()) const TSShape::Sequence* threadSequence = th->getSequence();
if (threadSequence->isBlend())
{ {
// blend sequences need default (if not set by other sequence) // blend sequences need default (if not set by other sequence)
// break rather than continue because the rest will be blends too // break rather than continue because the rest will be blends too
firstBlend = i; firstBlend = i;
break; break;
} }
rotBeenSet.takeAway(th->getSequence()->rotationMatters); rotBeenSet.takeAway(threadSequence->rotationMatters);
tranBeenSet.takeAway(th->getSequence()->translationMatters); tranBeenSet.takeAway(threadSequence->translationMatters);
scaleBeenSet.takeAway(th->getSequence()->scaleMatters); scaleBeenSet.takeAway(threadSequence->scaleMatters);
} }
rotBeenSet.takeAway(mCallbackNodes); rotBeenSet.takeAway(mCallbackNodes);
rotBeenSet.takeAway(mHandsOffNodes); rotBeenSet.takeAway(mHandsOffNodes);
@ -576,9 +578,12 @@ void TSShapeInstance::handleBlendSequence(TSThread * thread, S32 a, S32 b)
S32 jrot=0; S32 jrot=0;
S32 jtrans=0; S32 jtrans=0;
S32 jscale=0; S32 jscale=0;
TSIntegerSet nodeMatters = thread->getSequence()->translationMatters;
nodeMatters.overlap(thread->getSequence()->rotationMatters); const TSShape::Sequence* threadSequence = thread->getSequence();
nodeMatters.overlap(thread->getSequence()->scaleMatters);
TSIntegerSet nodeMatters = threadSequence->translationMatters;
nodeMatters.overlap(threadSequence->rotationMatters);
nodeMatters.overlap(threadSequence->scaleMatters);
nodeMatters.takeAway(mHandsOffNodes); nodeMatters.takeAway(mHandsOffNodes);
S32 start = nodeMatters.start(); S32 start = nodeMatters.start();
S32 end = b; S32 end = b;
@ -587,50 +592,50 @@ void TSShapeInstance::handleBlendSequence(TSThread * thread, S32 a, S32 b)
// skip nodes outside of this detail // skip nodes outside of this detail
if (start<a || mDisableBlendNodes.test(nodeIndex)) if (start<a || mDisableBlendNodes.test(nodeIndex))
{ {
if (thread->getSequence()->rotationMatters.test(nodeIndex)) if (threadSequence->rotationMatters.test(nodeIndex))
jrot++; jrot++;
if (thread->getSequence()->translationMatters.test(nodeIndex)) if (threadSequence->translationMatters.test(nodeIndex))
jtrans++; jtrans++;
if (thread->getSequence()->scaleMatters.test(nodeIndex)) if (threadSequence->scaleMatters.test(nodeIndex))
jscale++; jscale++;
continue; continue;
} }
MatrixF mat(true); MatrixF mat(true);
if (thread->getSequence()->rotationMatters.test(nodeIndex)) if (threadSequence->rotationMatters.test(nodeIndex))
{ {
QuatF q1,q2; QuatF q1,q2;
mShape->getRotation(*thread->getSequence(),thread->keyNum1,jrot,&q1); mShape->getRotation(*threadSequence,thread->keyNum1,jrot,&q1);
mShape->getRotation(*thread->getSequence(),thread->keyNum2,jrot,&q2); mShape->getRotation(*threadSequence,thread->keyNum2,jrot,&q2);
QuatF quat; QuatF quat;
TSTransform::interpolate(q1,q2,thread->keyPos,&quat); TSTransform::interpolate(q1,q2,thread->keyPos,&quat);
TSTransform::setMatrix(quat,&mat); TSTransform::setMatrix(quat,&mat);
jrot++; jrot++;
} }
if (thread->getSequence()->translationMatters.test(nodeIndex)) if (threadSequence->translationMatters.test(nodeIndex))
{ {
const Point3F & p1 = mShape->getTranslation(*thread->getSequence(),thread->keyNum1,jtrans); const Point3F & p1 = mShape->getTranslation(*threadSequence,thread->keyNum1,jtrans);
const Point3F & p2 = mShape->getTranslation(*thread->getSequence(),thread->keyNum2,jtrans); const Point3F & p2 = mShape->getTranslation(*threadSequence,thread->keyNum2,jtrans);
Point3F p; Point3F p;
TSTransform::interpolate(p1,p2,thread->keyPos,&p); TSTransform::interpolate(p1,p2,thread->keyPos,&p);
mat.setColumn(3,p); mat.setColumn(3,p);
jtrans++; jtrans++;
} }
if (thread->getSequence()->scaleMatters.test(nodeIndex)) if (threadSequence->scaleMatters.test(nodeIndex))
{ {
if (thread->getSequence()->animatesUniformScale()) if (threadSequence->animatesUniformScale())
{ {
F32 s1 = mShape->getUniformScale(*thread->getSequence(),thread->keyNum1,jscale); F32 s1 = mShape->getUniformScale(*threadSequence,thread->keyNum1,jscale);
F32 s2 = mShape->getUniformScale(*thread->getSequence(),thread->keyNum2,jscale); F32 s2 = mShape->getUniformScale(*threadSequence,thread->keyNum2,jscale);
F32 scale = TSTransform::interpolate(s1,s2,thread->keyPos); F32 scale = TSTransform::interpolate(s1,s2,thread->keyPos);
TSTransform::applyScale(scale,&mat); TSTransform::applyScale(scale,&mat);
} }
else if (animatesAlignedScale()) else if (animatesAlignedScale())
{ {
Point3F s1 = mShape->getAlignedScale(*thread->getSequence(),thread->keyNum1,jscale); Point3F s1 = mShape->getAlignedScale(*threadSequence,thread->keyNum1,jscale);
Point3F s2 = mShape->getAlignedScale(*thread->getSequence(),thread->keyNum2,jscale); Point3F s2 = mShape->getAlignedScale(*threadSequence,thread->keyNum2,jscale);
Point3F scale; Point3F scale;
TSTransform::interpolate(s1,s2,thread->keyPos,&scale); TSTransform::interpolate(s1,s2,thread->keyPos,&scale);
TSTransform::applyScale(scale,&mat); TSTransform::applyScale(scale,&mat);
@ -638,8 +643,8 @@ void TSShapeInstance::handleBlendSequence(TSThread * thread, S32 a, S32 b)
else else
{ {
TSScale s1,s2; TSScale s1,s2;
mShape->getArbitraryScale(*thread->getSequence(),thread->keyNum1,jscale,&s1); mShape->getArbitraryScale(*threadSequence,thread->keyNum1,jscale,&s1);
mShape->getArbitraryScale(*thread->getSequence(),thread->keyNum2,jscale,&s2); mShape->getArbitraryScale(*threadSequence,thread->keyNum2,jscale,&s2);
TSScale scale; TSScale scale;
TSTransform::interpolate(s1,s2,thread->keyPos,&scale); TSTransform::interpolate(s1,s2,thread->keyPos,&scale);
TSTransform::applyScale(scale,&mat); TSTransform::applyScale(scale,&mat);
@ -686,15 +691,17 @@ void TSShapeInstance::animateVisibility(S32 ss)
{ {
TSThread * th = mThreadList[i]; TSThread * th = mThreadList[i];
const TSShape::Sequence* threadSequence = th->getSequence();
// For better or worse, object states are stored together (frame, // For better or worse, object states are stored together (frame,
// matFrame, visibility all in one structure). Thus, indexing into // matFrame, visibility all in one structure). Thus, indexing into
// object state array for animation for any of these attributes needs to // object state array for animation for any of these attributes needs to
// take into account whether or not the other attributes are also animated. // take into account whether or not the other attributes are also animated.
// The object states should eventually be separated (like the node states were) // The object states should eventually be separated (like the node states were)
// in order to save memory and save the following step. // in order to save memory and save the following step.
TSIntegerSet objectMatters = th->getSequence()->frameMatters; TSIntegerSet objectMatters = threadSequence->frameMatters;
objectMatters.overlap(th->getSequence()->matFrameMatters); objectMatters.overlap(threadSequence->matFrameMatters);
objectMatters.overlap(th->getSequence()->visMatters); objectMatters.overlap(threadSequence->visMatters);
// skip to beginning of this sub-shape // skip to beginning of this sub-shape
S32 j=0; S32 j=0;
@ -702,10 +709,10 @@ void TSShapeInstance::animateVisibility(S32 ss)
S32 end = b; S32 end = b;
for (S32 objectIndex = start; objectIndex<end; objectMatters.next(objectIndex), j++) for (S32 objectIndex = start; objectIndex<end; objectMatters.next(objectIndex), j++)
{ {
if (!beenSet.test(objectIndex) && th->getSequence()->visMatters.test(objectIndex)) if (!beenSet.test(objectIndex) && threadSequence->visMatters.test(objectIndex))
{ {
F32 state1 = mShape->getObjectState(*th->getSequence(),th->keyNum1,j).vis; F32 state1 = mShape->getObjectState(*threadSequence,th->keyNum1,j).vis;
F32 state2 = mShape->getObjectState(*th->getSequence(),th->keyNum2,j).vis; F32 state2 = mShape->getObjectState(*threadSequence,th->keyNum2,j).vis;
if ((state1-state2) * (state1-state2) > 0.99f) if ((state1-state2) * (state1-state2) > 0.99f)
// goes from 0 to 1 -- discreet jump // goes from 0 to 1 -- discreet jump
mMeshObjects[objectIndex].visible = th->keyPos<0.5f ? state1 : state2; mMeshObjects[objectIndex].visible = th->keyPos<0.5f ? state1 : state2;
@ -747,15 +754,17 @@ void TSShapeInstance::animateFrame(S32 ss)
{ {
TSThread * th = mThreadList[i]; TSThread * th = mThreadList[i];
const TSShape::Sequence* threadSequence = th->getSequence();
// For better or worse, object states are stored together (frame, // For better or worse, object states are stored together (frame,
// matFrame, visibility all in one structure). Thus, indexing into // matFrame, visibility all in one structure). Thus, indexing into
// object state array for animation for any of these attributes needs to // object state array for animation for any of these attributes needs to
// take into account whether or not the other attributes are also animated. // take into account whether or not the other attributes are also animated.
// The object states should eventually be separated (like the node states were) // The object states should eventually be separated (like the node states were)
// in order to save memory and save the following step. // in order to save memory and save the following step.
TSIntegerSet objectMatters = th->getSequence()->frameMatters; TSIntegerSet objectMatters = threadSequence->frameMatters;
objectMatters.overlap(th->getSequence()->matFrameMatters); objectMatters.overlap(threadSequence->matFrameMatters);
objectMatters.overlap(th->getSequence()->visMatters); objectMatters.overlap(threadSequence->visMatters);
// skip to beginning of this sub-shape // skip to beginning of this sub-shape
S32 j=0; S32 j=0;
@ -763,10 +772,10 @@ void TSShapeInstance::animateFrame(S32 ss)
S32 end = b; S32 end = b;
for (S32 objectIndex = start; objectIndex<end; objectMatters.next(objectIndex), j++) for (S32 objectIndex = start; objectIndex<end; objectMatters.next(objectIndex), j++)
{ {
if (!beenSet.test(objectIndex) && th->getSequence()->frameMatters.test(objectIndex)) if (!beenSet.test(objectIndex) && threadSequence->frameMatters.test(objectIndex))
{ {
S32 key = (th->keyPos<0.5f) ? th->keyNum1 : th->keyNum2; S32 key = (th->keyPos<0.5f) ? th->keyNum1 : th->keyNum2;
mMeshObjects[objectIndex].frame = mShape->getObjectState(*th->getSequence(),key,j).frameIndex; mMeshObjects[objectIndex].frame = mShape->getObjectState(*threadSequence,key,j).frameIndex;
// record change so that later threads don't over-write us... // record change so that later threads don't over-write us...
beenSet.set(objectIndex); beenSet.set(objectIndex);
@ -802,15 +811,17 @@ void TSShapeInstance::animateMatFrame(S32 ss)
{ {
TSThread * th = mThreadList[i]; TSThread * th = mThreadList[i];
const TSShape::Sequence* threadSequence = th->getSequence();
// For better or worse, object states are stored together (frame, // For better or worse, object states are stored together (frame,
// matFrame, visibility all in one structure). Thus, indexing into // matFrame, visibility all in one structure). Thus, indexing into
// object state array for animation for any of these attributes needs to // object state array for animation for any of these attributes needs to
// take into account whether or not the other attributes are also animated. // take into account whether or not the other attributes are also animated.
// The object states should eventually be separated (like the node states were) // The object states should eventually be separated (like the node states were)
// in order to save memory and save the following step. // in order to save memory and save the following step.
TSIntegerSet objectMatters = th->getSequence()->frameMatters; TSIntegerSet objectMatters = threadSequence->frameMatters;
objectMatters.overlap(th->getSequence()->matFrameMatters); objectMatters.overlap(threadSequence->matFrameMatters);
objectMatters.overlap(th->getSequence()->visMatters); objectMatters.overlap(threadSequence->visMatters);
// skip to beginining of this sub-shape // skip to beginining of this sub-shape
S32 j=0; S32 j=0;
@ -818,10 +829,10 @@ void TSShapeInstance::animateMatFrame(S32 ss)
S32 end = b; S32 end = b;
for (S32 objectIndex = start; objectIndex<end; objectMatters.next(objectIndex), j++) for (S32 objectIndex = start; objectIndex<end; objectMatters.next(objectIndex), j++)
{ {
if (!beenSet.test(objectIndex) && th->getSequence()->matFrameMatters.test(objectIndex)) if (!beenSet.test(objectIndex) && threadSequence->matFrameMatters.test(objectIndex))
{ {
S32 key = (th->keyPos<0.5f) ? th->keyNum1 : th->keyNum2; S32 key = (th->keyPos<0.5f) ? th->keyNum1 : th->keyNum2;
mMeshObjects[objectIndex].matFrame = mShape->getObjectState(*th->getSequence(),key,j).matFrameIndex; mMeshObjects[objectIndex].matFrame = mShape->getObjectState(*threadSequence,key,j).matFrameIndex;
// record change so that later threads don't over-write us... // record change so that later threads don't over-write us...
beenSet.set(objectIndex); beenSet.set(objectIndex);

View file

@ -171,19 +171,21 @@ void TSShapeInstance::dump(Stream & stream)
bool foundSkin = false; bool foundSkin = false;
for (i=0; i<mShape->objects.size(); i++) for (i=0; i<mShape->objects.size(); i++)
{ {
if (mShape->objects[i].nodeIndex<0) // must be a skin TSShape::Object& currentObject = mShape->objects[i];
if (currentObject.nodeIndex<0) // must be a skin
{ {
if (!foundSkin) if (!foundSkin)
dumpLine("\r\n Skins:\r\n"); dumpLine("\r\n Skins:\r\n");
foundSkin=true; foundSkin=true;
const char * skinName = ""; const char * skinName = "";
S32 nameIndex = mShape->objects[i].nameIndex; S32 nameIndex = currentObject.nameIndex;
if (nameIndex>=0) if (nameIndex>=0)
skinName = mShape->getName(nameIndex); skinName = mShape->getName(nameIndex);
dumpLine(avar(" Skin %s with following details: ",skinName)); dumpLine(avar(" Skin %s with following details: ",skinName));
for (S32 num=0; num<mShape->objects[i].numMeshes; num++) for (S32 num=0; num<currentObject.numMeshes; num++)
{ {
if (mShape->meshes[mShape->objects[i].startMeshIndex + num]) if (mShape->meshes[currentObject.startMeshIndex + num])
dumpLine(avar(" %i",(S32)mShape->details[num].size)); dumpLine(avar(" %i",(S32)mShape->details[num].size));
} }
dumpLine("\r\n"); dumpLine("\r\n");

View file

@ -447,11 +447,13 @@ bool TSMesh::getFeatures( S32 frame, const MatrixF& mat, const VectorF&, ConvexF
cf->mVertexList[base + indices[start + j + 2]]); cf->mVertexList[base + indices[start + j + 2]]);
cf->mFaceList.increment(); cf->mFaceList.increment();
cf->mFaceList.last().normal = plane;
cf->mFaceList.last().vertex[0] = base + indices[start + j + 0]; ConvexFeature::Face& lastFace = cf->mFaceList.last();
cf->mFaceList.last().vertex[1] = base + indices[start + j + 1]; lastFace.normal = plane;
cf->mFaceList.last().vertex[2] = base + indices[start + j + 2];
lastFace.vertex[0] = base + indices[start + j + 0];
lastFace.vertex[1] = base + indices[start + j + 1];
lastFace.vertex[2] = base + indices[start + j + 2];
for ( U32 l = 0; l < 3; l++ ) for ( U32 l = 0; l < 3; l++ )
{ {
@ -514,8 +516,9 @@ bool TSMesh::getFeatures( S32 frame, const MatrixF& mat, const VectorF&, ConvexF
S32 k; S32 k;
for ( k = 0; k < cf->mEdgeList.size(); k++ ) for ( k = 0; k < cf->mEdgeList.size(); k++ )
{ {
if ( cf->mEdgeList[k].vertex[0] == newEdge0 && ConvexFeature::Edge currentEdge = cf->mEdgeList[k];
cf->mEdgeList[k].vertex[1] == newEdge1) if (currentEdge.vertex[0] == newEdge0 &&
currentEdge.vertex[1] == newEdge1)
{ {
found = true; found = true;
break; break;
@ -1437,10 +1440,12 @@ void TSSkinMesh::createBatchData()
} }
bt->_tmpVec->increment(); bt->_tmpVec->increment();
bt->_tmpVec->last().vert = batchData.initialVerts[curTransform.vertexIndex];
bt->_tmpVec->last().normal = batchData.initialNorms[curTransform.vertexIndex]; BatchData::BatchedVertWeight& tempLast = bt->_tmpVec->last();
bt->_tmpVec->last().weight = transformOp.weight; tempLast.vert = batchData.initialVerts[curTransform.vertexIndex];
bt->_tmpVec->last().vidx = curTransform.vertexIndex; tempLast.normal = batchData.initialNorms[curTransform.vertexIndex];
tempLast.weight = transformOp.weight;
tempLast.vidx = curTransform.vertexIndex;
} }
} }

View file

@ -443,10 +443,11 @@ void MeshFit::addSphere( F32 radius, const Point3F& center )
mesh->computeBounds(); mesh->computeBounds();
mMeshes.increment(); mMeshes.increment();
mMeshes.last().type = MeshFit::Sphere; MeshFit::Mesh& lastMesh = mMeshes.last();
mMeshes.last().transform.identity(); lastMesh.type = MeshFit::Sphere;
mMeshes.last().transform.setPosition( center ); lastMesh.transform.identity();
mMeshes.last().tsmesh = mesh; lastMesh.transform.setPosition(center);
lastMesh.tsmesh = mesh;
} }
void MeshFit::fitSphere() void MeshFit::fitSphere()
@ -603,11 +604,12 @@ void MeshFit::fitK_DOP( const Vector<Point3F>& planes )
// Create TSMesh from convex hull // Create TSMesh from convex hull
mMeshes.increment(); mMeshes.increment();
mMeshes.last().type = MeshFit::Hull; MeshFit::Mesh& lastMesh = mMeshes.last();
mMeshes.last().transform.identity(); lastMesh.type = MeshFit::Hull;
mMeshes.last().tsmesh = createTriMesh( result.mOutputVertices, result.mNumOutputVertices, lastMesh.transform.identity();
lastMesh.tsmesh = createTriMesh(result.mOutputVertices, result.mNumOutputVertices,
result.mIndices, result.mNumFaces ); result.mIndices, result.mNumFaces );
mMeshes.last().tsmesh->computeBounds(); lastMesh.tsmesh->computeBounds();
} }
//--------------------------- //---------------------------
@ -702,10 +704,11 @@ void MeshFit::fitConvexHulls( U32 depth, F32 mergeThreshold, F32 concavityThresh
{ {
// Create TSMesh from convex hull // Create TSMesh from convex hull
mMeshes.increment(); mMeshes.increment();
mMeshes.last().type = MeshFit::Hull; MeshFit::Mesh& lastMesh = mMeshes.last();
mMeshes.last().transform.identity(); lastMesh.type = MeshFit::Hull;
mMeshes.last().tsmesh = createTriMesh( result.mVertices, result.mVcount, result.mIndices, result.mTcount ); lastMesh.transform.identity();
mMeshes.last().tsmesh->computeBounds(); lastMesh.tsmesh = createTriMesh(result.mVertices, result.mVcount, result.mIndices, result.mTcount);
lastMesh.tsmesh->computeBounds();
} }
} }

View file

@ -286,13 +286,15 @@ void TSThread::activateTriggers(F32 a, F32 b)
S32 bIndex = numTriggers+firstTrigger; // initialized to handle case where pos past all triggers S32 bIndex = numTriggers+firstTrigger; // initialized to handle case where pos past all triggers
for (i=firstTrigger; i<numTriggers+firstTrigger; i++) for (i=firstTrigger; i<numTriggers+firstTrigger; i++)
{ {
TSShape::Trigger currentTrigger = shape->triggers[i];
// is a between this trigger and previous one... // is a between this trigger and previous one...
if (a>lastPos && a<=shape->triggers[i].pos) if (a>lastPos && a <= currentTrigger.pos)
aIndex = i; aIndex = i;
// is b between this trigger and previous one... // is b between this trigger and previous one...
if (b>lastPos && b<=shape->triggers[i].pos) if (b>lastPos && b <= currentTrigger.pos)
bIndex = i; bIndex = i;
lastPos = shape->triggers[i].pos; lastPos = currentTrigger.pos;
} }
// activate triggers between aIndex and bIndex (depends on direction) // activate triggers between aIndex and bIndex (depends on direction)
@ -578,19 +580,21 @@ void TSShapeInstance::transitionToSequence(TSThread * thread, S32 seq, F32 pos,
setDirty(AllDirtyMask); setDirty(AllDirtyMask);
mGroundThread = NULL; mGroundThread = NULL;
if (mScaleCurrentlyAnimated && !thread->getSequence()->animatesScale()) const TSShape::Sequence* threadSequence = thread->getSequence();
if (mScaleCurrentlyAnimated && !threadSequence->animatesScale())
checkScaleCurrentlyAnimated(); checkScaleCurrentlyAnimated();
else if (!mScaleCurrentlyAnimated && thread->getSequence()->animatesScale()) else if (!mScaleCurrentlyAnimated && threadSequence->animatesScale())
mScaleCurrentlyAnimated=true; mScaleCurrentlyAnimated=true;
mTransitionRotationNodes.overlap(thread->transitionData.oldRotationNodes); mTransitionRotationNodes.overlap(thread->transitionData.oldRotationNodes);
mTransitionRotationNodes.overlap(thread->getSequence()->rotationMatters); mTransitionRotationNodes.overlap(threadSequence->rotationMatters);
mTransitionTranslationNodes.overlap(thread->transitionData.oldTranslationNodes); mTransitionTranslationNodes.overlap(thread->transitionData.oldTranslationNodes);
mTransitionTranslationNodes.overlap(thread->getSequence()->translationMatters); mTransitionTranslationNodes.overlap(threadSequence->translationMatters);
mTransitionScaleNodes.overlap(thread->transitionData.oldScaleNodes); mTransitionScaleNodes.overlap(thread->transitionData.oldScaleNodes);
mTransitionScaleNodes.overlap(thread->getSequence()->scaleMatters); mTransitionScaleNodes.overlap(threadSequence->scaleMatters);
// if we aren't already in the list of transition threads, add us now // if we aren't already in the list of transition threads, add us now
S32 i; S32 i;

View file

@ -182,10 +182,11 @@ BOOL Win32WindowManager::MonitorRegionEnumProc(HMONITOR hMonitor, HDC hdcMonitor
Vector<RectI> * regions = (Vector<RectI>*)dwData; Vector<RectI> * regions = (Vector<RectI>*)dwData;
regions->increment(); regions->increment();
regions->last().point.x = lprcMonitor->left; RectI& lastRegion = regions->last();
regions->last().point.y = lprcMonitor->top; lastRegion.point.x = lprcMonitor->left;
regions->last().extent.x = lprcMonitor->right - lprcMonitor->left; lastRegion.point.y = lprcMonitor->top;
regions->last().extent.y = lprcMonitor->bottom - lprcMonitor->top; lastRegion.extent.x = lprcMonitor->right - lprcMonitor->left;
lastRegion.extent.y = lprcMonitor->bottom - lprcMonitor->top;
return true; return true;
} }