функция обратного вызова PFND3DDDI_CREATERESOURCE (d3dumddi.h)
Функция CreateResource создает ресурс.
Синтаксис
PFND3DDDI_CREATERESOURCE Pfnd3dddiCreateresource;
HRESULT Pfnd3dddiCreateresource(
HANDLE hDevice,
D3DDDIARG_CREATERESOURCE *unnamedParam2
)
{...}
Параметры
hDevice
Дескриптор устройства отображения (графический контекст), используемый для создания ресурса.
unnamedParam2
pResource [in, out]
Указатель на структуру D3DDDIARG_CREATERESOURCE , описывающую созданный ресурс.
Возвращаемое значение
CreateResource возвращает одно из следующих значений:
Код возврата | Описание |
---|---|
S_OK | Ресурс успешно создан. |
E_OUTOFMEMORY | CreateResource не удалось выделить необходимую память для его завершения. |
D3DERR_NOTAVAILABLE | CreateResource не удалось создать ресурс по другим причинам, кроме того, что не удалось выделить память. CreateResource может возвращать эту ошибку только при создании буферов вершин или индексов. |
Комментарии
Вызов CreateResource может содержать список поверхностей. Элемент SurfCountструктуры D3DDDIARG_CREATERESOURCE , заданной параметром pResource , указывает количество создаваемых поверхностей, включая уровни MIP-карты. Например, ресурс текстуры MIP-карты 256x256x9 содержит список из девяти поверхностей, в которых для элемента SurfCount и количества уровней MIP-карты задано значение 9. Для карты куба, содержащей девять уровней MIP-карты, должно быть установлено число уровней MIP-карты равным 9, а для SurfCount — значение 54. Для цепочки буферов с тремя поверхностями surfCount должно быть задано значение 3, а для количества уровней MIP-карты — значение 0. Обратите внимание, что количество уровней MIP-карты всегда меньше или равно значению в SurfCount.
В ответ на вызов CreateResource драйвер отображения пользовательского режима может вызвать функцию pfnAllocateCb для создания одного или нескольких выделений памяти. Драйвер дисплея пользовательского режима должен определить, должен ли он создавать несколько выделений для каждой поверхности, одно выделение для всех поверхностей или одно выделение для каждой поверхности. Дополнительные сведения о выделении ресурсов см. в разделе Управление видеопамятью и планирование GPU.
Ресурсы могут совместно использоваться несколькими устройствами (hDevice) и процессами. Среда выполнения указывает, что ресурс является общим, установив флаг битового поля SharedResource в элементе FlagsD3DDDIARG_CREATERESOURCE. Если этот флаг битового поля установлен, драйвер отображения пользовательского режима должен соответствовать следующим ограничениям на общие ресурсы:
- Драйвер отображения пользовательского режима может вызывать функции pfnAllocateCb и pfnDeallocateCb ровно по одному разу.
- Драйвер отображения пользовательского режима не может создать дополнительные выделения для ресурса после первоначального создания ресурса и также может уничтожить выделение ресурсов только во время уничтожения самого ресурса.
- Когда функция DestroyResource драйвера отображения пользовательского режима вызывается для общего ресурса, который был создан или открыт с помощью вызова функции CreateResource или OpenResource драйвера, драйвер должен задать для элемента hResourceструктуры D3DDDICB_DEALLOCATE значение, отличное от NULL, а для элемента NumAllocations D3DDDICB_DEALLOCATE значение 0 в вызове функции pfnDeallocateCb , чтобы уничтожить или закрыть ресурс. То есть выделения, связанные с общим ресурсом, не могут быть уничтожены или закрыты по отдельности; Ресурс должен быть уничтожен или закрыт атомарно в одном вызове pfnDeallocateCb.
- Количество выделений должно быть согласованным для типа ресурса (то есть другой процесс, создающий тот же тип ресурса, должен генерировать такое же количество и тип выделений). Кроме того, переименование для этих ресурсов запрещено.
- Неопределенные биты элемента Flags зарезервированы .
- Если флаг основного битового поля не задан в разделе Флаги, элементы RefreshRate и Output зарезервированы.
- Если флаг bit-field RenderTarget, DecodeRenderTarget или VideoProcessRenderTarget не задан в разделе Флаги, то элементы MultisampleType и MultisampleQuality зарезервированы.
- Если флаг битового поля VertexBuffer не задан в разделе Флаги, элемент Fvf зарезервирован.
- Если флаги битовых полей Texture, CubeMap и Volume не заданы в разделе Флаги, элемент MipLevels зарезервирован.
Новый createResource DDI отличается от DdCreateSurface DDI для модели драйвера дисплея Microsoft Windows 2000 следующими способами:
- В новом DDI CreateResource поверхности никогда не присоединяются явным образом. Все вложения подразумеваются атомарным созданием.
- В новом DDI CreateResource частичное создание сопоставлений кубов запрещено.
Если среда выполнения запрашивает создание буфера вершин или индексов и драйвер отображения пользовательского режима не может создать буфер по причинам, отличным от нехватки памяти (например, из-за отсутствия поддержки оборудования), драйвер должен завершиться сбоем с D3DERR_NOTAVAILABLE.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно в Windows Vista и более поздних версиях операционных систем Windows. |
Целевая платформа | Персональный компьютер |
Верхняя часть | d3dumddi.h (включая D3dumddi.h) |