IDCompositionDevice::CreateVirtualSurface method (dcomp.h)

Membuat permukaan yang jarang diisi yang dapat dikaitkan dengan satu atau beberapa visual untuk komposisi.

Sintaks

HRESULT CreateVirtualSurface(
  [in]  UINT                        initialWidth,
  [in]  UINT                        initialHeight,
  [in]  DXGI_FORMAT                 pixelFormat,
  [in]  DXGI_ALPHA_MODE             alphaMode,
  [out] IDCompositionVirtualSurface **virtualSurface
);

Parameter

[in] initialWidth

Jenis: UINT

Lebar permukaan, dalam piksel. Lebar maksimum adalah 16.777.216 piksel.

[in] initialHeight

Jenis: UINT

Tinggi permukaan, dalam piksel. Tinggi maksimum adalah 16.777.216 piksel.

[in] pixelFormat

Jenis: DXGI_FORMAT

Format piksel permukaan.

[in] alphaMode

Jenis: DXGI_ALPHA_MODE

Arti saluran alfa, jika format piksel berisi saluran alfa. Jenis dapat berupa salah satu dari nilai berikut:

Nilai Makna
DXGI_ALPHA_MODE_UNSPECIFIED
Saluran alfa tidak ditentukan. Nilai ini memiliki efek yang sama dengan DXGI_ALPHA_MODE_IGNORE.
DXGI_ALPHA_MODE_PREMULTIPLIED
Saluran warna berisi nilai yang telah ditentukan sebelumnya dengan saluran alfa.
DXGI_ALPHA_MODE_IGNORE
Saluran alfa harus diabaikan dan bitmap harus dirender secara buram.

[out] virtualSurface

Jenis: IDCompositionVirtualSurface**

Objek permukaan yang baru dibuat. Parameter ini tidak boleh NULL.

Nilai kembali

Jenis: HRESULT

Jika fungsi berhasil, fungsi akan mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan. Lihat Kode Kesalahan DirectComposition untuk daftar kode kesalahan.

Keterangan

Permukaan jarang Microsoft DirectComposition adalah objek logis yang berperilaku seperti array persegi panjang piksel yang dapat dikaitkan dengan visual untuk komposisi. Permukaan tidak selalu didukung oleh video fisik atau memori sistem untuk setiap pikselnya. Aplikasi ini dapat mewujudkan atau memvirtualisasikan bagian permukaan logis pada waktu yang berbeda.

Objek permukaan yang baru dibuat dalam keadaan tidak diinisialisasi. Meskipun tidak diinisialisasi, permukaan tidak berpengaruh pada komposisi pohon visual. Ini berperilaku persis seperti permukaan yang diinisialisasi dengan 100% piksel transparan.

Untuk menginisialisasi permukaan dengan data piksel, gunakan metode IDCompositionSurface::BeginDraw . Metode ini tidak hanya menyediakan piksel untuk permukaan, tetapi juga mengalokasikan ruang penyimpanan aktual untuk piksel tersebut. Alokasi memori bertahan hingga aplikasi mengembalikan beberapa memori ke sistem. Aplikasi dapat membebaskan sebagian atau semua memori yang dialokasikan dengan memanggil metode IDComposition::VirtualSurfaceTrim .

Permukaan DirectComposition mendukung format piksel berikut:

  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT
Metode ini gagal jika initialWidth atau initialHeight melebihi 16.777.216 piksel.

Contoh

Contoh berikut menunjukkan cara membuat permukaan virtual dan mengaitkannya dengan visual.

HRESULT RenderAVisual(IDCompositionDevice *pDCompDevice, HWND hwndTarget,
                         UINT surfaceWidth, UINT surfaceHeight) 
{
    // Validate the input parameters.
    if (pDCompDevice == nullptr || hwndTarget == NULL)
        return E_INVALIDARG;
    
    HRESULT hr = S_OK;
    IDCompositionTarget *pTargetWindow = nullptr;
    IDCompositionVisual *pVisual = nullptr;
    IDCompositionVirtualSurface *pVirtualSurface = nullptr;
    ID3D10Texture2D *pTex2D = nullptr;
    POINT offset = {0};

    // Create the rendering target. 
    hr = pDCompDevice->CreateTargetForHwnd(hwndTarget, TRUE, &pTargetWindow);

    if (SUCCEEDED(hr))
    {
        // Create a visual.
        hr = pDCompDevice->CreateVisual(&pVisual);
    }

    if (SUCCEEDED(hr))
    {
        // Add the visual to the root of the composition tree.
        hr = pTargetWindow->SetRoot(pVisual);
    }

    if (SUCCEEDED(hr))
    {
        // Create a virtual surface.
        hr = pDCompDevice->CreateVirtualSurface(surfaceWidth, surfaceHeight, 
            DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_ALPHA_MODE_IGNORE, 
            &pVirtualSurface);
    }

    if (SUCCEEDED(hr))
    {
        // Set the virtual surface as the content of the visual.
        hr = pVisual->SetContent(pVirtualSurface);
    }
    
    if (SUCCEEDED(hr))
    {
        // Retrieve and interface pointer for draw on the surface.
        hr = pVirtualSurface->BeginDraw(NULL, __uuidof(ID3D10Texture2D), 
            (void **) &pTex2D, &offset);
    }

    //
    // TODO: Draw on the surface.
    //
    
    if (SUCCEEDED(hr))
    {
        // Complete the updates to the surface.
        hr = pVirtualSurface->EndDraw();
    }

    // Commit the composition for rendering.
    hr = pDCompDevice->Commit();

    // Clean up.
    SafeRelease(&pTargetWindow);
    SafeRelease(&pVisual);
    SafeRelease(&pVirtualSurface);
    SafeRelease(&pTex2D);

    return hr;

}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 8 [khusus aplikasi desktop]
Server minimum yang didukung Windows Server 2012 [hanya aplikasi desktop]
Target Platform Windows
Header dcomp.h
Pustaka Dcomp.lib
DLL Dcomp.dll

Lihat juga

IDCompositionDevice

IDCompositionDevice::CreateSurface