本文整理汇总了C++中CTextureMap类的典型用法代码示例。如果您正苦于以下问题:C++ CTextureMap类的具体用法?C++ CTextureMap怎么用?C++ CTextureMap使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CTextureMap类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PreLoad
void CGUITextureManager::PreLoad(const CStdString& strTextureName)
{
if (strTextureName.c_str()[1] == ':' || strTextureName == "-")
return ;
for (int i = 0; i < (int)m_vecTextures.size(); ++i)
{
CTextureMap *pMap = m_vecTextures[i];
if (pMap->GetName() == strTextureName)
return ;
}
for (int bundle = 0; bundle < 2; bundle++)
{
for (list<CStdString>::iterator i = m_PreLoadNames[bundle].begin(); i != m_PreLoadNames[bundle].end(); ++i)
{
if (*i == strTextureName)
return ;
}
if (m_TexBundle[bundle].HasFile(strTextureName))
{
m_PreLoadNames[bundle].push_back(strTextureName);
return;
}
}
}
示例2: HasTexture
bool CGUITextureManager::HasTexture(const CStdString &textureName, CStdString *path, int *bundle, int *size)
{
// default values
if (bundle) *bundle = -1;
if (size) *size = 0;
if (path) *path = textureName;
if (textureName == "-")
return false;
if (textureName.Find("://") >= 0)
return false;
// first check of texture exists...
for (int i = 0; i < (int)m_vecTextures.size(); ++i)
{
CTextureMap *pMap = m_vecTextures[i];
if (pMap->GetName() == textureName)
{
for (int i = 0; i < 2; i++)
{
if (m_iNextPreload[i] != m_PreLoadNames[i].end() && (*m_iNextPreload[i] == textureName))
{
++m_iNextPreload[i];
// preload next file
if (m_iNextPreload[i] != m_PreLoadNames[i].end())
m_TexBundle[i].PreloadFile(*m_iNextPreload[i]);
}
}
if (size) *size = pMap->size();
return true;
}
}
for (int i = 0; i < 2; i++)
{
if (m_iNextPreload[i] != m_PreLoadNames[i].end() && (*m_iNextPreload[i] == textureName))
{
if (bundle) *bundle = i;
++m_iNextPreload[i];
// preload next file
if (m_iNextPreload[i] != m_PreLoadNames[i].end())
m_TexBundle[i].PreloadFile(*m_iNextPreload[i]);
return true;
}
else if (m_TexBundle[i].HasFile(textureName))
{
if (bundle) *bundle = i;
return true;
}
}
CStdString fullPath = GetTexturePath(textureName);
if (path)
*path = fullPath;
return !fullPath.IsEmpty();
}
示例3: GetDelay
int CGUITextureManager::GetDelay(const CStdString& strTextureName, int iPicture) const
{
for (int i = 0; i < (int)m_vecTextures.size(); ++i)
{
CTextureMap *pMap = m_vecTextures[i];
if (pMap->GetName() == strTextureName)
{
return pMap->GetDelay(iPicture);
}
}
return 100;
}
示例4: GetTexture
CGLTexture* CGUITextureManager::GetTexture(const CStdString& strTextureName, int iItem, int& iWidth, int& iHeight, SDL_Palette*& pPal, bool &linearTexture)
#endif
{
// CLog::Log(LOGINFO, " refcount++ for GetTexture(%s)\n", strTextureName.c_str());
for (int i = 0; i < (int)m_vecTextures.size(); ++i)
{
CTextureMap *pMap = m_vecTextures[i];
if (pMap->GetName() == strTextureName)
{
//CLog::Log(LOGDEBUG, "Total memusage %u", GetMemoryUsage());
return pMap->GetTexture(iItem, iWidth, iHeight, pPal, linearTexture);
}
}
return NULL;
}
示例5:
const CTextureArray& CGUITextureManager::GetTexture(const CStdString& strTextureName)
{
static CTextureArray emptyTexture;
// CLog::Log(LOGINFO, " refcount++ for GetTexture(%s)\n", strTextureName.c_str());
for (int i = 0; i < (int)m_vecTextures.size(); ++i)
{
CTextureMap *pMap = m_vecTextures[i];
if (pMap->GetName() == strTextureName)
{
//CLog::Log(LOGDEBUG, "Total memusage %u", GetMemoryUsage());
return pMap->GetTexture();
}
}
return emptyTexture;
}
示例6: lock
void CGUITextureManager::Cleanup()
{
CSingleLock lock(g_graphicsContext);
ivecTextures i;
i = m_vecTextures.begin();
while (i != m_vecTextures.end())
{
CTextureMap* pMap = *i;
CLog::Log(LOGWARNING, "%s: Having to cleanup texture %s", __FUNCTION__, pMap->GetName().c_str());
delete pMap;
i = m_vecTextures.erase(i);
}
for (int i = 0; i < 2; i++)
m_TexBundle[i].Cleanup();
}
示例7: lock
void CGUITextureManager::Cleanup()
{
CSingleLock lock(g_graphicsContext);
ivecTextures i;
i = m_vecTextures.begin();
while (i != m_vecTextures.end())
{
CTextureMap* pMap = *i;
CLog::Log(LOGWARNING, "%s: Having to cleanup texture %s", __FUNCTION__, pMap->GetName().c_str());
delete pMap;
i = m_vecTextures.erase(i);
}
m_TexBundle[0] = CTextureBundle(true);
m_TexBundle[1] = CTextureBundle();
FreeUnusedTextures();
}
示例8: lock
void CGUITextureManager::Flush()
{
CSingleLock lock(g_graphicsContext);
ivecTextures i;
i = m_vecTextures.begin();
while (i != m_vecTextures.end())
{
CTextureMap* pMap = *i;
pMap->Flush();
if (pMap->IsEmpty() )
{
delete pMap;
i = m_vecTextures.erase(i);
}
else
{
++i;
}
}
}
示例9: lock
void CGUITextureManager::Flush()
{
CSingleLock lock(CServiceBroker::GetWinSystem()->GetGfxContext());
ivecTextures i;
i = m_vecTextures.begin();
while (i != m_vecTextures.end())
{
CTextureMap* pMap = *i;
pMap->Flush();
if (pMap->IsEmpty() )
{
delete pMap;
i = m_vecTextures.erase(i);
}
else
{
++i;
}
}
}
示例10: lock
void CGUITextureManager::ReleaseTexture(const CStdString& strTextureName)
{
CSingleLock lock(g_graphicsContext);
ivecTextures i;
i = m_vecTextures.begin();
while (i != m_vecTextures.end())
{
CTextureMap* pMap = *i;
if (pMap->GetName() == strTextureName)
{
if (pMap->Release())
{
//CLog::Log(LOGINFO, " cleanup:%s", strTextureName.c_str());
// add to our textures to free
m_unusedTextures.push_back(pMap);
i = m_vecTextures.erase(i);
}
return;
}
++i;
}
CLog::Log(LOGWARNING, "%s: Unable to release texture %s", __FUNCTION__, strTextureName.c_str());
}
示例11: _P
int CGUITextureManager::Load(const CStdString& strTextureName, DWORD dwColorKey, bool checkBundleOnly /*= false */)
{
CStdString strPath;
int bundle = -1;
int size = 0;
if (!HasTexture(strTextureName, &strPath, &bundle, &size))
return 0;
if (size) // we found the texture
return size;
// See if texture is being overridden.
CStdString strTextureFile = strTextureName;
CStdString strTextureOverridePath1;
CStdString strTextureOverridePath2;
CStdString strExt = CUtil::GetExtension(strTextureFile);
CUtil::RemoveExtension(strTextureFile);
// Check original format and JPEG.
strTextureOverridePath1.Format("%s/media/%s%s", _P("Q:"), strTextureFile.c_str(), strExt.c_str());
strTextureOverridePath2.Format("%s/media/%s.jpg", _P("Q:"), strTextureFile.c_str(), strExt.c_str());
if (checkBundleOnly && bundle == -1)
return 0;
if (XFILE::CFile::Exists(strTextureOverridePath1))
{ strPath = strTextureOverridePath1; bundle = -1; }
else if (XFILE::CFile::Exists(strTextureOverridePath2))
{ strPath = strTextureOverridePath2; bundle = -1; }
else if (bundle == -1)
strPath = GetTexturePath(strTextureName);
else
strPath = strTextureName;
//Lock here, we will do stuff that could break rendering
CSingleLock lock(g_graphicsContext);
#ifndef HAS_SDL
LPDIRECT3DTEXTURE8 pTexture;
LPDIRECT3DPALETTE8 pPal = 0;
#else
SDL_Surface* pTexture;
SDL_Palette* pPal = NULL;
#endif
#ifdef _DEBUG
LARGE_INTEGER start;
QueryPerformanceCounter(&start);
#endif
D3DXIMAGE_INFO info;
if (strPath.Right(4).ToLower() == ".gif")
{
CTextureMap* pMap;
if (bundle >= 0)
{
#ifndef HAS_SDL
LPDIRECT3DTEXTURE8* pTextures;
#else
SDL_Surface** pTextures;
#endif
int nLoops = 0;
int* Delay;
#ifndef HAS_SDL
int nImages = m_TexBundle[bundle].LoadAnim(g_graphicsContext.Get3DDevice(), strTextureName, &info, &pTextures, &pPal, nLoops, &Delay);
#else
int nImages = m_TexBundle[bundle].LoadAnim(strTextureName, &info, &pTextures, &pPal, nLoops, &Delay);
#endif
if (!nImages)
{
CLog::Log(LOGERROR, "Texture manager unable to load bundled file: %s", strTextureName.c_str());
return 0;
}
pMap = new CTextureMap(strTextureName);
for (int iImage = 0; iImage < nImages; ++iImage)
{
CTexture* pclsTexture = new CTexture(pTextures[iImage], info.Width, info.Height, true, 100, pPal);
pclsTexture->SetDelay(Delay[iImage]);
pclsTexture->SetLoops(nLoops);
pMap->Add(pclsTexture);
#ifndef HAS_SDL
delete pTextures[iImage];
#else
SDL_FreeSurface(pTextures[iImage]);
#endif
}
delete [] pTextures;
delete [] Delay;
}
else
{
CAnimatedGifSet AnimatedGifSet;
int iImages = AnimatedGifSet.LoadGIF(strPath.c_str());
if (iImages == 0)
{
if (!strnicmp(strPath.c_str(), "q:\\skin", 7))
//.........这里部分代码省略.........
示例12: lock
const CTextureArray& CGUITextureManager::Load(const std::string& strTextureName, bool checkBundleOnly /*= false */)
{
std::string strPath;
static CTextureArray emptyTexture;
int bundle = -1;
int size = 0;
if (!HasTexture(strTextureName, &strPath, &bundle, &size))
return emptyTexture;
if (size) // we found the texture
{
for (int i = 0; i < (int)m_vecTextures.size(); ++i)
{
CTextureMap *pMap = m_vecTextures[i];
if (pMap->GetName() == strTextureName)
{
//CLog::Log(LOGDEBUG, "Total memusage %u", GetMemoryUsage());
return pMap->GetTexture();
}
}
// Whoops, not there.
return emptyTexture;
}
for (ilistUnused i = m_unusedTextures.begin(); i != m_unusedTextures.end(); ++i)
{
CTextureMap* pMap = i->first;
if (pMap->GetName() == strTextureName && i->second > 0)
{
m_vecTextures.push_back(pMap);
m_unusedTextures.erase(i);
return pMap->GetTexture();
}
}
if (checkBundleOnly && bundle == -1)
return emptyTexture;
//Lock here, we will do stuff that could break rendering
CSingleLock lock(g_graphicsContext);
#ifdef _DEBUG_TEXTURES
int64_t start;
start = CurrentHostCounter();
#endif
if (StringUtils::EndsWithNoCase(strPath, ".gif"))
{
CTextureMap* pMap = nullptr;
if (bundle >= 0)
{
CBaseTexture **pTextures;
int nLoops = 0, width = 0, height = 0;
int* Delay;
int nImages = m_TexBundle[bundle].LoadAnim(strTextureName, &pTextures, width, height, nLoops, &Delay);
if (!nImages)
{
CLog::Log(LOGERROR, "Texture manager unable to load bundled file: %s", strTextureName.c_str());
delete [] pTextures;
delete [] Delay;
return emptyTexture;
}
pMap = new CTextureMap(strTextureName, width, height, nLoops);
for (int iImage = 0; iImage < nImages; ++iImage)
{
pMap->Add(pTextures[iImage], Delay[iImage]);
}
delete [] pTextures;
delete [] Delay;
}
else
{
#if defined(HAS_GIFLIB)
Gif gif;
if(!gif.LoadGif(strPath.c_str()))
{
if (StringUtils::StartsWith(strPath, g_SkinInfo->Path()))
CLog::Log(LOGERROR, "Texture manager unable to load file: %s", strPath.c_str());
return emptyTexture;
}
pMap = new CTextureMap(strTextureName, gif.Width(), gif.Height(), gif.GetNumLoops());
for (auto frame : gif.GetFrames())
{
CTexture *glTexture = new CTexture();
if (glTexture)
{
glTexture->LoadFromMemory(gif.Width(), gif.Height(), gif.GetPitch(), XB_FMT_A8R8G8B8, false, frame->m_pImage);
pMap->Add(glTexture, frame->m_delay);
}
}
#endif//HAS_GIFLIB
}
if (pMap)
{
//.........这里部分代码省略.........