protected override async Task LoadContent() { await base.LoadContent(); spriteBatch = new SpriteBatch(GraphicsDevice); font = Asset.Load<SpriteFont>("Font"); wireframeState = RasterizerState.New(GraphicsDevice, new RasterizerStateDescription(CullMode.Back) { FillMode = FillMode.Wireframe }); materials.Add(Asset.Load<Material>("NoTessellation")); materials.Add(Asset.Load<Material>("FlatTessellation")); materials.Add(Asset.Load<Material>("PNTessellation")); materials.Add(Asset.Load<Material>("PNTessellationAE")); materials.Add(Asset.Load<Material>("FlatTessellationDispl")); materials.Add(Asset.Load<Material>("FlatTessellationDisplAE")); materials.Add(Asset.Load<Material>("PNTessellationDisplAE")); var cube = new Entity("Cube") { new ModelComponent(new ProceduralModelDescriptor(new CubeProceduralModel { Size = new Vector3(80), MaterialInstance = { Material = materials[0] } }).GenerateModel(Services)) }; var sphere = new Entity("Sphere") { new ModelComponent(new ProceduralModelDescriptor(new SphereProceduralModel { Radius = 50, Tessellation = 5, MaterialInstance = { Material = materials[0] }} ).GenerateModel(Services)) }; var megalodon = new Entity { new ModelComponent { Model = Asset.Load<Model>("megalodon Model") } }; megalodon.Transform.Position= new Vector3(0, -30f, -10f); var knight = new Entity { new ModelComponent { Model = Asset.Load<Model>("knight Model") } }; knight.Transform.RotationEulerXYZ = new Vector3(-MathUtil.Pi / 2, MathUtil.Pi / 4, 0); knight.Transform.Position = new Vector3(0, -50f, 20f); knight.Transform.Scale= new Vector3(0.6f); entities.Add(sphere); entities.Add(cube); entities.Add(megalodon); entities.Add(knight); camera = new TestCamera(); CameraComponent = camera.Camera; Script.Add(camera); LightingKeys.EnableFixedAmbientLight(GraphicsDevice.Parameters, true); GraphicsDevice.Parameters.Set(EnvironmentLightKeys.GetParameterKey(LightSimpleAmbientKeys.AmbientLight, 0), (Color3)Color.White); ChangeModel(0); SetWireframe(true); camera.Position = new Vector3(25, 45, 80); camera.SetTarget(currentEntity, true); }
/// <summary> /// Initializes a new instance of the <see cref="RasterizerState"/> class. /// </summary> /// <param name="graphicsDevice">The graphics device.</param> /// <param name="rasterizerStateDescription">The rasterizer state description.</param> public static RasterizerState New(GraphicsDevice graphicsDevice, RasterizerStateDescription rasterizerStateDescription) { RasterizerState rasterizerState; lock (graphicsDevice.CachedRasterizerStates) { if (graphicsDevice.CachedRasterizerStates.TryGetValue(rasterizerStateDescription, out rasterizerState)) { // TODO: Appropriate destroy rasterizerState.AddReferenceInternal(); } else { rasterizerState = new RasterizerState(graphicsDevice, rasterizerStateDescription); graphicsDevice.CachedRasterizerStates.Add(rasterizerStateDescription, rasterizerState); } } return rasterizerState; }
/// <summary> /// Set the <strong>rasterizer state</strong> for the rasterizer stage of the pipeline. See <see cref="Render+states"/> to learn how to use it. /// </summary> /// <param name="rasterizerState">The rasterizser state to set on this device.</param> private void SetRasterizerStateImpl(RasterizerState rasterizerState) { NativeDeviceContext.Rasterizer.State = rasterizerState != null ? (SharpDX.Direct3D11.RasterizerState)rasterizerState.NativeDeviceChild : null; }
/// <summary> /// <p>Set the <strong>rasterizer state</strong> for the rasterizer stage of the pipeline.</p> /// </summary> /// <param name="rasterizerState">The rasterizser state to set on this device.</param> public void SetRasterizerState(RasterizerState rasterizerState) { throw new NotImplementedException(); }
public override void Load() { base.Load(); if (OfflineCompilation) return; // Declare post render pass PostPass = new RenderPass("PostPass").KeepAliveBy(ActiveObjects); RenderPass.AddPass(PostPass); var depthStencilTexture = Texture.New2D(GraphicsDevice, AtlasSize, AtlasSize, PixelFormat.D32_Float, TextureFlags.DepthStencil | TextureFlags.ShaderResource).KeepAliveBy(ActiveObjects); var depthStencilBuffer = depthStencilTexture.ToDepthStencilBuffer(false); ShadowMapDepth = depthStencilBuffer; //MainTargetPlugin.Parameters.Set(ShadowMapKeys.Texture0, ShadowMapDepth); // Setup clear of this target var renderTargetPlugin = new RenderTargetsPlugin { Services = Services, EnableClearDepth = true, EnableSetTargets = false, RenderPass = RenderPass, RenderTarget = null, DepthStencil = depthStencilBuffer, }; renderTargetPlugin.Apply(); // Use Default ZTest for GBuffer depthStencilStateZStandard = DepthStencilState.New(GraphicsDevice, new DepthStencilStateDescription().Default()).KeepAliveBy(ActiveObjects); depthStencilStateZStandard.Name = "ZStandard"; Parameters.Set(EffectPlugin.DepthStencilStateKey, depthStencilStateZStandard); casterRasterizerState = RasterizerState.New(GraphicsDevice, new RasterizerStateDescription(CullMode.Back)).KeepAliveBy(ActiveObjects); // Variance Shadow Mapping // Create the blur temporary texture var shadowMapTextureDesc = ShadowMapDepth.Description; var shadowMapBlurH = Texture.New2D(GraphicsDevice, shadowMapTextureDesc.Width, shadowMapTextureDesc.Height, PixelFormat.R32G32_Float, TextureFlags.ShaderResource | TextureFlags.RenderTarget).KeepAliveBy(ActiveObjects); var shadowMapBlurV = Texture.New2D(GraphicsDevice, shadowMapTextureDesc.Width, shadowMapTextureDesc.Height, PixelFormat.R32G32_Float, TextureFlags.ShaderResource | TextureFlags.RenderTarget).KeepAliveBy(ActiveObjects); Texture2D textureSourceH = ShadowMapDepth.Texture; Texture2D textureSourceV = shadowMapBlurH; RenderTarget renderTargetH = shadowMapBlurH.ToRenderTarget(); RenderTarget renderTargetV = shadowMapBlurV.ToRenderTarget(); var blurQuadMesh = new EffectMesh[2]; for (int j = 0; j < BlurCount; j++) { for (int i = 0; i < 2; ++i) { blurQuadMesh[i] = new EffectMesh(j > 0 ? blurEffects[1] : blurEffects[i]).KeepAliveBy(ActiveObjects); blurQuadMesh[i].Parameters.Set(PostEffectBlurKeys.Coefficients, new[] { 0.2270270270f, 0.3162162162f, 0.3162162162f, 0.0702702703f, 0.0702702703f }); var unit = i == 0 ? Vector2.UnitX : Vector2.UnitY; blurQuadMesh[i].Parameters.Set(PostEffectBlurKeys.Offsets, new[] { Vector2.Zero, unit * -1.3846153846f, unit * +1.3846153846f, unit * -3.2307692308f, unit * +3.2307692308f }); PostPass.AddPass(blurQuadMesh[i].EffectPass); RenderSystem.GlobalMeshes.AddMesh(blurQuadMesh[i]); } blurQuadMesh[0].Parameters.Set(TexturingKeys.Texture0, textureSourceH); blurQuadMesh[1].Parameters.Set(TexturingKeys.Texture0, textureSourceV); blurQuadMesh[0].Parameters.Set(RenderTargetKeys.RenderTarget, renderTargetH); blurQuadMesh[1].Parameters.Set(RenderTargetKeys.RenderTarget, renderTargetV); textureSourceH = shadowMapBlurV; textureSourceV = shadowMapBlurH; } ShadowMapVsm = shadowMapBlurV; // Final texture for VSM is result of blur //MainTargetPlugin.Parameters.Set(ShadowMapKeys.Texture0, shadowMapBlurV); }
/// <summary> /// Begins a image batch rendering using the specified blend state, sampler, depth stencil, rasterizer state objects, and the view-projection transformation matrix. /// Passing null for any of the state objects selects the default default state objects (BlendState.AlphaBlend, DepthStencilState.None, RasterizerState.CullCounterClockwise, SamplerState.LinearClamp). /// </summary> /// <param name="blendState">Blending options.</param> /// <param name="samplerState">Texture sampling options.</param> /// <param name="depthStencilState">Depth and stencil options.</param> /// <param name="rasterizerState">Rasterization options.</param> /// <param name="viewProjection">The view projection matrix used for this series of draw calls</param> /// <param name="stencilValue">The value of the stencil buffer to take as reference</param> public void Begin(ref Matrix viewProjection, BlendState blendState, SamplerState samplerState, RasterizerState rasterizerState, DepthStencilState depthStencilState, int stencilValue) { separateAlphaEffectBinded = false; viewProjectionMatrix = viewProjection; Begin(null, null, SpriteSortMode.BackToFront, blendState, samplerState, depthStencilState, rasterizerState, stencilValue); }
/// <summary> /// Begins a 3D sprite batch rendering using the specified sorting mode and blend state, sampler, depth stencil, rasterizer state objects, plus a custom effect and a view-projection matrix. /// Passing null for any of the state objects selects the default default state objects (BlendState.AlphaBlend, DepthStencilState.Default, RasterizerState.CullCounterClockwise, SamplerState.LinearClamp). /// Passing a null effect selects the default SpriteBatch Class shader. /// </summary> /// <param name="sortMode">The sprite drawing order to use for the batch session</param> /// <param name="effect">The effect to use for the batch session</param> /// <param name="blendState">The blending state to use for the batch session</param> /// <param name="samplerState">The sampling state to use for the batch session</param> /// <param name="depthStencilState">The depth stencil state to use for the batch session</param> /// <param name="rasterizerState">The rasterizer state to use for the batch session</param> /// <param name="stencilValue">The value of the stencil buffer to take as reference for the batch session</param> /// <param name="viewProjection">The view-projection matrix to use for the batch session</param> public void Begin(Matrix viewProjection, SpriteSortMode sortMode = SpriteSortMode.Deferred, BlendState blendState = null, SamplerState samplerState = null, DepthStencilState depthStencilState = null, RasterizerState rasterizerState = null, Effect effect = null, EffectParameterCollectionGroup parameterCollectionGroup = null, int stencilValue = 0) { CheckEndHasBeenCalled("begin"); transformationMatrix = viewProjection; Begin(effect, parameterCollectionGroup, sortMode, blendState, samplerState, depthStencilState, rasterizerState, stencilValue); }
/// <summary> /// Set the <strong>rasterizer state</strong> for the rasterizer stage of the pipeline. See <see cref="Render+states"/> to learn how to use it. /// </summary> /// <param name="rasterizerState">The rasterizser state to set on this device.</param> public void SetRasterizerState(RasterizerState rasterizerState) { currentState.RasterizerState = rasterizerState; SetRasterizerStateImpl(rasterizerState); }