comparison Render.cpp @ 62:80484cf3a683

23.01.13 DrawParticles_ODM
author Ritor1
date Wed, 23 Jan 2013 00:50:28 +0600
parents 6c2cefdaea3e
children f6e7d7110512
comparison
equal deleted inserted replaced
61:6c2cefdaea3e 62:80484cf3a683
999 int v97; // ST08_4@204 999 int v97; // ST08_4@204
1000 float result; // eax@212 1000 float result; // eax@212
1001 char v102; // [sp+Ch] [bp-68h]@191 1001 char v102; // [sp+Ch] [bp-68h]@191
1002 __int16 v103; // [sp+10h] [bp-64h]@190 1002 __int16 v103; // [sp+10h] [bp-64h]@190
1003 __int16 v104; // [sp+12h] [bp-62h]@190 1003 __int16 v104; // [sp+12h] [bp-62h]@190
1004 int v105; // [sp+1Ch] [bp-58h]@1 1004 int pHeight; // [sp+1Ch] [bp-58h]@1
1005 int v106; // [sp+20h] [bp-54h]@3 1005 int v106; // [sp+20h] [bp-54h]@3
1006 int v107; // [sp+24h] [bp-50h]@3 1006 int v107; // [sp+24h] [bp-50h]@3
1007 int v108; // [sp+28h] [bp-4Ch]@9 1007 int v108; // [sp+28h] [bp-4Ch]@9
1008 int v109; // [sp+2Ch] [bp-48h]@9 1008 int v109; // [sp+2Ch] [bp-48h]@9
1009 int v110; // [sp+30h] [bp-44h]@9 1009 int v110; // [sp+30h] [bp-44h]@9
1023 float v124; // [sp+68h] [bp-Ch]@1 1023 float v124; // [sp+68h] [bp-Ch]@1
1024 int v125; // [sp+6Ch] [bp-8h]@9 1024 int v125; // [sp+6Ch] [bp-8h]@9
1025 float v126; // [sp+70h] [bp-4h]@9 1025 float v126; // [sp+70h] [bp-4h]@9
1026 1026
1027 memset(&v102, 0, sizeof(v102)); 1027 memset(&v102, 0, sizeof(v102));
1028 v105 = pIndoorCamera->sRotationY / ((signed int)stru_5C6E00->uIntegerHalfPi / 2); 1028 pHeight = pIndoorCamera->sRotationY / ((signed int)stru_5C6E00->uIntegerHalfPi / 2);
1029 v0 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerDoublePi - pIndoorCamera->sRotationY); 1029 v0 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerDoublePi - pIndoorCamera->sRotationY);
1030 v1 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerPi + v0); 1030 v1 = stru_5C6E00->uDoublePiMask & (stru_5C6E00->uIntegerPi + v0);
1031 LODWORD(v124) = (signed int)((pIndoorCamera->uMapGridCellX << 16) 1031 LODWORD(v124) = (signed int)((pIndoorCamera->uMapGridCellX << 16)
1032 + 3 1032 + 3
1033 * stru_5C6E00->SinCos( 1033 * stru_5C6E00->SinCos(
1147 } 1147 }
1148 LODWORD(v16) = 0; 1148 LODWORD(v16) = 0;
1149 LODWORD(v126) = 0; 1149 LODWORD(v126) = 0;
1150 v17 = v117 - 1; 1150 v17 = v117 - 1;
1151 v18 = v116 - 1; 1151 v18 = v116 - 1;
1152 switch ( v105 ) 1152 switch ( pHeight )
1153 { 1153 {
1154 case 0: 1154 case 0:
1155 case 7: 1155 case 7:
1156 v116 = terrain_76DFC8[v17]; 1156 v116 = terrain_76DFC8[v17];
1157 if ( v120 > v116 ) 1157 if ( v120 > v116 )
1559 LABEL_173: 1559 LABEL_173:
1560 v69 = LODWORD(v16) - 1; 1560 v69 = LODWORD(v16) - 1;
1561 ptr_801A08 = pVerticesSR_806210; 1561 ptr_801A08 = pVerticesSR_806210;
1562 ptr_801A04 = pVerticesSR_801A10; 1562 ptr_801A04 = pVerticesSR_801A10;
1563 LODWORD(v126) = v69; 1563 LODWORD(v126) = v69;
1564 if ( v105 && v105 != 7 && v105 != 3 && v105 != 4 ) 1564 if ( pHeight && pHeight != 7 && pHeight != 3 && pHeight != 4 )
1565 { 1565 {
1566 for ( i = v69; i >= 1; --i ) 1566 for ( i = v69; i >= 1; --i )
1567 { 1567 {
1568 v70 = i; 1568 v70 = i;
1569 v71 = terrain_76D7C8[i]; 1569 v71 = terrain_76D7C8[i];
1588 if ( v73 - 2 < v75 ) 1588 if ( v73 - 2 < v75 )
1589 { 1589 {
1590 v127 = 0; 1590 v127 = 0;
1591 v79 = (v73 - 66) << 9; 1591 v79 = (v73 - 66) << 9;
1592 v116 = v77; 1592 v116 = v77;
1593 v105 = v79; 1593 pHeight = v79;
1594 v111 = v75 - v77; 1594 v111 = v75 - v77;
1595 do 1595 do
1596 {// âûñîòà ÷åòûðåõ âåðøèí ÿ÷åéêè 1596 {// âûñîòà ÷åòûðåõ âåðøèí ÿ÷åéêè
1597 *(float *)&v106 = (double)v105; 1597 *(float *)&v106 = (double)pHeight;
1598 *(float *)((char *)&ptr_801A08->vWorldPosition.x + v127) = *(float *)&v106;//x 1598 *(float *)((char *)&ptr_801A08->vWorldPosition.x + v127) = *(float *)&v106;//x
1599 v105 = (64 - *(int *)((char *)terrain_76D9C8 + v70)) << 9; 1599 pHeight = (64 - *(int *)((char *)terrain_76D9C8 + v70)) << 9;
1600 *(float *)((char *)&ptr_801A08->vWorldPosition.y + v127) = (double)v105;//y 1600 *(float *)((char *)&ptr_801A08->vWorldPosition.y + v127) = (double)pHeight;//y
1601 v105 = pOutdoor->GetHeightOnTerrain(v112, *(int *)((char *)terrain_76D9C8 + v70)); 1601 pHeight = pOutdoor->GetHeightOnTerrain(v112, *(int *)((char *)terrain_76D9C8 + v70));
1602 *(float *)((char *)&ptr_801A08->vWorldPosition.z + v127) = (double)v105;//z 1602 *(float *)((char *)&ptr_801A08->vWorldPosition.z + v127) = (double)pHeight;//z
1603 *(float *)((char *)&ptr_801A04->vWorldPosition.x + v127) = *(float *)&v106;//x 1603 *(float *)((char *)&ptr_801A04->vWorldPosition.x + v127) = *(float *)&v106;//x
1604 v105 = (63 - *(int *)((char *)terrain_76D9C8 + v70)) << 9; 1604 pHeight = (63 - *(int *)((char *)terrain_76D9C8 + v70)) << 9;
1605 *(float *)((char *)&ptr_801A04->vWorldPosition.y + v127) = (double)v105;//y 1605 *(float *)((char *)&ptr_801A04->vWorldPosition.y + v127) = (double)pHeight;//y
1606 v105 = pOutdoor->GetHeightOnTerrain(v112, *(int *)((char *)terrain_76D9C8 + v70) + 1); 1606 pHeight = pOutdoor->GetHeightOnTerrain(v112, *(int *)((char *)terrain_76D9C8 + v70) + 1);
1607 *(float *)((char *)&ptr_801A04->vWorldPosition.z + v127) = (double)v105;//z 1607 *(float *)((char *)&ptr_801A04->vWorldPosition.z + v127) = (double)pHeight;//z
1608 if ( !byte_4D864C || !(pGame->uFlags & 0x80) ) 1608 if ( !byte_4D864C || !(pGame->uFlags & 0x80) )
1609 { 1609 {
1610 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A08 + v127, 1); 1610 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A08 + v127, 1);
1611 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A04 + v127, 1); 1611 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A04 + v127, 1);
1612 a1->Project((RenderVertexSoft *)(char *)ptr_801A08 + v127, 1, 0); 1612 a1->Project((RenderVertexSoft *)(char *)ptr_801A08 + v127, 1, 0);
1613 a1->Project((RenderVertexSoft *)(char *)ptr_801A04 + v127, 1, 0); 1613 a1->Project((RenderVertexSoft *)(char *)ptr_801A04 + v127, 1, 0);
1614 } 1614 }
1615 v79 += 512; 1615 v79 += 512;
1616 v127 += 48; 1616 v127 += 48;
1617 ++v116; 1617 ++v116;
1618 v105 = v79; 1618 pHeight = v79;
1619 } 1619 }
1620 while ( v116 < v107 ); 1620 while ( v116 < v107 );
1621 } 1621 }
1622 v103 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[v70]); 1622 v103 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[v70]);
1623 v104 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[v70]); 1623 v104 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[v70]);
1624 if ( pRenderer->pRenderD3D ) 1624 if ( pRenderer->pRenderD3D )//Ritor1: do comment to test
1625 Render::DrawTerrainD3D(v111, 0, (int)&v102); 1625 Render::DrawTerrainD3D(v111, 0, (int)&v102);
1626 else 1626 else
1627 Render::DrawTerrainSW(v111, 0, (int)&v102); 1627 Render::DrawTerrainSW(v111, 0, (int)&v102);
1628 } 1628 }
1629 } 1629 }
1651 if ( v89 - 2 < v90 + 2 ) 1651 if ( v89 - 2 < v90 + 2 )
1652 { 1652 {
1653 v86 = 0; 1653 v86 = 0;
1654 v116 = v89 - 2; 1654 v116 = v89 - 2;
1655 v92 = (66 - v89) << 9; 1655 v92 = (66 - v89) << 9;
1656 v105 = (66 - v89) << 9; 1656 pHeight = (66 - v89) << 9;
1657 v111 = v90 + 2 - (v89 - 2); 1657 v111 = v90 + 2 - (v89 - 2);
1658 do 1658 do
1659 { 1659 {
1660 v93 = v116; 1660 v93 = v116;
1661 v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 64) << 9; 1661 v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 64) << 9;
1662 *(float *)((char *)&ptr_801A08->vWorldPosition.x + v86) = (double)v106; 1662 *(float *)((char *)&ptr_801A08->vWorldPosition.x + v86) = (double)v106;
1663 *(float *)&v105 = (double)v105; 1663 *(float *)&pHeight = (double)pHeight;
1664 *(float *)((char *)&ptr_801A08->vWorldPosition.y + v86) = *(float *)&v105; 1664 *(float *)((char *)&ptr_801A08->vWorldPosition.y + v86) = *(float *)&pHeight;
1665 v106 = pOutdoor->GetHeightOnTerrain(*(int *)((char *)terrain_76DBC8 + v86), v93); 1665 v106 = pOutdoor->GetHeightOnTerrain(*(int *)((char *)terrain_76DBC8 + v86), v93);
1666 v97 = v116; 1666 v97 = v116;
1667 *(float *)((char *)&ptr_801A08->vWorldPosition.z + v86) = (double)v106; 1667 *(float *)((char *)&ptr_801A08->vWorldPosition.z + v86) = (double)v106;
1668 v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 63) << 9; 1668 v106 = (*(int *)((char *)terrain_76DBC8 + v86) - 63) << 9;
1669 *(float *)((char *)&ptr_801A04->vWorldPosition.x + v86) = (double)v106; 1669 *(float *)((char *)&ptr_801A04->vWorldPosition.x + v86) = (double)v106;
1670 *(float *)((char *)&ptr_801A04->vWorldPosition.y + v86) = *(float *)&v105; 1670 *(float *)((char *)&ptr_801A04->vWorldPosition.y + v86) = *(float *)&pHeight;
1671 v105 = pOutdoor->GetHeightOnTerrain(*(int *)((char *)terrain_76DBC8 + v86) + 1, v97); 1671 pHeight = pOutdoor->GetHeightOnTerrain(*(int *)((char *)terrain_76DBC8 + v86) + 1, v97);
1672 *(float *)((char *)&ptr_801A04->vWorldPosition.z + v86) = (double)v105; 1672 *(float *)((char *)&ptr_801A04->vWorldPosition.z + v86) = (double)pHeight;
1673 if ( !byte_4D864C || !(pGame->uFlags & 0x80) ) 1673 if ( !byte_4D864C || !(pGame->uFlags & 0x80) )
1674 { 1674 {
1675 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1); 1675 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1);
1676 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1); 1676 a1->ViewTransform((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1);
1677 a1->Project((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1, 0); 1677 a1->Project((RenderVertexSoft *)(char *)ptr_801A08 + v86, 1, 0);
1678 a1->Project((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1, 0); 1678 a1->Project((RenderVertexSoft *)(char *)ptr_801A04 + v86, 1, 0);
1679 } 1679 }
1680 v92 -= 512; 1680 v92 -= 512;
1681 v86 += 48; 1681 v86 += 48;
1682 ++v116; 1682 ++v116;
1683 v105 = v92; 1683 pHeight = v92;
1684 } 1684 }
1685 while ( v116 < v107 ); 1685 while ( v116 < v107 );
1686 } 1686 }
1687 v103 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[v86]); 1687 v103 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[v86]);
1688 v104 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[v86]); 1688 v104 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[v86]);
1849 v12 = v11 + 6.755399441055744e15, 1849 v12 = v11 + 6.755399441055744e15,
1850 sX = LODWORD(v12), 1850 sX = LODWORD(v12),
1851 v13 = v8->vWorldPosition.y + 6.755399441055744e15, 1851 v13 = v8->vWorldPosition.y + 6.755399441055744e15,
1852 sY = LODWORD(v13), 1852 sY = LODWORD(v13),
1853 thisd = (v10->vWorldPosition.x + v8->vWorldPosition.x) * 0.5, 1853 thisd = (v10->vWorldPosition.x + v8->vWorldPosition.x) * 0.5,
1854 v14 = WorldPosToGridCellX(floorf(thisd + 0.5f)), 1854 v14 = WorldPosToGridCellX(floorf(thisd + 0.5f)),//maybe current camera position X
1855 v15 = v9->vWorldPosition.y + v8->vWorldPosition.y, 1855 v15 = v9->vWorldPosition.y + v8->vWorldPosition.y,
1856 v89 = v14, 1856 v89 = v14,
1857 thise = v15 * 0.5, 1857 thise = v15 * 0.5,
1858 _this = (LightmapBuilder *)WorldPosToGridCellZ(floorf(thisd + 0.5f)), 1858 _this = (LightmapBuilder *)WorldPosToGridCellZ(floorf(thisd + 0.5f)),//maybe current camera position Z
1859 WorldPosToGridCellX(sX), 1859 WorldPosToGridCellX(sX),
1860 WorldPosToGridCellZ(sY), 1860 WorldPosToGridCellZ(sY),
1861 !byte_4D864C) 1861 !byte_4D864C)
1862 || !(pGame->uFlags & 0x80)) 1862 || !(pGame->uFlags & 0x80))
1863 && !sub_481EFA(v8, v9, v101, pVertices, 1)) ) 1863 && !sub_481EFA(v8, v9, v101, pVertices, 1)) )
2108 if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 ) 2108 if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 )
2109 { 2109 {
2110 a8 = (RenderVertexSoft *)(this_3a ? 3 : v108 != 0 ? 5 : 0); 2110 a8 = (RenderVertexSoft *)(this_3a ? 3 : v108 != 0 ? 5 : 0);
2111 static_sub_0048034E_stru_76D590._49B0C9(v99, *(float *)&a4); 2111 static_sub_0048034E_stru_76D590._49B0C9(v99, *(float *)&a4);
2112 if ( pDecalBuilder->uNumDecals > 0 ) 2112 if ( pDecalBuilder->uNumDecals > 0 )
2113 pDecalBuilder->ApplyDecals( 2113 pDecalBuilder->ApplyDecals(31 - v40->field_58, 4, &static_sub_0048034E_stru_76D590, uNumVertices, array_50AC10, 0, (char)a8, -1);
2114 31 - v40->field_58,
2115 4,
2116 &static_sub_0048034E_stru_76D590,
2117 uNumVertices,
2118 array_50AC10,
2119 0,
2120 (char)a8,
2121 -1);
2122 } 2114 }
2123 if ( stru_F8AD28.uNumLightsApplied > 0 ) 2115 if ( stru_F8AD28.uNumLightsApplied > 0 )
2124 v96->ApplyLights( 2116 v96->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_76D590, uNumVertices, array_50AC10, 0, (char)a8);
2125 &stru_F8AD28,
2126 &static_sub_0048034E_stru_76D590,
2127 uNumVertices,
2128 array_50AC10,
2129 0,
2130 (char)a8);
2131 v55 = uNumVertices; 2117 v55 = uNumVertices;
2132 v35 = byte_4D864C == 0; 2118 v35 = byte_4D864C == 0;
2133 v40->uNumVertices = uNumVertices; 2119 v40->uNumVertices = uNumVertices;
2134 if ( v35 || !(pGame->uFlags & 0x80) ) 2120 if ( v35 || !(pGame->uFlags & 0x80) )
2135 { 2121 {
4287 } 4273 }
4288 else 4274 else
4289 { 4275 {
4290 if ( !v54 || byte_4D864C && pGame->uFlags & 2 ) 4276 if ( !v54 || byte_4D864C && pGame->uFlags & 2 )
4291 { 4277 {
4292 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u)); 4278 ErrD3D(pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 1u));//Ðåæèìû âèçóàëèçàöèè òî÷å÷íûõ ñïðàéòîâ
4293 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW)); 4279 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CW));
4294 if (bUsingSpecular) 4280 if (bUsingSpecular)
4295 { 4281 {
4296 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true)); 4282 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true));
4297 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2)); 4283 ErrD3D(pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, 2));
7077 return; 7063 return;
7078 7064
7079 if (pRenderD3D) 7065 if (pRenderD3D)
7080 { 7066 {
7081 pGame->draw_debug_outlines(); 7067 pGame->draw_debug_outlines();
7082 DoRenderBillboards_D3D(); //Ritor1: it's temporarily 7068 //DoRenderBillboards_D3D(); //Ritor1: it's temporarily
7083 pGame->pStru6Instance->RenderSpecialEffects(); 7069 pGame->pStru6Instance->RenderSpecialEffects();
7084 pRenderD3D->pDevice->EndScene(); 7070 pRenderD3D->pDevice->EndScene();
7085 } 7071 }
7086 else 7072 else
7087 pGame->pStru6Instance->RenderSpecialEffects(); 7073 pGame->pStru6Instance->RenderSpecialEffects();