?? texturemanager.cpp
字號:
// TextureManager.cpp: implementation of the CTextureManager class.
//
//////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CTextureManager::CTextureManager()
{
m_vlTexture.clear();
}
CTextureManager::~CTextureManager()
{
vector<MCTEXTURE *>::iterator iter;
for(iter = m_vlTexture.begin() ; iter != m_vlTexture.end() ; iter++)
{
MCTEXTURE * pTexture = (MCTEXTURE *)*iter;
SAFE_DELETE(pTexture);
}
m_vlTexture.clear();
}
MCTEXTURE * CTextureManager::AddTexture( MCTEXTURE * pTexture )
{
// 版肺風 厚背秦輯 持絹霖促..
MCTEXTURE * pRetTex = FindTexture( -1, pTexture->szTextureName );
if( pRetTex == NULL)
{
//if(FAILED(D3DXCreateTextureFromFile( g_pApp->GetD3dDevice(),pTexture->szTextureName,&pTexture->pTexture )) )
if( FAILED( D3DXCreateTextureFromFileEx( g_pApp->GetD3dDevice(), pTexture->szTextureName,
//D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN,
D3DX_DEFAULT, D3DX_DEFAULT, 0, 0, D3DFMT_UNKNOWN,
MEMORY_POOL, D3DX_FILTER_TRIANGLE|D3DX_FILTER_MIRROR,
D3DX_FILTER_TRIANGLE|D3DX_FILTER_MIRROR, 0, NULL, NULL, &pTexture->pTexture ) ) )
{
OutputDebugString("\n 咆膠貿肺靛 角菩!! \n");
return NULL;
}
// 持絹淋..
pTexture->nIndex = m_vlTexture.size();
m_vlTexture.push_back(pTexture);
return pTexture;
}
return pRetTex;
}
MCTEXTURE * CTextureManager::AddTexture( char * szTexName )
{
// 版肺風 厚背秦輯 持絹霖促..
MCTEXTURE * pRetTex = FindTexture( -1, szTexName );
if( pRetTex == NULL)
{
MCTEXTURE * pRetTex = new MCTEXTURE;
strcpy(pRetTex->szTextureName,szTexName);
if( FAILED( D3DXCreateTextureFromFileEx( g_pApp->GetD3dDevice(), pRetTex->szTextureName,
D3DX_DEFAULT, D3DX_DEFAULT, 0, 0, D3DFMT_UNKNOWN,
MEMORY_POOL, D3DX_FILTER_TRIANGLE|D3DX_FILTER_MIRROR,
D3DX_FILTER_TRIANGLE|D3DX_FILTER_MIRROR, 0, NULL, NULL, &pRetTex->pTexture ) ) )
{
SAFE_DELETE(pRetTex);
OutputDebugString("\n 咆膠貿肺靛 角菩!! \n");
return NULL;
}
// 持絹淋..
pRetTex->nIndex = m_vlTexture.size();
m_vlTexture.push_back(pRetTex);
return pRetTex;
}
return pRetTex;
}
MCTEXTURE * CTextureManager::AddBumpTexture( MCTEXTURE * pTexture )
{
MCTEXTURE * pRetTex = FindTexture( -1, pTexture->szTextureName );
if( pRetTex == NULL)
{
LPDIRECT3DTEXTURE9 pHeightMap;
if(FAILED(D3DXCreateTextureFromFile( g_pApp->GetD3dDevice(),pTexture->szTextureName,&pHeightMap )) )
{
OutputDebugString("\n 咆膠貿肺靛 角菩!! \n");
return NULL;
}
// 持絹淋..
D3DSURFACE_DESC desc;
INT iWidth,iHeight;
pHeightMap->GetLevelDesc(0,&desc);
iWidth = desc.Width;
iHeight = desc.Height;
if(FAILED(D3DXCreateTexture( g_pApp->GetD3dDevice(), iWidth, iHeight, 0, 0,
D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pTexture->pTexture)))
{
OutputDebugString("\n 裹橇 咆膠貿積己 角菩!!");
return NULL;
}
D3DXComputeNormalMap( pTexture->pTexture, pHeightMap, NULL, 0, D3DX_CHANNEL_RED, 10.0f );
SAFE_RELEASE(pHeightMap);
pTexture->nIndex = m_vlTexture.size();
m_vlTexture.push_back(pTexture);
return pTexture;
}
return pRetTex;
}
void CTextureManager::DelTexture( int nIndex )
{
vector<MCTEXTURE *>::iterator iter;
for(iter = m_vlTexture.begin() ; iter != m_vlTexture.end() ; iter++)
{
MCTEXTURE * pDelTexture = (MCTEXTURE *)*iter;
if( pDelTexture->nIndex == nIndex)
{
SAFE_DELETE(pDelTexture);
m_vlTexture.erase(iter);
return;
}
}
}
MCTEXTURE * CTextureManager::FindTexture( int nIndex, char * szTextureName )
{
vector<MCTEXTURE *>::iterator iter;
for(iter = m_vlTexture.begin() ; iter != m_vlTexture.end() ; iter++)
{
MCTEXTURE * pTexture = (MCTEXTURE *)*iter;
if(nIndex == -1)
{
if( !strcmp( pTexture->szTextureName, szTextureName ))
return pTexture;
}else if( pTexture->nIndex == nIndex ){
return pTexture;
}
}
return NULL;
}
HRESULT CTextureManager::InvalidateDeviceObjects()
{
vector<MCTEXTURE *>::iterator iter;
for(iter = m_vlTexture.begin() ; iter != m_vlTexture.end() ; iter++)
{
MCTEXTURE * pInvalidTex = (MCTEXTURE *)*iter;
SAFE_RELEASE(pInvalidTex->pTexture);
}
return S_OK;
}
HRESULT CTextureManager::RestoreDeviceObjects()
{
vector<MCTEXTURE *>::iterator iter;
for(iter = m_vlTexture.begin() ; iter != m_vlTexture.end() ; iter++)
{
MCTEXTURE * pTexture = (MCTEXTURE *)*iter;
if( FAILED( D3DXCreateTextureFromFileEx( g_pApp->GetD3dDevice(), pTexture->szTextureName,
//D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN,
D3DX_DEFAULT, D3DX_DEFAULT, 0, 0, D3DFMT_UNKNOWN,
MEMORY_POOL, D3DX_FILTER_TRIANGLE|D3DX_FILTER_MIRROR,
D3DX_FILTER_TRIANGLE|D3DX_FILTER_MIRROR, 0, NULL, NULL, &pTexture->pTexture ) ) )
{
OutputDebugString("\n CTextureManager::RestoreDeviceObjects 咆膠貿肺靛 角菩!! \n");
return E_FAIL;
}
}
return S_OK;
}
void CTextureManager::DestroyTexture()
{
vector<MCTEXTURE *>::iterator iter;
for(iter = m_vlTexture.begin() ; iter != m_vlTexture.end() ; iter++)
{
MCTEXTURE * pTexture = (MCTEXTURE *)*iter;
SAFE_DELETE(pTexture);
}
m_vlTexture.clear();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -