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")); }
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); }