示例#1
0
        // System.Collections.Generic.SortedDictionary<int,Vector2>

        public void RebuildTextureCache()
        {
            texturecache.Clear();
            passindex.Clear();
            for (int i = 0; i < this.shader.DefaultEffect.Description.GlobalVariableCount; i++)
            {
                EffectVariable var = this.shader.DefaultEffect.GetVariableByIndex(i);

                if (var.GetVariableType().Description.TypeName == "Texture2D")
                {
                    EffectResourceVariable rv = var.AsResource();
                    texturecache.Add(rv);
                }

                if (var.GetVariableType().Description.TypeName == "float" ||
                    var.GetVariableType().Description.TypeName == "int")
                {
                    if (var.Description.Semantic == "PASSINDEX")
                    {
                        passindex.Add(var.AsScalar());
                    }
                    if (var.Description.Semantic == "PASSITERATIONINDEX")
                    {
                        passiterindex.Add(var.AsScalar());
                    }
                }
            }
        }
示例#2
0
        public override FunctionBase GetExecuterInstance(int index, string value, RenderContext context, ScriptRuntime runtime,
                                                         MMEEffectManager manager, MMEEffectTechnique technique, MMEEffectPass pass)
        {
            LoopByCountFunction func = new LoopByCountFunction();

            func.runtime = runtime;
            if (string.IsNullOrWhiteSpace(value))
            {
                throw new InvalidMMEEffectShaderException("LoopByCount=;は指定できません。int,float,boolいずれかの変数名を伴う必要があります。");
            }
            EffectVariable rawVariable = manager.EffectFile.GetVariableByName(value);
            string         typeName    = rawVariable.GetVariableType().Description.TypeName.ToLower();
            int            loopCount   = 0;

            switch (typeName)
            {
            case "bool":
            case "int":
                loopCount = rawVariable.AsScalar().GetInt();
                break;

            case "float":
                loopCount = (int)rawVariable.AsScalar().GetFloat();
                break;

            default:
                throw new InvalidMMEEffectShaderException("LoopByCountに指定できる変数の型はfloat,int,boolのいずれかです。");
            }
            func.loopCount = loopCount;
            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 LoopByCount関数();

            func._runtime = runtime;

            if (string.IsNullOrWhiteSpace(value))
            {
                throw new InvalidMMEEffectShader例外("LoopByCount=;(空文字列)は指定できません。int,float,boolいずれかの変数名を伴う必要があります。");
            }

            EffectVariable d3dVariable = effect.D3DEffect.GetVariableByName(value);
            string         typeName    = d3dVariable.TypeInfo.Description.TypeName.ToLower();

            int loopCount = 0;

            switch (typeName)
            {
            case "bool":
            case "int":
                loopCount = d3dVariable.AsScalar().GetInt();
                break;

            case "float":
                loopCount = (int)d3dVariable.AsScalar().GetFloat();
                break;

            default:
                throw new InvalidMMEEffectShader例外("LoopByCountに指定できる変数の型はfloat,int,boolのいずれかです。");
            }

            func._ループ回数 = loopCount;

            return(func);
        }
示例#4
0
        public void SetParameter(string varName, object varValue)
        {
            EffectVariable ev = DXEffect.GetVariableByName(varName);

            if (ev.IsValid)
            {
                if (varValue is bool)
                {
                    ev.AsScalar().Set((bool)varValue);
                }
                else if (varValue is int)
                {
                    ev.AsScalar().Set((int)varValue);
                }
                else if (varValue is uint)
                {
                    ev.AsScalar().Set((uint)varValue);
                }
                else if (varValue is float)
                {
                    ev.AsScalar().Set((float)varValue);
                }
                else if (varValue is double)
                {
                    ev.AsScalar().Set((float)(double)varValue);
                }
                else if (varValue is Vector2)
                {
                    ev.AsVector().Set((Vector2)varValue);
                }
                else if (varValue is Vector3)
                {
                    ev.AsVector().Set((Vector3)varValue);
                }
                else if (varValue is Vector4[])
                {
                    ev.AsVector().Set((Vector4[])varValue);
                }
                else if (varValue is Vector4)
                {
                    ev.AsVector().Set((Vector4)varValue);
                }
                else if (varValue is Matrix)
                {
                    ev.AsMatrix().SetMatrix((Matrix)varValue);
                }
                //else if (varValue is DXTexture2DClass) ev.AsShaderResource().SetResource((varValue as DXTexture2DClass).TextureResourceView);
                else if (varValue is ShaderResourceView)
                {
                    ev.AsShaderResource().SetResource(varValue as ShaderResourceView);
                }
                else if (varValue == null)
                {
                    ev.AsShaderResource().SetResource(null);
                }
                else /* ... */ } {
        }
    }
示例#5
0
 protected override void Subscribe(EffectVariable variable, IMotionManager motion, RenderContext context)
 {
     if (this.SyncInEditMode)
     {
         variable.AsScalar().Set(motion.ElapsedTime);
     }
     else
     {
         variable.AsScalar().Set(motion.ElapsedTime);
     }
 }
示例#6
0
 protected override void Subscribe(EffectVariable variable, IMotionManager motion, RenderContext context)
 {
     if (SyncInEditMode)
     {
         variable.AsScalar().Set(motion.CurrentFrame);
     }
     else
     {
         variable.AsScalar().Set(MotionTimer.stopWatch.ElapsedMilliseconds / 1000f);
     }
 }
示例#7
0
 protected override void  数を更新する(EffectVariable 数, モーション管理 モーション)
 {
     if (SyncInEditMode)
     {
         数.AsScalar().Set(モーション.前回のフレームからの経過時間sec);
     }
     else
     {
         数.AsScalar().Set(モーション.前回のフレームからの経過時間sec);
     }
 }
示例#8
0
 protected override void  数を更新する(EffectVariable 数, モーション管理 モーション)
 {
     if (SyncInEditMode)
     {
         数.AsScalar().Set(モーション.現在再生中のモーションのフレーム位置sec);
     }
     else
     {
         数.AsScalar().Set(モーションタイマ.stopWatch.ElapsedMilliseconds / 1000f);
     }
 }
示例#9
0
        public override void Execute(ISubset ipmxSubset, Action <ISubset> drawAction)
        {
            int count = runtime.LoopCounts.Pop();

            targetVariable.AsScalar().Set(count);
            runtime.LoopCounts.Push(count);
        }
示例#10
0
        public void OnPreRender(Device device, float diffTime)
        {
            EffectVariable       ev  = effect.GetVariableByName("diffTime");
            EffectScalarVariable esv = ev.AsScalar();

            esv.Set(diffTime);
        }
示例#11
0
        public override SubscriberBase GetSubscriberInstance(EffectVariable variable, RenderContext context, MMEEffectManager effectManager, int semanticIndex)
        {
            EffectVariable annotation = variable.GetAnnotationByName("SyncInEditMode");
            bool           syncMode   = false;

            if (annotation != null)
            {
                syncMode = annotation.AsScalar().GetInt() == 1;
            }
            return(GetSubscriberInstance(syncMode));
        }
 public static bool GetBoolFromFloatVVVV(this EffectVariable var, bool defaultValue)
 {
     if (var.IsValid)
     {
         return(var.AsScalar().GetFloat() > 0.5f);
     }
     else
     {
         return(defaultValue);
     }
 }
示例#13
0
        public ImageShaderPass(EffectPass pd)
        {
            this.Mips         = false;
            this.CustomFormat = false;
            this.Scale        = 1.0f;
            this.DoScale      = false;
            this.Reference    = eImageScaleReference.Previous;

            this.ComputeData = new ImageComputeData(pd);

            EffectVariable var = pd.GetAnnotationByName("format");

            if (var.IsValid)
            {
                string fmt = var.AsString().GetString();
                this.CustomFormat = true;
                this.Format       = (SlimDX.DXGI.Format)Enum.Parse(typeof(SlimDX.DXGI.Format), fmt, true);
            }

            var = pd.GetAnnotationByName("mips");
            if (var.IsValid)
            {
                bool b = var.AsScalar().GetFloat() > 0.5f;
                this.Mips = b;
            }

            var = pd.GetAnnotationByName("scale");
            if (var.IsValid)
            {
                this.Scale   = var.AsScalar().GetFloat();
                this.DoScale = true;
            }

            var = pd.GetAnnotationByName("initial");
            if (var.IsValid)
            {
                bool b = var.AsScalar().GetFloat() > 0.5f;
                this.Reference = b ? eImageScaleReference.Initial : eImageScaleReference.Previous;
            }
        }
示例#14
0
        public override 数管理  数登録インスタンスを生成して返す(EffectVariable variable, エフェクト effect, int semanticIndex)
        {
            EffectVariable annotation = variable.GetAnnotationByName("SyncInEditMode");

            bool syncMode = false;

            if (annotation != null)
            {
                syncMode = (annotation.AsScalar().GetInt() == 1);
            }

            return(時間変数登録インスタンスを生成して返す(syncMode));
        }
示例#15
0
        public static int GetIntAnnotation(this EffectPass ext, string name, int defaultvalue)
        {
            EffectVariable var = ext.GetAnnotationByName(name);

            if (var.IsValid)
            {
                return(var.AsScalar().GetInt());
            }
            else
            {
                return(defaultvalue);
            }
        }
示例#16
0
        /// <summary>
        ///     Returns a Bool annotation techniques specified in
        /// </summary>
        /// <param name="technique">Techniques</param>
        /// <param name="attrName">Annotation name</param>
        /// <returns>Value</returns>
        public static ExtendedBoolean getAnnotationBoolean(EffectTechnique technique, string attrName)
        {
            EffectVariable annotationVariable = getAnnotation(technique, attrName, "bool");

            if (annotationVariable == null)
            {
                return(ExtendedBoolean.Ignore);
            }
            int annotation = annotationVariable.AsScalar().GetInt();

            if (annotation == 1)
            {
                return(ExtendedBoolean.Enable);
            }
            return(ExtendedBoolean.Disable);
        }
示例#17
0
        /// <summary>
        ///     指定したテクニックの指定したアノテーションをBool値で取得します
        /// </summary>
        /// <param name="technique">テクニック</param>
        /// <param name="attrName">アノテーション名</param>
        /// <returns>値</returns>
        public 状態Boolean getAnnotationBoolean(EffectTechnique technique, string attrName)
        {
            EffectVariable annotationVariable = EffectParseHelper.アノテーションを取得する(technique, attrName);

            if (annotationVariable == null)
            {
                return(状態Boolean.無視);
            }

            int annotation = annotationVariable.AsScalar().GetInt();

            if (annotation == 1)
            {
                return(状態Boolean.効);
            }

            return(状態Boolean.無効);
        }
示例#18
0
 public override void Apply(DX11ShaderInstance shaderinstance, DX11RenderSettings settings)
 {
     if (settings.BackBuffer != null)
     {
         EffectVariable counter = this.variable.GetAnnotationByName("counter");
         if (counter != null)
         {
             float cnt = counter.AsScalar().GetFloat();
             shaderinstance.SetByName(this.Name, settings.BackBuffer.UAV, (int)cnt);
         }
         else
         {
             if (settings.ResetCounter)
             {
                 shaderinstance.SetByName(this.Name, settings.BackBuffer.UAV, settings.CounterValue);
             }
             else
             {
                 shaderinstance.SetByName(this.Name, settings.BackBuffer.UAV);
             }
         }
     }
 }
示例#19
0
 protected override void SetDefault(InputAttribute attr, EffectVariable var)
 {
     attr.DefaultValue = var.AsScalar().GetFloat();
 }
示例#20
0
 public static void Set(this EffectVariable var, float[] value)
 {
     var.AsScalar().Set(value);
 }
示例#21
0
        public ImageShaderPass(EffectPass pd)
        {
            this.Mips           = false;
            this.CustomFormat   = false;
            this.ScaleVector    = new Vector2(1, 1);
            this.DoScale        = false;
            this.Reference      = eImageScaleReference.Previous;
            this.BlendPreset    = "";
            this.DepthPreset    = "";
            this.UseDepth       = false;
            this.HasState       = false;
            this.KeepTarget     = false;
            this.Absolute       = false;
            this.IterationCount = 1;

            this.ComputeData = new ImageComputeData(pd);

            EffectVariable var = pd.GetAnnotationByName("format");

            if (var.IsValid)
            {
                string fmt = var.AsString().GetString();
                this.CustomFormat = true;
                this.Format       = (SlimDX.DXGI.Format)Enum.Parse(typeof(SlimDX.DXGI.Format), fmt, true);
            }

            var = pd.GetAnnotationByName("mips");
            if (var.IsValid)
            {
                bool b = var.AsScalar().GetFloat() > 0.5f;
                this.Mips = b;
            }

            var = pd.GetAnnotationByName("scale");
            if (var.IsValid)
            {
                if (var.GetVariableType().Description.Class == ShaderVariableClass.Scalar)
                {
                    float s = var.AsScalar().GetFloat();
                    this.ScaleVector = new Vector2(s, s);
                    this.DoScale     = true;
                }
                if (var.GetVariableType().Description.Class == ShaderVariableClass.Vector)
                {
                    Vector4 s = var.AsVector().GetVector();
                    this.ScaleVector = new Vector2(s.X, s.Y);
                    this.DoScale     = true;
                }
                var = pd.GetAnnotationByName("absolute");
                if (var.IsValid && var.GetVariableType().Description.Class == ShaderVariableClass.Scalar)
                {
                    this.Absolute = var.AsScalar().GetFloat() > 0.5f;
                }
            }

            var = pd.GetAnnotationByName("initial");
            if (var.IsValid)
            {
                bool b = var.AsScalar().GetFloat() > 0.5f;
                this.Reference = b ? eImageScaleReference.Initial : eImageScaleReference.Previous;
            }

            var = pd.GetAnnotationByName("iterations");
            if (var.IsValid)
            {
                try
                {
                    int i = var.AsScalar().GetInt();

                    this.IterationCount = Math.Max(1, i);
                }
                catch
                {
                }
            }

            var = pd.GetAnnotationByName("clear");
            if (var.IsValid)
            {
                bool b = var.AsScalar().GetFloat() > 0.5f;
                this.Clear = b;
            }

            var = pd.GetAnnotationByName("usedepth");
            if (var.IsValid)
            {
                bool b = var.AsScalar().GetFloat() > 0.5f;
                this.UseDepth = b;
            }

            var = pd.GetAnnotationByName("keeptarget");
            if (var.IsValid)
            {
                bool b = var.AsScalar().GetFloat() > 0.5f;
                this.KeepTarget = b;
            }

            var = pd.GetAnnotationByName("hasstate");
            if (var.IsValid)
            {
                bool b = var.AsScalar().GetFloat() > 0.5f;
                this.HasState = b;
            }


            var = pd.GetAnnotationByName("blendpreset");
            if (var.IsValid)
            {
                string blend = var.AsString().GetString();
                this.BlendPreset = blend;
            }


            var = pd.GetAnnotationByName("depthpreset");
            if (var.IsValid)
            {
                string depth = var.AsString().GetString();
                this.DepthPreset = depth;
            }
        }
示例#22
0
        public override void  数を更新する(EffectVariable 数, 数更新時引数 引数)
        {
            var currentModel = RenderContext.Instance.描画ターゲットコンテキスト.ワールド空間.Drawableを取得する(_name);

            if (currentModel == null)
            {
                return;
            }

            IDrawable targetDrawable = (_isSelf) ? 引数.モデル : currentModel;

            if (_target == TargetObject.UnUsed)
            {
                switch (_variableType)
                {
                case  数型.Float4x4:
                    数.AsMatrix().SetMatrix(RenderContext.Instance.行列管理.ワールド行列管理.モデルのワールド変換行列を作成して返す(targetDrawable));
                    break;

                case  数型.Float3:
                    数.AsVector().Set(targetDrawable.モデル状態.位置);
                    break;

                case  数型.Float4:
                    数.AsVector().Set(new Vector4(targetDrawable.モデル状態.位置, 1f));
                    break;

                case  数型.Float:
                    数.AsScalar().Set(targetDrawable.モデル状態.率.Length());
                    break;

                case  数型.Bool:
                    数.AsScalar().Set(targetDrawable.表示中);
                    break;

                default:
                    break;
                }
            }
            else if (_target == TargetObject.BoneName)
            {
                IEnumerable <PMXボーン> targetBone = (from bone in ((PMXModel)targetDrawable).スキニング.ボーン配列 where bone.ボーン名 == _itemName select bone);

                foreach (var bone in targetBone)
                {
                    Matrix mat = bone.モデルポーズ行列 * RenderContext.Instance.行列管理.ワールド行列管理.モデルのワールド変換行列を作成して返す(targetDrawable);

                    switch (_variableType)
                    {
                    case  数型.Float4x4:
                        数.AsMatrix().SetMatrix(mat);
                        break;

                    case  数型.Float3:
                        数.AsVector().Set(Vector3.TransformCoordinate(bone.ローカル位置, mat));
                        break;

                    case  数型.Float4:
                        数.AsVector().Set(new Vector4(Vector3.TransformCoordinate(bone.ローカル位置, mat), 1f));
                        break;

                    default:
                        break;
                    }
                    break;
                }
            }
            else if (_target == TargetObject.FaceName)
            {
                モーフ管理 morphManager = ((PMXModel)targetDrawable).モーフ管理;

                数.AsScalar().Set(morphManager.モーフの進捗率を返す(_name));
            }
            else
            {
                switch (_target)
                {
                case TargetObject.X:
                    数.AsScalar().Set(targetDrawable.モデル状態.位置.X);
                    break;

                case TargetObject.Y:
                    数.AsScalar().Set(targetDrawable.モデル状態.位置.Y);
                    break;

                case TargetObject.Z:
                    数.AsScalar().Set(targetDrawable.モデル状態.位置.Z);
                    break;

                case TargetObject.XYZ:
                    数.AsVector().Set(targetDrawable.モデル状態.位置);
                    break;

                case TargetObject.Rx:
                case TargetObject.Ry:
                case TargetObject.Rz:
                case TargetObject.Rxyz:
                    float xRotation, yRotation, zRotation;     //X,Y,Z軸回転量に変換する。
                                                               //int type = 0; //分解パターン
                    if (!CGHelper.クォータニオンをXYZ回転に分解する(targetDrawable.モデル状態.回転, out xRotation, out yRotation, out zRotation))
                    {
                        if (!CGHelper.クォータニオンをYZX回転に分解する(targetDrawable.モデル状態.回転, out yRotation, out zRotation, out xRotation))
                        {
                            CGHelper.クォータニオンをZXY回転に分解する(targetDrawable.モデル状態.回転, out zRotation, out xRotation, out yRotation);
                            //		type = 2;
                        }
                        else
                        {
                            //		type = 1;
                        }
                    }
                    else
                    {
                        //	type = 0;
                    }

                    if (_target == TargetObject.Rx)
                    {
                        数.AsScalar().Set(xRotation);
                    }
                    else if (_target == TargetObject.Ry)
                    {
                        数.AsScalar().Set(yRotation);
                    }
                    else if (_target == TargetObject.Rz)
                    {
                        数.AsScalar().Set(zRotation);
                    }
                    else
                    {
                        数.AsVector().Set(new Vector3(xRotation, yRotation, zRotation));
                    }
                    break;

                case TargetObject.Si:
                    数.AsScalar().Set(targetDrawable.モデル状態.率.Length());
                    break;

                case TargetObject.Tr:
                    // TODO: Trへの対応
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
示例#23
0
 public override void  数を更新する(EffectVariable 数, 数更新時引数 引数)
 {
     // ターゲットオブジェクトに依存しない
     数.AsScalar().Set(引数.材質.エッジ幅);       // エッジ幅は材質モーフ適用後の値。
 }
示例#24
0
 public override void  数を更新する(EffectVariable 数, 数更新時引数 引数)
 {
     数.AsScalar().Set(引数.材質.テッセレーション係数);
 }
示例#25
0
 protected override void SetDefault(InputAttribute attr, EffectVariable var)
 {
     attr.DefaultValue = var.AsScalar().GetFloat();
     attr.IsBang       = var.IsBang();
     this.isbang       = attr.IsBang;
 }
示例#26
0
 public override void  数を更新する(EffectVariable 数, 数更新時引数 引数)
 {
     数.AsScalar().Set(引数.材質.スフィアモード == スフィアモード.加算);
 }
示例#27
0
 public override void Subscribe(EffectVariable subscribeTo, SubscribeArgument argument)
 {
     subscribeTo.AsScalar().Set(argument.Material.IsToonUsed);
 }
示例#28
0
        /// <summary>
        /// テクスチャのアノテーション解釈に一般的に必要な項目を取得するメソッド
        /// </summary>
        /// <param name="variable">エフェクト変数</param>
        /// <param name="context">レンダーコンテキスト</param>
        /// <param name="defaultFormat"></param>
        /// <param name="defaultViewPortRatio"></param>
        /// <param name="width">テクスチャの幅</param>
        /// <param name="height">テクスチャの高さ</param>
        /// <param name="depth">テクスチャの深さ(ない場合は-1)</param>
        /// <param name="mip">mipレベル</param>
        /// <param name="textureFormat">指定されているフォーマット</param>
        public static void GetBasicTextureAnnotations(EffectVariable variable, RenderContext context, Format defaultFormat, Vector2 defaultViewPortRatio, bool isTextureSubscriber, out int width, out int height, out int depth,
                                                      out int mip, out Format textureFormat)
        {
            width         = -1;
            height        = -1;
            depth         = -1;
            mip           = 0;
            textureFormat = defaultFormat;
            EffectVariable rawWidthVal  = EffectParseHelper.getAnnotation(variable, "width", "int");
            EffectVariable rawHeightVal = EffectParseHelper.getAnnotation(variable, "height", "int");
            EffectVariable rawDepthVal  = EffectParseHelper.getAnnotation(variable, "depth", "int");

            if (rawWidthVal != null)
            {
                width = rawWidthVal.AsScalar().GetInt();
            }
            if (rawHeightVal != null)
            {
                height = rawHeightVal.AsScalar().GetInt();
            }
            if (rawDepthVal != null)
            {
                depth = rawDepthVal.AsScalar().GetInt();
            }
            EffectVariable rawViewportRatio = EffectParseHelper.getAnnotation(variable, "viewportratio", "float2");

            if (rawViewportRatio != null)
            {
                if (width != -1 || height != -1 || depth != -1)
                {
                    throw new InvalidMMEEffectShaderException(
                              string.Format("変数「{0} {1}」のサイズ指定が不正です。Width,Height,Depth/ViewportRatio/Dimensionsはそれぞれ同時に使用できません。",
                                            variable.GetVariableType().Description.TypeName.ToLower(), variable.Description.Name));
                }
                else
                {
                    Vector4  rawRatio = rawViewportRatio.AsVector().GetVector();
                    Viewport vp       = context.DeviceManager.Context.Rasterizer.GetViewports()[0];
                    width  = (int)(vp.Width * rawRatio.X);
                    height = (int)(vp.Height * rawRatio.Y);
                }
            }
            EffectVariable rawDimensions = EffectParseHelper.getAnnotation(variable, "dimension", "uint2/uint3");

            if (rawDimensions != null)
            {
                if (width != -1 || height != -1 || depth != -1)
                {
                    throw new InvalidMMEEffectShaderException(
                              string.Format(
                                  "変数「{0} {1}」のサイズ指定が不正です。Width,Height,Depth/ViewportRatio/Dimensionsはそれぞれ同時に使用できません。",
                                  variable.GetVariableType().Description.TypeName.ToLower(), variable.Description.Name));
                }
                else
                {
                    string typeName = rawDimensions.GetVariableType().Description.TypeName.ToLower();
                    if (typeName == "int2")
                    {
                        int[] rawDimension = rawDimensions.AsVector().GetIntVectorArray(2);
                        width  = rawDimension[0];
                        height = rawDimension[1];
                    }
                    else
                    {
                        int[] rawDimension = rawDimensions.AsVector().GetIntVectorArray(3);
                        width  = rawDimension[0];
                        height = rawDimension[1];
                        depth  = rawDimension[2];
                    }
                }
            }
            if (width == -1 || height == -1)
            {
                if (defaultViewPortRatio != Vector2.Zero)
                {
                    Viewport port = context.DeviceManager.Context.Rasterizer.GetViewports()[0];
                    width  = (int)(port.Width * defaultViewPortRatio.X);
                    height = (int)(port.Height * defaultViewPortRatio.Y);
                }
                else
                {
                    if (!isTextureSubscriber)
                    {
                        throw new InvalidMMEEffectShaderException(string.Format("width,heightのどちらかの指定は必須です。"));
                    }
                }
            }
            EffectVariable rawMipLevel = EffectParseHelper.getAnnotation(variable, "MipLevels", "int");
            EffectVariable rawLevel    = EffectParseHelper.getAnnotation(variable, "levels", "int");

            if (rawMipLevel != null && rawLevel != null)
            {
                throw new InvalidMMEEffectShaderException(
                          string.Format("変数「{0} {1}」のミップマップレベルが重複して指定されています。「int Miplevels」、「int Levels」は片方しか指定できません。",
                                        variable.GetVariableType().Description.TypeName.ToLower(), variable.Description.Name));
            }
            else if (rawMipLevel != null || rawLevel != null)
            {
                EffectVariable mipVal = rawMipLevel ?? rawLevel;
                mip = mipVal.AsScalar().GetInt();
            }
            EffectVariable rawFormat = EffectParseHelper.getAnnotation(variable, "format", "string");

            if (rawFormat != null)
            {
                string formatString = rawFormat.AsString().GetString();
                textureFormat = TextureFormat(formatString);
            }
        }
 public override void  数を更新する(EffectVariable 数, 数更新時引数 引数)
 {
     数.AsScalar().Set(引数.材質.トゥーンを使用する);
 }
示例#30
0
 public override void Subscribe(EffectVariable subscribeTo, SubscribeArgument variable)
 {
     subscribeTo.AsScalar().Set(variable.Material.EdgeSize);
 }