public void エフェクトをマスタリストに登録する(string エフェクトID, エフェクト effect, bool これを既定のエフェクトに指定する = false) { _エフェクトマスタリスト.Add(エフェクトID, effect); Debug.WriteLine($"エフェクトを追加しました。[{effect.ファイル名}]"); if (これを既定のエフェクトに指定する) { 既定のエフェクト = effect; } }
public void Dispose() { foreach (KeyValuePair <string, エフェクト> kvp in _エフェクトマスタリスト) { kvp.Value.Dispose(); } _エフェクトマスタリスト.Clear(); 既定のエフェクト = null; }
public void サブセットにエフェクトを割り当てる(int サブセットID, エフェクト effect) { if (!(effect.ScriptClass.HasFlag(ScriptClass.Object))) { throw new InvalidOperationException("Objectフラグを持たないエフェクトはサブセットに登録できません。"); } // すでにマップに登録してあれば削除する。 if (_サブセットIDtoエフェクトマップ.ContainsKey(サブセットID)) { _サブセットIDtoエフェクトマップ.Remove(サブセットID); } // マップに登録する。 _サブセットIDtoエフェクトマップ.Add(サブセットID, effect); }
public パス(エフェクト effect, EffectPass d3dPass) { D3DPass = d3dPass; EffectVariable commandAnnotation = EffectParseHelper.アノテーションを取得する(d3dPass, "Script", "string"); Command = (commandAnnotation == null) ? "" : commandAnnotation.AsString().GetString(); if (!d3dPass.VertexShaderDescription.Variable.IsValid) { //TODO この場合標準シェーダーの頂点シェーダを利用する } if (!d3dPass.PixelShaderDescription.Variable.IsValid) { //TODO この場合標準シェーダーのピクセルシェーダを利用する } ScriptRuntime = new ScriptRuntime(Command, effect, null, this); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="effect"></param> /// <param name="D3DEffectTechnique"></param> /// <param name="subsetCount"></param> public テクニック(エフェクト effect, EffectTechnique d3dEffectTechnique, int subsetCount) { D3DEffectTechnique = d3dEffectTechnique; 描画するサブセットIDの集合 = new HashSet <int>(); パスリスト = new Dictionary <string, パス>(); if (!D3DEffectTechnique.IsValid) { throw new InvalidMMEEffectShader例外(string.Format("テクニック「{0}」の検証に失敗しました。", D3DEffectTechnique.Description.Name)); } // MMDPass アノテーション string mmdpass = getAnnotationString(D3DEffectTechnique, "MMDPass"); if (String.IsNullOrWhiteSpace(mmdpass)) { テクニックを適用する描画対象 = MMDPass種別.オブジェクト本体; } else { mmdpass = mmdpass.ToLower(); switch (mmdpass) { case "object": テクニックを適用する描画対象 = MMDPass種別.オブジェクト本体; break; case "object_ss": テクニックを適用する描画対象 = MMDPass種別.オブジェクト本体_セルフ影あり; break; case "zplot": テクニックを適用する描画対象 = MMDPass種別.セルフ影用Z値プロット; break; case "shadow": テクニックを適用する描画対象 = MMDPass種別.影; break; case "edge": テクニックを適用する描画対象 = MMDPass種別.エッジ; break; case "skinning": テクニックを適用する描画対象 = MMDPass種別.スキニング; break; case "scene": テクニックを適用する描画対象 = MMDPass種別.シーン; break; default: throw new InvalidOperationException("予期しない識別子"); } } // その他アノテーション テクスチャを使用する = getAnnotationBoolean(D3DEffectTechnique, "UseTexture"); スフィアマップを使用する = getAnnotationBoolean(D3DEffectTechnique, "UseSphereMap"); トゥーンレンダリングを使用する = getAnnotationBoolean(D3DEffectTechnique, "UseToon"); セルフ影を使用する = getAnnotationBoolean(D3DEffectTechnique, "UseSelfShadow"); 乗算スフィアを使用する = getAnnotationBoolean(D3DEffectTechnique, "MulSphere"); // Subset アノテーション GetSubsets(D3DEffectTechnique, subsetCount); // Script アノテーション EffectVariable rawScript = EffectParseHelper.アノテーションを取得する(D3DEffectTechnique, "Script"); for (int i = 0; i < D3DEffectTechnique.Description.PassCount; i++) { EffectPass pass = D3DEffectTechnique.GetPassByIndex(i); パスリスト.Add(pass.Description.Name, new パス(effect, pass)); } // Scriptランタイムの生成 if (rawScript != null) { ScriptRuntime = new ScriptRuntime(rawScript.AsString().GetString(), effect, this); // Script アノテーションがあれば登録する } else { ScriptRuntime = new ScriptRuntime("", effect, this); } }
public エフェクト管理() { 既定のエフェクト = null; _エフェクトマスタリスト = new Dictionary <string, エフェクト>(); }