comparison Render.cpp @ 1999:079f2abf54e4

DrawIndoorSky() fix
author Ritor1
date Tue, 05 Nov 2013 12:58:19 +0600
parents 157fd2831567
children 2e6c63bdcfa9 bb1e7b0780d8
comparison
equal deleted inserted replaced
1998:1175adbf8c58 1999:079f2abf54e4
4976 v5 = pOutdoor->max_terrain_dimming_level; 4976 v5 = pOutdoor->max_terrain_dimming_level;
4977 for (uint i = 0; i < uNumVertices; ++i) 4977 for (uint i = 0; i < uNumVertices; ++i)
4978 { 4978 {
4979 d3d_vertex_buffer[i].pos.x = array_507D30[i].vWorldViewProjX; 4979 d3d_vertex_buffer[i].pos.x = array_507D30[i].vWorldViewProjX;
4980 d3d_vertex_buffer[i].pos.y = array_507D30[i].vWorldViewProjY; 4980 d3d_vertex_buffer[i].pos.y = array_507D30[i].vWorldViewProjY;
4981 d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / array_507D30[i].vWorldViewPosition.y; 4981 d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / (array_507D30[i].vWorldViewPosition.x * 0.061758894);
4982 d3d_vertex_buffer[i].rhw = array_507D30[i]._rhw; 4982 d3d_vertex_buffer[i].rhw = array_507D30[i]._rhw;
4983 d3d_vertex_buffer[i].diffuse = 8 * v5 | ((8 * v5 | (v5 << 11)) << 8); 4983 d3d_vertex_buffer[i].diffuse = 8 * v5 | ((8 * v5 | (v5 << 11)) << 8);
4984 d3d_vertex_buffer[i].specular = 0; 4984 d3d_vertex_buffer[i].specular = 0;
4985 d3d_vertex_buffer[i].texcoord.x = array_507D30[i].u; 4985 d3d_vertex_buffer[i].texcoord.x = array_507D30[i].u;
4986 d3d_vertex_buffer[i].texcoord.y = array_507D30[i].v; 4986 d3d_vertex_buffer[i].texcoord.y = array_507D30[i].v;
5049 int v70; // [sp+144h] [bp-30h]@3 5049 int v70; // [sp+144h] [bp-30h]@3
5050 int X; // [sp+148h] [bp-2Ch]@9 5050 int X; // [sp+148h] [bp-2Ch]@9
5051 int v72; // [sp+14Ch] [bp-28h]@7 5051 int v72; // [sp+14Ch] [bp-28h]@7
5052 float v73; // [sp+150h] [bp-24h]@16 5052 float v73; // [sp+150h] [bp-24h]@16
5053 unsigned int v74; // [sp+154h] [bp-20h]@3 5053 unsigned int v74; // [sp+154h] [bp-20h]@3
5054 unsigned int v74_; // [sp+154h] [bp-20h]@3
5054 RenderVertexSoft *v75; // [sp+158h] [bp-1Ch]@3 5055 RenderVertexSoft *v75; // [sp+158h] [bp-1Ch]@3
5055 float v76; // [sp+15Ch] [bp-18h]@9 5056 float v76; // [sp+15Ch] [bp-18h]@9
5056 int v77; // [sp+160h] [bp-14h]@9 5057 int v77; // [sp+160h] [bp-14h]@9
5057 int v78; // [sp+164h] [bp-10h]@7 5058 int v78; // [sp+164h] [bp-10h]@7
5058 void *v79; // [sp+168h] [bp-Ch]@9 5059 void *v79; // [sp+168h] [bp-Ch]@9
5083 - (double)pBLVRenderParams->fov_rad_fixpoint 5084 - (double)pBLVRenderParams->fov_rad_fixpoint
5084 / ((cos(v5) * 16192.0 + 0.0000001) 5085 / ((cos(v5) * 16192.0 + 0.0000001)
5085 * 65535.0) 5086 * 65535.0)
5086 * (sin(v5) * -16192.0 - (double)pGame->pIndoorCameraD3D->vPartyPos.z)); 5087 * (sin(v5) * -16192.0 - (double)pGame->pIndoorCameraD3D->vPartyPos.z));
5087 5088
5089 stru_8019C8._48653D_frustum_blv(65536, 0, 0, 0, 65536, 0);
5088 pSkyPolygon.Create_48607B(&stru_8019C8); 5090 pSkyPolygon.Create_48607B(&stru_8019C8);
5089 pSkyPolygon.ptr_38->_48653D_frustum_blv(65536, 0, 0, 0, 65536, 0);
5090 pSkyPolygon.uTileBitmapID = pFace->uBitmapID; 5091 pSkyPolygon.uTileBitmapID = pFace->uBitmapID;
5091 5092
5092 pSkyPolygon.pTexture = pBitmaps_LOD->GetTexture(pSkyPolygon.uTileBitmapID); 5093 pSkyPolygon.pTexture = pBitmaps_LOD->GetTexture(pSkyPolygon.uTileBitmapID);
5093 if ( !pSkyPolygon.pTexture ) 5094 if ( !pSkyPolygon.pTexture )
5094 return; 5095 return;
5111 v13 = pSkyPolygon.pTexture->uHeightMinus1; 5112 v13 = pSkyPolygon.pTexture->uHeightMinus1;
5112 //v67 = 1.0 / (double)pSkyPolygon.pTexture->uTextureWidth; 5113 //v67 = 1.0 / (double)pSkyPolygon.pTexture->uTextureWidth;
5113 v63 = 224 * pMiscTimer->uTotalGameTimeElapsed & v13; 5114 v63 = 224 * pMiscTimer->uTotalGameTimeElapsed & v13;
5114 v66 = 224 * pMiscTimer->uTotalGameTimeElapsed & v12; 5115 v66 = 224 * pMiscTimer->uTotalGameTimeElapsed & v12;
5115 v78 = 0; 5116 v78 = 0;
5116 v81 = 0; 5117 //v81 = 0;
5117 float v68 = 1.0 / (double)pSkyPolygon.pTexture->uTextureHeight; 5118 float v68 = 1.0 / (double)pSkyPolygon.pTexture->uTextureHeight;
5118 if ( (signed int)pSkyPolygon.uNumVertices <= 0 ) 5119 if ( (signed int)pSkyPolygon.uNumVertices <= 0 )
5119 return; 5120 return;
5120 5121
5121 //v14 = (char *)&array_507D30[0].vWorldViewProjY;
5122 int _507D30_idx = 0; 5122 int _507D30_idx = 0;
5123 while ( 2 ) 5123 for ( _507D30_idx; _507D30_idx < pSkyPolygon.uNumVertices; _507D30_idx++ )
5124 { 5124 {
5125 //v15 = (void *)(v72 * (v70 - (int)array_507D30[_507D30_idx].vWorldViewProjY)); 5125 //v15 = (void *)(v72 * (v70 - (int)array_507D30[_507D30_idx].vWorldViewProjY));
5126 v77 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_west_east * (signed __int64)(v72 * (v70 - array_507D30[_507D30_idx].vWorldViewProjY))) >> 16; 5126 v77 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_west_east * (signed __int64)(v72 * (v70 - array_507D30[_507D30_idx].vWorldViewProjY))) >> 16;
5127 v74 = v77 + pSkyPolygon.ptr_38->angle_from_north; 5127 v74 = v77 + pSkyPolygon.ptr_38->angle_from_north;
5128 5128
5129 v77 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_north_south * (signed __int64)(v72 * (v70 - array_507D30[_507D30_idx].vWorldViewProjY))) >> 16; 5129 v77 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_north_south * (signed __int64)(v72 * (v70 - array_507D30[_507D30_idx].vWorldViewProjY))) >> 16;
5130 v75 = (RenderVertexSoft *)(v77 + pSkyPolygon.ptr_38->angle_from_east); 5130 v74_ = v77 + pSkyPolygon.ptr_38->angle_from_east;
5131 5131
5132 v79 = (void *)(((unsigned __int64)(pSkyPolygon.v_18.z * (signed __int64)v72 * (v70 - (int)array_507D30[_507D30_idx].vWorldViewProjY))) >> 16); 5132 v79 = (void *)(((unsigned __int64)(pSkyPolygon.v_18.z * (signed __int64)v72 * (v70 - (int)array_507D30[_507D30_idx].vWorldViewProjY))) >> 16);
5133 v17 = v72 * (pBLVRenderParams->uViewportCenterX - (int)array_507D30[_507D30_idx].vWorldViewProjX); 5133 v17 = v72 * (pBLVRenderParams->uViewportCenterX - (int)array_507D30[_507D30_idx].vWorldViewProjX);
5134 v18 = array_507D30[_507D30_idx].vWorldViewProjY - 1.0; 5134 v18 = array_507D30[_507D30_idx].vWorldViewProjY - 1.0;
5135 v19 = -pSkyPolygon.field_24; 5135 v19 = -pSkyPolygon.field_24;
5141 { 5141 {
5142 v79 = v20; 5142 v79 = v20;
5143 if ( !X ) 5143 if ( !X )
5144 goto LABEL_14; 5144 goto LABEL_14;
5145 v21 = abs(v19 >> 14); 5145 v21 = abs(v19 >> 14);
5146 if ( v21 <= abs(X) ) 5146 if ( v21 <= abs(X) )//0x800 <= 0x28652
5147 break; 5147 break;
5148 if ( SLODWORD(v76) <= (signed int)pViewport->uViewportTL_Y ) 5148 if ( SLODWORD(v76) <= (signed int)pViewport->uViewportTL_Y )
5149 break; 5149 break;
5150 v19 = v77; 5150 v19 = v77;
5151 v20 = v79; 5151 v20 = v79;
5161 { 5161 {
5162 LODWORD(v23) = v77 << 16; 5162 LODWORD(v23) = v77 << 16;
5163 HIDWORD(v23) = v77 >> 16;//v23 = 0xfffffe0000000000 5163 HIDWORD(v23) = v77 >> 16;//v23 = 0xfffffe0000000000
5164 v79 = (void *)(v23 / X);//X = FFFF9014(-28652) 5164 v79 = (void *)(v23 / X);//X = FFFF9014(-28652)
5165 v77 = v17; 5165 v77 = v17;
5166 LODWORD(v76) = v74 + ((unsigned __int64)(pSkyPolygon.ptr_38->angle_from_west * (signed __int64)v17) >> 16); 5166 signed __int64 s = v74 + ((pSkyPolygon.ptr_38->angle_from_west * (signed __int64)v17) >> 16);// s = 0xFFFFFFFF FFFF3EE6
5167 LODWORD(v80) = v66 + ((signed int)((unsigned __int64)(SLODWORD(v76) * v23 / X) >> 16) >> 4); 5167 LODWORD(v80) = v66 + ((signed int)((unsigned __int64)(SLODWORD(s) * (v23 / X)) >> 16) >> 4);
5168 //v24 = (double)SLODWORD(v80) * 0.000015259022;
5169 array_507D30[_507D30_idx].u = ((double)SLODWORD(v80) * 0.000015259022) * (1.0 / (double)pSkyPolygon.pTexture->uTextureWidth); 5168 array_507D30[_507D30_idx].u = ((double)SLODWORD(v80) * 0.000015259022) * (1.0 / (double)pSkyPolygon.pTexture->uTextureWidth);
5170 5169
5171 v75 = (RenderVertexSoft *)((char *)v75 + ((unsigned __int64)(pSkyPolygon.ptr_38->angle_from_south * (signed __int64)v17) >> 16)); 5170 signed __int64 s2 = (signed __int64)(v74_ + ((unsigned __int64)(pSkyPolygon.ptr_38->angle_from_south * (signed __int64)v17) >> 16));
5172 LODWORD(v80) = v63 + ((signed int)((unsigned __int64)((signed int)v75 * v23 / X) >> 16) >> 4); 5171 LODWORD(v80) = v63 + ((signed int)((unsigned __int64)(SLODWORD(s2) * (v23 / X)) >> 16) >> 4);
5173 array_507D30[_507D30_idx].v = ((double)SLODWORD(v80) * 0.000015259022) * v68; 5172 array_507D30[_507D30_idx].v = ((double)SLODWORD(v80) * 0.000015259022) * v68;
5174 5173
5175 v77 = (unsigned __int64)(SLODWORD(v76) * v23 / X) >> 16; 5174 v77 = (unsigned __int64)(SLODWORD(s) * (v23 / X)) >> 16;
5176 LODWORD(v73) = (unsigned __int64)((signed int)v75 * v23 / X) >> 16; 5175 LODWORD(v73) = (unsigned __int64)(SLODWORD(s2) * (v23 / X)) >> 16;
5177 //v14 += 48;
5178 v81 = (char *)v81 + 1;
5179 //v26 = __OFSUB__((int)v81, pSkyPolygon.uNumVertices);
5180 //v25 = (signed int)((char *)v81 - pSkyPolygon.uNumVertices) < 0;
5181 array_507D30[_507D30_idx]._rhw = 65536.0 / (double)(signed int)v79; 5176 array_507D30[_507D30_idx]._rhw = 65536.0 / (double)(signed int)v79;
5182 _507D30_idx++; 5177
5183 if ( (int)v81 >= pSkyPolygon.uNumVertices ) 5178 //if ( (int)v81 >= pSkyPolygon.uNumVertices )
5184 { 5179 //{
5185 pRenderer->DrawIndoorSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon, 5180 // pRenderer->DrawIndoorSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon,
5186 pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]); 5181 // pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]);
5187 return; 5182 // return;
5188 } 5183 //}
5189 continue; 5184 continue;
5190 } 5185 }
5191 break; 5186 break;
5192 } 5187 }
5193 5188 if ( _507D30_idx >= pSkyPolygon.uNumVertices )
5189 {
5190 pRenderer->DrawIndoorSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon,
5191 pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]);
5192 return;
5193 }
5194 LODWORD(v73) = 0; 5194 LODWORD(v73) = 0;
5195 v80 = v76; 5195 v80 = v76;
5196 if ( (signed int)pSkyPolygon.uNumVertices > 0 ) 5196 if ( (signed int)pSkyPolygon.uNumVertices > 0 )
5197 { 5197 {
5198 v28 = (double)SLODWORD(v76); 5198 v28 = (double)SLODWORD(v76);