Поделиться через


Ресурсы (Direct3D 10)

Ресурс — это область в памяти, доступ к которому можно получить с помощью конвейера Direct3D. Для эффективного доступа к памяти конвейеру необходимо хранить данные, предоставляемые конвейеру (например, входные геометрии, ресурсы шейдера, текстуры и т. д.) в ресурсе. Существует два типа ресурсов, от которых наследуются все ресурсы Direct3D: буфер или текстура. Для каждого этапа конвейера может быть активно до 128 ресурсов.

Каждое приложение обычно создает много ресурсов. Примеры ресурсов: буферы вершин, буфер индекса, буфер констант, текстуры и ресурсы шейдера. Существует несколько вариантов, определяющих способ использования ресурсов. Можно создавать ресурсы, строго типизированные или типизированные меньше; вы можете контролировать, имеют ли ресурсы доступ на чтение и запись; ресурсы можно сделать доступными только для ЦП, GPU или обоих. Естественно, будет компромисс скорости и функциональности - чем больше функциональных возможностей вы позволяете ресурсу иметь, тем меньше производительности вы должны ожидать.

Так как приложение часто использует множество текстур, Direct3D также представляет концепцию массива текстур для упрощения управления текстурами. Массив текстур содержит одну или несколько текстур (все те же типы и измерения), которые можно индексировать из приложения или шейдеров. Массивы текстур позволяют использовать один интерфейс с несколькими индексами для доступа ко многим текстурам. Можно создать столько массивов текстур, сколько нужно для управления различными типами текстур.

После создания ресурсов, которые будет использоваться приложением, необходимо подключить или привязать каждый ресурс к этапам конвейера, которые будут использовать их. Это достигается путем вызова API привязки, который принимает указатель на ресурс. Так как для нескольких этапов конвейера может потребоваться доступ к одному ресурсу, Direct3D 10 представляет концепцию представления ресурсов. Представление определяет часть ресурса, доступ к которому можно получить. Вы можете создать представления m или ресурс и привязать их к n этапам конвейера, если вы следуйте правилам привязки для общего ресурса (среда выполнения создаст ошибки во время компиляции, если вы этого не сделали).

Представление ресурсов предоставляет общую модель для доступа к ресурсу (текстуры, буферы и т. д.). Так как вы можете использовать представление, чтобы сообщить среде выполнения, какие данные для доступа к ним и как получить к нему доступ, представления ресурсов позволяют создавать меньше ресурсов типа. То есть можно создать ресурсы для заданного размера во время компиляции, а затем объявить тип данных в ресурсе, когда ресурс привязывается к конвейеру. Представления предоставляют множество новых возможностей для использования ресурсов, таких как возможность чтения поверхностей глубины и набора элементов в шейдере, создания динамических кубовых карт в одном проходе и отрисовки одновременно в несколько срезов тома.

Дополнительные сведения об основных типах ресурсов, массивах текстур и способах создания и использования ресурсов см. в следующих разделах:

Руководство по программированию для Direct3D 10