GiiGaTeam / GiiGaEngine

0 stars 0 forks source link

Render Textures #65

Open if0ne opened 1 month ago

if0ne commented 1 month ago
damibran commented 5 days ago

Чем текстура должна отличаться от GPULocalBuffer?

В случае разделения View и Buffer, не хочется и здесь хранить View. Но где тогда? Если с ShaderVisible все понятно это ShaderResource, то вот с RenderTarget etc.?

if0ne commented 5 days ago

Чем текстура должна отличаться от GPULocalBuffer?

Формат обязателен, subresource-ы по типу мипов, и доп вьюшки может иметь RenderTarget/Depth

if0ne commented 5 days ago

В случае разделения View и Buffer, не хочется и здесь хранить View. Но где тогда? Если с ShaderVisible все понятно это ShaderResource, то вот с RenderTarget etc.?

Я бы здесь хранил View, текстура может разнообразные вью вообще иметь. Можно сделать мапу ViewDesc - View

damibran commented 5 days ago

Загрузка данных в текстуру из массива/вектора байтов

Тут так скорее всего не получится, потому что например DDS текстуры уже могут содержать mipmap (supports single layer textures, textures with mipmaps, cube maps, volume maps and texture arrays (in Direct3D 10/11)).

Нужно иметь промежуточный объект CPU данных текстуры, который будет возвращать AssetLoader (или кто-то другой).

Например 3dgep|ScratchImage.

if0ne commented 5 days ago

Загрузка данных в текстуру из массива/вектора байтов

Тут так скорее всего не получится, потому что например 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 текстур, который может из памяти (указатель + размер) создать ресурс со всеми мипами, или куб мапу и т.д. Также там можно просто название файла дать, может так быстрее будет.

damibran commented 5 days ago

Так, а если не dds текстура? Делать преобразование всех текстур к dds?

damibran commented 5 days ago

Да, можно передавать поток байт и тип потока, если это DDS использовать DDSTextureLoader, если что-то другое то...

Или можно сделать кучу перегрузок конструктора, на каждый тип.

if0ne commented 5 days ago

Так, а если не dds текстура? Делать преобразование всех текстур к dds?

Смотря, что будет в классе Texture. Если там не будет много специфичных данных, то все лоадеры текстур должны выдавать ID3D12Resource и соответственно 1 конструктор нужен от ID3D12Resource. Для других типов можно использовать dx12utils есть UpdateSubresource метод, который на основе промежуточного GPU буфера может сделать текстуру также с мипами, и даже если это TextureArray. Промежуточный буфер можно замапить и memcpy сделать.

damibran commented 3 days ago

Для других типов нужно также использовать WICTextureLoader из TK. Он тоже умеет генерировать mip при загрузке

damibran commented 3 days ago

Я все таки думаю, нужно объединять GPULocalBuffer и Texture в один класс Resource. Соответственно по информации из входящего D3D12_RESOURCE_DESC или его же в пришедшем Resource, будет меняться логика. Главной задачей которого будет:

  1. Объединение ресурса и всех View (опять же есть проблема с Index Vertex, просто map не получиться, но решаемо тот же Variant)
  2. Отслеживание состояния
  3. Реализация функции обновления содержимого