struktur DXGK_GDIARG_TRANSPARENTBLT (d3dkmddi.h)
Struktur DXGK_GDIARG_TRANSPARENTBLT menjelaskan karakteristik operasi transfer blok bit (bitblt) yang dipercepat perangkat keras GDI dengan transparansi.
Sintaks
typedef struct _DXGK_GDIARG_TRANSPARENTBLT {
[in] RECT SrcRect;
[in] RECT DstRect;
UINT SrcAllocationIndex;
UINT DstAllocationIndex;
UINT Color;
UINT NumSubRects;
RECT *pSubRects;
D3DKM_TRANSPARENTBLTFLAGS Flags;
UINT SrcPitch;
} DXGK_GDIARG_TRANSPARENTBLT;
Anggota
[in] SrcRect
Struktur RECT yang menentukan area persegi panjang yang akan disalin. Persegi panjang ini ditentukan dalam sistem koordinat permukaan sumber dan didefinisikan oleh dua titik: kiri atas dan kanan bawah. Dua titik yang menentukan persegi panjang selalu diurutkan dengan baik.
Untuk informasi lebih lanjut, lihat bagian Keterangan.
[in] DstRect
Struktur RECT yang menentukan area persegi panjang yang akan dimodifikasi. Persegi panjang ini ditentukan dalam sistem koordinat permukaan tujuan dan didefinisikan oleh dua titik: kiri atas dan kanan bawah. Persegi panjang eksklusif kanan bawah; artinya, tepi bawah dan kanannya bukan bagian dari transfer blok bit. Dua titik yang menentukan persegi panjang selalu diurutkan dengan baik.
Persegi panjang tujuan yang ditentukan oleh DstRect dapat melebihi batas permukaan tujuan, tetapi sub-persegi panjang tidak dapat. Selain itu, semua sub-persegi panjang dijamin pas di dalam permukaan tujuan. Sub-persegi panjang dapat dibatasi lebih lanjut oleh persegi panjang pembatas yang lebih kecil dari persegi panjang tujuan.
Untuk informasi lebih lanjut, lihat bagian Keterangan.
SrcAllocationIndex
[in] Indeks elemen dalam daftar alokasi yang menentukan alokasi yang direferensikan oleh persegi sumber SrcRect .
DstAllocationIndex
[in] Indeks elemen dalam daftar alokasi yang menentukan alokasi yang direferensikan oleh persegi tujuan DstRect .
Color
[in] Menentukan warna transparan fisik di permukaan sumber, dalam format piksel ARGB 32-bit yang tidak ditandatangani (sebagaimana didefinisikan oleh nilai D3DDDIFMT_A8R8G8B8 enumerasi D3DDDIFORMAT ). Piksel apa pun pada permukaan sumber yang cocok dengan warna transparan yang ditentukan oleh Warna tidak disalin.
NumSubRects
[in] Jumlah sub-persegi panjang di ruang permukaan tujuan yang dibatasi oleh persegi tujuan DstRect .
pSubRects
[in] Penunjuk ke sub-persegi di ruang permukaan tujuan.
Flags
[in] Struktur D3DKM_TRANSPARENTBLTFLAGS yang menentukan kemampuan transfer blok bit transparan adaptor tampilan yang dipercepat perangkat keras.
SrcPitch
[in] Pitch permukaan sumber, dalam byte.
Keterangan
Persegi panjang yang ditentukan oleh anggota SrcRect dan DstRect mengikat semua sub-persegi panjang di ruang permukaan sumber dan tujuan, masing-masing. Subsistem kernel grafis Microsoft DirectX tidak akan pernah meminta transfer bit-block transparan jika persegi panjang sumber dan tujuan tumpang tindih pada permukaan yang sama.
Untuk menyelesaikan operasi transfer blok bit transparan, warna setiap piksel di DstRect harus dihitung dengan menggunakan rumus berikut:
typedef DXGK_GDIARG_TRANSPARENTBLT tblt;
if (tblt.Flags.HonorAlpha)
{
if (SourceColor != tblt.Color)
{
DestinationColor = SourceColor;
}
}
else
{
if ((SourceColor & 0x00FFFFFF) != tblt.Color)
{
DestinationColor = SourceColor;
}
}
Dalam hal ini, nilai 0x00FFFFFF dalam format ARGB menunjukkan alpha = 0, karenanya alpha-blending tidak diimplementasikan.
Jika operasi transfer blok bit peregangan diperlukan, rasio peregangan x dan y dihitung masing-masing sebagai rasio ukuran x dan y DstRect dan SrcRect. Selain itu, operasi stretch akan dilanjutkan seolah-olah nilai COLORONCOLOR di Wingdi.h diatur. Dalam transfer bit-block yang menyusut, piksel yang cukup harus diabaikan sehingga piksel tidak perlu digabungkan. Dalam transfer blok bit yang membentang, piksel harus direplikasi.
Untuk informasi selengkapnya tentang transfer bit-block transparan, lihat Menyalin Bitmap.
Ketika sub-persegi panjang diubah ke ruang permukaan sumber, hasilnya dijamin berada di dalam permukaan sumber. Transformasi koordinat sub-persegi panjang di permukaan tujuan ke koordinat di permukaan sumber ditentukan oleh rumus berikut, di mana:
- (Xd, Yd) adalah titik di dalam sub-persegi
- (Xs, Ys) adalah titik di dalam persegi panjang sumber
float Ws = SrcRect.right - SrcRect.left;
float Wd = DstRect.right - DstRect.left;
int Xs = round((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left - 0.5)
OR
int Xs = truncate((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left)
float Hs = SrcRect.bottom - SrcRect.top;
float Hd = DstRect.bottom - DstRect.top;
int Ys = round((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top - 0.5)
OR
int Ys = truncate((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top)
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 7 |
Header | d3dkmddi.h (termasuk D3dkmddi.h) |