亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? texturemanager.cpp

?? 骨骼動畫....把魔獸模型解出的代碼..
?? CPP
字號:
//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "TextureManager.h"
#include "TextureManagerWindow.h"


//+-----------------------------------------------------------------------------
//| Global objects
//+-----------------------------------------------------------------------------
TEXTURE_MANAGER TextureManager;


//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
TEXTURE_MANAGER::TEXTURE_MANAGER()
{
	INT i;

	InvalidTexture = NULL;
	ReplaceableTexture11 = NULL;
	ReplaceableTexture31 = NULL;
	ReplaceableTexture32 = NULL;
	ReplaceableTexture33 = NULL;
	ReplaceableTexture34 = NULL;
	ReplaceableTexture35 = NULL;

	for(i = 0; i < NR_OF_REPLACEABLE_TEXTURES; i++)
	{
		TeamColorTexture[i] = NULL;
		TeamGlowTexture[i] = NULL;
	}
}


//+-----------------------------------------------------------------------------
//| Destructor
//+-----------------------------------------------------------------------------
TEXTURE_MANAGER::~TEXTURE_MANAGER()
{
	Clear();
	UnloadAllReplaceableTextures();
}


//+-----------------------------------------------------------------------------
//| Clears all textures
//+-----------------------------------------------------------------------------
VOID TEXTURE_MANAGER::Clear()
{
	INT i;

	for(i = 0; i < TextureContainer.GetTotalSize(); i++)
	{
		if(TextureContainer.ValidIndex(i))
		{
			delete TextureContainer[i];
		}
	}

	TextureContainer.Clear();
	TextureManagerWindow.ClearAllNames();
	TextureManagerWindow.HideTextureWindow();
}


//+-----------------------------------------------------------------------------
//| Clears all textures includign the replaceable textures
//+-----------------------------------------------------------------------------
BOOL TEXTURE_MANAGER::LoadAllReplaceableTextures()
{
	INT i;
	std::string Digit;

	InvalidTexture = InternalLoad("Textures\\BTNtempW.blp");
	if(InvalidTexture == NULL) return FALSE;

	ReplaceableTexture11 = InternalLoad(Properties().ReplaceableTexture11);
	if(ReplaceableTexture11 == NULL) return FALSE;

	ReplaceableTexture31 = InternalLoad(Properties().ReplaceableTexture31);
	if(ReplaceableTexture31 == NULL) return FALSE;

	ReplaceableTexture32 = InternalLoad(Properties().ReplaceableTexture32);
	if(ReplaceableTexture32 == NULL) return FALSE;

	ReplaceableTexture33 = InternalLoad(Properties().ReplaceableTexture33);
	if(ReplaceableTexture33 == NULL) return FALSE;

	ReplaceableTexture34 = InternalLoad(Properties().ReplaceableTexture34);
	if(ReplaceableTexture34 == NULL) return FALSE;

	ReplaceableTexture35 = InternalLoad(Properties().ReplaceableTexture35);
	if(ReplaceableTexture35 == NULL) return FALSE;

	for(i = 0; i < NR_OF_REPLACEABLE_TEXTURES; i++)
	{
		Digit = MakeTwoDigitNumber(i);

		TeamColorTexture[i] = InternalLoad(PATH_TEAM_COLOR + "TeamColor" + Digit + ".blp");
		if(TeamColorTexture[i] == NULL) return FALSE;

		TeamGlowTexture[i] = InternalLoad(PATH_TEAM_GLOW + "TeamGlow" + Digit + ".blp");
		if(TeamGlowTexture[i] == NULL) return FALSE;
	}

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Clears all textures except for the replaceable textures
//+-----------------------------------------------------------------------------
VOID TEXTURE_MANAGER::UnloadAllReplaceableTextures()
{
	INT i;

	SAFE_DELETE(InvalidTexture);
	SAFE_DELETE(ReplaceableTexture11);
	SAFE_DELETE(ReplaceableTexture31);
	SAFE_DELETE(ReplaceableTexture32);
	SAFE_DELETE(ReplaceableTexture33);
	SAFE_DELETE(ReplaceableTexture34);
	SAFE_DELETE(ReplaceableTexture35);

	for(i = 0; i < NR_OF_REPLACEABLE_TEXTURES; i++)
	{
		SAFE_DELETE(TeamColorTexture[i]);
		SAFE_DELETE(TeamGlowTexture[i]);
	}
}


//+-----------------------------------------------------------------------------
//| Loads a texture
//+-----------------------------------------------------------------------------
BOOL TEXTURE_MANAGER::Load(CONST std::string& FileName)
{
	INT Index;
	BUFFER Buffer;
	TEXTURE* Texture;

	Index = TextureContainer.GetIndex(FileName);
	if(Index != INVALID_INDEX) return TRUE;

	Texture = InternalLoad(FileName);
	if(Texture == NULL) return FALSE;

	if(!TextureContainer.Add(FileName, Texture))
	{
		Error.SetMessage("Unable to load \"" + FileName + "\", unable to add texture!");
		delete Texture;
		return FALSE;
	}

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Unloads a texture
//+-----------------------------------------------------------------------------
BOOL TEXTURE_MANAGER::Unload(CONST std::string& FileName)
{
	INT Index;

	Index = TextureContainer.GetIndex(FileName);
	if(Index == INVALID_INDEX) return TRUE;

	TextureContainer.Remove(Index);

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Imports a texture
//+-----------------------------------------------------------------------------
BOOL TEXTURE_MANAGER::Import(CONST std::string& FileName, CONST std::string& RealFileName)
{
	INT Index;
	BUFFER Buffer;
	TEXTURE* Texture;

	Index = TextureContainer.GetIndex(FileName);
	if(Index != INVALID_INDEX)
	{
		Error.SetMessage("Unable to import \"" + RealFileName + "\", file already exists!");
		return FALSE;
	}

	Texture = new TEXTURE();
	if(Texture == NULL)
	{
		Error.SetMessage("Unable to import \"" + RealFileName + "\", memory allocation failed!");
		return FALSE;
	}

	if(!FileLoader.LoadFromFile(RealFileName, Buffer))
	{
		delete Texture;
		return FALSE;
	}

	if(!ResourceLoader.LoadTexture((*Texture), RealFileName, Buffer))
	{
		delete Texture;
		return FALSE;
	}

	if(!TextureContainer.Add(FileName, Texture))
	{
		Error.SetMessage("Unable to load \"" + FileName + "\", unable to add texture!");
		delete Texture;
		return FALSE;
	}

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Exports a texture
//+-----------------------------------------------------------------------------
BOOL TEXTURE_MANAGER::Export(CONST std::string& FileName, CONST std::string& RealFileName)
{
	INT Index;
	BUFFER Buffer;
	TEXTURE* Texture;

	Index = TextureContainer.GetIndex(FileName);
	if(Index == INVALID_INDEX)
	{
		Error.SetMessage("Unable to export \"" + FileName + "\", file does not exist!");
		return FALSE;
	}

	Texture = TextureContainer[Index];

	if(!ResourceLoader.SaveTexture((*Texture), RealFileName, Buffer)) return FALSE;
	if(!FileLoader.SaveToFile(RealFileName, Buffer)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Resizes the texture
//+-----------------------------------------------------------------------------
BOOL TEXTURE_MANAGER::ResizeTexture(CONST std::string& FileName, CONST std::string& NewFileName, INT NewWidth, INT NewHeight)
{
	BUFFER Buffer;
	TEXTURE Source;
	TEXTURE Target;
	RECT SourceRect;
	RECT TargetRect;
	LPDIRECT3DTEXTURE9 SourceTexture;
	LPDIRECT3DTEXTURE9 TargetTexture;
	LPDIRECT3DSURFACE9 SourceSurface;
	LPDIRECT3DSURFACE9 TargetSurface;

	if(FileName == NewFileName)
	{
		Error.SetMessage("Unable to save \"" + NewFileName + "\", target file is the same as source file!");
		return FALSE;
	}

	if(!FileLoader.LoadFromFile(FileName, Buffer)) return FALSE;
	if(!ResourceLoader.LoadTexture(Source, FileName, Buffer)) return FALSE;
	if(!Target.CreateEmpty(NewWidth, NewHeight)) return FALSE;

	SourceTexture = Source.GetTexture();
	if(SourceTexture == NULL)
	{
		Error.SetMessage("Unable to resize \"" + NewFileName + "\", no source texture!");
		return FALSE;
	}

	TargetTexture = Target.GetTexture();
	if(TargetTexture == NULL)
	{
		Error.SetMessage("Unable to resize \"" + NewFileName + "\", no target texture!");
		return FALSE;
	}

	if(FAILED(SourceTexture->GetSurfaceLevel(0, &SourceSurface)))
	{
		Error.SetMessage("Unable to resize \"" + NewFileName + "\", no source surface!");
		return FALSE;
	}

	if(FAILED(TargetTexture->GetSurfaceLevel(0, &TargetSurface)))
	{
		SAFE_RELEASE(SourceSurface);
		Error.SetMessage("Unable to resize \"" + NewFileName + "\", no target surface!");
		return FALSE;
	}

	SourceRect.left = 0;
	SourceRect.top = 0;
	SourceRect.right = Source.GetWidth();
	SourceRect.bottom = Source.GetHeight();

	TargetRect.left = 0;
	TargetRect.top = 0;
	TargetRect.right = NewWidth;
	TargetRect.bottom = NewHeight;

	if(FAILED(D3DXLoadSurfaceFromSurface(TargetSurface, NULL, &TargetRect, SourceSurface, NULL, &SourceRect, D3DX_DEFAULT, 0)))
	{
		SAFE_RELEASE(SourceSurface);
		SAFE_RELEASE(TargetSurface);
		Error.SetMessage("Unable to resize \"" + NewFileName + "\", resizing failed!");
		return FALSE;
	}

	SAFE_RELEASE(SourceSurface);
	SAFE_RELEASE(TargetSurface);

	if(FAILED(D3DXFilterTexture(TargetTexture, NULL, D3DX_DEFAULT, D3DX_DEFAULT)))
	{
		Error.SetMessage("Unable to resize \"" + NewFileName + "\", texture filtering failed!");
		return FALSE;
	}

	if(!ResourceLoader.SaveTexture(Target, NewFileName, Buffer)) return FALSE;
	if(!FileLoader.SaveToFile(NewFileName, Buffer)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Returns a texture
//+-----------------------------------------------------------------------------
TEXTURE* TEXTURE_MANAGER::GetTexture(CONST std::string& FileName)
{
	INT Index;

	Index = TextureContainer.GetIndex(FileName);
	if(Index == INVALID_INDEX) return InvalidTexture;

	return TextureContainer[Index];
}


//+-----------------------------------------------------------------------------
//| Returns a replaceable texture
//+-----------------------------------------------------------------------------
TEXTURE* TEXTURE_MANAGER::GetReplaceableTexture(INT ReplaceableId)
{
	TEXTURE* Texture;

	switch(ReplaceableId)
	{
		case 1:
		{
			Texture = GetTeamColorTexture();
			if(Texture == NULL) break;

			return Texture;
		}

		case 2:
		{
			Texture = GetTeamGlowTexture();
			if(Texture == NULL) break;

			return Texture;
		}

		case 11:
		{
			return ReplaceableTexture11;
		}

		case 31:
		{
			return ReplaceableTexture31;
		}

		case 32:
		{
			return ReplaceableTexture32;
		}

		case 33:
		{
			return ReplaceableTexture33;
		}

		case 34:
		{
			return ReplaceableTexture34;
		}

		case 35:
		{
			return ReplaceableTexture35;
		}
	}

	return InvalidTexture;
}


//+-----------------------------------------------------------------------------
//| Returns a team color texture
//+-----------------------------------------------------------------------------
TEXTURE* TEXTURE_MANAGER::GetTeamColorTexture()
{
	INT Index;

	Index = TeamColor.GetCurrentTeamColor();

	if(Index < 0) return NULL;
	if(Index >= NR_OF_REPLACEABLE_TEXTURES) return NULL;

	return TeamColorTexture[Index];
}


//+-----------------------------------------------------------------------------
//| Returns a team glow texture
//+-----------------------------------------------------------------------------
TEXTURE* TEXTURE_MANAGER::GetTeamGlowTexture()
{
	INT Index;

	Index = TeamColor.GetCurrentTeamColor();

	if(Index < 0) return NULL;
	if(Index >= NR_OF_REPLACEABLE_TEXTURES) return NULL;

	return TeamGlowTexture[Index];
}


//+-----------------------------------------------------------------------------
//| Loads a texture
//+-----------------------------------------------------------------------------
TEXTURE* TEXTURE_MANAGER::InternalLoad(CONST std::string& FileName)
{
	BUFFER Buffer;
	TEXTURE* Texture;

	Texture = new TEXTURE();
	if(Texture == NULL)
	{
		Error.SetMessage("Unable to load \"" + FileName + "\", memory allocation failed!");
		return NULL;
	}

	if(!FileLoader.Load(FileName, Buffer))
	{
		delete Texture;
		return NULL;
	}

	if(!ResourceLoader.LoadTexture((*Texture), FileName, Buffer))
	{
		delete Texture;
		return NULL;
	}

	return Texture;
}


//+-----------------------------------------------------------------------------
//| Builds a 2-digit number as a string
//+-----------------------------------------------------------------------------
std::string TEXTURE_MANAGER::MakeTwoDigitNumber(INT Number)
{
	std::stringstream Stream;

	Stream << (Number / 10);
	Stream << (Number % 10);

	return Stream.str();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区在线视频观看| 欧美精品在线一区二区三区| 精品剧情v国产在线观看在线| 一区二区三区中文字幕电影| www.日韩精品| 国产精品久久久久久户外露出 | 99久久国产综合精品女不卡| 国产亚洲精品7777| 夫妻av一区二区| 国产精品久久久久久久裸模| 一本大道久久a久久精二百| 一区二区三区欧美日韩| 欧美综合天天夜夜久久| 日韩精品亚洲专区| 欧美一个色资源| 国产一区美女在线| 欧美精品一区二区不卡 | 青青草97国产精品免费观看 | 国产精品嫩草久久久久| 成人手机电影网| 一区二区三区在线播| 欧美在线高清视频| 日韩和欧美的一区| 欧美另类久久久品| 国产精品资源在线| 亚洲欧美另类小说视频| 欧美男人的天堂一二区| 国产在线观看一区二区| 国产精品剧情在线亚洲| 欧美在线视频日韩| 精品一区二区av| 国产精品久久免费看| 在线视频观看一区| 日本在线不卡一区| 久久久久久久久97黄色工厂| 成人免费毛片片v| 亚洲福利国产精品| 国产日韩欧美制服另类| 色婷婷狠狠综合| 青青草国产精品亚洲专区无| 中文字幕二三区不卡| 欧美在线免费观看视频| 美女视频黄a大片欧美| 中文字幕不卡在线播放| 欧美一级生活片| av在线不卡电影| 日韩av午夜在线观看| 亚洲人妖av一区二区| 欧美一级精品大片| 91麻豆免费观看| 国产999精品久久久久久绿帽| 亚洲午夜视频在线| 国产日韩欧美制服另类| 欧美亚洲动漫制服丝袜| 国产成人av电影免费在线观看| 一区二区三区色| 国产欧美日韩在线看| 日韩女优电影在线观看| 国产成人欧美日韩在线电影| 亚洲大型综合色站| 国产精品美女久久久久aⅴ国产馆| 欧美巨大另类极品videosbest | 91久久香蕉国产日韩欧美9色| 极品少妇xxxx精品少妇| 亚洲最新视频在线观看| 国产精品欧美久久久久无广告 | 欧美日韩一区二区在线观看| av不卡在线观看| 极品美女销魂一区二区三区免费| 一个色综合网站| 久久久噜噜噜久噜久久综合| 精品久久国产老人久久综合| 欧美网站大全在线观看| 91在线精品一区二区三区| 成人一道本在线| 国产中文字幕精品| 视频在线观看一区| 亚洲成av人影院在线观看网| 洋洋成人永久网站入口| 亚洲狼人国产精品| 中文字幕在线一区免费| 91麻豆精品国产91久久久久久久久| 99re视频精品| 成人蜜臀av电影| 成人免费精品视频| 91在线精品秘密一区二区| www.亚洲在线| 成人免费av资源| 国产suv精品一区二区三区| 精品在线一区二区| 免费xxxx性欧美18vr| 日本网站在线观看一区二区三区| 日韩电影在线观看电影| 伊人一区二区三区| 一区二区三区四区不卡在线 | 欧美韩国日本一区| 成人免费在线播放视频| 中文字幕一区二| 亚洲色图制服丝袜| 国产日韩欧美综合一区| 亚洲欧美一区二区三区极速播放| 中文字幕日本不卡| 亚洲女人的天堂| 亚洲黄色录像片| 亚洲精品美腿丝袜| 亚洲成av人在线观看| 免费成人av在线| 国产成人精品免费| 日韩va欧美va亚洲va久久| 欧美日韩精品一区二区天天拍小说| 欧美国产综合一区二区| 久久久久久久久久久黄色| 国产偷v国产偷v亚洲高清| 国产精品毛片大码女人| 亚洲午夜一区二区| 久久精品99久久久| 国产乱码精品一区二区三区五月婷| 九色porny丨国产精品| 9i在线看片成人免费| 欧美专区日韩专区| 欧美高清www午色夜在线视频| 欧美狂野另类xxxxoooo| 国产欧美一区二区在线| 有码一区二区三区| 麻豆freexxxx性91精品| 91视视频在线观看入口直接观看www | 欧美男女性生活在线直播观看| 欧美成人欧美edvon| 亚洲欧洲国产日韩| 日本人妖一区二区| 99麻豆久久久国产精品免费| 欧美丰满高潮xxxx喷水动漫| 国产日韩亚洲欧美综合| 午夜精品爽啪视频| 精一区二区三区| 色综合天天综合网天天狠天天| 欧美zozozo| 中文字幕一区二区不卡| 精品一区二区在线免费观看| 成人一区二区视频| 精品国偷自产国产一区| 亚洲一区二区在线观看视频| 国产精品影视天天线| 一本一道久久a久久精品 | 国产精品美日韩| 麻豆91免费观看| 一本大道久久a久久精品综合| 国产丝袜在线精品| 日韩av一区二区在线影视| 欧美中文字幕一区二区三区| 国产精品五月天| 国产一区二区三区在线观看免费 | 国产一本一道久久香蕉| 欧美区一区二区三区| 国产精品久线观看视频| 国产精品伊人色| 精品处破学生在线二十三| 日韩福利电影在线观看| 欧美日韩一级二级| 国产精品久久久久久久久免费樱桃| 国产精品1024| 精品国产一区a| 久久99久久久久久久久久久| 欧美一区二区视频在线观看2020 | 中日韩av电影| 国产精一区二区三区| 日韩女同互慰一区二区| 夜夜精品视频一区二区 | 成人综合婷婷国产精品久久免费| 宅男噜噜噜66一区二区66| 视频一区视频二区中文字幕| 欧美亚洲综合色| 午夜在线成人av| 欧美中文字幕一区二区三区| 亚洲高清免费一级二级三级| 成人美女视频在线观看| 亚洲美女一区二区三区| 一本到不卡精品视频在线观看| 一区在线观看视频| 国产美女精品一区二区三区| 制服丝袜在线91| 欧美bbbbb| 久久久99精品久久| 国产a区久久久| 久久综合成人精品亚洲另类欧美 | 国产精品一区二区久久不卡| 精品成人一区二区| 国产精品一区二区三区乱码| 成人欧美一区二区三区白人| 在线视频国内自拍亚洲视频| 亚洲成人自拍偷拍| 精品99999| 高清国产一区二区三区| 亚洲精品一二三区| 欧美最猛性xxxxx直播| 久久狠狠亚洲综合| 国产精品福利影院| 日本精品一区二区三区高清 | 免费不卡在线视频| 国产农村妇女毛片精品久久麻豆|