comparison Render.cpp @ 670:9824e2eeee30

fixed decorations animation
author Gloval
date Fri, 15 Mar 2013 01:51:51 +0400
parents 7747161ea5b5
children c0bfb386b15f
comparison
equal deleted inserted replaced
666:a5750c94b022 670:9824e2eeee30
9042 } 9042 }
9043 return false; 9043 return false;
9044 } 9044 }
9045 9045
9046 //----- (004A5048) -------------------------------------------------------- 9046 //----- (004A5048) --------------------------------------------------------
9047 HWLTexture *Render::MoveSpriteToDevice(Sprite *pSprite) 9047 bool Render::MoveSpriteToDevice( Sprite *pSprite )
9048 { 9048 {
9049 Sprite *v2; // edi@1 9049
9050 Render *v3; // ebx@1 9050 HWLTexture *sprite_texture; // eax@1
9051 HWLTexture *result; // eax@1
9052 HWLTexture *v5; // esi@1
9053 //unsigned int v6; // ST18_4@2
9054 //RenderD3D *v7; // ecx@2
9055 Sprite *v8; // ebx@4
9056 unsigned __int16 *v9; // edx@5 9051 unsigned __int16 *v9; // edx@5
9057 LPVOID v10; // eax@5 9052 LPVOID v10; // eax@5
9058 signed int v11; // ebx@5
9059 signed int v12; // ecx@6
9060 signed int v13; // edi@7
9061 HRESULT v14; // eax@10
9062 DDSURFACEDESC2 Dst; // [sp+Ch] [bp-7Ch]@4 9053 DDSURFACEDESC2 Dst; // [sp+Ch] [bp-7Ch]@4
9063 9054
9064 v2 = pSprite; 9055 sprite_texture = pD3DSprites.LoadTexture(pSprite->pName, pSprite->uPaletteID);
9065 v3 = this; 9056 if ( sprite_texture )
9066 result = pD3DSprites.LoadTexture(pSprite->pName, pSprite->uPaletteID); 9057 {
9067 v5 = result; 9058 _gpu_memory_used += 2 * sprite_texture->uWidth * sprite_texture->uHeight;
9068 if ( result ) 9059 pSprite->uAreaX = sprite_texture->uAreaX;
9069 { 9060 pSprite->uAreaY = sprite_texture->uAreaY;
9070 v3->_gpu_memory_used += 2 * result->uWidth * result->uHeight; 9061 pSprite->uBufferWidth = sprite_texture->uBufferWidth;
9071 v2->uAreaX = result->field_30; 9062 pSprite->uBufferHeight = sprite_texture->uBufferHeight;
9072 v2->uAreaY = result->field_34; 9063 pSprite->uAreaWidth = sprite_texture->uAreaWidth;
9073 v2->uBufferWidth = result->field_18; 9064 pSprite->uAreaHeight = sprite_texture->uAreaHeigth;
9074 v2->uBufferHeight = result->field_1C;
9075 v2->uAreaWidth = result->field_20;
9076 v2->uAreaHeight = result->field_24;
9077 //v6 = v3->uMinDeviceTextureDim; 9065 //v6 = v3->uMinDeviceTextureDim;
9078 //v7 = v3->pRenderD3D; 9066 //v7 = v3->pRenderD3D;
9079 if (!pRenderD3D->CreateTexture(result->uWidth, result->uHeight, &v2->pTextureSurface, &v2->pTexture, 1u, 0, uMinDeviceTextureDim)) 9067 if (!pRenderD3D->CreateTexture(sprite_texture->uWidth, sprite_texture->uHeight, &pSprite->pTextureSurface, &pSprite->pTexture, 1u, 0, uMinDeviceTextureDim))
9080 Abortf("HiScreen16::LoadTexture - D3Drend->CreateTexture() failed: %x", 0); 9068 Abortf("HiScreen16::LoadTexture - D3Drend->CreateTexture() failed: %x", 0);
9081 //pSprite = v2->pTextureSurface; 9069 //pSprite = v2->pTextureSurface;
9082 //pSprite = (Sprite *)pSprite->pName; 9070 //pSprite = (Sprite *)pSprite->pName;
9083 //v8 = pSprite; 9071 //v8 = pSprite;
9084 memset(&Dst, 0, 0x7Cu); 9072 memset(&Dst, 0, sizeof(DDSURFACEDESC2));
9085 Dst.dwSize = 124; 9073 Dst.dwSize = 124;
9086 if ( LockSurface_DDraw4((IDirectDrawSurface4 *)v2->pTextureSurface, &Dst, DDLOCK_WAIT | DDLOCK_WRITEONLY) ) 9074 if ( LockSurface_DDraw4((IDirectDrawSurface4 *)pSprite->pTextureSurface, &Dst, DDLOCK_WAIT | DDLOCK_WRITEONLY) )
9087 { 9075 {
9088 v9 = v5->pPixels; 9076 v9 = sprite_texture->pPixels;
9089 v10 = Dst.lpSurface; 9077 v10 = Dst.lpSurface;
9090 v11 = 0; 9078 for (int i=0; i<sprite_texture->uHeight; ++i)
9091 if ( (signed int)v5->uHeight > 0 )
9092 {
9093 v12 = (signed int)v5->uWidth >> 1;
9094 do
9095 {
9096 v13 = 0;
9097 if ( v12 > 0 )
9098 { 9079 {
9099 do 9080 for (int j=0; j<sprite_texture->uWidth/2; ++j)
9100 { 9081 {
9101 ++v13;
9102 *(int *)v10 = *(int *)v9; 9082 *(int *)v10 = *(int *)v9;
9103 v9 += 2; 9083 v9 += 2;
9104 v10 = (char *)v10 + 4; 9084 v10 = (char *)v10 + 4;
9105 } 9085 }
9106 while ( v13 < (signed int)v5->uWidth >> 1 ); 9086 v10 = (char *)v10+Dst.lPitch-sprite_texture->uWidth*2;
9107 } 9087 }
9108 v12 = (signed int)v5->uWidth >> 1; 9088 ErrD3D(pSprite->pTextureSurface->Unlock(0));
9109 ++v11; 9089 }
9110 v10 = (char *)v10 + 4 * ((Dst.lPitch >> 2) - v12); 9090 free(sprite_texture->pPixels);
9111 } 9091 free(sprite_texture);
9112 while ( v11 < (signed int)v5->uHeight ); 9092 return true;
9113 } 9093 }
9114 ErrD3D(v2->pTextureSurface->Unlock(0)); 9094 return false;
9115 }
9116 free(v5->pPixels);
9117 free(v5);
9118 result = (HWLTexture *)1;
9119 }
9120 return result;
9121 } 9095 }
9122 9096
9123 //----- (004A51CB) -------------------------------------------------------- 9097 //----- (004A51CB) --------------------------------------------------------
9124 void Render::BeginScene() 9098 void Render::BeginScene()
9125 { 9099 {
11220 11194
11221 uint uCompressedSize = 0; 11195 uint uCompressedSize = 0;
11222 fread(&uCompressedSize, 4, 1, pFile); 11196 fread(&uCompressedSize, 4, 1, pFile);
11223 11197
11224 auto pTex = new HWLTexture; 11198 auto pTex = new HWLTexture;
11225 fread(&pTex->field_18, 4, 1, pFile); 11199 fread(&pTex->uBufferWidth, 4, 1, pFile);
11226 fread(&pTex->field_1C, 4, 1, pFile); 11200 fread(&pTex->uBufferHeight, 4, 1, pFile);
11227 fread(&pTex->field_20, 4, 1, pFile); 11201 fread(&pTex->uAreaWidth, 4, 1, pFile);
11228 fread(&pTex->field_24, 4, 1, pFile); 11202 fread(&pTex->uAreaHeigth, 4, 1, pFile);
11229 fread(&pTex->uWidth, 4, 1, pFile); 11203 fread(&pTex->uWidth, 4, 1, pFile);
11230 fread(&pTex->uHeight, 4, 1, pFile); 11204 fread(&pTex->uHeight, 4, 1, pFile);
11231 fread(&pTex->field_30, 4, 1, pFile); 11205 fread(&pTex->uAreaX, 4, 1, pFile);
11232 fread(&pTex->field_34, 4, 1, pFile); 11206 fread(&pTex->uAreaY, 4, 1, pFile);
11233 11207
11234 pTex->pPixels = new unsigned __int16[pTex->uWidth * pTex->uHeight]; 11208 pTex->pPixels = new unsigned __int16[pTex->uWidth * pTex->uHeight];
11235 if (uCompressedSize) 11209 if (uCompressedSize)
11236 { 11210 {
11237 auto pCompressedData = new char[uCompressedSize]; 11211 auto pCompressedData = new char[uCompressedSize];