public void Render(DX11.Device device, Matrix world, Matrix viewProj) { DX11.DeviceContext m_deviceContext = device.ImmediateContext; m_deviceContext.InputAssembler.InputLayout = m_vertexLayout; //Priradenie opisu dát pre "Input assembler stage" m_deviceContext.InputAssembler.PrimitiveTopology = DX11.PrimitiveTopology.TriangleList; //Spôsob interpretácie vrcholov ako zoznam 3-uholníkov m_deviceContext.InputAssembler.SetIndexBuffer(m_indexBuffer, DXGI.Format.R16_UInt, 0); //Index buffer priradený k "Input assembler stage" m_deviceContext.InputAssembler.SetVertexBuffers(0, new DX11.VertexBufferBinding(m_vertexBuffer, Marshal.SizeOf(typeof(Vertex)), 0)); m_transformVariable.SetMatrix(world * viewProj); //Nastavenie združenej transformačnej matice pre transform. súradníc vrcholov do obrazovkových m_effectPass.Apply(m_deviceContext); m_deviceContext.DrawIndexed(36, 0, 0); //Renderovanie indexovaných dát }
// 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); }