압축된 텍스처 사용(Direct3D 9)

압축된 텍스처에 대한 지원 결정

어댑터를 테스트하려면 DXT1, DXT2, DXT3, DXT4 또는 DXT5를 사용하는 픽셀 형식을 지정합니다. IDirect3D9::CheckDeviceFormat이 D3D_OK 반환하는 경우 디바이스는 해당 형식을 사용하는 압축된 텍스처 표면에서 직접 텍스처를 만들 수 있습니다. 그렇다면 IDirect3DDevice9::SetTexture 메서드를 호출하여 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을 사용하여 검색된 화면에 이미지를 로드할 수 있습니다. 이러한 함수는 압축된 텍스처 형식으로의 변환을 처리합니다.

DirectX SDK와 함께 제공되는 DirectX 텍스처 편집기(Dxtex.exe)를 사용하여 DDS(압축 텍스처) 파일을 만들고 변환할 수 있습니다. Dxtex.exe DirectX SDK에서 자세히 알아볼 수 있습니다. DirectX SDK에 대한 자세한 내용은 DirectX SDK는 어디에 있나요?를 참조하세요.

이 동작의 장점은 애플리케이션이 특정 형식의 특정 너비 및 높이 표면에 필요한 스토리지 양을 계산하지 않고 압축된 표면의 내용을 파일에 복사할 수 있다는 것입니다.

다음 표에서는 5가지 유형의 압축된 텍스처를 보여 줍니다. 데이터가 저장되는 방법에 대한 자세한 내용은 압축된 질감 형식(Direct3D 9)을 참조하세요. 사용자 고유의 압축 루틴을 작성하는 경우에만 이 정보가 필요합니다.

Fourcc 설명 알파 미리 곱하기?
DXT1 불투명/1비트 알파 해당 없음
DXT2 명시적 알파 Yes
DXT3 명시적 알파 No
DXT4 보간된 알파 Yes
DXT5 보간된 알파 No

 

데이터를 곱하지 않은 형식에서 미리 곱한 형식으로 전송하는 경우 Direct3D는 알파 값에 따라 색의 크기를 조정합니다. 미리 곱한 형식에서 설명이 아닌 형식으로 데이터를 전송하는 것은 지원되지 않습니다. 미리 곱한 알파 원본에서 설명이 없는 알파 대상으로 데이터를 전송하려고 하면 메서드는 D3DERR_INVALIDCALL 반환합니다. 미리 곱한 알파 원본에서 알파가 없는 대상으로 데이터를 전송하는 경우 알파로 크기가 조정된 원본 색 구성 요소가 있는 그대로 복사됩니다.

압축된 텍스처 표면 압축 해제

텍스처 표면 압축과 마찬가지로 압축된 텍스처의 압축 해제는 Direct3D 복사 서비스를 통해 수행됩니다.

압축된 텍스처 표면을 압축되지 않은 텍스처 표면에 복사하려면 D3DXLoadSurfaceFromSurface 함수를 사용합니다. 이 함수는 압축된 표면과 압축되지 않은 표면의 압축을 처리합니다.

압축된 텍스처 리소스