Bagikan melalui


Gambaran Umum Target Render

Target render adalah sumber daya yang mewarisi dari antarmuka ID2D1RenderTarget . Target render membuat sumber daya untuk menggambar dan melakukan operasi menggambar aktual. Topik ini menjelaskan berbagai jenis target render Direct2D dan cara menggunakannya.

Render Target

Target render adalah sumber daya yang mewarisi dari antarmuka ID2D1RenderTarget . Target render membuat sumber daya untuk menggambar dan melakukan operasi menggambar aktual. Ada beberapa jenis target render yang dapat digunakan untuk merender grafik dengan cara berikut:

  • Objek ID2D1HwndRenderTarget merender konten ke jendela.
  • Objek ID2D1DCRenderTarget dirender ke konteks perangkat GDI.
  • Bitmap merender objek target merender konten ke bitmap di luar layar.
  • DXGI merender objek target yang dirender ke permukaan DXGI untuk digunakan dengan Direct3D.

Karena target render dikaitkan dengan perangkat penyajian tertentu, target tersebut adalah sumber daya yang bergantung pada perangkat dan berhenti berfungsi jika perangkat dihapus.

Render Fitur Target

Anda dapat menentukan apakah target render menggunakan akselerasi perangkat keras dan apakah tampilan jarak jauh dirender oleh komputer lokal atau jarak jauh. Target render dapat disiapkan untuk rendering alias atau antialias. Untuk merender adegan dengan sejumlah besar primitif, pengembang juga dapat merender grafik 2-D dalam mode alias dan menggunakan antialias multisample D3D untuk mencapai skalabilitas yang lebih besar.

Target render juga dapat mengelompokkan operasi gambar ke dalam lapisan yang diwakili oleh antarmuka ID2D1Layer . Lapisan berguna untuk mengumpulkan operasi gambar yang akan disusun bersama-sama saat merender bingkai. Untuk beberapa skenario, ini bisa menjadi alternatif yang berguna untuk merender ke target render bitmap, lalu menggunakan kembali konten bitmap, karena biaya alokasi untuk lapisan lebih rendah daripada untuk ID2D1BitmapRenderTarget.

Target render dapat membuat target render baru yang kompatibel dengan mereka sendiri, yang berguna untuk penyajian di luar layar menengah sambil mempertahankan berbagai properti target render yang ditetapkan pada aslinya.

Dimungkinkan juga untuk merender menggunakan GDI pada target render Direct2D dengan memanggil QueryInterface pada target render untuk ID2D1GdiInteropRenderTarget, yang memiliki metode GetDC dan ReleaseDC di dalamnya yang dapat digunakan untuk mengambil konteks perangkat GDI. Penyajian melalui GDI hanya dimungkinkan jika target render dibuat dengan set bendera D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE . Ini berguna untuk aplikasi yang terutama merender dengan Direct2D tetapi memiliki model ekstensibilitas atau konten warisan lainnya yang membutuhkan kemampuan untuk merender dengan GDI. Untuk informasi selengkapnya, lihat Gambaran Umum Interoperasi Direct2D dan GDI.

Render Sumber Daya Target

Seperti pabrik, target render dapat membuat sumber daya gambar. Sumber daya apa pun yang dibuat oleh target render adalah sumber daya yang bergantung pada perangkat (sama seperti target render). Target render dapat membuat jenis sumber daya berikut:

  • Bitmap
  • Kuas
  • Lapisan
  • Jala

Perintah Gambar

Untuk merender konten, Anda menggunakan metode gambar target render. Sebelum mulai menggambar, Anda memanggil metode ID2D1RenderTarget::BeginDraw . Setelah selesai menggambar, Anda memanggil metode ID2D1RenderTarget::EndDraw . Di antara panggilan ini, Anda menggunakan metode Gambar dan Isi untuk merender sumber daya gambar. Sebagian besar metode Gambar dan Isi mengambil bentuk (baik primitif atau geometri) dan sikat untuk mengisi atau menguraikan bentuk.

Target render menyediakan metode untuk mengklip, menerapkan masker opasitas, dan mengubah ruang koordinat.

Direct2D menggunakan sistem koordinat sebelah kiri: nilai sumbu x positif dilanjutkan ke nilai sumbu y kanan dan positif melanjutkan ke bawah.

Penanganan Kesalahan

Perintah gambar target render tidak menunjukkan apakah operasi yang diminta berhasil. Untuk mengetahui apakah ada kesalahan menggambar, panggil metode Flush target render atau metode EndDraw untuk mendapatkan HRESULT.

Contoh: Merender Konten ke Jendela

Contoh berikut menggunakan metode CreateHwndRenderTarget untuk membuat ID2D1HwndRenderTarget.

RECT rc;
GetClientRect(m_hwnd, &rc);

D2D1_SIZE_U size = D2D1::SizeU(
    rc.right - rc.left,
    rc.bottom - rc.top
    );

// Create a Direct2D render target.
hr = m_pD2DFactory->CreateHwndRenderTarget(
    D2D1::RenderTargetProperties(),
    D2D1::HwndRenderTargetProperties(m_hwnd, size),
    &m_pRenderTarget
    );

Contoh berikutnya menggunakan ID2D1HwndRenderTarget untuk menggambar teks ke jendela.

//  Called whenever the application needs to display the client
//  window. This method writes "Hello, World"
//
//  Note that this function will automatically discard device-specific
//  resources if the Direct3D device disappears during function
//  invocation, and will recreate the resources the next time it's
//  invoked.
//
HRESULT DemoApp::OnRender()
{
    HRESULT hr;

    hr = CreateDeviceResources();

    if (SUCCEEDED(hr))
    {
        static const WCHAR sc_helloWorld[] = L"Hello, World!";

        // Retrieve the size of the render target.
        D2D1_SIZE_F renderTargetSize = m_pRenderTarget->GetSize();

        m_pRenderTarget->BeginDraw();

        m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());

        m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));

        m_pRenderTarget->DrawText(
            sc_helloWorld,
            ARRAYSIZE(sc_helloWorld) - 1,
            m_pTextFormat,
            D2D1::RectF(0, 0, renderTargetSize.width, renderTargetSize.height),
            m_pBlackBrush
            );

        hr = m_pRenderTarget->EndDraw();

        if (hr == D2DERR_RECREATE_TARGET)
        {
            hr = S_OK;
            DiscardDeviceResources();
        }
    }

    return hr;
}

Kode telah dihilangkan dari contoh ini.