diff Engine/Graphics/Render.cpp @ 2570:4d199006c716

debug_terrain_polygin
author Ritor1
date Sun, 24 May 2015 20:49:22 +0600
parents d569340b05ff
children d87bfbd3bb3b
line wrap: on
line diff
--- a/Engine/Graphics/Render.cpp	Thu May 21 18:33:07 2015 +0600
+++ b/Engine/Graphics/Render.cpp	Sun May 24 20:49:22 2015 +0600
@@ -223,7 +223,6 @@
   return LOBYTE(v13) | ((LOBYTE(v11) | (((v6 << 8) | v9) << 8)) << 8);*/
 }
 
-
 void Render::RenderTerrainD3D() // New function
 {
   int v6; // ecx@8
@@ -369,6 +368,7 @@
         memcpy(&VertexRenderList[k], &array_73D150[k], sizeof(struct RenderVertexSoft));
         VertexRenderList[k]._rhw = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097);
       }
+
 //shading (затенение)----------------------------------------------------------------------------
       //uint norm_idx = pTerrainNormalIndices[2 * (z * 128 + x) + 1];
       uint norm_idx = pTerrainNormalIndices[2 * (x * 128 + z) + 1];
@@ -388,7 +388,7 @@
         //MessageBoxA(nullptr, "Ritor1: function StackLights_TerrainFace needed refactoring and result - slows", "", 0);
         //__debugbreak();
 
-      pEngine->pLightmapBuilder->StackLights_TerrainFace(norm, &Light_tile_dist, VertexRenderList, 4, 1);//Ritor1: slows
+		pEngine->pLightmapBuilder->StackLights_TerrainFace(norm, &Light_tile_dist, VertexRenderList, 4, 1);//Ritor1: slows
       //pDecalBuilder->_49BE8A(pTilePolygon, norm, &Light_tile_dist, VertexRenderList, 4, 1);
       }
       unsigned int a5 = 4;
@@ -453,20 +453,20 @@
             transparent = true;
         }
 
-      assert(v6 < 1000); // many random crashes here
-
-      // for all shore tiles - draw a tile water under them since they're half-empty
-      if (!_strnicmp(pBitmaps_LOD->pTextures[pTilePolygon->uTileBitmapID].pName, "wtrdr", 5))  // all shore tile filenames are wtrdrXXX
-        DrawBorderTiles(pTilePolygon);
-
-      pRenderer->DrawTerrainPolygon(pTilePolygon->uNumVertices, pTilePolygon, pBitmaps_LOD->pHardwareTextures[v6], transparent, true);
+        assert(v6 < 1000); // many random crashes here
+
+        // for all shore tiles - draw a tile water under them since they're half-empty
+        if (!_strnicmp(pBitmaps_LOD->pTextures[pTilePolygon->uTileBitmapID].pName, "wtrdr", 5))  // all shore tile filenames are wtrdrXXX
+          DrawBorderTiles(pTilePolygon);
+
+        pRenderer->DrawTerrainPolygon(pTilePolygon->uNumVertices, pTilePolygon, pBitmaps_LOD->pHardwareTextures[v6], transparent, true);
       }
       //else //здесь уже пограничные тайлы воды
         //pTile->DrawBorderTiles();
 //--------------------------------------------------------------------------------------------------------------------------------
 
-      --pODMRenderParams->uNumPolygons;
-      --pODMRenderParams->field_44;
+      //--pODMRenderParams->uNumPolygons;
+      //--pODMRenderParams->field_44;
     }
   }
 }
@@ -4601,32 +4601,23 @@
 //----- (004A26BC) --------------------------------------------------------
 void Render::DrawTerrainPolygon(unsigned int uNumVertices, struct Polygon *a4, IDirect3DTexture2 *a5, bool transparent, bool clampAtTextureBorders)
 {
-  unsigned int v8; // ebx@1
   int v11; // eax@5
   int v20; // eax@14
   unsigned int v45; // eax@28
 
-  v8 = 0;
   if (!this->uNumD3DSceneBegins)
      return;
   if ( uNumVertices < 3)
      return;
 
-  //v61 = pVertices;
-
-  /*  v9 = pEngine->pLightmapBuilder;
-    v65 = v9;
-    v10 = v9->StationaryLightsCount;*/
     if ( byte_4D864C && pEngine->uFlags & GAME_FLAGS_1_01_lightmap_related)
     {
       v11 = ::GetActorTintColor(a4->dimming_level, 0, VertexRenderList[0].vWorldViewPosition.x, 0, 0);
       pEngine->pLightmapBuilder->DrawLightmaps(v11/*, 0*/);
     }
-    else
-    {
-      if (transparent || !pEngine->pLightmapBuilder->StationaryLightsCount || 
-          byte_4D864C && pEngine->uFlags & 2 )
-      {
+    else if (transparent || !pEngine->pLightmapBuilder->StationaryLightsCount || 
+          byte_4D864C && pEngine->uFlags & GAME_FLAGS_2_SATURATE_LIGHTMAPS )
+    {
         if (clampAtTextureBorders)
           this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP);
         else
@@ -4657,29 +4648,25 @@
 		  d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / ((VertexRenderList[i].vWorldViewPosition.x * 1000) / (double)pODMRenderParams->shading_dist_mist);
 		  d3d_vertex_buffer[i].rhw = 1.0 / (VertexRenderList[i].vWorldViewPosition.x + 0.0000001);
 		  d3d_vertex_buffer[i].diffuse = ::GetActorTintColor(a4->dimming_level, 0, VertexRenderList[i].vWorldViewPosition.x, 0, 0);
-          if ( this->bUsingSpecular )
-          {
+          d3d_vertex_buffer[i].specular = 0;          
+		  if ( this->bUsingSpecular )
             d3d_vertex_buffer[i].specular = sub_47C3D7_get_fog_specular(0, 0, VertexRenderList[i].vWorldViewPosition.x);
-          }
-          else
-          {
-            d3d_vertex_buffer[i].specular = 0;
-		  }
+
 		  d3d_vertex_buffer[i].texcoord.x = VertexRenderList[i].u;
 		  d3d_vertex_buffer[i].texcoord.y = VertexRenderList[i].v;
 		}
 
 		this->pRenderD3D->pDevice->SetTexture(0, a5);
-        this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, d3d_vertex_buffer, uNumVertices, 16);
+        this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, d3d_vertex_buffer, uNumVertices, D3DDP_DONOTLIGHT);
         if (transparent)
         {
           ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE));
           ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
           ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
         }
-      }
-      else
-      {
+    }
+    else if(pEngine->pLightmapBuilder->StationaryLightsCount)
+    {
 		for (uint i = 0; i < uNumVertices; ++i)
 		{
 		
@@ -4688,17 +4675,10 @@
 		  d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / ((VertexRenderList[i].vWorldViewPosition.x * 1000) / (double)pODMRenderParams->shading_dist_mist);
 		  d3d_vertex_buffer[i].rhw = 1.0 / (VertexRenderList[i].vWorldViewPosition.x + 0.0000001);
 		  d3d_vertex_buffer[i].diffuse = GetActorTintColor(a4->dimming_level, 0, VertexRenderList[i].vWorldViewPosition.x, 0, 0);
+		  d3d_vertex_buffer[i].specular = 0;
           if ( this->bUsingSpecular )
-          {
             d3d_vertex_buffer[i].specular = sub_47C3D7_get_fog_specular(0, 0, VertexRenderList[i].vWorldViewPosition.x);
-          }
-          else
-          {
-            d3d_vertex_buffer[i].specular = 0;
-		  }
-          //__debugbreak(); // warning C4700: uninitialized local variable 'v20' used
-		  //d3d_vertex_buffer[i].specular = v20;
-		  d3d_vertex_buffer[i].texcoord.x = VertexRenderList[i].u;
+ 		  d3d_vertex_buffer[i].texcoord.x = VertexRenderList[i].u;
 		  d3d_vertex_buffer[i].texcoord.y = VertexRenderList[i].v;
 		}
         ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE));
@@ -4707,20 +4687,18 @@
           ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, FALSE));
 
         ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0));
-        ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
+        ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,//рисуется текстурка с светом
                 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
                 d3d_vertex_buffer,
                 uNumVertices,
-                16));
-        //v63 = (const char *)v7->pRenderD3D->pDevice;
-        ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE));
-        //(*(void (**)(void))(*(int *)v63 + 88))();
+                D3DDP_DONOTLIGHT));
+        //ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE));
         pEngine->pLightmapBuilder->DrawLightmaps(-1/*, 0*/);
 	    for (uint i = 0; i < uNumVertices; ++i)
 	    {
 		  d3d_vertex_buffer[i].diffuse = -1;
 	    }
-        ErrD3D(pRenderD3D->pDevice->SetTexture(0, a5));
+        ErrD3D(pRenderD3D->pDevice->SetTexture(0, a5));//текстурка 
         ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
         if ( !pRenderer->bUsingSpecular )
         {
@@ -4733,7 +4711,7 @@
                 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
                 d3d_vertex_buffer,
                 uNumVertices,
-                16));
+                D3DDP_DONOTLIGHT));
         if ( pRenderer->bUsingSpecular )
         {
           ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE));
@@ -4751,22 +4729,21 @@
                   D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
                   d3d_vertex_buffer,
                   uNumVertices,
-                  16));
+                  D3DDP_DONOTLIGHT));
           ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE));
-          //v44 = pRenderer->pRenderD3D->pDevice;
           v45 = GetLevelFogColor();
           ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, v45 & 0xFFFFFF));
-          v8 = 0;
-          ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0));
+          ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, FALSE));
         }
         ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
         ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
-        ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, v8));
-      }
+        ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE));
+      //}
     }
 
     //if (pIndoorCamera->flags & INDOOR_CAMERA_DRAW_TERRAIN_OUTLINES || pBLVRenderParams->uFlags & INDOOR_CAMERA_DRAW_TERRAIN_OUTLINES)
-    if (pIndoorCameraD3D->debug_flags & ODM_RENDER_DRAW_TERRAIN_OUTLINES)
+    //if (pIndoorCameraD3D->debug_flags & ODM_RENDER_DRAW_TERRAIN_OUTLINES)
+	if (debug_terrain_polygin)
       pIndoorCameraD3D->debug_outline_d3d(d3d_vertex_buffer, uNumVertices, 0x00FFFFFF, 0.0);
   }
 // 4A26BC: could not find valid save-restore pair for esi
@@ -5214,7 +5191,7 @@
   }
   else
   {
-    if (!pEngine->pLightmapBuilder->StationaryLightsCount || byte_4D864C && pEngine->uFlags & 2)
+    if (!pEngine->pLightmapBuilder->StationaryLightsCount || byte_4D864C && pEngine->uFlags & GAME_FLAGS_2_SATURATE_LIGHTMAPS)
     {
       for (uint i = 0; i < uNumVertices; ++i)
       {
@@ -8843,27 +8820,22 @@
     ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE));
 }
 
-
-
 //----- (00437C96) --------------------------------------------------------
 void Render::do_draw_debug_line_d3d(const RenderVertexD3D3 *pLineBegin, signed int sDiffuseBegin, const RenderVertexD3D3 *pLineEnd, signed int sDiffuseEnd, float z_stuff)
 {
-  double v6; // st7@2
-  std::string v9; // [sp-18h] [bp-60h]@3
-  RenderVertexD3D3 v13[2]; // [sp+8h] [bp-40h]@2
-
-  //if ( pRenderer->pRenderD3D )
-  {
-    v6 = 0.001 - z_stuff;
-    memcpy(v13, pLineBegin, 0x20u);
-    memcpy(&v13[1], pLineEnd, sizeof(v13[1]));
-    v13[0].pos.z = v6;
-    v13[1].pos.z = v6;
-    v13[0].diffuse = sDiffuseBegin;
-    v13[1].diffuse = sDiffuseEnd;
-    ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr));
-    ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_LINELIST, 452, v13, 2, 16));
-  }
+  RenderVertexD3D3 vertices[2]; // [sp+8h] [bp-40h]@2
+
+  memcpy(&vertices[0], pLineBegin, sizeof(vertices[0]));
+  memcpy(&vertices[1], pLineEnd, sizeof(vertices[1]));
+
+  vertices[0].pos.z = 0.001 - z_stuff;
+  vertices[1].pos.z = 0.001 - z_stuff;
+
+  vertices[0].diffuse = sDiffuseBegin;
+  vertices[1].diffuse = sDiffuseEnd;
+
+  ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr));
+  ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_LINELIST, 452, vertices, 2, D3DDP_DONOTLIGHT));
 }