//protected override int beginInst() //{ // stateSetted = false; // return effectInst.Begin(FX.DoNotSaveState | FX.DoNotSaveShaderState | FX.DoNotSaveSamplerState); //} //protected override void endInst() //{ // effectInst.End(); //} //public override void BeginPassInst(int passId) //{ // effectInst.BeginPass(passId); //} //public override void EndPassInst() //{ // effectInst.EndPass(); //} #endregion protected override int begin() { if (mode == RenderMode.Depth) { renderSys.BindShader(shdVtxShader); renderSys.BindShader(shdPixShader); } else if (mode == RenderMode.DeferredNormal) { renderSys.BindShader(nrmGenPShader); renderSys.BindShader(nrmGenVShader); } else { renderSys.BindShader(vtxShader); renderSys.BindShader(pixShader); pixShader.SetValue("i_a", EffectParams.LightAmbient); pixShader.SetValue("i_d", EffectParams.LightDiffuse); pixShader.SetValue("i_s", EffectParams.LightSpecular); pixShader.SetValue("lightDir", EffectParams.LightDir); vtxShader.SetValue("viewPos", EffectParams.CurrentCamera.Position); ShaderSamplerState state2 = new ShaderSamplerState(); state2.AddressU = TextureAddressMode.Wrap; state2.AddressV = TextureAddressMode.Wrap; state2.AddressW = TextureAddressMode.Wrap; state2.MinFilter = TextureFilter.Anisotropic; state2.MagFilter = TextureFilter.Anisotropic; state2.MipFilter = TextureFilter.Linear; state2.MaxAnisotropy = 8; state2.MipMapLODBias = 0; pixShader.SetTexture("hatch0", MaterialLibrary.Instance.Hatch0); pixShader.SetTexture("hatch1", MaterialLibrary.Instance.Hatch1); pixShader.SetSamplerState("hatch0", ref state2); pixShader.SetSamplerState("hatch1", ref state2); ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Border; state.AddressV = TextureAddressMode.Border; state.AddressW = TextureAddressMode.Border; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.None; state.BorderColor = ColorValue.White; state.MaxAnisotropy = 0; state.MipMapLODBias = 0; pixShader.SetSamplerState("texShd", ref state); pixShader.SetTexture("texShd", EffectParams.DepthMap[0]); } stateSetted = false; return(1); //return effect.Begin(FX.DoNotSaveState | FX.DoNotSaveShaderState | FX.DoNotSaveSamplerState); }
public override void Setup(Material mat, ref RenderOperation op) { Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix; vtxShader.SetValue("mvp", ref mvp); //vtxShader.SetValue("cameraZ", EffectParams.InvView.Forward); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; pixShader.SetValue("k_a", mat.Ambient); pixShader.SetValue("k_d", mat.Diffuse); pixShader.SetValue("k_e", mat.Emissive); pixShader.SetSamplerState("texDif", ref state); ResourceHandle <Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { pixShader.SetTexture("texDif", noTexture); } else { pixShader.SetTexture("texDif", clrTex); } } }
public override void Setup(Material mat, ref RenderOperation op) { if (mode == RenderMode.Depth) { Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); shdVtxShader.SetValue("mvp", ref lightPrjTrans); } else if (mode == RenderMode.DeferredNormal) { Matrix worldView = op.Transformation * EffectParams.CurrentCamera.ViewMatrix; Matrix mvp = worldView * EffectParams.CurrentCamera.ProjectionMatrix; nrmGenVShader.SetValue("mvp", ref mvp); nrmGenVShader.SetValue("worldView", ref worldView); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; nrmGenPShader.SetSamplerState("texDif", ref state); ResourceHandle<Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { nrmGenPShader.SetTexture("texDif", noTexture); } else { nrmGenPShader.SetTexture("texDif", clrTex); } } } else { Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix; vtxShader.SetValue("mvp", ref mvp); Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); vtxShader.SetValue("smTrans", lightPrjTrans); TreeBatchModel mdl = op.Sender as TreeBatchModel; if (mdl != null) { vtxShader.SetValue("world", ref mdl.TreeOrientation); } else { vtxShader.SetValue("world", ref op.Transformation); } if (!stateSetted) { pixShader.SetValue("k_a", mat.Ambient); pixShader.SetValue("k_d", mat.Diffuse); pixShader.SetValue("k_s", mat.Specular); pixShader.SetValue("k_e", mat.Emissive); pixShader.SetValue("k_power", mat.Power); ResourceHandle<Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { pixShader.SetTexture("texDif", null); } else { pixShader.SetTexture("texDif", clrTex); } pixShader.SetTexture("texFog", TerrainEffect.FogMask); Vector2 isVeg_wind = new Vector2(); if (mat.IsVegetation) { isVeg_wind.X = 100;// vtxShader.SetValue("isVeg_wind", new Vector4(100, 100, 100, 100)); } isVeg_wind.Y = winding; vtxShader.SetValue("isVeg_wind", ref isVeg_wind); stateSetted = true; } } }
public void SetSamplerState(string name, ref ShaderSamplerState state) { pixShader.SetSamplerState(name, ref state); }
public void SetSamplerStateDirect(int si, ref ShaderSamplerState state) { pixShader.SetSamplerStateDirect(si, ref state); }
public override void Setup(Material mat, ref RenderOperation op) { Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix; vtxShader.SetValue("mvp", ref mvp); //vtxShader.SetValue("cameraZ", EffectParams.InvView.Forward); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; pixShader.SetValue("k_a", mat.Ambient); pixShader.SetValue("k_d", mat.Diffuse); pixShader.SetValue("k_e", mat.Emissive); pixShader.SetSamplerState("texDif", ref state); ResourceHandle<Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { pixShader.SetTexture("texDif", noTexture); } else { pixShader.SetTexture("texDif", clrTex); } } }
public override void Setup(Material mat, ref RenderOperation op) { if (mode == RenderMode.Depth) { Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); shdVtxShader.SetValue("mvp", ref lightPrjTrans); } else if (mode == RenderMode.DeferredNormal) { Matrix worldView = op.Transformation * EffectParams.CurrentCamera.ViewMatrix; Matrix mvp = worldView * EffectParams.CurrentCamera.ProjectionMatrix; nrmGenVShader.SetValue("mvp", ref mvp); nrmGenVShader.SetValue("worldView", ref worldView); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; nrmGenPShader.SetSamplerState("texDif", ref state); ResourceHandle<Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { nrmGenPShader.SetTexture("texDif", noTexture); } else { nrmGenPShader.SetTexture("texDif", clrTex); } stateSetted = true; } } else { Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix; vtxShader.SetValue("mvp", ref mvp); vtxShader.SetValue("world", ref op.Transformation); Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); vtxShader.SetValue("smTrans", lightPrjTrans); WorldObject wo = op.Sender as WorldObject; if (wo != null) { pixShader.SetValue("visiblity", wo.Visiblity); } else { pixShader.SetValue("visiblity", 1.0f); } if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; pixShader.SetValue("k_a", mat.Ambient); pixShader.SetValue("k_d", mat.Diffuse); pixShader.SetValue("k_s", mat.Specular); pixShader.SetValue("k_e", mat.Emissive); pixShader.SetValue("k_power", mat.Power); pixShader.SetSamplerState("texDif", ref state); ResourceHandle<Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { pixShader.SetTexture("texDif", noTexture); } else { pixShader.SetTexture("texDif", clrTex); } if (mat.IsVegetation) { vtxShader.SetValue("isVegetation", new Vector4(100, 100, 100, 100)); } else { vtxShader.SetValue("isVegetation", new Vector4()); } stateSetted = true; } } }
public override void Setup(Material mat, ref RenderOperation op) { if (mode == RenderMode.Final) { Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix; vtxShader.SetValue("mvp", ref mvp); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; pixShader.SetSamplerState("texDif", ref state); ResourceHandle<Texture> clrTex = mat.GetTexture(0); pixShader.SetTexture("texDif", clrTex != null ? clrTex.Resource : null); stateSetted = true; } } else if (mode == RenderMode.DeferredNormal) { Matrix worldView = op.Transformation * EffectParams.CurrentCamera.ViewMatrix; Matrix mvp = worldView * EffectParams.CurrentCamera.ProjectionMatrix; nrmGenVShader.SetValue("mvp", ref mvp); nrmGenVShader.SetValue("worldView", ref worldView); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; nrmGenPShader.SetSamplerState("texDif", ref state); ResourceHandle<Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { nrmGenPShader.SetTexture("texDif", null); } else { nrmGenPShader.SetTexture("texDif", clrTex); } } } }
protected override int begin() { if (mode == RenderMode.DeferredNormal) { renderSystem.BindShader(nrmGenVS); renderSystem.BindShader(nrmGenPS); ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; nrmGenPS.SetSamplerState("dudvMap", ref state); nrmGenPS.SetSamplerState("normalMap", ref state); } else { renderSystem.BindShader(vtxShader); renderSystem.BindShader(pixShader); vtxShader.SetValue("lightDir", EffectParams.LightDir); ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; pixShader.SetSamplerState("dudvMap", ref state); pixShader.SetSamplerState("normalMap", ref state); pixShader.SetSamplerState("reflectionMap", ref state); pixShader.SetTexture("texShd", EffectParams.DepthMap[0]); state.AddressU = TextureAddressMode.Clamp; state.AddressV = TextureAddressMode.Clamp; state.AddressW = TextureAddressMode.Clamp; state.AddressU = TextureAddressMode.Border; state.AddressV = TextureAddressMode.Border; state.AddressW = TextureAddressMode.Border; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.None; state.BorderColor = ColorValue.White; state.MaxAnisotropy = 0; state.MipMapLODBias = 0; pixShader.SetSamplerState("texShd", ref state); ShaderSamplerState state2 = new ShaderSamplerState(); state2.AddressU = TextureAddressMode.Wrap; state2.AddressV = TextureAddressMode.Wrap; state2.AddressW = TextureAddressMode.Wrap; state2.MinFilter = TextureFilter.Anisotropic; state2.MagFilter = TextureFilter.Anisotropic; state2.MipFilter = TextureFilter.Linear; state2.MaxAnisotropy = 8; state2.MipMapLODBias = 0; pixShader.SetTexture("hatch0", MaterialLibrary.Instance.Hatch0); pixShader.SetTexture("hatch1", MaterialLibrary.Instance.Hatch1); pixShader.SetSamplerState("hatch0", ref state2); pixShader.SetSamplerState("hatch1", ref state2); } move += 0.0000067f; while (move > 1) { move--; } return(1); }
/// <summary> /// 见接口 /// </summary> /// <param name="renderer"></param> /// <param name="screenTarget"></param> public void RenderFullScene(ISceneRenderer renderer, RenderTarget screenTarget, RenderMode mode) { Microsoft.Xna.Framework.Input.KeyboardState ks = Microsoft.Xna.Framework.Input.Keyboard.GetState(); if (ks.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.C) && lastState.IsKeyUp(Microsoft.Xna.Framework.Input.Keys.C)) { testMode++; if (testMode > TestMode.Blurred) { testMode = TestMode.Final; } } lastState = ks; if (testMode == TestMode.Original) { renderer.RenderScene(screenTarget, RenderMode.Final); return; } if (testMode == TestMode.Normal) { renderer.RenderScene(screenTarget, RenderMode.DeferredNormal); return; } renderer.RenderScene(nrmDepthBuffer, RenderMode.DeferredNormal); renderer.RenderScene(colorBuffer, RenderMode.Final); Viewport vp = renderSys.Viewport; ShaderSamplerState sampler1; sampler1.AddressU = TextureAddressMode.Clamp; sampler1.AddressV = TextureAddressMode.Clamp; sampler1.AddressW = TextureAddressMode.Clamp; sampler1.BorderColor = ColorValue.Transparent; sampler1.MagFilter = TextureFilter.Point; sampler1.MaxAnisotropy = 0; sampler1.MaxMipLevel = 0; sampler1.MinFilter = TextureFilter.Point; sampler1.MipFilter = TextureFilter.None; sampler1.MipMapLODBias = 0; ShaderSamplerState sampler2 = sampler1; sampler2.MagFilter = TextureFilter.Linear; sampler2.MinFilter = TextureFilter.Linear; #region 边缘合成 renderSys.SetRenderTarget(0, testMode == TestMode.Edge ? screenTarget : edgeResultBuffer); edgeEff.Begin(); edgeEff.SetSamplerStateDirect(0, ref sampler1); edgeEff.SetSamplerStateDirect(1, ref sampler1); edgeEff.SetTextureDirect(0, nrmDepthBuffer.GetColorBufferTexture()); edgeEff.SetTextureDirect(1, testMode == TestMode.Edge ? whitePixel : colorBuffer.GetColorBufferTexture()); Vector2 nrmBufSize = new Vector2(vp.Width, vp.Height); edgeEff.SetValue("normalBufferSize", ref nrmBufSize); DrawBigQuad(); edgeEff.End(); #endregion if (testMode == TestMode.Edge) { return; } if (testMode == TestMode.Depth) { renderSys.SetRenderTarget(0, screenTarget); depthViewEff.Begin(); depthViewEff.SetSamplerStateDirect(0, ref sampler1); depthViewEff.SetTextureDirect(0, nrmDepthBuffer.GetColorBufferTexture()); DrawBigQuad(); depthViewEff.End(); return; } #region 高斯X renderSys.SetRenderTarget(0, blurredRt1); gaussBlur.Begin(); gaussBlur.SetSamplerStateDirect(0, ref sampler1); gaussBlur.SetTextureDirect(0, edgeResultBuffer.GetColorBufferTexture()); for (int i = 0; i < SampleCount; i++) { gaussBlur.SetValueDirect(i, ref guassFilter.SampleOffsetsX[i]); gaussBlur.SetValueDirect(i + 15, guassFilter.SampleWeights[i]); } DrawSmallQuad(); gaussBlur.End(); #endregion #region 高斯Y renderSys.SetRenderTarget(0, testMode == TestMode.Blurred ? screenTarget : blurredRt2); gaussBlur.Begin(); gaussBlur.SetSamplerStateDirect(0, ref sampler1); gaussBlur.SetTextureDirect(0, blurredRt1.GetColorBufferTexture()); for (int i = 0; i < SampleCount; i++) { gaussBlur.SetValueDirect(i, ref guassFilter.SampleOffsetsY[i]); gaussBlur.SetValueDirect(i + 15, guassFilter.SampleWeights[i]); } if (testMode == TestMode.Blurred) { DrawBigQuad(); } else { DrawSmallQuad(); } gaussBlur.End(); #endregion if (testMode == TestMode.Blurred) { return; } #region DOF合成 renderSys.SetRenderTarget(0, screenTarget); compEff.Begin(); compEff.SetSamplerStateDirect(0, ref sampler1); compEff.SetSamplerStateDirect(1, ref sampler2); compEff.SetSamplerStateDirect(2, ref sampler2); compEff.SetTextureDirect(0, edgeResultBuffer.GetColorBufferTexture()); compEff.SetTextureDirect(1, blurredRt2.GetColorBufferTexture()); compEff.SetTextureDirect(2, nrmDepthBuffer.GetColorBufferTexture()); //if (camera != null) //{ // float focNear = (camera.Position.Length() - PlanetEarth.PlanetRadius) / camera.FarPlane; // compEff.SetValue("FocusNear", focNear); //} //else //{ // compEff.SetValue("FocusNear", 0.3f); //} renderSys.RenderStates.AlphaBlendEnable = true; renderSys.RenderStates.SourceBlend = Blend.SourceAlpha; renderSys.RenderStates.DestinationBlend = Blend.InverseSourceAlpha; renderSys.RenderStates.BlendOperation = BlendFunction.Add; DrawBigQuad(); compEff.End(); #endregion }
public override void Setup(Material mat, ref RenderOperation op) { if (mode == RenderMode.Depth) { Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); shdVtxShader.SetValue("mvp", ref lightPrjTrans); } else if (mode == RenderMode.DeferredNormal) { Matrix worldView = op.Transformation * EffectParams.CurrentCamera.ViewMatrix; Matrix mvp = worldView * EffectParams.CurrentCamera.ProjectionMatrix; nrmGenVShader.SetValue("mvp", ref mvp); nrmGenVShader.SetValue("worldView", ref worldView); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; nrmGenPShader.SetSamplerState("texDif", ref state); ResourceHandle<Texture> clrTex = mat.GetTexture(0); if (clrTex != null) { nrmGenPShader.SetTexture("texDif", clrTex); } } } else { Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix; vtxShader.SetValue("mvp", ref mvp); vtxShader.SetValue("world", ref op.Transformation); Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); vtxShader.SetValue("smTrans", lightPrjTrans); City sender = op.Sender as City; pixShader.SetValue("k_a", mat.Ambient); if (sender != null && sender.IsCaptured) { Color4F color = new Color4F(sender.Owner.SideColor); pixShader.SetValue("k_d", color); } else { pixShader.SetValue("k_d", mat.Diffuse); } if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; pixShader.SetSamplerState("texDif", ref state); ResourceHandle<Texture> clrTex = mat.GetTexture(0); if (clrTex != null) { pixShader.SetTexture("texDif", clrTex); } stateSetted = true; } } }
public override void Setup(Material mat, ref RenderOperation op) { if (mode == RenderMode.Depth) { Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); shdVtxShader.SetValue("mvp", ref lightPrjTrans); } else if (mode == RenderMode.DeferredNormal) { Matrix worldView = op.Transformation * EffectParams.CurrentCamera.ViewMatrix; Matrix mvp = worldView * EffectParams.CurrentCamera.ProjectionMatrix; nrmGenVShader.SetValue("mvp", ref mvp); nrmGenVShader.SetValue("worldView", ref worldView); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; nrmGenPShader.SetSamplerState("texDif", ref state); ResourceHandle <Texture> clrTex = mat.GetTexture(0); if (clrTex != null) { nrmGenPShader.SetTexture("texDif", clrTex); } } } else { Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix; vtxShader.SetValue("mvp", ref mvp); vtxShader.SetValue("world", ref op.Transformation); Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); vtxShader.SetValue("smTrans", lightPrjTrans); City sender = op.Sender as City; pixShader.SetValue("k_a", mat.Ambient); if (sender != null && sender.IsCaptured) { Color4F color = new Color4F(sender.Owner.SideColor); pixShader.SetValue("k_d", color); } else { pixShader.SetValue("k_d", mat.Diffuse); } if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; pixShader.SetSamplerState("texDif", ref state); ResourceHandle <Texture> clrTex = mat.GetTexture(0); if (clrTex != null) { pixShader.SetTexture("texDif", clrTex); } stateSetted = true; } } }
public override void Setup(Material mat, ref RenderOperation op) { if (mode == RenderMode.Depth) { Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); shdVtxShader.SetValue("mvp", ref lightPrjTrans); } else if (mode == RenderMode.DeferredNormal) { Matrix worldView = op.Transformation * EffectParams.CurrentCamera.ViewMatrix; Matrix mvp = worldView * EffectParams.CurrentCamera.ProjectionMatrix; nrmGenVShader.SetValue("mvp", ref mvp); nrmGenVShader.SetValue("worldView", ref worldView); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; nrmGenPShader.SetSamplerState("texDif", ref state); ResourceHandle <Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { nrmGenPShader.SetTexture("texDif", noTexture); } else { nrmGenPShader.SetTexture("texDif", clrTex); } } } else { Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix; vtxShader.SetValue("mvp", ref mvp); vtxShader.SetValue("world", ref op.Transformation); Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); vtxShader.SetValue("smTrans", lightPrjTrans); WorldObject wo = op.Sender as WorldObject; if (wo != null) { pixShader.SetValue("visiblity", wo.Visiblity); } else { pixShader.SetValue("visiblity", 1.0f); } if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; pixShader.SetValue("k_a", mat.Ambient); pixShader.SetValue("k_d", mat.Diffuse); pixShader.SetValue("k_s", mat.Specular); pixShader.SetValue("k_e", mat.Emissive); pixShader.SetValue("k_power", mat.Power); pixShader.SetSamplerState("texDif", ref state); ResourceHandle <Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { pixShader.SetTexture("texDif", noTexture); } else { pixShader.SetTexture("texDif", clrTex); } if (mat.IsVegetation) { vtxShader.SetValue("isVegetation", new Vector4(100, 100, 100, 100)); } else { vtxShader.SetValue("isVegetation", new Vector4()); } stateSetted = true; } } }
protected override int begin() { if (mode == RenderMode.Depth) { renderSystem.BindShader(shdVtxShader); renderSystem.BindShader(shdPixShader); } else if (mode == RenderMode.DeferredNormal) { renderSystem.BindShader(nrmVtxShader); renderSystem.BindShader(nrmPixShader); nrmPixShader.SetTexture("texNorm", MaterialLibrary.Instance.GlobalBakedNormalTexture); } else { renderSystem.BindShader(vtxShader); renderSystem.BindShader(pixShader); vtxShader.SetValue("terrSize", (float)terrSize); pixShader.SetValue("i_a", EffectParams.LightAmbient); pixShader.SetValue("i_d", EffectParams.LightDiffuse); //pixShader.SetValue("i_s", EffectParams.LightSpecular); vtxShader.SetValue("lightDir", EffectParams.LightDir); //vtxShader.SetValue("viewPos", EffectParams.CurrentCamera.Position); pixShader.SetTexture("texShd", EffectParams.DepthMap[0]); pixShader.SetTexture("texFog", FogMask); ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; ShaderSamplerState state2 = new ShaderSamplerState(); state2.AddressU = TextureAddressMode.Wrap; state2.AddressV = TextureAddressMode.Wrap; state2.AddressW = TextureAddressMode.Wrap; state2.MinFilter = TextureFilter.Anisotropic; state2.MagFilter = TextureFilter.Anisotropic; state2.MipFilter = TextureFilter.Linear; state2.MaxAnisotropy = 8; state2.MipMapLODBias = 0; pixShader.SetTexture("texDif", MaterialLibrary.Instance.GlobalIndexTexture); pixShader.SetTexture("texNorm", MaterialLibrary.Instance.GlobalNormalTexture); //pixShader.SetTexture("texEdge", MaterialLibrary.Instance.FadeEdge); pixShader.SetTexture("hatch0", MaterialLibrary.Instance.Hatch0); pixShader.SetTexture("hatch1", MaterialLibrary.Instance.Hatch1); pixShader.SetSamplerState("hatch0", ref state2); pixShader.SetSamplerState("hatch1", ref state2); pixShader.SetSamplerState("texDif", ref state); pixShader.SetSamplerState("texNorm", ref state); pixShader.SetSamplerState("texFog", ref state); TerrainTexture tex; tex = MaterialLibrary.Instance.GetTexture("Snow"); pixShader.SetTexture("texDet1", tex.Texture); pixShader.SetSamplerState("texDet1", ref state); tex = MaterialLibrary.Instance.GetTexture("Grass"); pixShader.SetTexture("texDet2", tex.Texture); pixShader.SetSamplerState("texDet2", ref state); tex = MaterialLibrary.Instance.GetTexture("Sand"); pixShader.SetTexture("texDet3", tex.Texture); pixShader.SetSamplerState("texDet3", ref state); tex = MaterialLibrary.Instance.GetTexture("Rock"); pixShader.SetTexture("texDet4", tex.Texture); pixShader.SetSamplerState("texDet4", ref state); state.AddressU = TextureAddressMode.Clamp; state.AddressV = TextureAddressMode.Clamp; state.AddressW = TextureAddressMode.Clamp; state.AddressU = TextureAddressMode.Border; state.AddressV = TextureAddressMode.Border; state.AddressW = TextureAddressMode.Border; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.None; state.BorderColor = ColorValue.White; state.MaxAnisotropy = 0; state.MipMapLODBias = 0; pixShader.SetSamplerState("texShd", ref state); } stateSetted = false; return(1); }
//protected override int beginInst() //{ // stateSetted = false; // return effectInst.Begin(FX.DoNotSaveState | FX.DoNotSaveShaderState | FX.DoNotSaveSamplerState); //} //protected override void endInst() //{ // effectInst.End(); //} //public override void BeginPassInst(int passId) //{ // effectInst.BeginPass(passId); //} //public override void EndPassInst() //{ // effectInst.EndPass(); //} #endregion protected override int begin() { if (mode == RenderMode.Depth) { renderSys.BindShader(shdVtxShader); renderSys.BindShader(shdPixShader); } else if (mode == RenderMode.DeferredNormal) { renderSys.BindShader(nrmGenPShader); renderSys.BindShader(nrmGenVShader); } else { renderSys.BindShader(vtxShader); renderSys.BindShader(pixShader); pixShader.SetValue("i_a", EffectParams.LightAmbient); pixShader.SetValue("i_d", EffectParams.LightDiffuse); pixShader.SetValue("i_s", EffectParams.LightSpecular); pixShader.SetValue("lightDir", EffectParams.LightDir); vtxShader.SetValue("viewPos", EffectParams.CurrentCamera.Position); ShaderSamplerState state2 = new ShaderSamplerState(); state2.AddressU = TextureAddressMode.Wrap; state2.AddressV = TextureAddressMode.Wrap; state2.AddressW = TextureAddressMode.Wrap; state2.MinFilter = TextureFilter.Anisotropic; state2.MagFilter = TextureFilter.Anisotropic; state2.MipFilter = TextureFilter.Linear; state2.MaxAnisotropy = 8; state2.MipMapLODBias = 0; pixShader.SetTexture("hatch0", MaterialLibrary.Instance.Hatch0); pixShader.SetTexture("hatch1", MaterialLibrary.Instance.Hatch1); pixShader.SetSamplerState("hatch0", ref state2); pixShader.SetSamplerState("hatch1", ref state2); ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Border; state.AddressV = TextureAddressMode.Border; state.AddressW = TextureAddressMode.Border; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.None; state.BorderColor = ColorValue.White; state.MaxAnisotropy = 0; state.MipMapLODBias = 0; pixShader.SetSamplerState("texShd", ref state); pixShader.SetTexture("texShd", EffectParams.DepthMap[0]); } stateSetted = false; return 1; //return effect.Begin(FX.DoNotSaveState | FX.DoNotSaveShaderState | FX.DoNotSaveSamplerState); }
public override void Setup(Material mat, ref RenderOperation op) { if (mode == RenderMode.Depth) { Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); shdVtxShader.SetValue("mvp", ref lightPrjTrans); } else if (mode == RenderMode.DeferredNormal) { Matrix worldView = op.Transformation * EffectParams.CurrentCamera.ViewMatrix; Matrix mvp = worldView * EffectParams.CurrentCamera.ProjectionMatrix; nrmGenVShader.SetValue("mvp", ref mvp); nrmGenVShader.SetValue("worldView", ref worldView); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; nrmGenPShader.SetSamplerState("texDif", ref state); ResourceHandle <Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { nrmGenPShader.SetTexture("texDif", noTexture); } else { nrmGenPShader.SetTexture("texDif", clrTex); } } } else { Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix; vtxShader.SetValue("mvp", ref mvp); Matrix lightPrjTrans; Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans); vtxShader.SetValue("smTrans", lightPrjTrans); TreeBatchModel mdl = op.Sender as TreeBatchModel; if (mdl != null) { vtxShader.SetValue("world", ref mdl.TreeOrientation); } else { vtxShader.SetValue("world", ref op.Transformation); } if (!stateSetted) { pixShader.SetValue("k_a", mat.Ambient); pixShader.SetValue("k_d", mat.Diffuse); pixShader.SetValue("k_s", mat.Specular); pixShader.SetValue("k_e", mat.Emissive); pixShader.SetValue("k_power", mat.Power); ResourceHandle <Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { pixShader.SetTexture("texDif", null); } else { pixShader.SetTexture("texDif", clrTex); } pixShader.SetTexture("texFog", TerrainEffect.FogMask); Vector2 isVeg_wind = new Vector2(); if (mat.IsVegetation) { isVeg_wind.X = 100;// vtxShader.SetValue("isVeg_wind", new Vector4(100, 100, 100, 100)); } isVeg_wind.Y = winding; vtxShader.SetValue("isVeg_wind", ref isVeg_wind); stateSetted = true; } } }
protected override int begin() { if (mode == RenderMode.DeferredNormal) { renderSystem.BindShader(nrmGenVS); renderSystem.BindShader(nrmGenPS); ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; nrmGenPS.SetSamplerState("dudvMap", ref state); nrmGenPS.SetSamplerState("normalMap", ref state); } else { renderSystem.BindShader(vtxShader); renderSystem.BindShader(pixShader); vtxShader.SetValue("lightDir", EffectParams.LightDir); ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; pixShader.SetSamplerState("dudvMap", ref state); pixShader.SetSamplerState("normalMap", ref state); pixShader.SetSamplerState("reflectionMap", ref state); pixShader.SetTexture("texShd", EffectParams.DepthMap[0]); state.AddressU = TextureAddressMode.Clamp; state.AddressV = TextureAddressMode.Clamp; state.AddressW = TextureAddressMode.Clamp; state.AddressU = TextureAddressMode.Border; state.AddressV = TextureAddressMode.Border; state.AddressW = TextureAddressMode.Border; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.None; state.BorderColor = ColorValue.White; state.MaxAnisotropy = 0; state.MipMapLODBias = 0; pixShader.SetSamplerState("texShd", ref state); ShaderSamplerState state2 = new ShaderSamplerState(); state2.AddressU = TextureAddressMode.Wrap; state2.AddressV = TextureAddressMode.Wrap; state2.AddressW = TextureAddressMode.Wrap; state2.MinFilter = TextureFilter.Anisotropic; state2.MagFilter = TextureFilter.Anisotropic; state2.MipFilter = TextureFilter.Linear; state2.MaxAnisotropy = 8; state2.MipMapLODBias = 0; pixShader.SetTexture("hatch0", MaterialLibrary.Instance.Hatch0); pixShader.SetTexture("hatch1", MaterialLibrary.Instance.Hatch1); pixShader.SetSamplerState("hatch0", ref state2); pixShader.SetSamplerState("hatch1", ref state2); } move += 0.0000067f; while (move > 1) move--; return 1; }
public override void Setup(Material mat, ref RenderOperation op) { if (mode == RenderMode.Final) { Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix; vtxShader.SetValue("mvp", ref mvp); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; pixShader.SetSamplerState("texDif", ref state); ResourceHandle <Texture> clrTex = mat.GetTexture(0); pixShader.SetTexture("texDif", clrTex != null ? clrTex.Resource : null); stateSetted = true; } } else if (mode == RenderMode.DeferredNormal) { Matrix worldView = op.Transformation * EffectParams.CurrentCamera.ViewMatrix; Matrix mvp = worldView * EffectParams.CurrentCamera.ProjectionMatrix; nrmGenVShader.SetValue("mvp", ref mvp); nrmGenVShader.SetValue("worldView", ref worldView); if (!stateSetted) { ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; nrmGenPShader.SetSamplerState("texDif", ref state); ResourceHandle <Texture> clrTex = mat.GetTexture(0); if (clrTex == null) { nrmGenPShader.SetTexture("texDif", null); } else { nrmGenPShader.SetTexture("texDif", clrTex); } } } }
protected override int begin() { if (mode == RenderMode.Depth) { renderSystem.BindShader(shdVtxShader); renderSystem.BindShader(shdPixShader); } else if (mode == RenderMode.DeferredNormal) { renderSystem.BindShader(nrmVtxShader); renderSystem.BindShader(nrmPixShader); nrmPixShader.SetTexture("texNorm", MaterialLibrary.Instance.GlobalBakedNormalTexture); } else { renderSystem.BindShader(vtxShader); renderSystem.BindShader(pixShader); vtxShader.SetValue("terrSize", (float)terrSize); pixShader.SetValue("i_a", EffectParams.LightAmbient); pixShader.SetValue("i_d", EffectParams.LightDiffuse); //pixShader.SetValue("i_s", EffectParams.LightSpecular); vtxShader.SetValue("lightDir", EffectParams.LightDir); //vtxShader.SetValue("viewPos", EffectParams.CurrentCamera.Position); pixShader.SetTexture("texShd", EffectParams.DepthMap[0]); pixShader.SetTexture("texFog", FogMask); ShaderSamplerState state = new ShaderSamplerState(); state.AddressU = TextureAddressMode.Wrap; state.AddressV = TextureAddressMode.Wrap; state.AddressW = TextureAddressMode.Wrap; state.MinFilter = TextureFilter.Anisotropic; state.MagFilter = TextureFilter.Anisotropic; state.MipFilter = TextureFilter.Linear; state.MaxAnisotropy = 8; state.MipMapLODBias = 0; ShaderSamplerState state2 = new ShaderSamplerState(); state2.AddressU = TextureAddressMode.Wrap; state2.AddressV = TextureAddressMode.Wrap; state2.AddressW = TextureAddressMode.Wrap; state2.MinFilter = TextureFilter.Anisotropic; state2.MagFilter = TextureFilter.Anisotropic; state2.MipFilter = TextureFilter.Linear; state2.MaxAnisotropy = 8; state2.MipMapLODBias = 0; pixShader.SetTexture("texDif", MaterialLibrary.Instance.GlobalIndexTexture); pixShader.SetTexture("texNorm", MaterialLibrary.Instance.GlobalNormalTexture); //pixShader.SetTexture("texEdge", MaterialLibrary.Instance.FadeEdge); pixShader.SetTexture("hatch0", MaterialLibrary.Instance.Hatch0); pixShader.SetTexture("hatch1", MaterialLibrary.Instance.Hatch1); pixShader.SetSamplerState("hatch0", ref state2); pixShader.SetSamplerState("hatch1", ref state2); pixShader.SetSamplerState("texDif", ref state); pixShader.SetSamplerState("texNorm", ref state); pixShader.SetSamplerState("texFog", ref state); TerrainTexture tex; tex = MaterialLibrary.Instance.GetTexture("Snow"); pixShader.SetTexture("texDet1", tex.Texture); pixShader.SetSamplerState("texDet1", ref state); tex = MaterialLibrary.Instance.GetTexture("Grass"); pixShader.SetTexture("texDet2", tex.Texture); pixShader.SetSamplerState("texDet2", ref state); tex = MaterialLibrary.Instance.GetTexture("Sand"); pixShader.SetTexture("texDet3", tex.Texture); pixShader.SetSamplerState("texDet3", ref state); tex = MaterialLibrary.Instance.GetTexture("Rock"); pixShader.SetTexture("texDet4", tex.Texture); pixShader.SetSamplerState("texDet4", ref state); state.AddressU = TextureAddressMode.Clamp; state.AddressV = TextureAddressMode.Clamp; state.AddressW = TextureAddressMode.Clamp; state.AddressU = TextureAddressMode.Border; state.AddressV = TextureAddressMode.Border; state.AddressW = TextureAddressMode.Border; state.MinFilter = TextureFilter.Linear; state.MagFilter = TextureFilter.Linear; state.MipFilter = TextureFilter.None; state.BorderColor = ColorValue.White; state.MaxAnisotropy = 0; state.MipMapLODBias = 0; pixShader.SetSamplerState("texShd", ref state); } stateSetted = false; return 1; }