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


Ресурсы (Direct3D 10)

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

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

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

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

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

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

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