Bagikan melalui


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

Lihat juga

D3DKMT_GETSHAREDPRIMARYHANDLE