Esempio n. 1
0
 private void InitializeRenderTarget()
 {
     using (var backBuffer = Dx11.Resource.FromSwapChain <Dx11.Texture2D>(swapChain, 0)) {
         renderTarget = new Dx11.RenderTargetView(device, backBuffer);
         device.ImmediateContext.OutputMerger.SetTargets(renderTarget);
     }
 }
Esempio n. 2
0
 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);
     }
 }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 5
0
        /// <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;
        }
Esempio n. 6
0
 public void GetTargets(out SlimDX.Direct3D11.DepthStencilView depthStencilView, out SlimDX.Direct3D11.RenderTargetView renderTargetView, out SlimDX.Direct3D11.Viewport viewport)
 {
     depthStencilView = _depthStencilView;
     renderTargetView = _renderTargetView;
     viewport         = _viewport;
 }