/// \brief Loads a texture /// \param file = the filename bool CDX9TextureObject::LoadFromFile( const TCHAR * file ) { StdString szFilePath(file); szFilePath.MakeSafeFileName(); DeInit(); if (!m_Renderer) return false; LPDIRECT3DDEVICE9 pDevice = (LPDIRECT3DDEVICE9)m_Renderer->GetAPIDevice(); if( !pDevice ) return false; D3DXIMAGE_INFO srcInfo; LPDIRECT3DTEXTURE9 pTexture; /* if( _tcsstr( file, _T(".hdr" ) )!= NULL ) { bool retval = LoadHDRFile( (TCHAR*)file ); return retval; } */ LPVOID pFileData = NULL; UINT iFileDataSize = 0; if (!LoadFileIntoBuffer( szFilePath, pFileData, iFileDataSize, true )) { m_ToolBox->Log(LOGERROR, _T("Texture Object: %s failed to load\n"), szFilePath.c_str() ); return false; } D3DFORMAT requestedFormat = EEDX9RequestedInternalFormatFromFileInMemory( pFileData, iFileDataSize ); HRESULT hr = D3DXCreateTextureFromFileInMemoryEx( pDevice, pFileData, iFileDataSize, D3DX_DEFAULT, //width D3DX_DEFAULT, //height D3DX_DEFAULT, //number of mips 0, //usage - 0 unless for render targets requestedFormat, D3DPOOL_MANAGED, D3DX_DEFAULT, //regular filter D3DX_DEFAULT, //mip filter 0, //color key, opaque black default &srcInfo, //src info NULL, //palette &pTexture ); SAFE_DELETE_ARRAY( pFileData ); if( hr != D3D_OK ) { m_ToolBox->Log(LOGERROR, _T("Texture Object: %s failed to load\n"), szFilePath.c_str() ); return false; } D3DSURFACE_DESC textureDesc; pTexture->GetLevelDesc( 0, &textureDesc ); m_Width = textureDesc.Width; m_Height = textureDesc.Height; m_Texture = pTexture; m_Filename = file; m_bRenderTarget = false; m_ColorDepth = EEDX9ColorBitsFromFormat( textureDesc.Format ); m_Compressed = EEDX9IsCompressedFormat( textureDesc.Format ); if( m_AutoGenMips ) { pTexture->GenerateMipSubLevels(); } return true; }