public AbstractWorldRenderVariable(EffectVariable var)
 {
     this.Name = var.Description.Name;
     this.TypeName = var.GetVariableType().Description.TypeName;
     this.Semantic = var.Description.Semantic;
     this.Elements = var.GetVariableType().Description.Elements;
 }
        public static bool IsWorldRenderVariable(EffectVariable var)
        {
            string semantic = var.Description.Semantic;
            string type = var.GetVariableType().Description.TypeName;
            bool array = var.GetVariableType().Description.Elements > 0;

            return worldregistry.ContainsType(type, semantic, array);
        }
Beispiel #3
0
        public TerrainEffect(Device device, string filename)
            : base(device, filename)
        {
            Light1Tech = FX.GetTechniqueByName("Light1");
            Light2Tech = FX.GetTechniqueByName("Light2");
            Light3Tech = FX.GetTechniqueByName("Light3");
            Light1FogTech = FX.GetTechniqueByName("Light1Fog");
            Light2FogTech = FX.GetTechniqueByName("Light2Fog");
            Light3FogTech = FX.GetTechniqueByName("Light3Fog");

            Light1ShadowTech = FX.GetTechniqueByName("Light1Shadow");
            Light2ShadowTech = FX.GetTechniqueByName("Light2Shadow");
            Light3ShadowTech = FX.GetTechniqueByName("Light3Shadow");
            Light1FogShadowTech = FX.GetTechniqueByName("Light1FogShadow");
            Light2FogShadowTech = FX.GetTechniqueByName("Light2FogShadow");
            Light3FogShadowTech = FX.GetTechniqueByName("Light3FogShadow");

            Light1TechNT = FX.GetTechniqueByName("Light1NT");
            Light2TechNT = FX.GetTechniqueByName("Light2NT");
            Light3TechNT = FX.GetTechniqueByName("Light3NT");
            Light1FogTechNT = FX.GetTechniqueByName("Light1FogNT");
            Light2FogTechNT = FX.GetTechniqueByName("Light2FogNT");
            Light3FogTechNT = FX.GetTechniqueByName("Light3FogNT");

            NormalDepthTech = FX.GetTechniqueByName("NormalDepth");
            TessBuildShadowMapTech = FX.GetTechniqueByName("TessBuildShadowMapTech");

            _viewProj = FX.GetVariableByName("gViewProj").AsMatrix();
            _eyePosW = FX.GetVariableByName("gEyePosW").AsVector();

            _fogColor = FX.GetVariableByName("gFogColor").AsVector();
            _fogStart = FX.GetVariableByName("gFogStart").AsScalar();
            _fogRange = FX.GetVariableByName("gFogRange").AsScalar();

            _dirLights = FX.GetVariableByName("gDirLights");
            _mat = FX.GetVariableByName("gMaterial");

            _minDist = FX.GetVariableByName("gMinDist").AsScalar();
            _maxDist = FX.GetVariableByName("gMaxDist").AsScalar();
            _minTess = FX.GetVariableByName("gMinTess").AsScalar();
            _maxTess = FX.GetVariableByName("gMaxTess").AsScalar();
            _texelCellSpaceU = FX.GetVariableByName("gTexelCellSpaceU").AsScalar();
            _texelCellSpaceV = FX.GetVariableByName("gTexelCellSpaceV").AsScalar();
            _worldCellSpace = FX.GetVariableByName("gWorldCellSpace").AsScalar();
            _worldFrustumPlanes = FX.GetVariableByName("gWorldFrustumPlanes").AsVector();

            _layerMapArray = FX.GetVariableByName("gLayerMapArray").AsResource();
            _blendMap = FX.GetVariableByName("gBlendMap").AsResource();
            _heightMap = FX.GetVariableByName("gHeightMap").AsResource();

            _view = FX.GetVariableByName("gView").AsMatrix();
            _ambientMap = FX.GetVariableByName("gSsaoMap").AsResource();
            _viewProjTex = FX.GetVariableByName("gViewProjTex").AsMatrix();
            _shadowTransform = FX.GetVariableByName("gShadowTransform").AsMatrix();
            _shadowMap = FX.GetVariableByName("gShadowMap").AsResource();
            _walkMap = FX.GetVariableByName("gWalkMap").AsResource();
            _unwalkableSRV = FX.GetVariableByName("gUnwalkable").AsResource();
        }
        public static bool IsShaderPin(EffectVariable var)
        {
            string semantic = var.Description.Semantic;
            string type = var.GetVariableType().Description.TypeName;
            bool array = var.GetVariableType().Description.Elements > 0;

            return ((stdregistry.ContainsType(type)
                || arrayregistry.ContainsType(type)) && semantic == "");
                //|| semanticregistry.ContainsType(type, semantic, array)) && (semantic != "IMMUTABLE");
        }
        public InstancedNormalMapEffect(Device device, string filename) : base(device, filename) {
            Light1Tech = FX.GetTechniqueByName("Light1");
            Light3TexTech = FX.GetTechniqueByName("Light3Tex");

            _viewProj = FX.GetVariableByName("gViewProj").AsMatrix();
            _texTransform = FX.GetVariableByName("gTexTransform").AsMatrix();
            _eyePosW = FX.GetVariableByName("gEyePosW").AsVector();

            _dirLights = FX.GetVariableByName("gDirLights");
            _mat = FX.GetVariableByName("gMaterial");
            _diffuseMap = FX.GetVariableByName("gDiffuseMap").AsResource();
            _normalMap = FX.GetVariableByName("gNormalMap").AsResource();
        }
 public IShaderPin CreatePin(string type, EffectVariable var, IPluginHost host, IIOFactory iofactory)
 {
     if (this.delegates.ContainsKey(type))
     {
         IShaderPin sp = this.delegates[type](var);
         sp.Initialize(iofactory, var);
         return sp;
     }
     else
     {
         return null;
     }
 }
Beispiel #7
0
        public TreeSpriteEffect(Device device, string filename) : base(device, filename) {
            Light3Tech = FX.GetTechniqueByName("Light3");
            Light3TexAlphaClipTech = FX.GetTechniqueByName("Light3TexAlphaClip");
            Light3TexAlphaClipFogTech = FX.GetTechniqueByName("Light3TexAlphaClipFog");

            _viewProj = FX.GetVariableByName("gViewProj").AsMatrix();
            _eyePosW = FX.GetVariableByName("gEyePosW").AsVector();
            _fogColor = FX.GetVariableByName("gFogColor").AsVector();
            _fogStart = FX.GetVariableByName("gFogStart").AsScalar();
            _fogRange = FX.GetVariableByName("gFogRange").AsScalar();
            _dirLights = FX.GetVariableByName("gDirLights");
            _mat = FX.GetVariableByName("gMaterial");
            _treeTextureMapArray = FX.GetVariableByName("gTreeMapArray").AsResource();
        }
        public DX11CustomRenderVariable(EffectVariable var)
        {
            this.Name = var.Description.Name;
            this.TypeName = var.GetVariableType().Description.TypeName;
            this.Semantic = var.Description.Semantic;
            var ha = var.GetAnnotationByName("help");

            if (ha != null)
            {
                this.Help = ha.AsString().GetString();
            }
            else
            {
                this.Help = "";
            }
        }
        public static IShaderPin GetShaderPin(EffectVariable var, IPluginHost host, IIOFactory iofactory)
        {
            string semantic = var.Description.Semantic;
            string type = var.GetVariableType().Description.TypeName;
            bool array = var.GetVariableType().Description.Elements > 0;
            //Exclude if immutable
            if (semantic != "") { return null; }

            if (array)
            {
                return arrayregistry.CreatePin(type, var, host, iofactory);
            }
            else
            {
                return stdregistry.CreatePin(type, var, host, iofactory);
            }
        }
 public IntElemSizeRenderVariable(EffectVariable var)
     : base(var)
 {
 }
        public override SubscriberBase GetSubscriberInstance(EffectVariable variable, RenderContext context, MMEEffectManager effectManager, int semanticIndex)
        {
            VariableType type     = 0;
            TargetObject target   = TargetObject.UnUsed;
            string       itemName = null;
            string       typeName = variable.GetVariableType().Description.TypeName.ToLower();

            switch (typeName)
            {
            case "bool":
                type = VariableType.Bool;
                break;

            case "float":
                type = VariableType.Float;
                break;

            case "float3":
                type = VariableType.Float3;
                break;

            case "float4":
                type = VariableType.Float4;
                break;

            case "float4x4":
                type = VariableType.Float4x4;
                break;

            default:
                break;
            }
            EffectVariable nameVariable = EffectParseHelper.getAnnotation(variable, "name", "string");

            if (nameVariable == null)
            {
                throw new InvalidMMEEffectShaderException(
                          string.Format("定義済みセマンティクス「CONTROLOBJECT」の適用されている変数「{0} {1}:CONTROLOBJECT」に対してはアノテーション「string name」は必須ですが、指定されませんでした。", typeName, variable.Description.Name));
            }
            string name = nameVariable.AsString().GetString();

            //If the self would own target
            if (name.ToLower().Equals("(self)"))
            {
                this.isSelf = true;
            }
            else
            {
            }
            //TODO (OffscreenOwner)がnameに指定されたときの対応
            EffectVariable itemVariable = EffectParseHelper.getAnnotation(variable, "item", "string");

            if (itemVariable != null)
            {
                itemName = itemVariable.AsString().GetString();
                switch (itemName.ToLower())
                {
                case "x":
                    target = TargetObject.X;
                    break;

                case "y":
                    target = TargetObject.Y;
                    break;

                case "z":
                    target = TargetObject.Z;
                    break;

                case "xyz":
                    target = TargetObject.XYZ;
                    break;

                case "rx":
                    target = TargetObject.Rx;
                    break;

                case "ry":
                    target = TargetObject.Ry;
                    break;

                case "rz":
                    target = TargetObject.Rz;
                    break;

                case "rxyz":
                    target = TargetObject.Rxyz;
                    break;

                case "si":
                    target = TargetObject.Si;
                    break;

                case "tr":
                    target = TargetObject.Tr;
                    break;

                default:
                    target = type == VariableType.Float ? TargetObject.FaceName : TargetObject.BoneName;
                    break;
                }
                if (NeedFloat.Contains(target) && type != VariableType.Float)
                {
                    throw new InvalidMMEEffectShaderException(
                              string.Format("定義済みセマンティクス「CONTROLOBJECT」の適用されている変数「{0} {1}:CONTROLOBJECT」にはアノテーション「string item=\"{2}\"」が適用されていますが、「{2}」の場合は「float {1}:CONTROLOBJECT」である必要があります。", typeName, variable.Description.Name, itemName));
                }
                if (NeedFloat3.Contains(target) && type != VariableType.Float3)
                {
                    throw new InvalidMMEEffectShaderException(
                              string.Format("定義済みセマンティクス「CONTROLOBJECT」の適用されている変数「{0} {1}:CONTROLOBJECT」にはアノテーション「string item=\"{2}\"」が適用されていますが、「{2}」の場合は「float3 {1}:CONTROLOBJECT」である必要があります。", typeName, variable.Description.Name, itemName));
                }
            }
            return(new ControlObjectSubscriber(type, itemName, name, target, this.isSelf));
        }
 protected override void ProcessAttribute(InputAttribute attr, EffectVariable var)
 {
     attr.IsSingle       = true;
     attr.CheckIfChanged = true;
 }
Beispiel #13
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);
            }
        }
Beispiel #14
0
 public IterIndexRenderVariable(EffectVariable var)
     : base(var)
 {
 }
Beispiel #15
0
        public static void CompareVariable(EffectVariable reflectionVariable, Fx10.IEffectVariable variable)
        {
            EffectTypeDescription typeDesc = reflectionVariable.TypeInfo.Description;
            var type = variable.Type;

            Assert.AreEqual(typeDesc.TypeName, type.TypeName);
            Assert.AreEqual(typeDesc.Class, (ShaderVariableClass)type.VariableClass);
            Assert.AreEqual(typeDesc.Type, (ShaderVariableType)type.VariableType);
            Assert.AreEqual(typeDesc.Elements, type.ElementCount);
            Assert.AreEqual(typeDesc.Members, type.MemberCount);
            Assert.AreEqual(typeDesc.Rows, type.Rows);
            Assert.AreEqual(typeDesc.Columns, type.Columns);
            Assert.AreEqual(typeDesc.PackedSize, type.PackedSize);
            Assert.AreEqual(typeDesc.UnpackedSize, type.UnpackedSize);
            Assert.AreEqual(typeDesc.Stride, type.Stride);
            EffectVariableDescription variableDesc = reflectionVariable.Description;

            Assert.AreEqual(variableDesc.Name, variable.Name);
            Assert.AreEqual(variableDesc.Semantic ?? "", variable.Semantic);
            Assert.AreEqual(variableDesc.Flags, (EffectVariableFlags)variable.Flags);
            Assert.AreEqual(variableDesc.AnnotationCount, variable.AnnotationCount);
            //TODO: SharpDX seems defines BufferOffset relative to buffer, but variable is just relative to struct
            //Assert.AreEqual(variableDesc.BufferOffset, variable.BufferOffset == uint.MaxValue ? 0 : variable.BufferOffset);
            Assert.AreEqual(variableDesc.ExplicitBindPoint, variable.ExplicitBindPoint);
            var annotations = GetAnnotations(reflectionVariable);

            if (typeDesc.Class == ShaderVariableClass.Struct)
            {
                //TODO: SharpDx has GetMemberValues on the EffectType.
                for (int i = 0; i < typeDesc.Members; i++)
                {
                    var reflectionMember = reflectionVariable.GetMemberByIndex(i);
                    var member           = variable.Type.Members[i];
                    CompareVariable(reflectionMember, member);
                }
            }
            for (int i = 0; i < annotations.Count; i++)
            {
                var reflectionAnnotation = annotations[i];
                var annotation           = variable.Annotations[i];
                CompareVariable(reflectionAnnotation, annotation);
            }
            if (typeDesc.Type == ShaderVariableType.Blend)
            {
                var specDesc = reflectionVariable
                               .AsBlend()
                               .GetBlendState()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.ConstantBuffer)
            {
                var specDesc = reflectionVariable
                               .AsConstantBuffer()
                               .GetConstantBuffer()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.DepthStencil)
            {
                var specDesc = reflectionVariable
                               .AsDepthStencil()
                               .GetDepthStencilState()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.DepthStencilView)
            {
                var specDesc = reflectionVariable
                               .AsDepthStencilView()
                               .GetDepthStencil()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.Rasterizer)
            {
                var specDesc = reflectionVariable
                               .AsRasterizer()
                               .GetRasterizerState()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.Rasterizer)
            {
                var specDesc = reflectionVariable
                               .AsRasterizer()
                               .GetRasterizerState()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.RenderTargetView)
            {
                var specDesc = reflectionVariable
                               .AsRenderTargetView()
                               .GetRenderTarget()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.Sampler)
            {
                var specDesc = reflectionVariable
                               .AsSampler()
                               .GetSampler()
                               .Description;
                var stateAnnotations = (variable as Fx10.EffectObjectVariable).Assignments;
            }
            if (typeDesc.Type == ShaderVariableType.PixelShader ||
                typeDesc.Type == ShaderVariableType.VertexShader ||
                typeDesc.Type == ShaderVariableType.GeometryShader)
            {
                var shader = reflectionVariable
                             .AsShader();
            }
            if (false)
            {
                var shader = reflectionVariable
                             .AsShaderResource();
            }
        }
Beispiel #16
0
 public override void Subscribe(EffectVariable subscribeTo, SubscribeArgument variable)
 {
     SetAsFloat(variable.Material.SpecularPower, subscribeTo); //SPECULARPOWER p:System.Windows.controls.canvas.left Light annotation
 }
Beispiel #17
0
 public MatrixWorldTransposeRenderVariable(EffectVariable var)
     : base(var)
 {
 }
Beispiel #18
0
 public override void Subscribe(EffectVariable subscribeTo, SubscribeArgument variable)
 {
     subscribeTo.AsResource().SetResource(this.resourceView);
 }
Beispiel #19
0
        public override SubscriberBase GetSubscriberInstance(EffectVariable variable, RenderContext context, MMEEffectManager effectManager, int semanticIndex)
        {
            TextureSubscriber subscriber = new TextureSubscriber();
            int    width, height, depth, mip;
            string typeName = variable.GetVariableType().Description.TypeName.ToLower();
            string type;
            Format format;

            TextureAnnotationParser.GetBasicTextureAnnotations(variable, context, Format.B8G8R8A8_UNorm, Vector2.Zero, true,
                                                               out width, out height, out depth, out mip, out format);
            EffectVariable rawTypeVariable   = EffectParseHelper.getAnnotation(variable, "ResourceType", "string");
            EffectVariable rawStringVariable = EffectParseHelper.getAnnotation(variable, "ResourceName", "string");

            if (rawTypeVariable != null)
            {
                switch (rawTypeVariable.AsString().GetString().ToLower())
                {
                case "cube":
                    if (!typeName.Equals("texturecube"))
                    {
                        throw new InvalidMMEEffectShaderException("ResourceTypeにはCubeが指定されていますが、型がtextureCUBEではありません。");
                    }
                    else
                    {
                        type = "texturecube";
                    }
                    break;

                case "2d":
                    if (!typeName.Equals("texture2d") && !typeName.Equals("texture"))
                    {
                        throw new InvalidMMEEffectShaderException("ResourceTypeには2Dが指定されていますが、型がtexture2Dもしくはtextureではありません。");
                    }
                    else
                    {
                        type = "texture2d";
                    }
                    break;

                case "3d":
                    if (!typeName.Equals("texture3d"))
                    {
                        throw new InvalidMMEEffectShaderException("ResourceTypeには3Dが指定されていますが、型がtexture3dではありません。");
                    }
                    else
                    {
                        type = "texture3d";
                    }
                    break;

                default:
                    throw new InvalidMMEEffectShaderException("認識できないResourceTypeが指定されました。");
                }
            }
            else
            {
                type = typeName;
            }
            if (rawStringVariable != null)
            {
                string resourceName          = rawStringVariable.AsString().GetString();
                ImageLoadInformation imgInfo = new ImageLoadInformation();
                Stream stream;
                switch (type)
                {
                case "texture2d":

                    imgInfo.Width          = width;
                    imgInfo.Height         = height;
                    imgInfo.MipLevels      = mip;
                    imgInfo.Format         = format;
                    imgInfo.Usage          = ResourceUsage.Default;
                    imgInfo.BindFlags      = BindFlags.ShaderResource;
                    imgInfo.CpuAccessFlags = CpuAccessFlags.None;
                    stream = effectManager.SubresourceLoader.getSubresourceByName(resourceName);
                    if (stream != null)
                    {
                        subscriber.resourceTexture = Texture2D.FromStream(context.DeviceManager.Device, stream, (int)stream.Length);
                    }
                    break;

                case "texture3d":
                    imgInfo.Width          = width;
                    imgInfo.Height         = height;
                    imgInfo.Depth          = depth;
                    imgInfo.MipLevels      = mip;
                    imgInfo.Format         = format;
                    imgInfo.Usage          = ResourceUsage.Default;
                    imgInfo.BindFlags      = BindFlags.ShaderResource;
                    imgInfo.CpuAccessFlags = CpuAccessFlags.None;
                    stream = effectManager.SubresourceLoader.getSubresourceByName(resourceName);
                    if (stream != null)
                    {
                        subscriber.resourceTexture = Texture3D.FromStream(context.DeviceManager.Device, stream, (int)stream.Length);
                    }
                    break;

                case "texturecube":
                    //TODO CUBEの場合に対応する
                    //imgInfo.Width = width;
                    //imgInfo.Height = height;
                    //imgInfo.Depth = depth;
                    //imgInfo.MipLevels = mip;
                    //imgInfo.Format = format;
                    //imgInfo.Usage=ResourceUsage.Default;
                    //imgInfo.BindFlags=BindFlags.ShaderResource;
                    //imgInfo.CpuAccessFlags=CpuAccessFlags.None;
                    //stream = effectManager.SubresourceLoader.getSubresourceByName(resourceName);
                    //Subscriber.resourceTexture=.FromStream(context.DeviceManager.Device, stream, (int)stream.Length);
                    break;
                }
            }
            subscriber.resourceView = new ShaderResourceView(context.DeviceManager.Device, subscriber.resourceTexture);
            return(subscriber);
        }
Beispiel #20
0
 protected override void SetDefault(InputAttribute attr, EffectVariable var)
 {
     attr.DefaultValue = var.AsScalar().GetFloat();
 }
 public override void Subscribe(EffectVariable subscribeTo, SubscribeArgument argument)
 {
     subscribeTo.AsScalar().Set(argument.Material.MaterialSphereMap != null);
 }
 public DX11CustomRenderVariable(EffectVariable var)
 {
     this.Name     = var.Description.Name;
     this.TypeName = var.GetVariableType().Description.TypeName;
     this.Semantic = var.Description.Semantic;
 }
 public CameraPositionRenderVariable(EffectVariable var)
     : base(var)
 {
 }
 protected override void ProcessAttribute(InputAttribute attr, EffectVariable var)
 {
     //Do nothing
 }
 public MatrixInvViewProjRenderVariable(EffectVariable var)
     : base(var)
 {
 }
 public override void Subscribe(EffectVariable subscribeTo, SubscribeArgument variable)
 {
     subscribeTo.AsVector().Set(variable.Material.TextureMulValue);
 }
Beispiel #27
0
 public IntDrawIndexRenderVariable(EffectVariable var)
     : base(var)
 {
 }
Beispiel #28
0
 public override void  数を更新する(EffectVariable 数, 数更新時引数 引数)
 {
     // ターゲットオブジェクトに依存しない
     数.AsVector().Set(引数.材質.スフィア乗算値);
 }
        /// <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 解析する(EffectVariable variable, Format defaultFormat, Vector2 defaultViewPortRatio, bool isTextureSubscriber, out int width, out int height, out int depth, out int mip, out Format textureFormat, out Format viewFormat, out Format resourceFormat)
        {
            width          = -1;
            height         = -1;
            depth          = -1;
            mip            = 0;
            textureFormat  = defaultFormat;
            viewFormat     = defaultFormat;
            resourceFormat = defaultFormat;

            #region " int width = ... "
            //----------------
            EffectVariable rawWidthVal = EffectParseHelper.アノテーションを取得する(variable, "width", "int");
            if (rawWidthVal != null)
            {
                width = rawWidthVal.AsScalar().GetInt();
            }
            //----------------
            #endregion

            #region " int height = ... "
            //----------------
            EffectVariable rawHeightVal = EffectParseHelper.アノテーションを取得する(variable, "height", "int");
            if (rawHeightVal != null)
            {
                height = rawHeightVal.AsScalar().GetInt();
            }
            //----------------
            #endregion

            #region " int depth = ... "
            //----------------
            EffectVariable rawDepthVal = EffectParseHelper.アノテーションを取得する(variable, "depth", "int");
            if (rawDepthVal != null)
            {
                depth = rawDepthVal.AsScalar().GetInt();
            }
            //----------------
            #endregion

            #region " float2 ViewportRatio = ... "
            //----------------
            EffectVariable rawViewportRatio = EffectParseHelper.アノテーションを取得する(variable, "viewportratio", "float2");
            if (rawViewportRatio != null)

            {
                if (width != -1 || height != -1 || depth != -1)
                {
                    throw new InvalidMMEEffectShader例外(
                              string.Format("変数「{0} {1}」のサイズ指定が不正です。Width,Height,Depth/ViewportRatio/Dimensionsはそれぞれ同時に使用できません。", variable.TypeInfo.Description.TypeName.ToLower(), variable.Description.Name));
                }
                else
                {
                    Vector4 rawRatio = rawViewportRatio.AsVector().GetFloatVector();
                    var     vp       = RenderContext.Instance.DeviceManager.D3DDeviceContext.Rasterizer.GetViewports <ViewportF>()[0];
                    width  = (int)(vp.Width * rawRatio.X);
                    height = (int)(vp.Height * rawRatio.Y);
                }
            }
            //----------------
            #endregion

            #region " uing2/uint3 Dimensions = ... "
            //----------------
            EffectVariable rawDimensions = EffectParseHelper.アノテーションを取得する(variable, "dimensions", "uint2/uint3");

            if (rawDimensions != null)
            {
                if (width != -1 || height != -1 || depth != -1)
                {
                    throw new InvalidMMEEffectShader例外(
                              string.Format(
                                  "変数「{0} {1}」のサイズ指定が不正です。Width,Height,Depth/ViewportRatio/Dimensionsはそれぞれ同時に使用できません。",
                                  variable.TypeInfo.Description.TypeName.ToLower(), variable.Description.Name));
                }
                else
                {
                    string typeName = rawDimensions.TypeInfo.Description.TypeName.ToLower();
                    if (typeName == "int2")
                    {
                        var rawDimension = rawDimensions.AsVector().GetIntVector();
                        width  = rawDimension.X;
                        height = rawDimension.Y;
                    }
                    else
                    {
                        var rawDimension = rawDimensions.AsVector().GetIntVector();
                        width  = rawDimension.X;
                        height = rawDimension.Y;
                        depth  = rawDimension.Z;
                    }
                }
            }
            //----------------
            #endregion

            #region "width, height チェック "
            //----------------
            if (width == -1 || height == -1)
            {
                if (defaultViewPortRatio != Vector2.Zero)
                {
                    var port = RenderContext.Instance.DeviceManager.D3DDeviceContext.Rasterizer.GetViewports <ViewportF>()[0];
                    width  = (int)(port.Width * defaultViewPortRatio.X);
                    height = (int)(port.Height * defaultViewPortRatio.Y);
                }
                else
                {
                    if (!isTextureSubscriber)
                    {
                        throw new InvalidMMEEffectShader例外(string.Format("width,heightのどちらかの指定は必須です。"));
                    }
                }
            }
            //----------------
            #endregion

            #region " int MipLevels = ... / int RawLevel = ... "
            //----------------
            EffectVariable rawMipLevel = EffectParseHelper.アノテーションを取得する(variable, "MipLevels", "int");
            EffectVariable rawLevel    = EffectParseHelper.アノテーションを取得する(variable, "levels", "int");

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

            #region " string Format = ... "
            //----------------
            EffectVariable rawFormat = EffectParseHelper.アノテーションを取得する(variable, "format", "string");

            if (rawFormat != null)
            {
                string formatString = rawFormat.AsString().GetString();
                テクスチャフォーマットを返す(formatString, out textureFormat, out viewFormat, out resourceFormat);
            }
            //----------------
            #endregion
        }
 public override void  数を更新する(EffectVariable 数, 数更新時引数 引数)
 {
     数.AsScalar().Set(引数.モデル.頂点数);
 }
 public EffectOnlyIntVariable(EffectVariable v)
 {
     _v = v.AsScalar();
 }
 public IntViewPortIndexRenderVariable(EffectVariable var)
     : base(var)
 {
 }
 protected override bool RecreatePin(EffectVariable var)
 {
     return(false);
 }
 public ReadBufferRenderVariable(EffectVariable var)
     : base(var)
 {
 }
Beispiel #35
0
 protected override void ProcessAttribute(InputAttribute attr, EffectVariable var)
 {
     array        = new T[var.GetVariableType().Description.Elements];
     attr.BinSize = array.Length;
 }
 public Float3TargetSizeRenderVariable(EffectVariable var)
     : base(var)
 {
 }
 public IntViewPortCountRenderVariable(EffectVariable var)
     : base(var)
 {
 }
        public override void Subscribe(EffectVariable subscribeTo, SubscribeArgument variable)
        {
            var currentModel = variable.Context.CurrentTargetContext.WorldSpace.getDrawableByFileName(this.name);

            if (currentModel == null)
            {
                return;
            }
            IDrawable targetDrawable = this.isSelf ? variable.Model : currentModel;

            if (this.target == TargetObject.UnUsed)
            {
                switch (this.variableType)
                {
                case VariableType.Float4x4:
                    subscribeTo.AsMatrix().SetMatrix(variable.Context.MatrixManager.WorldMatrixManager.getWorldMatrix(targetDrawable));
                    break;

                case VariableType.Float3:
                    subscribeTo.AsVector().Set(targetDrawable.Transformer.Position);
                    break;

                case VariableType.Float4:
                    subscribeTo.AsVector().Set(new Vector4(targetDrawable.Transformer.Position, 1f));
                    break;

                case VariableType.Float:
                    subscribeTo.AsScalar().Set(targetDrawable.Transformer.Scale.Length());
                    break;

                case VariableType.Bool:
                    subscribeTo.AsScalar().Set(targetDrawable.Visibility);
                    break;

                default:
                    break;
                }
            }
            else
            if (this.target == TargetObject.BoneName)
            {
                IEnumerable <PMXBone> targetBone = (from bone in ((PMXModel)targetDrawable).Skinning.Bone where bone.BoneName == this.itemName select bone);
                foreach (var bone in targetBone)
                {
                    Matrix mat = bone.GlobalPose * variable.Context.MatrixManager.WorldMatrixManager.getWorldMatrix(targetDrawable);
                    switch (this.variableType)
                    {
                    case VariableType.Float4x4:
                        subscribeTo.AsMatrix().SetMatrix(mat);
                        break;

                    case VariableType.Float3:
                        subscribeTo.AsVector().Set(Vector3.TransformCoordinate(bone.Position, mat));
                        break;

                    case VariableType.Float4:
                        subscribeTo.AsVector().Set(new Vector4(Vector3.TransformCoordinate(bone.Position, mat), 1f));
                        break;

                    default:
                        break;
                    }
                    break;
                }
            }
            else
            if (this.target == TargetObject.FaceName)
            {
                IMorphManager morphManager = ((PMXModel)targetDrawable).Morphmanager;
                subscribeTo.AsScalar().Set(morphManager.getMorphProgress(this.name));
            }
            else
            {
                switch (this.target)
                {
                case TargetObject.X:
                    subscribeTo.AsScalar().Set(targetDrawable.Transformer.Position.X);
                    break;

                case TargetObject.Y:
                    subscribeTo.AsScalar().Set(targetDrawable.Transformer.Position.Y);
                    break;

                case TargetObject.Z:
                    subscribeTo.AsScalar().Set(targetDrawable.Transformer.Position.Z);
                    break;

                case TargetObject.XYZ:
                    subscribeTo.AsVector().Set(targetDrawable.Transformer.Position);
                    break;

                case TargetObject.Rx:
                case TargetObject.Ry:
                case TargetObject.Rz:
                case TargetObject.Rxyz:
                    float xRotation, yRotation, zRotation; //X,Y,Z軸回転量に変換する。
                    int   type = 0;                        //Decomposition patterns
                    if (
                        !CGHelper.FactoringQuaternionXYZ(targetDrawable.Transformer.Rotation, out xRotation,
                                                         out yRotation, out zRotation))
                    {
                        if (
                            !CGHelper.FactoringQuaternionYZX(targetDrawable.Transformer.Rotation, out yRotation,
                                                             out zRotation, out xRotation))
                        {
                            CGHelper.FactoringQuaternionZXY(targetDrawable.Transformer.Rotation, out zRotation,
                                                            out xRotation, out yRotation);
                            type = 2;
                        }
                        else
                        {
                            type = 1;
                        }
                    }
                    else
                    {
                        type = 0;
                    }
                    if (this.target == TargetObject.Rx)
                    {
                        subscribeTo.AsScalar().Set(xRotation);
                    }
                    else if (this.target == TargetObject.Ry)
                    {
                        subscribeTo.AsScalar().Set(yRotation);
                    }
                    else if (this.target == TargetObject.Rz)
                    {
                        subscribeTo.AsScalar().Set(zRotation);
                    }
                    else
                    {
                        subscribeTo.AsVector().Set(new Vector3(xRotation, yRotation, zRotation));
                    }
                    break;

                case TargetObject.Si:
                    subscribeTo.AsScalar().Set(targetDrawable.Transformer.Scale.Length());
                    break;

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

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
 public InvFloatDrawCountRenderVariable(EffectVariable var)
     : base(var)
 {
 }
Beispiel #40
0
 public override void Subscribe(EffectVariable subscribeTo, SubscribeArgument argument)
 {
     subscribeTo.AsScalar().Set(argument.Context.CurrentTargetContext.IsSelfShadowMode1);
 }
 public RWBackBufferRenderVariable(EffectVariable var)
     : base(var)
 {
 }
Beispiel #42
0
 public static void SetObject(this EffectVariable variable, object o)
 {
     SetObject(variable, o, Marshal.SizeOf(o));
 }
Beispiel #43
0
 public void SetEffectVariable(EffectVariable l)
 {
     l.GetMemberByName("pos").AsVector().Set(_pos);
     l.GetMemberByName("dir").AsVector().Set(_dir);
     l.GetMemberByName("ambient").AsVector().Set(_ambient);
     l.GetMemberByName("diffuse").AsVector().Set(_diffuse);
     l.GetMemberByName("spec").AsVector().Set(_specular);
     l.GetMemberByName("att").AsVector().Set(_att);
     l.GetMemberByName("spotPower").AsScalar().Set(_spotPow);
     l.GetMemberByName("range").AsScalar().Set(_range);
     l.GetMemberByName("type").AsScalar().Set(_type);
 }
Beispiel #44
0
 public override void  数を更新する(EffectVariable 数, 数更新時引数 引数)
 {
     // ターゲットオブジェクトに依存しない
     数.AsShaderResource().SetResource(引数.材質.スフィアマップ);
 }
 public MatrixInvProjTransposeRenderVariable(EffectVariable var)
     : base(var)
 {
 }
 public EffectOnlyFloatArrayVariable(EffectVariable v)
 {
     _v = v.AsScalar();
 }
Beispiel #47
0
        public BasicEffect(Device device, string filename)
            : base(device, filename) {
            Light1Tech = FX.GetTechniqueByName("Light1");
            Light2Tech = FX.GetTechniqueByName("Light2");
            Light3Tech = FX.GetTechniqueByName("Light3");

            Light0TexTech = FX.GetTechniqueByName("Light0Tex");
            Light1TexTech = FX.GetTechniqueByName("Light1Tex");
            Light2TexTech = FX.GetTechniqueByName("Light2Tex");
            Light3TexTech = FX.GetTechniqueByName("Light3Tex");

            Light0TexAlphaClipTech = FX.GetTechniqueByName("Light0TexAlphaClip");
            Light1TexAlphaClipTech = FX.GetTechniqueByName("Light1TexAlphaClip");
            Light2TexAlphaClipTech = FX.GetTechniqueByName("Light2TexAlphaClip");
            Light3TexAlphaClipTech = FX.GetTechniqueByName("Light3TexAlphaClip");

            Light1FogTech = FX.GetTechniqueByName("Light1Fog");
            Light2FogTech = FX.GetTechniqueByName("Light2Fog");
            Light3FogTech = FX.GetTechniqueByName("Light3Fog");

            Light0TexFogTech = FX.GetTechniqueByName("Light0TexFog");
            Light1TexFogTech = FX.GetTechniqueByName("Light1TexFog");
            Light2TexFogTech = FX.GetTechniqueByName("Light2TexFog");
            Light3TexFogTech = FX.GetTechniqueByName("Light3TexFog");

            Light0TexAlphaClipFogTech = FX.GetTechniqueByName("Light0TexAlphaClipFog");
            Light1TexAlphaClipFogTech = FX.GetTechniqueByName("Light1TexAlphaClipFog");
            Light2TexAlphaClipFogTech = FX.GetTechniqueByName("Light2TexAlphaClipFog");
            Light3TexAlphaClipFogTech = FX.GetTechniqueByName("Light3TexAlphaClipFog");

            Light1ReflectTech = FX.GetTechniqueByName("Light1Reflect");
            Light2ReflectTech = FX.GetTechniqueByName("Light2Reflect");
            Light3ReflectTech = FX.GetTechniqueByName("Light3Reflect");

            Light0TexReflectTech = FX.GetTechniqueByName("Light0TexReflect");
            Light1TexReflectTech = FX.GetTechniqueByName("Light1TexReflect");
            Light2TexReflectTech = FX.GetTechniqueByName("Light2TexReflect");
            Light3TexReflectTech = FX.GetTechniqueByName("Light3TexReflect");

            Light0TexAlphaClipReflectTech = FX.GetTechniqueByName("Light0TexAlphaClipReflect");
            Light1TexAlphaClipReflectTech = FX.GetTechniqueByName("Light1TexAlphaClipReflect");
            Light2TexAlphaClipReflectTech = FX.GetTechniqueByName("Light2TexAlphaClipReflect");
            Light3TexAlphaClipReflectTech = FX.GetTechniqueByName("Light3TexAlphaClipReflect");

            Light1FogReflectTech = FX.GetTechniqueByName("Light1FogReflect");
            Light2FogReflectTech = FX.GetTechniqueByName("Light2FogReflect");
            Light3FogReflectTech = FX.GetTechniqueByName("Light3FogReflect");

            Light0TexFogReflectTech = FX.GetTechniqueByName("Light0TexFogReflect");
            Light1TexFogReflectTech = FX.GetTechniqueByName("Light1TexFogReflect");
            Light2TexFogReflectTech = FX.GetTechniqueByName("Light2TexFogReflect");
            Light3TexFogReflectTech = FX.GetTechniqueByName("Light3TexFogReflect");

            Light0TexAlphaClipFogReflectTech = FX.GetTechniqueByName("Light0TexAlphaClipFogReflect");
            Light1TexAlphaClipFogReflectTech = FX.GetTechniqueByName("Light1TexAlphaClipFogReflect");
            Light2TexAlphaClipFogReflectTech = FX.GetTechniqueByName("Light2TexAlphaClipFogReflect");
            Light3TexAlphaClipFogReflectTech = FX.GetTechniqueByName("Light3TexAlphaClipFogReflect");

            // skinned techs
            Light1SkinnedTech = FX.GetTechniqueByName("Light1Skinned");
            Light2SkinnedTech = FX.GetTechniqueByName("Light2Skinned");
            Light3SkinnedTech = FX.GetTechniqueByName("Light3Skinned");

            Light0TexSkinnedTech = FX.GetTechniqueByName("Light0TexSkinned");
            Light1TexSkinnedTech = FX.GetTechniqueByName("Light1TexSkinned");
            Light2TexSkinnedTech = FX.GetTechniqueByName("Light2TexSkinned");
            Light3TexSkinnedTech = FX.GetTechniqueByName("Light3TexSkinned");

            Light0TexAlphaClipSkinnedTech = FX.GetTechniqueByName("Light0TexAlphaClipSkinned");
            Light1TexAlphaClipSkinnedTech = FX.GetTechniqueByName("Light1TexAlphaClipSkinned");
            Light2TexAlphaClipSkinnedTech = FX.GetTechniqueByName("Light2TexAlphaClipSkinned");
            Light3TexAlphaClipSkinnedTech = FX.GetTechniqueByName("Light3TexAlphaClipSkinned");

            Light1FogSkinnedTech = FX.GetTechniqueByName("Light1FogSkinned");
            Light2FogSkinnedTech = FX.GetTechniqueByName("Light2FogSkinned");
            Light3FogSkinnedTech = FX.GetTechniqueByName("Light3FogSkinned");

            Light0TexFogSkinnedTech = FX.GetTechniqueByName("Light0TexFogSkinned");
            Light1TexFogSkinnedTech = FX.GetTechniqueByName("Light1TexFogSkinned");
            Light2TexFogSkinnedTech = FX.GetTechniqueByName("Light2TexFogSkinned");
            Light3TexFogSkinnedTech = FX.GetTechniqueByName("Light3TexFogSkinned");

            Light0TexAlphaClipFogSkinnedTech = FX.GetTechniqueByName("Light0TexAlphaClipFogSkinned");
            Light1TexAlphaClipFogSkinnedTech = FX.GetTechniqueByName("Light1TexAlphaClipFogSkinned");
            Light2TexAlphaClipFogSkinnedTech = FX.GetTechniqueByName("Light2TexAlphaClipFogSkinned");
            Light3TexAlphaClipFogSkinnedTech = FX.GetTechniqueByName("Light3TexAlphaClipFogSkinned");

            Light1ReflectSkinnedTech = FX.GetTechniqueByName("Light1ReflectSkinned");
            Light2ReflectSkinnedTech = FX.GetTechniqueByName("Light2ReflectSkinned");
            Light3ReflectSkinnedTech = FX.GetTechniqueByName("Light3ReflectSkinned");

            Light0TexReflectSkinnedTech = FX.GetTechniqueByName("Light0TexReflectSkinned");
            Light1TexReflectSkinnedTech = FX.GetTechniqueByName("Light1TexReflectSkinned");
            Light2TexReflectSkinnedTech = FX.GetTechniqueByName("Light2TexReflectSkinned");
            Light3TexReflectSkinnedTech = FX.GetTechniqueByName("Light3TexReflectSkinned");

            Light0TexAlphaClipReflectSkinnedTech = FX.GetTechniqueByName("Light0TexAlphaClipReflectSkinned");
            Light1TexAlphaClipReflectSkinnedTech = FX.GetTechniqueByName("Light1TexAlphaClipReflectSkinned");
            Light2TexAlphaClipReflectSkinnedTech = FX.GetTechniqueByName("Light2TexAlphaClipReflectSkinned");
            Light3TexAlphaClipReflectSkinnedTech = FX.GetTechniqueByName("Light3TexAlphaClipReflectSkinned");

            Light1FogReflectSkinnedTech = FX.GetTechniqueByName("Light1FogReflectSkinned");
            Light2FogReflectSkinnedTech = FX.GetTechniqueByName("Light2FogReflectSkinned");
            Light3FogReflectSkinnedTech = FX.GetTechniqueByName("Light3FogReflectSkinned");

            Light0TexFogReflectSkinnedTech = FX.GetTechniqueByName("Light0TexFogReflectSkinned");
            Light1TexFogReflectSkinnedTech = FX.GetTechniqueByName("Light1TexFogReflectSkinned");
            Light2TexFogReflectSkinnedTech = FX.GetTechniqueByName("Light2TexFogReflectSkinned");
            Light3TexFogReflectSkinnedTech = FX.GetTechniqueByName("Light3TexFogReflectSkinned");

            Light0TexAlphaClipFogReflectSkinnedTech = FX.GetTechniqueByName("Light0TexAlphaClipFogReflectSkinned");
            Light1TexAlphaClipFogReflectSkinnedTech = FX.GetTechniqueByName("Light1TexAlphaClipFogReflectSkinned");
            Light2TexAlphaClipFogReflectSkinnedTech = FX.GetTechniqueByName("Light2TexAlphaClipFogReflectSkinned");
            Light3TexAlphaClipFogReflectSkinnedTech = FX.GetTechniqueByName("Light3TexAlphaClipFogReflectSkinned");

            _worldViewProj = FX.GetVariableByName("gWorldViewProj").AsMatrix();
            _world = FX.GetVariableByName("gWorld").AsMatrix();
            _worldInvTranspose = FX.GetVariableByName("gWorldInvTranspose").AsMatrix();
            _texTransform = FX.GetVariableByName("gTexTransform").AsMatrix();
            _eyePosW = FX.GetVariableByName("gEyePosW").AsVector();

            _fogColor = FX.GetVariableByName("gFogColor").AsVector();
            _fogStart = FX.GetVariableByName("gFogStart").AsScalar();
            _fogRange = FX.GetVariableByName("gFogRange").AsScalar();

            _dirLights = FX.GetVariableByName("gDirLights");
            _mat = FX.GetVariableByName("gMaterial");
            _diffuseMap = FX.GetVariableByName("gDiffuseMap").AsResource();
            _shadowMap = FX.GetVariableByName("gShadowMap").AsResource();
            _cubeMap = FX.GetVariableByName("gCubeMap").AsResource();

            _boneTransforms = FX.GetVariableByName("gBoneTransforms").AsMatrix();
            
            _shadowTransform = FX.GetVariableByName("gShadowTransform").AsMatrix();

            _ssaoMap = FX.GetVariableByName("gSsaoMap").AsResource();

            _worldViewProjTex = FX.GetVariableByName("gWorldViewProjTex").AsMatrix();

        }
 public EffectOnlyBoolArrayVariable(EffectVariable v)
 {
     _v = v.AsScalar();
 }
Beispiel #49
0
 public MatrixWorldViewRenderVariable(EffectVariable var)
     : base(var)
 {
 }
 public void Initialize(Effect effect)
 {
     effectVar = effect.GetVariableByName(variableName);
     requiresUpdate = true;
 }
Beispiel #51
0
 public IterCountRenderVariable(EffectVariable var)
     : base(var)
 {
 }
Beispiel #52
0
        private void BuildFX() {
            ShaderBytecode compiledShader = null;
            try {
                compiledShader = new ShaderBytecode(new DataStream(File.ReadAllBytes("fx/Lighting.fxo"), false, false));
                _fx = new Effect(Device, compiledShader);
            } catch (Exception ex) {
                MessageBox.Show(ex.Message);
                return;
            } finally {
                Util.ReleaseCom(ref compiledShader);
            }

            _tech = _fx.GetTechniqueByName("LightTech");
            _fxWVP = _fx.GetVariableByName("gWorldViewProj").AsMatrix();
            _fxWorld = _fx.GetVariableByName("gWorld").AsMatrix();
            _fxWIT = _fx.GetVariableByName("gWorldInvTranspose").AsMatrix();
            _fxEyePosW = _fx.GetVariableByName("gEyePosW").AsVector();
            _fxDirLight = _fx.GetVariableByName("gDirLight");
            _fxPointLight = _fx.GetVariableByName("gPointLight");
            _fxSpotLight = _fx.GetVariableByName("gSpotLight");
            _fxMaterial = _fx.GetVariableByName("gMaterial");
        }
 public void Update(EffectVariable variable)
 {
 }
Beispiel #54
0
 public bool ChangeType(EffectVariable var)
 {
     return(var.IsColor());
 }
 public EffectOnlyVectorArrayVariable(EffectVariable v)
 {
     _v = v.AsVector();
 }
 public override void Subscribe(EffectVariable subscribeTo, SubscribeArgument variable)
 {
     SetAsVector(variable.Material.AmbientColor, subscribeTo, IsVector3);
 }
 public EffectOnlyMatrixArrayVariable(EffectVariable v)
 {
     _v = v.AsMatrix();
 }
 public EffectOnlyResourceArrayVariable(EffectVariable v)
 {
     _v = v.AsResource();
 }
Beispiel #59
0
        public LightingDemo(IntPtr hInstance) : base(hInstance) {
            _landVB = null;
            _landIB = null;
            _waveVB = null;
            _waveIB = null;
            _fx = null;
            _tech = null;
            _fxWorld = null;
            _fxWIT = null;
            _fxEyePosW = null;
            _fxDirLight = null;
            _fxPointLight = null;
            _fxSpotLight = null;
            _fxMaterial = null;
            _fxWVP = null;
            _inputLayout = null;
            _eyePosW = new Vector3();
            _theta = 1.5f*MathF.PI;
            _phi = 0.1f*MathF.PI;
            _radius = 80.0f;

            MainWindowCaption = "Lighting Demo";

            _lastMousePos = new Point();

            _landWorld = Matrix.Identity;
            _wavesWorld = Matrix.Translation(0, -3.0f, 0);
            _view = Matrix.Identity;
            _proj = Matrix.Identity;

            _dirLight = new DirectionalLight {
                Ambient = new Color4(0.2f, 0.2f, 0.2f),
                Diffuse = new Color4(0.5f, 0.5f, 0.5f),
                Specular = new Color4(0.5f, 0.5f, 0.5f),
                Direction = new Vector3(0.57735f, -0.57735f, 0.57735f)
            };

            _pointLight = new PointLight {
                Ambient = new Color4(0.3f, 0.3f, 0.3f),
                Diffuse = new Color4(0.7f, 0.7f, 0.7f),
                Specular = new Color4(0.7f, 0.7f, 0.7f),
                Attenuation = new Vector3(0.0f, 0.1f, 0.0f),
                Range = 25.0f
            };
            _spotLight = new SpotLight {
                Ambient = new Color4(0,0,0),
                Diffuse = new Color4(1.0f, 1.0f, 0.0f),
                Specular = Color.White,
                Attenuation = new Vector3(1.0f, 0.0f, 0.0f),
                Spot = 96.0f,
                Range = 10000.0f
            };

            // NOTE: must put alpha (spec power) first, rather than last as in book code
            _landMaterial = new Material {
                Ambient = new Color4(1.0f, 0.48f, 0.77f, 0.46f),
                Diffuse = new Color4(1.0f, 0.48f, 0.77f, 0.46f),
                Specular = new Color4(16.0f, 0.2f, 0.2f, 0.2f)
            };
            _wavesMaterial = new Material {
                Ambient =  new Color4(0.137f, 0.42f, 0.556f),
                Diffuse = new Color4(0.137f, 0.42f, 0.556f),
                Specular = new Color4(96.0f, 0.8f, 0.8f, 0.8f)
            };

        }
Beispiel #60
0
 /// <summary>
 ///     行列としてエフェクトに登録する
 /// </summary>
 /// <param name="matrix">登録する行列</param>
 /// <param name="effect">エフェクト</param>
 /// <param name="index">変数のインデックス</param>
 protected void SetAsMatrix(Matrix matrix, EffectVariable variable)
 {
     variable.AsMatrix().SetMatrix(matrix);
 }