Open if0ne opened 1 month ago
Чем текстура должна отличаться от GPULocalBuffer?
В случае разделения View и Buffer, не хочется и здесь хранить View. Но где тогда? Если с ShaderVisible все понятно это ShaderResource, то вот с RenderTarget etc.?
Чем текстура должна отличаться от GPULocalBuffer?
Формат обязателен, subresource-ы по типу мипов, и доп вьюшки может иметь RenderTarget/Depth
В случае разделения View и Buffer, не хочется и здесь хранить View. Но где тогда? Если с ShaderVisible все понятно это ShaderResource, то вот с RenderTarget etc.?
Я бы здесь хранил View, текстура может разнообразные вью вообще иметь. Можно сделать мапу ViewDesc - View
Загрузка данных в текстуру из массива/вектора байтов
Тут так скорее всего не получится, потому что например DDS текстуры уже могут содержать mipmap (supports single layer textures, textures with mipmaps, cube maps, volume maps and texture arrays (in Direct3D 10/11)).
Нужно иметь промежуточный объект CPU данных текстуры, который будет возвращать AssetLoader (или кто-то другой).
Например 3dgep|ScratchImage.
Загрузка данных в текстуру из массива/вектора байтов
Тут так скорее всего не получится, потому что например DDS текстуры уже могут содержать mipmap (supports single layer textures, textures with mipmaps, cube maps, volume maps and texture arrays (in Direct3D 10/11)).
Нужно иметь промежуточный объект CPU данных текстуры, который будет возвращать AssetLoader (или кто-то другой).
Например 3dgep|ScratchImage.
Не знаю зачем этот ScratchImage, в тул ките уже есть лоадер DDS текстур, который может из памяти (указатель + размер) создать ресурс со всеми мипами, или куб мапу и т.д. Также там можно просто название файла дать, может так быстрее будет.
Так, а если не dds текстура? Делать преобразование всех текстур к dds?
Да, можно передавать поток байт и тип потока, если это DDS использовать DDSTextureLoader, если что-то другое то...
Или можно сделать кучу перегрузок конструктора, на каждый тип.
Так, а если не dds текстура? Делать преобразование всех текстур к dds?
Смотря, что будет в классе Texture. Если там не будет много специфичных данных, то все лоадеры текстур должны выдавать ID3D12Resource и соответственно 1 конструктор нужен от ID3D12Resource. Для других типов можно использовать dx12utils есть UpdateSubresource метод, который на основе промежуточного GPU буфера может сделать текстуру также с мипами, и даже если это TextureArray. Промежуточный буфер можно замапить и memcpy сделать.
Для других типов нужно также использовать WICTextureLoader из TK. Он тоже умеет генерировать mip при загрузке
Я все таки думаю, нужно объединять GPULocalBuffer и Texture в один класс Resource. Соответственно по информации из входящего D3D12_RESOURCE_DESC или его же в пришедшем Resource, будет меняться логика. Главной задачей которого будет: