public static bool InitializeMana(CriManaConfig config) { /* CRI Manaライブラリの初期化 */ if (CriManaPlugin.IsLibraryInitialized() == false) { CriManaPlugin.SetConfigParameters(config.graphicsMultiThreaded, config.numberOfDecoders, config.numberOfMaxEntries); CriManaPlugin.InitializeLibrary(); // set shader global keyword to inform cri mana shaders to output to correct colorspace if (QualitySettings.activeColorSpace == ColorSpace.Linear) { Shader.EnableKeyword("CRI_LINEAR_COLORSPACE"); } return(true); } else { return(false); } }
/** * <summary>プラグインの初期化(手動初期化用)</summary> * <remarks> * <para header='説明'>プラグインの初期化を行います。<br/> * デフォルトでは本関数はAwake関数内で自動的に呼び出されるので、アプリケーションが直接呼び出す必要はありません。<br/> * <br/> * 初期化パラメタをスクリプトから動的に変更して初期化を行いたい場合、本関数を使用してください。<br/></para> * <para header='注意'>本関数を使用する場合は、 自動初期化を無効にするため、 * ::CriWareInitializer::dontInitializeOnAwake プロパティをインスペクタ上でチェックしてください。<br/> * また、本関数を呼び出すタイミングは全てのプラグインAPIよりも前である必要があります。 * Script Execution Orderが高いスクリプト上で行ってください。</para> * </remarks> * */ public void Initialize() { /* 初期化カウンタの更新 */ initializationCount++; if (initializationCount != 1) { /* CriWareInitializer自身による多重初期化は許可しない */ GameObject.Destroy(this); return; } /* 非実行時にライブラリ機能を使用していた場合は一度終了処理を行う */ if ((CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == true && CriManaPlugin.IsLibraryInitialized() == true) || (CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == true && CriManaPlugin.IsLibraryInitialized() == false) || (CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == false && CriManaPlugin.IsLibraryInitialized() == false)) { #if UNITY_EDITOR || (!UNITY_PS3) /* CRI Manaライブラリの終了 */ if (initializesMana) { CriManaPlugin.FinalizeLibrary(); } #endif /* CRI Atomライブラリの終了 */ if (initializesAtom) { /* EstimatorがStop状態になるまでFinalize */ while (CriAtomExLatencyEstimator.GetCurrentInfo().status != CriAtomExLatencyEstimator.Status.Stop) { CriAtomExLatencyEstimator.FinalizeModule(); } /* 終了処理の実行 */ CriAtomPlugin.FinalizeLibrary(); } /* CRI File Systemライブラリの終了 */ if (initializesFileSystem) { CriFsPlugin.FinalizeLibrary(); } } /* CRI File Systemライブラリの初期化 */ if (initializesFileSystem) { InitializeFileSystem(fileSystemConfig); } /* CRI Atomライブラリの初期化 */ if (initializesAtom) { switch (atomConfig.inGamePreviewMode) { case CriAtomConfig.InGamePreviewSwitchMode.Disable: atomConfig.usesInGamePreview = false; break; case CriAtomConfig.InGamePreviewSwitchMode.Enable: atomConfig.usesInGamePreview = true; break; case CriAtomConfig.InGamePreviewSwitchMode.FollowBuildSetting: atomConfig.usesInGamePreview = UnityEngine.Debug.isDebugBuild; break; default: /* 既に設定されたフラグに従う */ break; } InitializeAtom(atomConfig); } /* シーンチェンジ後もオブジェクトを維持するかどうかの設定 */ if (dontDestroyOnLoad) { DontDestroyOnLoad(transform.gameObject); DontDestroyOnLoad(CriWare.Common.managerObject); } }
//----- method ----- public void Initialize(string cryptoKey) { #if ENABLE_CRIWARE_SOFDEC if (!CriManaPlugin.IsLibraryInitialized()) { // VP9初期化. if (CriManaVp9.SupportCurrentPlatform()) { CriManaVp9.SetupVp9Decoder(); } } #endif #if ENABLE_CRIWARE_ADX || ENABLE_CRIWARE_SOFDEC // CRIの管理GameObject名にリネーム. gameObject.transform.name = CriWareManageObjectName; // CriAtomServer → CriAtomの順で初期化しないとCriAtomにCriAtomServerを生成されてしまう. CriAtomServer.CreateInstance(); if (Initializer == null) { // Acfを管理する為自動初期化を無効化. var source = initializerPrefab.Source; var initializerSource = UnityUtility.GetComponent <CriWareInitializer>(source); initializerSource.dontInitializeOnAwake = true; // 生成. Initializer = initializerPrefab.Instantiate <CriWareInitializer>(); Initializer.transform.name = "Initializer"; //======================================================== // ライブラリ初期化(この処理完了後にCRIが有効化される). //======================================================== // 手動管理する為無効化. Initializer.dontDestroyOnLoad = false; if (!string.IsNullOrEmpty(cryptoKey)) { // ※ ADX2-LEは自動で暗号化処理が掛かるのでdecrypterConfig自体が存在しない. #if !ENABLE_CRIWARE_ADX_LE // 認証キー. Initializer.decrypterConfig.key = cryptoKey; #endif } // インゲームプレビュー無効化. if (!Debug.isDebugBuild) { Initializer.atomConfig.usesInGamePreview = false; } // ファイルハンドルの使用数を節約する為、ファイルアクセスが行われるタイミングでのみハンドルを利用するよう変更. // ※ 逐次オープンとなるためファイルアクセスの性能は低下する. Initializer.fileSystemConfig.numberOfBinders = 65535; Initializer.fileSystemConfig.minimizeFileDescriptorUsage = true; // 同時インストール可能数を設定. Initializer.fileSystemConfig.numberOfInstallers = 65535; // 初期化実行. Initializer.Initialize(); } if (ErrorHandler == null) { var errorHandlerObject = UnityUtility.CreateEmptyGameObject(gameObject, "ErrorHandler"); UnityUtility.SetActive(errorHandlerObject, false); // Awakeが実行されないように非アクティブでAddComponent. ErrorHandler = errorHandlerObject.AddComponent <CriWareErrorHandler>(); ErrorHandler.dontDestroyOnLoad = false; UnityUtility.SetActive(errorHandlerObject, true); } #if ENABLE_CRIWARE_FILESYSTEM // CriFsServerはライブラリの初期化後に生成. CriFsServer.CreateInstance(); #endif // CriAtomはライブラリの初期化後に生成. var criAtom = gameObject.AddComponent <CriAtom>(); // CriAtomのSetupが隠蔽されているので手動で初期化する. criAtom.acfFile = Initializer.atomConfig.acfFileName; if (!string.IsNullOrEmpty(criAtom.acfFile)) { var acfPath = PathUtility.Combine(Common.streamingAssetsPath, criAtom.acfFile); acfPath += CriAssetDefinition.AcfExtension; CriAtomEx.RegisterAcf(null, acfPath); } #endif }
/** * <summary>プラグインの初期化(手動初期化用)</summary> * \par 説明: * プラグインの初期化を行います。<br/> * デフォルトでは本関数はAwake関数内で自動的に呼び出されるので、アプリケーションが直接呼び出す必要はありません。<br/> * <br/> * 初期化パラメタをスクリプトから動的に変更して初期化を行いたい場合、本関数を使用してください。<br/> * \par 注意: * 本関数を使用する場合は、 自動初期化を無効にするため、 ::CriWareInitializer::dontInitializeOnAwake プロパティをインスペクタ上でチェックしてください。<br/> * また、本関数を呼び出すタイミングは全てのプラグインAPIよりも前に呼び出す必要があります。Script Execution Orderが高いスクリプト上で行ってください。 * */ public void Initialize() { /* 初期化カウンタの更新 */ initializationCount++; if (initializationCount != 1) { /* CriWareInitializer自身による多重初期化は許可しない */ GameObject.Destroy(this); return; } /* 非実行時にライブラリ機能を使用していた場合は一度終了処理を行う */ if ((CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == true && CriManaPlugin.IsLibraryInitialized() == true) || (CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == true && CriManaPlugin.IsLibraryInitialized() == false) || (CriFsPlugin.IsLibraryInitialized() == true && CriAtomPlugin.IsLibraryInitialized() == false && CriManaPlugin.IsLibraryInitialized() == false)) { /* CRI Manaライブラリの終了 */ if (initializesMana) { CriManaPlugin.FinalizeLibrary(); } /* CRI Atomライブラリの終了 */ if (initializesAtom) { /* EstimatorがStop状態になるまでFinalize */ while (CriAtomExLatencyEstimator.GetCurrentInfo().status != CriAtomExLatencyEstimator.Status.Stop) { CriAtomExLatencyEstimator.FinalizeModule(); } /* 終了処理の実行 */ CriAtomPlugin.FinalizeLibrary(); } /* CRI File Systemライブラリの終了 */ if (initializesFileSystem) { CriFsPlugin.FinalizeLibrary(); } } /* CRI File Systemライブラリの初期化 */ if (initializesFileSystem) { InitializeFileSystem(fileSystemConfig); } /* CRI Atomライブラリの初期化 */ if (initializesAtom) { InitializeAtom(atomConfig); } /* シーンチェンジ後もオブジェクトを維持するかどうかの設定 */ if (dontDestroyOnLoad) { DontDestroyOnLoad(transform.gameObject); DontDestroyOnLoad(CriWare.managerObject); } }