Bagikan melalui


Sintaks Deklarasi Fungsi

Fungsi HLSL dideklarasikan dengan sintaks berikut.

[StorageClass] [clipplanes()] [tepat] Return_Value Name ( [ArgumentList] ) [: Semantic] { [StatementBlock] };

 

Parameter

StorageClass

Pengubah yang menentukan ulang deklarasi fungsi. inline saat ini adalah satu-satunya nilai pengubah. Nilai pengubah harus sebaris karena juga merupakan nilai default. Oleh karena itu, fungsi sebaris terlepas dari apakah Anda menentukan sebaris, dan semua fungsi dalam HLSL sebaris. Fungsi sebaris menghasilkan salinan isi fungsi (saat mengkompilasi) untuk setiap panggilan fungsi. Hal ini dilakukan untuk mengurangi overhead pemanggilan fungsi.

Clipplanes

Daftar opsional bidang klip, yang hingga 6 bidang klip yang ditentukan pengguna. Ini adalah mekanisme alternatif untuk SV_ClipDistance yang berfungsi pada 9_x tingkat fitur dan yang lebih tinggi.

Nama

String ASCII yang secara unik mengidentifikasi nama fungsi shader.

Daftar Argumen

Daftar argumen opsional, yang merupakan daftar argumen yang dipisahkan koma yang diteruskan ke dalam fungsi.

Semantik

String opsional yang mengidentifikasi penggunaan data pengembalian yang dimaksudkan (lihat Semantik (DirectX HLSL)).

StatementBlock

Pernyataan opsional yang membentuk isi fungsi. Fungsi yang didefinisikan tanpa isi disebut prototipe fungsi; isi fungsi prototipe harus didefinisikan di tempat lain sebelum fungsi dapat dipanggil.

Tampilkan Nilai

Jenis pengembalian dapat berupa salah satu jenis HLSL ini.

Keterangan

Sintaks pada halaman ini menjelaskan hampir setiap jenis fungsi HLSL, ini termasuk shader vertex, pemisah piksel, dan fungsi pembantu. Meskipun shader geometri juga diimplementasikan dengan fungsi, sintaksnya sedikit lebih rumit, jadi ada halaman terpisah yang mendefinisikan deklarasi fungsi shader geometri (lihat Objek Geometri-Shader (DirectX HLSL)).

Fungsi dapat kelebihan beban selama diberi kombinasi unik dari jenis parameter dan/atau urutan parameter. HLSL juga mengimplementasikan sejumlah fungsi bawaan, atau intrinsik.

Anda dapat menentukan bidang klip khusus pengguna dengan atribut clipplanes . Windows menerapkan bidang klip ini ke semua primitif yang digambar. Atribut clipplanes berfungsi seperti SV_ClipDistance tetapi berfungsi pada semua tingkat fitur perangkat keras 9_x dan yang lebih tinggi. Untuk informasi selengkapnya, lihat Bidang klip pengguna pada perangkat keras tingkat fitur 9.

Contoh

Contoh ini berasal dari BasicHLSL10.fx dari Sampel BasicHLSL10.

struct VS_OUTPUT
{
    float4 Position   : SV_POSITION; 
    float4 Diffuse    : COLOR0;
    float2 TextureUV  : TEXCOORD0;
};

VS_OUTPUT RenderSceneVS( float4 vPos : POSITION,
                         float3 vNormal : NORMAL,
                         float2 vTexCoord0 : TEXCOORD,
                         uniform int nNumLights,
                         uniform bool bTexture,
                         uniform bool bAnimate )
{
    VS_OUTPUT Output;
    ...
    return Output;    
}

Contoh ini dari AdvancedParticles.fx dari Sampel AdvancedParticles, mengilustrasikan menggunakan semantik untuk jenis pengembalian.

//
// PS for particles
//
float4 PSPointSprite(PSSceneIn input) : SV_Target
{   
    return g_txDiffuse.Sample( g_samLinear, input.tex ) * input.color;
}

Functions (DirectX HLSL)