DirectX Graphics 프로그래밍 가이드 고정 기능 파이프라인 텍스처 압축 텍스처 리소스 압축 텍스처의 사용법 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
애플리케이션으로 렌더링 장치를 생성 하기 전에,IDirect3D9::CheckDeviceFormat 메서드를 호출해, 압축 텍스처 표면으로부터의 텍스처 처리를 장치가 지원 할지 어떨지를 조사할 수가 있다. 이 메서드는, 어댑터를 나타내는 장치상에서 표면 포맷을 텍스처로서 사용할 수 있을지 어떨지를 판정한다.
어댑터를 테스트하려면 , DXT1, DXT2, DXT3, DXT4, 또는 DXT5 의 FOURCC 코드를 사용하는 픽셀 포맷의 어느쪽이든을 지정한다. IDirect3D9::CheckDeviceFormat 가 D3D_OK 를 돌려주었을 경우, 장치는 그 포맷을 사용하는 압축 텍스처 표면으로부터 직접 텍스처를 취득할 수 있다. 이 경우,IDirect3DDevice9::SetTexture 메서드를 호출해, Microsoft® Direct3D® 로 압축 텍스처 표면을 직접 사용할 수 있다. 다음 코드는, 어댑터가 압축 텍스처 포맷을 지원 할지 어떨지를 판정하는 방법을 나타내고 있다.
BOOL IsCompressedTextureFormatOk( D3DFORMAT TextureFormat, D3DFORMAT AdapterFormat ) { HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, AdapterFormat, 0, D3DRTYPE_TEXTURE, TextureFormat); return SUCCEEDED( hr ); }
장치가 압축 텍스처 표면으로부터의 텍스처 처리를 지원 하지 않는 경우에서도, 텍스처 데이터를 압축 포맷 표면내에 저장 할 수 있다. 다만, 압축 텍스처를 텍스처로서 사용하기 전에, 지원 되는 포맷으로 변환해야 한다.
어댑터로 압축 텍스처 포맷을 지원 할 수 있는 장치를 생성 하면, 압축 텍스처 소스를 생성 할 수 있다. IDirect3DDevice9::CreateTexture 를 호출해,Format 파라미터에 압축 텍스처 포맷을 지정한다.
텍스처 개체에 화면을 로드하기 전에,IDirect3DTexture9::GetSurfaceLevel 메서드를 호출해, 텍스처 표면의 포인터를 얻어온다.
이것으로,D3DXLoadSurfacexxx 함수를 사용해,IDirect3DTexture9::GetSurfaceLevel 로 취득한 표면에 화면을 로드할 수 있다. 이러한 함수는, 압축 텍스처 포맷간의 변환을 처리한다.
소프트웨어 개발 킷 (SDK)으로 제공되는 DXTex 툴을 사용하면 압축 텍스처 (DDS) 파일의 생성과 변환을 실시할 수가 있다.
이 동작의 이점은, 애플리케이션으로, 특정의 포맷으로 특정의 폭과 높이를 가지는 표면에 필요한 스토리지 용량을 계산하지 않아도 압축한 표면의 컨텐츠를 파일에 복사 할 수 있는 것이다.
압축 텍스처의 5 개의 타입을 이하의 표에 나타낸다. 데이터의 보존 방법의 더 자세한 정보는, 「압축 텍스처 포맷」을 참조할것. 다음의 정보는, 독자적인 압축 루틴을 기술하는 경우에 필요하다.
FOURCC | 설명 | 미리 알파로 곱셈이 끝난 상태일지 어떨지 |
---|---|---|
DXT1 | 불투명 / 1 비트 알파 | N/A |
DXT2 | 명시적인 알파 | 네 |
DXT3 | 명시적인 알파 | 아니오 |
DXT4 | 보간 알파 | 네 |
DXT5 | 보간 알파 | 아니오 |
텍스처 표면의 압축과 같이, 압축 텍스처의 복원은 Direct3D 복사 서비스에 의해 실시할 수가 있다.
압축 텍스처 표면을 압축하고 있지 않는 텍스처 표면에 복사 하려면 , 함수 D3DXLoadSurfaceFromSurface 를 사용한다. 이 함수는, 압축한 표면와 압축하고 있지 않는 표면의 사이의 압축 및 복원 처리를 실시한다.