Доброго времени суток! Для загрузки текстур я использую функцию
D3DX11CreateShaderResourceViewFromFile
. На сайте microsoft говорится это нежелательная функция. А какой пользуетесь вы?
И еще вопросик: загружается этой функцией текстура в переменную типа ID3D11ShaderResourceView.
Что бы получить массив байтов этой текстуры, как я понял, можно использовать m_d3dContext->Map и массив байтов будет находиться здесь mappedResource.pData, но функция Map принимает первым аргументом ID3D11Resource такой тип, а не ID3D11ShaderResourceView. Как быть в этом случае?
helldrg
> На сайте microsoft говорится это нежелательная функция. А какой пользуетесь вы?
https://docs.microsoft.com/en-us/windows/desktop/api/d3d11/nf-d3d… eatetexture2d
https://docs.microsoft.com/en-us/windows/desktop/api/d3d11/nf-d3d… rresourceview
D3DX сам по себе легаси говно, учитывая что загружалка png под любое гапи пишется за 5 минут. Потому его и не рекомендуют.
А как на счёт того, чтоб грузить нативные сжатые форматы BC4-BC7? После того, как я о них узнал, не пользуюсь больше ничем, даже не поленился свой контейнер для текстур под движок заточить.
Ещё чем удобно, жмёшь всё в оффлайн и в движок текстуры грузятся моментально. Они даже дополнительно жмутся ZIP`ом, если собираешь игровые ассеты в архивы и грузишь уже из них.
helldrg
> А какой пользуетесь вы?
fopen->fread->дальше как Dimich :D
fclose
Загружаю DDSки. Классическая ддс это 128 байт заголовок (из которого можно прочитать релевантную инфу по фиксированным оффсетам) и массив байт, готовый к отправке на GPU.
helldrg
Юзаю свой собственный формат, пока только несжатый RGBA,
планирую прикрутить к нему дефлейт.
nes
> планирую прикрутить к нему дефлейт.
Рекомендую прикрутить LZ4.
Кстати странно) Под opengl все примеры юзают сторонние SDL_image, stbi и тд. А просто примеров загрузить текстуру в dx11 без d3dx очень мало.
Mr F
deflate лучше сжимает, имхо по степени сжатия и скорости распаковки, это лучший вариант.
helldrg,
Есть библиотека от Microsoft - DirectXTK Они рекомендуют пользовать её.
Функции при загрузке сразу создают ID3D11Resource и ID3D11ShaderResourceView
смотри:
CreateWICTextureFromMemoryEx CreateDDSTextureFromMemory
или из файлов, если удобнее тебе из файлов грузить.
Да, чтобы получить массив байтов этой текстуры на CPU, нужно использовать m_d3dContext->Map
nes
> по степени сжатия и скорости распаковки
По степени сжатия да, по скорости распаковки нет (см. сравнение в табличке: https://github.com/lz4/lz4)
Спасибо всем! dds не удобно конвертировать. Нарисовал что нибудь в фотошопе, сохраняешь, открываешь старый фотошоп, где работает плагин от нвидиа для сохраненения в dds формат. Кстати, я всегда через этот плагин делал ddsки, а вы как?
helldrg
> Кстати, я всегда через этот плагин делал ddsки, а вы как?
Плагин сохраняет DDS только старых форматов (BC1-BC3), используй AMD Compressonator, чтоб сохранять DDS в более современных и качественных форматах (BC4-BC7).
Compressonator есть, как GUI, так и консольный, я вообще его использую как библиотеку в своём конвертере.
helldrg
Сохраняй во что хочешь, потом грузи библиотекой, я рекомендую stb_image для быстрой разработки.
Dimich
> я рекомендую stb_image для быстрой разработки
Если делать серьёзно, то грузить нужно ручками, а не библиотеками. Если только ручки не из жопки растут...
Тема в архиве.