Mercurial > mm7
diff Render.cpp @ 670:9824e2eeee30
fixed decorations animation
author | Gloval |
---|---|
date | Fri, 15 Mar 2013 01:51:51 +0400 |
parents | 7747161ea5b5 |
children | c0bfb386b15f |
line wrap: on
line diff
--- a/Render.cpp Wed Mar 13 17:08:21 2013 +0600 +++ b/Render.cpp Fri Mar 15 01:51:51 2013 +0400 @@ -9044,80 +9044,54 @@ } //----- (004A5048) -------------------------------------------------------- -HWLTexture *Render::MoveSpriteToDevice(Sprite *pSprite) -{ - Sprite *v2; // edi@1 - Render *v3; // ebx@1 - HWLTexture *result; // eax@1 - HWLTexture *v5; // esi@1 - //unsigned int v6; // ST18_4@2 - //RenderD3D *v7; // ecx@2 - Sprite *v8; // ebx@4 +bool Render::MoveSpriteToDevice( Sprite *pSprite ) + { + + HWLTexture *sprite_texture; // eax@1 unsigned __int16 *v9; // edx@5 LPVOID v10; // eax@5 - signed int v11; // ebx@5 - signed int v12; // ecx@6 - signed int v13; // edi@7 - HRESULT v14; // eax@10 DDSURFACEDESC2 Dst; // [sp+Ch] [bp-7Ch]@4 - v2 = pSprite; - v3 = this; - result = pD3DSprites.LoadTexture(pSprite->pName, pSprite->uPaletteID); - v5 = result; - if ( result ) - { - v3->_gpu_memory_used += 2 * result->uWidth * result->uHeight; - v2->uAreaX = result->field_30; - v2->uAreaY = result->field_34; - v2->uBufferWidth = result->field_18; - v2->uBufferHeight = result->field_1C; - v2->uAreaWidth = result->field_20; - v2->uAreaHeight = result->field_24; + sprite_texture = pD3DSprites.LoadTexture(pSprite->pName, pSprite->uPaletteID); + if ( sprite_texture ) + { + _gpu_memory_used += 2 * sprite_texture->uWidth * sprite_texture->uHeight; + pSprite->uAreaX = sprite_texture->uAreaX; + pSprite->uAreaY = sprite_texture->uAreaY; + pSprite->uBufferWidth = sprite_texture->uBufferWidth; + pSprite->uBufferHeight = sprite_texture->uBufferHeight; + pSprite->uAreaWidth = sprite_texture->uAreaWidth; + pSprite->uAreaHeight = sprite_texture->uAreaHeigth; //v6 = v3->uMinDeviceTextureDim; //v7 = v3->pRenderD3D; - if (!pRenderD3D->CreateTexture(result->uWidth, result->uHeight, &v2->pTextureSurface, &v2->pTexture, 1u, 0, uMinDeviceTextureDim)) + if (!pRenderD3D->CreateTexture(sprite_texture->uWidth, sprite_texture->uHeight, &pSprite->pTextureSurface, &pSprite->pTexture, 1u, 0, uMinDeviceTextureDim)) Abortf("HiScreen16::LoadTexture - D3Drend->CreateTexture() failed: %x", 0); //pSprite = v2->pTextureSurface; //pSprite = (Sprite *)pSprite->pName; //v8 = pSprite; - memset(&Dst, 0, 0x7Cu); + memset(&Dst, 0, sizeof(DDSURFACEDESC2)); Dst.dwSize = 124; - if ( LockSurface_DDraw4((IDirectDrawSurface4 *)v2->pTextureSurface, &Dst, DDLOCK_WAIT | DDLOCK_WRITEONLY) ) - { - v9 = v5->pPixels; - v10 = Dst.lpSurface; - v11 = 0; - if ( (signed int)v5->uHeight > 0 ) - { - v12 = (signed int)v5->uWidth >> 1; - do - { - v13 = 0; - if ( v12 > 0 ) + if ( LockSurface_DDraw4((IDirectDrawSurface4 *)pSprite->pTextureSurface, &Dst, DDLOCK_WAIT | DDLOCK_WRITEONLY) ) + { + v9 = sprite_texture->pPixels; + v10 = Dst.lpSurface; + for (int i=0; i<sprite_texture->uHeight; ++i) { - do - { - ++v13; + for (int j=0; j<sprite_texture->uWidth/2; ++j) + { *(int *)v10 = *(int *)v9; v9 += 2; v10 = (char *)v10 + 4; - } - while ( v13 < (signed int)v5->uWidth >> 1 ); + } + v10 = (char *)v10+Dst.lPitch-sprite_texture->uWidth*2; } - v12 = (signed int)v5->uWidth >> 1; - ++v11; - v10 = (char *)v10 + 4 * ((Dst.lPitch >> 2) - v12); - } - while ( v11 < (signed int)v5->uHeight ); - } - ErrD3D(v2->pTextureSurface->Unlock(0)); - } - free(v5->pPixels); - free(v5); - result = (HWLTexture *)1; - } - return result; + ErrD3D(pSprite->pTextureSurface->Unlock(0)); + } + free(sprite_texture->pPixels); + free(sprite_texture); + return true; + } + return false; } //----- (004A51CB) -------------------------------------------------------- @@ -11222,14 +11196,14 @@ fread(&uCompressedSize, 4, 1, pFile); auto pTex = new HWLTexture; - fread(&pTex->field_18, 4, 1, pFile); - fread(&pTex->field_1C, 4, 1, pFile); - fread(&pTex->field_20, 4, 1, pFile); - fread(&pTex->field_24, 4, 1, pFile); + fread(&pTex->uBufferWidth, 4, 1, pFile); + fread(&pTex->uBufferHeight, 4, 1, pFile); + fread(&pTex->uAreaWidth, 4, 1, pFile); + fread(&pTex->uAreaHeigth, 4, 1, pFile); fread(&pTex->uWidth, 4, 1, pFile); fread(&pTex->uHeight, 4, 1, pFile); - fread(&pTex->field_30, 4, 1, pFile); - fread(&pTex->field_34, 4, 1, pFile); + fread(&pTex->uAreaX, 4, 1, pFile); + fread(&pTex->uAreaY, 4, 1, pFile); pTex->pPixels = new unsigned __int16[pTex->uWidth * pTex->uHeight]; if (uCompressedSize)