ПрограммированиеФорумГрафика

Загрузка текстуры и получение ее массива байтов DX 11

Страницы: 1 2 Следующая »
#0
6:47, 14 июня 2019

Доброго времени суток! Для загрузки текстур я использую функцию

D3DX11CreateShaderResourceViewFromFile 

. На сайте microsoft говорится это нежелательная функция. А какой пользуетесь вы?
И еще вопросик: загружается этой функцией текстура в переменную типа ID3D11ShaderResourceView.
Что бы получить массив байтов этой текстуры, как я понял, можно использовать  m_d3dContext->Map и массив байтов будет находиться здесь mappedResource.pData, но функция Map принимает первым аргументом ID3D11Resource такой тип, а не ID3D11ShaderResourceView. Как быть в этом случае?

#1
9:52, 14 июня 2019

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

#2
9:53, 14 июня 2019

D3DX сам по себе легаси говно, учитывая что загружалка png под любое гапи пишется за 5 минут. Потому его и не рекомендуют.

#3
12:25, 14 июня 2019

А как на счёт того, чтоб грузить нативные сжатые форматы BC4-BC7? После того, как я о них узнал, не пользуюсь больше ничем, даже не поленился свой контейнер для текстур под движок заточить.
Ещё чем удобно, жмёшь всё в оффлайн и в движок текстуры грузятся моментально. Они даже дополнительно жмутся ZIP`ом, если собираешь игровые ассеты в архивы и грузишь уже из них.

#4
12:39, 14 июня 2019

helldrg
> А какой пользуетесь вы?
fopen->fread->дальше как Dimich :D

fclose

Загружаю DDSки. Классическая ддс это 128 байт заголовок (из которого можно прочитать релевантную инфу по фиксированным оффсетам) и массив байт, готовый к отправке на GPU.

#5
12:40, 14 июня 2019

helldrg
Юзаю свой собственный формат, пока только несжатый RGBA,
планирую прикрутить к нему дефлейт.

#6
12:41, 14 июня 2019

nes
> планирую прикрутить к нему дефлейт.
Рекомендую прикрутить LZ4.

#7
12:44, 14 июня 2019

Кстати странно) Под opengl все примеры юзают сторонние SDL_image, stbi и тд. А просто примеров загрузить текстуру в dx11 без d3dx очень мало.

#8
13:16, 14 июня 2019

Mr F
deflate лучше сжимает, имхо по степени сжатия и скорости распаковки, это лучший вариант.

#9
13:30, 14 июня 2019

helldrg,
Есть библиотека от Microsoft - DirectXTK Они рекомендуют пользовать её.

Функции при загрузке сразу создают  ID3D11Resource и ID3D11ShaderResourceView

смотри:

CreateWICTextureFromMemoryEx
CreateDDSTextureFromMemory

или из файлов, если удобнее тебе из файлов грузить.


Да, чтобы получить массив байтов этой текстуры на CPU, нужно использовать  m_d3dContext->Map

#10
14:07, 14 июня 2019

nes
> по степени сжатия и скорости распаковки
По степени сжатия да, по скорости распаковки нет (см. сравнение в табличке: https://github.com/lz4/lz4)

#11
14:12, 14 июня 2019

Спасибо всем! dds не удобно конвертировать. Нарисовал что нибудь в фотошопе, сохраняешь, открываешь старый фотошоп, где работает плагин от нвидиа для сохраненения в dds формат. Кстати, я всегда через этот плагин делал ddsки, а вы как?

#12
14:27, 14 июня 2019

helldrg
> Кстати, я всегда через этот плагин делал ddsки, а вы как?
Плагин сохраняет DDS только старых форматов (BC1-BC3), используй AMD Compressonator, чтоб сохранять DDS в более современных и качественных форматах (BC4-BC7).
Compressonator есть, как GUI, так и консольный, я вообще его использую как библиотеку в своём конвертере.

#13
14:28, 14 июня 2019

helldrg
Сохраняй во что хочешь, потом грузи библиотекой, я рекомендую stb_image для быстрой разработки.

#14
14:30, 14 июня 2019

Dimich
> я рекомендую stb_image для быстрой разработки
Если делать серьёзно, то грузить нужно ручками, а не библиотеками. Если только ручки не из жопки растут...

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.