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


функция обратного вызова PFND3DDDI_DEALLOCATECB (d3dumddi.h)

Функция обратного вызова pfnDeallocateCb освобождает выделения или объект ресурса в режиме ядра, если объект ресурса был создан.

Синтаксис

PFND3DDDI_DEALLOCATECB Pfnd3dddiDeallocatecb;

HRESULT Pfnd3dddiDeallocatecb(
  HANDLE hDevice,
  const D3DDDICB_DEALLOCATE *unnamedParam2
)
{...}

Параметры

hDevice

Дескриптор устройства отображения (графический контекст).

unnamedParam2

pData [in]

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

Возвращаемое значение

pfnDeallocateCb возвращает одно из следующих значений:

Код возврата Описание
S_OK Память была успешно освобождена.
E_INVALIDARG Параметры были проверены и определены как неверные.

Эта функция также может возвращать другие значения HRESULT.

Комментарии

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

  • По отдельности, задав элемент hResourceструктуры D3DDDICB_DEALLOCATE , на которую указывает pData , значение NULL и заполняя массив в элементе HandleList D3DDDICB_DEALLOCATE дескрипторами выделения для освобождения.
  • В группе, задав для hResource дескриптор ресурса, выделения которого должны быть освобождены. Если значение hResource не равно NULL, элементы HandleList и NumAllocations D3DDDICB_DEALLOCATE игнорируются.
Обратите внимание, что если драйвер отображения пользовательского режима устанавливает для hResource значение NULL и заполняет все элементы массива в HandleList для освобождения всех выделений, драйвер должен снова вызвать функцию pfnDeallocateCb , чтобы освободить ресурс, задав в hResource дескриптор ресурса.

Обратите внимание, что функция pfnDeallocateCb отличается от функции DestroyResource или DestroyResource(D3D10) драйвера дисплея пользовательского режима. Однако драйвер отображения пользовательского режима обычно вызывает pfnDeallocateCb в ответ на вызов функции DestroyResource или DestroyResource(D3D10).

Direct3D версии 9 Примечание. Дополнительные сведения о создании и уничтожении ресурсов см. в разделе Обработка создания и уничтожения ресурсов.

Direct3D версии 11 Примечание. Дополнительные сведения о том, как драйвер вызывает pfnDeallocateCb, см. в разделе Изменения direct3D 10.

В следующем примере кода показано, как освободить ресурс.

    D3DDDICB_DEALLOCATE deAllocCB;
    HRESULT             hr;
    D3DKMT_HANDLE       hKMAllocHandle;

    memset(&deAllocCB, 0, sizeof(deAllocCB));

    deAllocCB.hResource = m_hCurResRuntime;

    hr = m_d3dCallbacks.pfnDeallocateCb(m_hD3D, &deAllocCB);
    if ((m_hCurResRuntime) && (SUCCEEDED(hr))) {
        m_bCurResFreed = TRUE;
    }

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях операционных систем Windows.
Целевая платформа Персональный компьютер
Верхняя часть d3dumddi.h (включая D3dumddi.h)

См. также раздел

D3DDDICB_DEALLOCATE

D3DDDI_DEVICECALLBACKS

DestroyResource

DestroyResource(D3D10)

pfnAllocateCb