Fonction D3DKMTGetSharedPrimaryHandle (d3dkmthk.h)
La fonction D3DKMTGetSharedPrimaryHandle récupère le handle partagé global pour la surface primaire.
Syntaxe
NTSTATUS D3DKMTGetSharedPrimaryHandle(
D3DKMT_GETSHAREDPRIMARYHANDLE *unnamedParam1
);
Paramètres
unnamedParam1
pData [in, out]
Pointeur vers une structure de D3DKMT_GETSHAREDPRIMARYHANDLE qui décrit les paramètres requis pour récupérer le handle partagé.
Valeur retournée
D3DKMTGetSharedPrimaryHandle retourne l’une des valeurs suivantes :
Code de retour | Description |
---|---|
STATUS_SUCCESS | Le handle a été récupéré avec succès. |
STATUS_DEVICE_REMOVED | La carte graphique a été arrêtée ou le périphérique d’affichage a été réinitialisé. |
STATUS_INVALID_PARAMETER | Les paramètres ont été validés et déterminés comme incorrects. |
Cette fonction peut également retourner d’autres valeurs NTSTATUS.
Remarques
La surface principale est généralement créée par le sous-système du noyau graphique Microsoft DirectX (Dxgkrnl.sys) chaque fois que le mode d’affichage change (bien que, dans certaines situations, le principal partagé n’existe peut-être pas). Si une application OpenGL tente de créer une surface primaire, elle doit généralement ouvrir le principal partagé existant. Pour ouvrir le principal partagé, l’application OpenGL doit utiliser D3DKMTGetSharedPrimaryHandle pour récupérer le handle partagé global pour la surface primaire.
Exemple
L’exemple de code suivant montre comment un ICD OpenGL peut utiliser D3DKMTGetSharedPrimaryHandle pour créer une surface primaire en ouvrant le handle partagé.
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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista |
Plateforme cible | Universal |
En-tête | d3dkmthk.h (inclure D3dkmthk.h) |
Bibliothèque | Gdi32.lib |
DLL | Gdi32.dll |