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

debug_terrain_polygin
author Ritor1
date Sun, 24 May 2015 20:49:22 +0600
parents d569340b05ff
children d87bfbd3bb3b
comparison
equal deleted inserted replaced
2569:d433439699be 2570:4d199006c716
220 v11 = v10 + 6.7553994e15; 220 v11 = v10 + 6.7553994e15;
221 v12 = (double)(a1 & 0xFFi64) / 255.0f * (double)(unsigned __int8)a2 / 255.0f * 255.0; 221 v12 = (double)(a1 & 0xFFi64) / 255.0f * (double)(unsigned __int8)a2 / 255.0f * 255.0;
222 v13 = v12 + 6.7553994e15; 222 v13 = v12 + 6.7553994e15;
223 return LOBYTE(v13) | ((LOBYTE(v11) | (((v6 << 8) | v9) << 8)) << 8);*/ 223 return LOBYTE(v13) | ((LOBYTE(v11) | (((v6 << 8) | v9) << 8)) << 8);*/
224 } 224 }
225
226 225
227 void Render::RenderTerrainD3D() // New function 226 void Render::RenderTerrainD3D() // New function
228 { 227 {
229 int v6; // ecx@8 228 int v6; // ecx@8
230 struct Polygon *pTilePolygon; // ebx@8 229 struct Polygon *pTilePolygon; // ebx@8
367 for (unsigned int k = 0; k < pTilePolygon->uNumVertices; ++k) 366 for (unsigned int k = 0; k < pTilePolygon->uNumVertices; ++k)
368 { 367 {
369 memcpy(&VertexRenderList[k], &array_73D150[k], sizeof(struct RenderVertexSoft)); 368 memcpy(&VertexRenderList[k], &array_73D150[k], sizeof(struct RenderVertexSoft));
370 VertexRenderList[k]._rhw = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097); 369 VertexRenderList[k]._rhw = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097);
371 } 370 }
371
372 //shading (затенение)---------------------------------------------------------------------------- 372 //shading (затенение)----------------------------------------------------------------------------
373 //uint norm_idx = pTerrainNormalIndices[2 * (z * 128 + x) + 1]; 373 //uint norm_idx = pTerrainNormalIndices[2 * (z * 128 + x) + 1];
374 uint norm_idx = pTerrainNormalIndices[2 * (x * 128 + z) + 1]; 374 uint norm_idx = pTerrainNormalIndices[2 * (x * 128 + z) + 1];
375 assert(norm_idx < uNumTerrainNormals); 375 assert(norm_idx < uNumTerrainNormals);
376 376
386 if (lights_flag) 386 if (lights_flag)
387 { 387 {
388 //MessageBoxA(nullptr, "Ritor1: function StackLights_TerrainFace needed refactoring and result - slows", "", 0); 388 //MessageBoxA(nullptr, "Ritor1: function StackLights_TerrainFace needed refactoring and result - slows", "", 0);
389 //__debugbreak(); 389 //__debugbreak();
390 390
391 pEngine->pLightmapBuilder->StackLights_TerrainFace(norm, &Light_tile_dist, VertexRenderList, 4, 1);//Ritor1: slows 391 pEngine->pLightmapBuilder->StackLights_TerrainFace(norm, &Light_tile_dist, VertexRenderList, 4, 1);//Ritor1: slows
392 //pDecalBuilder->_49BE8A(pTilePolygon, norm, &Light_tile_dist, VertexRenderList, 4, 1); 392 //pDecalBuilder->_49BE8A(pTilePolygon, norm, &Light_tile_dist, VertexRenderList, 4, 1);
393 } 393 }
394 unsigned int a5 = 4; 394 unsigned int a5 = 4;
395 395
396 //---------Draw distance(Дальность отрисовки)------------------------------- 396 //---------Draw distance(Дальность отрисовки)-------------------------------
451 v6 = pTilePolygon->uTileBitmapID; 451 v6 = pTilePolygon->uTileBitmapID;
452 if ( !_strnicmp(pBitmaps_LOD->pTextures[pTilePolygon->uTileBitmapID].pName, "wtrdr", 5) ) 452 if ( !_strnicmp(pBitmaps_LOD->pTextures[pTilePolygon->uTileBitmapID].pName, "wtrdr", 5) )
453 transparent = true; 453 transparent = true;
454 } 454 }
455 455
456 assert(v6 < 1000); // many random crashes here 456 assert(v6 < 1000); // many random crashes here
457 457
458 // for all shore tiles - draw a tile water under them since they're half-empty 458 // for all shore tiles - draw a tile water under them since they're half-empty
459 if (!_strnicmp(pBitmaps_LOD->pTextures[pTilePolygon->uTileBitmapID].pName, "wtrdr", 5)) // all shore tile filenames are wtrdrXXX 459 if (!_strnicmp(pBitmaps_LOD->pTextures[pTilePolygon->uTileBitmapID].pName, "wtrdr", 5)) // all shore tile filenames are wtrdrXXX
460 DrawBorderTiles(pTilePolygon); 460 DrawBorderTiles(pTilePolygon);
461 461
462 pRenderer->DrawTerrainPolygon(pTilePolygon->uNumVertices, pTilePolygon, pBitmaps_LOD->pHardwareTextures[v6], transparent, true); 462 pRenderer->DrawTerrainPolygon(pTilePolygon->uNumVertices, pTilePolygon, pBitmaps_LOD->pHardwareTextures[v6], transparent, true);
463 } 463 }
464 //else //здесь уже пограничные тайлы воды 464 //else //здесь уже пограничные тайлы воды
465 //pTile->DrawBorderTiles(); 465 //pTile->DrawBorderTiles();
466 //-------------------------------------------------------------------------------------------------------------------------------- 466 //--------------------------------------------------------------------------------------------------------------------------------
467 467
468 --pODMRenderParams->uNumPolygons; 468 //--pODMRenderParams->uNumPolygons;
469 --pODMRenderParams->field_44; 469 //--pODMRenderParams->field_44;
470 } 470 }
471 } 471 }
472 } 472 }
473 473
474 //----- (004811A3) -------------------------------------------------------- 474 //----- (004811A3) --------------------------------------------------------
4599 }*/ 4599 }*/
4600 4600
4601 //----- (004A26BC) -------------------------------------------------------- 4601 //----- (004A26BC) --------------------------------------------------------
4602 void Render::DrawTerrainPolygon(unsigned int uNumVertices, struct Polygon *a4, IDirect3DTexture2 *a5, bool transparent, bool clampAtTextureBorders) 4602 void Render::DrawTerrainPolygon(unsigned int uNumVertices, struct Polygon *a4, IDirect3DTexture2 *a5, bool transparent, bool clampAtTextureBorders)
4603 { 4603 {
4604 unsigned int v8; // ebx@1
4605 int v11; // eax@5 4604 int v11; // eax@5
4606 int v20; // eax@14 4605 int v20; // eax@14
4607 unsigned int v45; // eax@28 4606 unsigned int v45; // eax@28
4608 4607
4609 v8 = 0;
4610 if (!this->uNumD3DSceneBegins) 4608 if (!this->uNumD3DSceneBegins)
4611 return; 4609 return;
4612 if ( uNumVertices < 3) 4610 if ( uNumVertices < 3)
4613 return; 4611 return;
4614 4612
4615 //v61 = pVertices;
4616
4617 /* v9 = pEngine->pLightmapBuilder;
4618 v65 = v9;
4619 v10 = v9->StationaryLightsCount;*/
4620 if ( byte_4D864C && pEngine->uFlags & GAME_FLAGS_1_01_lightmap_related) 4613 if ( byte_4D864C && pEngine->uFlags & GAME_FLAGS_1_01_lightmap_related)
4621 { 4614 {
4622 v11 = ::GetActorTintColor(a4->dimming_level, 0, VertexRenderList[0].vWorldViewPosition.x, 0, 0); 4615 v11 = ::GetActorTintColor(a4->dimming_level, 0, VertexRenderList[0].vWorldViewPosition.x, 0, 0);
4623 pEngine->pLightmapBuilder->DrawLightmaps(v11/*, 0*/); 4616 pEngine->pLightmapBuilder->DrawLightmaps(v11/*, 0*/);
4624 } 4617 }
4625 else 4618 else if (transparent || !pEngine->pLightmapBuilder->StationaryLightsCount ||
4626 { 4619 byte_4D864C && pEngine->uFlags & GAME_FLAGS_2_SATURATE_LIGHTMAPS )
4627 if (transparent || !pEngine->pLightmapBuilder->StationaryLightsCount || 4620 {
4628 byte_4D864C && pEngine->uFlags & 2 )
4629 {
4630 if (clampAtTextureBorders) 4621 if (clampAtTextureBorders)
4631 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP); 4622 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP);
4632 else 4623 else
4633 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP); 4624 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP);
4634 4625
4655 d3d_vertex_buffer[i].pos.x = VertexRenderList[i].vWorldViewProjX; 4646 d3d_vertex_buffer[i].pos.x = VertexRenderList[i].vWorldViewProjX;
4656 d3d_vertex_buffer[i].pos.y = VertexRenderList[i].vWorldViewProjY; 4647 d3d_vertex_buffer[i].pos.y = VertexRenderList[i].vWorldViewProjY;
4657 d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / ((VertexRenderList[i].vWorldViewPosition.x * 1000) / (double)pODMRenderParams->shading_dist_mist); 4648 d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / ((VertexRenderList[i].vWorldViewPosition.x * 1000) / (double)pODMRenderParams->shading_dist_mist);
4658 d3d_vertex_buffer[i].rhw = 1.0 / (VertexRenderList[i].vWorldViewPosition.x + 0.0000001); 4649 d3d_vertex_buffer[i].rhw = 1.0 / (VertexRenderList[i].vWorldViewPosition.x + 0.0000001);
4659 d3d_vertex_buffer[i].diffuse = ::GetActorTintColor(a4->dimming_level, 0, VertexRenderList[i].vWorldViewPosition.x, 0, 0); 4650 d3d_vertex_buffer[i].diffuse = ::GetActorTintColor(a4->dimming_level, 0, VertexRenderList[i].vWorldViewPosition.x, 0, 0);
4660 if ( this->bUsingSpecular ) 4651 d3d_vertex_buffer[i].specular = 0;
4661 { 4652 if ( this->bUsingSpecular )
4662 d3d_vertex_buffer[i].specular = sub_47C3D7_get_fog_specular(0, 0, VertexRenderList[i].vWorldViewPosition.x); 4653 d3d_vertex_buffer[i].specular = sub_47C3D7_get_fog_specular(0, 0, VertexRenderList[i].vWorldViewPosition.x);
4663 } 4654
4664 else
4665 {
4666 d3d_vertex_buffer[i].specular = 0;
4667 }
4668 d3d_vertex_buffer[i].texcoord.x = VertexRenderList[i].u; 4655 d3d_vertex_buffer[i].texcoord.x = VertexRenderList[i].u;
4669 d3d_vertex_buffer[i].texcoord.y = VertexRenderList[i].v; 4656 d3d_vertex_buffer[i].texcoord.y = VertexRenderList[i].v;
4670 } 4657 }
4671 4658
4672 this->pRenderD3D->pDevice->SetTexture(0, a5); 4659 this->pRenderD3D->pDevice->SetTexture(0, a5);
4673 this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, d3d_vertex_buffer, uNumVertices, 16); 4660 this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, d3d_vertex_buffer, uNumVertices, D3DDP_DONOTLIGHT);
4674 if (transparent) 4661 if (transparent)
4675 { 4662 {
4676 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE)); 4663 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE));
4677 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); 4664 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
4678 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO)); 4665 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
4679 } 4666 }
4680 } 4667 }
4681 else 4668 else if(pEngine->pLightmapBuilder->StationaryLightsCount)
4682 { 4669 {
4683 for (uint i = 0; i < uNumVertices; ++i) 4670 for (uint i = 0; i < uNumVertices; ++i)
4684 { 4671 {
4685 4672
4686 d3d_vertex_buffer[i].pos.x = VertexRenderList[i].vWorldViewProjX; 4673 d3d_vertex_buffer[i].pos.x = VertexRenderList[i].vWorldViewProjX;
4687 d3d_vertex_buffer[i].pos.y = VertexRenderList[i].vWorldViewProjY; 4674 d3d_vertex_buffer[i].pos.y = VertexRenderList[i].vWorldViewProjY;
4688 d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / ((VertexRenderList[i].vWorldViewPosition.x * 1000) / (double)pODMRenderParams->shading_dist_mist); 4675 d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / ((VertexRenderList[i].vWorldViewPosition.x * 1000) / (double)pODMRenderParams->shading_dist_mist);
4689 d3d_vertex_buffer[i].rhw = 1.0 / (VertexRenderList[i].vWorldViewPosition.x + 0.0000001); 4676 d3d_vertex_buffer[i].rhw = 1.0 / (VertexRenderList[i].vWorldViewPosition.x + 0.0000001);
4690 d3d_vertex_buffer[i].diffuse = GetActorTintColor(a4->dimming_level, 0, VertexRenderList[i].vWorldViewPosition.x, 0, 0); 4677 d3d_vertex_buffer[i].diffuse = GetActorTintColor(a4->dimming_level, 0, VertexRenderList[i].vWorldViewPosition.x, 0, 0);
4678 d3d_vertex_buffer[i].specular = 0;
4691 if ( this->bUsingSpecular ) 4679 if ( this->bUsingSpecular )
4692 {
4693 d3d_vertex_buffer[i].specular = sub_47C3D7_get_fog_specular(0, 0, VertexRenderList[i].vWorldViewPosition.x); 4680 d3d_vertex_buffer[i].specular = sub_47C3D7_get_fog_specular(0, 0, VertexRenderList[i].vWorldViewPosition.x);
4694 } 4681 d3d_vertex_buffer[i].texcoord.x = VertexRenderList[i].u;
4695 else
4696 {
4697 d3d_vertex_buffer[i].specular = 0;
4698 }
4699 //__debugbreak(); // warning C4700: uninitialized local variable 'v20' used
4700 //d3d_vertex_buffer[i].specular = v20;
4701 d3d_vertex_buffer[i].texcoord.x = VertexRenderList[i].u;
4702 d3d_vertex_buffer[i].texcoord.y = VertexRenderList[i].v; 4682 d3d_vertex_buffer[i].texcoord.y = VertexRenderList[i].v;
4703 } 4683 }
4704 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE)); 4684 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE));
4705 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); 4685 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
4706 if (pRenderer->bUsingSpecular) 4686 if (pRenderer->bUsingSpecular)
4707 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, FALSE)); 4687 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, FALSE));
4708 4688
4709 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0)); 4689 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0));
4710 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 4690 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,//рисуется текстурка с светом
4711 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 4691 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
4712 d3d_vertex_buffer, 4692 d3d_vertex_buffer,
4713 uNumVertices, 4693 uNumVertices,
4714 16)); 4694 D3DDP_DONOTLIGHT));
4715 //v63 = (const char *)v7->pRenderD3D->pDevice; 4695 //ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE));
4716 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE));
4717 //(*(void (**)(void))(*(int *)v63 + 88))();
4718 pEngine->pLightmapBuilder->DrawLightmaps(-1/*, 0*/); 4696 pEngine->pLightmapBuilder->DrawLightmaps(-1/*, 0*/);
4719 for (uint i = 0; i < uNumVertices; ++i) 4697 for (uint i = 0; i < uNumVertices; ++i)
4720 { 4698 {
4721 d3d_vertex_buffer[i].diffuse = -1; 4699 d3d_vertex_buffer[i].diffuse = -1;
4722 } 4700 }
4723 ErrD3D(pRenderD3D->pDevice->SetTexture(0, a5)); 4701 ErrD3D(pRenderD3D->pDevice->SetTexture(0, a5));//текстурка
4724 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); 4702 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));
4725 if ( !pRenderer->bUsingSpecular ) 4703 if ( !pRenderer->bUsingSpecular )
4726 { 4704 {
4727 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE)); 4705 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE));
4728 } 4706 }
4731 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR)); 4709 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR));
4732 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 4710 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
4733 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 4711 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
4734 d3d_vertex_buffer, 4712 d3d_vertex_buffer,
4735 uNumVertices, 4713 uNumVertices,
4736 16)); 4714 D3DDP_DONOTLIGHT));
4737 if ( pRenderer->bUsingSpecular ) 4715 if ( pRenderer->bUsingSpecular )
4738 { 4716 {
4739 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE)); 4717 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE));
4740 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0)); 4718 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0));
4741 for (uint i = 0; i < uNumVertices; ++i) 4719 for (uint i = 0; i < uNumVertices; ++i)
4749 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCALPHA)); 4727 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCALPHA));
4750 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 4728 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,
4751 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, 4729 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1,
4752 d3d_vertex_buffer, 4730 d3d_vertex_buffer,
4753 uNumVertices, 4731 uNumVertices,
4754 16)); 4732 D3DDP_DONOTLIGHT));
4755 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE)); 4733 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE));
4756 //v44 = pRenderer->pRenderD3D->pDevice;
4757 v45 = GetLevelFogColor(); 4734 v45 = GetLevelFogColor();
4758 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, v45 & 0xFFFFFF)); 4735 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, v45 & 0xFFFFFF));
4759 v8 = 0; 4736 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, FALSE));
4760 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0));
4761 } 4737 }
4762 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); 4738 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE));
4763 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO)); 4739 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO));
4764 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, v8)); 4740 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE));
4765 } 4741 //}
4766 } 4742 }
4767 4743
4768 //if (pIndoorCamera->flags & INDOOR_CAMERA_DRAW_TERRAIN_OUTLINES || pBLVRenderParams->uFlags & INDOOR_CAMERA_DRAW_TERRAIN_OUTLINES) 4744 //if (pIndoorCamera->flags & INDOOR_CAMERA_DRAW_TERRAIN_OUTLINES || pBLVRenderParams->uFlags & INDOOR_CAMERA_DRAW_TERRAIN_OUTLINES)
4769 if (pIndoorCameraD3D->debug_flags & ODM_RENDER_DRAW_TERRAIN_OUTLINES) 4745 //if (pIndoorCameraD3D->debug_flags & ODM_RENDER_DRAW_TERRAIN_OUTLINES)
4746 if (debug_terrain_polygin)
4770 pIndoorCameraD3D->debug_outline_d3d(d3d_vertex_buffer, uNumVertices, 0x00FFFFFF, 0.0); 4747 pIndoorCameraD3D->debug_outline_d3d(d3d_vertex_buffer, uNumVertices, 0x00FFFFFF, 0.0);
4771 } 4748 }
4772 // 4A26BC: could not find valid save-restore pair for esi 4749 // 4A26BC: could not find valid save-restore pair for esi
4773 // 4D864C: using guessed type char byte_4D864C; 4750 // 4D864C: using guessed type char byte_4D864C;
4774 4751
5212 d3d_vertex_buffer, uNumVertices, 28)); 5189 d3d_vertex_buffer, uNumVertices, 28));
5213 pEngine->pLightmapBuilder->DrawLightmaps(-1/*, 0*/); 5190 pEngine->pLightmapBuilder->DrawLightmaps(-1/*, 0*/);
5214 } 5191 }
5215 else 5192 else
5216 { 5193 {
5217 if (!pEngine->pLightmapBuilder->StationaryLightsCount || byte_4D864C && pEngine->uFlags & 2) 5194 if (!pEngine->pLightmapBuilder->StationaryLightsCount || byte_4D864C && pEngine->uFlags & GAME_FLAGS_2_SATURATE_LIGHTMAPS)
5218 { 5195 {
5219 for (uint i = 0; i < uNumVertices; ++i) 5196 for (uint i = 0; i < uNumVertices; ++i)
5220 { 5197 {
5221 d3d_vertex_buffer[i].pos.x = array_507D30[i].vWorldViewProjX; 5198 d3d_vertex_buffer[i].pos.x = array_507D30[i].vWorldViewProjX;
5222 d3d_vertex_buffer[i].pos.y = array_507D30[i].vWorldViewProjY; 5199 d3d_vertex_buffer[i].pos.y = array_507D30[i].vWorldViewProjY;
8841 8818
8842 if (bUsingSpecular) 8819 if (bUsingSpecular)
8843 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE)); 8820 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE));
8844 } 8821 }
8845 8822
8846
8847
8848 //----- (00437C96) -------------------------------------------------------- 8823 //----- (00437C96) --------------------------------------------------------
8849 void Render::do_draw_debug_line_d3d(const RenderVertexD3D3 *pLineBegin, signed int sDiffuseBegin, const RenderVertexD3D3 *pLineEnd, signed int sDiffuseEnd, float z_stuff) 8824 void Render::do_draw_debug_line_d3d(const RenderVertexD3D3 *pLineBegin, signed int sDiffuseBegin, const RenderVertexD3D3 *pLineEnd, signed int sDiffuseEnd, float z_stuff)
8850 { 8825 {
8851 double v6; // st7@2 8826 RenderVertexD3D3 vertices[2]; // [sp+8h] [bp-40h]@2
8852 std::string v9; // [sp-18h] [bp-60h]@3 8827
8853 RenderVertexD3D3 v13[2]; // [sp+8h] [bp-40h]@2 8828 memcpy(&vertices[0], pLineBegin, sizeof(vertices[0]));
8854 8829 memcpy(&vertices[1], pLineEnd, sizeof(vertices[1]));
8855 //if ( pRenderer->pRenderD3D ) 8830
8856 { 8831 vertices[0].pos.z = 0.001 - z_stuff;
8857 v6 = 0.001 - z_stuff; 8832 vertices[1].pos.z = 0.001 - z_stuff;
8858 memcpy(v13, pLineBegin, 0x20u); 8833
8859 memcpy(&v13[1], pLineEnd, sizeof(v13[1])); 8834 vertices[0].diffuse = sDiffuseBegin;
8860 v13[0].pos.z = v6; 8835 vertices[1].diffuse = sDiffuseEnd;
8861 v13[1].pos.z = v6; 8836
8862 v13[0].diffuse = sDiffuseBegin; 8837 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr));
8863 v13[1].diffuse = sDiffuseEnd; 8838 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_LINELIST, 452, vertices, 2, D3DDP_DONOTLIGHT));
8864 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr));
8865 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_LINELIST, 452, v13, 2, 16));
8866 }
8867 } 8839 }
8868 8840
8869 8841
8870 void Render::DrawLines(const RenderVertexD3D3 *vertices, unsigned int num_vertices) 8842 void Render::DrawLines(const RenderVertexD3D3 *vertices, unsigned int num_vertices)
8871 { 8843 {