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 는 알파값을 기본으로 색을 스케일링 한다. 미리 곱셈 끝난 퍼 매트로부터 미리 곱셈이 끝난 상태가 아닌 포맷에의 데이터 전송은 지원하지 않는다. 미리 알파를 곱셈 끝난 전송원으로부터 미리 알파를 곱셈이 끝난 상태가 아닌 목적지에 데이터를 전송 하려고 하면 메서드는 D3DERR_INVALIDCALL 를 돌려준다. 미리 알파를 곱셈 끝난 전송원으로부터 알파가 없는 목적지에 데이터를 전송 하면, 알파로 스케일링 된 전송원색성분은 그대로 복사 된다.

압축 텍스처 표면의 복원

텍스처 표면의 압축과 같이, 압축 텍스처의 복원은 Direct3D 복사 서비스에 의해 실시할 수가 있다.

압축 텍스처 표면을 압축하고 있지 않는 텍스처 표면에 복사 하려면 , 함수 D3DXLoadSurfaceFromSurface 를 사용한다. 이 함수는, 압축한 표면와 압축하고 있지 않는 표면의 사이의 압축 및 복원 처리를 실시한다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP