2017-05-15 10 views
1

DirectX C++ Windows 응용 프로그램에서 10 비트 색상에 대한 지원을 추가하고 싶습니다. DXGI_FORMAT_R10G10B10A2_UNORM을 사용하여 RGB 채널 당 10 비트 (RGB의 경우 총 30 비트)를 말합니다.디스플레이에서 10 비트 색상 지원 감지

시스템이이를 지원하는지, 디스플레이 모니터가 실제로이 모드를 지원하는지 어떻게 감지합니까?

예를 들어, 나는 디스플레이 모드 목록을 열거하고 있습니다 때문에 :

IDXGIOutput *output=null; for(Int i=0; OK(adapter->EnumOutputs(i, &output)); i++) 
    { 
    DXGI_FORMAT mode=DXGI_FORMAT_R10G10B10A2_UNORM; 
    UInt descs_elms=0; output->GetDisplayModeList(mode, 0, &descs_elms, null); // get number of mode descs 
    RELEASE(output); 
    } 

그리고 내 노트북 ​​디스플레이가 10 비트를 지원하지 않는 경우에도, 나는 아직도 해상도의 목록을 포함하여 유효한 결과를 얻을 수 있습니다. 나중에 10 비트를 가진 전체 화면 스왑 체인을 만들 수 있으며 모두 정상적으로 작동합니다.

그러나 모니터가 10 비트인지 8 비트인지 알 수 없기 때문에 수동으로 일부 디더링을 적용하여 10 비트를 시뮬레이션해야하는지 여부는 알 수 없습니다.

디스플레이가 실제로 10 비트 = 디더링이 필요하지 않거나 8 비트 == 그러면 사용자 정의 디더링 셰이더가 적용됩니다.

저는 클래식 Win32/WinAPI와 새로운 유니버설 윈도우 플랫폼 (그래서 두 플랫폼 모두를위한 솔루션 필요)과 함께 작업하고 있습니다.

답변

0

이 실제로을 지원하는지 10 비트 모델이 실제로 8 비트 + 디더 (많은 8 비트 모델이 단지 6 비트 일 때)이기 때문에 10 비트 모드를 지원하는지 여부는 매우 까다로운 것으로 보입니다. 비트 + 디더). 적어도 일부 소프트웨어에서는 필자가 그러한 확인 작업에 익숙했는데 디스플레이 모델의 화이트리스트를 통해 구현되었습니다. 그래서 항상 DXGI_FORMAT_R16G16B16A16_FLOAT (이 어댑터는 아마도 대부분의 어댑터에서 지원됩니다) 또는 DXGI_FORMAT_R32G32B32A32_FLOAT을 출력 형식으로 사용하고 시스템이 디스플레이 예상에 따라 변환하도록하는 것이 더 좋을 것이라고 생각합니다. 사용자 정의 디더링은 사용자에게 옵션으로 남겨 둘 수 있습니다.

1

디더링을 켜고 끄고 스왑 체인에 DXGI_FORMAT_R10G10B10A2_UNORM을 사용하는 것 같은 사용자 설정이 더 좋습니다.

DXGI_FORMAT_R10G10B10A2_UNORM도 유효한 HDR 형식이지만 ST.2084 색상 곡선을 수동으로 적용하고 넓은 영역 (예 : HDR10)을 사용하기 위해 색상 공간을 적절하게 설정해야합니다. DXGI_FORMAT_R16G16B16A16_FLOAT을 사용하여 선형 색상 공간에서 렌더링 할 수 있지만 시스템에이를 그대로 두어 기대하는 것과 다를 수있는 '올바른'것을 수행합니다. DWM은 8 비트로 변환되기 때문에

비 HDR/4kUHD 시나리오의 경우, 당신은 정말 어쨌든 창 모드 또는 UWP CoreWindows swapchains 8 비트보다 더 많은 것을 얻을 수 없습니다. Win32 '클래식'데스크톱 응용 프로그램을위한 10 비트 스캔은 독점 전체 화면 모드로 가능하지만 많은 변수가 있습니다 (예 : DVI 케이블이이를 지원하지 않음).

High Dynamic Range and Wide Color Gamut뿐만 아니라 D3D12HDR 샘플 Win32/UWP

+0

안녕 척을 참조하십시오 답장을 주셔서 대단히 감사합니다. 이것이 내가 현재하고있는 일입니다. 현재로서는 사용자 설정이있는 최상의 솔루션입니다. 그러나 몇 가지 단점이 있습니다. 사용자가이 기능을 자동 감지하지 않고 설정해야하는 불편 함이 있으며, 또 다른 문제는 사용자가 모니터가 지원하는 기능을 알지 못하고 사용자가 잘못 선택한 경우 실제로 더 나쁜 품질을 얻는다. 예를 들어 그는 10 비트 정밀도를 선택할 수 있습니다. 8 비트보다 품질이 좋을 것이라고 생각합니다. – Esenthel

+0

그러나 실제로 10 비트 설정에서는 디더링 셰이더가 비활성화되고 모니터가 8 비트이면 디더링 셰이더 없이는 더 나빠 보입니다. 해당 사용자 설정에서이 옵션의 역할을 명확히해야합니다. 가장 좋은 방법은 DirectX에서 실제로 지원되는 대상과 그렇지 않은 대상을 검색하는 옵션을 제공하는 것입니다. 앞으로 추가 될 새로운 기능을 요청하고 싶습니다. BTW. 이것은 내 게임 엔진입니다. 개발에 수년이 걸렸습니다. http://www.esenthel.com/ – Esenthel