Share via


감마 컨트롤(Direct3D 9)

감마 컨트롤을 사용하면 표면 자체의 내용에 영향을 주지 않고 시스템이 표면의 내용을 표시하는 방법을 변경할 수 있습니다. 이러한 컨트롤은 Direct3D가 표면을 벗어나 화면에 렌더링되기 전에 데이터에 적용되는 매우 간단한 필터라고 생각합니다.

감마 컨트롤은 스왑 체인의 속성입니다. 감마 컨트롤을 사용하면 표면의 빨간색, 녹색 및 파란색 수준이 시스템이 표시하는 실제 수준에 매핑되는 방식을 동적으로 변경할 수 있습니다. 감마 수준을 설정하면 효과를 얻기 위해 프레임 버퍼에 새 이미지를 복사하지 않고도 사용자의 화면이 빨간색으로 깜박이고, 문자가 새 항목을 선택할 때 녹색으로 표시될 수 있습니다. 또는 색 수준을 조정하여 백 버퍼의 이미지에 색 편향을 적용할 수 있습니다.

Direct3D 9에는 디바이스의 속성으로 하나의 스왑 체인이 있기 때문에 각 디바이스에 대해 항상 하나 이상의 스왑 체인(암시적 스왑 체인)이 있습니다. 감마 램프는 스왑 체인의 속성이므로 스왑 체인이 창에 있을 때 감마 램프를 적용할 수 있습니다. 감마 램프는 즉시 적용됩니다. 수직 동기화 작업을 기다리지 않습니다.

SetGammaRampGetGammaRamp 메서드를 사용하면 디스플레이를 위해 DAC(디지털-아날로그 변환기)로 전송되기 전에 표면에서 픽셀의 빨간색, 녹색 및 파란색 구성 요소에 영향을 주는 램프 수준을 조작할 수 있습니다.

감마 램프 수준

Direct3D에서 감마 램프라는 용어는 프레임 버퍼의 모든 픽셀에 대해 특정 색 구성 요소의 수준(빨강, 녹색, 파랑)을 디스플레이를 위해 DAC에서 수신하는 새 수준으로 매핑하는 값 집합을 설명합니다. 다시 매핑은 각 색 구성 요소에 대해 하나씩 세 개의 조회 테이블을 통해 수행됩니다.

작동 방식은 다음과 같습니다. Direct3D는 프레임 버퍼에서 픽셀을 가져와 개별 빨간색, 녹색 및 파란색 구성 요소를 평가합니다. 각 구성 요소는 0에서 65535까지의 값으로 표시됩니다. Direct3D는 원래 값을 사용하여 256개 요소 배열(램프)을 인덱싱합니다. 여기서 각 요소에는 원래 값을 대체하는 값이 포함됩니다. Direct3D는 프레임 버퍼에서 각 픽셀의 각 색상 구성 요소에 대해 이 조회 및 바꾸기 프로세스를 수행하여 모든 화면 픽셀에 대한 최종 색을 변경합니다.

다음 두 그래프와 같이 램프 값을 그래프로 표시하여 시각화하는 것이 편리합니다. 왼쪽 그래프는 색을 전혀 수정하지 않는 램프를 보여 줍니다. 오른쪽 그래프는 적용된 색 구성 요소에 음의 바이어스를 적용하는 램프를 보여 줍니다.

감마 램프 값의 그래프

왼쪽 그래프의 배열 요소에는 인덱스 0의 요소에서 0, 인덱스 255에서 65535와 동일한 값이 포함됩니다. 이 유형의 램프는 입력 값이 표시되기 전에 변경되지 않으므로 기본값입니다. 오른쪽 그래프는 더 많은 변형을 제공합니다. 해당 램프에는 첫 번째 요소의 0에서 마지막 요소의 32768까지의 값이 포함되며 그 사이에 균일하게 범위가 지정됩니다. 이 램프를 사용하는 색 구성 요소가 디스플레이에 음소거된 것처럼 보입니다. 선형 그래프 사용으로 제한되지 않습니다. 필요한 경우 애플리케이션이 임의 매핑을 할당할 수 있으면 입니다. 항목을 모든 0으로 설정하여 디스플레이에서 색 구성 요소를 완전히 제거할 수도 있습니다.

감마 램프 수준 설정 및 검색

감마 램프 수준은 Direct3D가 프레임 버퍼 색 구성 요소를 표시할 새 수준에 매핑하는 데 사용하는 효과적으로 조회 테이블입니다. SetGammaRamp 및 GetGammaRamp 메서드를 호출하여 기본 표면에 대한 램프 수준을 설정하고 검색 수 있습니다. SetGammaRamp 는 두 개의 매개 변수를 허용하고 GetGammaRamp는 하나의 매개 변수를 허용합니다. SetGammaRamp의 경우 첫 번째 매개 변수는 D3DSGR_CALIBRATE 또는 D3DSGR_NO_CALIBRATION. 두 번째 매개 변수인 pRamp는 D3DGAMMARAMP 구조체에 대한 포인터입니다. D3DGAMMARAMP 구조체에는 256개 요소의 WORD 배열 3개가 포함되어 있으며, 각각 1개 배열은 빨간색, 녹색 및 파란색 감마 램프를 포함합니다. GetGammaRamp 에는 현재 감마 램프로 채워질 D3DGAMMARAMP 형식에 대한 포인터를 사용하는 하나의 매개 변수가 있습니다.

SetGammaRamp의 첫 번째 매개 변수에 대한 D3DSGR_CALIBRATE 값을 포함하여 새 감마 수준을 설정할 때 보정기를 호출할 수 있습니다. 감마 램프를 보정하면 일부 처리 오버헤드가 발생하며 자주 사용해서는 안 됩니다. 보정된 감마 램프를 설정하면 디스플레이 어댑터 및 모니터에 관계없이 사용자에게 일관되고 절대적인 감마 값이 제공됩니다.

모든 시스템에서 감마 보정을 지원하는 것은 아닙니다. 감마 보정이 지원되는지 확인하려면 GetDeviceCaps를 호출하고 메서드가 반환된 후 연결된 D3DCAPS9 구조체의 Caps2 멤버를 검사합니다. D3DCAPS2_CANCALIBRATEGAMMA 기능 플래그가 있는 경우 감마 보정이 지원됩니다.

새 램프 수준을 설정할 때 배열에서 설정한 수준은 애플리케이션이 전체 화면 전용 모드인 경우에만 사용된다는 점을 명심하세요. 애플리케이션이 표준 모드로 변경되면 램프 수준이 따로 설정되고 애플리케이션이 전체 화면 모드를 복원할 때 다시 적용됩니다.

디바이스가 스왑 체인의 현재 프레젠테이션 모드(전체 화면 또는 창)에서 감마 램프를 지원하지 않는 경우 오류 값이 반환되지 않습니다. 애플리케이션은 D3DCAPS9 유형의 Caps2 멤버에서 D3DCAPS2_FULLSCREENGAMMA 및 D3DCAPS2_CANCALIBRATEGAMMA 기능 비트를 검사 디바이스의 기능과 보정기가 설치되어 있는지 여부를 확인할 수 있습니다.

Direct3D Surface