2013-08-27 3 views
2

나는 쉽게 대답 할 수있는 쉬운 대답이되기를 희망합니다.Directx 11 프론트 버퍼

DirectX 11/DXGI에서 프런트 버퍼에 어떻게 액세스합니까? DirectX 9에서 GetFrontBufferData()를 사용할 수 있고 GetBuffer()를 사용하여 DirectX 11에서 백 버퍼에 액세스 할 수 있지만 여기에는 문제가 있습니다. 백 버퍼는 프론트 버퍼가 수행 한 계산을 가지고 있지 않습니다.

제가 누락 된 부분이 있는지 궁금합니다.

GetDisplaySurfaceData를 사용하여 시도해 볼 수 있습니다. 뭔가 잘못 이해하지 않으면 항상 전체 화면 모드가 아니기 때문에 작동하지 않습니다.

편집 : GetBuffer가 DirectX 11의 SwapChain에서 어떻게 작동하는지 알려주실 수 있습니까? 내가 읽었을 때 안티 앨리어싱은 프론트 버퍼와 백 버퍼에서만 발생합니다. 0은 첫 번째 백 버퍼인가? (Microsoft는 사용자가 특정 경우에만 0을 사용할 수 있다고 말합니다.)

Direct Buffer를 사용할 수 있습니까?

많은 감사,

+0

왜 전면 버퍼가 필요합니까? AA를 제외하고 거의 모든 렌더링 작업은 백 버퍼에서 수행됩니다. – Alex

+0

나는 AA를 원하기 때문에. – user2600628

+0

스왑 체인을 만들면 MSAA를 켤 수있는 멀티 샘플링을 지정할 수 있습니다. MSAA를 원하지 않으면 멀티 샘플링없이 스왑 체인을 만들고 장치의 래스터 라이저 상태에서 AntialiasedLineEnable을 true로 설정할 수 있습니다. 이들 중 어느 것도 사용자를 대신하지 않으면 자동 안티 앨리어싱을 비활성화하고 전체 장면을 렌더링 한 다음 백 버퍼를 가져오고 사용자 정의 셰이더를 통해 AA를 수행하십시오. 그 외에는 할 수있는 일이별로 없습니다. 자세한 내용은 [여기에있는 커뮤니티 콘텐츠] (http://msdn.microsoft.com/en-us/library/windows/desktop/ff476198 (v = vs.85) .aspx)를 참조하십시오. – Alex

답변

2

당신은 (결과 유형에 대한 UUID ID3D11Texture2D 사용) 스왑 체인 표면을 검색 할 IDXGISwapChain::GetBuffer API를 사용해야합니다.

이제 스왑 체인 버퍼를 매핑 할 수 없으므로 스테이징 리소스로 복사해야합니다. 표면 설명에게 D3D11_USAGE_STAGING 사용 및 D3D11_CPU_ACCESS_READ

  • 의 CPU 액세스 플래그
  • 패치를 검색 할 수

    • 사용 ID3D11Texture2D::GetDescID3D11Device::CreateTexture2D
    • 복사 준비 표면 ID3D11DeviceContext::CopyResource
    에 임시 표면을 만들기

    이제 스왑 체인 버퍼 내용이 ID3D11Texture2D이됩니다. ID3D11DeviceContext::Map API를 사용하여 CPU에서 읽을 수 있습니다.

  • +1

    내가 알고있는 것은 백 버퍼라고 생각하거나 오해입니다. 그것이 backbuffer가 아닌 경우 backbuffer는 어디에 있습니까? – user2600628

    +0

    전면 버퍼에 DXGI로 액세스 할 수 없습니다. 백 버퍼에 직접 렌더링하는 것은 거의없고 스왑 체인이 멀티 샘플링을 해결하도록합니다. 단일 샘플 스왑 체인과 추가 다중 샘플 프레임 버퍼를 만든 다음 샘플을 백 버퍼에 병합하려면 'ID3D11DeviceContext :: ResolveSubresource'를 호출 한 다음 프레젠테이션 전에 덤프하는 방법을 설명하십시오. – galop1n

    +0

    Microsoft를 읽을 때 FrontBuffer 만 앤티 앨리어스로 처리되었다고 나와 있습니다. 더 이상 사실이 아닌가? – user2600628