struktur DXGK_GDIARG_CLEARTYPEBLEND (d3dkmddi.h)

Struktur DXGK_GDIARG_CLEARTYPEBLEND menjelaskan karakteristik ClearType yang dipercepat perangkat keras GDI dan operasi perpaduan piksel teks antialisi.

Sintaks

typedef struct _DXGK_GDIARG_CLEARTYPEBLEND {
  [in] RECT DstRect;
       UINT TmpSurfAllocationIndex;
       UINT GammaSurfAllocationIndex;
       UINT AlphaSurfAllocationIndex;
       UINT DstAllocationIndex;
       INT  DstToAlphaOffsetX;
       INT  DstToAlphaOffsetY;
       UINT Color;
       UINT Gamma;
       UINT NumSubRects;
       RECT *pSubRects;
       UINT AlphaSurfPitch;
       UINT Color2;
} DXGK_GDIARG_CLEARTYPEBLEND;

Anggota

[in] DstRect

Struktur RECT yang mendefinisikan 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 bit-block. 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 tidak dapat. Selain itu, semua sub-persegi panjang dijamin pas di dalam permukaan tujuan. Sub-persegi dapat dibatasi lebih lanjut oleh persegi panjang pembatas yang lebih kecil dari persegi panjang tujuan.

TmpSurfAllocationIndex

[in] Indeks elemen dalam daftar alokasi yang menentukan permukaan sementara. Permukaan ini dapat digunakan untuk membaca tujuan sebelum mengeksekusi shader piksel.

GammaSurfAllocationIndex

[in] Indeks elemen dalam daftar alokasi yang menentukan tabel gamma jenis D3DKMDT_GDISURFACETYPE. Format alokasi pencarian gamma adalah 8 bit per piksel, dan resolusinya adalah 512 x 16 piksel. Setiap baris alokasi berisi dua tabel: gamma dan gamma terbalik. Setiap tabel memiliki 256 entri.

AlphaSurfAllocationIndex

[in] Indeks elemen dalam daftar alokasi yang menentukan nilai alfa permukaan. Permukaan alfa berada di ruang koordinat yang sama dengan ruang permukaan tujuan yang dibatasi oleh persegi panjang tujuan DstRect .

DstAllocationIndex

[in] Indeks elemen dalam daftar alokasi yang menentukan alokasi yang direferensikan oleh persegi panjang tujuan DstRect .

DstToAlphaOffsetX

[in] Offset ke arah x yang mengubah ruang koordinat persegi panjang tujuan ke ruang koordinat permukaan alfa.

DstToAlphaOffsetY

[in] Offset ke arah y yang mengubah ruang koordinat persegi panjang tujuan ke ruang koordinat permukaan alfa.

Color

[in] Warna latar depan, dalam format piksel ARGB 32-bit yang tidak ditandatangani (sebagaimana didefinisikan oleh nilai D3DDDIFMT_A8R8G8B8 enumerasi D3DDDIFORMAT ), dikoreksi untuk gamma.

Gamma

[in] Indeks elemen dalam daftar alokasi yang menentukan tabel pencarian gamma. Nilai Gamma berada dalam rentang [0, 15], jika tidak, gamma 0xFFFFFFFF (nilai D3DKM_INVALID_GAMMA_INDEX). Lihat Keterangan untuk informasi selengkapnya tentang bagaimana gamma digunakan dalam blending ClearType.

NumSubRects

Jumlah sub-persegi panjang di ruang permukaan tujuan yang dibatasi oleh persegi panjang tujuan DstRect .

pSubRects

Penunjuk ke sub-persegi di ruang permukaan tujuan yang dibatasi oleh persegi panjang tujuan DstRect .

AlphaSurfPitch

Nada, dalam byte, dari permukaan alfa yang dirujuk oleh AlphaSurfAllocationIndex.

Color2

[in] Warna latar depan, dalam format piksel ARGB 32-bit yang tidak ditandatangani (sebagaimana didefinisikan oleh nilai D3DDDIFMT_A8R8G8B8 enumerasi D3DDDIFORMAT ), tidak diperbaiki untuk gamma.

Keterangan

Nilai Gamma harus dalam rentang [0, 15] kecuali diatur ke 0xFFFFFFFF (nilai D3DKM_INVALID_GAMMA_INDEX). Nilai Gamma adalah indeks baris dalam alokasi gamma.

Ketika gamma berada di kisaran [0, 15], penpaduan per piksel berikut dilakukan.

GammaTable = (BYTE*)GammaSurfaceAddress + Gamma * GammaSurfacePitch;
InverseGammaTable = (BYTE*)GammaSurfaceAddress + Gamma * GammaSurfacePitch + 256;

Tmp.r = GammaTable[D.r]; // red
Tmp.g = GammaTable[D.g]; // green
Tmp.b = GammaTable[D.b]; // blue

BlendColor.r = InverseGammaTable[round((Tmp.r + (Color.r - Tmp.r) * A.r / 255.0))]
BlendColor.g = InverseGammaTable[round((Tmp.g + (Color.g - Tmp.g) * A.g / 255.0))]
BlendColor.b = InverseGammaTable[round((Tmp.b + (Color.b - Tmp.b) * A.b / 255.0))]
OutputColor.a = D.a

OutputColor.r = (A.r == 0) ? D.r : (A.r == 255) ? Color2.r : BlendColor.r;
OutputColor.g = (A.g == 0) ? D.g : (A.g == 255) ? Color2.g : BlendColor.g;
OutputColor.b = (A.b == 0) ? D.b : (A.b == 255) ? Color2.b : BlendColor.b;

Saat gamma sama dengan 0xFFFFFFFF (nilai D3DKM_INVALID_GAMMA_INDEX), penpaduan per piksel berikut dilakukan.

OutputColor.a = D.a
OutputColor.r = D.r + (Color.r - D.r) * (Color.r >= D.r ? A.r : A.g) / 255.0
OutputColor.g = D.g + (Color.g - D.g) * (Color.g >= D.g ? A.r : A.g) / 255.0
OutputColor.b = D.b + (Color.b - D.b) * (Color.b >= D.b ? A.r : A.g) / 255.0

Di mana parameter berikut berada dalam format D3DDDIFMT_A8R8G8B8 yang ditentukan dalam enumerasi D3DDDIFORMAT :

  • Warna = warna latar depan yang dikoreksi gamma, seperti yang didefinisikan oleh anggota Warna
  • Color2 = warna latar depan, bukan gamma dikoreksi, seperti yang didefinisikan oleh anggota Color2
  • D = warna piksel tujuan
  • A = warna permukaan alfa

Driver miniport tampilan harus memastikan bahwa ketika komponen A adalah nol, komponen output yang sesuai sama dengan komponen warna latar belakang (D).

Driver juga harus memastikan bahwa ketika komponen A 0xFF, komponen output yang sesuai sama dengan komponen warna latar depan (Color2).

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 7
Header d3dkmddi.h (termasuk D3dkmddi.h)

Lihat juga

D3DDDIFORMAT

D3DKMDT_GDISURFACETYPE

RECT