01、Direct3D 11 Basics

3418 단어 DI
1. D3D11 장치 구성
가장 중요한 것은 세 가지 대상을 만드는 것이다. 바로 위아래 문장, 체인을 교환하는 것이다.지금 컨텍스트는 DX11의 새 객체입니다.
DX10에서 장치 객체는 렌더링 및 리소스 작성으로 사용됩니다.DX11에서는 즉시 컨텍스트가 렌더링으로, 장치가 리소스를 작성하는 데 사용됩니다.
교환 체인은 장치를 렌더링한 BUFF를 구현 디스플레이에 표시합니다.교환은 두 개 이상의 버프를 포함합니다.
DXGI를 구성하여SWAPCHAIN_DESC 교환 체인 설명을 통해 교환 체인을 생성합니다.BackBuffer Usage는 백그라운드 BUFF를 어떻게 사용하는지 표시하는 데 사용됩니다.예를 들어, 백그라운드 BUFF로 렌더링하려면 DXGI 로 지정합니다.USAGE_RENDER_TARGET_OUTPUT. OutputWindow는 체인이 BUFF를 표시할 창을 지정하는 데 사용됩니다.SampleDesc는 다중 샘플링을 활성화하는 데 사용됩니다.
이제 다음과 같이 스왑 체인을 생성할 수 있습니다.
DXGI_SWAP_CHAIN_DESC sd;    ZeroMemory( &sd, sizeof(sd) );    sd.BufferCount = 1;    sd.BufferDesc.Width = 640;    sd.BufferDesc.Height = 480;    sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;    sd.BufferDesc.RefreshRate.Numerator = 60;    sd.BufferDesc.RefreshRate.Denominator = 1;    sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;    sd.OutputWindow = g_hWnd;    sd.SampleDesc.Count = 1;    sd.SampleDesc.Quality = 0;    sd.Windowed = TRUE;    if( FAILED( D3D11CreateDeviceAndSwapChain( NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, featureLevels, numFeatureLevels,                     D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, NULL, &g_pImmediateContext ) ) )    {        return FALSE;    }
다음에 우리가 해야 할 일은 렌더링 대상 보기를 만드는 것입니다.DX11에서 렌더링 대상 뷰는 중간 리소스 뷰입니다.리소스 뷰를 사용하면 리소스를 그래픽 파이프라인의 한 레벨에 바인딩할 수 있습니다.자원 보기를 하나의 유형 C로 생각해 보자. 원시 메모리의 C는 임의의 형식으로 변환할 수 있고 원 메모리 데이터 자체는 큰 쓸모가 없다. DX11시도 자원은 기본적으로 유사한 역할을 한다.예를 들어 2D 맵 리소스는 원시 메모리 블록에 해당합니다. 저는 이 리소스로 서로 다른 리소스 보기를 만들고 서로 다른 형식으로 맵을 서로 다른 파이프라인 단계로 귀속시킬 수 있습니다. 그리고 렌더링 목표로 깊이 템플릿 버프(깊이 정보 수신), 맵 소스를 렌더링할 수 있습니다.
렌더링 대상 보기를 만들어야 합니다. 보통 교환 체인의 백엔드 버프를 렌더링 대상으로 연결합니다.DX11은 위에서 렌더링합니다.우선 GetBuffer () 를 호출해서 백엔드 BUFF를 얻습니다.또는 a D3D11을 통해RENDERTARGETVIEW_DESC 구조, CreateRenderTargetView에 대한 렌더링 대상을 작성하고 두 매개변수를 NULL로 설정하여 기본 렌더링 대상을 얻을 수 있습니다.일단 목표 보기가 생기면, 우리는 즉시 상하문에서 OMSetRenderTargets를 호출하여 파이프라인에 귀속시킬 수 있다. 그러면 파이프라인 렌더링 출력이 백엔드 BUFF에 쓰일 수 있다.
  

    // Create a render target view

    ID3D11Texture2D *pBackBuffer;

    if( FAILED( g_pSwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), (LPVOID*)&pBackBuffer ) ) )

        return FALSE;

    hr = g_pd3dDevice->CreateRenderTargetView( pBackBuffer, NULL, &g_pRenderTargetView );

    pBackBuffer->Release();

    if( FAILED( hr ) )

        return FALSE;

    g_pImmediateContext->OMSetRenderTargets( 1, &g_pRenderTargetView, NULL );


DX11 , , ,X Y -1 1;Z 0 1, ( ); DX11 , , (0,0) , 。 :
  
// Create a render target view

    ID3D11Texture2D *pBackBuffer;

    if( FAILED( g_pSwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), (LPVOID*)&pBackBuffer ) ) )

        return FALSE;

    hr = g_pd3dDevice->CreateRenderTargetView( pBackBuffer, NULL, &g_pRenderTargetView );

    pBackBuffer->Release();

    if( FAILED( hr ) )

        return FALSE;

    g_pImmediateContext->OMSetRenderTargets( 1, &g_pRenderTargetView, NULL );


, , DX11 , , ClearRenderTargetView()
  void Render()

    {

        //

        // Clear the backbuffer

        //

        float ClearColor[4] = { 0.0f, 0.125f, 0.6f, 1.0f }; // RGBA

        g_pd3dDevice->ClearRenderTargetView( g_pRenderTargetView, ClearColor );

    

        g_pSwapChain->Present( 0, 0 );

    }

좋은 웹페이지 즐겨찾기