AGSL-কে এমনভাবে ডিজাইন করা হয়েছে যাতে এটি GLSL ES 1.0-এর সাথে ব্যাপকভাবে মানানসই হয়। আরও তথ্যের জন্য, OpenGL ES Shading Language ডকুমেন্টেশনে সমতুল্য ফাংশন দেখুন। সম্ভব হলে, এই ডকুমেন্টেশন AGSL ও GLSL-এর মধ্যে পার্থক্য তুলে ধরার চেষ্টা করে।
ধরন
AGSL-এ GLSL ES 1.0 ধরনের সাথে ভেক্টর ও ম্যাট্রিক্সের ধরন দেখানোর অতিরিক্ত উপায়ও
কাজ করে। AGSL অতিরিক্ত short এবং half ধরনের সাপোর্ট করে যা
মিডিয়াম প্রিসিশন দেখায়।
প্রাথমিক ধরন
| ধরন | বর্ণনা |
|---|---|
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 সাইন করা সংখ্যার সমতুল্য
integer/vector |
half, half2, half3, half4 |
mediump float স্কেলার/ভেক্টরের সমতুল্য |
mat2, mat3, mat4 (float2x2, float3x3, float4x4) |
২x২, ৩x৩, ৪x৪ float ম্যাট্রিক্স
|
half2x2, half3x3, half4x4 |
mediump float ম্যাট্রিক্সের ধরনের সমতুল্য |
প্রিসিশন ও রেঞ্জের ন্যূনতম ভ্যালু
OpenGL ES 2.0 স্পেসিফিকেশনের উপর ভিত্তি করে প্রতিটি মডিফায়ারের সাথে যুক্ত ন্যূনতম গ্যারান্টিযুক্ত নির্ভুলতা এবং রেঞ্জ এগুলি। যেহেতু বেশিরভাগ ডিভাইস
ES 3.0-কে সাপোর্ট করে, তাই সেগুলিতে আরও বেশি গ্যারান্টিযুক্ত highp প্রিসিশন/রেঞ্জ এবং
int mediump রেঞ্জ থাকবে। প্রিসিশন মডিফায়ার স্কেলার, ভেক্টর ও ম্যাট্রিক্স ভেরিয়েবল এবং প্যারামিটারে প্রয়োগ করা যেতে পারে। শুধুমাত্র নিচে তালিকাভুক্ত ন্যূনতম ভ্যালুর গ্যারান্টি দেওয়া হয়;
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] ছাড়াও, ২ - ৪ দৈর্ঘ্যের ভেক্টরের জন্য ভেক্টর কম্পোনেন্টের নাম একটি অক্ষর দ্বারা চিহ্নিত করা হয়। কম্পোনেন্ট
সুইজেল ও রেপ্লিকেট করা যেতে পারে। যেমন: 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.
C-স্টাইল বা GLSL স্টাইল সিনট্যাক্স ব্যবহার করে, শুধুমাত্র ১-ডাইমেনশনাল অ্যারে নির্দিষ্ট অ্যারে সাইজের সাথে কাজ করে:
<base type>[<array size>] ভেরিয়েবলের নাম - যেমন: half[10] x;
<base type> variable name[<array size>] - ex: half x[10];
অ্যারে কোনও ফাংশন থেকে ফেরত, কপি, অ্যাসাইন বা তুলনা করা যাবে না। অ্যারে সংক্রান্ত বিধিনিষেধ অ্যারে সহ স্ট্রাকচারেও প্রযোজ্য হয়। শুধুমাত্র কনস্ট্যান্ট বা লুপ ভেরিয়েবল ব্যবহার করে অ্যারে ইন্ডেক্স করা যাবে।
কোয়ালিফায়ার
| ধরন | বর্ণনা |
|---|---|
const
|
কম্পাইল-টাইম কনস্ট্যান্ট বা শুধু-পড়া-যায় এমন ফাংশন প্যারামিটার। |
uniform
|
প্রসেস করা হচ্ছে এমন প্রিমিটিভ জুড়ে ভ্যালু পরিবর্তন হয় না।
setColorUniform, setFloatUniform,
setIntUniform, setInputBuffer এবং
setInputShader-এর জন্য
RuntimeShader
পদ্ধতি ব্যবহার করে Android থেকে ইউনিফর্ম পাস করা হয়। |
in
|
পাস-ইন ফাংশন প্যারামিটারের জন্য। এটি ডিফল্ট বিকল্প। |
out
|
পাস-আউট ফাংশন প্যারামিটারের জন্য। ফাংশন সংজ্ঞার মতো একই নির্ভুলতা ব্যবহার করতে হবে। |
inout
|
ফাংশনের মধ্যে পাস করা এবং ফাংশন থেকে বের করা প্যারামিটারের জন্য। ফাংশন সংজ্ঞার মতো একই নির্ভুলতা ব্যবহার করতে হবে। |
ভেরিয়েবল ডিক্লারেশন
ঘোষণা অবশ্যই একটি সুস্পষ্ট বন্ধনীযুক্ত স্কোপে হতে হবে। নিম্নলিখিত স্যাম্পেলে y-এর
ঘোষণা অনুমোদিত নয়:
if (condition)
int y = 0;
ম্যাট্রিক্স/স্ট্রাকচার/অ্যারে সংক্রান্ত প্রাথমিক তথ্য
ম্যাট্রিক্স কনস্ট্রাক্টরের উদাহরণ
যখন একটি ম্যাট্রিক্স একটি একক মান দিয়ে তৈরি করা হয়, তখন
কর্ণ বরাবর সমস্ত মানকে সেই মান দেওয়া হয়, বাকিগুলিকে শূন্য দেওয়া হয়। float2x2(1.0) তাই
একটি 2x2 আইডেন্টিটি ম্যাট্রিক্স তৈরি করবে।
একাধিক ভ্যালু দিয়ে ম্যাট্রিক্স তৈরি করা হলে, প্রথমে কলাম পূরণ করা হয় (কলাম-মেজর অর্ডার)।
মনে রাখবেন যে, GLSL-এর মতো, পাস-ইন ভেক্টরের কম্পোনেন্টের সংখ্যা কমিয়ে দেয় এমন কনস্ট্রাক্টর কাজ করে না, তবে একই এফেক্ট পেতে আপনি সুইজলিং ব্যবহার করতে পারেন। GLSL-এর মতো একই আচরণ সহ AGSL-এ vec4 থেকে vec3 তৈরি করতে, 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));
ম্যাট্রিক্স কম্পোনেন্ট
অ্যারে সাবস্ক্রিপ্টিং সিনট্যাক্স ব্যবহার করে ম্যাট্রিক্সের উপাদান অ্যাক্সেস করুন।
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 | () |
বন্ধনীতে গ্রুপিং | N/A |
| 2 | [] () . ++ --
|
অ্যারে সাবস্ক্রিপ্ট ফাংশন কল ও কনস্ট্রাক্টর স্ট্রাকচার ফিল্ড বা পদ্ধতি নির্বাচক, সুইজেল পোস্টফিক্স ইনক্রিমেন্ট ও ডিক্রিমেন্ট | বাঁ থেকে ডান |
| 3 | ++ -- + - !
|
প্রিফিক্স ইনক্রিমেন্ট এবং ডিক্রিমেন্ট ইউনারি | ডান থেকে বামে |
| 4 | * / |
গুণ ও ভাগ করা | বাঁ থেকে ডান |
| 5 | + - |
যোগ ও বিয়োগ করো | বাঁ থেকে ডান |
| 7 | < > <= >= |
রিলেশনাল | বাঁ থেকে ডান |
| 8 | == != |
সমতা/অসমতা | বাঁ থেকে ডান |
| 12 | && |
লজিকাল AND | বাঁ থেকে ডান |
| 13 | ^^ |
লজিকাল XOR | বাঁ থেকে ডান |
| 14 | || |
লজিকাল OR | বাঁ থেকে ডান |
| 15 | ?\:
|
বেছে নেওয়া (একটি সম্পূর্ণ অপারেন্ড) | বাঁ থেকে ডান |
| 16 | = += -= *= /=
|
অ্যাসাইনমেন্ট পাটিগণিত অ্যাসাইনমেন্ট পাটিগণিত অ্যাসাইনমেন্ট | বাঁ থেকে ডান |
| 17 | , |
ক্রম | বাঁ থেকে ডান |
ম্যাট্রিক্স ও ভেক্টর অপারেশন
স্কেলার ভ্যালুর ক্ষেত্রে প্রয়োগ করা হলে, পাটিগণিত অপারেটর স্কেলার ফলাফল দেয়। মডিউলো ছাড়া অন্যান্য অপারেটরের ক্ষেত্রে, একটি অপারেন্ড স্কেলার এবং অন্যটি ভেক্টর বা ম্যাট্রিক্স হলে, অপারেশনটি কম্পোনেন্ট অনুযায়ী করা হয় এবং একই ভেক্টর বা ম্যাট্রিক্স টাইপ হিসেবে ফলাফল পাওয়া যায়। দুটি অপারেশন একই সাইজের ভেক্টর হলে, অপারেশনটি কম্পোনেন্ট অনুযায়ী করা হয় (এবং একই ভেক্টর টাইপ ফিরিয়ে দেয়)।
| অপারেশন | বর্ণনা |
|---|---|
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 }
- ডিফল্ট কেস শেষে |
| Jump | break, continue, return (বাতিল করার অনুমতি নেই) |
| এন্ট্রি | half4 main(float2 fragCoord) |
লুপের জন্য সীমাবদ্ধতা
GLSL ES 1.0-এর মতো, 'for' লুপ বেশ সীমিত; কম্পাইলারকে অবশ্যই লুপ আনরোল করতে
পারতে হবে। এর অর্থ হল, ইনিশিয়ালাইজার, টেস্ট কন্ডিশন এবং
next স্টেটমেন্টে অবশ্যই কনস্ট্যান্ট ব্যবহার করতে হবে যাতে কম্পাইল করার সময় সবকিছু
গণনা করা যায়। next স্টেটমেন্ট ++, --, +=, or -= ব্যবহারের ক্ষেত্রে আরও সীমাবদ্ধ।
বিল্ট-ইন ফাংশন
GT (জেনেরিক টাইপ) হল float, float2, float3, float4 অথবা
half, half2, half3, half4।
এইসব ফাংশনের বেশিরভাগই কম্পোনেন্ট-ভিত্তিক কাজ করে (ফাংশনটি প্রতিটি কম্পোনেন্টের জন্য প্রয়োগ করা হয়)। এটি না হলে তা উল্লেখ করা হয়।
কোণ ও ত্রিকোণমিতিক ফাংশন
কোণ হিসেবে নির্দিষ্ট করা ফাংশন প্যারামিটারকে রেডিয়ান এককে ধরা হয়। কোনও অবস্থাতেই এই ফাংশনগুলির কোনওটির ফলে শূন্য দিয়ে ভাগ করার সমস্যা হবে না। অনুপাতের ভাজক ০ হলে, ফলাফল অনির্দিষ্ট হবে।
| ফাংশন | বর্ণনা |
|---|---|
GT radians(GT degrees) |
ডিগ্রিকে রেডিয়ানে কনভার্ট করে |
GT degrees(GT radians) |
রেডিয়ানকে ডিগ্রিতে কনভার্ট করে |
GT sin(GT angle) |
স্ট্যান্ডার্ড সাইন |
GT cos(GT angle) |
স্ট্যান্ডার্ড কোসাইন |
GT tan(GT angle) |
স্ট্যান্ডার্ড ট্যানজেন্ট |
GT asin(GT x)
|
$ \left[-{\pi\over 2},{\pi\over 2}\right] $ রেঞ্জের মধ্যে এমন একটি কোণ দেখায় যার সাইন হল x |
GT acos(GT x)
|
$ \left[0,\pi\right] $ রেঞ্জে x কোসাইন আছে এমন কোণ দেখায় |
GT atan(GT y, GT x)
|
$ \left[-\pi,\pi\right] $ রেঞ্জে $ \left[{y\over x}\right] $ ত্রিকোণমিতিক আর্কট্যানজেন্ট হয় এমন কোণ ফেরত দেয় |
GT atan(GT y_over_x)
|
$ \left[-{\pi\over 2},{\pi\over 2}\right] $ রেঞ্জের মধ্যে
যে কোণের ত্রিকোণমিতিক আর্কট্যানজেন্ট
y_over_x, সেটি দেখায় |
সূচকীয় ফাংশন
| ফাংশন | বর্ণনা |
|---|---|
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) |
x-এর চিহ্নের উপর ভিত্তি করে -1.0, 0.0 বা 1.0 রিটার্ন করে |
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, GT
minVal, GT maxVal) |
minVal এবং maxVal-এর মধ্যে ক্ল্যাম্প করা x রিটার্ন করে। |
GT clamp(GT x, float
minVal, float maxVal) |
minVal এবং maxVal-এর মধ্যে x-এর মান দেখায় |
GT saturate(GT x) |
0.0 এবং 1.0-এর মধ্যে x ক্ল্যাম্প করা রিটার্ন করে |
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) |
x < edge হলে 0.0 রিটার্ন করে, অন্যথায় 1.0 রিটার্ন করে |
GT step(float edge,
GT x) |
x < edge হলে 0.0 রিটার্ন করে, অন্যথায় 1.0 রিটার্ন করে |
GT smoothstep(GT edge0,
GT edge1, GT x) |
edge0 < x < edge1 হলে, ০ ও ১-এর মধ্যে Hermite ইন্টারপোলেশন পারফর্ম করে |
GT smoothstep(float
edge0, float edge1,
GT x) |
edge0 < x < edge1 হলে, ০ ও ১-এর মধ্যে Hermite ইন্টারপোলেশন পারফর্ম করে |
জ্যামিতিক ফাংশন
এইসব ফাংশন ভেক্টরকে ভেক্টর হিসেবেই অপারেট করে, উপাদান হিসেবে নয়। GT হল ২-৪ সাইজের ফ্লোট/হাফ ভেক্টর।
| ফাংশন | বর্ণনা |
|---|---|
float/half length
(GT x) |
ভেক্টরের দৈর্ঘ্য দেখায় |
float/half distance(GT
p0, GT p1) |
পয়েন্টের মধ্যবর্তী দূরত্ব দেখায় |
float/half dot(GT x,
GT y) |
ডট প্রোডাক্ট ফিরিয়ে দেয় |
float3/half3
cross(float3/half3 x,
float3/half3 y) |
ক্রস প্রোডাক্ট রিটার্ন করে |
GT normalize(GT x) |
ভেক্টরকে ১ দৈর্ঘ্যে নরমালাইজ করো |
GT faceforward(GT N,
GT I, GT Nref) |
dot(Nref, I) < 0 হলে N রিটার্ন করে, অন্যথায় -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(mat
x, 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(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) |
true যদি x-এর কোনও কম্পোনেন্ট true হয় |
bool all(BV x) |
true যদি x-এর সব কম্পোনেন্ট true হয়। |
BV not(BV x) |
x-এর লজিকাল কমপ্লিমেন্ট |
কালার ফাংশন
| ফাংশন | বর্ণনা |
|---|---|
vec4 unpremul(vec4
color) |
রঙের মানকে নন-প্রি-মাল্টিপ্লাইড আলফাতে কনভার্ট করে |
half3 toLinearSrgb(half3
color) |
লিনিয়ার SRGB-তে কালার স্পেস ট্রান্সফর্মেশন |
half3 fromLinearSrgb(half3
color) |
কালার স্পেস ট্রান্সফর্মেশন |
শেডার স্যাম্পলিং (মূল্যায়ন)
স্যাম্পলারের ধরন কাজ করে না, তবে আপনি অন্যান্য শেডার মূল্যায়ন করতে পারবেন। টেক্সচার স্যাম্পেল করার প্রয়োজন হলে, আপনি একটি BitmapShader অবজেক্ট তৈরি করতে এবং এটি ইউনিফর্ম হিসেবে যোগ করতে পারবেন। আপনি যেকোনও শেডারের জন্য এটি করতে পারবেন, যার অর্থ হল আপনি সরাসরি যেকোনও Android Shader মূল্যায়ন করতে পারবেন, সেটিকে প্রথমে Bitmap-এ পরিবর্তন না করেই, অন্যান্য RuntimeShader অবজেক্ট সহ। এটি অনেক বেশি ফ্লেক্সিবিলিটি প্রদান করে, তবে জটিল শেডার মূল্যায়ন করা ব্যয়বহুল হতে পারে, বিশেষ করে লুপের ক্ষেত্রে।
uniform shader image;
image.eval(coord).a // The alpha channel from the evaluated image shader
র বাফার স্যাম্পলিং
যদিও বেশিরভাগ ছবিতে এমন রঙ থাকে যা কালার-ম্যানেজ করা উচিত, কিছু ছবিতে এমন ডেটা থাকে যা আসলে রঙ নয়, যার মধ্যে রয়েছে নরমাল, মেটেরিয়াল প্রপার্টি (যেমন, রুক্ষতা), হাইটম্যাপ বা অন্য কোনও বিশুদ্ধ গাণিতিক ডেটা যা কোনও ছবিতে স্টোর করা হয়। AGSL-এ এই ধরনের ছবি ব্যবহার করার সময়, আপনি RuntimeShader#setInputBuffer ব্যবহার করে জেনেরিক র বাফার হিসেবে BitmapShader ব্যবহার করতে পারবেন। এটি কালার স্পেস ট্রান্সফর্মেশন ও ফিল্টারিং এড়িয়ে যাবে।