01、Direct3D 11 Basics
3418 단어 DI
가장 중요한 것은 세 가지 대상을 만드는 것이다. 바로 위아래 문장, 체인을 교환하는 것이다.지금 컨텍스트는 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 );
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Go] 와이어를 통해서 꼭 필요한 충분한 디.go-cloud에 첨부된 Golang은 DI 도구인 "Wire"를 사용하면 좋습니다.API는 구현과 인터페이스 연결에 집중할 수 있고 생성된 코드도 간단하다.의존 관계의 변경(= 공장 방법의 서명 변경)도 강하다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.