/// <summary> /// 自身のインスタンスを作成して返す。 /// </summary> /// <param name="index">連番。ファンクション名の末尾に付与される1桁の数値(0~9)。省略時は 0 。</param> /// <param name="value">値。ファンクション名と '=' を挟んだ右辺に記された文字列。</param> /// <param name="runtime"></param> /// <param name="effect">ファンクションが属しているエフェクト。</param> /// <param name="technique">ファンクションが属しているテクニック。パスに属している場合には null を指定。</param> /// <param name="pass">ファンクションが属しているパス。テクニックに属している場合には null を指定。</param> /// <returns></returns> public override 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass) { var func = new ClearSetColor関数(); func._sourceVariable = effect.D3DEffect.GetVariableByName(value); if (func._sourceVariable == null) { throw new InvalidMMEEffectShader例外($"ClearSetColor={value};が指定されましたが、変数\"{value}\"は見つかりませんでした。"); } if (!func._sourceVariable.TypeInfo.Description.TypeName.ToLower().Equals("float4")) { throw new InvalidMMEEffectShader例外($"ClearSetColor={value};が指定されましたが、変数\"{value}\"はfloat4型ではありません。"); } return(func); }
public override void 次のファンクションへ遷移する(ScriptRuntime runtime) { int loopCount = runtime.LoopEndCount.Pop(); int count = runtime.LoopCounts.Pop(); int begin = runtime.LoopBegins.Pop(); if (count < loopCount) { // 継続 runtime.現在実行中のファンクションのインデックス = begin + 1; // 最初の部分+1しておく runtime.LoopCounts.Push(count + 1); runtime.LoopEndCount.Push(loopCount); runtime.LoopBegins.Push(begin); } else { //終了 runtime.現在実行中のファンクションのインデックス++; } }
/// <summary> /// 自身のインスタンスを作成して返す。 /// </summary> /// <param name="index">連番。ファンクション名の末尾に付与される1桁の数値(0~9)。省略時は 0 。</param> /// <param name="value">値。ファンクション名と '=' を挟んだ右辺に記された文字列。</param> /// <param name="runtime"></param> /// <param name="effect">ファンクションが属しているエフェクト。</param> /// <param name="technique">ファンクションが属しているテクニック。パスに属している場合には null を指定。</param> /// <param name="pass">ファンクションが属しているパス。テクニックに属している場合には null を指定。</param> /// <returns></returns> public override 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass) { var func = new Pass関数(); if (technique == null) { throw new InvalidMMEEffectShader例外("スクリプト内でPassを利用できるのはテクニックに適用されたスクリプトのみです。パスのスクリプトでは実行できません。"); } // このメソッドの引数のパスは使わない。 if (!technique.パスリスト.ContainsKey(value)) { throw new InvalidMMEEffectShader例外($"スクリプトで指定されたテクニック中では指定されたパス\"{value}\"は見つかりませんでした。(スペルミス?)"); } func._実行対象のパス = technique.パスリスト[value]; return(func); }
/// <summary> /// 自身のインスタンスを作成して返す。 /// </summary> /// <param name="index">連番。ファンクション名の末尾に付与される1桁の数値(0~9)。省略時は 0 。</param> /// <param name="value">値。ファンクション名と '=' を挟んだ右辺に記された文字列。</param> /// <param name="runtime"></param> /// <param name="effect">ファンクションが属しているエフェクト。</param> /// <param name="technique">ファンクションが属しているテクニック。パスに属している場合には null を指定。</param> /// <param name="pass">ファンクションが属しているパス。テクニックに属している場合には null を指定。</param> /// <returns></returns> public override 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass) { var func = new Clear関数(); switch (value) { case "Color": func._対象 = 対象.Color; break; case "Depth": func._対象 = 対象.Depth; break; default: throw new InvalidMMEEffectShader例外($"Clear={value}が指定されましたが、\"{value}\"は指定可能ではありません。\"Clear\"もしくは\"Depth\"が指定可能です。"); } func._index = index; return(func); }
public override 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass) { return(new ScriptExternal関数()); // TODO: 未実装 }
/// <summary> /// 自身のインスタンスを作成して返す。 /// </summary> /// <param name="index">連番。ファンクション名の末尾に付与される1桁の数値(0~9)。省略時は 0 。</param> /// <param name="value">値。ファンクション名と '=' を挟んだ右辺に記された文字列。</param> /// <param name="runtime"></param> /// <param name="effect">ファンクションが属しているエフェクト。</param> /// <param name="technique">ファンクションが属しているテクニック。パスに属している場合には null を指定。</param> /// <param name="pass">ファンクションが属しているパス。テクニックに属している場合には null を指定。</param> /// <returns></returns> public override 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass) { var func = new LoopEnd関数(); return(func); }
public virtual void 次のファンクションへ遷移する(ScriptRuntime runtime) { runtime.現在実行中のファンクションのインデックス++; }
/// <summary> /// 自身のインスタンスを作成して返す。 /// </summary> /// <param name="index">連番。ファンクション名の末尾に付与される1桁の数値(0~9)。省略時は 0 。</param> /// <param name="value">値。ファンクション名と '=' を挟んだ右辺に記された文字列。</param> /// <param name="runtime"></param> /// <param name="effect">ファンクションが属しているエフェクト。</param> /// <param name="technique">ファンクションが属しているテクニック。パスに属している場合には null を指定。</param> /// <param name="pass">ファンクションが属しているパス。テクニックに属している場合には null を指定。</param> /// <returns></returns> public abstract 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass);