diff Engine/LOD.cpp @ 2572:d87bfbd3bb3b

Step towards unification of Texture and RGBTexture (class Image)
author a.parshin
date Sat, 05 Mar 2016 01:51:54 +0200
parents a902abdfc7f2
children dd36326a9994
line wrap: on
line diff
--- a/Engine/LOD.cpp	Mon Oct 05 00:19:13 2015 +0200
+++ b/Engine/LOD.cpp	Sat Mar 05 01:51:54 2016 +0200
@@ -42,6 +42,15 @@
 int _6A0CA8_lod_unused; // weak
 
 
+inline int LODFile_IconsBitmaps::LoadDummyTexture()
+{
+    for (unsigned int i = 0; i < uNumLoadedFiles; ++i)
+        if (!strcmp(pTextures[i].pName, "pending"))
+            return i;
+    return LoadTextureFromLOD(&pTextures[uNumLoadedFiles], "pending", TEXTURE_16BIT_PALETTE);
+}
+
+
 // inlined
 //----- (mm6c::00408860) --------------------------------------------------
 void LODFile_IconsBitmaps::_inlined_sub2()
@@ -1144,7 +1153,7 @@
   this->dword_11B84 = 0;
   this->dword_11B80 = 0;
   this->uNumLoadedFiles = 0;
-  this->dword_011BA4 = 0;
+  this->_011BA4_debug_paletted_pixels_uncompressed = false;
   //this->can_load_hardware_sprites = 0;
   this->pHardwareSurfaces = 0;
   this->pHardwareTextures = 0;
@@ -1809,20 +1818,20 @@
 
   fread(pDst, 1, 0x30u, File);
   strcpy(pDst->pName, pContainer);
-  pDst->pLevelOfDetail0_prolly_alpha_mask = 0;
+  pDst->paletted_pixels = 0;
   if ( pDst->uDecompressedSize )
   {
-    pDst->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)malloc(pDst->uDecompressedSize);
+    pDst->paletted_pixels = (unsigned __int8 *)malloc(pDst->uDecompressedSize);
     v9 = malloc(pDst->uTextureSize);
     fread((void *)v9, 1, (size_t)pDst->uTextureSize, File);
-    zlib::MemUnzip(pDst->pLevelOfDetail0_prolly_alpha_mask, &pDst->uDecompressedSize, v9, pDst->uTextureSize);
+    zlib::MemUnzip(pDst->paletted_pixels, &pDst->uDecompressedSize, v9, pDst->uTextureSize);
     pDst->uTextureSize = pDst->uDecompressedSize;
     free(v9);
   }
   else
   {
-    pDst->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)malloc(0);
-    fread(pDst->pLevelOfDetail0_prolly_alpha_mask, 1, (size_t)pDst->uTextureSize, File);
+    pDst->paletted_pixels = (unsigned __int8 *)malloc(0);
+    fread(pDst->paletted_pixels, 1, (size_t)pDst->uTextureSize, File);
   }
   pDst->pPalette16 = 0;
   pDst->pPalette24 = 0;
@@ -1849,7 +1858,7 @@
 
   if ( pDst->pBits & 2 )
   {
-    v15 = (int)&pDst->pLevelOfDetail0_prolly_alpha_mask[pDst->uSizeOfMaxLevelOfDetail];
+    v15 = (int)&pDst->paletted_pixels[pDst->uSizeOfMaxLevelOfDetail];
     pDst->pLevelOfDetail1 = (unsigned __int8 *)v15;
     v16 = (pDst->uSizeOfMaxLevelOfDetail >> 2) + v15;
     //pDst->pLevelOfDetail2 = (unsigned __int8 *)v16;
@@ -2061,7 +2070,7 @@
 
   File = FindContainer(pContainer, 0);
   v6 = pDst;
-  if ( File && pDst->pLevelOfDetail0_prolly_alpha_mask
+  if ( File && pDst->paletted_pixels
     && mode == 2
     && pDst->pPalette16 && !pDst->pPalette24
     && (v7 = pDst->uTextureSize,
@@ -2070,9 +2079,9 @@
         v8 = pDst->uTextureSize,
         (signed int)v8 <= (signed int)v7) )
   {
-    if ( !pDst->uDecompressedSize || this->dword_011BA4 )
+    if ( !pDst->uDecompressedSize || this->_011BA4_debug_paletted_pixels_uncompressed)
     {
-      fread(pDst->pLevelOfDetail0_prolly_alpha_mask, 1, pDst->uTextureSize, File);
+      fread(pDst->paletted_pixels, 1, pDst->uTextureSize, File);
     }
     else
     {
@@ -2082,7 +2091,7 @@
       zlib::MemUnzip(Sourcea, &v6->uDecompressedSize, DstBufa, v6->uTextureSize);
       v6->uTextureSize = pDst->uDecompressedSize;
       free(DstBufa);
-      memcpy(v6->pLevelOfDetail0_prolly_alpha_mask, Sourcea, pDst->uDecompressedSize);
+      memcpy(v6->paletted_pixels, Sourcea, pDst->uDecompressedSize);
       free(Sourcea);
     }
     for( uint i = 0; i < 256; ++i )
@@ -2159,10 +2168,10 @@
     }
     return result;
   }
-  if ( !v8->uDecompressedSize || dword_011BA4 )
+  if ( !v8->uDecompressedSize || _011BA4_debug_paletted_pixels_uncompressed)
   {
-    v8->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)malloc(v8->uTextureSize);
-    fread(v8->pLevelOfDetail0_prolly_alpha_mask, 1, (size_t)v8->uTextureSize, pFile);
+    v8->paletted_pixels = (unsigned __int8 *)malloc(v8->uTextureSize);
+    fread(v8->paletted_pixels, 1, (size_t)v8->uTextureSize, pFile);
   }
   else
   {
@@ -2179,8 +2188,8 @@
                           + ((signed int)v8->uSizeOfMaxLevelOfDetail >> 6));
       v22 = (size_t)pOutTex;
       v23 = &pContainer[v8->uTextureWidth * v8->uTextureHeight];
-      v8->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)malloc((unsigned int)pOutTex);
-      memcpy(v8->pLevelOfDetail0_prolly_alpha_mask, v23, v22);
+      v8->paletted_pixels = (unsigned __int8 *)malloc((unsigned int)pOutTex);
+      memcpy(v8->paletted_pixels, v23, v22);
       v8->uTextureWidth = (signed __int16)v8->uTextureWidth / 2;
       v8->uTextureHeight = (signed __int16)v8->uTextureHeight / 2;
       --v8->uWidthLn2;
@@ -2192,8 +2201,8 @@
     }
     else
     {
-      v8->pLevelOfDetail0_prolly_alpha_mask = (unsigned __int8 *)malloc(v8->uDecompressedSize);
-      memcpy(v8->pLevelOfDetail0_prolly_alpha_mask, pContainer, v8->uDecompressedSize);
+      v8->paletted_pixels = (unsigned __int8 *)malloc(v8->uDecompressedSize);
+      memcpy(v8->paletted_pixels, pContainer, v8->uDecompressedSize);
     }
     free((void *)pContainer);
   }
@@ -2230,7 +2239,7 @@
 
   if ( v8->pBits & 2 )
   {
-    v8->pLevelOfDetail1 = &v8->pLevelOfDetail0_prolly_alpha_mask[v8->uSizeOfMaxLevelOfDetail];
+    v8->pLevelOfDetail1 = &v8->paletted_pixels[v8->uSizeOfMaxLevelOfDetail];
     //v8->pLevelOfDetail2 = &v8->pLevelOfDetail1[v8->uSizeOfMaxLevelOfDetail >> 2];
     //v8->pLevelOfDetail3 = &v8->pLevelOfDetail2[v8->uSizeOfMaxLevelOfDetail >> 4];
   }