Ejemplo n.º 1
0
        /// <summary>
        /// Get the sample description for the given quality level.
        /// </summary>
        /// <param name="qualityLevel">The quality level for which a sample description is needed.</param>
        internal DXGI.SampleDescription GetSampleDescription(AntialiasingQualityLevel qualityLevel)
        {
            switch (qualityLevel)
            {
            case AntialiasingQualityLevel.Low:
                return(m_antialiasingConfigLow);

            case AntialiasingQualityLevel.Medium:
                return(m_antialiasingConfigMedium);

            case AntialiasingQualityLevel.High:
                return(m_antialiasingConfigHigh);
            }

            return(new DXGI.SampleDescription(1, 0));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Applies the given size.
        /// </summary>
        /// <param name="renderState">The render state used for creating all resources.</param>
        public void ApplySize(RenderState renderState)
        {
            var viewInfo   = renderState.ViewInformation !;
            var viewConfig = viewInfo.ViewConfiguration;

            // Get current view size and antialiasing settings
            var currentViewSize            = viewInfo.CurrentViewSize;
            var currentAntialiasingEnabled = viewConfig.AntialiasingEnabled;
            var currentAntialiasingQuality = viewConfig.AntialiasingQuality;

            if (_width != currentViewSize.Width ||
                _height != currentViewSize.Height ||
                _antialiasingEnabled != currentAntialiasingEnabled ||
                _antialiasingQuality != currentAntialiasingQuality ||
                _forceRecreateResources)
            {
                _forceRecreateResources = false;

                // Dispose color-buffer resources
                SeeingSharpUtil.SafeDispose(ref _colorBuffer);
                SeeingSharpUtil.SafeDispose(ref _colorBufferRenderTargetView);
                SeeingSharpUtil.SafeDispose(ref _colorBufferShaderResourceView);
                if (_shaderResourceCreated)
                {
                    SeeingSharpUtil.SafeDispose(ref _colorBufferShaderResource);
                }

                // Dispose depth-buffer resources
                SeeingSharpUtil.SafeDispose(ref _depthBufferView);
                SeeingSharpUtil.SafeDispose(ref _depthBuffer);

                // Dispose object-id buffer
                SeeingSharpUtil.SafeDispose(ref _objectIdBufferRenderTargetView);
                SeeingSharpUtil.SafeDispose(ref _objectIdBuffer);

                // Dispose normal-depth resources
                SeeingSharpUtil.SafeDispose(ref _normalDepthBuffer);
                SeeingSharpUtil.SafeDispose(ref _normalDepthBufferRenderTargetView);
                SeeingSharpUtil.SafeDispose(ref _normalDepthBufferShaderResourceView);
                if (_shaderResourceCreated)
                {
                    SeeingSharpUtil.SafeDispose(ref _normalDepthBufferShaderResource);
                }

                // Create color-buffer resources
                if (_creationMode.HasFlag(RenderTargetCreationMode.Color))
                {
                    _colorBuffer = GraphicsHelper.Internals.CreateRenderTargetTexture(
                        renderState.Device, currentViewSize.Width, currentViewSize.Height, viewInfo.ViewConfiguration);
                    _colorBufferShaderResource = _colorBuffer;
                    if (viewInfo.ViewConfiguration.AntialiasingEnabled)
                    {
                        _colorBufferShaderResource = GraphicsHelper.Internals.CreateTexture(renderState.Device, currentViewSize.Width, currentViewSize.Height);
                        _shaderResourceCreated     = true;
                    }
                    else
                    {
                        _shaderResourceCreated = false;
                    }
                    _colorBufferRenderTargetView   = renderState.Device.DeviceD3D11_1.CreateRenderTargetView(_colorBuffer);
                    _colorBufferShaderResourceView = renderState.Device.DeviceD3D11_1.CreateShaderResourceView(_colorBufferShaderResource);
                }

                // Create depth-buffer resources
                if (_creationMode.HasFlag(RenderTargetCreationMode.Depth))
                {
                    _depthBuffer = GraphicsHelper.Internals.CreateDepthBufferTexture(
                        renderState.Device, currentViewSize.Width, currentViewSize.Height, viewInfo.ViewConfiguration);
                    _depthBufferView = GraphicsHelper.Internals.CreateDepthBufferView(renderState.Device, _depthBuffer);
                }

                // Create object-id resources
                if (_creationMode.HasFlag(RenderTargetCreationMode.ObjectId))
                {
                    _objectIdBuffer = GraphicsHelper.Internals.CreateRenderTargetTextureObjectIds(
                        renderState.Device, currentViewSize.Width, currentViewSize.Height, viewInfo.ViewConfiguration);
                    _objectIdBufferRenderTargetView = renderState.Device.DeviceD3D11_1.CreateRenderTargetView(_objectIdBuffer);
                }

                // Create normal-depth buffer resources
                if (_creationMode.HasFlag(RenderTargetCreationMode.NormalDepth))
                {
                    _normalDepthBuffer = GraphicsHelper.Internals.CreateRenderTargetTextureNormalDepth(
                        renderState.Device, currentViewSize.Width, currentViewSize.Height, viewInfo.ViewConfiguration);
                    _normalDepthBufferShaderResource = _normalDepthBuffer;
                    if (_shaderResourceCreated)
                    {
                        _normalDepthBufferShaderResource = GraphicsHelper.Internals.CreateTexture(
                            renderState.Device, currentViewSize.Width, currentViewSize.Height, GraphicsHelper.Internals.DEFAULT_TEXTURE_FORMAT_NORMAL_DEPTH);
                    }
                    _normalDepthBufferRenderTargetView   = renderState.Device.DeviceD3D11_1.CreateRenderTargetView(_normalDepthBuffer);
                    _normalDepthBufferShaderResourceView = renderState.Device.DeviceD3D11_1.CreateShaderResourceView(_normalDepthBufferShaderResource);
                }

                // Remember values
                _width  = currentViewSize.Width;
                _height = currentViewSize.Height;
                _antialiasingEnabled = currentAntialiasingEnabled;
                _antialiasingQuality = currentAntialiasingQuality;
                _viewportF           = renderState.Viewport;
            }
        }
        /// <summary>
        /// Applies the given size.
        /// </summary>
        /// <param name="renderState">The render state used for creating all resources.</param>
        public void ApplySize(RenderState renderState)
        {
            ViewInformation           viewInfo   = renderState.ViewInformation;
            GraphicsViewConfiguration viewConfig = viewInfo.ViewConfiguration;

            // Get current view size and antialiasing settings
            Size2 currentViewSize            = viewInfo.CurrentViewSize;
            bool  currentAntialiasingEnabled = viewConfig.AntialiasingEnabled;
            AntialiasingQualityLevel currentAntialiasingQuality = viewConfig.AntialiasingQuality;

            if ((m_width != currentViewSize.Width) ||
                (m_heigth != currentViewSize.Height) ||
                (m_antialiasingEnabled != currentAntialiasingEnabled) ||
                (m_antialiasingQuality != currentAntialiasingQuality))
            {
                // Dispose color-buffer resources
                GraphicsHelper.SafeDispose(ref m_colorBuffer);
                GraphicsHelper.SafeDispose(ref m_colorBufferRenderTargetView);
                GraphicsHelper.SafeDispose(ref m_colorBufferShaderResourceView);
                if (m_shaderResourceCreated)
                {
                    GraphicsHelper.SafeDispose(ref m_colorBufferShaderResource);
                }

                // Dispose depth-buffer resources
                GraphicsHelper.SafeDispose(ref m_depthBufferView);
                GraphicsHelper.SafeDispose(ref m_depthBuffer);

                // Dispose object-id buffer
                GraphicsHelper.SafeDispose(ref m_objectIDBufferRenderTargetView);
                GraphicsHelper.SafeDispose(ref m_objectIDBuffer);

                // Dispose normal-depth resources
                GraphicsHelper.SafeDispose(ref m_normalDepthBuffer);
                GraphicsHelper.SafeDispose(ref m_normalDepthBufferRenderTargetView);
                GraphicsHelper.SafeDispose(ref m_normalDepthBufferShaderResourceView);
                if (m_shaderResourceCreated)
                {
                    GraphicsHelper.SafeDispose(ref m_normalDepthBufferShaderResource);
                }

                // Create color-buffer resources
                if (m_creationMode.HasFlag(RenderTargetCreationMode.Color))
                {
                    m_colorBuffer = GraphicsHelper.CreateRenderTargetTexture(
                        renderState.Device, currentViewSize.Width, currentViewSize.Height, renderState.ViewInformation.ViewConfiguration);
                    m_colorBufferShaderResource = m_colorBuffer;
                    if (renderState.ViewInformation.ViewConfiguration.AntialiasingEnabled)
                    {
                        m_colorBufferShaderResource = GraphicsHelper.CreateTexture(renderState.Device, currentViewSize.Width, currentViewSize.Height);
                        m_shaderResourceCreated     = true;
                    }
                    else
                    {
                        m_shaderResourceCreated = false;
                    }
                    m_colorBufferRenderTargetView   = new D3D11.RenderTargetView(renderState.Device.DeviceD3D11_1, m_colorBuffer);
                    m_colorBufferShaderResourceView = new D3D11.ShaderResourceView(renderState.Device.DeviceD3D11_1, m_colorBufferShaderResource);
                }

                // Create depth-buffer resources
                if (m_creationMode.HasFlag(RenderTargetCreationMode.Depth))
                {
                    m_depthBuffer = GraphicsHelper.CreateDepthBufferTexture(
                        renderState.Device, currentViewSize.Width, currentViewSize.Height, renderState.ViewInformation.ViewConfiguration);
                    m_depthBufferView = GraphicsHelper.CreateDepthBufferView(renderState.Device, m_depthBuffer);
                }

                // Create object-id resources
                if (m_creationMode.HasFlag(RenderTargetCreationMode.ObjectID))
                {
                    m_objectIDBuffer = GraphicsHelper.CreateRenderTargetTextureObjectIDs(
                        renderState.Device, currentViewSize.Width, currentViewSize.Height, renderState.ViewInformation.ViewConfiguration);
                    m_objectIDBufferRenderTargetView = new D3D11.RenderTargetView(renderState.Device.DeviceD3D11_1, m_objectIDBuffer);
                }

                // Create normal-depth buffer resources
                if (m_creationMode.HasFlag(RenderTargetCreationMode.NormalDepth))
                {
                    m_normalDepthBuffer = GraphicsHelper.CreateRenderTargetTextureNormalDepth(
                        renderState.Device, currentViewSize.Width, currentViewSize.Height, renderState.ViewInformation.ViewConfiguration);
                    m_normalDepthBufferShaderResource = m_normalDepthBuffer;
                    if (m_shaderResourceCreated)
                    {
                        m_normalDepthBufferShaderResource = GraphicsHelper.CreateTexture(
                            renderState.Device, currentViewSize.Width, currentViewSize.Height, GraphicsHelper.DEFAULT_TEXTURE_FORMAT_NORMAL_DEPTH);
                    }
                    m_normalDepthBufferRenderTargetView   = new D3D11.RenderTargetView(renderState.Device.DeviceD3D11_1, m_normalDepthBuffer);
                    m_normalDepthBufferShaderResourceView = new D3D11.ShaderResourceView(renderState.Device.DeviceD3D11_1, m_normalDepthBufferShaderResource);
                }

                // Remember values
                m_width  = currentViewSize.Width;
                m_heigth = currentViewSize.Height;
                m_antialiasingEnabled = currentAntialiasingEnabled;
                m_antialiasingQuality = currentAntialiasingQuality;
                m_viewportF           = renderState.Viewport;
            }
        }
Ejemplo n.º 4
0
 public SampleDescription GetSampleDescription(AntialiasingQualityLevel qualityLevel)
 {
     return(_host.GetSampleDescription(qualityLevel));
 }