AGSL ได้รับการออกแบบมาให้เข้ากันได้กับ GLSL ES 1.0 ส่วนใหญ่ ดูข้อมูลเพิ่มเติมได้ที่ฟังก์ชันที่เทียบเท่าในเอกสารประกอบภาษาการจัดแสง OpenGL ES เอกสารนี้จะพยายามระบุความแตกต่างระหว่าง AGSL และ GLSL หากเป็นไปได้
ประเภท
AGSL รองรับประเภท GLSL ES 1.0 พร้อมกับวิธีเพิ่มเติมในการแสดงประเภทเวกเตอร์และเมทริกซ์ AGSL รองรับ short และ half ประเภทอื่นๆ เพื่อแสดงค่าที่มีความแม่นยำปานกลาง
ประเภทพื้นฐาน
| ประเภท | คำอธิบาย | 
|---|---|
| void | ไม่มีค่าที่แสดงผลของฟังก์ชันหรือรายการพารามิเตอร์ว่าง ฟังก์ชันที่ไม่มีประเภทการคืนค่า void จะต้องแสดงผลค่า ซึ่งแตกต่างจาก GLSL | 
| bool, bvec2, bvec3, bvec4(bool2, bool3, bool4) | สเกลาร์/เวกเตอร์บูลีน | 
| int, ivec2, ivec3, ivec4(int2, int3, int4) | highpจำนวนเต็ม/เวกเตอร์ที่มีค่าบวก/ลบ | 
| float, vec2, vec3, vec4(float2, float3, float4) | highp(ความแม่นยำแบบธรรมดา) จุดลอยตัว
สเกลาร์/เวกเตอร์ | 
| short, short2, short3, short4 | เทียบเท่ากับ mediump intที่มีเครื่องหมาย
จำนวนเต็ม/เวกเตอร์ | 
| half, half2, half3, half4 | เทียบเท่ากับสเกลาร์/เวกเตอร์ mediump float | 
| mat2, mat3, mat4(float2x2, float3x3, float4x4) | เมทริกซ์ floatขนาด 2x2, 3x3, 4x4 | 
| half2x2, half3x3, half4x4 | เทียบเท่ากับประเภทเมทริกซ์ mediump float | 
ความแม่นยำและค่าต่ำสุดของช่วง
ค่าเหล่านี้คือความแม่นยำและช่วงขั้นต่ำที่รับประกันซึ่งเชื่อมโยงกับตัวแก้ไขแต่ละรายการตามข้อกำหนด OpenGL ES 2.0 เนื่องจากอุปกรณ์ส่วนใหญ่รองรับ ES 3.0 จึงมีความแม่นยำ/ระยะและint mediumpระยะที่รับประกันมากขึ้นhighp ตัวแก้ไขความแม่นยำสามารถใช้กับตัวแปรและพารามิเตอร์ที่เป็นสเกลาร์ เวกเตอร์ และเมทริกซ์ เรารับประกันเฉพาะค่าขั้นต่ำที่ระบุไว้ด้านล่างเท่านั้น
lowp ไม่จำเป็นต้องมีความแม่นยำต่ำกว่า mediump และ mediump ไม่จำเป็นต้องมีความแม่นยำต่ำกว่า highp ปัจจุบัน AGSL จะแปลง lowp เป็น mediump ในเอาต์พุตสุดท้าย
| ตัวขยาย | ช่วง "float" | ช่วงขนาดของ "float" | ความแม่นยำของ "float" | ช่วง "int" | 
|---|---|---|---|---|
| highp | \(\left\{-2^{62},2^{62}\right\}\) | \(\left\{2^{-62},2^{62}\right\}\) | สัมพัทธ์: \(2^{-16}\) | \(\left\{-2^{16},2^{16}\right\}\) | 
| mediump | \(\left\{-2^{14},2^{14}\right\}\) | \(\left\{2^{-14},2^{14}\right\}\) | สัมพัทธ์: \(2^{-10}\) | \(\left\{-2^{10},2^{10}\right\}\) | 
| lowp | \(\left\{-2,2\right\}\) | \(\left\{2^{-8},2\right\}\) | ค่าสัมบูรณ์: \(2^{-8}\) | \(\left\{-2^{8},2^{8}\right\}\) | 
นอกจากไวยากรณ์เครื่องหมายกำกับด้านล่างที่เป็นตัวเลขของอาร์เรย์ เช่น var[num] แล้ว ชื่อขององค์ประกอบเวกเตอร์สำหรับเวกเตอร์ที่มีความยาว 2-4 จะแสดงด้วยตัวอักษรตัวเดียว คอมโพเนนต์สามารถสลับและทําซ้ำได้ เช่น vect.yx, vect.yy
vect.xyzw - ใช้เมื่อเข้าถึงเวกเตอร์ที่แสดงจุด/เส้นตั้งฉาก
vect.rgba - ใช้เมื่อเข้าถึงเวกเตอร์ที่แสดงสี
vect.LTRB - ใช้เมื่อเวกเตอร์แสดงสี่เหลี่ยมผืนผ้า (ไม่ใช่ใน GLSL)
ใน AGSL คุณสามารถใช้ 0 และ 1 เพื่อสร้าง 0 หรือ 1 แบบคงที่ในช่องนั้น
เช่น vect.rgb1 == vec4(vect.rgb,1)
โครงสร้างและอาร์เรย์
โครงสร้างจะประกาศด้วยไวยากรณ์เดียวกับ GLSL แต่ AGSL รองรับเฉพาะโครงสร้างในระดับสากล
struct type-name {
 members
} struct-name; // optional variable declaration.
ระบบรองรับเฉพาะอาร์เรย์ 1 มิติที่มีขนาดอาร์เรย์ที่ชัดเจน โดยใช้ไวยากรณ์สไตล์ C หรือ GLSL ดังนี้
<base type>[<array size>] ชื่อตัวแปร - เช่น half[10] x;
<base type> ชื่อตัวแปร[<array size>] - เช่น half x[10];
อาร์เรย์ไม่สามารถแสดงผลจากฟังก์ชัน คัดลอก กําหนด หรือเปรียบเทียบได้ ข้อจำกัดของอาร์เรย์จะส่งผลต่อโครงสร้างที่มีอาร์เรย์ อาร์เรย์จะได้รับการจัดทำดัชนีได้โดยใช้ค่าคงที่หรือตัวแปรของลูปเท่านั้น
รอบคัดเลือก
| ประเภท | คำอธิบาย | 
|---|---|
| const | ค่าคงที่เวลาคอมไพล์หรือพารามิเตอร์ฟังก์ชันที่อ่านอย่างเดียว | 
| uniform | ค่าจะไม่เปลี่ยนแปลงในพรอมิเตีที่กำลังประมวลผล
ระบบจะส่งเครื่องแบบจาก Android โดยใช้เมธอด RuntimeShader สำหรับ setColorUniform,setFloatUniform,setIntUniform,setInputBufferและsetInputShader | 
| in | สําหรับพารามิเตอร์ฟังก์ชันที่ส่งเข้ามา ซึ่งเป็นค่าเริ่มต้น | 
| out | สําหรับพารามิเตอร์ฟังก์ชันที่ส่งออก ต้องใช้ความแม่นยำเดียวกับคําจํากัดความของฟังก์ชัน | 
| inout | สําหรับพารามิเตอร์ที่ส่งทั้งเข้าและออกจากฟังก์ชัน ต้องใช้ความแม่นยำเดียวกับคำจำกัดความของฟังก์ชัน | 
การประกาศตัวแปร
การประกาศต้องอยู่ในขอบเขตที่มีวงเล็บปีกกาอย่างชัดเจน ไม่อนุญาตให้ประกาศ y ในตัวอย่างต่อไปนี้
if (condition)
    int y = 0;
ข้อมูลเบื้องต้นเกี่ยวกับเมทริกซ์/โครงสร้าง/อาร์เรย์
ตัวอย่างตัวสร้างเมทริกซ์
เมื่อสร้างเมทริกซ์ด้วยค่าเดียว ค่าทั้งหมดตามแนวทแยงจะได้รับค่านั้น ส่วนที่เหลือจะได้รับค่า 0 float2x2(1.0) จะสร้างเมทริกซ์เอกลักษณ์ 2x2
เมื่อสร้างเมทริกซ์ด้วยค่าหลายค่า ระบบจะกรอกข้อมูลในคอลัมน์ก่อน (ลําดับหลักตามคอลัมน์)
โปรดทราบว่าระบบไม่รองรับคอนสตรัคเตอร์ที่ลดจำนวนคอมโพเนนต์ของเวกเตอร์ที่ส่งเข้ามา ซึ่งต่างจาก GLSL แต่คุณใช้การสลับที่เพื่อให้ได้ผลลัพธ์เดียวกันได้ หากต้องการสร้าง vec3 จาก vec4 ใน AGSL ที่มีลักษณะการทำงานเหมือนกับ GLSL ให้ระบุ vec3 nv = quadVec.xyz
ตัวอย่างตัวสร้างโครงสร้าง
struct light { float intensity; float3 pos; };
// literal integer constants auto-converted to floating point
light lightVar = light(3, float3(1, 2, 3.0));
องค์ประกอบเมตริกซ์
เข้าถึงองค์ประกอบของเมทริกซ์ด้วยไวยากรณ์การเขียนsubscript ของอาร์เรย์
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
ฟิลด์โครงสร้าง
เลือกช่องโครงสร้างโดยใช้โอเปอเรเตอร์ระยะเวลา . โอเปอเรเตอร์ ได้แก่
| โอเปอเรเตอร์ | คำอธิบาย | 
|---|---|
| . | ตัวเลือกช่อง | 
| ==, != | ความเท่าเทียม | 
| = | งาน | 
องค์ประกอบอาร์เรย์
ระบบจะเข้าถึงองค์ประกอบอาร์เรย์โดยใช้โอเปอเรเตอร์เครื่องหมายวงเล็บปีกกาของอาร์เรย์ [ ] เช่น
diffuseColor += lightIntensity[3] * NdotL;
ผู้ให้บริการ
เรียงตามลําดับความสําคัญ โอเปอเรเตอร์ความสัมพันธ์และเงื่อนไข > < <= >= == != จะประเมินเป็นบูลีน หากต้องการเปรียบเทียบเวกเตอร์ทีละองค์ประกอบ ให้ใช้ฟังก์ชัน เช่น lessThan(), equal() เป็นต้น
| โอเปอเรเตอร์ | คำอธิบาย | การเชื่อมโยง | |
|---|---|---|---|
| 1 | () | การจัดกลุ่มในวงเล็บ | ไม่มี | 
| 2 | []  ()  .  ++ -- | ตัวห้อยของอาร์เรย์ การเรียกใช้ฟังก์ชันและ โครงสร้างคอนสตรัคเตอร์ ช่องหรือเมธอด ตัวเลือก, swizzle การเพิ่มและลดลงต่อท้าย | ซ้ายไปขวา | 
| 3 | ++ --  + - ! | คำนำหน้าการเพิ่มขึ้นและการลดลงแบบยูนาร์ | ขวาไปซ้าย | 
| 4 | * / | คูณและหาร | ซ้ายไปขวา | 
| 5 | + - | บวกและลบ | ซ้ายไปขวา | 
| 7 | < > <= >= | เชิงสัมพันธ์ | ซ้ายไปขวา | 
| 8 | == != | เท่ากับ/ไม่เท่ากับ | ซ้ายไปขวา | 
| 12 | && | ตัวดำเนินการ AND | ซ้ายไปขวา | 
| 13 | ^^ | XOR เชิงตรรกะ | ซ้ายไปขวา | 
| 14 | || | ตัวดำเนินการ OR | ซ้ายไปขวา | 
| 15 | ?\: | การเลือก (Operand ทั้งหมด 1 รายการ) | ซ้ายไปขวา | 
| 16 | =   += -=   *= /= | assignment arithmetic assignment arithmetic assignment | ซ้ายไปขวา | 
| 17 | , | sequence | ซ้ายไปขวา | 
การดำเนินการกับเมทริกซ์และเวกเตอร์
เมื่อใช้กับค่าสเกลาร์ โอเปอเรเตอร์ทางคณิตศาสตร์จะให้ผลลัพธ์เป็นค่าสเกลาร์ สำหรับโอเปอเรเตอร์ที่ไม่ใช่โมดูโล หากหนึ่ง operand เป็นสกัลาร์และอีกอันเป็นเวกเตอร์หรือเมทริกซ์ ระบบจะดำเนินการกับองค์ประกอบต่างๆ และผลลัพธ์จะเป็นเวกเตอร์หรือเมทริกซ์ประเภทเดียวกัน หากการดำเนินการทั้ง 2 รายการเป็นเวกเตอร์ที่มีขนาดเท่ากัน ระบบจะดำเนินการกับองค์ประกอบ (และแสดงผลเวกเตอร์ประเภทเดียวกัน)
| การดำเนินการ | คำอธิบาย | 
|---|---|
| m = f * m | การคูณเมทริกซ์ตามองค์ประกอบด้วยค่าสเกลาร์ | 
| v = f * v | การคูณเวกเตอร์ตามองค์ประกอบด้วยค่าสเกลาร์ | 
| v = v * v | การคูณเวกเตอร์ตามองค์ประกอบด้วยค่าเวกเตอร์ | 
| m = m + m | การบวกองค์ประกอบของเมทริกซ์ | 
| m = m - m | การลบองค์ประกอบของเมทริกซ์ทีละรายการ | 
| m = m * m | การคูณพีชคณิตเชิงเส้น | 
หากโอเปอเรนด์หนึ่งเป็นเวกเตอร์ที่ตรงกับขนาดแถวหรือคอลัมน์ของเมทริกซ์ คุณจะสามารถใช้โอเปอเรเตอร์การคูณเพื่อทำการคูณแถวและคอลัมน์ทางพีชคณิตได้
| การดำเนินการ | คำอธิบาย | 
|---|---|
| m = v * m | เวกเตอร์แถว * คูณพีชคณิตเชิงเส้นของเมทริกซ์ | 
| m = m * v | คูณเมทริกซ์ * เวกเตอร์คอลัมน์ด้วยพีชคณิตเชิงเส้น | 
ใช้ฟังก์ชันในตัวสำหรับผลคูณเวกเตอร์ ผลคูณเวกเตอร์ครอส และการคูณตามองค์ประกอบ
| การทำงาน | คำอธิบาย | 
|---|---|
| f = dot(v, v) | ผลคูณเวกเตอร์ | 
| v = cross(v, v) | ผลคูณเวกเตอร์ | 
| m = matrixCompMult(m, m) | คูณตามองค์ประกอบ | 
การควบคุมโปรแกรม
| การเรียกใช้ฟังก์ชัน | การเรียกใช้โดยค่าที่แสดงผล | 
|---|---|
| การทำซ้ำ | for (<init>;<test>;<next>){ break, continue } | 
| การเลือก | if ( ) { }if ( ) { } else { }switch () { break, case }- default case last | 
| กระโดด | break, continue, return(ไม่อนุญาตให้ทิ้ง) | 
| รายการ | half4 main(float2 fragCoord) | 
ข้อจํากัดของวง For
ลูป "for" มีข้อจํากัดค่อนข้างมากเช่นเดียวกับ GLSL ES 1.0 เนื่องจากคอมไพเลอร์ต้องสามารถยกเลิกการวนลูปได้ ซึ่งหมายความว่าตัวเริ่มต้น เงื่อนไขการทดสอบ และคำสั่ง next ต้องใช้ค่าคงที่เพื่อให้ระบบประมวลผลทุกอย่างได้เมื่อคอมไพล์ คำสั่ง next จะจํากัดให้ใช้ ++, --, +=, or -= เท่านั้น
ฟังก์ชันในตัว
GT (ประเภททั่วไป) คือ float, float2, float3, float4 หรือ
half, half2, half3, half4
ฟังก์ชันเหล่านี้ส่วนใหญ่จะทำงานแบบคอมโพเนนต์ (ใช้ฟังก์ชันต่อคอมโพเนนต์) ระบบจะระบุไว้หากไม่ใช่
มุมและฟังก์ชันตรีโกณมิติ
ระบบจะถือว่าพารามิเตอร์ฟังก์ชันที่ระบุเป็นมุมเป็นหน่วยเรเดียน ฟังก์ชันเหล่านี้จะไม่ทำให้เกิดข้อผิดพลาดหารด้วย 0 ไม่ว่าในกรณีใดก็ตาม หากตัวหารของอัตราส่วนเป็น 0 ผลลัพธ์จะเป็นค่าที่ไม่ระบุ
| การทำงาน | คำอธิบาย | 
|---|---|
| GT radians(GT degrees) | แปลงองศาเป็นเรเดียน | 
| GT degrees(GT radians) | แปลงเรเดียนเป็นองศา | 
| GT sin(GT angle) | ไซน์มาตรฐาน | 
| GT cos(GT angle) | โคไซน์มาตรฐาน | 
| GT tan(GT angle) | เส้นสัมผัสมาตรฐาน | 
| GT asin(GT x) | ส่งคืนมุมที่มีไซน์เป็น x ในช่วง $ \left[-{\pi\over 2},{\pi\over 2}\right] $ | 
| GT acos(GT x) | ส่งคืนมุมที่มีโคไซน์เป็น x ในช่วง $ \left[0,\pi\right] $ | 
| GT atan(GT y, GT x) | ส่งคืนมุมที่มีอาร์คแทนเจนต์เชิงตรีโกณคือ $ \left[{y\over x}\right] $ ในช่วง $ \left[-\pi,\pi\right] $ | 
| GT atan(GT y_over_x) | ส่งคืนมุมที่มีอาร์คแทนเจนต์ตรีโกณมิติเป็น y_over_xในช่วง $ \left[-{\pi\over 2},{\pi\over 2}\right] $ | 
ฟังก์ชันเอกซ์โพเนนเชียล
| การทำงาน | คำอธิบาย | 
|---|---|
| GT pow(GT x, GT y) | แสดงผล $ x^y $ | 
| GT exp(GT x) | แสดงผล $ e^x $ | 
| GT log(GT x) | แสดงผลลัพธ์ $ ln(x) $ | 
| GT exp2(GT x) | แสดงผลลัพธ์ $ 2^x $ | 
| GT log2(GT x) | แสดงผล $ log_2(x) $ | 
| GT sqrt(GT x) | แสดงผล $ \sqrt{x} $ | 
| GT inversesqrt(GT x) | แสดงผล $ 1\over{\sqrt{x}} $ | 
ฟังก์ชันทั่วไป
| การทำงาน | คำอธิบาย | 
|---|---|
| GT abs(GT x) | ค่าสัมบูรณ์ | 
| GT sign(GT x) | แสดงผล -1.0, 0.0 หรือ 1.0 ตามเครื่องหมายของ x | 
| GT floor(GT x) | จำนวนเต็มที่ใกล้ที่สุด <= x | 
| GT ceil(GT x) | จำนวนเต็มที่ใกล้ที่สุด >= x | 
| GT fract(GT x) | แสดงผลส่วนที่เป็นเศษของ x | 
| GT mod(GT x, GT y) | แสดงผลค่าของ x หารด้วย y ที่เหลือ | 
| GT mod(GT x, float y) | แสดงผลค่าของ x หารด้วย y ที่เหลือ | 
| GT min(GT x, GT y) | แสดงผลค่าต่ำสุดของ x หรือ y | 
| GT min(GT x, float y) | แสดงผลค่าต่ำสุดของ x หรือ y | 
| GT max(GT x, GT y) | แสดงผลค่าสูงสุดของ x หรือ y | 
| GT max(GT x, float y) | แสดงผลค่าสูงสุดของ x หรือ y | 
| GT clamp(GT x, GTminVal, GT maxVal) | แสดงผล x ที่จำกัดระหว่าง minVal และ maxVal | 
| GT clamp(GT x, floatminVal, float maxVal) | แสดงผล x ที่จำกัดระหว่าง minVal และ maxVal | 
| GT saturate(GT x) | แสดงผล x ที่จำกัดระหว่าง 0.0 ถึง 1.0 | 
| GT mix(GT x, GT y,GT a) | แสดงผลลัพธ์การผสมเชิงเส้นของ x และ y | 
| GT mix(GT x, GT y,float a) | แสดงผลลัพธ์การผสมเชิงเส้นของ x และ y | 
| GT step(GT edge, GT x) | แสดงผล 0.0 หาก x < edge ไม่เช่นนั้นแสดงผล 1.0 | 
| GT step(float edge,GT x) | แสดงผล 0.0 หาก x < edge ไม่เช่นนั้นแสดงผล 1.0 | 
| GT smoothstep(GT edge0,GT edge1, GT x) | ทำการอินเตอร์โพเลชัน Hermite ระหว่าง 0 ถึง 1 เมื่อ edge0 < x < edge1 | 
| GT smoothstep(floatedge0, float edge1,GT x) | ทำการอินเตอร์โพเลชัน Hermite ระหว่าง 0 ถึง 1 เมื่อ edge0 < x < edge1 | 
ฟังก์ชันเรขาคณิต
ฟังก์ชันเหล่านี้จะดำเนินการกับเวกเตอร์แบบเวกเตอร์ ไม่ใช่แบบส่วนประกอบ GT คือเวกเตอร์แบบลอย/ครึ่งขนาด 2-4
| การทำงาน | คำอธิบาย | 
|---|---|
| float/half length(GT x) | แสดงผลความยาวของเวกเตอร์ | 
| float/half distance(GTp0, GT p1) | แสดงผลระยะทางระหว่างจุด | 
| float/half dot(GT x,GT y) | แสดงผลลัพธ์ของผลคูณจุด | 
| float3/half3cross(float3/half3 x,float3/half3 y) | ผลคูณไขว้ของการส่งคืน | 
| GT normalize(GT x) | ทำให้เวกเตอร์มีความยาว 1 | 
| GT faceforward(GT N,GT I, GT Nref) | แสดงผล N หาก dot(Nref, I) < 0 มิเช่นนั้นแสดงผล -N | 
| GT reflect(GT I, GT N) | ทิศทางการสะท้อน I - 2 * dot(N,I) * N | 
| GT refract(GT I, GT N,float/half eta) | แสดงผลเวกเตอร์หักเห | 
ฟังก์ชันเมตริกซ์
ประเภท mat คือประเภทเมทริกซ์สี่เหลี่ยมจัตุรัสประเภทใดก็ได้
| การทำงาน | คำอธิบาย | 
|---|---|
| mat matrixCompMult(matx, mat y) | คูณ x ด้วย y ตามองค์ประกอบ | 
| mat inverse(mat m) | แสดงค่าผกผันของ m | 
ฟังก์ชันเชิงสัมพันธ์ของเวกเตอร์
เปรียบเทียบองค์ประกอบ x และ y ขนาดของเวกเตอร์อินพุตและเวกเตอร์ผลลัพธ์สำหรับการเรียกใช้หนึ่งๆ ต้องตรงกัน T คือสหพันธ์ของประเภทเวกเตอร์จำนวนเต็มและทศนิยม BV คือเวกเตอร์บูลีนซึ่งมีขนาดตรงกับเวกเตอร์อินพุต
| การทำงาน | คำอธิบาย | 
|---|---|
| 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(Tx, 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) | trueหากองค์ประกอบใดของ x เป็นtrue | 
| bool all(BV x) | trueหากองค์ประกอบทั้งหมดของ x เป็นtrue | 
| BV not(BV x) | เชิงตรรกะเสริมของ x | 
ฟังก์ชันสี
| การทำงาน | คำอธิบาย | 
|---|---|
| vec4 unpremul(vec4color) | แปลงค่าสีเป็นค่าอัลฟ่าแบบไม่คูณล่วงหน้า | 
| half3 toLinearSrgb(half3color) | การเปลี่ยนรูปแบบพื้นที่สีเป็น SRGB แบบเชิงเส้น | 
| half3 fromLinearSrgb(half3color) | การเปลี่ยนรูปแบบพื้นที่สี | 
การสุ่มตัวอย่างชิดเดอร์ (การประเมิน)
ระบบไม่รองรับประเภท Sampler แต่คุณประเมิน Shader อื่นๆ ได้ หากต้องการสุ่มตัวอย่างพื้นผิว คุณสามารถสร้างออบเจ็กต์ BitmapShader และเพิ่มเป็นยูนิฟอร์ม คุณทําเช่นนี้ได้กับเชดเดอร์ใดก็ได้ ซึ่งหมายความว่าคุณสามารถประเมินเชดเดอร์ Android ใดก็ได้โดยตรงโดยไม่ต้องเปลี่ยนเป็น Bitmap ก่อน รวมถึงออบเจ็กต์ RuntimeShader อื่นๆ วิธีนี้มีความยืดหยุ่นสูงมาก แต่การประเมินชิเดอร์ที่ซับซ้อนอาจใช้ทรัพยากรมาก โดยเฉพาะในลูป
uniform shader image;
image.eval(coord).a   // The alpha channel from the evaluated image shader
การสุ่มตัวอย่างบัฟเฟอร์ดิบ
แม้ว่ารูปภาพส่วนใหญ่จะมีสีที่ควรจัดการสี แต่รูปภาพบางรูปก็มีข้อมูลที่ไม่ใช่สีจริงๆ ซึ่งรวมถึงรูปภาพที่จัดเก็บข้อมูลปกติ คุณสมบัติของวัสดุ (เช่น ความขรุขระ) แผนที่ความสูง หรือข้อมูลทางคณิตศาสตร์ล้วนๆ อื่นๆ ที่เก็บอยู่ในรูปภาพ เมื่อใช้รูปภาพประเภทเหล่านี้ใน AGSL คุณสามารถใช้ BitmapShader เป็นบัฟเฟอร์ดิบทั่วไปได้โดยใช้ RuntimeShader#setInputBuffer วิธีนี้จะช่วยหลีกเลี่ยงการเปลี่ยนรูปแบบและกรองพื้นที่สี
