Mercurial > mm7
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 { |