示例#1
0
        public void エフェクトをマスタリストに登録する(string エフェクトID, エフェクト effect, bool これを既定のエフェクトに指定する = false)
        {
            _エフェクトマスタリスト.Add(エフェクトID, effect);

            Debug.WriteLine($"エフェクトを追加しました。[{effect.ファイル名}]");

            if (これを既定のエフェクトに指定する)
            {
                既定のエフェクト = effect;
            }
        }
示例#2
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        /// <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);
            }
        }
示例#6
0
 public エフェクト管理()
 {
     既定のエフェクト     = null;
     _エフェクトマスタリスト = new Dictionary <string, エフェクト>();
 }