예제 #1
0
        public override void Draw(SharpDX.Direct3D11.DeviceContext context, int index)
        {
            if (_activatedEffect == null)
            {
                if (_backBufferClouds.OffSreenRenderTarget != null)
                {
                    _backBufferClouds.OffSreenRenderTarget = null;
                }
                return;
            }

            if (index == _postEffectStartingDrawId)
            {
                //Change RenderTarget to this offline texture
                //Clear renderTarger
                _engine.ImmediateContext.ClearRenderTargetView(_renderTargetView, __renderTargetViewDefaultColor);
                _engine.ImmediateContext.OutputMerger.SetTargets(_engine.DepthStencilTarget, _renderTargetView);
                _backBufferClouds.OffSreenRenderTarget = _renderTexture;
                _postEffectStartDrawDone = true;
            }
            else if (index == _postEffectEndingDrawId && _postEffectStartDrawDone)
            {
                //We have finished to draw into the offline texture, link back the screen backbuffer
                _engine.SetRenderTargets(context);
                //Start the Post effect code here
                RenderStatesRepo.ApplyStates(context, DXStates.Rasters.Default, DXStates.Blenders.Disabled, DXStates.DepthStencils.DepthDisabled);
                _vBuffer.SetToDevice(context, 0);
                _iBuffer.SetToDevice(context, 0);

                _activatedEffect.Render(context);

                context.DrawIndexed(6, 0, 0);
                _postEffectStartDrawDone = false;
            }
        }