Mercurial > mm7
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]; |