User Tools

Site Tools


Tutorial 1 - Direct3D 11 Basics

by Richard Russell, August 2015

Note that the code in this tutorial requires Windows 8.1 or Windows 10

This tutorial is closely based on Microsoft's Direct 3D 11 Tutorial 1 but with the code translated from C++ to BBC BASIC for Windows. You should refer to the original for a detailed explanation of the code.


In this first tutorial, we will go through the elements necessary to create a minimal Direct3D 11 application. Every Direct3D 11 application must have these elements to function properly. The elements include setting up a window and a device object, and then displaying a colour on the window.


The source files, libraries etc. may be downloaded from here.

Setting Up The Direct3D 11 Device

The following is the code to create a device and a swap chain:

        DIM sd{} = DXGI_SWAP_CHAIN_DESC{}
        sd.BufferCount% = 1
        sd.BufferDesc.Width% = Width%
        sd.BufferDesc.Height% = Height%
        sd.BufferDesc.Format% = DXGI_FORMAT_R8G8B8A8_UNORM
        sd.BufferDesc.RefreshRate.Numerator% = 60
        sd.BufferDesc.RefreshRate.Denominator% = 1
        sd.OutputWindow% = @hwnd%
        sd.SampleDesc.Count% = 1
        sd.SampleDesc.Quality% = 0
        sd.Windowed% = 1
        SYS `D3D11CreateDeviceAndSwapChain`, NULL, D3D_DRIVER_TYPE_HARDWARE, \
        \   NULL, 0, NULL, 0, D3D11_SDK_VERSION, sd{}, ^pSwapChain%, \
        \   ^pd3dDevice%, NULL, ^pImmediateContext% TO hr%
        IF hr% <> S_OK ERROR 100, "CreateDeviceAndSwapChain failed: "+STR$~hr%
        !(^IDXGISwapChain{}+4) = !pSwapChain%
        !(^ID3D11Device{}+4) = !pd3dDevice%
        !(^ID3D11DeviceContext{}+4) = !pImmediateContext%

The code to create and set the render target view is as follows:

        REM Create a render target view:
        SYS IDXGISwapChain.GetBuffer%, pSwapChain%, 0, IID_ID3D11Texture2D, \
        \   ^pBackBuffer% TO hr%
        IF hr% <> S_OK ERROR 100, "IDXGISwapChain::GetBuffer failed: "+STR$~hr%
        !(^ID3D11Texture2D{}+4) = !pBackBuffer%
        SYS ID3D11Device.CreateRenderTargetView%, pd3dDevice%, pBackBuffer%, NULL, \
        \   ^pRenderTargetView% TO hr%
        IF hr% <> S_OK ERROR 100, "ID3D11Device::CreateRenderTargetView failed: "+STR$~hr%
        SYS ID3D11Texture2D.Release%, pBackBuffer%
        SYS ID3D11DeviceContext.OMSetRenderTargets%, pImmediateContext%, \
        \   1, ^pRenderTargetView%, NULL

The last thing we need to set up before Direct3D 11 can render is initialize the viewport:

        DIM vp{} = D3D11_VIEWPORT{} : REM All members are floats
        vp.Width% = FN_f4(Width%)
        vp.Height% = FN_f4(Height%)
        vp.MinDepth% = 0
        vp.MaxDepth% = FN_f4(1.0)
        vp.TopLeftX% = 0
        vp.TopLeftY% = 0
        SYS ID3D11DeviceContext.RSSetViewports%, pImmediateContext%, 1, vp{}

The Rendering Code

In this tutorial, we will render the simplest scene possible, which is to fill the screen with a single colour:

        REM Clear the back buffer:
        DIM ClearColor%(3)
        ClearColor%() = 0, FN_f4(0.125), FN_f4(0.6), FN_f4(1.0) : REM RGBA
        SYS ID3D11DeviceContext.ClearRenderTargetView%, pImmediateContext%, \
        \   pRenderTargetView%, ^ClearColor%(0)
        REM Present the information rendered to the back buffer:
        SYS IDXGISwapChain.Present%, pSwapChain%, 0, 0
This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information
tutorial_201_20-_20_20direct3d_2011_20basics.txt · Last modified: 2018/04/13 22:27 by richardrussell