/// <summary> /// Create all view resources. /// </summary> Tuple <D3D11.Texture2D, D3D11.RenderTargetView, D3D11.Texture2D, D3D11.DepthStencilView, SharpDX.Mathematics.Interop.RawViewportF, Size2, DpiScaling> IRenderLoopHost.OnRenderLoop_CreateViewResources(EngineDevice device) { //Get references to current render device m_device = device.DeviceD3D11_1; m_deviceContext = m_device.ImmediateContext; // Create swapchain and dummy form m_swapChain = GraphicsHelper.CreateSwapChainForFullScreen( m_dummyForm, m_targetOutput, m_targetOutputMode, device, m_renderLoop.ViewConfiguration); // Take width and height out of the render target m_renderTarget = D3D11.Texture2D.FromSwapChain <D3D11.Texture2D>(m_swapChain, 0); m_renderTargetView = new D3D11.RenderTargetView(m_device, m_renderTarget); //Create the depth buffer m_renderTargetDepth = GraphicsHelper.CreateDepthBufferTexture(device, m_targetOutputMode.PixelWidth, m_targetOutputMode.PixelHeight, m_renderLoop.ViewConfiguration); m_renderTargetDepthView = new D3D11.DepthStencilView(m_device, m_renderTargetDepth); //Define the viewport for rendering SharpDX.Mathematics.Interop.RawViewportF viewPort = GraphicsHelper.CreateDefaultViewport(m_targetOutputMode.PixelWidth, m_targetOutputMode.PixelHeight); //Return all generated objects return(Tuple.Create(m_renderTarget, m_renderTargetView, m_renderTargetDepth, m_renderTargetDepthView, viewPort, new Size2(m_targetOutputMode.PixelWidth, m_targetOutputMode.PixelHeight), DpiScaling.Default)); }
/// <summary> /// Create all view resources. /// </summary> Tuple <D3D11.Texture2D, D3D11.RenderTargetView, D3D11.Texture2D, D3D11.DepthStencilView, SharpDX.Mathematics.Interop.RawViewportF, Size2, DpiScaling> IRenderLoopHost.OnRenderLoop_CreateViewResources(EngineDevice engineDevice) { // Calculate pixel with and high of this visual Size pixelSize = this.GetPixelSize(new Size(100.0, 100.0)); int width = (int)pixelSize.Width; int height = (int)pixelSize.Height; //Get references to current render device D3D11.Device renderDevice = engineDevice.DeviceD3D11_1; D3D11.DeviceContext renderDeviceContext = renderDevice.ImmediateContext; //Create the swap chain and the render target m_backBufferD3D11 = GraphicsHelper.CreateRenderTargetTexture(engineDevice, width, height, m_renderLoop.ViewConfiguration); m_backBufferForWpf = GraphicsHelper.CreateSharedTexture(engineDevice, width, height); m_renderTarget = new D3D11.RenderTargetView(renderDevice, m_backBufferD3D11); //Create the depth buffer m_depthBuffer = GraphicsHelper.CreateDepthBufferTexture(engineDevice, width, height, m_renderLoop.ViewConfiguration); m_renderTargetDepth = new D3D11.DepthStencilView(renderDevice, m_depthBuffer); //Apply render target size values m_renderTargetWidth = width; m_renderTargetHeight = height; //Define the viewport for rendering SharpDX.Mathematics.Interop.RawViewportF viewPort = GraphicsHelper.CreateDefaultViewport(width, height); //Apply new width and height values of the viewport m_viewportWidth = width; m_viewportHeight = height; //Create and apply the image source object m_d3dImageSource = new HigherD3DImageSource(engineDevice); m_d3dImageSource.SetRenderTarget(m_backBufferForWpf); if (this.Source == m_dummyBitmap) { this.Source = m_d3dImageSource; } m_lastRecreateWidth = width; m_lastRecreateHeight = height; //Return all generated objects return(Tuple.Create(m_backBufferD3D11, m_renderTarget, m_depthBuffer, m_renderTargetDepth, viewPort, new Size2(width, height), GetDpiScaling())); }
/// <summary> /// Create all view resources. /// </summary> Tuple <D3D11.Texture2D, D3D11.RenderTargetView, D3D11.Texture2D, D3D11.DepthStencilView, SharpDX.Mathematics.Interop.RawViewportF, Size2, DpiScaling> IRenderLoopHost.OnRenderLoop_CreateViewResources(EngineDevice device) { int width = this.Width; int height = this.Height; if (width <= Constants.MIN_VIEW_WIDTH) { width = Constants.MIN_VIEW_WIDTH; } if (height <= Constants.MIN_VIEW_HEIGHT) { height = Constants.MIN_VIEW_HEIGHT; } //Get all factories m_factory = device.FactoryDxgi; //Get all devices m_renderDevice = device.DeviceD3D11_1; m_renderDeviceContext = m_renderDevice.ImmediateContext; //Create the swap chain and the render target m_swapChain = GraphicsHelper.CreateSwapChainForWinForms(this, device, m_renderLoop.ViewConfiguration); m_backBuffer = D3D11.Texture2D.FromSwapChain <D3D11.Texture2D>(m_swapChain, 0); m_renderTarget = new D3D11.RenderTargetView(m_renderDevice, m_backBuffer); //Create the depth buffer m_depthBuffer = GraphicsHelper.CreateDepthBufferTexture(device, width, height, m_renderLoop.ViewConfiguration); m_renderTargetDepth = new D3D11.DepthStencilView(m_renderDevice, m_depthBuffer); //Define the viewport for rendering SharpDX.Mathematics.Interop.RawViewportF viewPort = GraphicsHelper.CreateDefaultViewport(width, height); // Query for current dpi value DpiScaling dpiScaling = DpiScaling.Default; using (Graphics graphics = this.CreateGraphics()) { dpiScaling.DpiX = graphics.DpiX; dpiScaling.DpiY = graphics.DpiY; } //Return all generated objects return(Tuple.Create(m_backBuffer, m_renderTarget, m_depthBuffer, m_renderTargetDepth, viewPort, new Size2(width, height), dpiScaling)); }
/// <summary> /// Create all view resources. /// </summary> Tuple <D3D11.Texture2D, D3D11.RenderTargetView, D3D11.Texture2D, D3D11.DepthStencilView, SharpDX.ViewportF, Size2, DpiScaling> IRenderLoopHost.OnRenderLoop_CreateViewResources(EngineDevice engineDevice) { m_backBufferMultisampled = null; Size2 viewSize = GetTargetRenderPixelSize(); // Create the SwapChain and associate it with the SwapChainBackgroundPanel m_swapChain = GraphicsHelper.CreateSwapChainForComposition(engineDevice, viewSize.Width, viewSize.Height, m_renderLoop.ViewConfiguration); m_targetPanel.SwapChain = m_swapChain; m_compositionScaleChanged = true; // Get the backbuffer from the SwapChain m_backBuffer = D3D11.Texture2D.FromSwapChain <D3D11.Texture2D>(m_swapChain, 0); // Define the render target (in case of multisample an own render target) D3D11.Texture2D backBufferForRenderloop = null; if (m_renderLoop.ViewConfiguration.AntialiasingEnabled) { m_backBufferMultisampled = GraphicsHelper.CreateRenderTargetTexture(engineDevice, viewSize.Width, viewSize.Height, m_renderLoop.ViewConfiguration); m_renderTargetView = new D3D11.RenderTargetView(engineDevice.DeviceD3D11, m_backBufferMultisampled); backBufferForRenderloop = m_backBufferMultisampled; } else { m_renderTargetView = new D3D11.RenderTargetView(engineDevice.DeviceD3D11, m_backBuffer); backBufferForRenderloop = m_backBuffer; } //Create the depth buffer m_depthBuffer = GraphicsHelper.CreateDepthBufferTexture(engineDevice, viewSize.Width, viewSize.Height, m_renderLoop.ViewConfiguration); m_renderTargetDepth = new D3D11.DepthStencilView(engineDevice.DeviceD3D11, m_depthBuffer); //Define the viewport for rendering SharpDX.ViewportF viewPort = GraphicsHelper.CreateDefaultViewport(viewSize.Width, viewSize.Height); m_lastRefreshTargetSize = new Size(viewSize.Width, viewSize.Height); DpiScaling dpiScaling = new DpiScaling(); dpiScaling.DpiX = (float)(96.0 * m_targetPanel.CompositionScaleX); dpiScaling.DpiY = (float)(96.0 * m_targetPanel.CompositionScaleY); return(Tuple.Create(backBufferForRenderloop, m_renderTargetView, m_depthBuffer, m_renderTargetDepth, viewPort, viewSize, dpiScaling)); }
/// <summary> /// Create all view resources. /// </summary> private Tuple <D3D11.Texture2D, D3D11.RenderTargetView, D3D11.Texture2D, D3D11.DepthStencilView, SharpDX.ViewportF, Size2> OnRenderLoopCreateViewResources(EngineDevice engineDevice) { Size2 viewSize = GetTargetRenderPixelSize(); // Create the backbuffer m_backBuffer = GraphicsHelper.CreateRenderTargetTexture(engineDevice, viewSize.Width, viewSize.Height, m_renderLoop.ViewConfiguration); m_backBufferSynchronizing = GraphicsHelper.CreateRenderTargetTexture(engineDevice, viewSize.Width, viewSize.Height, m_renderLoop.ViewConfiguration); m_renderTargetView = new D3D11.RenderTargetView(engineDevice.DeviceD3D11, m_backBuffer); //Create the depth buffer m_depthBuffer = GraphicsHelper.CreateDepthBufferTexture(engineDevice, viewSize.Width, viewSize.Height, m_renderLoop.ViewConfiguration); m_renderTargetDepth = new D3D11.DepthStencilView(engineDevice.DeviceD3D11, m_depthBuffer); //Define the viewport for rendering SharpDX.ViewportF viewPort = GraphicsHelper.CreateDefaultViewport(viewSize.Width, viewSize.Height); m_lastRefreshTargetSize = viewSize; return(Tuple.Create(m_backBuffer, m_renderTargetView, m_depthBuffer, m_renderTargetDepth, viewPort, viewSize)); }
public Tuple <D3D11.Texture2D, D3D11.RenderTargetView, D3D11.Texture2D, D3D11.DepthStencilView, SDM.RawViewportF, Size2, DpiScaling> OnRenderLoop_CreateViewResources(EngineDevice device) { // Get the pixel size of the screen Size2 viewSize = GetTargetRenderPixelSize(); // Create the SwapChain and associate it with the SwapChainBackgroundPanel using (SharpDX.ComObject targetWindowCom = new SharpDX.ComObject(m_targetWindow)) { m_swapChain = GraphicsHelper.CreateSwapChainForCoreWindow(device, targetWindowCom, viewSize.Width, viewSize.Height, m_renderLoop.ViewConfiguration); } // Get the backbuffer from the SwapChain m_backBuffer = D3D11.Texture2D.FromSwapChain <D3D11.Texture2D>(m_swapChain, 0); // Define the render target (in case of multisample an own render target) D3D11.Texture2D backBufferForRenderloop = null; if (m_renderLoop.ViewConfiguration.AntialiasingEnabled) { m_backBufferMultisampled = GraphicsHelper.CreateRenderTargetTexture(device, viewSize.Width, viewSize.Height, m_renderLoop.ViewConfiguration); m_renderTargetView = new D3D11.RenderTargetView(device.DeviceD3D11_1, m_backBufferMultisampled); backBufferForRenderloop = m_backBufferMultisampled; } else { m_renderTargetView = new D3D11.RenderTargetView(device.DeviceD3D11_1, m_backBuffer); backBufferForRenderloop = m_backBuffer; } //Create the depth buffer m_depthBuffer = GraphicsHelper.CreateDepthBufferTexture(device, viewSize.Width, viewSize.Height, m_renderLoop.ViewConfiguration); m_renderTargetDepth = new D3D11.DepthStencilView(device.DeviceD3D11_1, m_depthBuffer); //Define the viewport for rendering SharpDX.Mathematics.Interop.RawViewportF viewPort = GraphicsHelper.CreateDefaultViewport(viewSize.Width, viewSize.Height); m_lastRefreshTargetSize = new Size(viewSize.Width, viewSize.Height); return(Tuple.Create(backBufferForRenderloop, m_renderTargetView, m_depthBuffer, m_renderTargetDepth, viewPort, viewSize, m_dpiScaling)); }
/// <summary> /// Create all view resources. /// </summary> Tuple <D3D11.Texture2D, D3D11.RenderTargetView, D3D11.Texture2D, D3D11.DepthStencilView, SharpDX.Mathematics.Interop.RawViewportF, Size2, DpiScaling> IRenderLoopHost.OnRenderLoop_CreateViewResources(EngineDevice device) { int width = m_pixelWidth; int height = m_pixelHeight; //Get references to current render device m_device = device.DeviceD3D11_1; m_deviceContext = m_device.ImmediateContext; //Create the swap chain and the render target m_renderTarget = GraphicsHelper.CreateRenderTargetTexture(device, width, height, m_renderLoop.ViewConfiguration); m_renderTargetView = new D3D11.RenderTargetView(m_device, m_renderTarget); //Create the depth buffer m_renderTargetDepth = GraphicsHelper.CreateDepthBufferTexture(device, width, height, m_renderLoop.ViewConfiguration); m_renderTargetDepthView = new D3D11.DepthStencilView(m_device, m_renderTargetDepth); //Define the viewport for rendering SharpDX.Mathematics.Interop.RawViewportF viewPort = GraphicsHelper.CreateDefaultViewport(width, height); //Return all generated objects return(Tuple.Create(m_renderTarget, m_renderTargetView, m_renderTargetDepth, m_renderTargetDepthView, viewPort, new Size2(width, height), DpiScaling.Default)); }
/// <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; } }