#include "cSprite.h"
cSprite::~cSprite()
{
Release();
}
cSprite::cSprite(IDirect3DDevice9* m_pD3Ddev, HMODULE hModule, LPCSTR szResource, LPCSTR szType )
{
ZeroMemory( this, sizeof(cSprite) );
ZeroMemory( &pInfo, sizeof(D3DXIMAGE_INFO) );
this->m_pD3Ddev = m_pD3Ddev;
this->hModule = hModule;
if(FAILED(D3DXCreateSprite( m_pD3Ddev, &pSprite ) ) )
MessageBox( NULL, "Cannot create image sprite", "Error", MB_ICONERROR );
HRSRC hResourceHandle = FindResource( hModule, szResource, szType );
if(!hResourceHandle)
MessageBox( NULL, "Cannot get resource", "Error", MB_ICONERROR );
HGLOBAL hResource = LoadResource( hModule, hResourceHandle );
DWORD dwSize = SizeofResource( hModule, hResourceHandle );
LPVOID lpResource = LockResource( hResource );
if(FAILED(D3DXGetImageInfoFromFileInMemory( lpResource, dwSize, &pInfo )) )
MessageBox( NULL, "Cannot get image info", "Error", MB_ICONERROR );
if(FAILED(D3DXCreateTextureFromFileInMemoryEx( m_pD3Ddev, lpResource, dwSize,
pInfo.Width, pInfo.Height, pInfo.MipLevels, NULL, pInfo.Format, D3DPOOL_MANAGED,
D3DX_DEFAULT, NULL, NULL, NULL, NULL, &pTexture ) ) )
MessageBox( NULL, "Cannot create texture", "Error", MB_ICONERROR );
UnlockResource(hResource);
}
cSprite::cSprite(IDirect3DDevice9* m_pD3Ddev, LPCSTR szFilePath )
{
ZeroMemory( this, sizeof(cSprite) );
ZeroMemory( &pInfo, sizeof(D3DXIMAGE_INFO) );
this->m_pD3Ddev = m_pD3Ddev;
if(FAILED(D3DXCreateSprite( m_pD3Ddev, &pSprite ) ) )
MessageBox( NULL, "Cannot create image sprite", "Error", MB_ICONERROR );
if(FAILED(D3DXGetImageInfoFromFile( szFilePath, &pInfo ) ) )
MessageBox( NULL, "Cannot get image info", "Error", MB_ICONERROR );
if(FAILED(D3DXCreateTextureFromFileEx( m_pD3Ddev, szFilePath, pInfo.Width, pInfo.Height,
pInfo.MipLevels, NULL, pInfo.Format, D3DPOOL_MANAGED, D3DX_DEFAULT, NULL, NULL,
NULL, NULL, &pTexture )) )
MessageBox( NULL, "Cannot create image texture", "Error", MB_ICONERROR );
}
HRESULT cSprite::Begin()
{
return pSprite->Begin( D3DXSPRITE_SORT_TEXTURE );
}
HRESULT cSprite::End()
{
return pSprite->End();
}
HRESULT cSprite::Draw( FLOAT PosX, FLOAT PosY, INT Trans )
{
D3DXVECTOR3 vPos = D3DXVECTOR3( PosX, PosY, 0.0f );
return pSprite->Draw( pTexture, NULL, NULL, &vPos,
D3DCOLOR_ARGB( Trans, 255, 255, 255 ) );
}
HRESULT cSprite::Draw( FLOAT PosX, FLOAT PosY )
{
return Draw( PosX, PosY, 255 );
}
HRESULT cSprite::OnLostDevice()
{
return pSprite->OnLostDevice();
}
HRESULT cSprite::OnResetDevice()
{
return pSprite->OnResetDevice();
}
VOID cSprite::Release()
{
SAFE_RELEASE(pSprite);
SAFE_RELEASE(pTexture);
}