/** * Preprocess a shader. * @param OutPreprocessedShader - Upon return contains the preprocessed source code. * @param ShaderOutput - ShaderOutput to which errors can be added. * @param ShaderInput - The shader compiler input. * @param AdditionalDefines - Additional defines with which to preprocess the shader. * @returns true if the shader is preprocessed without error. */ bool PreprocessShaderFile(FString& OutPreprocessedShader, TArray<FShaderCompilerError>& OutShaderErrors, const FString& InShaderFile) { FString McppOptions; FString McppOutput, McppErrors; ANSICHAR* McppOutAnsi = nullptr; ANSICHAR* McppErrAnsi = nullptr; bool bSuccess = false; // MCPP is not threadsafe. static FCriticalSection McppCriticalSection; FScopeLock McppLock(&McppCriticalSection); FSimpleMcppFileLoader FileLoader(InShaderFile); int32 Result = mcpp_run( TCHAR_TO_ANSI(*McppOptions), TCHAR_TO_ANSI(*FileLoader.GetInputShaderFilename()), &McppOutAnsi, &McppErrAnsi, FileLoader.GetMcppInterface() ); McppOutput = McppOutAnsi; McppErrors = McppErrAnsi; if (ParseMcppErrors(OutShaderErrors, McppErrors, false)) { // exchange strings FMemory::Memswap( &OutPreprocessedShader, &McppOutput, sizeof(FString) ); bSuccess = true; } return bSuccess; }
bool GameScene::Initialize() { pParentScene->Add(&cScene); // Create the transitions cRunToPause.Initialize(&cRun, &cOnPause, &cPause); cPauseToRun.Initialize(&cPause, &cOnRun, &cRun); cPauseToMenu.Initialize(&cPause, &cOnMenu, &cMenu); cRunToGameOver.Initialize(&cRun, &cOnGameOver, &cGameOver); cGameOverToMenu.Initialize(&cGameOver, &cOnMenu, &cMenu); // Create the State Machine. cFlow.RegisterTransition(&cRunToPause); cFlow.RegisterTransition(&cPauseToRun); cFlow.RegisterTransition(&cPauseToMenu); cFlow.RegisterTransition(&cRunToGameOver); cFlow.RegisterTransition(&cGameOverToMenu); cFlow.Initialize(&cRun); auto cb = [&](Job *self) { auto job = static_cast<FileLoader *>(self); pTilesetOptimist = static_cast<Texture *>(pResourceManager->Get("textures/realist_ground_tileset.png", ITexture::GetTypeId())); pTilesetRealist = static_cast<Texture *>(pResourceManager->Get("textures/pessimist_ground_tileset.png", ITexture::GetTypeId())); pTilesetPessimist = static_cast<Texture *>(pResourceManager->Get("textures/optimist_ground_tileset.png", ITexture::GetTypeId())); if(job->GetState() == eJobState::Completed) { OnJobCompleted(job); } else if(job->GetState() == eJobState::Aborted) { OnJobAborted(); } sdDelete(self); }; String f{"scenes/"}; pJobManager->Add(sdNew(FileLoader(f + sSceneFile, cb))); RocketEventManager::AddListener(this); pInput->AddKeyboardListener(this); // Get the initial value from game data gGui->SetPlayerName("Optimist"); gGui->SetLevel(1); gGui->SetXP(100); gGui->SetAttackPower(15); gGui->SetGold(0); gGui->SetLife(22, 22); gGui->SetStamina(10, 10); return true; }
/** * Preprocess a shader. * @param OutPreprocessedShader - Upon return contains the preprocessed source code. * @param ShaderOutput - ShaderOutput to which errors can be added. * @param ShaderInput - The shader compiler input. * @param AdditionalDefines - Additional defines with which to preprocess the shader. * @returns true if the shader is preprocessed without error. */ bool PreprocessShader( FString& OutPreprocessedShader, FShaderCompilerOutput& ShaderOutput, const FShaderCompilerInput& ShaderInput, const FShaderCompilerDefinitions& AdditionalDefines ) { FString McppOptions; FString McppOutput, McppErrors; ANSICHAR* McppOutAnsi = NULL; ANSICHAR* McppErrAnsi = NULL; bool bSuccess = false; // MCPP is not threadsafe. static FCriticalSection McppCriticalSection; FScopeLock McppLock(&McppCriticalSection); FMcppFileLoader FileLoader(ShaderInput); AddMcppDefines(McppOptions, ShaderInput.Environment.GetDefinitions()); AddMcppDefines(McppOptions, AdditionalDefines.GetDefinitionMap()); int32 Result = mcpp_run( TCHAR_TO_ANSI(*McppOptions), TCHAR_TO_ANSI(*FileLoader.GetInputShaderFilename()), &McppOutAnsi, &McppErrAnsi, FileLoader.GetMcppInterface() ); McppOutput = McppOutAnsi; McppErrors = McppErrAnsi; if (ParseMcppErrors(ShaderOutput, McppErrors)) { // exchange strings FMemory::Memswap( &OutPreprocessedShader, &McppOutput, sizeof(FString) ); bSuccess = true; } return bSuccess; }