סקירה כללית
RenderScript הוא סביבת זמן ריצה עם ביצועים גבוהים שמספקת פעולות מחשוב ברמה הטבעית. קוד RenderScript עובר הידור במכשירים בזמן הריצה, כדי לאפשר גם עצמאות בפלטפורמה.
במסמך העזרה הזה מתוארים ממשקי ה-API בסביבת זמן הריצה של RenderScript, שאפשר להשתמש בהם כדי לכתוב קוד RenderScript ב-C99. קבצי הכותרות של החישוב ב-RenderScript כלולים באופן אוטומטי.
כדי להשתמש ב-RenderScript, צריך להשתמש בממשקי ה-API בסביבת זמן הריצה של RenderScript שמתוארים כאן, וגם בממשקי ה-API של מסגרת Android ל-RenderScript. למסמכי עזרה בנושא ממשקי ה-API של Android framework, אפשר לעיין במסמכי העזרה של החבילה android.renderscript.
מידע נוסף על פיתוח באמצעות RenderScript ועל האינטראקציה בין סביבת זמן הריצה לבין ממשקי ה-API של מסגרת Android זמין במדריך למפתחים של RenderScript ובדוגמאות ל-RenderScript.
סוגי נתונים מספריים
סקלר:
ב-RenderScript יש תמיכה בסוגי המספרים הסקלריים הבאים:
8 ביט | 16 ביט | 32 סיביות | 64 ביט | |
מספר שלם: | char, int8_t | short, int16_t | int32_t | long, long long, int64_t |
מספר שלם ללא סימן: | uchar, uint8_t | ushort, uint16_t | uint, uint32_t | ulong, uint64_t |
נקודה צפה: | חצי | float | double |
וקטורים:
ב-RenderScript יש תמיכה בווקטורים בגודל קבוע באורך 2, 3 ו-4. מודעים מכריזים על וקטורים באמצעות שם הסוג הנפוץ ואחריו 2, 3 או 4. לדוגמה: float4, int3, double2, ulong4.
כדי ליצור ליטרלים של וקטורים, צריך להשתמש בסוג הווקטור ואחריו להוסיף את הערכים שמקובצים בסוגריים מסולסלים, למשל (float3){1.0f, 2.0f, 3.0f}
.
אפשר לגשת לרשומים של וקטור באמצעות סגנונות מתן שמות שונים.
כדי לגשת לרשומה יחידה, מוסיפים נקודה אחרי שם המשתנה ואז:
- האותיות x, y, z ו-w,
- האותיות r, g, b ו-a,
- האות s או S, ואחריה אינדקס שמתחיל באפס.
לדוגמה, ב-int4 myVar;
, הביטויים הבאים זהים:
myVar.x == myVar.r == myVar.s0 == myVar.S0
myVar.y == myVar.g == myVar.s1 == myVar.S1
myVar.z == myVar.b == myVar.s2 == myVar.S2
myVar.w == myVar.a == myVar.s3 == myVar.S3
אפשר לגשת לכמה רשומות של וקטור בבת אחת באמצעות מזהה שהוא שרשור של כמה אותיות או אינדקסים. הווקטור שמתקבל הוא בגודל שווה למספר הרשומות שצוינו בשמות.
בדוגמה שלמעלה, אפשר לגשת לשתי הרשומות האמצעיות באמצעות myVar.yz
, myVar.gb
, myVar.s12
ו-myVar.S12
.
הרשומות לא חייבות להיות צמודות זו לזו או בסדר עולה. אפשר גם לחזור על רשומות, כל עוד לא מנסים להקצות להן ערכים. בנוסף, אי אפשר לשלב בין סגנונות השמות.
ריכזנו כאן כמה דוגמאות לפעולות שאפשר או אי אפשר לבצע:
float4 v4;
float3 v3;
float2 v2;
v2 = v4.xx; // Valid
v3 = v4.zxw; // Valid
v3 = v4.bba; // Valid
v3 = v4.s032; // Valid
v3.s120 = v4.S233; // Valid
v4.yz = v3.rg; // Valid
v4.yzx = v3.rg; // Invalid: mismatched sizes
v4.yzz = v3; // Invalid: z appears twice in an assignment
v3 = v3.xas0; // Invalid: can't mix xyzw with rgba nor s0...
v3 = v4.s034; // Invalid: the digit can only be 0, 1, 2, or 3
מטריצות וקוואטרניונים:
ב-RenderScript יש תמיכה במטריצות ריבועיות בגודל קבוע של מספרים מרחפים בגודל 2x2, 3x3 ו-4x4. השמות של הסוגים הם rs_matrix2x2, rs_matrix3x3 ו-rs_matrix4x4. רשימת הפעולות מפורטת במאמר פונקציות מטריקס.
יש תמיכה גם בקוואטרניונים באמצעות rs_quaternion. רשימת הפעולות מופיעה במאמר פונקציות של quaterrion.
סוגים | |
---|---|
char2 | שני מספרים שלמים בעלי סימן באורך 8 ביט |
char3 | שלושה מספרים שלמים עם סימן באורך 8 ביט |
char4 | ארבעה מספרים שלמים בעלי סימן באורך 8 ביט |
double2 | שני מספרים ממשיים (float) ב-64 ביט |
double3 | שלושה מספרים ממשיים (float) ב-64 ביט |
double4 | ארבעה מספרים ממשיים (float) ב-64 ביט |
float2 | שני מספרים ממשיים (float) ב-32 ביט |
float3 | שלושה מספרים ממשיים (float) ב-32 ביט |
float4 | ארבעה מספרים ממשיים (float) ב-32 ביט |
half | ערך נקודה צפה (floating-point) של 16 ביט |
half2 | שני מספרים ממשיים (float) של 16 ביט |
half3 | שלושה מספרים מופשטים (float) של 16 ביט |
half4 | ארבעה מספרים ממשיים (float) ב-16 ביט |
int16_t | מספר שלם של 16 ביט עם סימן |
int2 | שני מספרים שלמים בעלי סימן באורך 32 ביט |
int3 | שלושה מספרים שלמים עם סימן באורך 32 ביט |
int32_t | מספר שלם בסימן של 32 ביט |
int4 | ארבעה מספרים שלמים בעלי סימן באורך 32 ביט |
int64_t | מספר שלם בסימן של 64 ביט |
int8_t | מספר שלם בסימן של 8 ביט |
long2 | שני מספרים שלמים ב-64 ביט עם סימן |
long3 | שלושה מספרים שלמים וחתומים של 64 ביט |
long4 | ארבעה מספרים שלמים וחתומים של 64 ביט |
rs_matrix2x2 | מטריצת 2x2 של מספרים ממשיים (float) ב-32 ביט |
rs_matrix3x3 | מטריצה 3x3 של מספרים ממשיים (float) ב-32 ביט |
rs_matrix4x4 | מטריצה 4x4 של מספרים ממשיים (float) ב-32 ביט |
rs_quaternion | קוואטרניון |
short2 | שני מספרים שלמים בעלי סימן באורך 16 ביט |
short3 | שלושה מספרים שלמים עם סימן באורך 16 ביט |
short4 | ארבעה מספרים שלמים בעלי סימן באורך 16 ביט |
size_t | סוג גודל ללא סימן |
ssize_t | סוג חתום של גודל |
uchar | מספר שלם ללא סימן באורך 8 ביט |
uchar2 | שני מספרים שלמים ללא סימן (unsigned integer) של 8 ביט |
uchar3 | שלושה מספרים שלמים ללא סימן (unsigned integer) של 8 ביט |
uchar4 | ארבעה מספרים שלמים ללא סימן (unsigned integer) של 8 ביט |
uint | מספר שלם ללא סימן באורך 32 ביט |
uint16_t | מספר שלם ללא סימן באורך 16 ביט |
uint2 | שני מספרים שלמים ללא סימן באורך 32 ביט |
uint3 | שלושה מספרים שלמים ללא סימן (unsigned integer) של 32 ביט |
uint32_t | מספר שלם ללא סימן באורך 32 ביט |
uint4 | ארבעה מספרים שלמים ללא סימן באורך 32 ביט |
uint64_t | מספר שלם ללא סימן (unsigned integer) של 64 סיביות |
uint8_t | מספר שלם ללא סימן באורך 8 ביט |
ulong | מספר שלם ללא סימן (unsigned integer) של 64 סיביות |
ulong2 | שני מספרים שלמים ללא סימן (unsigned integer) של 64 סיביות |
ulong3 | שלושה מספרים שלמים ללא סימן (unsigned integer) של 64 ביט |
ulong4 | ארבעה מספרים שלמים ללא סימן (unsigned integer) של 64 סיביות |
ushort | מספר שלם ללא סימן באורך 16 ביט |
ushort2 | שני מספרים שלמים ללא סימן באורך 16 ביט |
ushort3 | שלושה מספרים שלמים ללא סימן באורך 16 ביט |
ushort4 | ארבעה מספרים שלמים ללא סימן באורך 16 ביט |
סוגי אובייקטים
הסוגים הבאים משמשים לטיפול באובייקטים של RenderScript, כמו הקצאות, Samplers, רכיבים וסקריפטים. רוב האובייקטים האלה נוצרים באמצעות ממשקי ה-API של Java RenderScript.
סוגים | |
---|---|
rs_allocation | הקצאה למזהה |
rs_allocation_cubemap_face | Enum לבחירת פנים של מפת קוביות |
rs_allocation_usage_type | שדה ביטים לציון אופן השימוש בהקצאה |
rs_data_kind | סוג הנתונים של הרכיב |
rs_data_type | סוג הנתונים הבסיסי של הרכיב |
rs_element | אחיזה ברכיב |
rs_sampler | הרשאה ל-Sampler |
rs_sampler_value | ערך T של Sampler wrap |
rs_script | הפנייה לסקריפט |
rs_type | ידית לסוג |
rs_yuv_format | פורמט YUV |
פונקציות המרה
הפונקציות הבאות ממירות בין סוגי וקטורים מספריים או בין ייצוגים שונים של צבעים.
פונקציות | |
---|---|
convert | המרת וקטורים מספריים |
rsPackColorTo8888 | יצירת uchar4 RGBA מ-floats |
rsUnpackColor8888 | יצירת RGBA מסוג float4 מ-uchar4 |
rsYuvToRGBA | המרת ערך YUV ל-RGBA |
פונקציות וקבועים מתמטיים
אפשר להחיל את הפונקציות המתמטיות הבאות על סקלריים ועל וקטורים. כשהיא חלה על וקטורים, הערך המוחזר הוא וקטור של הפונקציה שחלה על כל רשומה בקלט.
לדוגמה:
float3 a, b;
// The following call sets
// a.x to sin(b.x),
// a.y to sin(b.y), and
// a.z to sin(b.z).
a = sin(b);
במאמר פונקציות מתמטיות של וקטורים מפורט מידע על פונקציות כמו distance() ו-length(), שמפרשות את הקלט כוקטור יחיד במרחב n-ממדי.
הדיוק של הפעולות המתמטיות על ערכים של 32 ביט עם נקודה צפה מושפע מהפראגמות rs_fp_relaxed ו-rs_fp_full. כשמשתמשים ב-rs_fp_relaxed, ערכים רגילים חלקית עשויים להימחק לאפס, ועשוי להתבצע עיגול לאפס. לעומת זאת, ב-rs_fp_full נדרש טיפול נכון בערכים קטנים מהרגיל, כלומר ערכים קטנים מ-1.17549435e-38f. בנוסף, ב-rs_fp_rull נדרש עיגול לשבר הקרוב ביותר, עם עיגול למספר זוגי במקרה של שוויון.
אפשר להשיג איזון שונה בין דיוק למהירות באמצעות וריאנטים של פונקציות מתמטיות נפוצות. פונקציות עם שם שמתחיל ב-
- native_: יכול להיות שיהיו לו הטמעות חומרה בהתאמה אישית עם דיוק נמוך יותר. בנוסף, ייתכן שערכים רגילים חלקית יימחקו ל-0, ייתכן שייעשה שימוש בעיגול ל-0 וייתכן שלא תתבצע טיפול נכון בקלט של NaN ושל אינסוף.
- half_: יכול לבצע חישובים פנימיים באמצעות 16 ביט של פלוט. בנוסף, ייתכן שערכים רגילים למחצה יוסרו לאפס, וייתכן שייעשה שימוש בעיגול לאפס.
קבועים | |
---|---|
M_1_PI | 1 / pi, כמספר ממשי (float) ב-32 ביט |
M_2_PI | 2 / pi, כמספר ממשי (float) ב-32 ביט |
M_2_SQRTPI | 2 / sqrt(pi), כמספר ממשי (float) ב-32 ביט |
M_E | e, כמספר ממשי (float) ב-32 ביט |
M_LN10 | log_e(10), כמספר ממשי (float) ב-32 ביט |
M_LN2 | log_e(2), כמספר ממשי (float) של 32 ביט |
M_LOG10E | log_10(e), כמספר ממשי (float) ב-32 ביט |
M_LOG2E | log_2(e), כמספר ממשי (float) ב-32 ביט |
M_PI | pi, כמספר ממשי (float) ב-32 ביט |
M_PI_2 | pi / 2, כמספר ממשי (float) ב-32 ביט |
M_PI_4 | pi / 4, כמספר ממשי (float) ב-32 ביט |
M_SQRT1_2 | 1 / sqrt(2), כמספר ממשי (float) ב-32 ביט |
M_SQRT2 | sqrt(2), כמספר ממשי (float) של 32 ביט |
פונקציות | |
---|---|
abs | הערך המוחלט של מספר שלם |
acos | קוסינוס הופכי |
acosh | קוסינוס היפרבולי הפוך |
acospi | קוסינוס הפוך חלקי פאי |
asin | סינוס הופכי |
asinh | סינוס היפרבולי הפוך |
asinpi | סינוס הפוך חלקי פאי |
atan | טנגנס הופכי |
atan2 | הטנגנס ההופכי של יחס |
atan2pi | הטנגנס ההופכי של יחס, חלקי פאי |
atanh | היפוך הטנגנס ההיפרבולי |
atanpi | טנגנט הופכי חלקי פאי |
cbrt | שורש שלישי |
ceil | המספר השלם הקטן ביותר שאינו קטן מערך מסוים |
clamp | הגבלת ערך לטווח |
clz | מספר הביטים הפותחים של 0 |
copysign | העתקת הסימן של מספר למספר אחר |
cos | קוסינוס |
cosh | קוסינוס היפרבולי |
cospi | קוסינוס של מספר כפול פאי |
מעלות | המרה של רדיאנים למעלות |
erf | פונקציית שגיאה מתמטית |
erfc | פונקציית שגיאה מתמטית משלימה |
exp | e בחזקת מספר |
exp10 | 10 בחזקת מספר |
exp2 | 2 בחזקת מספר |
expm1 | e בחזקת מספר מינוס אחד |
fabs | הערך המוחלט של נקודה צפה |
fdim | ההפרש החיובי בין שני ערכים |
floor | המספר השלם הקטן ביותר שלא גדול מערך מסוים |
fma | כפל והוספה |
fmax | מקסימום שני מספרים מסוג float |
fmin | מינימום שני פלוטורים |
fmod | מודולוס |
fract | חלק עשרוני חיובי |
frexp | חזקה וחזקה רגילה בינאריות |
half_recip | ערכים הופכים לערכים הפוכים ברמת דיוק של 16 ביט |
half_rsqrt | הופכי של שורש ריבועי שמחושב ברמת דיוק של 16 ביט |
half_sqrt | שורש ריבועי שמחושב בדיוק של 16 ביט |
hypot | היפותנוזה |
ilogb | מעריך בסיס שני |
ldexp | יצירת נקודה צפה מחזקה וחזקה |
lgamma | הלוגריתם הטבעי של פונקציית הגאמה |
log | לוגריתם טבעי |
log10 | לוגריתם בסיס 10 |
log1p | לוגריתם טבעי של ערך ועוד 1 |
log2 | לוגריתם בבסיס 2 |
logb | מעריך בסיס שני |
mad | כפל והוספה |
max | מקסימום |
min | מינימום |
mix | מערבב בין שני ערכים |
modf | רכיבים שלמים וחלקיים |
nan | Not a Number |
nan_half | Not a Number |
native_acos | היפוך קוסינוס משוער |
native_acosh | קוסינוס היפרבולי הפוך משוער |
native_acospi | קוסינוס הופכי משוער חלקי פאי |
native_asin | סינוס הופכי משוער |
native_asinh | סינוס היפרבולי הפוך משוער |
native_asinpi | סינוס הפוך משוער חלקי פאי |
native_atan | נגזרת הפוכה משוערת של טנגנס |
native_atan2 | טנגנס הופכי משוער של יחס |
native_atan2pi | טנגנט הופכי משוער של יחס, חלקי פאי |
native_atanh | טנגנס היפרבולי הפוך משוער |
native_atanpi | טנגנט הופכי משוער חלקי פאי |
native_cbrt | שורש שלישי משוער |
native_cos | קוסינוס משוער |
native_cosh | קוסינוס היפרבולי משוער |
native_cospi | קוסינוס משוער של מספר כפול פאי |
native_divide | חלוקה משוערת |
native_exp | הערך המשוער של e בחזקת מספר |
native_exp10 | הערך המשוער של 10 בחזקת מספר |
native_exp2 | הערך המשוער של 2 בחזקת מספר |
native_expm1 | הערך המשוער של e בחזקת מספר מינוס אחד |
native_hypot | היפותנוזה משוערת |
native_log | לוגריתם טבעי משוער |
native_log10 | לוגריתם משוער על בסיס 10 |
native_log1p | לוגריתם טבעי משוער של ערך ועוד 1 |
native_log2 | לוגריתם משוער לפי בסיס 2 |
native_powr | בסיס חיובי משוער שמורם למעריך |
native_recip | פונקציית הופכית קרובה |
native_rootn | שורש n משוער |
native_rsqrt | הופכי משוער של שורש ריבועי |
native_sin | סינוס משוער |
native_sincos | סינוס וקוסינוס בקירוב |
native_sinh | סינוס היפרבולי משוער |
native_sinpi | סינוס משוער של מספר כפול פאי |
native_sqrt | שורש ריבועי משוער |
native_tan | טנגנס משוער |
native_tanh | טנגנס היפרבולי משוער |
native_tanpi | טנגנס משוער של מספר כפול פאי |
nextafter | המספר הבא של נקודה צפה |
pow | בסיס בחזקת מעריך |
pown | בסיס שהועלה בחזקה של מספר שלם |
powr | בסיס חיובי בחזקת מעריך |
רדיאנים | המרה של מעלות לרדיאנים |
remainder | היתרה של חלוקה |
remquo | שארית ומכפיל של חלוקה |
rint | עיגול למספר שלם |
rootn | שורש N |
round | עיגול הרחק מאפס |
rsRand | מספר אקראי לכאורה |
rsqrt | הופכי של שורש ריבועי |
sign | סימן הערך |
sin | סינוס |
sincos | סינוס וקוסינוס |
sinh | סינוס היפרבולי |
sinpi | סינוס של מספר כפול פאי |
sqrt | שורש ריבועי |
step | 0 אם הערך קטן מ-value, 0 אחרת |
tan | טנגנס |
tanh | טנגנס היפרבולי |
tanpi | טנגנט של מספר כפול פאי |
tgamma | פונקציית גאמה |
trunc | חיתוך של נקודה צפה (floating-point) |
פונקציות מתמטיות של וקטורים
הפונקציות האלה מפרשות את ארגומנטי הקלט כמייצגים של וקטורים במרחב n-ממדי.
הדיוק של הפעולות המתמטיות על ערכים של 32 ביט עם נקודה צפה מושפע מהפראגמות rs_fp_relaxed ו-rs_fp_full. פרטים נוספים זמינים במאמר פונקציות וקבועים מתמטיים.
אפשר להשיג איזון שונה בין דיוק למהירות באמצעות וריאנטים של פונקציות מתמטיות נפוצות. פונקציות עם שם שמתחיל ב-
- native_: יכול להיות שיהיו לו הטמעות חומרה בהתאמה אישית עם דיוק נמוך יותר. בנוסף, ייתכן שערכים רגילים חלקית יוסרו ל-0, יתבצע עיגול ל-0 וייתכן שלא תתבצע טיפול נכון בקלט של NaN ושל אינסוף.
- fast_: יכול לבצע חישובים פנימיים באמצעות 16 ביט של פלוט. בנוסף, ייתכן שערכים רגילים למחצה יוסרו לאפס, וייתכן שייעשה שימוש בעיגול לאפס.
פונקציות | |
---|---|
cross | המכפלה הווקטורית (cross product) של שני וקטורים |
distance | המרחק בין שתי נקודות |
נקודה | מכפלה סקלרית של שני וקטורים |
fast_distance | המרחק המשוער בין שתי נקודות |
fast_length | האורך המשוער של וקטור |
fast_normalize | וקטור מנורמלי משוער |
length | אורך וקטור |
native_distance | המרחק המשוער בין שתי נקודות |
native_length | האורך המשוער של וקטור |
native_normalize | נורמליזציה של וקטור באופן משוער |
normalize | נורמליזציה של וקטור |
פונקציות מטריציוניות
הפונקציות האלה מאפשרות לבצע פעולות במטריצות ריבועיות בדרגות 2x2, 3x3 ו-4x4. הם שימושיים במיוחד לטרנספורמציות גרפיות ותואמים ל-OpenGL.
אנחנו משתמשים באינדקס שמתחיל בספרה אפס לשורות ולעמודות. לדוגמה, הרכיב האחרון של rs_matrix4x4 נמצא ב-(3, 3).
ב-RenderScript נעשה שימוש במטריצות עם עמודות ראשיות ובווקטורים שמבוססים על עמודות. כדי לבצע טרנספורמציה של וקטור, מכפילים את הווקטור בחזרה, למשל (matrix * vector)
, באמצעות הפונקציה rsMatrixMultiply().
כדי ליצור מטריצה של טרנספורמציה שמבצעת שתי טרנספורמציות בו-זמנית, מכפילים את שתי מטריצות המקור, כאשר הטרנספורמציה הראשונה היא הארגומנט הימני. לדוגמה, כדי ליצור מטריצת טרנספורמציה שמחילה את הטרנספורמציה s1 ואחריה את הטרנספורמציה s2, צריך להפעיל את הפונקציה rsMatrixLoadMultiply(&combined, &s2, &s1)
.
הערך הזה נגזר מ-s2 * (s1 * v)
, שהוא (s2 * s1) * v
.
יש לנו שני סגנונות של פונקציות ליצירת מטריצות טרנספורמציה: Transformation של rsMatrixLoad ו-Transformation של rsMatrix. בסגנון הקודם, מטריית הטרנספורמציה מאוחסנת בארגומנט הראשון. באפשרות השנייה, מטריצה קיימת של טרנספורמציה משתנה כך שהטרנספורמציה החדשה תתבצע קודם. לדוגמה, אם קוראים ל-rsMatrixTranslate() במטריצה שכבר מבצעת שינוי קנה מידה, המטריצה שמתקבלת כשמחילים אותה על וקטור תבצע קודם את התרגום ואז את שינוי קנה המידה.
פונקציות | |
---|---|
rsExtractFrustumPlanes | חישוב של מישורי גוף קטום |
rsIsSphereInFrustum | בדיקה אם כדור נמצא בתוך המישורים של גוף דמוי חרוט |
rsMatrixGet | אחזור רכיב אחד |
rsMatrixInverse | הפיכת מטריצה במקום |
rsMatrixInverseTranspose | הפיכה והמרת מטריצה במקום |
rsMatrixLoad | טעינת מטריצה או העתקה שלה |
rsMatrixLoadFrustum | טעינת מטריצה של הקרנה דרך חרוט |
rsMatrixLoadIdentity | טעינת מטריצה של זהויות |
rsMatrixLoadMultiply | הכפלת שתי מטריצות |
rsMatrixLoadOrtho | טעינת מטריצה של הקרנה אורתוגרפית |
rsMatrixLoadPerspective | טעינת מטריצת הקרנה פרופרקטיבית |
rsMatrixLoadRotate | טעינת מטריצה של סיבוב |
rsMatrixLoadScale | טעינת מטריצה של שינוי קנה מידה |
rsMatrixLoadTranslate | טעינת מטריצה של תרגום |
rsMatrixMultiply | הכפלה של מטריצה בוקטור או במטריצה אחרת |
rsMatrixRotate | החלת סיבוב על מטריצה של טרנספורמציה |
rsMatrixScale | החלת שינוי קנה מידה על מטריצה של טרנספורמציה |
rsMatrixSet | הגדרת רכיב אחד |
rsMatrixTranslate | החלת תרגום על מטריצה של טרנספורמציה |
rsMatrixTranspose | החלפת מיקום של מטריצה |
פונקציות Quaternion
הפונקציות הבאות מבצעות מניפולציות על קוואטרניונים.
פונקציות | |
---|---|
rsQuaternionAdd | הוספת שני קווטרניונים |
rsQuaternionConjugate | הופעה מצומדת של קוואטרניון |
rsQuaternionDot | מכפלת נקודות של שני קווטרניונים |
rsQuaternionGetMatrixUnit | אחזור מטריצה של רוטציה מ-quaternion |
rsQuaternionLoadRotate | יצירת קוואטרניון של סיבוב |
rsQuaternionLoadRotateUnit | קוואטרניון שמייצג סיבוב סביב וקטור יחידה שרירותי |
rsQuaternionMultiply | הכפלת קוואטרניון בסקלר או בקווארטרניון אחר |
rsQuaternionNormalize | נרמל קווטרניון |
rsQuaternionSet | יצירת קוואטרניון |
rsQuaternionSlerp | אינטרפולציה ליניארית כדורית בין שני קוואטרניונים |
פונקציות עדכון אטומי
כדי לעדכן ערכים ששותפו בין כמה שרשורים, משתמשים בפונקציות הבאות. הם מוודאים שהערכים מתעדכנים באופן אטומי, כלומר שהקריאות מהזיכרון, העדכונים והכתובות בזיכרון מתבצעים בסדר הנכון.
הפונקציות האלה איטיות יותר מהפונקציות המקבילות שאין להן מאפיין אטומי, לכן כדאי להשתמש בהן רק כשצריך סנכרון.
חשוב לזכור שב-RenderScript, סביר להניח שהקוד יפעל בשרשור נפרד גם אם לא יצרתם אותו באופן מפורש. לרוב, סביבת זמן הריצה של RenderScript תחלק את הביצוע של ליבה אחת לכמה חוטים. צריך לעדכן משתנים גלובליים באמצעות פונקציות אטומיות. אם אפשר, כדאי לשנות את האלגוריתם כדי להימנע מהן לגמרי.
פונקציות | |
---|---|
rsAtomicAdd | הוספה ללא סיכון לבעיות בשרשור (thread-safe) |
rsAtomicAnd | ביטוי AND בינארי בטוח למחרוזות |
rsAtomicCas | השוואה והגדרה ללא סיכון לבעיות בשרשור (thread-safe) |
rsAtomicDec | הפחתה בטוחה למחרוזת |
rsAtomicInc | הוספה בטוחה למחרוזת (thread-safe) |
rsAtomicMax | ערך מקסימלי ללא סיכון לבעיות בשרשור |
rsAtomicMin | מינימום בטוח למספר השרשור |
rsAtomicOr | או ביטוי ברמת הסיביות ללא סיכון לבעיות בשרשור (thread-safe) |
rsAtomicSub | חיסור בטוח למספרי תהליכים |
rsAtomicXor | או בלעדי בוליאני ברמת הסיביות ללא סיכון לבעיות בשרשור (thread-safe) |
סוגי פונקציות זמן ופונקציות זמן
אפשר להשתמש בפונקציות הבאות כדי לבדוק את השעה הנוכחית בשעון ואת זמן הפעילות הנוכחי של המערכת. לא מומלץ להפעיל את הפונקציות האלה בתוך ליבה.
סוגים | |
---|---|
rs_time_t | שניות מ-1 בינואר 1970 |
rs_tm | המבנה של תאריך ושעה |
פונקציות | |
---|---|
rsGetDt | הזמן שחלף מאז השיחה האחרונה |
rsLocaltime | המרה לזמן המקומי |
rsTime | שניות מ-1 בינואר 1970 |
rsUptimeMillis | זמן פעולה תקינה של המערכת באלפיות שנייה |
rsUptimeNanos | זמן פעולה תקינה של המערכת בננו-שניות |
פונקציות ליצירת הקצאות
אפשר להשתמש בפונקציות הבאות כדי ליצור הקצאות מסקריפט.
אפשר להפעיל את הפונקציות האלה באופן ישיר או עקיף מפונקציה שניתן להפעיל. אם נתיב כלשהו של תהליך הבקרה יכול לגרום לקריאה לפונקציות האלה מתוך פונקציית ליבה של RenderScript, תיווצר שגיאה במהדר.
פונקציות | |
---|---|
rsCreateAllocation | יצירת אובייקט rs_allocation מסוג נתון. |
rsCreateElement | יצירת אובייקט rs_element מסוג הנתונים שצוין |
rsCreatePixelElement | יצירת אובייקט rs_element מסוג הנתונים וסוג הנתונים שצוינו |
rsCreateType | יצירת אובייקט rs_type עם מאפייני הרכיב והצורה שצוינו |
rsCreateVectorElement | יצירת אובייקט rs_element מסוג הנתונים ורוחבו של הווקטור שצוינו |
פונקציות גישה לנתוני הקצאה
אפשר להשתמש בפונקציות הבאות כדי לקבל ולהגדיר את התאים שמרכיבים את ההקצאה.
- כדי לגשת לתאים ספציפיים, משתמשים בפונקציות rsGetElementAt* ו-rsSetElementAt.
- אפשר להעתיק כמה תאים באמצעות הפונקציות rsAllocationCopy* ו-rsAllocationV*.
- כדי לקבל ערכים באמצעות Sampler, משתמשים ב-rsSample.
פונקציות | |
---|---|
rsAllocationCopy1DRange | העתקת תאים רצופים בין הקצאות |
rsAllocationCopy2DRange | העתקת אזור מלבני של תאים בין הקצאות |
rsAllocationVLoadX | אחזור וקטור מהקצאה של סקלרים |
rsAllocationVStoreX | אחסון וקטור בהקצאה של סקלר |
rsGetElementAt | החזרת תא מהקצאה |
rsGetElementAtYuv_uchar_U | אחזור של רכיב U בהקצאה של רכיבי YUV |
rsGetElementAtYuv_uchar_V | אחזור הרכיב V של הקצאה של רכיבי YUV |
rsGetElementAtYuv_uchar_Y | אחזור הרכיב Y של הקצאה של רכיבי YUV |
rsSample | דגימה של ערך מהקצאת טקסטורה |
rsSetElementAt | הגדרת תא של הקצאה |
פונקציות של מאפייני אובייקטים
אפשר להשתמש בפונקציות הבאות כדי לשלוח שאילתות לגבי המאפיינים של אובייקט הקצאה, אובייקט רכיב או אובייקט דגימה. האובייקטים האלה נוצרים מ-Java. אי אפשר ליצור אותם מסקריפט.
הקצאות:
הקצאות הן השיטה הראשית להעברת נתונים אל ליבות RenderScript ומהן.
הן אוסף של תאים מובְנים שאפשר להשתמש בהם לאחסון בימפטים, טקסטורות, נקודות נתונים שרירותיות וכו'.
לאוסף התאים הזה יכולות להיות הרבה מאפיינים (X, Y, Z, Array0, Array1, Array2, Array3), פנים (למפות קוביות) ורמת פירוט (למיפ-מאפינג).
פרטים על יצירת הקצאות זמינים במאמר android.renderscript.Allocation.
רכיבים:
המונח 'רכיב' משמש באופן לא ברור ב-RenderScript, גם כמידע על הסוג של התאים של הקצאה וגם כיצירת מופע של הסוג הזה. לדוגמה:
- rs_element הוא שם של מפרט סוג, ו-
- בפונקציות כמו rsGetElementAt(), 'element' הוא יצירת המופע של הסוג, כלומר תא של הקצאה.
הפונקציות הבאות מאפשרות לשלוח שאילתות לגבי המאפיינים של מפרט הסוג.
רכיב יכול לציין סוגי נתונים פשוטים כמו ב-C, למשל מספר שלם, מספר עשרוני או בוליאני. אפשר גם לציין כאן את ה-handle של אובייקט RenderScript. ברשימה rs_data_type מפורטת רשימה של סוגי נתונים בסיסיים.
רכיבים יכולים לציין גרסאות של וקטור בגודל קבוע (בגודל 2, 3 או 4) של הסוגים הבסיסיים. אפשר לקבץ רכיבים יחד לרכיבים מורכבים, וכך ליצור את המקבילה להגדרות המבנה של C.
לרכיבים יכול להיות גם סוג, שהוא מידע סמנטי שמשמש לפרש את נתוני הפיקסלים. ראו rs_data_kind.
כשיוצרים הקצאות של רכיבים נפוצים, אפשר פשוט להשתמש באחד מהרכיבים המוגדרים מראש הרבים, כמו F32_2.
כדי ליצור רכיבי Element מורכבים, משתמשים בכיתה Element.Builder ב-Java.
סמפלים:
אובייקטים של Samplers מגדירים איך אפשר לקרוא את הקצאות (Allocations) כמבנה בתוך ליבה. מידע נוסף זמין במאמר android.renderscript.S.
פונקציות | |
---|---|
rsAllocationGetDimFaces | יש יותר מפנים אחד |
rsAllocationGetDimLOD | נוכחות של רמות פירוט |
rsAllocationGetDimX | הגודל של המאפיין X |
rsAllocationGetDimY | הגודל של המאפיין Y |
rsAllocationGetDimZ | הגודל של המאפיין Z |
rsAllocationGetElement | אחזור האובייקט שמתאר את התא של הקצאה |
rsClearObject | שחרור אובייקט |
rsElementGetBytesSize | גודל הרכיב |
rsElementGetDataKind | סוג הרכיב |
rsElementGetDataType | סוג הנתונים של רכיב |
rsElementGetSubElement | רכיב משנה של רכיב מורכב |
rsElementGetSubElementArraySize | גודל המערך של רכיב משנה של רכיב מורכב |
rsElementGetSubElementCount | מספר רכיבי המשנה |
rsElementGetSubElementName | שם של רכיב משנה |
rsElementGetSubElementNameLength | האורך של שם רכיב המשנה |
rsElementGetSubElementOffsetBytes | היסט של רכיב המשנה שנוצר |
rsElementGetVectorSize | גודל הווקטור של הרכיב |
rsIsObject | בדיקה אם הכינוי ריק |
rsSamplerGetAnisotropy | אנאיזוטרופיה של הסמפלר |
rsSamplerGetMagnification | ערך ההגדלה של ה-Sampler |
rsSamplerGetMinification | ערך המינימיזציה של הסמפלר |
rsSamplerGetWrapS | ערך S של Sampler wrap |
rsSamplerGetWrapT | ערך T של Sampler wrap |
סוגי פונקציות קריאה לליבת ליבה
אפשר להשתמש בפונקציה rsForEach() כדי להפעיל את הליבה ברמה הבסיסית של סקריפט.
הפונקציות האחרות משמשות לקבלת המאפיינים של ההפעלה של ליבה שפועלת, כמו מאפיינים ואינדקסים נוכחיים. הפונקציות האלה מקבלות כארגומנט rs_kernel_context.
סוגים | |
---|---|
rs_for_each_strategy_t | סדר העיבוד המוצע של התאים |
rs_kernel | טיפול בפונקציית ליבה |
rs_kernel_context | טיפול בהקשר של קריאה לליבת המעבד |
rs_script_call_t | מידע על איטרציות של תאים |
פונקציות | |
---|---|
rsForEach | הפעלת ליבה |
rsForEachInternal | (API פנימי) הפעלת ליבה בסקריפט הנוכחי (עם מספר המשבצת) |
rsForEachWithOptions | הפעלת ליבה עם אפשרויות |
rsGetArray0 | האינדקס במאפיין Array0 להקשר הליבה שצוין |
rsGetArray1 | אינדקס במאפיין Array1 להקשר הליבה שצוין |
rsGetArray2 | אינדקס במאפיין Array2 להקשר הליבה שצוין |
rsGetArray3 | אינדקס במאפיין Array3 להקשר הליבה שצוין |
rsGetDimArray0 | הגודל של המאפיין Array0 בהקשר הליבה שצוין |
rsGetDimArray1 | הגודל של המאפיין Array1 בהקשר הליבה שצוין |
rsGetDimArray2 | הגודל של המאפיין Array2 בהקשר הליבה שצוין |
rsGetDimArray3 | הגודל של המאפיין Array3 בהקשר הליבה שצוין |
rsGetDimHasFaces | נוכחות של יותר מפנייה אחת להקשר הליבה שצוין |
rsGetDimLod | מספר רמות הפירוט של ההקשר של הליבה שצוין |
rsGetDimX | הגודל של המאפיין X בהקשר הליבה שצוין |
rsGetDimY | הגודל של המאפיין Y בהקשר הליבה שצוין |
rsGetDimZ | הגודל של המאפיין Z בהקשר הליבה שצוין |
rsGetFace | הקואורדינטה של הפנים בהקשר הליבה שצוין |
rsGetLod | הוספת אינדקס למאפיין 'רמות פירוט' בהקשר הליבה שצוין |
פונקציות קלט/פלט
הפונקציות האלה משמשות כדי:
- שולחים מידע ללקוח Java, וגם
- שולחים את ההקצאה שעברה עיבוד או מקבלים את ההקצאה הבאה לעיבוד.
פונקציות | |
---|---|
rsAllocationIoReceive | קבלת תוכן חדש מהתור |
rsAllocationIoSend | שליחת תוכן חדש לתור |
rsSendToClient | שליחת הודעה ללקוח, ללא חסימה |
rsSendToClientBlocking | שליחת הודעה ללקוח, חסימה |
ניפוי באגים בפונקציות
הפונקציות הבאות מיועדות לשימוש במהלך פיתוח האפליקציה. אין להשתמש בהם באפליקציות למשלוח.
פונקציות | |
---|---|
rsDebug | רישום ביומן של הודעה וערכים |
סוגי פונקציות וגרפיקה
מערכת המשנה של הגרפיקה ב-RenderScript הוסרה ברמת API 23.