AGSL Hızlı Referansı

AGSL, GLSL ES 1.0 ile büyük ölçüde uyumlu olacak şekilde tasarlanmıştır. Daha fazla bilgi için eşdeğer fonksiyonu OpenGL ES Gölgelendirme Dili dokümanları. Bu belgede, mümkün olduğunda AGSL arasındaki farklılıklar vurgulanmaya çalışılır. ve GLSL.

Türler

AGSL, vektörü göstermenin ek bir yöntemiyle birlikte GLSL ES 1.0 türlerini destekler. ve matris türleri. AGSL, temsil edilen ek short ve half türlerini destekler hassastır.

Temel türler

Tür Açıklama
void Hiçbir işlev değeri döndürmüyor veya boş parametre yok liste'ye dokunun. GLSL'nin aksine, boşluk içermeyen işlevler dönüş türü bir değer döndürmelidir.
bool, bvec2, bvec3, bvec4 yerine
. (bool2, bool3, bool4).
Boole skaler/vektör
int, ivec2, ivec3, ivec4
(int2, int3, int4)
highp işaretli tam sayı/vektör
float, vec2, vec3, vec4
(float2, float3, float4)
highp (tek duyarlıklı) kayan nokta skaler/vektör
short, short2, short3, short4 mediump int imzalı tam sayı/vektör
half, half2, half3, half4 mediump float skaler/vektöre eşdeğerdir
mat2, mat3, mat4
(float2x2, float3x3, float4x4)
2x2, 3x3, 4x4 float matrisi
half2x2, half3x3, half4x4 mediump float matris türüne eşdeğer

Hassasiyet ve aralık minimum değerleri

Bunlar, her bir öğeyle ilişkili minimum kesinlik ve aralıktır değiştiricisi olarak tanımlanmıştır. Çoğu cihazdan destekleri ES 3.0'ı desteklediğinde daha fazla garanti edilen highp hassasiyet/aralık ve int mediump aralık. Hassasiyet değiştiriciler skaler, vektör ve ve matris değişkenlerini ve parametrelerini kullanır. Yalnızca aşağıda listelenen minimum şartlar garanti edilir; lowp öğesinin, mediump ve mediump ile karşılaştırıldığında daha düşük hassasiyet olması gerekmez. highp değerinden daha düşük hassasiyetli olması gerekmez. AGSL şu anda lowp dönüştürüyor son çıkışta mediump olarak değişecektir.

Değiştirici "kayan" aralık "kayan" büyüklük aralığı "kayan" kesinlik "int" aralık
Highp \(\left\{-2^{62},2^{62}\right\}\) \(\left\{2^{-62},2^{62}\right\}\) Göreli: \(2^{-16}\) \(\left\{-2^{16},2^{16}\right\}\)
mediump \(\left\{-2^{14},2^{14}\right\}\) \(\left\{2^{-14},2^{14}\right\}\) Göreli: \(2^{-10}\) \(\left\{-2^{10},2^{10}\right\}\)
Lowp \(\left\{-2,2\right\}\) \(\left\{2^{-8},2\right\}\) Mutlak: \(2^{-8}\) \(\left\{-2^{8},2^{8}\right\}\)

Dizi sayısal alt simge söz dizimine ek olarak ör. var[num], names of vector components for vectors of length 2 - 4 are denoted by a single letter. Components can be swizzled and replicated. ex:vect.yx,vect.yy"

vect.xyzw - Noktaları/normalleri temsil eden vektörlere erişirken kullanın

vect.rgba - Renkleri temsil eden vektörlere erişirken kullanın

vect.LTRB - Vektör bir dikdörtgeni temsil ettiğinde kullanın (GLSL'de değil)

AGSL'de 0 ve 1, ilgili kanalda sabit bir 0 veya 1 değeri üretmek için kullanılabilir. Örnek: vect.rgb1 == vec4(vect.rgb,1)

Yapılar ve diziler

Yapılar, GLSL ile aynı söz dizimiyle beyan edilir ancak AGSL yalnızca şunları destekler: projeler üzerinde çalıştım.

struct type-name {
 members
} struct-name; // optional variable declaration.

Yalnızca 1 boyutlu diziler, aşağıdakileri içeren açık bir dizi boyutuyla desteklenir: C stili veya GLSL stili söz dizimi:

<base type>[<dizi boyutu>] değişken adı - ör: half[10] x;

<temel türü> değişken adı[<dizi boyutu>] - ör. half x[10];

Diziler bir işlevden döndürülemez, kopyalanamaz, atanamaz veya karşılaştırılamaz. Dizi kısıtlamaları, dizi içeren yapılara yayılır. Diziler dizine yalnızca sabit değer veya döngü değişkeni kullanılarak eklenebilir.

Eleme maçları

Tür Açıklama
const Derleme süresi sabiti veya salt okunur işlev parametresinden sonra bir değer girin.
uniform Değer, temel öğe genelinde değişmez bir şablondur. Üniformalar Android'den Çalışma Zamanı Gölgelendirici setColorUniform, setFloatUniform için yöntemler, setIntUniform, setInputBuffer ve setInputShader.
in Aktarılan işlev parametreleri için. Bu, varsayılandır.
out Dışa aktarılan işlev parametreleri için. Kullanılmalı fonksiyon tanımıyla aynı hassasiyete sahiptir.
inout Hem içeri hem de aktarılan parametreler için bir fonksiyonun tanımıdır. ile aynı hassasiyet kullanılmalıdır. irdeleyelim.

Değişken bildirimi

Beyanlar açık bir desteklenmiş kapsamda olmalıdır. Şu dokümandaki y beyanı: şu örneğe izin verilmiyor:

if (condition)
    int y = 0;

Matris/yapı/dizi ile ilgili temel bilgiler

Matris kurucu örnekleri

Bir matris tek bir değerle oluşturulduğunda, köşegene bu değer verilirken geri kalanına sıfır verilir. float2x2(1.0) bu nedenle 2x2'lik bir özdeş matrisi oluşturun.

Bir matris birden fazla değerle oluşturulduğunda, önce sütunlar doldurulur (sütun-ana sıra).

GLSL'den farklı olarak, bir aktarılan vektör desteklenmez ancak aynı etkisi. AGSL'de vec4 etiketinden aynı davranışa sahip bir vec3 oluşturmak için GLSL, vec3 nv = quadVec.xyz değerini belirtin.

Yapı oluşturucu örneği

struct light { float intensity; float3 pos; };
// literal integer constants auto-converted to floating point
light lightVar = light(3, float3(1, 2, 3.0));

Matris bileşenleri

Dizi alt simge söz dizimiyle birlikte bir matrisin bileşenlerine erişin.

float4x4 m; // represents a matrix
m[1] = float4(2.0); // sets second column to all 2.0
m[0][0] = 1.0; // sets upper left element to 1.0
m[2][3] = 2.0; // sets 4th element of 3rd column to 2.0

Yapı alanları

Nokta . operatörünü kullanarak yapı alanlarını seçin. Operatörler şunları içerir:

Operatör Açıklama
. alan seçici
==, != eşitlik
= atama

Dizi öğeleri

Dizi öğelerine, [ ] dizi alt simge operatörü kullanılarak erişilir. Örnek:

diffuseColor += lightIntensity[3] * NdotL;

Operatörler

Öncelik sırasına göre numaralandırılır. İlişkisel ve eşitlik operatörler > < <= >= == != Boole olarak değerlendirin. Vektörleri karşılaştırmak için bileşen olarak lessThan(), equal() vb. işlevleri kullanın.

Operatör Açıklama İlişki
1 () parantez içinde gruplandırma Yok
2 [] () . ++ -- dizi alt simgesi işlev çağrısı & kurucu yapı alan veya yöntem seçici, swizzle sonek artımı ve azalt Soldan Sağa
3 ++ -- + - ! önek artışı ve birli azalma Sağdan Sola
4 * / çarp ve böl Soldan Sağa
5 + - toplama ve çıkarma Soldan Sağa
7 < > <= >= ilişkisel Soldan Sağa
8 == != eşitlik/eşitsizlik Soldan Sağa
12 && mantıksal VE Soldan Sağa
13 ^^ mantıksal ÖZELVEYA Soldan Sağa
14 || mantıksal VEYA Soldan Sağa
15 ?\: seçim (tüm bir işlenen) Soldan Sağa
16 = += -= *= /= atama aritmetiği atama aritmetiği atama Soldan Sağa
17 , sequence Soldan Sağa

Matris ve vektör işlemleri

Skaler değerlere uygulandığında aritmetik operatörler skaler sonucunu verir. Örneğin, işleçlerinden biri skaler ise diğeri ise bir bileşen olarak gerçekleştirilir ve veya matris türünde olması gerekir. Her iki işlem de aynı boyuttaki vektörlerse, işlem bileşen düzeyinde gerçekleştirilir (ve aynı vektör türünü döndürür).

İşlem Açıklama
m = f * m Skaler bir değerle bileşen tabanlı matris çarpımı
v = f * v Skaler bir değerle bileşen tabanlı vektör çarpma
v = v * v Bir vektör değeriyle bileşen tabanlı vektör çarpma
m = m + m Matris bileşeni bazında toplama
m = m - m Matris bileşeni bazında çıkarma
m = m * m Doğrusal cebirsel çarpım

İşlem görenlerden biri, matrisimizin satır veya sütun boyutuyla eşleşen bir vektörse çarpma operatörü, cebirsel satır ve sütun çarpma işlemleri için kullanılabilir.

İşlem Açıklama
m = v * m Satır vektörü * matris doğrusal cebirsel çarpım
m = m * v Matris * sütun vektörel doğrusal cebirsel çarpım

Vektör nokta çarpımı, çapraz çarpım ve bileşen tabanlı çarpma:

İşlev Açıklama
f = dot(v, v) Vektör nokta çarpımı
v = cross(v, v) Vektör çapraz çarpımı
m = matrixCompMult(m, m) Bileşen tabanlı çarpma

Program denetimi

İşlev çağrısı Değer-getiri esasına göre arama
İterasyon for (<init>;<test>;<next>)
{ break, continue }
Seçim if ( ) { }
if ( ) { } else { }
switch () { break, case } - varsayılan destek kaydı sonuncu
Atla break, continue, return
(silmeye izin verilmez)
Giriş half4 main(float2 fragCoord)

Döngü sınırlamaları için

GLSL ES 1.0'a benzer, "for" döngüler çok sınırlıdır. derleyicinin bunu yapabilmesi gerekir: döngüyü açar. Bu, başlatıcı, test koşulu ve Her şeyin derleme sırasında hesaplanabilmesi için next ifadesi sabit değerler kullanmalıdır gerekir. next ifadesi, ++, --, +=, or -= kullanımıyla daha da sınırlıdır.

Yerleşik işlevler

GT (genel tür) float, float2, float3, float4 veya half, half2, half3, half4.

Bu işlevlerin çoğu bileşen olarak çalışır (fonksiyon başına bileşen). Bu mümkün değilse buna dikkat edin.

Açı ve trigonometrik fonksiyonlar

Açı olarak belirtilen işlev parametrelerinin radyan cinsinden olduğu varsayılır. Bu işlevlerden hiçbiri, hiçbir koşulda sıfıra bölünme hatasına yol açmaz. Öğe bir oranın böleni 0 ise sonuçlar tanımsız olur.

İşlev Açıklama
GT radians(GT degrees) Dereceyi radyana dönüştürür
GT degrees(GT radians) Radyanı dereceye dönüştürür
GT sin(GT angle) Standart sinüs
GT cos(GT angle) Standart kosinüs
GT tan(GT angle) Standart tanjant
GT asin(GT x) Sinüsü aralık içinde x olan bir açı döndürür $ \left[-{\pi\over 2},{\pi\over 2}\tight] $
GT acos(GT x) Kosinüsü x olan bir açı döndürür $ \left[0,\pi\tight] $ aralığı
GT atan(GT y, GT x) Aşağıdaki açıyı döndüren: trigonometrik arktanjant $ \left[{y\over x}\tight] $ $ \left[-\pi,\pi\tight] $ aralığı
GT atan(GT y_over_x) Trigonometrik açıyı döndürür arktanjant, aralıkta y_over_x değerine sahip $ \left[-{\pi\over 2},{\pi\over 2}\tight] $

Üstel fonksiyonlar

İşlev Açıklama
GT pow(GT x, GT y) x^y $ değerini döndürür
GT exp(GT x) $ e^x $ döndürür.
GT log(GT x) $ ln(x) $ döndürür
GT exp2(GT x) $2^x $ döndürür.
GT log2(GT x) $ log_2(x) $ değerini döndürür
GT sqrt(GT x) $ \sqrt{x} $ döndürür
GT inversesqrt(GT x) 1\over{\sqrt{x}} $ döndürür

Sık kullanılan işlevler

İşlev Açıklama
GT abs(GT x) Mutlak değer
GT sign(GT x) x işaretine bağlı olarak -1,0, 0,0 veya 1,0 değerini döndürür
GT floor(GT x) En yakın tam sayı <= x
GT ceil(GT x) En yakın tam sayı >= x
GT fract(GT x) X'in kesirli kısmını döndürür
GT mod(GT x, GT y) x modülü y değerini döndürür
GT mod(GT x, float y) x modülü y değerini döndürür
GT min(GT x, GT y) Minimum x veya y değerini döndürür
GT min(GT x, float y) Minimum x veya y değerini döndürür
GT max(GT x, GT y) Maksimum x veya y değerini döndürür
GT max(GT x, float y) Maksimum x veya y değerini döndürür
GT clamp(GT x, GT minVal, GT maxVal) minVal ve maxVal arasında sabitlenmiş x değerini döndürür.
GT clamp(GT x, float minVal, float maxVal) minVal ve maxVal arasında sabitlenmiş x değerini döndürür
GT saturate(GT x) 0,0 ile 1,0 arasında sınırlandırılmış x değerini döndürür
GT mix(GT x, GT y GT a) x ve y'nin doğrusal karışımını döndürür
GT mix(GT x, GT y, float a) x ve y'nin doğrusal karışımını döndürür
GT step(GT edge, GT x) x < ise 0,0 döndürür kenar, aksi takdirde 1.0
GT step(float edge, GT x) x < ise 0,0 döndürür kenar, aksi takdirde 1.0
GT smoothstep(GT edge0, GT edge1, GT x) Hermite interpolasyonu gerçekleştirir kenar0 < olduğunda 0 ile 1 arasında x < kenar1
GT smoothstep(float edge0, float edge1, GT x) Hermite interpolasyonu gerçekleştirir kenar0 < olduğunda 0 ile 1 arasında x < kenar1

Geometrik fonksiyonlar

Bu fonksiyonlar, vektörler üzerinde bileşen değil, vektör olarak çalışır. GT, 2-4 arasındaki boyutlardaki kayan/yarı vektörlerdir.

İşlev Açıklama
float/half length (GT x) Vektör uzunluğunu döndürür
float/half distance(GT p0, GT p1) Noktalar arasındaki mesafeyi döndürür
float/half dot(GT x, GT y) Nokta çarpımını döndürür
float3/half3 cross(float3/half3 x, float3/half3 y) Çapraz ürün iadesi
GT normalize(GT x) Vektörü 1. uzunlukta normalleştir
GT faceforward(GT N, GT I, GT Nref) Nokta(Nref, I) < ise N sonucunu döndürür 0, aksi takdirde -N.
GT reflect(GT I, GT N) Yansıtma yönü I - 2 * nokta(N,I) * N.
GT refract(GT I, GT N, float/half eta) Kırılma vektörünü döndürür

Matris işlevleri

Tip matris, herhangi bir kare matris türüdür.

İşlev Açıklama
mat matrixCompMult(mat x, mat y) Bileşen olarak x'i y ile çarpın
mat inverse(mat m) m'nin tersini döndürür

Vektör ilişkisel fonksiyonları

x ve y'yi bileşenlere göre karşılaştırın. Belirli bir çağrıya ilişkin giriş ve dönüş vektörlerinin boyutları eşleşmelidir. T, tam sayı ile kayan nokta vektör türlerinin birleşimidir. BV, giriş vektörlerinin boyutuyla eşleşen bir boole vektörüdür.

İşlev Açıklama
BV lessThan(T x, T y) x < y
BV lessThanEqual(T x, T y) x <= y
BV greaterThan(T x, T y) x > y
BV greaterThanEqual(T x, T y) x >= y
BV equal(T x, T y) x == y
BV equal(BV x, BV y) x == y
BV notEqual(T x, T y) x != y
BV notEqual(BV x, BV y) x != y
bool any(BV x) x'in herhangi bir bileşeni true ise true
bool all(BV x) x'in tüm bileşenleri true ise true.
BV not(BV x) x'in mantıksal tamamlaması

Renk işlevleri

İşlev Açıklama
vec4 unpremul(vec4 color) Renk değerini önceden çarpılmayan değerine dönüştürür alfa
half3 toLinearSrgb(half3 color) Renk alanını doğrusal SRGB'ye dönüştürme
half3 fromLinearSrgb(half3 color) Renk alanı dönüştürme

Gölgelendirici örnekleme (değerlendirme)

Örnekleyici türleri desteklenmez ancak diğer gölgelendiricileri değerlendirebilirsiniz. İhtiyacınız varsa örneklendirmek için tablodaki BitmapShader nesnesini tanımlayıp olduğunu lütfen unutmayın. Bunu herhangi bir gölgelendirici için yapabilirsiniz. Böylece, herhangi bir Android Shader'ı İlk olarak bit eşleme, RuntimeShader nesneleri. Bu da büyük ölçüde esneklik sağlar, ancak karmaşık gölgelendiriciler bir döngü içinde değerlendirilebilir.

uniform shader image;

image.eval(coord).a   // The alpha channel from the evaluated image shader

Ham tampon örnekleme

Çoğu resim renkle yönetilmesi gereken renkler içeriyor olsa da bazı resimler normal değerleri depolayan resimler, malzeme özellikleri (ör. pürüzlülük), yükseklik haritaları veya tamamen başka herhangi bir depolanan matematiksel verileri ifade eder. Bu türler kullanılırken bir BitmapShader'ı genel bir ham arabellek olarak kullanabilirsiniz. RuntimeShader#setInputBuffer. Böylece renk alanı dönüştürmeleri ve filtrelemeden kaçınmış olursunuz.