20TTextureResourceHAL::TTextureResourceHAL()
23 m_bLoadFromMemory =
TFALSE;
27 m_pD3DTexture =
TNULL;
36 return m_ImageInfo.Width;
43 return m_ImageInfo.Height;
53 HRESULT hRes = m_pD3DTexture->LockRect( 0, &rect, NULL, 0 );
61 if ( SUCCEEDED( hRes ) )
63 a_rLockState.
Pitch = rect.Pitch;
64 a_rLockState.
pBits = rect.pBits;
79 if ( m_iNumLocks != 0 && m_pD3DTexture )
81 m_pD3DTexture->UnlockRect( 0 );
94 m_eResourceFormat = TTEXTURERESOURCEFORMAT::Unknown;
107 TWARN(
"Deprecated! Please use: TTextureResourceHAL::CreateEx()\n" );
109 if ( !CreateResource( a_pData, a_uiDataSize, a_eTextureFlags, a_uiWidth, a_uiHeight ) )
115 m_uiWidth = a_uiWidth;
116 m_uiHeight = a_uiHeight;
118 m_eResourceFormat = TTEXTURERESOURCEFORMAT::Unknown;
120 m_bLoadFromMemory =
TTRUE;
122 m_uiDataSize = a_uiDataSize;
133 if ( !CreateResource( a_szFileName, a_eTextureFlags ) )
149 if ( !CreateResource( a_pData, a_uiDataSize, a_uiWidth, a_uiHeight, a_uiMipLevels, a_eFormat, a_uiMipMapFlags ) )
154 m_uiWidth = a_uiWidth;
156 m_uiHeight = a_uiHeight;
157 m_uiDataSize = a_uiDataSize;
159 m_uiMipLevels = a_uiMipLevels;
160 m_eResourceFormat = a_eFormat;
161 m_uiMipFlags = a_uiMipMapFlags;
162 m_bLoadFromMemory =
TTRUE;
173 TUINT uiMipLevels = ( m_uiMipFlags & 1 ) ? m_uiMipLevels : 0;
175 switch ( m_eResourceFormat )
177 case TTEXTURERESOURCEFORMAT::R8G8B8A8:
179 case TTEXTURERESOURCEFORMAT::R8G8B8:
181 case TTEXTURERESOURCEFORMAT::R5G5B5A1:
183 case TTEXTURERESOURCEFORMAT::DDS:
185 case TTEXTURERESOURCEFORMAT::R4G4B4A4:
205 HRESULT hCreateRes = pRenderer->GetDirect3DDevice()->CreateTexture(
215 if ( SUCCEEDED( hCreateRes ) )
218 m_pD3DTexture->LockRect( 0, &rect, NULL, D3DLOCK_NO_DIRTY_UPDATE | D3DLOCK_NOSYSLOCK );
220 if ( a_uiHeight != 0 )
225 for (
TUINT i = a_uiHeight; i != 0; i-- )
227 TUINT8 uiDataPixel = *pDataPixel;
228 pTexPixel[ 0 ] = pDataPixel[ 2 ];
229 pTexPixel[ 1 ] = pDataPixel[ 1 ];
230 pTexPixel[ 2 ] = pDataPixel[ 0 ];
231 pTexPixel[ 3 ] = 255;
238 m_pD3DTexture->UnlockRect( 0 );
240 if ( a_uiLevels == 0 )
242 TFIXME(
"Call some D3DX? function with 4 parameters with the first one being IDirect3DTexture (most likely not related to the engine)" );
244 m_ImageInfo.Width = a_uiWidth;
245 m_ImageInfo.Height = a_uiHeight;
270 HRESULT hCreateRes = pRenderer->GetDirect3DDevice()->CreateTexture(
280 if ( SUCCEEDED( hCreateRes ) )
283 m_pD3DTexture->LockRect( 0, &rect, NULL, D3DLOCK_NO_DIRTY_UPDATE | D3DLOCK_NOSYSLOCK );
285 if ( a_uiHeight != 0 )
290 for (
TUINT i = a_uiHeight; i != 0; i-- )
292 TUINT16 uiDataPixel = *pDataPixel;
293 *pTexPixel = ( ( ( ( uiDataPixel >> 12 ) << 4 | uiDataPixel & 15 ) << 4 | uiDataPixel >> 4 & 15 ) << 4 ) | uiDataPixel >> 8 & 15;
299 m_pD3DTexture->UnlockRect( 0 );
301 if ( a_uiLevels == 0 )
303 TFIXME(
"Call some D3DX? function with 4 parameters with the first one being IDirect3DTexture (most likely not related to the engine)" );
305 m_ImageInfo.Width = a_uiWidth;
306 m_ImageInfo.Height = a_uiHeight;
324 HRESULT hRes = D3DXCreateTextureFromFileInMemoryEx(
325 pRenderer->GetDirect3DDevice(),
334 D3DFILTER_LINEARMIPNEAREST,
335 D3DFILTER_LINEARMIPNEAREST,
342 if ( FAILED( hRes ) )
354 HRESULT hRes = D3DXCreateTextureFromFileExA(
355 pRenderer->GetDirect3DDevice(),
363 D3DFILTER_LINEARMIPNEAREST,
364 D3DFILTER_LINEARMIPNEAREST,
371 if ( FAILED( hRes ) )
402 if ( m_bLoadFromMemory )
405 if ( m_pData && m_uiDataSize != 0 )
422 else if ( uiLayout == 16 )
426 else if ( uiLayout == 32 )
446 TFIXME(
"Doesn't affect anything but here should be some manipulations with s_iHALMemoryUsage" );
455 if ( m_bIsToshi2 ==
TTRUE )
457 m_pD3DTexture =
TNULL;
459 else if ( m_pD3DTexture )
461 TFIXME(
"Doesn't affect anything but here should be some manipulations with s_iHALMemoryUsage" );
462 m_pD3DTexture->Release();
#define TSTATICCAST(POINTERTYPE, VALUE)
#define HASANYFLAG(STATE, FLAG)
#define TOSHI_NAMESPACE_START
#define TOSHI_NAMESPACE_END
#define TDEFINE_FREELIST_ALLOCATOR(CLASS_NAME)
#define TDEFINE_CLASS(...)
const D3DXIMAGE_INFO & GetImageInfo() const
TUINT GetMipLevels() const
IDirect3DTexture8 * GetD3DTexture()
DirectX 8 implementation of the render interface Handles DirectX 8 specific rendering functionality a...
static void PrintError(TINT32 a_eError, const TCHAR *a_szInfo)
Prints error text caused by some directx call.
TBOOL CreateFromMemory888(TUINT a_uiWidth, TUINT a_uiHeight, TUINT a_uiLevels, void *a_pData)
virtual TUINT GetWidth() override
virtual TUINT GetHeight() override
static TBOOL IsPPM(const TCHAR *a_szName)
virtual void Unlock() override
virtual TBOOL Validate() override
TBOOL CreateFromMemory5551(TUINT a_uiWidth, TUINT a_uiHeight, TUINT a_uiLevels, void *a_pData)
TBOOL CreateFromMemory8888(TUINT a_uiWidth, TUINT a_uiHeight, TUINT a_uiLevels, void *a_pData)
virtual void CreateFromT2Texture(T2Texture *a_pTexture) override
TBOOL CreateFromFileDDS(TUINT a_uiWidth, TUINT a_uiHeight, TUINT a_uiLevels, const TCHAR *a_szFile)
virtual TBOOL CreateEx(void *a_pData, TUINT a_uiDataSize, TUINT a_uiWidth, TUINT a_uiHeight, TUINT a_uiMipLevels, TTEXTURERESOURCEFORMAT a_eFormat, TUINT a_uiMipMapFlags) override
TBOOL CreateFromMemory4444(TUINT a_uiWidth, TUINT a_uiHeight, TUINT a_uiLevels, void *a_pData)
virtual TBOOL Lock(TTexture::LOCKSTATE &a_rLockState) override
virtual void Invalidate() override
TBOOL CreateFromMemoryDDS(TUINT a_uiWidth, TUINT a_uiHeight, TUINT a_uiLevels, void *a_pData)
TTextureFactory::NameEntry * m_pNameEntry
virtual void Invalidate()
TRenderInterface * GetRenderer() const
static TINT String8Compare(const TCHAR *str1, const TCHAR *str2, TSIZE size=-1)
static TSIZE String8Length(const TCHAR *str)
static void MemClear(void *ptr, TSIZE size)