Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Определение поддержки сжатых текстур
Чтобы протестировать адаптер, укажите любой формат пикселей, использующий DXT1, DXT2, DXT3, DXT4 или DXT5. Если IDirect3D9::CheckDeviceFormat возвращает D3D_OK, устройство может создать текстуру непосредственно из сжатой поверхности текстуры, которая использует этот формат. Если это так, можно использовать сжатые поверхности текстуры непосредственно с Direct3D, вызвав метод IDirect3Device9::SetTexture. В следующем примере кода показано, поддерживает ли адаптер сжатый формат текстуры.
BOOL IsCompressedTextureFormatOk( D3DFORMAT TextureFormat,
D3DFORMAT AdapterFormat )
{
HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
AdapterFormat,
0,
D3DRTYPE_TEXTURE,
TextureFormat);
return SUCCEEDED( hr );
}
Если устройство не поддерживает текстурирование из сжатых поверхностей текстур, вы по-прежнему можете хранить данные текстур в сжатой области форматирования, но необходимо преобразовать любые сжатые текстуры в поддерживаемый формат, прежде чем их можно будет использовать для текстурирования.
Создание сжатых текстур
После создания устройства, поддерживающего сжатый формат текстуры на адаптере, можно создать сжатый ресурс текстуры. Вызовите IDirect3Device9::CreateTexture и укажите сжатый формат текстуры для параметра Format.
Перед загрузкой изображения в объект текстуры получите указатель на поверхность текстуры, вызвав метод IDirect3DTexture9::GetSurfaceLevel.
Теперь можно использовать любую функцию D3DXLoadSurfacexxxx для загрузки изображения на поверхность, полученную с помощью IDirect3DTexture9::GetSurfaceLevel. Эти функции обрабатывают преобразование в и из сжатых форматов текстур.
Вы можете создавать и преобразовывать сжатые файлы текстур (DDS) с помощью редактора текстур DirectX (Dxtex.exe), предоставленного пакетом SDK DirectX. Вы можете получить Dxtex.exe из пакета DirectX SDK и узнать о нём. Дополнительные сведения о пакете SDK DirectX см. в разделе Где находится пакет SDK DirectX?.
Преимуществом этого поведения является то, что приложение может скопировать содержимое сжатой поверхности в файл, не вычисляя, сколько хранилища требуется для поверхности определенной ширины и высоты в определенном формате.
В следующей таблице показаны пять типов сжатых текстур. Для получения дополнительной информации о том, как хранятся данные, смотрите в разделе Сжатые форматы текстур (Direct3D 9). Эти сведения требуются только в том случае, если вы пишете собственные подпрограммы сжатия.
| FOURCC | Описание | Предварительно умножена альфа? |
|---|---|---|
| DXT1 | Непрозрачный и 1-разрядный альфа-канал | N/A |
| DXT2 | Явный альфа-канал | Да |
| DXT3 | Явный альфа-канал | Нет |
| DXT4 | Интерполированный альфа | Да |
| DXT5 | Интерполированный альфа | Нет |
При передаче данных из непремультиплицированного формата в премультиплицированный формат Direct3D масштабирует цвета, основываясь на альфа-значениях. Перенос данных из предварительно заданного формата в нерекоменданный формат не поддерживается. Если вы пытаетесь передать данные из предварительно умноженного альфа-источника в неумноженное альфа-назначение, метод возвращает D3DERR_INVALIDCALL. Если вы передаете данные из источника с предварительным умножением альфа в пункт назначения, в котором нет альфа, исходные компоненты цвета, которые были масштабированы альфа, копируются в неизменном виде.
Распаковка поверхностей сжатых текстур
Как и при сжатие поверхности текстуры, распаковка сжатой текстуры выполняется через службы копирования Direct3D.
Чтобы скопировать сжатые поверхности текстуры в несжатую поверхность текстуры, используйте функцию D3DXLoadSurfaceFromSurface. Эти функции обрабатывают сжатие в сжатые и несжатые поверхности.
Связанные разделы