סקירה כללית
סקלר:
ב-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 ביט |
סוגים
char2 : שני מספרים שלמים בעלי סימן באורך 8 ביט
typedef של: char __attribute__((ext_vector_type(2)))
וקטור של שני תווים. שני התווים האלה מקובצים בשדה יחיד של 16 ביט עם התאמה של 16 ביט.
char3 : שלושה מספרים שלמים בעלי סימן באורך 8 ביט
typedef של: char __attribute__((ext_vector_type(3)))
וקטור של שלושה תווים. שלושת התווים האלה מקובצים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.
char4 : ארבעה מספרים שלמים בעלי סימן באורך 8 ביט
typedef של: char __attribute__((ext_vector_type(4)))
וקטור של ארבעה תווים. ארבעת התווים האלה מקובצים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.
double2 : שני מספרי float של 64 ביט
typedef של: double __attribute__((ext_vector_type(2)))
וקטור של שני מספרים שלמים. שני השדות הכפולים האלה נארזים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.
double3 : שלושה מספרים ממשיים (float) ב-64 ביט
typedef של: double __attribute__((ext_vector_type(3)))
וקטור של שלושה מספרים כפולים. שלושת השדות הכפולים האלה מקובצים בשדה יחיד של 256 ביט עם התאמה של 256 ביט.
double4 : ארבע ערכים מסוג float של 64 ביט
typedef של: double __attribute__((ext_vector_type(4)))
וקטור של ארבעה מספרים כפולים. ארבעת השדות הכפולים האלה נארזים בשדה יחיד של 256 ביט עם התאמה של 256 ביט.
float2 : שני מספרי float של 32 ביט
typedef של: float __attribute__((ext_vector_type(2)))
וקטור של שני מספרי float. שני המספרים העשרוניים האלה מקובצים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.
וקטור של שני מספרי float. שני המספרים העשרוניים האלה מקובצים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.
float3 : שלושה מספרים ממשיים (float) ב-32 ביט
typedef של: float __attribute__((ext_vector_type(3)))
וקטור של שלושה מספרים מסוג float. שלושת המשתנים מסוג float נארזים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.
float4 : ארבע ערכים של float ב-32 ביט
typedef של: float __attribute__((ext_vector_type(4)))
וקטור של ארבעה מספרים מסוג float. ארבעת המשתנים מסוג float נארזים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.
half : ערך נקודה צפה (floating-point) של 16 ביט
typedef של: __fp16 נוסף ב-רמת API 23
ערך נקודה צפה (floating-point) של 16 ביט.
half2 : שני מספרי צף של 16 ביט
typedef של: half __attribute__((ext_vector_type(2))) נוסף ב-רמת API 23
גרסה וקטורית של סוג half float. שדה שמכיל שני שדות חצי שמועברים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.
half3 : שלושה מספרים שלמים של 16 ביט
typedef של: half __attribute__((ext_vector_type(3))) נוסף ב-רמת API 23
גרסה וקטורית של סוג half float. מספק שלושה שדות חצי שמועברים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.
half4 : ארבע ערכים של 16 ביט בפורמט float
typedef של: half __attribute__((ext_vector_type(4))) נוסף ב-רמת API 23
גרסה וקטורית של סוג half float. מספק ארבעה שדות חצי שממולאים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.
int16_t : מספר שלם עם סימן באורך 16 ביט
typedef של: short
סוג של מספר שלם ב-16 סיביות עם סימן.
int2 : שני מספרים שלמים בעלי סימן באורך 32 ביט
typedef של: int __attribute__((ext_vector_type(2)))
וקטור של שני מספרים שלמים. שני המשתנים מסוג int נארזים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.
int3 : שלושה מספרים שלמים בעלי סימן באורך 32 ביט
typedef של: int __attribute__((ext_vector_type(3)))
וקטור של שלושה מספרים שלמים. שלושת המשתנים מסוג int נארזים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.
int32_t : מספר שלם עם סימן באורך 32 ביט
typedef של: int
סוג של מספר שלם ב-32 סיביות עם סימן.
int4 : ארבעה מספרים שלמים בעלי סימן באורך 32 ביט
typedef של: int __attribute__((ext_vector_type(4)))
וקטור של ארבעה מספרים שלמים. שני ה-4 האלה מקובצים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.
int64_t : מספר שלם חתום של 64 ביט
typedef של: long long הוסר מ-רמת API 21 ואילך
typedef של: long נוסף ב-רמת API 21
סוג של מספר שלם ב-64 סיביות עם סימן.
int8_t : מספר שלם עם סימן באורך 8 ביט
typedef של: char
סוג של מספר שלם ב-8 סיביות עם סימן.
long2 : שני מספרים שלמים חתומים בטווח 64 ביט
typedef של: long __attribute__((ext_vector_type(2)))
וקטור של שני longs. שני המשתנים מסוג long נארזים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.
long3 : שלושה מספרים שלמים חתומים בטווח 64 ביט
typedef של: long __attribute__((ext_vector_type(3)))
ווקטור של שלושה longs. שלושת המשתנים מסוג long נארזים בשדה יחיד של 256 ביט עם התאמה של 256 ביט.
long4 : ארבעה מספרים שלמים חתומים בטווח 64 ביט
typedef של: long __attribute__((ext_vector_type(4)))
ווקטור של ארבעה מספרי long. ארבעת המשתנים מסוג long נארזים בשדה יחיד של 256 ביט עם התאמה של 256 ביט.
rs_matrix2x2 : מטריצת 2x2 של ערכים 32 ביט ששומרים על ערך שלם
מבנה עם השדות הבאים:
float m[4] |
---|
מטריצה ריבועית 2x2 של מספרי צף. הרשומות נשמרות במערך במיקום [row*2 + col].
rs_matrix3x3 : מטריצה 3x3 של מספרי צף של 32 ביט
מבנה עם השדות הבאים:
float m[9] |
---|
מטריצה ריבועית 3x3 של מספרי צף. הרשומות נשמרות במערך במיקום [row*3 + col].
rs_matrix4x4 : מטריצת 4x4 של מספרי צף של 32 ביט
מבנה עם השדות הבאים:
float m[16] |
---|
מטריצה ריבועית של 4x4 של מספרי צף. הרשומות מאוחסנות במערך במיקום [row*4 + col].
rs_quaternion : Quaternion
short2 : שני מספרים שלמים בעלי סימן באורך 16 ביט
typedef של: short __attribute__((ext_vector_type(2)))
וקטור של שני סרטוני Shorts. שני ה-shorts האלה נארזים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.
short3 : שלושה מספרים שלמים בעלי סימן באורך 16 ביט
typedef של: short __attribute__((ext_vector_type(3)))
וקטור של שלושה סרטוני Shorts. שלושת השדות הקצרים האלה מקובצים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.
short4 : ארבעה מספרים שלמים בעלי סימן באורך 16 ביט
typedef של: short __attribute__((ext_vector_type(4)))
וקטור של ארבעה סרטוני Shorts. ארבעת השדות הקצרים האלה מקובצים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.
size_t : סוג גודל ללא סימן
typedef של: uint64_t כשמפעילים הידור ל-64 ביט.
typedef של: uint32_t כשמפעילים הידור ל-32 ביט.
סוג גודל ללא סימן. מספר הביטים תלוי בדגלים של הידור.
ssize_t : Signed size type
typedef של: int64_t כשמפעילים הידור ל-64 ביט.
typedef של: int32_t כשמפעילים הידור ל-32 ביט.
סוג המידה החתום. מספר הביטים תלוי בדגלים של הידור.
uchar : מספר שלם ללא סימן באורך 8 ביט
typedef של: uint8_t
סוג של מספר שלם ללא סימן באורך 8 ביט.
uchar2 : שני מספרים שלמים ללא סימן באורך 8 ביט
typedef של: uchar __attribute__((ext_vector_type(2)))
וקטור של שני uchars. שני שדות ה-uchar האלה מקובצים בשדה יחיד של 16 ביט עם התאמה של 16 ביט.
uchar3 : שלושה מספרים שלמים לא חתומים באורך 8 ביט
typedef של: uchar __attribute__((ext_vector_type(3)))
וקטור של שלושה uchars. שלושת השדות מסוג uchar נארזים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.
uchar4 : ארבעה מספרים שלמים ללא סימן באורך 8 ביט
typedef של: uchar __attribute__((ext_vector_type(4)))
וקטור של ארבע אותיות uchar. ארבעת שדות ה-uchar האלה מקובצים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.
uint : מספר שלם ללא סימן באורך 32 ביט
typedef של: uint32_t
סוג של מספר שלם ללא סימן באורך 32 ביט.
uint16_t : מספר שלם ללא סימן באורך 16 ביט
typedef של: unsigned short
סוג של מספר שלם ללא סימן באורך 16 ביט.
uint2 : שני מספרים שלמים לא חתומים באורך 32 ביט
typedef של: uint __attribute__((ext_vector_type(2)))
וקטור של שני uints. שני ה-uints האלה מקובצים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.
uint3 : שלושה מספרים שלמים לא חתומים באורך 32 ביט
typedef של: uint __attribute__((ext_vector_type(3)))
וקטור של שלושה uints. שלושת ה-uints האלה מקובצים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.
uint32_t : מספר שלם ללא סימן באורך 32 ביט
typedef של: unsigned int
סוג של מספר שלם ללא סימן באורך 32 ביט.
uint4 : ארבעה מספרים שלמים לא חתומים באורך 32 ביט
typedef של: uint __attribute__((ext_vector_type(4)))
וקטור של ארבעה uints. ארבעת ה-uints האלה מקובצים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.
uint64_t : מספר שלם ללא סימן באורך 64 ביט
typedef של: unsigned long long הוסר מ-רמת API 21 ואילך
typedef של: unsigned long נוסף ב-רמת API 21
סוג של מספר שלם ללא סימן (unsigned integer) ב-64 סיביות.
uint8_t : מספר שלם ללא סימן באורך 8 ביט
typedef של: unsigned char
סוג של מספר שלם ללא סימן באורך 8 ביט.
ulong : מספר שלם ללא סימן באורך 64 ביט
typedef של: uint64_t
סוג של מספר שלם ללא סימן (unsigned integer) ב-64 סיביות.
ulong2 : שני מספרים שלמים לא חתומים באורך 64 ביט
typedef של: ulong __attribute__((ext_vector_type(2)))
וקטור של שני ulongs. שני ה-ulongs האלה מקובצים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.
ulong3 : שלושה מספרים שלמים לא חתומים באורך 64 ביט
typedef של: ulong __attribute__((ext_vector_type(3)))
וקטור של שלושה ulongs. שלושת השדות מסוג ulong נארזים בשדה יחיד באורך 256 ביט עם התאמה של 256 ביט.
ulong4 : ארבעה מספרים שלמים לא חתומים באורך 64 ביט
typedef של: ulong __attribute__((ext_vector_type(4)))
וקטור של ארבעה ulongs. ארבעת השדות מסוג ulong נארזים בשדה יחיד באורך 256 ביט עם התאמה של 256 ביט.
ushort : מספר שלם ללא סימן באורך 16 ביט
typedef של: uint16_t
סוג של מספר שלם ללא סימן באורך 16 ביט.
ushort2 : שני מספרים שלמים לא חתומים באורך 16 ביט
typedef של: ushort __attribute__((ext_vector_type(2)))
וקטור של שני ushorts. שני שדות ה-ushort האלה מקובצים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.
ushort3 : שלושה מספרים שלמים לא חתומים באורך 16 ביט
typedef של: ushort __attribute__((ext_vector_type(3)))
וקטור של שלושה ushorts. שלושת השדות מסוג ushort נארזים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.
ushort4 : ארבעה מספרים שלמים לא חתומים באורך 16 ביט
typedef של: ushort __attribute__((ext_vector_type(4)))
וקטור של ארבעת ushorts. ארבעת השדות מסוג ushort נארזים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.