diff Render.cpp @ 265:96bc024a5fed

Render overflows
author Nomad
date Mon, 18 Feb 2013 10:04:47 +0200
parents 9b77686e2239
children 2a09e1d6fc8f
line wrap: on
line diff
--- a/Render.cpp	Mon Feb 18 09:20:47 2013 +0200
+++ b/Render.cpp	Mon Feb 18 10:04:47 2013 +0200
@@ -1834,21 +1834,23 @@
       v8->field_58 = 0;
       ++pOutdoorCamera->numStru148s;
       ++pOutdoorCamera->field_44;
+      assert(pOutdoorCamera->numStru148s < 20000);
+
       v8->uBModelID = 0;
       v8->uBModelFaceID = 0;
       v31 = (8 * (0 | (0 << 6)));
       v8->field_50 = v31 | 6;
-      for (unsigned int k = 0; k < 4; ++k)
+      for (unsigned int k = 0; k < v8->uNumVertices; ++k)
       {
         memcpy(&array_50AC10[k], &array_73D150[k], sizeof(struct RenderVertexSoft));
         array_50AC10[k]._rhw = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097);
       }
 
       bool transparent = false;
-            if ( v8->flags & 2 && v8->uTileBitmapID == pRenderer->field_1036AC_bitmapid )
+            if ( v8->flags & 2 && v8->uTileBitmapID == pRenderer->hd_water_tile_id)
             {
               //v80 = false;
-              v6 = pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid];
+              v6 = pRenderer->pHDWaterBitmapIDs[pRenderer->hd_water_current_frame];
             }
             else
             {
@@ -1862,7 +1864,7 @@
       if (!strnicmp(pBitmaps_LOD->pTextures[v8->uTileBitmapID].pName, "wtrdr", 5))  // all shore tile filenames are wtrdrXXX
       {
         pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE);  // no Z writing: the shore tile will be draw in the same place, so taking care about z-fighting
-        pRenderer->DrawTerrainPolygon(v8->uNumVertices, v8, pBitmaps_LOD->pHardwareTextures[pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid]], false, true);
+        pRenderer->DrawTerrainPolygon(v8->uNumVertices, v8, pBitmaps_LOD->pHardwareTextures[pRenderer->pHDWaterBitmapIDs[pRenderer->hd_water_current_frame]], false, true);
         pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE);
         
       }
@@ -2174,10 +2176,10 @@
           //v37 = *(int *)&v16->flags;
           if ( ~v16->flags & 1 )
           {
-            if ( v16->flags & 2 && v16->uTileBitmapID == pRenderer->field_1036AC_bitmapid )
+            if ( v16->flags & 2 && v16->uTileBitmapID == pRenderer->hd_water_tile_id )
             {
               v80 = false;
-              v39 = pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid];
+              v39 = pRenderer->pHDWaterBitmapIDs[pRenderer->hd_water_current_frame];
             }
             else
             {
@@ -2324,10 +2326,10 @@
       }
       else
       {
-        if ( v57 & 2 && v40->uTileBitmapID == pRenderer->field_1036AC_bitmapid )
+        if ( v57 & 2 && v40->uTileBitmapID == pRenderer->hd_water_tile_id )
         {
           v81 = 0;
-          v58 = pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid];
+          v58 = pRenderer->pHDWaterBitmapIDs[pRenderer->hd_water_current_frame];
         }
         else
         {
@@ -2439,10 +2441,10 @@
           v74 = v71->flags;
           if ( !(BYTE1(v74) & 1) )
           {
-            if ( v74 & 2 && v71->uTileBitmapID == pRenderer->field_1036AC_bitmapid )
+            if ( v74 & 2 && v71->uTileBitmapID == pRenderer->hd_water_tile_id )
             {
               v80 = false;
-              v75 = pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid];
+              v75 = pRenderer->pHDWaterBitmapIDs[pRenderer->hd_water_current_frame];
             }
             else
             {
@@ -4694,6 +4696,9 @@
   v1->_gpu_memory_used = 0;
   uNumBillboardsToDraw = 0;
   bFogEnabled = false;
+
+  hd_water_tile_id = -1;
+  hd_water_current_frame = 0;
 }
 
 bool Render::Initialize(bool bWindowed, uint uDefaultDevice,