Ejemplo n.º 1
0
DWORD CDX9ShaderLoader::OnLoadFile(DWORD size, void *params)
{
	VERIFY_MESSAGE_SIZE(size, sizeof(TCHAR *));
	TCHAR *pFileName = (TCHAR *)params;

	StdString szFileName(pFileName);
	szFileName.MakeSafeFileName();	

	CHashString hashFile(szFileName);
	map<DWORD, bool>::iterator mapIter = m_mFileLoaded.find(hashFile.GetUniqueID());

	// if the file is not loaded yet, load it; otherwise do nothing
	if (mapIter == m_mFileLoaded.end())
	{
		CHashString hszTypeName;
		//check filetype
		if( _tcsstr( szFileName, _T(".psh") ) )
		{
			hszTypeName.Init( _T("CPixelShader") );
		}
		else
		{
			hszTypeName.Init( _T("CVertexShader") );
		}		
		
		CREATEOBJECTPARAMS cop;
		cop.parentName = NULL;
		cop.typeName = &hszTypeName;
		cop.name = &hashFile;
		static DWORD msgHash_CreateObject = CHashString(_T("CreateObject")).GetUniqueID();
		DWORD retval = m_ToolBox->SendMessage(msgHash_CreateObject, sizeof(CREATEOBJECTPARAMS), &cop, NULL, NULL);

		INITOBJECTPARAMS iop;
		iop.name = &hashFile;
		if( retval == MSG_HANDLED )
		{
			static DWORD msgHash_InitObject = CHashString(_T("InitObject")).GetUniqueID();
			retval = m_ToolBox->SendMessage(msgHash_InitObject, sizeof(INITOBJECTPARAMS), &iop, NULL, NULL);
		}

		ADDSHADERTOMANAGER astom;
		astom.m_Name = &hashFile;
		astom.m_CompType = &hszTypeName;
		if( retval == MSG_HANDLED )
		{
			static DWORD msgHash_AddShader = CHashString(_T("AddShader")).GetUniqueID();
			retval = m_ToolBox->SendMessage(msgHash_AddShader, sizeof(ADDSHADERTOMANAGER), &astom, NULL, NULL);
		}
		m_mFileLoaded.insert(pair<DWORD, bool>(hashFile.GetUniqueID(), true));
	}
	return MSG_HANDLED_STOP;
}
Ejemplo n.º 2
0
//
// FindFiles
//
// Populate recursive file list
//
HRESULT CLevelZapContextMenuExt::FindFiles(const HWND p_hParentWnd,
											CString szTo,
											CString szFromPath,
											CString& szlFrom,
											CString& szlTo) const {
	WIN32_FIND_DATA ffd;
	HANDLE hFind;
	CString szPath;

	// files are ignored
	hFind = FindFirstFile(szFromPath, &ffd);
	if (INVALID_HANDLE_VALUE == hFind) {
		Util::OutputDebugStringEx(L"INVALID_HANDLE_VALUE: %s\n", szFromPath);
		FindClose(hFind);
		return E_FAIL;
	}
	if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
		FindClose(hFind);
		return E_FAIL;
	}
	FindClose(hFind);

	// add folder members to move list
	szPath.Append(szFromPath);
	szPath.Append(L"\\*");
	hFind = FindFirstFile(szPath, &ffd);
	if (INVALID_HANDLE_VALUE == hFind) {
		Util::OutputDebugStringEx(L"INVALID_HANDLE_VALUE: %s\n", szPath);
		FindClose(hFind);
		return E_FAIL;
	}	
	do {
		CString szFileName(ffd.cFileName);
		szPath.Empty();
		szPath.Append(szPath);
		szPath.Append(szFromPath);
		szPath.Append(L"\\");
		szPath.Append(szFileName);
		if ((ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
			if (szFileName.Compare(L".") && szFileName.Compare(L"..")) {
				if (m_bRecursive) {
					Util::OutputDebugStringEx(L"Folder %s\n", szPath);
					FindFiles(p_hParentWnd, szTo, szPath, szlFrom, szlTo);					
				} else {
					szlFrom.Append(szPath); szlFrom.AppendChar('\0');
					szlTo.Append(szTo + L"\\" + szFileName); szlTo.AppendChar('\0');
					Util::OutputDebugStringEx(L"    Move %s -> %s\n", szPath, szTo + L"\\" + szFileName);
				}
			}
		}
		else
		{
			szlFrom.Append(szPath); szlFrom.AppendChar('\0');
			CString _szTo;
			_szTo.Append(szTo);
			_szTo.Append(L"\\"); _szTo.Append(szFileName);
			szlTo.Append(_szTo); szlTo.AppendChar('\0');
			Util::OutputDebugStringEx(L"    Move %s -> %s\n", szPath, _szTo);
		}
	} while (FindNextFile(hFind, &ffd));

	FindClose(hFind);
	return S_OK;
}
DWORD CShaderEffectLoader::OnLoadFile(DWORD size, void *params)
{
	VERIFY_MESSAGE_SIZE(size, sizeof(TCHAR *));
	TCHAR *pFileName = (TCHAR *)params;

	if( _tcslen( pFileName ) == 0 )
	{
		m_ToolBox->Log( LOGWARNING, _T("Shader File is empty string") );
		return MSG_ERROR;
	}

	StdString szFileName(pFileName);
	szFileName.MakeSafeFileName();
	CHashString effectname( szFileName );

	// only load an effect file once
	static DWORD msgHash_FindObject = CHashString(_T("FindObject")).GetUniqueID();
	FINDOBJECTPARAMS param;
	param.hszName = &effectname;
	m_ToolBox->SendMessage(msgHash_FindObject, sizeof(FINDOBJECTPARAMS), &param );
	if ( param.bFound == true )
	{
		// effect already loaded
		return MSG_HANDLED_STOP;
	}

	IArchive *MemArchive;
	// hash the file name
	CHashString streamType(_T("File"));
	// create a new archive and load the file
	CREATEARCHIVE ca;
	DWORD retVal;
	ca.streamData = pFileName;
	ca.mode = STREAM_MODE_READ;
	ca.streamType = &streamType;
	// call the Archive factory to create an XML archive
	static DWORD msgHash_CreateXMLArchive = CHashString(_T("CreateXMLArchive")).GetUniqueID();
	if (retVal = m_ToolBox->SendMessage(msgHash_CreateXMLArchive, sizeof(CREATEARCHIVE), &ca) != MSG_HANDLED)
	{
		m_ToolBox->Log( LOGWARNING, _T("SHADEREFFECTLOADER: %s\n\tCould not create XML Archive\n"), pFileName );
		return MSG_ERROR;
	}

	MemArchive = dynamic_cast<IXMLArchive *>(ca.archive);

	///create the cal model
	CREATEOBJECTPARAMS cop;
	INITOBJECTPARAMS iop;
	SERIALIZEOBJECTPARAMS sop;
	
	CHashString hszParentName( _T("World") );
	CHashString hszTypeName(_T("CEffect"));	

	cop.parentName = &hszParentName;
	cop.typeName = &hszTypeName;
	cop.name = &effectname;
	static DWORD msgHash_CreateObject = CHashString(_T("CreateObject")).GetUniqueID();
	DWORD retval = m_ToolBox->SendMessage(msgHash_CreateObject, sizeof(CREATEOBJECTPARAMS), &cop, NULL, NULL);

	sop.name = &effectname;
	sop.archive = MemArchive;
	static DWORD msgHash_SerializeObject = CHashString(_T("SerializeObject")).GetUniqueID();
	m_ToolBox->SendMessage(msgHash_SerializeObject, sizeof(SERIALIZEOBJECTPARAMS), &sop, NULL, NULL);
	

	iop.name = &effectname;
	if( retval == MSG_HANDLED )
	{
		static DWORD msgHash_InitObject = CHashString(_T("InitObject")).GetUniqueID();
		retval = m_ToolBox->SendMessage(msgHash_InitObject, sizeof(INITOBJECTPARAMS), &iop, NULL, NULL);
	}

	MemArchive->Close();

	CREATEEFFECTINTERFACE addmsg;
	addmsg.m_Name = &effectname;
	static DWORD msgHash_AddEffect = CHashString(_T("AddEffect")).GetUniqueID();
	m_ToolBox->SendMessage(msgHash_AddEffect, sizeof( CREATEEFFECTINTERFACE ), &addmsg );
	return MSG_HANDLED_STOP;
}