Bagikan melalui


Jenis Struct

Gunakan sintaks berikut untuk mendeklarasikan struktur menggunakan HLSL.

struct Name{ [InterpolationModifier] Type[RxC] MemberName; ... };

Parameter

Nama

String ASCII yang secara unik mengidentifikasi nama struktur.

[InterpolationModifier]

Pengubah opsional yang menentukan jenis interpolasi. Lihat Keterangan untuk detailnya.

Type[RxC]

Jenis anggota dengan ukuran array baris opsional (R) x kolom (C). Struktur berisi setidaknya satu elemen; jika berisi lebih dari satu elemen, semua elemen memiliki jenis yang sama. Jumlah baris dan kolom adalah bilangan bulat yang tidak ditandatangani antara 1 dan 4 inklusif.

Nama Anggota

String ASCII yang secara unik mengidentifikasi nama anggota.

Keterangan

Pengubah interpolasi dapat ditentukan pada anggota struktur apa pun atau pada argumen ke fungsi shader piksel. Jika pengubah muncul di kedua tempat, pengubah luar (pengubah argumen shader piksel) akan menimpa pengubah bagian dalam (pengubah struktur).

Saat mengkompilasi shader atau efek, pengkompilasi shader mengemas anggota struktur sesuai dengan aturan pengemasan HLSL.

Pengubah Interpolasi Diperkenalkan dalam Model Shader 4

Output shader vertex yang digunakan untuk input shader piksel diinterpolasi secara linier untuk mendapatkan nilai per piksel selama rasterisasi. Untuk mengatur metode interpolasi, gunakan salah satu nilai berikut, yang didukung dalam model shader 4 atau yang lebih baru. Pengubah diabaikan pada output shader vertex apa pun yang tidak digunakan sebagai input shader piksel.

Pengubah Interpolasi Deskripsi
linier Menginterpolasi antara input shader; linear adalah nilai default jika tidak ada pengubah interpolasi yang ditentukan.
sentroid Interpolasi antara sampel yang berada di suatu tempat dalam area piksel yang tercakup (ini mungkin memerlukan ekstrapolasi titik akhir dari pusat piksel). Pengambilan sampel sentroid dapat meningkatkan antialias jika piksel tertutup sebagian (bahkan jika pusat piksel tidak tercakup). Pengubah sentroid harus dikombinasikan dengan pengubah linier atau noperspektif .
nointerpolation Jangan menginterpolasi .
noperspective Jangan melakukan koreksi perspektif selama interpolasi. Pengubah noperspektif dapat dikombinasikan dengan pengubah sentroid .
Sampel Tersedia dalam model shader 4.1 dan yang lebih baru Interpolasi di lokasi sampel daripada di pusat piksel. Ini menyebabkan shader piksel dijalankan per sampel daripada per piksel. Cara lain untuk menyebabkan eksekusi per sampel adalah dengan memiliki input dengan SV_SampleIndex semantik, yang menunjukkan sampel saat ini. Hanya input dengan sampel yang ditentukan (atau input SV_SampleIndex) yang berbeda antara pemanggilan shader dalam piksel, sedangkan input lain yang tidak menentukan pengubah (misalnya, jika Anda mencampur pengubah pada input yang berbeda) masih menginterpolasi di pusat piksel. Pemanggilan shader piksel dan pengujian kedalaman/stensil terjadi untuk setiap sampel yang tercakup dalam piksel. Ini kadang-kadang dikenal sebagai supersampling. Sebaliknya, dengan tidak adanya pemanggilan frekuensi sampel, yang dikenal sebagai multisampling, shader piksel dipanggil sekali per piksel terlepas dari berapa banyak sampel yang dicakup, sementara pengujian kedalaman/stensil terjadi pada frekuensi sampel. Kedua mode menyediakan antialias tepi yang setara. Namun, supersampling memberikan kualitas bayangan yang lebih baik dengan memanggil shader piksel lebih sering.
1. Saat menggunakan jenis int/uint, satu-satunya opsi yang valid adalah **nointerpolation**.

Pengubah interpolasi dapat diterapkan ke anggota struktur atau argumen fungsi, atau keduanya.

Contoh

Berikut adalah beberapa contoh deklarasi struktur.

struct struct1
{
  int    a;
}

Deklarasi ini mencakup array.

struct struct2
{
  int    a;
  float  b;
  int4x4 iMatrix;
}

Deklarasi ini mencakup pengubah interpolasi.

struct In
{
  centroid float2 Texcoord;
};

Lihat juga

Jenis Data (DirectX HLSL)