Mercurial > mm7
comparison Render.cpp @ 190:9b77686e2239
Merge
author | Gloval |
---|---|
date | Sat, 16 Feb 2013 00:44:38 +0400 |
parents | 038a4d09406f d65528fc3bda |
children | 96bc024a5fed |
comparison
equal
deleted
inserted
replaced
189:038a4d09406f | 190:9b77686e2239 |
---|---|
51 RenderVertexSoft array_50A2B0[50]; | 51 RenderVertexSoft array_50A2B0[50]; |
52 RenderVertexSoft array_50AC10[50]; | 52 RenderVertexSoft array_50AC10[50]; |
53 | 53 |
54 RenderVertexSoft array_73D150[20]; | 54 RenderVertexSoft array_73D150[20]; |
55 | 55 |
56 RenderVertexD3D3 arary_77E5C8[50]; | 56 RenderVertexD3D3 d3d_vertex_buffer[50]; |
57 | 57 |
58 RenderVertexSoft *ptr_801A04; | 58 RenderVertexSoft *ptr_801A04; |
59 RenderVertexSoft *ptr_801A08; | 59 RenderVertexSoft *ptr_801A08; |
60 | 60 |
61 RenderVertexSoft pVerticesSR_801A10[384]; | 61 RenderVertexSoft pVerticesSR_801A10[384]; |
134 v0 = false; | 134 v0 = false; |
135 pRenderer->pRenderD3D->CreateTexture(64u, 64u, &pSurface1, &pTexture1, true, false, 32u); | 135 pRenderer->pRenderD3D->CreateTexture(64u, 64u, &pSurface1, &pTexture1, true, false, 32u); |
136 pRenderer->pRenderD3D->CreateTexture(64u, 64u, &pSurface2, &pTexture2, true, false, 32u); | 136 pRenderer->pRenderD3D->CreateTexture(64u, 64u, &pSurface2, &pTexture2, true, false, 32u); |
137 | 137 |
138 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, pTexture1)); | 138 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, pTexture1)); |
139 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); | 139 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); |
140 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_COLOROP, 2u)); | 140 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_COLOROP, 2u)); |
141 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, 2u)); | 141 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, 2u)); |
142 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, 2u)); | 142 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, 2u)); |
143 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MINFILTER, 2u)); | 143 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MINFILTER, 2u)); |
144 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, 1u)); | 144 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, 1u)); |
145 | 145 |
146 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, pTexture2)); | 146 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, pTexture2)); |
147 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_ADDRESS, 3u)); | 147 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP)); |
148 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1u)); | 148 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1u)); |
149 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLOROP, 7u)); | 149 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLOROP, 7u)); |
150 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLORARG1, 2u)); | 150 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLORARG1, 2u)); |
151 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLORARG2, 1u)); | 151 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_COLORARG2, 1u)); |
152 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_MAGFILTER, 2u)); | 152 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(1, D3DTSS_MAGFILTER, 2u)); |
1742 int v64; // [sp+57h] [bp-1h]@2 | 1742 int v64; // [sp+57h] [bp-1h]@2 |
1743 int v62; | 1743 int v62; |
1744 //struct IndoorCameraD3D *pIndoorCameraD3D; | 1744 //struct IndoorCameraD3D *pIndoorCameraD3D; |
1745 //RenderVertexSoft *pVertices; // [sp+C4h] [bp-Ch]@6 | 1745 //RenderVertexSoft *pVertices; // [sp+C4h] [bp-Ch]@6 |
1746 | 1746 |
1747 | |
1748 //warning: the game uses CW culling by default, ccw is incosistent | |
1749 pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CCW); | |
1750 | |
1751 | |
1747 v63 = 0; | 1752 v63 = 0; |
1748 // basic optimizations | 1753 // basic optimizations |
1749 unsigned int uStartX, uEndX, | 1754 unsigned int uStartX, uEndX, |
1750 uStartZ, uEndZ; | 1755 uStartZ, uEndZ; |
1751 if (pIndoorCamera->sRotationY >= 0 && pIndoorCamera->sRotationY <= 1024) | 1756 if (pIndoorCamera->sRotationY >= 0 && pIndoorCamera->sRotationY <= 1024) |
1781 //pIndoorCameraD3D = pGame->pIndoorCameraD3D; | 1786 //pIndoorCameraD3D = pGame->pIndoorCameraD3D; |
1782 pGame->pIndoorCameraD3D->ViewTransform(&pTerrainVertices[z * 128 + x], 1); | 1787 pGame->pIndoorCameraD3D->ViewTransform(&pTerrainVertices[z * 128 + x], 1); |
1783 pGame->pIndoorCameraD3D->Project(&pTerrainVertices[z * 128 + x], 1, 0); | 1788 pGame->pIndoorCameraD3D->Project(&pTerrainVertices[z * 128 + x], 1, 0); |
1784 } | 1789 } |
1785 } | 1790 } |
1791 | |
1786 for (unsigned int z = uStartZ; z < uEndZ - 1; ++z) | 1792 for (unsigned int z = uStartZ; z < uEndZ - 1; ++z) |
1787 { | 1793 { |
1788 for (unsigned int x = uStartX; x < uEndX - 1; ++x) | 1794 for (unsigned int x = uStartX; x < uEndX - 1; ++x) |
1789 { | 1795 { |
1790 v8 = &array_77EC08[pOutdoorCamera->numStru148s]; | 1796 v8 = &array_77EC08[pOutdoorCamera->numStru148s]; |
1795 v8->uTileBitmapID = pOutdoor->DoGetTileTexture(x, z); | 1801 v8->uTileBitmapID = pOutdoor->DoGetTileTexture(x, z); |
1796 //v6 = v8->uTileBitmapID; | 1802 //v6 = v8->uTileBitmapID; |
1797 v8->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v8->uTileBitmapID]; | 1803 v8->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v8->uTileBitmapID]; |
1798 if (v8->uTileBitmapID == 0xFFFF) | 1804 if (v8->uTileBitmapID == 0xFFFF) |
1799 continue; | 1805 continue; |
1806 | |
1800 v8->flags = 0x8010 |pOutdoor->GetSomeOtherTileInfo(x, z); | 1807 v8->flags = 0x8010 |pOutdoor->GetSomeOtherTileInfo(x, z); |
1801 v8->field_32 = 0; | 1808 v8->field_32 = 0; |
1802 v8->field_59 = 1; | 1809 v8->field_59 = 1; |
1803 //v8->field_5D = (char)WorldPosToGridCellZ(floorf((pVertices->vWorldPosition.z + v8a->vWorldPosition.z) / 2 + 0.5f)); | 1810 //v8->field_5D = (char)WorldPosToGridCellZ(floorf((pVertices->vWorldPosition.z + v8a->vWorldPosition.z) / 2 + 0.5f)); |
1804 //v8->field_5C = WorldPosToGridCellX(floorf((v101->vWorldPosition.x + v8->vWorldPosition.x) / 2 + 0.5f));; | 1811 //v8->field_5C = WorldPosToGridCellX(floorf((v101->vWorldPosition.x + v8->vWorldPosition.x) / 2 + 0.5f));; |
1835 { | 1842 { |
1836 memcpy(&array_50AC10[k], &array_73D150[k], sizeof(struct RenderVertexSoft)); | 1843 memcpy(&array_50AC10[k], &array_73D150[k], sizeof(struct RenderVertexSoft)); |
1837 array_50AC10[k]._rhw = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097); | 1844 array_50AC10[k]._rhw = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097); |
1838 } | 1845 } |
1839 | 1846 |
1847 bool transparent = false; | |
1840 if ( v8->flags & 2 && v8->uTileBitmapID == pRenderer->field_1036AC_bitmapid ) | 1848 if ( v8->flags & 2 && v8->uTileBitmapID == pRenderer->field_1036AC_bitmapid ) |
1841 { | 1849 { |
1842 //v80 = false; | 1850 //v80 = false; |
1843 v6 = pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid]; | 1851 v6 = pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid]; |
1844 } | 1852 } |
1845 else | 1853 else |
1846 { | 1854 { |
1847 v6 = v8->uTileBitmapID; | 1855 v6 = v8->uTileBitmapID; |
1848 //v80 = true; | 1856 transparent = true; |
1849 } | 1857 } |
1850 | 1858 |
1851 assert(v6 < 1000); // many random crashes here | 1859 assert(v6 < 1000); // many random crashes here |
1852 pRenderer->DrawTerrainPolygon(v8, pBitmaps_LOD->pHardwareTextures[v6]); | 1860 |
1861 // for all shore tiles - draw a tile water under them since they're half-empty | |
1862 if (!strnicmp(pBitmaps_LOD->pTextures[v8->uTileBitmapID].pName, "wtrdr", 5)) // all shore tile filenames are wtrdrXXX | |
1863 { | |
1864 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 | |
1865 pRenderer->DrawTerrainPolygon(v8->uNumVertices, v8, pBitmaps_LOD->pHardwareTextures[pRenderer->pHDWaterBitmapIDs[pRenderer->field_1036A8_bitmapid]], false, true); | |
1866 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE); | |
1867 | |
1868 } | |
1869 | |
1870 pRenderer->DrawTerrainPolygon(v8->uNumVertices, v8, pBitmaps_LOD->pHardwareTextures[v6], transparent, true); | |
1871 | |
1872 | |
1853 --pOutdoorCamera->numStru148s; | 1873 --pOutdoorCamera->numStru148s; |
1854 --pOutdoorCamera->field_44; | 1874 --pOutdoorCamera->field_44; |
1855 } | 1875 } |
1856 } | 1876 } |
1857 } | 1877 } |
1995 while ( 1 ) | 2015 while ( 1 ) |
1996 { | 2016 { |
1997 v5 = abs(X);//v5 = 13108 | 2017 v5 = abs(X);//v5 = 13108 |
1998 v6 = abs(v83);//v6 = 13108 | 2018 v6 = abs(v83);//v6 = 13108 |
1999 --X; | 2019 --X; |
2020 __debugbreak(); // uncoment & refactor following large if | |
2000 v93 = (int)&stru_76E5C8[(v5 << 7) + v6]; | 2021 v93 = (int)&stru_76E5C8[(v5 << 7) + v6]; |
2001 /*if ( !v93->field_0 || ((v7 = 48 * v4, v8 = &pVerticesSR_806210[v4], a2 = v8, !v82) ? (v9 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7), | 2022 /*if ( !v93->field_0 || ((v7 = 48 * v4, v8 = &pVerticesSR_806210[v4], a2 = v8, !v82) ? (v9 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7), |
2002 v10 = &pVerticesSR_806210[1] + v7) : (v9 = &pVerticesSR_806210[1] + v7, v10 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7)), | 2023 v10 = &pVerticesSR_806210[1] + v7) : (v9 = &pVerticesSR_806210[1] + v7, v10 = (RenderVertexSoft *)((char *)&pVerticesSR_801A10 + v7)), |
2003 ((a8 = v9, | 2024 ((a8 = v9, |
2004 pVertices = &pVerticesSR_801A10[1] + v7, | 2025 pVertices = &pVerticesSR_801A10[1] + v7, |
2167 //v78 = pBitmaps_LOD->pHardwareTextures[v39]; | 2188 //v78 = pBitmaps_LOD->pHardwareTextures[v39]; |
2168 v16->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v39];// Ritor1: It's temporary | 2189 v16->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v39];// Ritor1: It's temporary |
2169 v77 = (int)v16; | 2190 v77 = (int)v16; |
2170 //v76 = v16->uNumVertices; | 2191 //v76 = v16->uNumVertices; |
2171 //LABEL_161: | 2192 //LABEL_161: |
2172 pRenderer->DrawTerrainPolygon(v16, pBitmaps_LOD->pHardwareTextures[v39]);//pRenderer->DrawTerrainPolygon(v16->uNumVertices, v16, pBitmaps_LOD->pHardwareTextures[v39], false, v80); | 2193 pRenderer->DrawTerrainPolygon(v16->uNumVertices, v16, pBitmaps_LOD->pHardwareTextures[v39], false, v80); |
2173 goto LABEL_162; | 2194 goto LABEL_162; |
2174 } | 2195 } |
2175 v38 = v16; | 2196 v38 = v16; |
2176 LABEL_56: | 2197 LABEL_56: |
2177 v38->_4811A3(); | 2198 v38->_4811A3(); |
2311 else | 2332 else |
2312 { | 2333 { |
2313 v58 = v40->uTileBitmapID; | 2334 v58 = v40->uTileBitmapID; |
2314 v81 = 1; | 2335 v81 = 1; |
2315 } | 2336 } |
2316 pRenderer->DrawTerrainPolygon(v40, pBitmaps_LOD->pHardwareTextures[v58]); | 2337 pRenderer->DrawTerrainPolygon(v40->uNumVertices, v40, pBitmaps_LOD->pHardwareTextures[v58], 0, v81); |
2317 } | 2338 } |
2318 LABEL_112: | 2339 LABEL_112: |
2319 v59 = &array_77EC08[pOutdoorCamera->numStru148s]; | 2340 v59 = &array_77EC08[pOutdoorCamera->numStru148s]; |
2320 //a8 = (RenderVertexSoft *)&array_77EC08[pOutdoorCamera->numStru148s]; | 2341 //a8 = (RenderVertexSoft *)&array_77EC08[pOutdoorCamera->numStru148s]; |
2321 v59->uTileBitmapID = pOutdoor->GetTileTexture(sX, sY); | 2342 v59->uTileBitmapID = pOutdoor->GetTileTexture(sX, sY); |
2432 //v78 = pBitmaps_LOD->pHardwareTextures[v75]; | 2453 //v78 = pBitmaps_LOD->pHardwareTextures[v75]; |
2433 v71->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v75];// Ritor1: It's temporary | 2454 v71->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v75];// Ritor1: It's temporary |
2434 //v77 = (int)v71; | 2455 //v77 = (int)v71; |
2435 //v76 = v71->uNumVertices; | 2456 //v76 = v71->uNumVertices; |
2436 //goto LABEL_161; | 2457 //goto LABEL_161; |
2437 pRenderer->DrawTerrainPolygon(v71, pBitmaps_LOD->pHardwareTextures[v75]);//pRenderer->DrawTerrainPolygon(v76, (stru148 *)v71, v78, v79, v80); | 2458 pRenderer->DrawTerrainPolygon(v76, (stru148 *)v71, v78, v79, v80); |
2438 goto LABEL_162; | 2459 goto LABEL_162; |
2439 } | 2460 } |
2440 v38 = (stru148 *)v71; | 2461 v38 = (stru148 *)v71; |
2441 goto LABEL_56; | 2462 goto LABEL_56; |
2442 } | 2463 } |
4412 } | 4433 } |
4413 else | 4434 else |
4414 { | 4435 { |
4415 if ( !v54 || byte_4D864C && pGame->uFlags & 2 ) | 4436 if ( !v54 || byte_4D864C && pGame->uFlags & 2 ) |
4416 { | 4437 { |
4417 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u));//Режимы визуализации точечных спрайтов | 4438 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP));//Режимы визуализации точечных спрайтов |
4418 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW)); | 4439 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW)); |
4419 if (bUsingSpecular) | 4440 if (bUsingSpecular) |
4420 { | 4441 { |
4421 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true)); | 4442 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE)); |
4422 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); | 4443 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); |
4423 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1)); | 4444 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO)); |
4424 } | 4445 } |
4425 if ( (signed int)uNumVertices > 0 ) | 4446 if ( (signed int)uNumVertices > 0 ) |
4426 { | 4447 { |
4427 v45 = (char *)&array_50AC10[0].vWorldViewPosition; | 4448 v45 = (char *)&array_50AC10[0].vWorldViewPosition; |
4428 v57 = (int)&arary_77E5C8[0].pos.y; | 4449 v57 = (int)&d3d_vertex_buffer[0].pos.y; |
4429 v55 = uNumVertices; | 4450 v55 = uNumVertices; |
4430 do | 4451 do |
4431 { | 4452 { |
4432 a2 = GetActorTintColor(a3->field_58, 0, *(float *)v45, 0, 0); | 4453 a2 = GetActorTintColor(a3->field_58, 0, *(float *)v45, 0, 0); |
4433 pGame->_44EE30(a4, (int)&a2); | 4454 pGame->_44EE30(a4, (int)&a2); |
4457 while ( !v18 ); | 4478 while ( !v18 ); |
4458 } | 4479 } |
4459 pRenderD3D->pDevice->SetTexture(0, pTexture); | 4480 pRenderD3D->pDevice->SetTexture(0, pTexture); |
4460 pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, | 4481 pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
4461 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 4482 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
4462 arary_77E5C8, | 4483 d3d_vertex_buffer, |
4463 uNumVertices, | 4484 uNumVertices, |
4464 D3DDP_DONOTLIGHT); | 4485 D3DDP_DONOTLIGHT); |
4465 } | 4486 } |
4466 else | 4487 else |
4467 { | 4488 { |
4468 if ( (signed int)uNumVertices > 0 ) | 4489 if ( (signed int)uNumVertices > 0 ) |
4469 { | 4490 { |
4470 v9 = (ODMFace *)&arary_77E5C8[0].pos.y; | 4491 v9 = (ODMFace *)&d3d_vertex_buffer[0].pos.y; |
4471 v10 = (char *)&array_50AC10[0].vWorldViewPosition; | 4492 v10 = (char *)&array_50AC10[0].vWorldViewPosition; |
4472 a4 = (ODMFace *)&arary_77E5C8[0].pos.y; | 4493 a4 = (ODMFace *)&d3d_vertex_buffer[0].pos.y; |
4473 v56 = uNumVertices; | 4494 v56 = uNumVertices; |
4474 while ( 1 ) | 4495 while ( 1 ) |
4475 { | 4496 { |
4476 v11 = *(float *)v10 * 1000.0; | 4497 v11 = *(float *)v10 * 1000.0; |
4477 *((int *)v9 - 1) = *((int *)v10 + 3); | 4498 *((int *)v9 - 1) = *((int *)v10 + 3); |
4502 if ( v18 ) | 4523 if ( v18 ) |
4503 break; | 4524 break; |
4504 v9 = a4; | 4525 v9 = a4; |
4505 } | 4526 } |
4506 } | 4527 } |
4507 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false)); | 4528 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE)); |
4508 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); | 4529 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); |
4509 if (bUsingSpecular) | 4530 if (bUsingSpecular) |
4510 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0)); | 4531 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, FALSE)); |
4511 | 4532 |
4512 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); | 4533 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); |
4513 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, | 4534 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
4514 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR, | 4535 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR, |
4515 arary_77E5C8, | 4536 d3d_vertex_buffer, |
4516 uNumVertices, | 4537 uNumVertices, |
4517 D3DDP_DONOTLIGHT)); | 4538 D3DDP_DONOTLIGHT)); |
4518 //v50 = (const char *)v5->pRenderD3D->pDevice; | 4539 //v50 = (const char *)v5->pRenderD3D->pDevice; |
4519 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE)); | 4540 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE)); |
4520 //(*(void (**)(void))(*(int *)v50 + 88))(); | 4541 //(*(void (**)(void))(*(int *)v50 + 88))(); |
4521 v53->_45D74F_MessWithLight(-1, 0); | 4542 v53->_45D74F_MessWithLight(-1, 0); |
4522 v23 = uNumVertices; | 4543 v23 = uNumVertices; |
4523 if ( (signed int)uNumVertices > 0 ) | 4544 if ( (signed int)uNumVertices > 0 ) |
4524 { | 4545 { |
4525 v24 = (char *)&arary_77E5C8[0].diffuse; | 4546 v24 = (char *)&d3d_vertex_buffer[0].diffuse; |
4526 do | 4547 do |
4527 { | 4548 { |
4528 *(int *)v24 = a2; | 4549 *(int *)v24 = a2; |
4529 v24 += 32; | 4550 v24 += 32; |
4530 --v23; | 4551 --v23; |
4531 } | 4552 } |
4532 while ( v23 ); | 4553 while ( v23 ); |
4533 } | 4554 } |
4534 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pTexture)); | 4555 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pTexture)); |
4535 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); | 4556 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); |
4536 if ( !pRenderer->bUsingSpecular ) | 4557 if ( !pRenderer->bUsingSpecular ) |
4537 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, true)); | 4558 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE)); |
4538 | 4559 |
4539 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true)); | 4560 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE)); |
4540 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 1)); | 4561 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO)); |
4541 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 3)); | 4562 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR)); |
4542 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, | 4563 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
4543 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR, | 4564 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR, |
4544 arary_77E5C8, | 4565 d3d_vertex_buffer, |
4545 uNumVertices, | 4566 uNumVertices, |
4546 D3DDP_DONOTLIGHT)); | 4567 D3DDP_DONOTLIGHT)); |
4547 if (bUsingSpecular) | 4568 if (bUsingSpecular) |
4548 { | 4569 { |
4549 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, true)); | 4570 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE)); |
4550 | 4571 |
4551 v33 = uNumVertices; | 4572 v33 = uNumVertices; |
4552 if ( (signed int)uNumVertices > 0 ) | 4573 if ( (signed int)uNumVertices > 0 ) |
4553 { | 4574 { |
4554 v34 = (char *)&arary_77E5C8[0].specular; | 4575 v34 = (char *)&d3d_vertex_buffer[0].specular; |
4555 do | 4576 do |
4556 { | 4577 { |
4557 v35 = *(int *)v34; | 4578 v35 = *(int *)v34; |
4558 *(int *)v34 = 0; | 4579 *(int *)v34 = 0; |
4559 v34 += 32; | 4580 v34 += 32; |
4561 *((int *)v34 - 9) = pRenderer->uFogColor | v35 & 0xFF000000; | 4582 *((int *)v34 - 9) = pRenderer->uFogColor | v35 & 0xFF000000; |
4562 } | 4583 } |
4563 while ( v33 ); | 4584 while ( v33 ); |
4564 } | 4585 } |
4565 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); | 4586 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); |
4566 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 6)); | 4587 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_INVSRCALPHA)); |
4567 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 5)); | 4588 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCALPHA)); |
4568 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, | 4589 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
4569 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR, | 4590 D3DFVF_XYZRHW | D3DFVF_TEX1 | D3DFVF_DIFFUSE | D3DFVF_SPECULAR, |
4570 arary_77E5C8, | 4591 d3d_vertex_buffer, |
4571 uNumVertices, | 4592 uNumVertices, |
4572 D3DDP_DONOTLIGHT)); | 4593 D3DDP_DONOTLIGHT)); |
4573 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, true)); | 4594 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE)); |
4574 //v40 = pRenderer->pRenderD3D->pDevice->lpVtbl; | 4595 //v40 = pRenderer->pRenderD3D->pDevice->lpVtbl; |
4575 v41 = GetLevelFogColor(); | 4596 v41 = GetLevelFogColor(); |
4576 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF); | 4597 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF); |
4577 v6 = 0; | 4598 v6 = 0; |
4578 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0); | 4599 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0); |
4579 } | 4600 } |
4580 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); | 4601 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); |
4581 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1)); | 4602 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO)); |
4582 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, v6)); | 4603 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, v6)); |
4583 } | 4604 } |
4584 } | 4605 } |
4585 } | 4606 } |
4586 } | 4607 } |
7206 unsigned int Render::GetActorTintColor(float a2, int a3, int a4, int a5, RenderBillboard *a6) | 7227 unsigned int Render::GetActorTintColor(float a2, int a3, int a4, int a5, RenderBillboard *a6) |
7207 { | 7228 { |
7208 return ::GetActorTintColor(a3, a4, a2, a5, a6); | 7229 return ::GetActorTintColor(a3, a4, a2, a5, a6); |
7209 } | 7230 } |
7210 | 7231 |
7211 void Render::DrawTerrainPolygon(stru148 *a3, IDirect3DTexture2 *pTexture)//new function | 7232 /*void Render::DrawTerrainPolygon_new(stru148 *a3, IDirect3DTexture2 *pTexture)//new function |
7212 { | 7233 { |
7213 int v5; // ebx@1 | 7234 int v5; // ebx@1 |
7214 int v6; // edi@1 | 7235 int v6; // edi@1 |
7215 int v8; // eax@7 | 7236 int v8; // eax@7 |
7216 float v9; // eax@12 | 7237 float v9; // eax@12 |
7266 return; | 7287 return; |
7267 | 7288 |
7268 | 7289 |
7269 | 7290 |
7270 | 7291 |
7271 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1); | 7292 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP); |
7272 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE); | 7293 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE); |
7273 if (this->bUsingSpecular) | 7294 if (this->bUsingSpecular) |
7274 { | 7295 { |
7275 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1); | 7296 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE); |
7276 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2); | 7297 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); |
7277 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1); | 7298 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO); |
7278 } | 7299 } |
7279 | 7300 |
7280 pVertices[0].pos.x = array_50AC10[0].vWorldViewProjX; | 7301 pVertices[0].pos.x = array_50AC10[0].vWorldViewProjX; |
7281 pVertices[0].pos.y = array_50AC10[0].vWorldViewProjY; | 7302 pVertices[0].pos.y = array_50AC10[0].vWorldViewProjY; |
7282 pVertices[0].pos.z = 1.0 - 1.0 / (1000 * array_50AC10[0].vWorldViewPosition.x / (double)pOutdoorCamera->shading_dist_mist); | 7303 pVertices[0].pos.z = 1.0 - 1.0 / (1000 * array_50AC10[0].vWorldViewPosition.x / (double)pOutdoorCamera->shading_dist_mist); |
7318 | 7339 |
7319 | 7340 |
7320 this->pRenderD3D->pDevice->SetTexture(0, pTexture); | 7341 this->pRenderD3D->pDevice->SetTexture(0, pTexture); |
7321 this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, pVertices, 6, D3DDP_DONOTLIGHT); | 7342 this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, pVertices, 6, D3DDP_DONOTLIGHT); |
7322 | 7343 |
7323 } | 7344 }*/ |
7345 | |
7324 //----- (004A26BC) -------------------------------------------------------- | 7346 //----- (004A26BC) -------------------------------------------------------- |
7325 void Render::DrawTerrainPolygon(unsigned int uNumVertices, stru148 *a4, IDirect3DTexture2 *a5, int a6, int a7) | 7347 void Render::DrawTerrainPolygon(unsigned int uNumVertices, stru148 *a4, IDirect3DTexture2 *a5, bool transparent, bool clampAtTextureBorders) |
7326 { | 7348 { |
7327 RenderVertexSoft *pVertices; // esi@0 | 7349 //RenderVertexSoft *pVertices; // esi@0 |
7328 int v7; // edi@1 | 7350 //int v7; // edi@1 |
7329 unsigned int v8; // ebx@1 | 7351 unsigned int v8; // ebx@1 |
7330 LightmapBuilder *v9; // esi@3 | 7352 LightmapBuilder *v9; // esi@3 |
7331 unsigned int v10; // edx@3 | 7353 unsigned int v10; // edx@3 |
7332 int v11; // eax@5 | 7354 int v11; // eax@5 |
7333 int v12; // eax@11 | 7355 int v12; // eax@11 |
7365 //IDirect3DDevice3Vtbl *v44; // ebx@28 | 7387 //IDirect3DDevice3Vtbl *v44; // ebx@28 |
7366 unsigned int v45; // eax@28 | 7388 unsigned int v45; // eax@28 |
7367 HRESULT v46; // eax@29 | 7389 HRESULT v46; // eax@29 |
7368 HRESULT v47; // eax@29 | 7390 HRESULT v47; // eax@29 |
7369 HRESULT v48; // eax@29 | 7391 HRESULT v48; // eax@29 |
7370 IDirect3DDevice3 *v49; // eax@35 | 7392 //IDirect3DDevice3 *v49; // eax@35 |
7371 //IDirect3DDevice3Vtbl *v50; // ecx@35 | 7393 //IDirect3DDevice3Vtbl *v50; // ecx@35 |
7372 int v51; // eax@40 | 7394 int v51; // eax@40 |
7373 char *v52; // esi@40 | 7395 char *v52; // esi@40 |
7374 double v53; // st7@42 | 7396 double v53; // st7@42 |
7375 double v54; // st7@42 | 7397 double v54; // st7@42 |
7376 signed int v55; // eax@42 | 7398 signed int v55; // eax@42 |
7377 int v56; // ecx@42 | 7399 int v56; // ecx@42 |
7378 double v57; // st7@42 | 7400 double v57; // st7@42 |
7379 float v58; // ST7C_4@43 | 7401 float v58; // ST7C_4@43 |
7380 int v59; // eax@43 | 7402 int v59; // eax@43 |
7381 signed int v60; // [sp+78h] [bp-14h]@31 | 7403 //signed int v60; // [sp+78h] [bp-14h]@31 |
7382 RenderVertexSoft *v61; // [sp+7Ch] [bp-10h]@3 | 7404 //RenderVertexSoft *v61; // [sp+7Ch] [bp-10h]@3 |
7383 const char *v62; // [sp+80h] [bp-Ch]@0 | 7405 const char *v62; // [sp+80h] [bp-Ch]@0 |
7384 const char *v63; // [sp+80h] [bp-Ch]@19 | 7406 const char *v63; // [sp+80h] [bp-Ch]@19 |
7385 int v64; // [sp+84h] [bp-8h]@0 | 7407 int v64; // [sp+84h] [bp-8h]@0 |
7386 LightmapBuilder *v65; // [sp+88h] [bp-4h]@3 | 7408 LightmapBuilder *v65; // [sp+88h] [bp-4h]@3 |
7387 unsigned int v66; // [sp+88h] [bp-4h]@40 | 7409 unsigned int v66; // [sp+88h] [bp-4h]@40 |
7388 unsigned int a6a; // [sp+A0h] [bp+14h]@11 | 7410 unsigned int a6a; // [sp+A0h] [bp+14h]@11 |
7389 | 7411 int a7; |
7390 v7 = (int)this; | 7412 |
7413 //v7 = (int)this; | |
7391 v8 = 0; | 7414 v8 = 0; |
7392 if ( !this->uNumD3DSceneBegins ) | 7415 if (!this->uNumD3DSceneBegins) |
7393 return; | 7416 return; |
7394 if ( uNumVertices < 3) | 7417 if ( uNumVertices < 3) |
7395 return; | 7418 return; |
7396 | 7419 |
7397 v61 = pVertices; | 7420 //v61 = pVertices; |
7421 | |
7398 /* v9 = pGame->pLightmapBuilder; | 7422 /* v9 = pGame->pLightmapBuilder; |
7399 v65 = v9; | 7423 v65 = v9; |
7400 v10 = v9->std__vector_000004_size;*/ | 7424 v10 = v9->std__vector_000004_size;*/ |
7401 if ( byte_4D864C && pGame->uFlags & 1 ) | 7425 if ( byte_4D864C && pGame->uFlags & 1 ) |
7402 { | 7426 { |
7403 v11 = GetActorTintColor(a4->field_58, 0, array_50AC10[0].vWorldViewPosition.x, 0, 0); | 7427 v11 = GetActorTintColor(a4->field_58, 0, array_50AC10[0].vWorldViewPosition.x, 0, 0); |
7404 pGame->pLightmapBuilder->_45D74F_MessWithLight(v11, 0); | 7428 pGame->pLightmapBuilder->_45D74F_MessWithLight(v11, 0); |
7405 } | 7429 } |
7406 else | 7430 else |
7407 { | 7431 { |
7408 if ( a6 || !pGame->pLightmapBuilder->std__vector_000004_size || | 7432 if (transparent || !pGame->pLightmapBuilder->std__vector_000004_size || |
7409 byte_4D864C && pGame->uFlags & 2 ) | 7433 byte_4D864C && pGame->uFlags & 2 ) |
7410 { | 7434 { |
7411 if ( (_BYTE)a7 ) | 7435 if (clampAtTextureBorders) |
7412 v60 = 3; | 7436 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP); |
7413 else | 7437 else |
7414 v60 = 1; | 7438 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP); |
7415 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, v60); | 7439 |
7416 if ( a6 || this->bUsingSpecular ) | 7440 if (transparent || this->bUsingSpecular) |
7417 { | 7441 { |
7418 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1); | 7442 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE); |
7419 v49 = this->pRenderD3D->pDevice; | 7443 if (transparent) |
7420 //v50 = v49->lpVtbl; | |
7421 if ( a6 ) | |
7422 { | 7444 { |
7423 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 5); | 7445 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA); |
7424 //this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 6); | 7446 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA); |
7447 //this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO); | |
7448 //this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); | |
7425 } | 7449 } |
7426 else | 7450 else |
7427 { | 7451 { |
7428 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2); | 7452 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); |
7429 //this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1); | 7453 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO); |
7430 __debugbreak;//it's error | |
7431 } | 7454 } |
7432 | 7455 } |
7433 } | 7456 if (uNumVertices > 0) |
7434 if ( (signed int)uNumVertices > 0 ) | 7457 { |
7435 { | 7458 v51 = (int)&d3d_vertex_buffer[0].pos.y; |
7436 v51 = (int)&arary_77E5C8[0].pos.y; | |
7437 v52 = (char *)&array_50AC10[0].vWorldViewPosition; | 7459 v52 = (char *)&array_50AC10[0].vWorldViewPosition; |
7438 a7 = (int)&arary_77E5C8[0].pos.y; | 7460 a7 = (int)&d3d_vertex_buffer[0].pos.y; |
7439 v66 = uNumVertices; | 7461 v66 = uNumVertices; |
7440 while ( 1 ) | 7462 while ( 1 ) |
7441 { | 7463 { |
7442 v53 = *(float *)v52 * 1000.0; | 7464 v53 = *(float *)v52 * 1000.0; |
7443 *(int *)(v51 - 4) = *((int *)v52 + 3); | 7465 *(int *)(v51 - 4) = *((int *)v52 + 3); |
7469 break; | 7491 break; |
7470 v51 = a7; | 7492 v51 = a7; |
7471 } | 7493 } |
7472 } | 7494 } |
7473 this->pRenderD3D->pDevice->SetTexture(0, a5); | 7495 this->pRenderD3D->pDevice->SetTexture(0, a5); |
7474 this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 7496 this->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, d3d_vertex_buffer, uNumVertices, 16); |
7475 arary_77E5C8, uNumVertices, 16); | 7497 if (transparent) |
7476 if ( a6 ) | 7498 { |
7477 { | 7499 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE)); |
7478 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0)); | 7500 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); |
7479 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u)); | 7501 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO)); |
7480 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u)); | |
7481 } | 7502 } |
7482 } | 7503 } |
7483 else | 7504 else |
7484 { | 7505 { |
7485 if ( (signed int)uNumVertices > 0 ) | 7506 if ( (signed int)uNumVertices > 0 ) |
7486 { | 7507 { |
7487 v12 = (int)&arary_77E5C8[0].pos.y; | 7508 v12 = (int)&d3d_vertex_buffer[0].pos.y; |
7488 v13 = (char *)&array_50AC10[0].vWorldViewPosition; | 7509 v13 = (char *)&array_50AC10[0].vWorldViewPosition; |
7489 a7 = (int)&arary_77E5C8[0].pos.y; | 7510 a7 = (int)&d3d_vertex_buffer[0].pos.y; |
7490 a6a = uNumVertices; | 7511 a6a = uNumVertices; |
7491 while ( 1 ) | 7512 while ( 1 ) |
7492 { | 7513 { |
7493 v14 = *(float *)v13 * 1000.0; | 7514 v14 = *(float *)v13 * 1000.0; |
7494 *(int *)(v12 - 4) = *((int *)v13 + 3); | 7515 *(int *)(v12 - 4) = *((int *)v13 + 3); |
7519 if ( v21 ) | 7540 if ( v21 ) |
7520 break; | 7541 break; |
7521 v12 = a7; | 7542 v12 = a7; |
7522 } | 7543 } |
7523 } | 7544 } |
7524 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false)); | 7545 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE)); |
7525 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); | 7546 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); |
7526 if ( pRenderer->bUsingSpecular ) | 7547 if (pRenderer->bUsingSpecular) |
7527 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0)); | 7548 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, FALSE)); |
7528 | 7549 |
7529 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0)); | 7550 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0)); |
7530 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( | 7551 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
7531 D3DPT_TRIANGLEFAN, | |
7532 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 7552 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
7533 arary_77E5C8, | 7553 d3d_vertex_buffer, |
7534 uNumVertices, | 7554 uNumVertices, |
7535 16)); | 7555 16)); |
7536 //v63 = (const char *)v7->pRenderD3D->pDevice; | 7556 //v63 = (const char *)v7->pRenderD3D->pDevice; |
7537 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1)); | 7557 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE)); |
7538 //(*(void (**)(void))(*(int *)v63 + 88))(); | 7558 //(*(void (**)(void))(*(int *)v63 + 88))(); |
7539 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0); | 7559 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0); |
7540 v26 = uNumVertices; | 7560 v26 = uNumVertices; |
7541 if ( (signed int)uNumVertices > 0 ) | 7561 if ( (signed int)uNumVertices > 0 ) |
7542 { | 7562 { |
7543 v27 = (char *)&arary_77E5C8[0].diffuse; | 7563 v27 = (char *)&d3d_vertex_buffer[0].diffuse; |
7544 do | 7564 do |
7545 { | 7565 { |
7546 *(int *)v27 = -1; | 7566 *(int *)v27 = -1; |
7547 v27 += 32; | 7567 v27 += 32; |
7548 --v26; | 7568 --v26; |
7549 } | 7569 } |
7550 while ( v26 ); | 7570 while ( v26 ); |
7551 } | 7571 } |
7552 ErrD3D(pRenderD3D->pDevice->SetTexture(0, a5)); | 7572 ErrD3D(pRenderD3D->pDevice->SetTexture(0, a5)); |
7553 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); | 7573 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); |
7554 if ( !pRenderer->bUsingSpecular ) | 7574 if ( !pRenderer->bUsingSpecular ) |
7555 { | 7575 { |
7556 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u)); | 7576 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE)); |
7557 } | 7577 } |
7558 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u)); | 7578 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE)); |
7559 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 1u)); | 7579 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO)); |
7560 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 3u)); | 7580 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR)); |
7561 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( | 7581 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
7562 D3DPT_TRIANGLEFAN, | |
7563 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 7582 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
7564 arary_77E5C8, | 7583 d3d_vertex_buffer, |
7565 uNumVertices, | 7584 uNumVertices, |
7566 16)); | 7585 16)); |
7567 if ( pRenderer->bUsingSpecular ) | 7586 if ( pRenderer->bUsingSpecular ) |
7568 { | 7587 { |
7569 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u)); | 7588 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE)); |
7570 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0)); | 7589 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0)); |
7571 v37 = uNumVertices; | 7590 v37 = uNumVertices; |
7572 if ( (signed int)uNumVertices > 0 ) | 7591 if ( (signed int)uNumVertices > 0 ) |
7573 { | 7592 { |
7574 v38 = (char *)&arary_77E5C8[0].specular; | 7593 v38 = (char *)&d3d_vertex_buffer[0].specular; |
7575 do | 7594 do |
7576 { | 7595 { |
7577 v39 = *(int *)v38; | 7596 v39 = *(int *)v38; |
7578 *(int *)v38 = 0; | 7597 *(int *)v38 = 0; |
7579 v38 += 32; | 7598 v38 += 32; |
7581 *((int *)v38 - 9) = pRenderer->uFogColor | v39 & 0xFF000000; | 7600 *((int *)v38 - 9) = pRenderer->uFogColor | v39 & 0xFF000000; |
7582 } | 7601 } |
7583 while ( v37 ); | 7602 while ( v37 ); |
7584 } | 7603 } |
7585 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0));//problem | 7604 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0));//problem |
7586 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 6u)); | 7605 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_INVSRCALPHA)); |
7587 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 5u)); | 7606 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCALPHA)); |
7588 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( | 7607 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
7589 D3DPT_TRIANGLEFAN, | |
7590 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 7608 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
7591 arary_77E5C8, | 7609 d3d_vertex_buffer, |
7592 uNumVertices, | 7610 uNumVertices, |
7593 16)); | 7611 16)); |
7594 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1)); | 7612 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE)); |
7595 //v44 = pRenderer->pRenderD3D->pDevice; | 7613 //v44 = pRenderer->pRenderD3D->pDevice; |
7596 v45 = GetLevelFogColor(); | 7614 v45 = GetLevelFogColor(); |
7597 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, v45 & 0xFFFFFF)); | 7615 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, v45 & 0xFFFFFF)); |
7598 v8 = 0; | 7616 v8 = 0; |
7599 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0)); | 7617 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0)); |
7600 } | 7618 } |
7601 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); | 7619 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); |
7602 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u)); | 7620 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO)); |
7603 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, v8)); | 7621 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, v8)); |
7604 } | 7622 } |
7605 } | 7623 } |
7606 if ( pIndoorCamera->field_4C & 2 || pBLVRenderParams->uFlags & 2 ) | 7624 |
7607 pGame->pIndoorCameraD3D->debug_outline_d3d(arary_77E5C8, uNumVertices, 0xFFFFFFu, 0.0); | 7625 if (pIndoorCamera->flags & INDOOR_CAMERA_DRAW_D3D_OUTLINES || |
7626 pBLVRenderParams->uFlags & INDOOR_CAMERA_DRAW_D3D_OUTLINES ) | |
7627 pGame->pIndoorCameraD3D->debug_outline_d3d(d3d_vertex_buffer, uNumVertices, 0x00FFFFFF, 0.0); | |
7608 } | 7628 } |
7609 | 7629 |
7610 // 4A26BC: could not find valid save-restore pair for esi | 7630 // 4A26BC: could not find valid save-restore pair for esi |
7611 // 4D864C: using guessed type char byte_4D864C; | 7631 // 4D864C: using guessed type char byte_4D864C; |
7612 | 7632 |
7622 if (!this->uNumD3DSceneBegins) | 7642 if (!this->uNumD3DSceneBegins) |
7623 return; | 7643 return; |
7624 | 7644 |
7625 if (uNumVertices >= 3) | 7645 if (uNumVertices >= 3) |
7626 { | 7646 { |
7627 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1); | 7647 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP); |
7628 if (this->bUsingSpecular) | 7648 if (this->bUsingSpecular) |
7629 { | 7649 { |
7630 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1); | 7650 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE); |
7631 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2); | 7651 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); |
7632 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1); | 7652 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO); |
7633 } | 7653 } |
7634 | 7654 |
7635 for (i = 0; i < uNumVertices; ++i) | 7655 for (i = 0; i < uNumVertices; ++i) |
7636 { | 7656 { |
7637 pVertices[i].pos.x = array_50AC10[i].vWorldViewProjX; | 7657 pVertices[i].pos.x = array_50AC10[i].vWorldViewProjX; |
7665 v4 = (int)this; | 7685 v4 = (int)this; |
7666 if ( !this->uNumD3DSceneBegins ) | 7686 if ( !this->uNumD3DSceneBegins ) |
7667 return; | 7687 return; |
7668 if ( uNumVertices >= 3 ) | 7688 if ( uNumVertices >= 3 ) |
7669 { | 7689 { |
7670 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1); | 7690 this->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP); |
7671 if ( this->bUsingSpecular ) | 7691 if ( this->bUsingSpecular ) |
7672 { | 7692 { |
7673 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1); | 7693 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE); |
7674 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2); | 7694 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); |
7675 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1); | 7695 this->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO); |
7676 } | 7696 } |
7677 for (i = 0; i < uNumVertices; ++i) | 7697 for (i = 0; i < uNumVertices; ++i) |
7678 { | 7698 { |
7679 pVertices[i].pos.x = array_50AC10[i].vWorldViewProjX; | 7699 pVertices[i].pos.x = array_50AC10[i].vWorldViewProjX; |
7680 pVertices[i].pos.y = array_50AC10[i].vWorldViewProjY; | 7700 pVertices[i].pos.y = array_50AC10[i].vWorldViewProjY; |
7714 if ( this->uNumD3DSceneBegins ) | 7734 if ( this->uNumD3DSceneBegins ) |
7715 { | 7735 { |
7716 v4 = a2; | 7736 v4 = a2; |
7717 if ( a2 >= 3 ) | 7737 if ( a2 >= 3 ) |
7718 { | 7738 { |
7719 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); | 7739 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); |
7720 v5 = 31 - (a3->field_58 & 0x1F); | 7740 v5 = 31 - (a3->field_58 & 0x1F); |
7721 if ( v5 < pOutdoor->field_CBC_terrain_triangles_shade_type ) | 7741 if ( v5 < pOutdoor->field_CBC_terrain_triangles_shade_type ) |
7722 v5 = pOutdoor->field_CBC_terrain_triangles_shade_type; | 7742 v5 = pOutdoor->field_CBC_terrain_triangles_shade_type; |
7723 v6 = 8 * v5 | ((8 * v5 | (v5 << 11)) << 8); | 7743 v6 = 8 * v5 | ((8 * v5 | (v5 << 11)) << 8); |
7724 if ( a2 > 0 ) | 7744 if ( a2 > 0 ) |
7725 { | 7745 { |
7726 v7 = (char *)&arary_77E5C8[0].pos.y; | 7746 v7 = (char *)&d3d_vertex_buffer[0].pos.y; |
7727 v8 = (char *)&array_507D30[0].vWorldViewProjY; | 7747 v8 = (char *)&array_507D30[0].vWorldViewProjY; |
7728 do | 7748 do |
7729 { | 7749 { |
7730 v9 = *((float *)v8 - 4) * 0.061758894; | 7750 v9 = *((float *)v8 - 4) * 0.061758894; |
7731 v10 = *((int *)v8 - 1); | 7751 v10 = *((int *)v8 - 1); |
7743 *((float *)v7 - 7) = 1.0 - 1.0 / v9; | 7763 *((float *)v7 - 7) = 1.0 - 1.0 / v9; |
7744 } | 7764 } |
7745 while ( v4 ); | 7765 while ( v4 ); |
7746 } | 7766 } |
7747 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex)); | 7767 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex)); |
7748 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( | 7768 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
7749 D3DPT_TRIANGLEFAN, | |
7750 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 7769 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
7751 arary_77E5C8, | 7770 d3d_vertex_buffer, |
7752 a2, | 7771 a2, |
7753 28)); | 7772 28)); |
7754 } | 7773 } |
7755 } | 7774 } |
7756 } | 7775 } |
7809 | 7828 |
7810 if (byte_4D864C && pGame->uFlags & 1) | 7829 if (byte_4D864C && pGame->uFlags & 1) |
7811 { | 7830 { |
7812 __debugbreak(); | 7831 __debugbreak(); |
7813 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false)); | 7832 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false)); |
7814 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1)); | 7833 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); |
7815 if ( (signed int)uNumVertices > 0 ) | 7834 if ( (signed int)uNumVertices > 0 ) |
7816 { | 7835 { |
7817 v12 = (char *)&array_507D30[0].vWorldViewPosition; | 7836 v12 = (char *)&array_507D30[0].vWorldViewPosition; |
7818 v13 = (char *)&arary_77E5C8[0].pos.y; | 7837 v13 = (char *)&d3d_vertex_buffer[0].pos.y; |
7819 auto a7 = uNumVertices; | 7838 auto a7 = uNumVertices; |
7820 uint v18; | 7839 uint v18; |
7821 do | 7840 do |
7822 { | 7841 { |
7823 v14 = *(float *)v12 * 0.061758894; | 7842 v14 = *(float *)v12 * 0.061758894; |
7839 pHwTex = (IDirect3DTexture2 *)v19->uTextureHeight; | 7858 pHwTex = (IDirect3DTexture2 *)v19->uTextureHeight; |
7840 *((float *)v13 - 2) = *((float *)v12 - 5) / (double)(signed int)pHwTex; | 7859 *((float *)v13 - 2) = *((float *)v12 - 5) / (double)(signed int)pHwTex; |
7841 } | 7860 } |
7842 while ( !v18 ); | 7861 while ( !v18 ); |
7843 } | 7862 } |
7844 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1)); | 7863 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); |
7845 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); | 7864 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); |
7846 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( | 7865 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( |
7847 D3DPT_TRIANGLEFAN, | 7866 D3DPT_TRIANGLEFAN, |
7848 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 7867 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
7849 arary_77E5C8, | 7868 d3d_vertex_buffer, |
7850 uNumVertices, | 7869 uNumVertices, |
7851 28)); | 7870 28)); |
7852 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0); | 7871 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0); |
7853 } | 7872 } |
7854 else | 7873 else |
7856 if (!pGame->pLightmapBuilder->std__vector_000004_size || | 7875 if (!pGame->pLightmapBuilder->std__vector_000004_size || |
7857 byte_4D864C && pGame->uFlags & 2) | 7876 byte_4D864C && pGame->uFlags & 2) |
7858 { | 7877 { |
7859 for (uint i = 0; i < uNumVertices; ++i) | 7878 for (uint i = 0; i < uNumVertices; ++i) |
7860 { | 7879 { |
7861 arary_77E5C8[i].pos.x = array_507D30[i].vWorldViewProjX; | 7880 d3d_vertex_buffer[i].pos.x = array_507D30[i].vWorldViewProjX; |
7862 arary_77E5C8[i].pos.y = array_507D30[i].vWorldViewProjY; | 7881 d3d_vertex_buffer[i].pos.y = array_507D30[i].vWorldViewProjY; |
7863 arary_77E5C8[i].pos.z = 1.0 - 1.0 / (array_507D30[i].vWorldViewPosition.x * 0.061758894); | 7882 d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / (array_507D30[i].vWorldViewPosition.x * 0.061758894); |
7864 arary_77E5C8[i].rhw = 1.0 / array_507D30[i].vWorldViewPosition.x; | 7883 d3d_vertex_buffer[i].rhw = 1.0 / array_507D30[i].vWorldViewPosition.x; |
7865 arary_77E5C8[i].diffuse = uCorrectedColor; | 7884 d3d_vertex_buffer[i].diffuse = uCorrectedColor; |
7866 arary_77E5C8[i].specular = 0; | 7885 d3d_vertex_buffer[i].specular = 0; |
7867 arary_77E5C8[i].texcoord.x = array_507D30[i].u / (double)pTex->uTextureWidth; | 7886 d3d_vertex_buffer[i].texcoord.x = array_507D30[i].u / (double)pTex->uTextureWidth; |
7868 arary_77E5C8[i].texcoord.y = array_507D30[i].v / (double)pTex->uTextureHeight; | 7887 d3d_vertex_buffer[i].texcoord.y = array_507D30[i].v / (double)pTex->uTextureHeight; |
7869 } | 7888 } |
7870 | 7889 |
7871 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1)); | 7890 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); |
7872 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex)); | 7891 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex)); |
7873 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, | 7892 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
7874 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 7893 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
7875 arary_77E5C8, | 7894 d3d_vertex_buffer, |
7876 uNumVertices, | 7895 uNumVertices, |
7877 28)); | 7896 28)); |
7878 } | 7897 } |
7879 else | 7898 else |
7880 { | 7899 { |
7881 __debugbreak(); | 7900 __debugbreak(); |
7882 if ( (signed int)uNumVertices > 0 ) | 7901 if ( (signed int)uNumVertices > 0 ) |
7883 { | 7902 { |
7884 v23 = pTex; | 7903 v23 = pTex; |
7885 v24 = (char *)&array_507D30[0].vWorldViewPosition; | 7904 v24 = (char *)&array_507D30[0].vWorldViewPosition; |
7886 v25 = (char *)&arary_77E5C8[0].pos.y; | 7905 v25 = (char *)&d3d_vertex_buffer[0].pos.y; |
7887 pTex = (Texture *)uNumVertices; | 7906 pTex = (Texture *)uNumVertices; |
7888 uint v18; | 7907 uint v18; |
7889 do | 7908 do |
7890 { | 7909 { |
7891 v26 = *(float *)v24 * 0.061758894; | 7910 v26 = *(float *)v24 * 0.061758894; |
7907 *((float *)v25 - 2) = *((float *)v24 - 5) / (double)(signed int)v23->uTextureHeight; | 7926 *((float *)v25 - 2) = *((float *)v24 - 5) / (double)(signed int)v23->uTextureHeight; |
7908 } | 7927 } |
7909 while ( !v18 ); | 7928 while ( !v18 ); |
7910 } | 7929 } |
7911 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false)); | 7930 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false)); |
7912 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1)); | 7931 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); |
7913 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); | 7932 ErrD3D(pRenderD3D->pDevice->SetTexture(0, nullptr)); |
7914 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( | 7933 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
7915 D3DPT_TRIANGLEFAN, | |
7916 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 7934 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
7917 arary_77E5C8, | 7935 d3d_vertex_buffer, |
7918 uNumVertices, | 7936 uNumVertices, |
7919 28)); | 7937 28)); |
7920 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1)); | 7938 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1)); |
7921 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0); | 7939 pGame->pLightmapBuilder->_45D74F_MessWithLight(-1, 0); |
7922 v33 = uNumVertices; | 7940 v33 = uNumVertices; |
7923 if ( (signed int)uNumVertices > 0 ) | 7941 if ( (signed int)uNumVertices > 0 ) |
7924 { | 7942 { |
7925 v34 = (char *)&arary_77E5C8[0].diffuse; | 7943 v34 = (char *)&d3d_vertex_buffer[0].diffuse; |
7926 do | 7944 do |
7927 { | 7945 { |
7928 *(int *)v34 = uCorrectedColor; | 7946 *(int *)v34 = uCorrectedColor; |
7929 v34 += 32; | 7947 v34 += 32; |
7930 --v33; | 7948 --v33; |
7931 } | 7949 } |
7932 while ( v33 ); | 7950 while ( v33 ); |
7933 } | 7951 } |
7934 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex)); | 7952 ErrD3D(pRenderD3D->pDevice->SetTexture(0, pHwTex)); |
7935 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1)); | 7953 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP)); |
7936 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u)); | 7954 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE)); |
7937 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true)); | 7955 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE)); |
7938 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 1)); | 7956 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO)); |
7939 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 3)); | 7957 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR)); |
7940 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( | 7958 ErrD3D(pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
7941 D3DPT_TRIANGLEFAN, | |
7942 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 7959 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
7943 arary_77E5C8, | 7960 d3d_vertex_buffer, |
7944 uNumVertices, | 7961 uNumVertices, |
7945 28)); | 7962 28)); |
7946 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); | 7963 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); |
7947 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1)); | 7964 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO)); |
7948 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, false)); | 7965 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE)); |
7949 } | 7966 } |
7950 } | 7967 } |
7951 } | 7968 } |
7952 // 4D864C: using guessed type char byte_4D864C; | 7969 // 4D864C: using guessed type char byte_4D864C; |
7953 | 7970 |
8707 v29[2].texcoord.y = 1.0; | 8724 v29[2].texcoord.y = 1.0; |
8708 v29[3].pos.x = srcX - v17; | 8725 v29[3].pos.x = srcX - v17; |
8709 v29[3].pos.y = v18 + srcY; | 8726 v29[3].pos.y = v18 + srcY; |
8710 v29[3].texcoord.x = 0.0; | 8727 v29[3].texcoord.x = 0.0; |
8711 v29[3].texcoord.y = 0.0; | 8728 v29[3].texcoord.y = 0.0; |
8712 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u)); | 8729 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE)); |
8713 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u)); | 8730 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); |
8714 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 2u)); | 8731 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE)); |
8715 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0)); | 8732 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, FALSE)); |
8716 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0)); | 8733 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE)); |
8717 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1u)); | 8734 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE)); |
8718 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, a9)); | 8735 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTexture(0, a9)); |
8719 ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive( | 8736 ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive( |
8720 D3DPT_TRIANGLEFAN, | 8737 D3DPT_TRIANGLEFAN, |
8721 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 8738 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
8722 v29, | 8739 v29, |
8723 4, | 8740 4, |
8724 24)); | 8741 24)); |
8725 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0)); | 8742 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE)); |
8726 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u)); | 8743 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); |
8727 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u)); | 8744 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO)); |
8728 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1u)); | 8745 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, TRUE)); |
8729 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u)); | 8746 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE)); |
8730 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 2u)); | 8747 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW)); |
8731 } | 8748 } |
8732 | 8749 |
8733 | 8750 |
8734 //----- (004A4CC9) -------------------------------------------------------- | 8751 //----- (004A4CC9) -------------------------------------------------------- |
8735 void Render::_4A4CC9(stru6_stru1_indoor_sw_billboard *a1, int a2) | 8752 void Render::_4A4CC9(stru6_stru1_indoor_sw_billboard *a1, int a2) |
9185 v36[3].pos.z = 0.0; | 9202 v36[3].pos.z = 0.0; |
9186 v36[3].rhw = 1.0; | 9203 v36[3].rhw = 1.0; |
9187 v36[3].texcoord.x = 0.0; | 9204 v36[3].texcoord.x = 0.0; |
9188 v36[3].texcoord.y = 0.0; | 9205 v36[3].texcoord.y = 0.0; |
9189 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0)); | 9206 ErrD3D(pRenderD3D->pDevice->SetTexture(0, 0)); |
9190 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0)); | 9207 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, FALSE)); |
9191 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u)); | 9208 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE)); |
9192 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0)); | 9209 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE)); |
9193 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 5u)); | 9210 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA)); |
9194 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 6u)); | 9211 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA)); |
9195 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0)); | 9212 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, FALSE)); |
9196 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, 8u)); | 9213 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS)); |
9197 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( | 9214 ErrD3D(pRenderD3D->pDevice->DrawPrimitive( |
9198 D3DPT_TRIANGLEFAN, | 9215 D3DPT_TRIANGLEFAN, |
9199 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 9216 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
9200 v36, | 9217 v36, |
9201 4, | 9218 4, |
9202 28)); | 9219 28)); |
9203 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); | 9220 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); |
9204 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u)); | 9221 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO)); |
9205 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0)); | 9222 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE)); |
9206 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1u)); | 9223 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE)); |
9207 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1u)); | 9224 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, TRUE)); |
9208 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, 2u)); | 9225 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, D3DCMP_LESS)); |
9209 } | 9226 } |
9210 else | 9227 else |
9211 { | 9228 { |
9212 v40 = (1.0 - a3) * 65536.0; | 9229 v40 = (1.0 - a3) * 65536.0; |
9213 v39 = v40 + 6.7553994e15; | 9230 v39 = v40 + 6.7553994e15; |
11294 | 11311 |
11295 | 11312 |
11296 //----- (004A1C1E) -------------------------------------------------------- | 11313 //----- (004A1C1E) -------------------------------------------------------- |
11297 void DoRenderBillboards_D3D() | 11314 void DoRenderBillboards_D3D() |
11298 { | 11315 { |
11299 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 3u)); | 11316 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP)); |
11300 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u)); | 11317 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE)); |
11301 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0)); | 11318 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, FALSE)); |
11302 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE)); | 11319 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE)); |
11303 | 11320 |
11304 /*if (pRenderer->uNumBillboardsToDraw) | 11321 /*if (pRenderer->uNumBillboardsToDraw) |
11305 { | 11322 { |
11306 auto p = &pRenderer->pBillboardRenderListD3D[0]; | 11323 auto p = &pRenderer->pBillboardRenderListD3D[0]; |
11347 } | 11364 } |
11348 | 11365 |
11349 if (pRenderer->bFogEnabled) | 11366 if (pRenderer->bFogEnabled) |
11350 { | 11367 { |
11351 pRenderer->bFogEnabled = false; | 11368 pRenderer->bFogEnabled = false; |
11352 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1)); | 11369 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE)); |
11353 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF)); | 11370 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF)); |
11354 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0)); | 11371 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0)); |
11355 } | 11372 } |
11356 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 2)); | 11373 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW)); |
11357 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1)); | 11374 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, TRUE)); |
11358 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0)); | 11375 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE)); |
11359 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2u)); | 11376 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); |
11360 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 1u)); | 11377 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO)); |
11361 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1u)); | 11378 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, TRUE)); |
11362 } | 11379 } |
11363 | 11380 |
11364 | 11381 |
11365 | 11382 |
11366 | 11383 |
11373 case RenderBillboardD3D::Transparent: | 11390 case RenderBillboardD3D::Transparent: |
11374 { | 11391 { |
11375 if (pRenderer->bFogEnabled) | 11392 if (pRenderer->bFogEnabled) |
11376 { | 11393 { |
11377 pRenderer->bFogEnabled = false; | 11394 pRenderer->bFogEnabled = false; |
11378 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 1u)); | 11395 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, TRUE)); |
11379 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF)); | 11396 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGCOLOR, GetLevelFogColor() & 0xFFFFFF)); |
11380 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0)); | 11397 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGTABLEMODE, 0)); |
11381 } | 11398 } |
11382 | 11399 |
11383 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 5)); | 11400 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA)); |
11384 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 6u)); | 11401 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA)); |
11385 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 1)); | 11402 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, TRUE)); |
11386 } | 11403 } |
11387 break; | 11404 break; |
11388 | 11405 |
11389 case RenderBillboardD3D::Opaque_1: | 11406 case RenderBillboardD3D::Opaque_1: |
11390 case RenderBillboardD3D::Opaque_2: | 11407 case RenderBillboardD3D::Opaque_2: |
11393 if (pRenderer->bUsingSpecular) | 11410 if (pRenderer->bUsingSpecular) |
11394 { | 11411 { |
11395 if (!pRenderer->bFogEnabled) | 11412 if (!pRenderer->bFogEnabled) |
11396 { | 11413 { |
11397 pRenderer->bFogEnabled = true; | 11414 pRenderer->bFogEnabled = true; |
11398 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, 0)); | 11415 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_FOGENABLE, FALSE)); |
11399 } | 11416 } |
11400 } | 11417 } |
11401 | 11418 |
11402 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); | 11419 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE)); |
11403 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, 2u)); | 11420 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE)); |
11404 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, 0)); | 11421 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_DITHERENABLE, FALSE)); |
11405 } | 11422 } |
11406 break; | 11423 break; |
11407 | 11424 |
11408 default: | 11425 default: |
11409 Log::Warning(L"SetBillboardBlendOptions: invalid opacity type (%u)", a1); | 11426 Log::Warning(L"SetBillboardBlendOptions: invalid opacity type (%u)", a1); |