Função D3DKMTGetSharedPrimaryHandle (d3dkmthk.h)
A função D3DKMTGetSharedPrimaryHandle recupera o identificador compartilhado global para a superfície primária.
Sintaxe
NTSTATUS D3DKMTGetSharedPrimaryHandle(
D3DKMT_GETSHAREDPRIMARYHANDLE *unnamedParam1
);
Parâmetros
unnamedParam1
pData [in, out]
Um ponteiro para uma estrutura D3DKMT_GETSHAREDPRIMARYHANDLE que descreve os parâmetros necessários para recuperar o identificador compartilhado.
Retornar valor
D3DKMTGetSharedPrimaryHandle retorna um dos seguintes valores:
Código de retorno | Descrição |
---|---|
STATUS_SUCCESS | O identificador foi recuperado com êxito. |
STATUS_DEVICE_REMOVED | O adaptador gráfico foi interrompido ou o dispositivo de exibição foi redefinido. |
STATUS_INVALID_PARAMETER | Os parâmetros foram validados e determinados como incorretos. |
Essa função também pode retornar outros valores NTSTATUS.
Comentários
Normalmente, a superfície primária é criada pelo subsistema de kernel de elementos gráficos do Microsoft DirectX (Dxgkrnl.sys) sempre que o modo de exibição é alterado (embora, em algumas situações, o primário compartilhado possa não existir). Se um aplicativo OpenGL tentar criar uma superfície primária, ele normalmente deverá abrir o primário compartilhado existente. Para abrir o primário compartilhado, o aplicativo OpenGL deve usar D3DKMTGetSharedPrimaryHandle para recuperar o identificador compartilhado global para a superfície primária.
Exemplo
O exemplo de código a seguir demonstra como um OpenGL ICD pode usar D3DKMTGetSharedPrimaryHandle para criar uma superfície primária abrindo o identificador compartilhado.
HRESULT OpenSharedPrimarySurface(D3DKMT_HANDLE hAdapter,
D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId,
D3DKMT_HANDLE hDevice,
VOID* pPrivateDriverData,
UINT PrivateDriverDataSize,
D3DKMT_HANDLE* phResource,
D3DKMT_HANDLE* phAllocation)
{
D3DKMT_CREATEALLOCATION CreateAllocation;
D3DDDI_ALLOCATIONINFO AllocationInfo;
D3DKMT_GETSHAREDPRIMARYHANDLE GetHandleData;
*phResource = 0;
*phAllocation = 0;
// Get the shared handle.
GetHandleData.hAdapter = hAdapter;
GetHandleData.VidPnSourceId = VidPnSourceId;
if (!NT_SUCCESS((*pfnKTGetSharedPrimaryHandle)(&GetHandleData))) {
return E_FAIL;
}
// Was a shared primary created by the kernel?
if (GetHandleData.hSharedPrimary == NULL) {
return E_FAIL;
}
CreateAllocation.hDevice = hDevice;
CreateAllocation.hResource = NULL;
CreateAllocation.hGlobalShare = GetHandleData.hSharedPrimary;
CreateAllocation.Flags.CreateResource =
CreateAllocation.Flags.CreateShared = TRUE;
CreateAllocation.pPrivateRuntimeData = NULL;
CreateAllocation.PrivateRuntimeDataSize = 0;
CreateAllocation.pPrivateDriverData = NULL;
CreateAllocation.PrivateDriverDataSize = 0;
CreateAllocation.NumAllocations = 1;
CreateAllocation.pAllocationInfo = &AllocationInfo;
AllocationInfo.hAllocation = NULL;
AllocationInfo.pSystemMem = NULL;
AllocationInfo.pPrivateDriverData = pPrivateData;
AllocationInfo.PrivateDriverDataSize = PrivateDataSize;
if (NT_SUCCESS((*pfnKTCreateAllocation)(&CreateAllocation))) {
*phResource = CreateAllocation.hResource;
*phAllocation = AllocationInfo.hAllocation;
return S_OK;
}
return E_FAIL;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista |
Plataforma de Destino | Universal |
Cabeçalho | d3dkmthk.h (inclua D3dkmthk.h) |
Biblioteca | Gdi32.lib |
DLL | Gdi32.dll |