Browse Source

Issue found with PVS-Studio:

Many instances of a function or expression being used repeatedly, which can lower performance.

Fixed it in these cases by creating on local var, reference or pointer that's used instead.
Areloch 10 years ago
parent
commit
2002d74b78
38 changed files with 465 additions and 371 deletions
  1. 7 5
      Engine/source/T3D/fps/guiClockHud.cpp
  2. 7 5
      Engine/source/T3D/fps/guiHealthTextHud.cpp
  3. 7 5
      Engine/source/T3D/fps/guiShapeNameHud.cpp
  4. 6 4
      Engine/source/T3D/tsStatic.cpp
  5. 5 4
      Engine/source/environment/scatterSky.cpp
  6. 5 4
      Engine/source/forest/editor/forestSelectionTool.cpp
  7. 7 6
      Engine/source/gfx/gFont.cpp
  8. 5 4
      Engine/source/gfx/gfxTextureManager.cpp
  9. 5 4
      Engine/source/gfx/gfxVertexFormat.cpp
  10. 26 24
      Engine/source/gui/containers/guiScrollCtrl.cpp
  11. 20 18
      Engine/source/gui/containers/guiWindowCtrl.cpp
  12. 12 10
      Engine/source/gui/controls/guiBitmapBorderCtrl.cpp
  13. 7 5
      Engine/source/gui/controls/guiGameListMenuCtrl.cpp
  14. 17 12
      Engine/source/gui/controls/guiGradientCtrl.cpp
  15. 29 27
      Engine/source/gui/controls/guiPopUpCtrl.cpp
  16. 29 27
      Engine/source/gui/controls/guiPopUpCtrlEx.cpp
  17. 9 7
      Engine/source/gui/controls/guiSliderCtrl.cpp
  18. 6 4
      Engine/source/gui/core/guiControl.cpp
  19. 25 19
      Engine/source/gui/core/guiDefaultControlRender.cpp
  20. 9 8
      Engine/source/gui/editor/guiMenuBar.cpp
  21. 12 10
      Engine/source/gui/editor/guiRectHandles.cpp
  22. 27 20
      Engine/source/gui/editor/guiShapeEdPreview.cpp
  23. 8 6
      Engine/source/gui/game/guiProgressBitmapCtrl.cpp
  24. 4 3
      Engine/source/gui/utility/messageVector.cpp
  25. 6 5
      Engine/source/gui/worldEditor/terrainEditor.cpp
  26. 5 4
      Engine/source/gui/worldEditor/worldEditor.cpp
  27. 5 4
      Engine/source/lighting/common/sceneLighting.cpp
  28. 7 5
      Engine/source/postFx/postEffect.cpp
  29. 7 5
      Engine/source/scene/culling/sceneCullingState.cpp
  30. 7 6
      Engine/source/scene/sceneContainer.cpp
  31. 5 4
      Engine/source/terrain/terrCollision.cpp
  32. 25 19
      Engine/source/ts/loader/tsShapeLoader.cpp
  33. 51 40
      Engine/source/ts/tsAnimate.cpp
  34. 6 4
      Engine/source/ts/tsDump.cpp
  35. 15 10
      Engine/source/ts/tsMesh.cpp
  36. 15 12
      Engine/source/ts/tsMeshFit.cpp
  37. 12 8
      Engine/source/ts/tsThread.cpp
  38. 5 4
      Engine/source/windowManager/win32/win32WindowMgr.cpp

+ 7 - 5
Engine/source/T3D/fps/guiClockHud.cpp

@@ -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);
-   GFX->getDrawUtil()->drawText(mProfile->mFont, offset, buf);
-   GFX->getDrawUtil()->clearBitmapModulation();
+   drawUtil->setBitmapModulation(mTextColor);
+   drawUtil->drawText(mProfile->mFont, offset, buf);
+   drawUtil->clearBitmapModulation();
 
 
    // Border last
    // Border last
    if (mShowFrame)
    if (mShowFrame)
-      GFX->getDrawUtil()->drawRect(updateRect, mFrameColor);
+      drawUtil->drawRect(updateRect, mFrameColor);
 }
 }
 
 
 
 

+ 7 - 5
Engine/source/T3D/fps/guiHealthTextHud.cpp

@@ -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);    
-   GFX->getDrawUtil()->drawText(mProfile->mFont, offset, buf);    
-   GFX->getDrawUtil()->clearBitmapModulation();    
+   drawUtil->setBitmapModulation(tColor);    
+   drawUtil->drawText(mProfile->mFont, offset, buf);    
+   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);  
 }  
 }  

+ 7 - 5
Engine/source/T3D/fps/guiShapeNameHud.cpp

@@ -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);
-   GFX->getDrawUtil()->drawText(mProfile->mFont, offset + mLabelPadding, name);
-   GFX->getDrawUtil()->clearBitmapModulation();
+   drawUtil->setBitmapModulation(mTextColor);
+   drawUtil->drawText(mProfile->mFont, offset + mLabelPadding, name);
+   drawUtil->clearBitmapModulation();
 
 
    // Border last
    // Border last
    if (mShowLabelFrame)
    if (mShowLabelFrame)
-      GFX->getDrawUtil()->drawRect(RectI(offset, extent), mLabelFrameColor);
+      drawUtil->drawRect(RectI(offset, extent), mLabelFrameColor);
 }
 }
 
 

+ 6 - 4
Engine/source/T3D/tsStatic.cpp

@@ -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];
-   object->getShape()->materialList->mMatInstList[matIndex] = newMat->createMatInstance();
+   delete shapeMaterialList->mMatInstList[matIndex];
+   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 *, (),,

+ 5 - 4
Engine/source/environment/scatterSky.cpp

@@ -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);
    }
    }
 }
 }
 
 

+ 5 - 4
Engine/source/forest/editor/forestSelectionTool.cpp

@@ -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;
-      F32 right = (mDragRect.point.x - mEditor->getPosition().x + mDragRect.extent.x) * hscale - wwidth;
-      F32 top = wheight - vscale * (mDragRect.point.y - mEditor->getPosition().y);
-      F32 bottom = wheight - vscale * (mDragRect.point.y - mEditor->getPosition().y + mDragRect.extent.y);
+      Point2I editorPosition = mEditor->getPosition();
+      F32 left = (mDragRect.point.x - editorPosition.x) * hscale - wwidth;
+      F32 right = (mDragRect.point.x - editorPosition.x + mDragRect.extent.x) * hscale - wwidth;
+      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 );      

+ 7 - 6
Engine/source/gfx/gFont.cpp

@@ -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());
-      glyphList.last().charId = i;
+      GlyphMap& lastGlyphMap = glyphList.last();
+      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].height = glyphList.last().bitmap->getHeight();
+      mCharInfoList[i].width = lastGlyphMap.bitmap->getWidth();
+      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;

+ 5 - 4
Engine/source/gfx/gfxTextureManager.cpp

@@ -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;
       }
       }
    }
    }

+ 5 - 4
Engine/source/gfx/gfxVertexFormat.cpp

@@ -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; 
-   mElements.last().mSemantic = semantic.intern();
-   mElements.last().mSemanticIndex = index;
-   mElements.last().mType = type;      
+   GFXVertexElement& lastElement = mElements.last();
+   lastElement.mStreamIndex = stream;
+   lastElement.mSemantic = semantic.intern();
+   lastElement.mSemanticIndex = index;
+   lastElement.mType = type;
 }
 }
 
 
 const String& GFXVertexFormat::getDescription() const
 const String& GFXVertexFormat::getDescription() const

+ 26 - 24
Engine/source/gui/containers/guiScrollCtrl.cpp

@@ -1091,8 +1091,9 @@ void GuiScrollCtrl::drawVScrollBar(const Point2I &offset)
     }
     }
 
 
     // Render Up Arrow.
     // Render Up Arrow.
-    GFX->getDrawUtil()->clearBitmapModulation();
-    GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[upArrowBitmap] );
+    GFXDrawUtil* drawUtil = GFX->getDrawUtil();
+    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();
-        GFX->getDrawUtil()->drawBitmapStretchSR( mTextureObject, trackRect, mBitmapBounds[trackBitmap] );
+       drawUtil->clearBitmapModulation();
+       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();
-    GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[downArrowBitmap] );
+    drawUtil->clearBitmapModulation();
+    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();
-    GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[thumbBitmapTop] );
+    drawUtil->clearBitmapModulation();
+    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();
-        GFX->getDrawUtil()->drawBitmapStretchSR( mTextureObject, thumbRect, mBitmapBounds[thumbBitmapMiddle] );
+       drawUtil->clearBitmapModulation();
+       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();
-    GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[thumbBitmapBottom] );
+    drawUtil->clearBitmapModulation();
+    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();
-    GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[leftArrowBitmap] );
+    GFXDrawUtil* drawUtil = GFX->getDrawUtil();
+    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();
-        GFX->getDrawUtil()->drawBitmapStretchSR( mTextureObject, trackRect, mBitmapBounds[trackBitmap] );
+       drawUtil->clearBitmapModulation();
+       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();
-    GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[rightArrowBitmap] );
+    drawUtil->clearBitmapModulation();
+    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();
-    GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[thumbBitmapLeft] );
+    drawUtil->clearBitmapModulation();
+    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();
-        GFX->getDrawUtil()->drawBitmapStretchSR( mTextureObject, thumbRect, mBitmapBounds[thumbBitmapMiddle] );
+       drawUtil->clearBitmapModulation();
+       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();
-    GFX->getDrawUtil()->drawBitmapSR( mTextureObject, pos, mBitmapBounds[thumbBitmapRight] );
+    drawUtil->clearBitmapModulation();
+    drawUtil->drawBitmapSR(mTextureObject, pos, mBitmapBounds[thumbBitmapRight]);
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------

+ 20 - 18
Engine/source/gui/containers/guiWindowCtrl.cpp

@@ -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();
-   GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset, mBitmapBounds[topBase]);
-   GFX->getDrawUtil()->drawBitmapSR(mTextureObject, Point2I(offset.x + getWidth() - mBitmapBounds[topBase+1].extent.x, offset.y),
+   drawUtil->drawRectFill(winRect, mProfile->mFillColor);
+
+   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]);
-   GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset + getExtent() - mBitmapBounds[BorderBottomRight].extent, mBitmapBounds[BorderBottomRight]);
+   drawUtil->drawBitmapSR(mTextureObject, offset + Point2I(0, getHeight() - mBitmapBounds[BorderBottomLeft].extent.y), mBitmapBounds[BorderBottomLeft]);
+   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();
-      GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset + mCloseButton.point, mBitmapBounds[bmp]);
+      drawUtil->clearBitmapModulation();
+      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();
-      GFX->getDrawUtil()->drawBitmapSR( mTextureObject, offset + mMaximizeButton.point, mBitmapBounds[bmp] );
+      drawUtil->clearBitmapModulation();
+      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();
-      GFX->getDrawUtil()->drawBitmapSR( mTextureObject, offset + mMinimizeButton.point, mBitmapBounds[bmp] );
+      drawUtil->clearBitmapModulation();
+      drawUtil->drawBitmapSR( mTextureObject, offset + mMinimizeButton.point, mBitmapBounds[bmp] );
    }
    }
 
 
    if( !mMinimized )
    if( !mMinimized )

+ 12 - 10
Engine/source/gui/controls/guiBitmapBorderCtrl.cpp

@@ -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();
-      GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset, mBitmapBounds[BorderTopLeft]);
-      GFX->getDrawUtil()->drawBitmapSR(mTextureObject, Point2I(offset.x + getWidth() - mBitmapBounds[BorderTopRight].extent.x, offset.y),
+      drawUtil->clearBitmapModulation();
+      drawUtil->drawBitmapSR(mTextureObject, offset, mBitmapBounds[BorderTopLeft]);
+      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]);
-      GFX->getDrawUtil()->drawBitmapSR(mTextureObject, offset + getExtent() - mBitmapBounds[BorderBottomRight].extent, mBitmapBounds[BorderBottomRight]);
+      drawUtil->drawBitmapSR(mTextureObject, offset + Point2I(0, getHeight() - mBitmapBounds[BorderBottomLeft].extent.y), mBitmapBounds[BorderBottomLeft]);
+      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);
    }
    }
 }
 }

+ 7 - 5
Engine/source/gui/controls/guiGameListMenuCtrl.cpp

@@ -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();
-      GFX->getDrawUtil()->drawBitmapStretchSR(profile->mTextureObject, RectI(currentOffset, rowExtent), profile->getBitmapArrayRect(buttonTextureIndex));
+      drawUtil->clearBitmapModulation();
+      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();
-         GFX->getDrawUtil()->drawBitmapStretchSR(profile->mTextureObject, RectI(currentOffset + iconOffset, iconExtent), profile->getBitmapArrayRect(iconIndex));
+         drawUtil->clearBitmapModulation();
+         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);
    }
    }
 
 

+ 17 - 12
Engine/source/gui/controls/guiGradientCtrl.cpp

@@ -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;
-   S32 t = getBounds().point.y, b = getBounds().point.y + getBounds().extent.y - mSwatchFactor;
+   RectI bounds = getBounds();
+   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::vertex2i( l + colorRange.first().swatch->getPosition().x, b );
-		PrimBuild::vertex2i( l + colorRange.first().swatch->getPosition().x, t );
+      PrimBuild::color(firstColorRange.swatch->getColor());
+      PrimBuild::vertex2i(l + firstColorRange.swatch->getPosition().x, b);
+      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::vertex2i( l + colorRange.last().swatch->getPosition().x, t );
-		PrimBuild::vertex2i( l + colorRange.last().swatch->getPosition().x, b );
+      PrimBuild::color(lastColorRange.swatch->getColor());
+      PrimBuild::vertex2i(l + lastColorRange.swatch->getPosition().x, t);
+      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 );
 
 

+ 29 - 27
Engine/source/gui/controls/guiPopUpCtrl.cpp

@@ -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();
-         GFX->getDrawUtil()->drawBitmapStretch( mTextureDepressed, rect );
+         drawUtil->clearBitmapModulation();
+         drawUtil->drawBitmapStretch( mTextureDepressed, rect );
       } 
       } 
       else if ( mTextureNormal )
       else if ( mTextureNormal )
       {
       {
          RectI rect(offset, mBitmapBounds);
          RectI rect(offset, mBitmapBounds);
-         GFX->getDrawUtil()->clearBitmapModulation();
-         GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect );
+         drawUtil->clearBitmapModulation();
+         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 );
-         GFX->getDrawUtil()->drawLine( l, t, r2, t, colorWhite );
-         GFX->getDrawUtil()->drawLine( l + 1, b, r2, b, mProfile->mBorderColor );
-         GFX->getDrawUtil()->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor );
+         drawUtil->drawLine( l, t, l, b, colorWhite );
+         drawUtil->drawLine( l, t, r2, t, colorWhite );
+         drawUtil->drawLine( l + 1, b, r2, b, 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();
-            GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect );
+            drawUtil->clearBitmapModulation();
+            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 );
-            GFX->getDrawUtil()->drawLine( l, t, r2, t, colorWhite );
-            GFX->getDrawUtil()->drawLine( l + 1, b, r2, b, mProfile->mBorderColor );
-            GFX->getDrawUtil()->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor );
+            drawUtil->drawLine( l, t, l, b, colorWhite );
+            drawUtil->drawLine( l, t, r2, t, colorWhite );
+            drawUtil->drawLine( l + 1, b, r2, b, 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();
-            GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect );
+            drawUtil->clearBitmapModulation();
+            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);
-         GFX->getDrawUtil()->drawRect( r, ColorI(0,0,0));
+         drawUtil->drawRectFill( r, boxColor);
+         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.

+ 29 - 27
Engine/source/gui/controls/guiPopUpCtrlEx.cpp

@@ -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();
-         GFX->getDrawUtil()->drawBitmapStretch( mTextureDepressed, rect );
+         drawUtil->clearBitmapModulation();
+         drawUtil->drawBitmapStretch( mTextureDepressed, rect );
       } 
       } 
       else if ( mTextureNormal )
       else if ( mTextureNormal )
       {
       {
          RectI rect(offset, mBitmapBounds);
          RectI rect(offset, mBitmapBounds);
-         GFX->getDrawUtil()->clearBitmapModulation();
-         GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect );
+         drawUtil->clearBitmapModulation();
+         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 );
-         GFX->getDrawUtil()->drawLine( l, t, r2, t, colorWhite );
-         GFX->getDrawUtil()->drawLine( l + 1, b, r2, b, mProfile->mBorderColor );
-         GFX->getDrawUtil()->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor );
+         drawUtil->drawLine( l, t, l, b, colorWhite );
+         drawUtil->drawLine( l, t, r2, t, colorWhite );
+         drawUtil->drawLine( l + 1, b, r2, b, 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();
-            GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect );
+            drawUtil->clearBitmapModulation();
+            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 );
-            GFX->getDrawUtil()->drawLine( l, t, r2, t, colorWhite );
-            GFX->getDrawUtil()->drawLine( l + 1, b, r2, b, mProfile->mBorderColor );
-            GFX->getDrawUtil()->drawLine( r2, t + 1, r2, b - 1, mProfile->mBorderColor );
+            drawUtil->drawLine( l, t, l, b, colorWhite );
+            drawUtil->drawLine( l, t, r2, t, colorWhite );
+            drawUtil->drawLine( l + 1, b, r2, b, 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();
-            GFX->getDrawUtil()->drawBitmapStretch( mTextureNormal, rect );
+            drawUtil->clearBitmapModulation();
+            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);
-         GFX->getDrawUtil()->drawRect( r, ColorI(0,0,0));
+         drawUtil->drawRectFill( r, boxColor);
+         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.

+ 9 - 7
Engine/source/gui/controls/guiSliderCtrl.cpp

@@ -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);
-    	GFX->getDrawUtil()->drawText(mProfile->mFont, textStart, buf, mProfile->mFontColors);
+    	drawUtil->setBitmapModulation(mProfile->mFontColor);
+    	drawUtil->drawText(mProfile->mFont, textStart, buf, mProfile->mFontColors);
    }
    }
    renderChildControls(offset, updateRect);
    renderChildControls(offset, updateRect);
 }
 }

+ 6 - 4
Engine/source/gui/core/guiControl.cpp

@@ -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 );
-   GFX->getDrawUtil()->drawRect( rect, mTooltipProfile->mBorderColor );
+   drawUtil->drawRectFill( rect, mTooltipProfile->mFillColor );
+   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 );

+ 25 - 19
Engine/source/gui/core/guiDefaultControlRender.cpp

@@ -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);
-   GFX->getDrawUtil()->drawLine(l, t, l, b - 1, colorWhite);
-   GFX->getDrawUtil()->drawLine(l, t, r - 1, t, colorWhite);
+   GFXDrawUtil* drawUtil = GFX->getDrawUtil();
 
 
-   GFX->getDrawUtil()->drawLine(l, b, r, b, colorBlack);
-   GFX->getDrawUtil()->drawLine(r, b - 1, r, t, colorBlack);
+   drawUtil->drawRectFill( bounds, profile->mFillColor);
+   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);
-   GFX->getDrawUtil()->drawLine(r - 1, b - 2, r - 1, t + 1, profile->mBorderColor);
+   drawUtil->drawLine(l, b, r, b, colorBlack);
+   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();
+
+   drawUtil->drawRectFill( bounds, profile->mFillColor);
 
 
-   GFX->getDrawUtil()->drawLine(l, b, r, b, colorWhite);
-   GFX->getDrawUtil()->drawLine(r, b - 1, r, t, colorWhite);
+   drawUtil->drawLine(l, b, r, b, colorWhite);
+   drawUtil->drawLine(r, b - 1, r, t, colorWhite);
 
 
-   GFX->getDrawUtil()->drawLine(l, t, r - 1, t, colorBlack);
-   GFX->getDrawUtil()->drawLine(l, t + 1, l, b - 1, colorBlack);
+   drawUtil->drawLine(l, t, r - 1, t, colorBlack);
+   drawUtil->drawLine(l, t + 1, l, b - 1, colorBlack);
 
 
-   GFX->getDrawUtil()->drawLine(l + 1, t + 1, r - 2, t + 1, profile->mBorderColor);
-   GFX->getDrawUtil()->drawLine(l + 1, t + 2, l + 1, b - 2, profile->mBorderColor);
+   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);
-   GFX->getDrawUtil()->drawLine(l, b, r, b, profile->mBorderColor);
-   GFX->getDrawUtil()->drawLine(r, t, r, b - 1, profile->mBorderColor);
-   GFX->getDrawUtil()->drawLine(l, t, l, b - 1, profile->mBorderColor);
-   GFX->getDrawUtil()->drawLine(l + 1, t, r - 1, t, profile->mBorderColor);
+   GFXDrawUtil* drawUtil = GFX->getDrawUtil();
+
+   drawUtil->drawRectFill( bounds, profile->mFillColor);
+   drawUtil->drawLine(l, b, r, b, 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 )

+ 9 - 8
Engine/source/gui/editor/guiMenuBar.cpp

@@ -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();
-         GFX->getDrawUtil()->drawBitmapSR( mProfile->mTextureObject, offset + bitmapstart, rect);
+         drawUtil->clearBitmapModulation();
+         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 );
-      GFX->getDrawUtil()->drawText( mProfile->mFont, start + offset, walk->text, mProfile->mFontColors );
+      drawUtil->setBitmapModulation( fontColor );
+      drawUtil->drawText( mProfile->mFont, start + offset, walk->text, mProfile->mFontColors );
 		 }
 		 }
 	  } else
 	  } else
 	  {
 	  {
-      GFX->getDrawUtil()->setBitmapModulation( fontColor );
-      GFX->getDrawUtil()->drawText( mProfile->mFont, start + offset, walk->text, mProfile->mFontColors );
+      drawUtil->setBitmapModulation( fontColor );
+      drawUtil->drawText( mProfile->mFont, start + offset, walk->text, mProfile->mFontColors );
 	  }
 	  }
    }
    }
 
 

+ 12 - 10
Engine/source/gui/editor/guiRectHandles.cpp

@@ -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);
 }
 }

+ 27 - 20
Engine/source/gui/editor/guiShapeEdPreview.cpp

@@ -330,10 +330,11 @@ void GuiShapeEdPreview::setCurrentDetail(S32 dl)
 {
 {
    if ( mModel )
    if ( mModel )
    {
    {
-      S32 smallest = mModel->getShape()->mSmallestVisibleDL;
-      mModel->getShape()->mSmallestVisibleDL = mModel->getShape()->details.size()-1;
+      TSShape* shape = mModel->getShape();
+      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;
-      mZoomSpeed = mModel->getShape()->radius / sZoomScaler;
+      mMoveSpeed = shape->radius / sMoveScaler;
+      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();
+
+      mProjectedNodes.setSize( shape->nodes.size() );
 
 
-      if ( mSelectedObject >= mModel->getShape()->objects.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 String& detName = mModel->getShape()->getName( det.nameIndex );
+         const TSShape::Detail& det = shape->details[i];
+         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 end   = start + mModel->getShape()->subShapeNumObjects[det.subShapeNum];
+         S32 start = shape->subShapeFirstObject[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 TSMesh* mesh = ( od < obj.numMeshes ) ? mModel->getShape()->meshes[obj.startMeshIndex + od] : NULL;
+            const TSShape::Object &obj = shape->objects[j];
+            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 );
-      GFX->getDrawUtil()->drawArrow( desc, start + up, end + up, color );
-      GFX->getDrawUtil()->drawArrow( desc, start + right, end + right, color );
-      GFX->getDrawUtil()->drawArrow( desc, start + up + right, end + up + right, color );
+      GFXDrawUtil* drawUtil = GFX->getDrawUtil();
+
+      drawUtil->drawArrow( desc, start, end, 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 );
    }
    }
 }
 }
 
 

+ 8 - 6
Engine/source/gui/game/guiProgressBitmapCtrl.cpp

@@ -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 );
 
 

+ 4 - 3
Engine/source/gui/utility/messageVector.cpp

@@ -575,12 +575,13 @@ void MessageVector::registerSpectator(SpectatorCallback callBack, void *spectato
    }
    }
 
 
    mSpectators.increment();
    mSpectators.increment();
-   mSpectators.last().callback = callBack;
-   mSpectators.last().key      = spectatorKey;
+   SpectatorRef& lastSpectatorRef = mSpectators.last();
+   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);
    }
    }
 }
 }

+ 6 - 5
Engine/source/gui/worldEditor/terrainEditor.cpp

@@ -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);
-         gridToWorld(Point2I(gPos.x + 1, gPos.y), verts[1].point, sel[i].mGridPoint.terrainBlock);
-         gridToWorld(Point2I(gPos.x + 1, gPos.y + 1), verts[2].point, sel[i].mGridPoint.terrainBlock);
-         gridToWorld(Point2I(gPos.x, gPos.y + 1), verts[3].point, sel[i].mGridPoint.terrainBlock);
+         bool center = gridToWorld(selectedGridPoint, verts[0].point);
+         gridToWorld(Point2I(gPos.x + 1, gPos.y), verts[1].point, selectedGridPoint.terrainBlock);
+         gridToWorld(Point2I(gPos.x + 1, gPos.y + 1), verts[2].point, selectedGridPoint.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;

+ 5 - 4
Engine/source/gui/worldEditor/worldEditor.cpp

@@ -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;
-      mIcons.last().rect   = renderRect;
-      mIcons.last().dist   = projPos.z;
-      mIcons.last().alpha  = iconAlpha;
+      IconObject& lastIcon = mIcons.last();
+      lastIcon.object = obj;
+      lastIcon.rect = renderRect;
+      lastIcon.dist = projPos.z;
+      lastIcon.alpha = iconAlpha;
    }
    }
 
 
    //
    //

+ 5 - 4
Engine/source/lighting/common/sceneLighting.cpp

@@ -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);
-			dFileDelete(files.last().mFileName);
+         Con::warnf("Removing lighting file '%s'.", lastFile.mFileName);
+         dFileDelete(lastFile.mFileName);
 		}
 		}
 
 
 		files.pop_back();
 		files.pop_back();

+ 7 - 5
Engine/source/postFx/postEffect.cpp

@@ -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.y -= (F32)GFX->getViewport().point.y;
-         sunPos.x /= (F32)GFX->getViewport().extent.x;
-         sunPos.y /= (F32)GFX->getViewport().extent.y;
+         sunPos.x -= (F32)viewPort.point.x;
+         sunPos.y -= (F32)viewPort.point.y;
+         sunPos.x /= (F32)viewPort.extent.x;
+         sunPos.y /= (F32)viewPort.extent.y;
 
 
          mShaderConsts->set( mScreenSunPosSC, Point2F( sunPos.x, sunPos.y ) );
          mShaderConsts->set( mScreenSunPosSC, Point2F( sunPos.x, sunPos.y ) );
       }
       }

+ 7 - 5
Engine/source/scene/culling/sceneCullingState.cpp

@@ -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);
-      terrain->getWorldTransform().mulP(ur);
-      terrain->getWorldTransform().mulP(ll);
-      terrain->getWorldTransform().mulP(lr);
+      terrWorldTransform.mulP(ul);
+      terrWorldTransform.mulP(ur);
+      terrWorldTransform.mulP(ll);
+      terrWorldTransform.mulP(lr);
 
 
       Point3F xBaseL0_s = ul - localCamPos;
       Point3F xBaseL0_s = ul - localCamPos;
       Point3F xBaseL0_e = lr - localCamPos;
       Point3F xBaseL0_e = lr - localCamPos;

+ 7 - 6
Engine/source/scene/sceneContainer.cpp

@@ -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();
-   if ((*mSearchList[mCurrSearchPos])->getWorldBox().len_y() < min)
-      min = (*mSearchList[mCurrSearchPos])->getWorldBox().len_y();
-   if ((*mSearchList[mCurrSearchPos])->getWorldBox().len_z() < min)
-      min = (*mSearchList[mCurrSearchPos])->getWorldBox().len_z();
+   F32 min = worldBox.len_x();
+   if (worldBox.len_y() < min)
+      min = worldBox.len_y();
+   if (worldBox.len_z() < min)
+      min = worldBox.len_z();
 
 
    dist -= min;
    dist -= min;
    if (dist < 0)
    if (dist < 0)

+ 5 - 4
Engine/source/terrain/terrCollision.cpp

@@ -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]];
-      cf->mFaceList[faceListStart + i].vertex[0] = vertexCount + fp[i * 4 + 1];
-      cf->mFaceList[faceListStart + i].vertex[1] = vertexCount + fp[i * 4 + 2];
-      cf->mFaceList[faceListStart + i].vertex[2] = vertexCount + fp[i * 4 + 3];
+      ConvexFeature::Face& face = cf->mFaceList[faceListStart + i];
+      face.normal = normal[fp[i * 4 + 0]];
+      face.vertex[0] = vertexCount + fp[i * 4 + 1];
+      face.vertex[1] = vertexCount + fp[i * 4 + 2];
+      face.vertex[2] = vertexCount + fp[i * 4 + 3];
    }
    }
 }
 }
 
 

+ 25 - 19
Engine/source/ts/loader/tsShapeLoader.cpp

@@ -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);
-      shape->nodes.last().parentIndex = parentIndex;
-      shape->nodes.last().firstObject = -1;
-      shape->nodes.last().firstChild = -1;
-      shape->nodes.last().nextSibling = -1;
+      TSShape::Node& lastNode = shape->nodes.last();
+      lastNode.nameIndex = shape->addName(nodeName);
+      lastNode.parentIndex = parentIndex;
+      lastNode.firstObject = -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;
-            shape->details[detIndex].bbDetailLevel = dl;
-            shape->details[detIndex].bbDimension = dim;
-            shape->details[detIndex].bbIncludePoles = includePoles;
-            shape->details[detIndex].bbPolarAngle = polarAngle;
+
+            TSShape::Detail& detIndexDetail = shape->details[detIndex];
+            detIndexDetail.bbEquatorSteps = numEquatorSteps;
+            detIndexDetail.bbPolarSteps = numPolarSteps;
+            detIndexDetail.bbDetailLevel = dl;
+            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]);
-            shape->objects.last().nodeIndex = subshape->objNodes[iMesh];
-            shape->objects.last().startMeshIndex = appMeshes.size();
-            shape->objects.last().numMeshes = 0;
+            TSShape::Object& lastObject = shape->objects.last();
+            lastObject.nameIndex = shape->addName(meshNames[iMesh]);
+            lastObject.nodeIndex = subshape->objNodes[iMesh];
+            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;
-      shape->objects.last().startMeshIndex = 0;
-      shape->objects.last().numMeshes = 1;
+
+      TSShape::Object& lastObject = shape->objects.last();
+      lastObject.nameIndex = shape->addName("dummy");
+      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;

+ 51 - 40
Engine/source/ts/tsAnimate.cpp

@@ -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);
-      tranBeenSet.takeAway(th->getSequence()->translationMatters);
-      scaleBeenSet.takeAway(th->getSequence()->scaleMatters);
+      rotBeenSet.takeAway(threadSequence->rotationMatters);
+      tranBeenSet.takeAway(threadSequence->translationMatters);
+      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);
-   nodeMatters.overlap(thread->getSequence()->scaleMatters);
+
+   const TSShape::Sequence* threadSequence = thread->getSequence();
+
+   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(*thread->getSequence(),thread->keyNum2,jrot,&q2);
+         mShape->getRotation(*threadSequence,thread->keyNum1,jrot,&q1);
+         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 & p2 = mShape->getTranslation(*thread->getSequence(),thread->keyNum2,jtrans);
+         const Point3F & p1 = mShape->getTranslation(*threadSequence,thread->keyNum1,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 s2 = mShape->getUniformScale(*thread->getSequence(),thread->keyNum2,jscale);
+            F32 s1 = mShape->getUniformScale(*threadSequence,thread->keyNum1,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 s2 = mShape->getAlignedScale(*thread->getSequence(),thread->keyNum2,jscale);
+            Point3F s1 = mShape->getAlignedScale(*threadSequence,thread->keyNum1,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(*thread->getSequence(),thread->keyNum2,jscale,&s2);
+            mShape->getArbitraryScale(*threadSequence,thread->keyNum1,jscale,&s1);
+            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;
-      objectMatters.overlap(th->getSequence()->matFrameMatters);
-      objectMatters.overlap(th->getSequence()->visMatters);
+      TSIntegerSet objectMatters = threadSequence->frameMatters;
+      objectMatters.overlap(threadSequence->matFrameMatters);
+      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 state2 = mShape->getObjectState(*th->getSequence(),th->keyNum2,j).vis;
+            F32 state1 = mShape->getObjectState(*threadSequence,th->keyNum1,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;
-      objectMatters.overlap(th->getSequence()->matFrameMatters);
-      objectMatters.overlap(th->getSequence()->visMatters);
+      TSIntegerSet objectMatters = threadSequence->frameMatters;
+      objectMatters.overlap(threadSequence->matFrameMatters);
+      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;
-      objectMatters.overlap(th->getSequence()->matFrameMatters);
-      objectMatters.overlap(th->getSequence()->visMatters);
+      TSIntegerSet objectMatters = threadSequence->frameMatters;
+      objectMatters.overlap(threadSequence->matFrameMatters);
+      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);

+ 6 - 4
Engine/source/ts/tsDump.cpp

@@ -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");

+ 15 - 10
Engine/source/ts/tsMesh.cpp

@@ -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];
-            cf->mFaceList.last().vertex[1] = base + indices[start + j + 1];
-            cf->mFaceList.last().vertex[2] = base + indices[start + j + 2];
+            ConvexFeature::Face& lastFace = cf->mFaceList.last();
+            lastFace.normal = plane;
+
+            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 &&
-                    cf->mEdgeList[k].vertex[1] == newEdge1) 
+               ConvexFeature::Edge currentEdge = cf->mEdgeList[k];
+               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];
-         bt->_tmpVec->last().weight = transformOp.weight;
-         bt->_tmpVec->last().vidx = curTransform.vertexIndex;
+
+         BatchData::BatchedVertWeight& tempLast = bt->_tmpVec->last();
+         tempLast.vert = batchData.initialVerts[curTransform.vertexIndex];
+         tempLast.normal = batchData.initialNorms[curTransform.vertexIndex];
+         tempLast.weight = transformOp.weight;
+         tempLast.vidx = curTransform.vertexIndex;
       }
       }
    }
    }
 
 

+ 15 - 12
Engine/source/ts/tsMeshFit.cpp

@@ -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;
-   mMeshes.last().transform.identity();
-   mMeshes.last().transform.setPosition( center );
-   mMeshes.last().tsmesh = mesh;
+   MeshFit::Mesh& lastMesh = mMeshes.last();
+   lastMesh.type = MeshFit::Sphere;
+   lastMesh.transform.identity();
+   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;
-   mMeshes.last().transform.identity();
-   mMeshes.last().tsmesh = createTriMesh( result.mOutputVertices, result.mNumOutputVertices,
+   MeshFit::Mesh& lastMesh = mMeshes.last();
+   lastMesh.type = MeshFit::Hull;
+   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;
-         mMeshes.last().transform.identity();
-         mMeshes.last().tsmesh = createTriMesh( result.mVertices, result.mVcount, result.mIndices, result.mTcount );
-         mMeshes.last().tsmesh->computeBounds();
+         MeshFit::Mesh& lastMesh = mMeshes.last();
+         lastMesh.type = MeshFit::Hull;
+         lastMesh.transform.identity();
+         lastMesh.tsmesh = createTriMesh(result.mVertices, result.mVcount, result.mIndices, result.mTcount);
+         lastMesh.tsmesh->computeBounds();
       }
       }
    }
    }
 
 

+ 12 - 8
Engine/source/ts/tsThread.cpp

@@ -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;

+ 5 - 4
Engine/source/windowManager/win32/win32WindowMgr.cpp

@@ -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;
-   regions->last().point.y = lprcMonitor->top;
-   regions->last().extent.x = lprcMonitor->right - lprcMonitor->left;
-   regions->last().extent.y = lprcMonitor->bottom - lprcMonitor->top;
+   RectI& lastRegion = regions->last();
+   lastRegion.point.x = lprcMonitor->left;
+   lastRegion.point.y = lprcMonitor->top;
+   lastRegion.extent.x = lprcMonitor->right - lprcMonitor->left;
+   lastRegion.extent.y = lprcMonitor->bottom - lprcMonitor->top;
 
 
    return true;
    return true;
 }
 }