다음을 통해 공유


너비 대 피치(Direct3D 9)

너비와 피치라는 용어는 비공식적으로 사용되는 경우가 많지만 매우 중요하고 분명히 다른 의미를 갖습니다. 따라서 각각에 대한 의미와 Direct3D가 이를 설명하는 데 사용하는 값을 해석하는 방법을 이해해야 합니다.

Direct3D는 D3DSURFACE_DESC 구조를 사용하여 표면을 설명하는 정보를 전달합니다. 무엇보다도 이 구조체는 표면의 차원에 대한 정보와 해당 차원이 메모리에 표시되는 방식을 포함하도록 정의됩니다. 구조체는 Height 및 Width 멤버를 사용하여 표면의 논리적 차원을 설명합니다. 두 멤버 모두 픽셀 단위로 측정됩니다. 따라서 640 x 480 표면의 Height 및 Width 값은 8비트 표면이든 24비트 RGB 표면이든 동일합니다.

IDirect3DSurface9::LockRect 메서드를 사용하여 표면을 잠그면 메서드는 표면의 피치와 잠긴 비트에 대한 포인터가 포함된 D3DLOCKED_RECT 구조를 채웁니다. 피치 멤버의 값은 보폭이라고도 하는 표면의 메모리 피치를 설명합니다. 피치는 한 비트맵 줄의 시작과 다음 비트맵 줄의 시작을 나타내는 두 메모리 주소 사이의 거리(바이트)입니다. 피치는 픽셀이 아닌 바이트로 측정되므로 640x480x8 표면의 피치 값은 크기가 같지만 픽셀 형식은 다른 표면과는 매우 다릅니다. 또한 피치 값은 경우에 따라 Direct3D가 캐시로 예약한 바이트를 반영하므로 피치가 픽셀당 바이트 수를 곱한 너비일 뿐이라고 가정하는 것은 안전하지 않습니다. 대신 다음 다이어그램과 같이 너비와 피치의 차이를 시각화합니다.

동일한 전면 버퍼, 백 버퍼 및 캐시에 대한 피치 및 너비 다이어그램

이 다이어그램에서 프런트 버퍼와 백 버퍼는 모두 640x480x8이고 캐시는 384x480x8입니다.

표면에 직접 액세스할 때는 표면의 크기에 대해 할당된 메모리 내에 유지하고 캐시용으로 예약된 메모리를 유지합니다. 또한 표면의 일부만 잠그는 경우 표면을 잠글 때 지정한 사각형 내에 있어야 합니다. 이러한 지침을 따르지 않으면 예측할 수 없는 결과가 발생합니다. 표면 메모리로 직접 렌더링할 때는 항상 IDirect3DSurface9::LockRect 메서드에서 반환된 피치를 사용합니다. 디스플레이 모드에만 기반한 피치를 가정하지 마세요. 응용 프로그램이 일부 디스플레이 어댑터에서 작동하지만 다른 디스플레이 어댑터에서 왜곡된 것처럼 보이는 경우 이것이 문제의 원인일 수 있습니다.

자세한 내용은 Surface 메모리 직접 액세스(Direct3D 9)를 참조하세요.

Direct3D Surface