private void InitializeRenderTarget() { using (var backBuffer = Dx11.Resource.FromSwapChain <Dx11.Texture2D>(swapChain, 0)) { renderTarget = new Dx11.RenderTargetView(device, backBuffer); device.ImmediateContext.OutputMerger.SetTargets(renderTarget); } }
private void InitRenderTarget() { using (Dx11.Texture2D backBuffer = Dx11.Resource.FromSwapChain <Dx11.Texture2D>(SwapChain, 0) ) { RenderTarget = new Dx11.RenderTargetView(GraphicsDevice, backBuffer); GraphicsDevice.ImmediateContext.OutputMerger.SetTargets(RenderTarget); } }
/// <summary> /// レンダーターゲットを初期化します. /// </summary> private void InitializeTargets() { { // Direct3D レンダーターゲットの作成 var desc = new D3D.Texture2DDescription { Width = size.Width, Height = size.Height, MipLevels = 1, ArraySize = 1, Format = Format.B8G8R8A8_UNorm, SampleDescription = new SampleDescription(1, 0), Usage = D3D.ResourceUsage.Default, BindFlags = D3D.BindFlags.RenderTarget, CpuAccessFlags = D3D.CpuAccessFlags.None, OptionFlags = D3D.ResourceOptionFlags.GdiCompatible }; d3dRenderTarget = new D3D.Texture2D(deviceManager.Device, desc); } { // レンダーターゲットビューの作成 D3D.Texture2D target = D3DRenderTarget; var desc = new D3D.RenderTargetViewDescription { Format = target.Description.Format, Dimension = target.Description.SampleDescription.Count > 1 ? D3D.RenderTargetViewDimension.Texture2DMultisampled : D3D.RenderTargetViewDimension.Texture2D, MipSlice = 0 }; d3dRenderTargetView = new D3D.RenderTargetView(deviceManager.Device, target, desc); } // DXGIサーフェスの取得 dxgiSurface = d3dRenderTarget.AsSurface(); { // レンダーターゲットの作成 var properties = new D2D.RenderTargetProperties { Type = D2D.RenderTargetType.Default, PixelFormat = new D2D.PixelFormat(dxgiSurface.Description.Format, D2D.AlphaMode.Premultiplied), HorizontalDpi = 0, VerticalDpi = 0, Usage = D2D.RenderTargetUsage.GdiCompatible, MinimumFeatureLevel = D2D.FeatureLevel.Direct3D10 }; d2dRenderTarget = D2D.RenderTarget.FromDXGI(deviceManager.D2DFactory, dxgiSurface, properties); d2dGdiInteropRenderTarget = new D2D.GdiInteropRenderTarget(d2dRenderTarget); } if (TargetsInitialized != null) { TargetsInitialized(this, new EventArgs()); } }
// Inicializácia zariadenia a ďalších potrebných zdrojov pre rendering. Metóda vráti true, ak skončí bez chyby. private bool Initialize3D() { try { //Vytvorenie objektu typu SwapChainDescription a nastavenie jeho vlastností m_swapChainDesc = new DXGI.SwapChainDescription(); m_swapChainDesc.OutputHandle = panelVykresli.Handle; m_swapChainDesc.IsWindowed = true; m_swapChainDesc.BufferCount = 1; m_swapChainDesc.Flags = DXGI.SwapChainFlags.AllowModeSwitch; m_swapChainDesc.ModeDescription = new DXGI.ModeDescription( panelVykresli.Width, panelVykresli.Height, new Rational(60, 1), DXGI.Format.R8G8B8A8_UNorm); m_swapChainDesc.SampleDescription = new DXGI.SampleDescription(1, 0); m_swapChainDesc.SwapEffect = DXGI.SwapEffect.Discard; m_swapChainDesc.Usage = DXGI.Usage.RenderTargetOutput; ///Vytvorenie objektu zariadenie a SwapChain spoločne jednou metódou DX11.Device.CreateWithSwapChain( DriverType.Warp, //Typ renderovacieho zariadenia: SW renderer: Reference, Warp, Hardware - hardvérový renderer: http://slimdx.org/tutorials/DeviceCreation.php DeviceCreationFlags.None, //Žiadne extra návestia m_levels, //Kompatibilita s verziami DX m_swapChainDesc, //Objekt typu SwapChainDescription out m_device, //vráti Direct3D zariadenie reprezentujúce virtuálny graf. HW out m_swapChain); //vráti SwapChain pre prácu s baframi //Vytvorenie zobrazovacej plochy - celé okno ap. var m_viewPort = new Viewport(0.0f, 0.0f, panelVykresli.Width, panelVykresli.Height); //Vytvorenie objektu zadného bafra a cieľa renderovania DX11.Texture2D m_backBuffer = Texture2D.FromSwapChain <Texture2D>(m_swapChain, 0); m_renderTarget = new RenderTargetView(m_device, m_backBuffer); m_deviceContext = m_device.ImmediateContext; //Nastavenie kontextu zariadenia, ktorý obsahuje nastavenia pre D3D zariadenie, tu priame renderovanie bez vytvárania príkazového zoznamu. Pozri: http://msdn.microsoft.com/en-us/library/windows/desktop/ff476880%28v=vs.85%29.aspx m_deviceContext.Rasterizer.SetViewports(m_viewPort); //Nastavenie zobrazovacej plochy m_deviceContext.OutputMerger.SetTargets(m_renderTarget); //Nastavenie cieľa renderovania } catch (Exception ex) { MessageBox.Show("Chyba počas inicializácie Direct3D11: \n" + ex.Message); m_initialized = false; } return(m_initialized); }
/// <summary> /// レンダーターゲットを破棄します. /// </summary> private void DestroyTargets() { if (DXGISurface != null && TargetsDestroying != null) { TargetsDestroying(this, new EventArgs()); } SafeRelease(d2dGdiInteropRenderTarget); SafeRelease(d2dRenderTarget); SafeRelease(dxgiSurface); SafeRelease(d3dRenderTargetView); SafeRelease(d3dRenderTarget); d2dGdiInteropRenderTarget = null; d2dRenderTarget = null; dxgiSurface = null; d3dRenderTargetView = null; d3dRenderTarget = null; }
public void GetTargets(out SlimDX.Direct3D11.DepthStencilView depthStencilView, out SlimDX.Direct3D11.RenderTargetView renderTargetView, out SlimDX.Direct3D11.Viewport viewport) { depthStencilView = _depthStencilView; renderTargetView = _renderTargetView; viewport = _viewport; }