Browse Source

Merge pull request #424 from tdev/lock-checking

Added checks for valid pointers after locking
SilentMike 12 years ago
parent
commit
77bd934167

+ 2 - 1
Engine/source/T3D/cameraSpline.cpp

@@ -190,7 +190,8 @@ void CameraSpline::renderTimeMap()
    // Build vertex buffer
    GFXVertexBufferHandle<GFXVertexPC> vb;
    vb.set(GFX, mTimeMap.size(), GFXBufferTypeVolatile);
-   vb.lock();
+   void *ptr = vb.lock();
+   if(!ptr) return;
 
    MRandomLCG random(1376312589 * (U32)this);
    int index = 0;

+ 2 - 0
Engine/source/T3D/fx/precipitation.cpp

@@ -1727,6 +1727,7 @@ void Precipitation::renderObject(ObjectRenderInst *ri, SceneRenderState *state,
       // Do we need to relock the buffer?
       if ( !vertPtr )
          vertPtr = mRainVB.lock();
+      if(!vertPtr) return;
 
       // Set the proper texture coords... (it's fun!)
       tc = &mTexCoords[4*curr->texCoordIndex];
@@ -1817,6 +1818,7 @@ void Precipitation::renderObject(ObjectRenderInst *ri, SceneRenderState *state,
       // Do we need to relock the buffer?
       if ( !vertPtr )
          vertPtr = mRainVB.lock();
+      if(!vertPtr) return;
 
       vertPtr->point = pos + leftUp;
       vertPtr->texCoord = *tc;

+ 1 - 0
Engine/source/environment/cloudLayer.cpp

@@ -400,6 +400,7 @@ void CloudLayer::_initBuffers()
    
    mVB.set( GFX, smVertCount, GFXBufferTypeStatic );   
    GFXCloudVertex *pVert = mVB.lock(); 
+   if(!pVert) return;
 
    for ( U32 y = 0; y < smVertStride; y++ )
    {

+ 2 - 1
Engine/source/environment/decalRoad.cpp

@@ -1452,7 +1452,8 @@ void DecalRoad::_captureVerts()
    mPB.set( GFX, mTriangleCount * 3, 0, GFXBufferTypeStatic );
 
    // Lock the VertexBuffer
-   GFXVertexPNTBT *vertPtr = mVB.lock();   
+   GFXVertexPNTBT *vertPtr = mVB.lock();
+   if(!vertPtr) return;
    U32 vertIdx = 0;
 
    //

+ 2 - 0
Engine/source/environment/scatterSky.cpp

@@ -748,6 +748,7 @@ void ScatterSky::_initVBIB()
 
    mVB.set( GFX, mVertCount, GFXBufferTypeStatic );
    ScatterSkyVertex *pVert = mVB.lock();
+   if(!pVert) return;
 
    for ( U32 y = 0; y < vertStride; y++ )
    {
@@ -1072,6 +1073,7 @@ void ScatterSky::_renderMoon( ObjectRenderInst *ri, SceneRenderState *state, Bas
    GFXVertexBufferHandle< GFXVertexPCT > vb;
    vb.set( GFX, 4, GFXBufferTypeVolatile );
    GFXVertexPCT *pVert = vb.lock();
+   if(!pVert) return;
 
    for ( S32 i = 0; i < 4; i++ )
    {

+ 2 - 0
Engine/source/environment/skyBox.cpp

@@ -400,6 +400,7 @@ void SkyBox::_initRender()
    }
 
    GFXVertexPNTT *vertPtr = mVB.lock();
+   if(!vertPtr) return;
 
    dMemcpy( vertPtr, tmpVerts, sizeof ( GFXVertexPNTT ) * vertCount );
 
@@ -412,6 +413,7 @@ void SkyBox::_initRender()
       mFogBandVB.set( GFX, 48, GFXBufferTypeStatic );
 
    GFXVertexPC *bandVertPtr = mFogBandVB.lock();
+   if(!bandVertPtr) return;
 
    // Grab the fog color.
    ColorI fogColor( mLastFogColor.red * 255, mLastFogColor.green * 255, mLastFogColor.blue * 255 );

+ 1 - 0
Engine/source/environment/sun.cpp

@@ -487,6 +487,7 @@ void Sun::_renderCorona( ObjectRenderInst *ri, SceneRenderState *state, BaseMatI
    GFXVertexBufferHandle< GFXVertexPCT > vb;
    vb.set( GFX, 4, GFXBufferTypeVolatile );
    GFXVertexPCT *pVert = vb.lock();
+   if(!pVert) return;
 
    for ( S32 i = 0; i < 4; i++ )
    {

+ 2 - 0
Engine/source/forest/ts/tsForestCellBatch.cpp

@@ -76,6 +76,8 @@ void TSForestCellBatch::_rebuildBatch()
 
    // Fill this puppy!
    ImposterState *vertPtr = mVB.lock();
+   if(!vertPtr) return;
+
    Vector<ForestItem>::const_iterator item = mItems.begin();
 
    const F32 radius = mDetail->getRadius();

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

@@ -1505,7 +1505,8 @@ void WorldEditor::renderSplinePath(SimPath::Path *path)
 
    GFXVertexBufferHandle<GFXVertexPC> vb;
    vb.set(GFX, 3*batchSize, GFXBufferTypeVolatile);
-   vb.lock();
+   void *lockPtr = vb.lock();
+   if(!lockPtr) return;
 
    U32 vIdx=0;
 
@@ -1542,7 +1543,8 @@ void WorldEditor::renderSplinePath(SimPath::Path *path)
 
          // Reset for next pass...
          vIdx = 0;
-         vb.lock();
+         void *lockPtr = vb.lock();
+         if(!lockPtr) return;
       }
    }
 

+ 1 - 0
Engine/source/materials/processedShaderMaterial.cpp

@@ -1198,6 +1198,7 @@ void ProcessedShaderMaterial::setBuffers( GFXVertexBufferHandleBase *vertBuffer,
    GFXVertexBufferDataHandle instVB;
    instVB.set( GFX, instFormat->getSizeInBytes(), instFormat, instCount, GFXBufferTypeVolatile );
    U8 *dest = instVB.lock();
+   if(!dest) return;
    dMemcpy( dest, mInstancingState->getBuffer(), instFormat->getSizeInBytes() * instCount );
    instVB.unlock();
 

+ 12 - 4
Engine/source/renderInstance/renderImposterMgr.cpp

@@ -288,8 +288,12 @@ void RenderImposterMgr::_innerRender( const SceneRenderState *state, RenderPrePa
                   smBatches++;
                
                   vb.set( GFX, stateCount*4, GFXBufferTypeVolatile );
-                  dMemcpy( vb.lock(), mBuffer, stateCount * 4 * sizeof( ImposterState ) );
-                  vb.unlock();
+                  ImposterState *buf = vb.lock();
+                  if(buf)
+                  {
+                     dMemcpy( buf, mBuffer, stateCount * 4 * sizeof( ImposterState ) );
+                     vb.unlock();
+                  }
                
                   //GFX->setVertexBuffer( mCornerVB, 0, stateCount * 4 );
                   GFX->setVertexBuffer( vb );
@@ -327,8 +331,12 @@ void RenderImposterMgr::_innerRender( const SceneRenderState *state, RenderPrePa
                smBatches++;
 
                vb.set( GFX, stateCount*4, GFXBufferTypeVolatile );
-               dMemcpy( vb.lock(), mBuffer, stateCount * 4 * sizeof( ImposterState ) );
-               vb.unlock();
+               ImposterState *buf = vb.lock();
+               if(buf)
+               {
+                  dMemcpy( buf, mBuffer, stateCount * 4 * sizeof( ImposterState ) );
+                  vb.unlock();
+               }
                
                //GFX->setVertexBuffer( mCornerVB, 0, stateCount * 4 );
                GFX->setVertexBuffer( vb );

+ 6 - 2
Engine/source/terrain/terrRender.cpp

@@ -219,8 +219,12 @@ void TerrainBlock::_updateBaseTexture( bool writeToCache )
       points[3].texCoord   = Point2F(  1.0, needsYFlip ? 0.0f : 1.0f );
 
       vb.set( GFX, 4, GFXBufferTypeVolatile );
-      dMemcpy( vb.lock(), points, sizeof(GFXVertexPT) * 4 );
-      vb.unlock();
+      GFXVertexPT *ptr = vb.lock();
+      if(ptr)
+      {
+         dMemcpy( ptr, points, sizeof(GFXVertexPT) * 4 );
+         vb.unlock();
+      }
    }
 
    GFXTexHandle blendTex;

+ 2 - 0
Engine/source/ts/tsMesh.cpp

@@ -1254,6 +1254,7 @@ void TSSkinMesh::updateSkin( const Vector<MatrixF> &transforms, TSVertexBufferHa
 
       // Lock, and skin directly into the final memory destination
       outPtr = (U8 *)instanceVB.lock();
+      if(!outPtr) return;
 #endif
       // Set position/normal to zero so we can accumulate
       zero_vert_normal_bulk(mNumVerts, outPtr, outStride);
@@ -2379,6 +2380,7 @@ void TSMesh::_createVBIB( TSVertexBufferHandle &vb, GFXPrimitiveBufferHandle &pb
 
       // Copy from aligned memory right into GPU memory
       U8 *vertData = (U8*)vb.lock();
+      if(!vertData) return;
 #if defined(TORQUE_OS_XENON)
       XMemCpyStreaming_WriteCombined( vertData, mVertexData.address(), mVertexData.mem_size() );
 #else