DirectX Graphics 프로그래밍 가이드 고정 기능 파이프라인 텍스처 표면 폭과 피치   [목차열람] [주소복사] [슬롯비우기]
폭과 피치
 
Microsoft DirectX 9.0

폭과 피치


피치라고 하는 단어로부터 어느 정도 상상할 수 있지만, 매우 중요한, 그리고 분명하게 다른 의미가 있다. 따라서, 그 의미와 Microsoft® Direct3D® 로 폭과 피치의 기술에 사용하는 값의 해석 방법을 이해할 필요가 있다.

Direct3D 에서는,D3DSURFACE_DESC 구조체를 사용해 표면을 기술하는 정보를 전달한다. 그 밖에도, 이 넓이의 메모리내에서의 표시 방법과 함께, 이 구조체는 표면의 넓이의 정보를 포함하도록(듯이) 정의되고 있다. 이 구조체에서는 Height 멤버와 Width 멤버를 사용해, 표면의 논리적인 넓이를 기술한다. 양쪽 모두의 멤버는 픽셀 단위로 나타낸다. 그 때문에, 640 × 480 의 표면에 대한 Height 값과 Width 값은, 8 비트의 표면나 24 비트의 RGB 표면인가에 관계없이 같게 된다.

IDirect3DSurface9::LockRect 메서드를 사용해 표면을 잠그면 이 메서드는 표면의 피치와 잠금 된 비트의 포인터를 포함한 D3DLOCKED_RECT 구조체에 데이터를 설정한다. Pitch 멤버의 값은, 표면의 메모리 피치 (또는,보폭이라고 부른다)를 기술한다. 피치는, 2 개의 메모리 주소간 (있는 비트 맵 라인의 시점과 다음의 비트 맵 라인의 시점)의 거리이다 (바이트 단위). 피치는 픽셀은 아니고 바이트 단위로 표현되기 위해서(때문에), 640 × 480 × 8 의 표면은, 다른 픽셀 포맷의 같은 넓이의 표면와는 꽤 다른 피치의 값을 갖는다. 게다가 피치의 값은 Direct3D 가 캐쉬로서 확보하는 바이트를 반영하는 일도 있으므로, 단지 피치를 픽셀 단위의 바이트수를 건 폭이라고 가정할 수 없다. 다음 그림은 폭과 피치의 차이를 나타내고 있다.

피치와 폭의 차이

위의도에서는,프론트 버퍼백 버퍼는 어느쪽이나 640 × 480 × 8 으로, 캐쉬는 384 × 480 × 8 이다.

표면에 직접 액세스 하는 경우, 표면의 넓이에 대해서 할당된 메모리의 범위내에 액세스 하는 것으로, 캐쉬용으로 확보된 메모리에 액세스 하지 않는 것에 주의한다. 게다가 표면의 포인터만을 잠그는 경우, 표면을 잠글 때 지정하는 직사각형의 범위내에 두지 않으면 안 된다. 이것에 따르지 않다고 예측 불가능한 결과가 생긴다. 표면 메모리에 직접 렌더링 할 때는,IDirect3DSurface9::LockRect 메서드가 돌려주는 피치를 항상 사용한다. 단지, 디스플레이 모드에 근거하는 피치를 가정해 사용해서는 안 된다. 다른 원인에 의해 정상적으로 동작하지 않게 된 몇개의 디스플레이 어댑터상에서 애플리케이션이 동작하는 경우는, 문제가 생길 가능성이 있다.

더 자세한 정보는, 「표면 메모리에 직접 액세스하기」를 참조할것.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP