Fungsi D3DKMTGetSharedPrimaryHandle (d3dkmthk.h)
Fungsi D3DKMTGetSharedPrimaryHandle mengambil handel bersama global untuk permukaan utama.
Sintaks
NTSTATUS D3DKMTGetSharedPrimaryHandle(
D3DKMT_GETSHAREDPRIMARYHANDLE *unnamedParam1
);
Parameter
unnamedParam1
pData [masuk, keluar]
Penunjuk ke struktur D3DKMT_GETSHAREDPRIMARYHANDLE yang menjelaskan parameter yang diperlukan untuk mengambil handel bersama.
Menampilkan nilai
D3DKMTGetSharedPrimaryHandle mengembalikan salah satu nilai berikut:
Menampilkan kode | Deskripsi |
---|---|
STATUS_SUCCESS | Handel berhasil diambil. |
STATUS_DEVICE_REMOVED | Adaptor grafis dihentikan atau perangkat tampilan direset. |
STATUS_INVALID_PARAMETER | Parameter divalidasi dan ditentukan salah. |
Fungsi ini mungkin juga mengembalikan nilai NTSTATUS lainnya.
Keterangan
Permukaan utama biasanya dibuat oleh subsistem kernel grafis Microsoft DirectX (Dxgkrnl.sys) setiap kali mode tampilan berubah (meskipun, dalam beberapa situasi, primer bersama mungkin tidak ada). Jika aplikasi OpenGL mencoba membuat permukaan utama, biasanya harus membuka primer bersama yang ada. Untuk membuka primer bersama, aplikasi OpenGL harus menggunakan D3DKMTGetSharedPrimaryHandle untuk mengambil handel bersama global untuk permukaan utama.
Contoh
Contoh kode berikut menunjukkan bagaimana OpenGL ICD dapat menggunakan D3DKMTGetSharedPrimaryHandle untuk membuat permukaan utama dengan membuka handel bersama.
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;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista |
Target Platform | Universal |
Header | d3dkmthk.h (termasuk D3dkmthk.h) |
Pustaka | Gdi32.lib |
DLL | Gdi32.dll |