Ejemplo n.º 1
0
        public void Initialize(Device device)
        {
            _b = EffectUtils.Load(ShadersResourceManager.Manager, "BakeryShaders");
            E  = new Effect(device, _b);

            TechPerPixel              = new EffectReadyTechnique(E.GetTechniqueByName("PerPixel"));
            TechMultiLayer            = new EffectReadyTechnique(E.GetTechniqueByName("MultiLayer"));
            TechPerPixel_SecondPass   = new EffectReadyTechnique(E.GetTechniqueByName("PerPixel_SecondPass"));
            TechMultiLayer_SecondPass = new EffectReadyTechnique(E.GetTechniqueByName("MultiLayer_SecondPass"));
            TechPerPixel_GrassPass    = new EffectReadyTechnique(E.GetTechniqueByName("PerPixel_GrassPass"));

            for (var i = 0; i < TechPerPixel.Description.PassCount && InputSignaturePNTG == null; i++)
            {
                InputSignaturePNTG = TechPerPixel.GetPassByIndex(i).Description.Signature;
            }
            if (InputSignaturePNTG == null)
            {
                throw new System.Exception("input signature (BakeryShaders, PNTG, PerPixel) == null");
            }
            LayoutPNTG = new InputLayout(device, InputSignaturePNTG, InputLayouts.VerticePNTG.InputElementsValue);

            FxWorldViewProj  = new EffectOnlyMatrixVariable(E.GetVariableByName("gWorldViewProj"));
            FxDiffuseMap     = new EffectOnlyResourceVariable(E.GetVariableByName("gDiffuseMap"));
            FxMaskMap        = new EffectOnlyResourceVariable(E.GetVariableByName("gMaskMap"));
            FxDetailRMap     = new EffectOnlyResourceVariable(E.GetVariableByName("gDetailRMap"));
            FxDetailGMap     = new EffectOnlyResourceVariable(E.GetVariableByName("gDetailGMap"));
            FxDetailBMap     = new EffectOnlyResourceVariable(E.GetVariableByName("gDetailBMap"));
            FxDetailAMap     = new EffectOnlyResourceVariable(E.GetVariableByName("gDetailAMap"));
            FxAlphaMap       = new EffectOnlyResourceVariable(E.GetVariableByName("gAlphaMap"));
            FxKsDiffuse      = new EffectOnlyFloatVariable(E.GetVariableByName("gKsDiffuse"));
            FxAlphaRef       = new EffectOnlyFloatVariable(E.GetVariableByName("gAlphaRef"));
            FxMagicMult      = new EffectOnlyFloatVariable(E.GetVariableByName("gMagicMult"));
            FxSecondPassMode = new EffectOnlyFloatVariable(E.GetVariableByName("gSecondPassMode"));
            FxMultRGBA       = new EffectOnlyVector4Variable(E.GetVariableByName("gMultRGBA"));
        }
Ejemplo n.º 2
0
        private void Draw(DeviceContextHolder holder, ShaderResourceView source, Vector2 sourceSize, RenderTargetView destination, Vector2 destinationSize, EffectReadyTechnique tech)
        {
            holder.DeviceContext.Rasterizer.SetViewports(new Viewport(0f, 0f, destinationSize.X, destinationSize.Y));

            holder.DeviceContext.OutputMerger.SetTargets(destination);
            holder.PrepareQuad(_effect.LayoutPT);
            _effect.FxInputMap.SetResource(source);

            _effect.FxScreenSize.Set(new Vector4(destinationSize.X, destinationSize.Y, 1f / destinationSize.X, 1f / destinationSize.Y));
            _effect.FxMultipler.Set(new Vector2(destinationSize.X / sourceSize.X, destinationSize.Y / sourceSize.Y));

            tech.DrawAllPasses(holder.DeviceContext, 6);
        }