2016-12-20 13 views
0

Я пытаюсь написать свое первое приложение DX12. У меня нет опыта в DX11. Я хотел бы показать некоторые жесткие и некоторые мягкие объекты. Без текстур на данный момент. Поэтому мне нужно разместить в GPU несколько буферов вершин/индексов, которые я никогда не изменю позже, а некоторые, которые я изменю. И сцена сама по себе не статична, поэтому могут появляться новые объекты, а некоторые могут исчезнуть.Как я могу выделить/заполнить/обновить память на GPU для разных типов объектов сцены?

Как я могу выделить/заполнить/обновить память на GPU? Я хотел бы видеть, что обзор высокого уровня легко читается и понимается, а не настоящий код. Надеюсь, этот вопрос не слишком широк.

ответ

1

Вы сказали, что новичок в DirectX, я настоятельно рекомендую вам держаться подальше от DX12 и придерживаться DX11. DX12 полезен только для людей, которые уже являются экспертами (с большим E) и проектом, который должен сильно продвигаться или иметь крайние случаи для функции DX12, которая невозможна в DX11.

Но так или иначе, на DX12 в качестве примера для инициализации буфера вам необходимо создать экземпляры ID3D12Resource. Вам понадобятся два, один в кучке загрузки и один в куче по умолчанию. Вы заполняете первый на CPU с помощью карты. Затем вам нужно использовать список команд для копирования на второй. Конечно, вы должны управлять состоянием ресурса своего ресурса с помощью барьеров (назначение копии, шейдерный ресурс, ...). Затем вам нужно выполнить список команд в командной строке. Вам также нужно добавить забор для прослушивания gpu для завершения, прежде чем вы сможете уничтожить ресурс в кучке загрузки.

На DX11, вы звоните ID3D11Device :: CreateBuffer, предоставляя описание-структуру с флагом связывания SRV и указатель на данные центрального процессора вы хотите поместить в него ... Done

Это немного сложнее для текстуры поскольку вы имеете дело с макетом памяти. Итак, как я уже говорил выше, вы должны сосредоточиться на DX11, он не унижает вообще, у обоих есть свои роли.