AGSL কে GLSL ES 1.0 এর সাথে অনেকাংশে সামঞ্জস্যপূর্ণ করার জন্য ডিজাইন করা হয়েছে। আরও তথ্যের জন্য, OpenGL ES শেডিং ল্যাঙ্গুয়েজ ডকুমেন্টেশনে সমতুল্য ফাংশন দেখুন। যখন সম্ভব, এই ডকুমেন্টেশন AGSL এবং GLSL মধ্যে পার্থক্য কল করার চেষ্টা করে।
প্রকারভেদ
AGSL GLSL ES 1.0 প্রকারগুলিকে সমর্থন করে এবং ভেক্টর এবং ম্যাট্রিক্স প্রকারগুলিকে উপস্থাপন করার একটি অতিরিক্ত উপায় সহ। AGSL মাঝারি নির্ভুলতা উপস্থাপন করতে অতিরিক্ত short
এবং half
প্রকার সমর্থন করে।
মৌলিক প্রকার
টাইপ | বর্ণনা |
---|---|
void | কোন ফাংশন রিটার্ন মান বা খালি পরামিতি তালিকা. জিএলএসএল-এর বিপরীতে, অকার্যকর রিটার্ন টাইপ ছাড়া ফাংশনকে অবশ্যই একটি মান প্রদান করতে হবে। |
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) | 2x2, 3x3, 4x4 float ম্যাট্রিক্স |
half2x2, half3x3, half4x4 | mediump float ম্যাট্রিক্স প্রকারের সমতুল্য |
নির্ভুলতা এবং পরিসীমা সর্বনিম্ন
এগুলি OpenGL ES 2.0 স্পেসিফিকেশনের উপর ভিত্তি করে প্রতিটি সংশোধকের সাথে যুক্ত ন্যূনতম নিশ্চিত নির্ভুলতা এবং পরিসর। যেহেতু বেশিরভাগ ডিভাইসই ES 3.0 সমর্থন করে, তাই তাদের আরও গ্যারান্টিযুক্ত highp
নির্ভুলতা/পরিসীমা এবং int mediump
পরিসীমা থাকবে। যথার্থ সংশোধক স্কেলার, ভেক্টর এবং ম্যাট্রিক্স ভেরিয়েবল এবং পরামিতিগুলিতে প্রয়োগ করা যেতে পারে। শুধুমাত্র নীচে তালিকাভুক্ত ন্যূনতম নিশ্চিত করা হয়; lowp
অগত্যা প্রকৃতপক্ষে mediump
থেকে কম নির্ভুলতা নয়, এবং mediump
অগত্যা highp
থেকে কম নির্ভুলতা নয়। AGSL বর্তমানে চূড়ান্ত আউটপুটে lowp
থেকে mediump
রূপান্তর করে।
সংশোধক | 'ফ্লোট' পরিসর | 'ফ্লোট' মাত্রার পরিসীমা | 'ভাসা' নির্ভুলতা | 'int' পরিসর |
---|---|---|---|---|
উচ্চ | \(\left\{-2^{62},2^{62}\right\}\) | \(\left\{2^{-62},2^{62}\right\}\) | আপেক্ষিক: \(2^{-16}\) | \(\left\{-2^{16},2^{16}\right\}\) |
মধ্যম | \(\left\{-2^{14},2^{14}\right\}\) | \(\left\{2^{-14},2^{14}\right\}\) | আপেক্ষিক: \(2^{-10}\) | \(\left\{-2^{10},2^{10}\right\}\) |
নিম্ন | \(\left\{-2,2\right\}\) | \(\left\{2^{-8},2\right\}\) | পরম: \(2^{-8}\) | \(\left\{-2^{8},2^{8}\right\}\) |
অ্যারে সাংখ্যিক সাবস্ক্রিপ্ট সিনট্যাক্স ছাড়াও ex: 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
- পয়েন্ট/স্বাভাবিক প্রতিনিধিত্বকারী ভেক্টর অ্যাক্সেস করার সময় ব্যবহার করুন
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 শৈলী সিনট্যাক্স ব্যবহার করে শুধুমাত্র 1-মাত্রিক অ্যারেগুলি একটি স্পষ্ট অ্যারের আকারের সাথে সমর্থিত:
<বেস প্রকার> [<অ্যারে সাইজ>] পরিবর্তনশীল নাম - যেমন: half[10] x;
<বেস টাইপ> পরিবর্তনশীল নাম[<অ্যারে সাইজ>] - যেমন: half x[10];
অ্যারেগুলি একটি ফাংশন থেকে ফেরত দেওয়া যায় না, অনুলিপি করা, বরাদ্দ করা বা তুলনা করা যায় না। অ্যারে সীমাবদ্ধতা অ্যারে ধারণকারী কাঠামোর বাইরে প্রচার করে। অ্যারে শুধুমাত্র একটি ধ্রুবক বা একটি লুপ ভেরিয়েবল ব্যবহার করে সূচিত করা যেতে পারে।
কোয়ালিফায়ার
টাইপ | বর্ণনা |
---|---|
const | কম্পাইল-টাইম ধ্রুবক, বা শুধুমাত্র-পঠন ফাংশন পরামিতি। |
uniform | প্রসেস করা আদিম জুড়ে মান পরিবর্তন হয় না। setColorUniform , setFloatUniform , setIntUniform , setInputBuffer , এবং setInputShader জন্য রানটাইমশেডার পদ্ধতি ব্যবহার করে অ্যান্ড্রয়েড থেকে ইউনিফর্মগুলি পাস করা হয়৷ |
in | পাস-ইন ফাংশন প্যারামিটারের জন্য। এটি ডিফল্ট। |
out | পাস-আউট ফাংশন পরামিতি জন্য. ফাংশন সংজ্ঞা হিসাবে একই নির্ভুলতা ব্যবহার করা আবশ্যক. |
inout | প্যারামিটারের জন্য যা একটি ফাংশনের মধ্যে এবং বাইরে উভয়ই পাস করা হয়। ফাংশন সংজ্ঞা হিসাবে একই নির্ভুলতা ব্যবহার করা আবশ্যক. |
পরিবর্তনশীল ঘোষণা
ঘোষণা একটি সুস্পষ্ট বন্ধনী স্কোপ হতে হবে. নিম্নলিখিত নমুনায় y
এর ঘোষণা অননুমোদিত:
if (condition)
int y = 0;
ম্যাট্রিক্স/স্ট্রাকচার/অ্যারে বেসিক
ম্যাট্রিক্স কনস্ট্রাক্টরের উদাহরণ
যখন একটি ম্যাট্রিক্স একটি একক মান দিয়ে তৈরি করা হয়, তখন কর্ণ বরাবর সমস্ত মানকে সেই মান দেওয়া হয়, বাকিগুলিকে শূন্য দেওয়া হয়। float2x2(1.0)
তাই একটি 2x2 পরিচয় ম্যাট্রিক্স তৈরি করবে।
যখন একটি ম্যাট্রিক্স একাধিক মান দিয়ে তৈরি করা হয়, তখন কলামগুলি প্রথমে ভরা হয় (কলাম-প্রধান ক্রম)।
মনে রাখবেন, GLSL এর বিপরীতে, একটি পাস-ইন ভেক্টরের উপাদানের সংখ্যা কমিয়ে দেয় এমন কনস্ট্রাক্টর সমর্থিত নয়, তবে আপনি একই প্রভাব পেতে সুইজলিং ব্যবহার করতে পারেন। AGSL-এ একটি vec4
থেকে GLSL-এর মতো একই আচরণের সাথে একটি 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 | ++ -- + - ! | উপসর্গ বৃদ্ধি এবং হ্রাস unary | ডান থেকে বাম |
4 | * / | গুণ এবং ভাগ | বাম থেকে ডানে |
5 | + - | যোগ এবং বিয়োগ | বাম থেকে ডানে |
7 | < > <= >= | সম্পর্কীয় | বাম থেকে ডানে |
8 | == != | সমতা/বৈষম্য | বাম থেকে ডানে |
12 | && | যৌক্তিক এবং | বাম থেকে ডানে |
13 | ^^ | যৌক্তিক XOR | বাম থেকে ডানে |
14 | || | যৌক্তিক বা | বাম থেকে ডানে |
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 } - ডিফল্ট কেস শেষ |
ঝাঁপ দাও | break, continue, return (বাদ দেওয়া অনুমোদিত নয়) |
এন্ট্রি | half4 main(float2 fragCoord) |
লুপ সীমাবদ্ধতা জন্য
GLSL ES 1.0 এর মতো, 'ফর' লুপগুলি বেশ সীমিত; কম্পাইলার অবশ্যই লুপ আনরোল করতে সক্ষম হবে। এর মানে হল যে ইনিশিয়ালাইজার, টেস্ট কন্ডিশন এবং next
স্টেটমেন্টে অবশ্যই ধ্রুবক ব্যবহার করতে হবে যাতে কম্পাইলের সময়ে সবকিছু গণনা করা যায়। next
বিবৃতিটি আরও সীমাবদ্ধ ++, --, +=, or -=
।
অন্তর্নির্মিত ফাংশন
GT
(জেনারিক টাইপ) হল float
, float2
, float3
, float4
বা half
, half2
, half3
, half4
।
এই ফাংশনগুলির বেশিরভাগই উপাদান অনুসারে কাজ করে (ফাংশনটি প্রতি-কম্পোনেন্ট প্রয়োগ করা হয়)। যে ক্ষেত্রে না যখন এটা উল্লেখ করা হয়.
কোণ এবং ত্রিকোণমিতিক ফাংশন
একটি কোণ হিসাবে নির্দিষ্ট ফাংশন পরামিতিগুলি রেডিয়ানের এককে বলে ধরে নেওয়া হয়। কোন ক্ষেত্রেই এই ফাংশনগুলির কোনটি শূন্য ত্রুটি দ্বারা বিভক্ত হবে না। যদি একটি অনুপাতের ভাজক 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) | একটি কোণ প্রদান করে যার সাইন $ \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[{y\over x}\right] $ $ \left[-\pi,\pi\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 modulo y এর মান প্রদান করে |
GT mod(GT x, float y) | x modulo 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 < প্রান্ত হলে 0.0 ফেরত দেয়, অন্যথায় 1.0 |
GT step(float edge, GT x) | x < প্রান্ত হলে 0.0 ফেরত দেয়, অন্যথায় 1.0 |
GT smoothstep(GT edge0, GT edge1, GT x) | 0 এবং 1 এর মধ্যে হার্মাইট ইন্টারপোলেশন সম্পাদন করে যখন edge0 < x < edge1 |
GT smoothstep(float edge0, float edge1, GT x) | 0 এবং 1 এর মধ্যে হার্মাইট ইন্টারপোলেশন সম্পাদন করে যখন edge0 < x < edge1 |
জ্যামিতিক ফাংশন
এই ফাংশনগুলি ভেক্টরগুলিতে ভেক্টর হিসাবে কাজ করে, উপাদান অনুসারে নয়। GT হল 2-4 আকারের ফ্লোট/অর্ধেক ভেক্টর।
ফাংশন | বর্ণনা |
---|---|
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) | ভেক্টরকে দৈর্ঘ্য 1 থেকে স্বাভাবিক করুন |
GT faceforward(GT N, GT I, GT Nref) | বিন্দু (Nref, I) < 0, অন্য -N হলে N প্রদান করে। |
GT reflect(GT I, GT N) | প্রতিফলন দিক I - 2 * বিন্দু(N,I) * N। |
GT refract(GT I, GT N, float/half eta) | প্রতিসরণ ভেক্টর প্রদান করে |
ম্যাট্রিক্স ফাংশন
টাইপ ম্যাট হল যেকোনো বর্গাকার ম্যাট্রিক্স টাইপ।
ফাংশন | বর্ণনা |
---|---|
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) | x এর কোনো উপাদান true হলে 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 অবজেক্ট তৈরি করতে পারেন, এবং এটি একটি ইউনিফর্ম হিসাবে যোগ করতে পারেন। আপনি যেকোন শেডারের জন্য এটি করতে পারেন, যার অর্থ আপনি অন্য RuntimeShader অবজেক্ট সহ প্রথমে একটি বিটম্যাপে পরিণত না করে যেকোন অ্যান্ড্রয়েড শেডারকে সরাসরি মূল্যায়ন করতে পারেন। এটি প্রচুর পরিমাণে নমনীয়তার জন্য অনুমতি দেয়, তবে জটিল শেডারের মূল্যায়ন করা ব্যয়বহুল হতে পারে, বিশেষ করে একটি লুপে।
uniform shader image;
image.eval(coord).a // The alpha channel from the evaluated image shader
কাঁচা বাফার স্যাম্পলিং
যদিও বেশিরভাগ ছবিতে এমন রঙ থাকে যা রঙ-পরিচালিত হওয়া উচিত, কিছু ছবিতে এমন ডেটা থাকে যেগুলি আসলে রঙ নয়, যার মধ্যে রয়েছে স্বাভাবিক সংরক্ষণের ছবি, বস্তুগত বৈশিষ্ট্য (যেমন, রুক্ষতা), উচ্চতা ম্যাপ, বা অন্য কোনও সম্পূর্ণ গাণিতিক ডেটা যা সংরক্ষণ করা হয়। একটি চিত্র। AGSL-এ এই ধরনের ছবি ব্যবহার করার সময়, আপনি RuntimeShader#setInputBuffer ব্যবহার করে একটি সাধারণ কাঁচা বাফার হিসাবে একটি বিটম্যাপশেডার ব্যবহার করতে পারেন। এটি রঙের স্থান পরিবর্তন এবং ফিল্টারিং এড়াবে।