Beispiel #1
0
        protected override void OnRender(RenderContext renderContext, DeviceContextProxy deviceContext)
        {
            base.OnRender(renderContext, deviceContext);
            // Draw backface into stencil buffer
            DepthStencilView dsView;
            var renderTargets = deviceContext.DeviceContext.OutputMerger.GetRenderTargets(1, out dsView);

            if (dsView == null)
            {
                return;
            }
            deviceContext.DeviceContext.ClearDepthStencilView(dsView, DepthStencilClearFlags.Stencil, 0, 0);
            deviceContext.DeviceContext.OutputMerger.SetRenderTargets(dsView, new RenderTargetView[0]);//Remove render target
            deviceContext.SetRasterState(backfaceRasterState);
            drawBackfacePass.BindShader(deviceContext);
            drawBackfacePass.BindStates(deviceContext, StateType.BlendState);
            deviceContext.SetDepthStencilState(drawBackfacePass.DepthStencilState, 1); //Draw backface onto stencil buffer, set value to 1
            OnDraw(deviceContext, InstanceBuffer);

            //Draw full screen quad to fill cross section
            deviceContext.DeviceContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleStrip;
            deviceContext.SetRasterState(RasterState);
            drawScreenQuadPass.BindShader(deviceContext);
            drawScreenQuadPass.BindStates(deviceContext, StateType.BlendState);
            deviceContext.DeviceContext.OutputMerger.SetRenderTargets(dsView, renderTargets); //Rebind render target
            deviceContext.SetDepthStencilState(drawScreenQuadPass.DepthStencilState, 1);      //Only pass stencil buffer test if value is 1
            deviceContext.DeviceContext.Draw(4, 0);

            //Decrement ref count. See OutputMerger.GetRenderTargets remarks
            dsView.Dispose();
            foreach (var t in renderTargets)
            {
                t.Dispose();
            }
        }
Beispiel #2
0
 /// <summary>
 /// Set all necessary states and buffers
 /// </summary>
 /// <param name="context"></param>
 /// <param name="isInvertCullMode"></param>
 protected override void OnBindRasterState(DeviceContextProxy context, bool isInvertCullMode)
 {
     if (isInvertCullMode && invertCullModeState != null)
     {
         context.SetRasterState(invertCullModeState);
     }
     else
     {
         context.SetRasterState(rasterState);
     }
 }
 protected override void OnRender(RenderContext context, DeviceContextProxy deviceContext)
 {
     ShaderPass pass = MaterialVariables.GetPass(this, context);
     if (pass.IsNULL)
     { return; }
     pass.BindShader(deviceContext);
     pass.BindStates(deviceContext, DefaultStateBinding);
     if (!BindMaterialTextures(deviceContext, pass))
     {
         return;
     }
     if (context.RenderHost.IsShadowMapEnabled)
     {
         pass.PixelShader.BindTexture(deviceContext, shadowMapSlot, context.SharedResource.ShadowView);
     }
     DynamicReflector?.BindCubeMap(deviceContext);
     OnDraw(deviceContext, InstanceBuffer);
     DynamicReflector?.UnBindCubeMap(deviceContext);
     if (RenderWireframe && WireframePass != ShaderPass.NullPass)
     {
         if (RenderType == RenderType.Transparent && context.IsOITPass)
         {
             pass = WireframeOITPass;
         }
         else
         {
             pass = WireframePass;
         }
         pass.BindShader(deviceContext, false);
         pass.BindStates(deviceContext, DefaultStateBinding);
         deviceContext.SetRasterState(RasterStateWireframe);
         OnDraw(deviceContext, InstanceBuffer);
     }
 }
        protected override void OnRender(RenderContext context, DeviceContextProxy deviceContext)
        {
            ShaderPass pass = MaterialVariables.GetPass(RenderType, context);

            if (pass.IsNULL)
            {
                return;
            }
            MaterialVariables.UpdateMaterialStruct(deviceContext, ref modelStruct);
            pass.BindShader(deviceContext);
            pass.BindStates(deviceContext, DefaultStateBinding);
            if (!materialVariables.BindMaterial(context, deviceContext, pass))
            {
                return;
            }

            DynamicReflector?.BindCubeMap(deviceContext);
            DrawIndexed(deviceContext, GeometryBuffer.IndexBuffer, InstanceBuffer);
            DynamicReflector?.UnBindCubeMap(deviceContext);
            if (RenderWireframe && !WireframePass.IsNULL)
            {
                if (RenderType == RenderType.Transparent && context.IsOITPass)
                {
                    pass = WireframeOITPass;
                }
                else
                {
                    pass = WireframePass;
                }
                pass.BindShader(deviceContext, false);
                pass.BindStates(deviceContext, DefaultStateBinding);
                deviceContext.SetRasterState(RasterStateWireframe);
                DrawIndexed(deviceContext, GeometryBuffer.IndexBuffer, InstanceBuffer);
            }
        }
            protected override void OnRender(RenderContext renderContext, DeviceContextProxy deviceContext)
            {
                if (needsAssignVariables)
                {
                    lock (clipParamCB)
                    {
                        if (needsAssignVariables)
                        {
                            clipParamCB.WriteValueByName(ClipPlaneStruct.CuttingOperationStr, (int)cuttingOperation);
                            clipParamCB.WriteValueByName(ClipPlaneStruct.CrossSectionColorStr, sectionColor);
                            clipParamCB.WriteValueByName(ClipPlaneStruct.EnableCrossPlaneStr, planeEnabled);
                            clipParamCB.WriteValueByName(ClipPlaneStruct.EnableCrossPlane5To8Str, plane5To8Enabled);
                            clipParamCB.WriteValueByName(ClipPlaneStruct.CrossPlane1ParamsStr, plane1Params);
                            clipParamCB.WriteValueByName(ClipPlaneStruct.CrossPlane2ParamsStr, plane2Params);
                            clipParamCB.WriteValueByName(ClipPlaneStruct.CrossPlane3ParamsStr, plane3Params);
                            clipParamCB.WriteValueByName(ClipPlaneStruct.CrossPlane4ParamsStr, plane4Params);
                            clipParamCB.WriteValueByName(ClipPlaneStruct.CrossPlane5ParamsStr, plane5Params);
                            clipParamCB.WriteValueByName(ClipPlaneStruct.CrossPlane6ParamsStr, plane6Params);
                            clipParamCB.WriteValueByName(ClipPlaneStruct.CrossPlane7ParamsStr, plane7Params);
                            clipParamCB.WriteValueByName(ClipPlaneStruct.CrossPlane8ParamsStr, plane8Params);
                            needsAssignVariables = false;
                        }
                    }
                }
                clipParamCB.Upload(deviceContext);
                base.OnRender(renderContext, deviceContext);
                // Draw backface into stencil buffer
                var dsView = renderContext.RenderHost.DepthStencilBufferView;

                deviceContext.ClearDepthStencilView(dsView, DepthStencilClearFlags.Stencil, 0, 0);
                deviceContext.SetDepthStencil(dsView);//Remove render target
                deviceContext.SetRasterState(backfaceRasterState);
                drawBackfacePass.BindShader(deviceContext);
                drawBackfacePass.BindStates(deviceContext, StateType.BlendState | StateType.DepthStencilState);
                DrawIndexed(deviceContext, GeometryBuffer.IndexBuffer, InstanceBuffer);

                //Draw full screen quad to fill cross section
                deviceContext.SetRasterState(RasterState);
                drawScreenQuadPass.BindShader(deviceContext);
                drawScreenQuadPass.BindStates(deviceContext, StateType.BlendState | StateType.DepthStencilState);
                renderContext.RenderHost.SetDefaultRenderTargets(false);//Rebind render target
                deviceContext.Draw(4, 0);
            }
        protected override void OnRender(RenderContext renderContext, DeviceContextProxy deviceContext)
        {
            base.OnRender(renderContext, deviceContext);
            // Draw backface into stencil buffer
            var dsView = renderContext.RenderHost.DepthStencilBufferView;

            deviceContext.ClearDepthStencilView(dsView, DepthStencilClearFlags.Stencil, 0, 0);
            deviceContext.SetDepthStencilOnly(dsView);//Remove render target
            deviceContext.SetRasterState(backfaceRasterState);
            drawBackfacePass.BindShader(deviceContext);
            drawBackfacePass.BindStates(deviceContext, StateType.BlendState | StateType.DepthStencilState);
            OnDraw(deviceContext, InstanceBuffer);

            //Draw full screen quad to fill cross section
            deviceContext.SetRasterState(RasterState);
            drawScreenQuadPass.BindShader(deviceContext);
            drawScreenQuadPass.BindStates(deviceContext, StateType.BlendState | StateType.DepthStencilState);
            renderContext.RenderHost.SetDefaultRenderTargets(false);//Rebind render target
            deviceContext.Draw(4, 0);
        }
Beispiel #7
0
 public void BindStates(DeviceContextProxy context, StateType type)
 {
     if (type == StateType.None || IsNULL)
     {
         return;
     }
     if (EnumHelper.HasFlag(type, StateType.BlendState))
     {
         context.SetBlendState(BlendState, BlendFactor, SampleMask);
     }
     if (EnumHelper.HasFlag(type, StateType.DepthStencilState))
     {
         context.SetDepthStencilState(DepthStencilState, StencilRef);
     }
     if (EnumHelper.HasFlag(type, StateType.RasterState))
     {
         context.SetRasterState(RasterState);
     }
 }
Beispiel #8
0
 /// <summary>
 /// Binds the states.
 /// </summary>
 /// <param name="context">The context.</param>
 /// <param name="type">The type.</param>
 public void BindStates(DeviceContextProxy context, StateType type)
 {
     if (type == StateType.None)
     {
         return;
     }
     if (EnumHelper.HasFlag(type, StateType.BlendState))
     {
         context.SetBlendState(BlendState);
     }
     if (EnumHelper.HasFlag(type, StateType.DepthStencilState))
     {
         context.SetDepthStencilState(DepthStencilState);
     }
     if (EnumHelper.HasFlag(type, StateType.RasterState))
     {
         context.SetRasterState(RasterState);
     }
 }
Beispiel #9
0
 protected override void OnRender(IRenderContext context, DeviceContextProxy deviceContext)
 {
     DefaultShaderPass.BindShader(deviceContext);
     DefaultShaderPass.BindStates(deviceContext, StateType.BlendState | StateType.DepthStencilState);
     if (!BindMaterialTextures(deviceContext, DefaultShaderPass))
     {
         return;
     }
     if (context.RenderHost.IsShadowMapEnabled)
     {
         DefaultShaderPass.GetShader(ShaderStage.Pixel).BindTexture(deviceContext, shadowMapSlot, context.SharedResource.ShadowView);
     }
     OnDraw(deviceContext, InstanceBuffer);
     if (RenderWireframe && WireframePass != NullShaderPass.NullPass)
     {
         WireframePass.BindShader(deviceContext, false);
         WireframePass.BindStates(deviceContext, StateType.BlendState | StateType.DepthStencilState);
         deviceContext.SetRasterState(RasterStateWireframe);
         OnDraw(deviceContext, InstanceBuffer);
     }
 }
Beispiel #10
0
            protected override void OnRender(RenderContext context, DeviceContextProxy deviceContext)
            {
                var pass = MaterialVariables.GetPass(RenderType, context);

                if (pass.IsNULL)
                {
                    return;
                }
                OnUpdatePerModelStruct(context);
                if (!materialVariables.UpdateMaterialStruct(deviceContext, ref modelStruct))
                {
                    return;
                }
                pass.BindShader(deviceContext);
                pass.BindStates(deviceContext, DefaultStateBinding);
                if (!materialVariables.BindMaterialResources(context, deviceContext, pass))
                {
                    return;
                }

                DynamicReflector?.BindCubeMap(deviceContext);
                materialVariables.Draw(deviceContext, GeometryBuffer, InstanceBuffer.ElementCount);
                DynamicReflector?.UnBindCubeMap(deviceContext);

                if (RenderWireframe)
                {
                    pass = materialVariables.GetWireframePass(RenderType, context);
                    if (pass.IsNULL)
                    {
                        return;
                    }
                    pass.BindShader(deviceContext, false);
                    pass.BindStates(deviceContext, DefaultStateBinding);
                    deviceContext.SetRasterState(RasterStateWireframe);
                    materialVariables.Draw(deviceContext, GeometryBuffer, InstanceBuffer.ElementCount);
                }
            }
 /// <summary>
 /// Called when [bind raster state].
 /// </summary>
 /// <param name="context">The context.</param>
 protected override void OnBindRasterState(DeviceContextProxy context)
 {
     context.SetRasterState(rasterState);
 }
Beispiel #12
0
 protected void OnBindRasterState(DeviceContextProxy context, bool isInvertCullMode)
 {
     context.SetRasterState(!isInvertCullMode ? rasterState : invertCullModeState);
 }
Beispiel #13
0
 /// <summary>
 /// Called when [bind raster state].
 /// </summary>
 /// <param name="context">The context.</param>
 /// <param name="isInvertCullMode"></param>
 protected override void OnBindRasterState(DeviceContextProxy context, bool isInvertCullMode)
 {
     context.SetRasterState(rasterState);
 }