svlFilterSourceVideoFile::svlFilterSourceVideoFile(unsigned int channelcount) : svlFilterSourceBase(false), // manual timestamp management OutputImage(0), FirstTimestamp(-1.0), NativeFramerate(-1.0) { CreateInterfaces(); AddOutput("output", true); SetAutomaticOutputType(false); SetChannelCount(channelcount); }
svlFilterSplitter::svlFilterSplitter() : svlFilterBase() { CreateInterfaces(); AddInput("input", true); AddInputType("input", svlTypeImageRGB); AddInputType("input", svlTypeImageRGBA); AddInputType("input", svlTypeImageRGBStereo); AddInputType("input", svlTypeImageRGBAStereo); AddInputType("input", svlTypeImageMono8); AddInputType("input", svlTypeImageMono8Stereo); AddInputType("input", svlTypeImageMono16); AddInputType("input", svlTypeImageMono16Stereo); AddInputType("input", svlTypeImageMono32); AddInputType("input", svlTypeImageMono32Stereo); AddInputType("input", svlTypeImage3DMap); AddInputType("input", svlTypeCUDAImageRGB); AddInputType("input", svlTypeCUDAImageRGBA); AddInputType("input", svlTypeCUDAImageRGBStereo); AddInputType("input", svlTypeCUDAImageRGBAStereo); AddInputType("input", svlTypeCUDAImageMono8); AddInputType("input", svlTypeCUDAImageMono8Stereo); AddInputType("input", svlTypeCUDAImageMono16); AddInputType("input", svlTypeCUDAImageMono16Stereo); AddInputType("input", svlTypeCUDAImageMono32); AddInputType("input", svlTypeCUDAImageMono32Stereo); AddInputType("input", svlTypeCUDAImage3DMap); AddInputType("input", svlTypeMatrixInt8); AddInputType("input", svlTypeMatrixInt16); AddInputType("input", svlTypeMatrixInt32); AddInputType("input", svlTypeMatrixInt64); AddInputType("input", svlTypeMatrixUInt8); AddInputType("input", svlTypeMatrixUInt16); AddInputType("input", svlTypeMatrixUInt32); AddInputType("input", svlTypeMatrixUInt64); AddInputType("input", svlTypeMatrixFloat); AddInputType("input", svlTypeMatrixDouble); AddInputType("input", svlTypeTransform3D); AddInputType("input", svlTypeTargets); AddInputType("input", svlTypeText); AddInputType("input", svlTypeBlobs); // Add the trunk output by default svlFilterBase::AddOutput("output", true); SetAutomaticOutputType(false); }
svlFilterImageWindow::svlFilterImageWindow() : svlFilterBase(), FullScreenFlag(false), PositionSetFlag(false), IsVisible(true), Thread(0), ThreadProc(0), WindowManager(0), EventHandler(0) { CreateInterfaces(); AddInput("input", true); AddInputType("input", svlTypeImageRGB); AddInputType("input", svlTypeImageRGBStereo); AddOutput("output", true); SetAutomaticOutputType(true); }
svlFilterImageResizer::svlFilterImageResizer() : svlFilterBase(), OutputImage(0) { CreateInterfaces(); AddInput("input", true); AddInputType("input", svlTypeImageRGB); AddInputType("input", svlTypeImageMono8); AddInputType("input", svlTypeImageRGBStereo); AddInputType("input", svlTypeImageMono8Stereo); // TO DO: // svlTypeImageMono16 and svlTypeImageMono16Stereo // svlTypeImageMono32 and svlTypeImageMono32Stereo AddOutput("output", true); SetAutomaticOutputType(true); for (unsigned int i = 0; i < 2; i ++) { WidthRatio[i] = HeightRatio[i] = 1.0; Width[i] = Height[i] = 0; } InterpolationEnabled = false; }
void hack::Initialize() { ::signal(SIGSEGV, &critical_error_handler); ::signal(SIGABRT, &critical_error_handler); time_injected = time(nullptr); /*passwd *pwd = getpwuid(getuid()); char *logname = strfmt("/tmp/cathook-game-stdout-%s-%u.log", pwd->pw_name, time_injected); freopen(logname, "w", stdout); free(logname); logname = strfmt("/tmp/cathook-game-stderr-%s-%u.log", pwd->pw_name, time_injected); freopen(logname, "w", stderr); free(logname);*/ // Essential files must always exist, except when the game is running in text // mode. #if ENABLE_VISUALS { std::vector<std::string> essential = { "fonts/tf2build.ttf" }; for (const auto &s : essential) { std::ifstream exists(DATA_PATH "/" + s, std::ios::in); if (not exists) { Error(("Missing essential file: " + s + "/%s\nYou MUST run install-data script to finish " "installation") .c_str(), s.c_str()); } } } #endif /* TEXTMODE */ logging::Info("Initializing..."); InitRandom(); sharedobj::LoadAllSharedObjects(); CreateInterfaces(); CDumper dumper; dumper.SaveDump(); logging::Info("Is TF2? %d", IsTF2()); logging::Info("Is TF2C? %d", IsTF2C()); logging::Info("Is HL2DM? %d", IsHL2DM()); logging::Info("Is CSS? %d", IsCSS()); logging::Info("Is TF? %d", IsTF()); InitClassTable(); BeginConVars(); g_Settings.Init(); EndConVars(); #if ENABLE_VISUALS draw::Initialize(); #if ENABLE_GUI // FIXME put gui here #endif #endif /* TEXTMODE */ gNetvars.init(); InitNetVars(); g_pLocalPlayer = new LocalPlayer(); g_pPlayerResource = new TFPlayerResource(); uintptr_t *clientMode = 0; // Bad way to get clientmode. // FIXME [MP]? while (!(clientMode = **(uintptr_t ***) ((uintptr_t)((*(void ***) g_IBaseClient)[10]) + 1))) { usleep(10000); } hooks::clientmode.Set((void *) clientMode); hooks::clientmode.HookMethod(HOOK_ARGS(CreateMove)); #if ENABLE_VISUALS hooks::clientmode.HookMethod(HOOK_ARGS(OverrideView)); #endif hooks::clientmode.HookMethod(HOOK_ARGS(LevelInit)); hooks::clientmode.HookMethod(HOOK_ARGS(LevelShutdown)); hooks::clientmode.Apply(); hooks::clientmode4.Set((void *) (clientMode), 4); hooks::clientmode4.HookMethod(HOOK_ARGS(FireGameEvent)); hooks::clientmode4.Apply(); hooks::client.Set(g_IBaseClient); hooks::client.HookMethod(HOOK_ARGS(DispatchUserMessage)); #if ENABLE_VISUALS hooks::client.HookMethod(HOOK_ARGS(FrameStageNotify)); hooks::client.HookMethod(HOOK_ARGS(IN_KeyEvent)); #endif hooks::client.Apply(); #if ENABLE_VISUALS hooks::vstd.Set((void *) g_pUniformStream); hooks::vstd.HookMethod(HOOK_ARGS(RandomInt)); hooks::vstd.Apply(); hooks::panel.Set(g_IPanel); hooks::panel.HookMethod(hooked_methods::methods::PaintTraverse, offsets::PaintTraverse(), &hooked_methods::original::PaintTraverse); hooks::panel.Apply(); #endif hooks::input.Set(g_IInput); hooks::input.HookMethod(HOOK_ARGS(GetUserCmd)); hooks::input.Apply(); #if ENABLE_VISUALS hooks::modelrender.Set(g_IVModelRender); hooks::modelrender.HookMethod(HOOK_ARGS(DrawModelExecute)); hooks::modelrender.Apply(); #endif hooks::enginevgui.Set(g_IEngineVGui); hooks::enginevgui.HookMethod(HOOK_ARGS(Paint)); hooks::enginevgui.Apply(); hooks::engine.Set(g_IEngine); hooks::engine.HookMethod(HOOK_ARGS(IsPlayingTimeDemo)); hooks::engine.Apply(); hooks::eventmanager2.Set(g_IEventManager2); hooks::eventmanager2.HookMethod(HOOK_ARGS(FireEvent)); hooks::eventmanager2.HookMethod(HOOK_ARGS(FireEventClientSide)); hooks::eventmanager2.Apply(); hooks::steamfriends.Set(g_ISteamFriends); hooks::steamfriends.HookMethod(HOOK_ARGS(GetFriendPersonaName)); hooks::steamfriends.Apply(); #if ENABLE_NULL_GRAPHICS g_IMaterialSystem->SetInStubMode(true); IF_GAME(IsTF2()) { logging::Info("Graphics Nullified"); logging::Info("The game will crash"); // TODO offsets::()? hooks::materialsystem.Set((void *) g_IMaterialSystem); uintptr_t base = *(uintptr_t *) (g_IMaterialSystem); hooks::materialsystem.HookMethod((void *) ReloadTextures_null_hook, 70); hooks::materialsystem.HookMethod((void *) ReloadMaterials_null_hook, 71); hooks::materialsystem.HookMethod((void *) FindMaterial_null_hook, 73); hooks::materialsystem.HookMethod((void *) FindTexture_null_hook, 81); hooks::materialsystem.HookMethod((void *) ReloadFilesInList_null_hook, 121); hooks::materialsystem.HookMethod((void *) FindMaterialEx_null_hook, 123); hooks::materialsystem.Apply(); // hooks::materialsystem.HookMethod(); } #endif // FIXME [MP] logging::Info("Hooked!"); velocity::Init(); playerlist::Load(); #if ENABLE_VISUALS InitStrings(); #ifndef FEATURE_EFFECTS_DISABLED if (g_ppScreenSpaceRegistrationHead && g_pScreenSpaceEffects) { effect_chams::g_pEffectChams = new CScreenSpaceEffectRegistration("_cathook_chams", &effect_chams::g_EffectChams); g_pScreenSpaceEffects->EnableScreenSpaceEffect("_cathook_chams"); effect_glow::g_pEffectGlow = new CScreenSpaceEffectRegistration("_cathook_glow", &effect_glow::g_EffectGlow); g_pScreenSpaceEffects->EnableScreenSpaceEffect("_cathook_glow"); } logging::Info("SSE enabled.."); #endif sdl_hooks::applySdlHooks(); logging::Info("SDL hooking done"); #endif /* TEXTMODE */ #if ENABLE_VISUALS #ifndef FEATURE_FIDGET_SPINNER_ENABLED InitSpinner(); logging::Info("Initialized Fidget Spinner"); #endif #endif logging::Info("Clearing initializer stack"); while (!init_stack().empty()) { init_stack().top()(); init_stack().pop(); } logging::Info("Initializer stack done"); #if not ENABLE_VISUALS hack::command_stack().push("exec cat_autoexec_textmode"); #endif hack::command_stack().push("exec cat_autoexec"); hack::command_stack().push("cat_killsay_reload"); hack::command_stack().push("cat_spam_reload"); hack::initialized = true; for (int i = 0; i < 12; i++) { re::ITFMatchGroupDescription *desc = re::GetMatchGroupDescription(i); if (!desc || desc->m_iID > 9) // ID's over 9 are invalid continue; if (desc->m_bForceCompetitiveSettings) { desc->m_bForceCompetitiveSettings = false; logging::Info("Bypassed force competitive cvars!"); } } }