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