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; }
// // 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), ¶m ); 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; }