ภาพรวม
RenderScript เป็นรันไทม์ที่มีประสิทธิภาพสูงซึ่งให้บริการการดำเนินการประมวลผลในระดับเนทีฟ ระบบจะคอมไพล์โค้ด RenderScript ในอุปกรณ์ขณะรันไทม์เพื่อให้เป็นแพลตฟอร์มที่ไม่ขึ้นอยู่กับแพลตฟอร์มด้วย
เอกสารอ้างอิงนี้อธิบายเกี่ยวกับรันไทม์ API ของ RenderScript ซึ่งคุณใช้เขียนโค้ด RenderScript ใน C99 ได้ ระบบจะรวมไฟล์ส่วนหัวการประมวลผลของ RenderScript ให้คุณโดยอัตโนมัติ
หากต้องการใช้ RenderScript คุณต้องใช้งาน RenderScript Runtime API ที่ระบุไว้ในเอกสารประกอบที่นี่ รวมถึง Android Framework API สำหรับ RenderScript ดูเอกสารประกอบเกี่ยวกับเฟรมเวิร์ก Android และ API ได้ที่ข้อมูลอ้างอิงแพ็กเกจ android.renderscript
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีพัฒนาด้วย RenderScript และวิธีที่รันไทม์และ API เฟรมเวิร์ก Android โต้ตอบกันได้ในคู่มือนักพัฒนาซอฟต์แวร์ RenderScript และตัวอย่าง RenderScript
ประเภทตัวเลข
Scalar
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 | คู่ |
เวกเตอร์
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 ตามด้วยดัชนีแบบนับจาก 0
ตัวอย่างเช่น เมื่อใช้ 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
คุณสามารถเข้าถึงหลายรายการของเวกเตอร์พร้อมกันได้โดยใช้ตัวระบุซึ่งเป็นการต่อตัวอักษรหรือดัชนีหลายรายการ เวกเตอร์ที่ได้จะมีขนาดเท่ากับจํานวนรายการที่มีชื่อ
จากตัวอย่างข้างต้น คุณจะเข้าถึง 2 รายการตรงกลางได้โดยใช้ 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 รองรับเมทริกซ์สี่เหลี่ยมจัตุรัสขนาดคงที่ของประเภท float ขนาด 2x2, 3x3 และ 4x4 โดยประเภทต่างๆ มีชื่อว่า rs_matrix2x2, rs_matrix3x3 และ rs_matrix4x4 ดูรายการการดำเนินการได้ที่ฟังก์ชันเมทริกซ์
นอกจากนี้ ระบบยังรองรับควอร์เทอร์เนิดผ่าน rs_quaternion ด้วย ดูรายการการดำเนินการได้ที่ฟังก์ชันควอร์เทอร์เลียน
ประเภท | |
---|---|
char2 | จํานวนเต็มแบบมีเครื่องหมาย 8 บิต 2 รายการ |
char3 | จํานวนเต็มแบบมีเครื่องหมาย 8 บิต 3 รายการ |
char4 | จํานวนเต็มแบบมีเครื่องหมาย 8 บิต 4 รายการ |
double2 | จํานวนลอยตัว 64 บิต 2 รายการ |
double3 | ทศนิยม 64 บิต 3 รายการ |
double4 | จำนวนลอยตัว 64 บิต 4 รายการ |
float2 | จํานวนลอยตัว 32 บิต 2 รายการ |
float3 | ทศนิยม 32 บิต 3 รายการ |
float4 | ทศนิยม 32 บิต 4 รายการ |
half | ค่าจุดลอยตัว 16 บิต |
half2 | จำนวนทศนิยม 16 บิต 2 รายการ |
half3 | จำนวนลอยตัว 16 บิต 3 รายการ |
half4 | จำนวนลอยตัว 16 บิต 4 รายการ |
int16_t | จํานวนเต็มแบบ 16 บิตที่มีเครื่องหมาย |
int2 | จํานวนเต็มแบบมีเครื่องหมาย 32 บิต 2 รายการ |
int3 | จํานวนเต็มแบบมีเครื่องหมาย 32 บิต 3 รายการ |
int32_t | จํานวนเต็มแบบมีเครื่องหมาย 32 บิต |
int4 | จํานวนเต็มแบบมีเครื่องหมาย 32 บิต 4 รายการ |
int64_t | จํานวนเต็มแบบมีเครื่องหมาย 64 บิต |
int8_t | จํานวนเต็มแบบมีเครื่องหมาย 8 บิต |
long2 | จํานวนเต็มแบบมีเครื่องหมาย 64 บิต 2 รายการ |
long3 | จํานวนเต็มแบบมีเครื่องหมาย 64 บิต 3 รายการ |
long4 | จํานวนเต็มแบบมีเครื่องหมาย 64 บิต 4 รายการ |
rs_matrix2x2 | เมทริกซ์ 2x2 ของจำนวนลอยตัว 32 บิต |
rs_matrix3x3 | แมทริกซ์ 3x3 ของจำนวนลอยตัว 32 บิต |
rs_matrix4x4 | เมทริกซ์ 4x4 ของจำนวนลอยตัว 32 บิต |
rs_quaternion | ควอเทอร์เนียน |
short2 | จํานวนเต็มแบบมีเครื่องหมาย 16 บิต 2 รายการ |
short3 | จํานวนเต็มแบบมีเครื่องหมาย 16 บิต 3 รายการ |
short4 | จํานวนเต็มแบบมีเครื่องหมาย 16 บิต 4 รายการ |
size_t | ประเภทขนาดที่ไม่มีการรับรอง |
ssize_t | ประเภทขนาดที่ลงนาม |
uchar | จํานวนเต็มแบบไม่ลงนาม 8 บิต |
uchar2 | จํานวนเต็ม 8 บิตแบบไม่มีเครื่องหมาย 2 รายการ |
uchar3 | จํานวนเต็ม 8 บิตแบบไม่มีเครื่องหมาย 3 รายการ |
uchar4 | จํานวนเต็มแบบไม่มีเครื่องหมาย 8 บิต 4 รายการ |
uint | จํานวนเต็มแบบไม่ลงนาม 32 บิต |
uint16_t | จํานวนเต็มแบบไม่ลงนาม 16 บิต |
uint2 | จำนวนเต็มแบบไม่ลงนาม 32 บิต 2 รายการ |
uint3 | จํานวนเต็ม 32 บิตแบบไม่ลงนาม 3 รายการ |
uint32_t | จํานวนเต็มแบบไม่ลงนาม 32 บิต |
uint4 | จํานวนเต็ม 32 บิตแบบไม่ลงนาม 4 รายการ |
uint64_t | จํานวนเต็ม 64 บิตแบบไม่มีเครื่องหมาย |
uint8_t | จํานวนเต็มแบบไม่ลงนาม 8 บิต |
ulong | จํานวนเต็ม 64 บิตแบบไม่มีเครื่องหมาย |
ulong2 | จํานวนเต็ม 64 บิตแบบไม่มีเครื่องหมาย 2 รายการ |
ulong3 | จํานวนเต็ม 64 บิตแบบไม่มีเครื่องหมาย 3 รายการ |
ulong4 | จํานวนเต็ม 64 บิตแบบไม่มีเครื่องหมาย 4 รายการ |
ushort | จํานวนเต็มแบบไม่ลงนาม 16 บิต |
ushort2 | จํานวนเต็มแบบไม่ลงนาม 16 บิต 2 รายการ |
ushort3 | จํานวนเต็มแบบไม่ลงนาม 16 บิต 3 รายการ |
ushort4 | จํานวนเต็มแบบไม่ลงนาม 16 บิต 4 รายการ |
ประเภทออบเจ็กต์
ประเภทด้านล่างใช้เพื่อจัดการออบเจ็กต์ RenderScript เช่น การจัดสรร Sampler องค์ประกอบ และสคริปต์ ออบเจ็กต์ส่วนใหญ่เหล่านี้สร้างขึ้นโดยใช้ Java RenderScript API
ประเภท | |
---|---|
rs_allocation | แฮนเดิลของการจัดสรร |
rs_allocation_cubemap_face | Enum สำหรับการเลือกใบหน้าของแผนที่ลูกบาศก์ |
rs_allocation_usage_type | บิตฟิลด์เพื่อระบุวิธีใช้การจัดสรร |
rs_data_kind | ประเภทข้อมูลองค์ประกอบ |
rs_data_type | ประเภทข้อมูลพื้นฐานขององค์ประกอบ |
rs_element | แฮนเดิลขององค์ประกอบ |
rs_sampler | แฮนเดิลของแซมเพลอร์ |
rs_sampler_value | ค่า T ของการตัดขอบ Sampler |
rs_script | แฮนเดิลของสคริปต์ |
rs_type | แฮนเดิลไปยังประเภท |
rs_yuv_format | รูปแบบ YUV |
ฟังก์ชัน Conversion
ฟังก์ชันด้านล่างจะแปลงจากเวกเตอร์ตัวเลขประเภทหนึ่งเป็นเวกเตอร์อีกประเภทหนึ่ง หรือจากการแสดงสีรูปแบบหนึ่งเป็นการแสดงสีอีกรูปแบบหนึ่ง
ฟังก์ชัน | |
---|---|
convert | แปลงเวกเตอร์ตัวเลข |
rsPackColorTo8888 | สร้าง uchar4 RGBA จากค่าลอย |
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 ระบบอาจปัดค่าที่ต่ำกว่าปกติเป็น 0 และปัดเศษเป็น 0 ในทางกลับกัน rs_fp_full ต้องใช้การจัดการค่าที่ต่ำกว่าปกติอย่างถูกต้อง เช่น ค่าที่น้อยกว่า 1.17549435e-38f นอกจากนี้ rs_fp_rull ยังกำหนดให้ปัดเศษเป็นค่าใกล้ที่สุดโดยปัดเศษทศนิยมให้ลงท้ายด้วยเลขคู่
คุณสามารถปรับสมดุลความแม่นยำ/ความเร็วได้โดยใช้ตัวแปรของฟังก์ชันคณิตศาสตร์ทั่วไป ฟังก์ชันที่มีชื่อขึ้นต้นด้วย
- native_: อาจมีการนําฮาร์ดแวร์ที่กำหนดเองมาใช้ซึ่งมีความแม่นยำน้อยกว่า นอกจากนี้ ระบบอาจปัดค่าที่ต่ำกว่าปกติเป็น 0, ใช้การปัดทศนิยมลง และอาจจัดการอินพุต NaN และอินพุต Infinity อย่างไม่ถูกต้อง
- half_: อาจทําการคํานวณภายในโดยใช้ตัวเลขทศนิยม 16 บิต นอกจากนี้ ระบบอาจปัดค่าที่ต่ำกว่าปกติเป็น 0 และอาจปัดเศษให้ใกล้กับ 0
ค่าคงที่ | |
---|---|
M_1_PI | 1 / pi ในรูปแบบจำนวนลอยตัว 32 บิต |
M_2_PI | 2 / pi เป็นจำนวนลอยตัว 32 บิต |
M_2_SQRTPI | 2 / sqrt(pi) เป็นจำนวนลอยตัว 32 บิต |
M_E | e เป็นจำนวนลอยตัว 32 บิต |
M_LN10 | log_e(10) เป็นจำนวนลอยตัว 32 บิต |
M_LN2 | log_e(2) เป็นจำนวนลอยตัว 32 บิต |
M_LOG10E | log_10(e) ในรูปแบบจำนวนลอยตัว 32 บิต |
M_LOG2E | log_2(e) ในรูปแบบจำนวนลอยตัว 32 บิต |
M_PI | pi เป็นจำนวนลอยตัว 32 บิต |
M_PI_2 | pi / 2 เป็นจำนวนลอยตัว 32 บิต |
M_PI_4 | pi / 4 ในรูปแบบจำนวนลอยตัว 32 บิต |
M_SQRT1_2 | 1 / sqrt(2) เป็นจำนวนลอยตัว 32 บิต |
M_SQRT2 | sqrt(2) เป็นจำนวนลอยตัว 32 บิต |
ฟังก์ชัน | |
---|---|
abs | ค่าสัมบูรณ์ของจำนวนเต็ม |
acos | โคไซน์ผกผัน |
acosh | โคไซน์ไฮเปอร์โบลิกผกผัน |
acospi | โคไซน์ผกผันหารด้วยพาย |
asin | ไซน์ผกผัน |
asinh | ไซน์ไฮเปอร์โบลิกผกผัน |
asinpi | ไซน์ผกผันหารด้วยพาย |
atan | แทนเจนต์ผกผัน |
atan2 | แทนเจนต์ผกผันของอัตราส่วน |
atan2pi | แทนเจนต์ผกผันของอัตราส่วนหารด้วยพาย |
atanh | แทนเจนต์ไฮเปอร์โบลิกผกผัน |
atanpi | แทนเจนต์ผกผันหารด้วยพาย |
cbrt | รากที่ 3 |
ceil | จํานวนเต็มที่น้อยที่สุดซึ่งไม่ต่ำกว่าค่า |
clamp | จำกัดค่าให้อยู่ในช่วง |
clz | จำนวนบิต 0 นําหน้า |
copysign | คัดลอกเครื่องหมายของตัวเลขไปยังอีกตัวเลขหนึ่ง |
cos | โคไซน์ |
cosh | โคไซน์ไฮเปอร์โบลิก |
cospi | โคไซน์ของจำนวนที่คูณด้วย pi |
องศา | แปลงเรเดียนเป็นองศา |
erf | ฟังก์ชันข้อผิดพลาดทางคณิตศาสตร์ |
erfc | ฟังก์ชันข้อผิดพลาดเสริมทางคณิตศาสตร์ |
exp | e ยกกำลังตัวเลข |
exp10 | 10 ยกกำลังตัวเลข |
exp2 | 2 ยกกำลังตัวเลข |
expm1 | e ยกกำลังจำนวนลบ 1 |
fabs | ค่าสัมบูรณ์ของตัวเลขทศนิยม |
fdim | ผลต่างระหว่าง 2 ค่าที่เป็นบวก |
floor | จำนวนเต็มที่น้อยที่สุดซึ่งไม่มากกว่าค่า |
fma | คูณและเพิ่ม |
fmax | ไม่เกิน 2 รายการ |
fmin | อย่างน้อย 2 รายการ |
fmod | มอดูโล |
fract | ส่วนที่เป็นเศษทศนิยมบวก |
frexp | เศษทศนิยมและเลขชี้กำลังของเลขฐาน 2 |
half_recip | ผลหารที่คำนวณด้วยความแม่นยำ 16 บิต |
half_rsqrt | ผลหารของรากที่สองที่คำนวณด้วยความแม่นยำ 16 บิต |
half_sqrt | รากที่สองที่คำนวณด้วยความแม่นยำ 16 บิต |
hypot | เส้นทแยงมุม |
ilogb | เลขยกกำลังฐาน 2 |
ldexp | สร้างทศนิยมจากเศษทศนิยมและตัวคูณ |
lgamma | ลอการิทึมธรรมชาติของฟังก์ชันแกมมา |
log | ลอการิทึมธรรมชาติ |
log10 | ลอการิทึมฐาน 10 |
log1p | ลอการิทึมธรรมชาติของค่าบวก 1 |
log2 | ลอการิทึมฐาน 2 |
logb | เลขยกกำลังฐาน 2 |
mad | คูณและเพิ่ม |
max | สูงสุด |
นาที | ต่ำสุด |
mix | ผสมค่า 2 ค่าเข้าด้วยกัน |
modf | ส่วนประกอบแบบเต็มและแบบเศษส่วน |
nan | ไม่ใช่ตัวเลข |
nan_half | ไม่ใช่ตัวเลข |
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 | ค่าโคไซน์โดยประมาณของจำนวนที่คูณด้วย pi |
native_divide | การหารแบบใกล้เคียง |
native_exp | ค่าประมาณของ e ยกกำลังจำนวน |
native_exp10 | ประมาณ 10 ยกกำลังจำนวน |
native_exp2 | 2 ยกกำลังจำนวนหนึ่งโดยประมาณ |
native_expm1 | ค่าประมาณของ e ยกกำลังจำนวนลบ 1 |
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 | ค่าไซน์โดยประมาณของจำนวนที่คูณด้วย pi |
native_sqrt | รากที่สองโดยประมาณ |
native_tan | แทนเจนต์โดยประมาณ |
native_tanh | ไฮเปอร์โบลิกแทนเจนต์โดยประมาณ |
native_tanpi | ค่าแทนเจนต์โดยประมาณของจำนวนที่คูณด้วย pi |
nextafter | ตัวเลขทศนิยมถัดไป |
pow | ฐานที่ยกกำลัง |
pown | ฐานที่ยกกำลังเป็นจำนวนเต็ม |
powr | ฐานบวกที่ยกกำลัง |
radians | แปลงองศาเป็นเรเดียน |
remainder | เศษทศนิยมของการหาร |
remquo | เศษและผลหารของการหาร |
rint | ปัดเศษให้ลงตัว |
rootn | รากที่ n |
round | ปัดเศษออกจาก 0 |
rsRand | ตัวเลขสุ่มเทียม |
rsqrt | ตัวผกผันของรากที่สอง |
sign | เครื่องหมายของค่า |
sin | ไซน์ |
sincos | ไซน์และโคไซน์ |
sinh | ไซน์ไฮเปอร์โบลิก |
sinpi | ไซน์ของจำนวนที่คูณด้วย pi |
sqrt | รากที่สอง |
step | 0 หากน้อยกว่าค่าหนึ่งๆ ไม่เช่นนั้นจะเป็น 0 |
tan | แทนเจนต์ |
tanh | แทนเจนต์ไฮเพอร์โบลิก |
tanpi | แทนเจนต์ของจำนวนที่คูณด้วย pi |
tgamma | ฟังก์ชันแกมมา |
trunc | ตัดจุดลอยตัว |
ฟังก์ชันคณิตศาสตร์เวกเตอร์
ฟังก์ชันเหล่านี้จะตีความอาร์กิวเมนต์อินพุตเป็นการนำเสนอเวกเตอร์ในปริภูมิ n มิติ
ความแม่นยำของการดำเนินการทางคณิตศาสตร์กับตัวเลขทศนิยม 32 บิตจะได้รับผลกระทบจากพรอมต์ rs_fp_relaxed และ rs_fp_full ดูรายละเอียดได้ที่ค่าคงที่และฟังก์ชันทางคณิตศาสตร์
คุณสามารถปรับสมดุลความแม่นยำ/ความเร็วได้โดยใช้ตัวแปรของฟังก์ชันคณิตศาสตร์ทั่วไป ฟังก์ชันที่มีชื่อขึ้นต้นด้วย
- native_: อาจมีการนําฮาร์ดแวร์ที่กำหนดเองมาใช้ซึ่งมีความแม่นยำน้อยกว่า นอกจากนี้ ระบบอาจปัดค่าที่ต่ำกว่าปกติเป็น 0, ใช้การปัดทศนิยมลง และอาจจัดการอินพุต NaN และอินพุต Infinity อย่างไม่ถูกต้อง
- fast_: อาจทําการคํานวณภายในโดยใช้ตัวเลขทศนิยม 16 บิต นอกจากนี้ ระบบอาจปัดค่าที่ต่ำกว่าปกติเป็น 0 และอาจปัดเศษให้ใกล้กับ 0
ฟังก์ชัน | |
---|---|
cross | ผลคูณไขว้ของ 2 เวกเตอร์ |
distance | ระยะทางระหว่าง 2 จุด |
dot | ผลคูณเวกเตอร์ของ 2 เวกเตอร์ |
fast_distance | ระยะทางโดยประมาณระหว่าง 2 จุด |
fast_length | ความยาวโดยประมาณของเวกเตอร์ |
fast_normalize | เวกเตอร์ที่ปรับให้เป็นมาตรฐานโดยประมาณ |
length | ความยาวของเวกเตอร์ |
native_distance | ระยะทางโดยประมาณระหว่าง 2 จุด |
native_length | ความยาวโดยประมาณของเวกเตอร์ |
native_normalize | ทำให้เวกเตอร์เป็นปกติโดยประมาณ |
normalize | ปรับเวกเตอร์ให้เป็นมาตรฐาน |
ฟังก์ชันเมตริกซ์
ฟังก์ชันเหล่านี้ช่วยให้คุณจัดการกับเมทริกซ์สี่เหลี่ยมจัตุรัสที่มีลําดับชั้น 2x2, 3x3 และ 4x4 ได้ ซึ่งมีประโยชน์อย่างยิ่งสำหรับการเปลี่ยนรูปแบบกราฟิก และเข้ากันได้กับ OpenGL
เราใช้ดัชนีฐาน 0 สำหรับแถวและคอลัมน์ เช่น องค์ประกอบสุดท้ายของ rs_matrix4x4 จะอยู่ที่ (3, 3)
RenderScript ใช้เมทริกซ์แบบคอลัมน์หลักและเวกเตอร์ตามคอลัมน์ การเปลี่ยนรูปแบบเวกเตอร์จะทําโดยการคูณเวกเตอร์ในภายหลัง เช่น (matrix * vector)
ตามที่ระบุโดย rsMatrixMultiply()
หากต้องการสร้างเมทริกซ์การเปลี่ยนรูปแบบที่ทำการแปลง 2 ครั้งพร้อมกัน ให้คูณเมทริกซ์ต้นทาง 2 รายการ โดยให้การเปลี่ยนรูปแบบแรกเป็นอาร์กิวเมนต์ด้านขวา เช่น หากต้องการสร้างเมทริกซ์การเปลี่ยนรูปแบบที่ใช้การเปลี่ยนรูปแบบ s1 ตามด้วย s2 ให้เรียกใช้ rsMatrixLoadMultiply(&combined, &s2, &s1)
ซึ่งมาจาก s2 * (s1 * v)
ซึ่งก็คือ (s2 * s1) * v
เรามีฟังก์ชัน 2 รูปแบบในการสร้างเมทริกซ์การเปลี่ยนรูปแบบ ได้แก่ Transformation ของ rsMatrixLoad และ Transformation ของ rsMatrix รูปแบบแรกจะจัดเก็บเมทริกซ์การเปลี่ยนรูปแบบไว้ในอาร์กิวเมนต์แรก ส่วนหลังจะแก้ไขเมทริกซ์การเปลี่ยนรูปแบบที่มีอยู่เพื่อให้การเปลี่ยนรูปแบบใหม่เกิดขึ้นก่อน เช่น หากคุณเรียกใช้ rsMatrixTranslate() ในเมทริกซ์ที่มีการสเกลแล้ว เมทริกซ์ที่ได้เมื่อนำไปใช้กับเวกเตอร์จะทำการแปลก่อนแล้วจึงทำการสเกล
ฟังก์ชัน | |
---|---|
rsExtractFrustumPlanes | คำนวณระนาบฟรัสตัม |
rsIsSphereInFrustum | ตรวจสอบว่าทรงกลมอยู่ในระนาบทรงกรวยหรือไม่ |
rsMatrixGet | รับองค์ประกอบ 1 รายการ |
rsMatrixInverse | หาอินเวอร์สเมทริกซ์ในตำแหน่ง |
rsMatrixInverseTranspose | เปลี่ยนรูปแบบและสลับที่ของเมทริกซ์ |
rsMatrixLoad | โหลดหรือคัดลอกเมทริกซ์ |
rsMatrixLoadFrustum | โหลดเมทริกซ์การฉายภาพกรวย |
rsMatrixLoadIdentity | โหลดเมทริกซ์ข้อมูลประจำตัว |
rsMatrixLoadMultiply | คูณเมทริกซ์ 2 รายการ |
rsMatrixLoadOrtho | โหลดเมทริกซ์การฉายภาพออร์โธกราฟิก |
rsMatrixLoadPerspective | โหลดเมทริกซ์การฉายภาพด้วยมุมมอง |
rsMatrixLoadRotate | โหลดเมทริกซ์การหมุน |
rsMatrixLoadScale | โหลดเมทริกซ์การปรับขนาด |
rsMatrixLoadTranslate | โหลดเมทริกซ์การแปล |
rsMatrixMultiply | คูณเมทริกซ์ด้วยเวกเตอร์หรือเมทริกซ์อื่น |
rsMatrixRotate | ใช้การหมุนกับเมทริกซ์การเปลี่ยนรูปแบบ |
rsMatrixScale | ใช้การปรับขนาดกับเมทริกซ์การเปลี่ยนรูปแบบ |
rsMatrixSet | ตั้งค่าองค์ประกอบ 1 รายการ |
rsMatrixTranslate | ใช้การเปลี่ยนรูปแบบกับเมทริกซ์การเปลี่ยนรูปแบบ |
rsMatrixTranspose | สลับตําแหน่งเมทริกซ์ |
ฟังก์ชันควอเทอร์เนียน
ฟังก์ชันต่อไปนี้จะจัดการควอร์เทอร์เมนต์
ฟังก์ชัน | |
---|---|
rsQuaternionAdd | เพิ่มควอตเทอร์นิโอน 2 รายการ |
rsQuaternionConjugate | หาคอนจูเกตของควอเทอร์เนียน |
rsQuaternionDot | ผลคูณจุดของควอตเทอร์นิโอน 2 รายการ |
rsQuaternionGetMatrixUnit | รับเมทริกซ์การหมุนจากควอตเทอร์เนิด |
rsQuaternionLoadRotate | สร้างควอตเทอร์เนิดการหมุน |
rsQuaternionLoadRotateUnit | ควอร์เทอร์ไบนารีที่แสดงการหมุนรอบเวกเตอร์หน่วยที่กำหนดเอง |
rsQuaternionMultiply | คูณควอตเทอร์เนิดด้วยสเกลาร์หรือควอตเทอร์เนิดอื่น |
rsQuaternionNormalize | ปรับค่าควอเทอร์เนียนให้เป็นปกติ |
rsQuaternionSet | สร้างควอตเทอร์เนิด |
rsQuaternionSlerp | การประมาณค่าเชิงเส้นแบบทรงกลมระหว่างควอตเทอร์นิโอน 2 รายการ |
ฟังก์ชันการอัปเดตแบบอะตอม
หากต้องการอัปเดตค่าที่แชร์ระหว่างหลายชุดข้อความ ให้ใช้ฟังก์ชันด้านล่าง ซึ่งจะอัปเดตค่าแบบรวมกัน กล่าวคือ การอ่าน การอัปเดต และการเขียนหน่วยความจำจะทําตามลําดับที่ถูกต้อง
ฟังก์ชันเหล่านี้ทำงานช้ากว่าฟังก์ชันที่ไม่ใช่แบบอะตอม ดังนั้นให้ใช้เฉพาะเมื่อจำเป็นต้องมีการซิงค์
โปรดทราบว่าใน RenderScript โค้ดมีแนวโน้มที่จะทำงานในเธรดแยกต่างหาก แม้ว่าคุณจะไม่ได้สร้างเธรดดังกล่าวอย่างชัดเจนก็ตาม รันไทม์ RenderScript มักจะแยกการดําเนินการของเคิร์กัล 1 รายการออกเป็นหลายเธรด การอัปเดตตัวแปรส่วนกลางควรทําด้วยฟังก์ชันแบบอะตอม หากเป็นไปได้ ให้แก้ไขอัลกอริทึมเพื่อหลีกเลี่ยงการใช้คำเหล่านี้โดยสิ้นเชิง
ฟังก์ชัน | |
---|---|
rsAtomicAdd | การเพิ่มที่ปลอดภัยสำหรับชุดข้อความ |
rsAtomicAnd | การดำเนินการแบบบิตต่อบิตที่ปลอดภัยสำหรับเธรด |
rsAtomicCas | เปรียบเทียบและตั้งค่าแบบปลอดภัยสำหรับเธรด |
rsAtomicDec | การลดที่ปลอดภัยสำหรับเธรด |
rsAtomicInc | การเพิ่มที่ปลอดภัยสำหรับเธรด |
rsAtomicMax | สูงสุดที่ปลอดภัยสำหรับเธรด |
rsAtomicMin | ขั้นต่ำที่ปลอดภัยสำหรับเธรด |
rsAtomicOr | Bitwise OR ที่ปลอดภัยสำหรับเธรด |
rsAtomicSub | การลบที่ปลอดภัยสำหรับเธรด |
rsAtomicXor | การดำเนินการแบบไม่ซ้ำกันแบบบิตไวส์ที่ปลอดภัยสำหรับเธรด |
ฟังก์ชันและประเภทของเวลา
ฟังก์ชันด้านล่างนี้ใช้เพื่อบอกเวลาปัจจุบันของนาฬิกาและเวลาปัจจุบันของระบบได้ ไม่แนะนำให้เรียกใช้ฟังก์ชันเหล่านี้ภายในเคอร์เนล
ประเภท | |
---|---|
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*
- หากต้องการรับค่าผ่านเครื่องมือสุ่มตัวอย่าง ให้ใช้ 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), ใบหน้า (สำหรับภาพลูกบาศก์) และระดับรายละเอียด (สำหรับ MIP Mapping)
ดูรายละเอียดการสร้าง Allocation ได้ที่ android.renderscript.Allocation
องค์ประกอบ
คําว่า "องค์ประกอบ" ใช้อย่างคลุมเครือใน RenderScript เนื่องจากเป็นทั้งข้อมูลประเภทสําหรับเซลล์ของการจัดสรรและการสร้างอินสแตนซ์ของประเภทนั้น เช่น
- rs_element คือแฮนเดิลสำหรับข้อกำหนดประเภท และ
- ในฟังก์ชันอย่าง rsGetElementAt() "องค์ประกอบ" หมายถึงการสร้างอินสแตนซ์ของประเภท นั่นคือ เซลล์ของการจัดสรร
ฟังก์ชันด้านล่างช่วยให้คุณค้นหาลักษณะของข้อมูลจำเพาะของประเภทได้
องค์ประกอบสามารถระบุประเภทข้อมูลธรรมดาตามที่พบใน C เช่น จํานวนเต็ม ลอย หรือบูลีน และยังระบุแฮนเดิลไปยังออบเจ็กต์ RenderScript ได้ด้วย ดูรายการประเภทพื้นฐานได้ที่ rs_data_type
องค์ประกอบสามารถระบุเวกเตอร์ขนาดคงที่ (ขนาด 2, 3 หรือ 4) ของประเภทพื้นฐานได้ องค์ประกอบสามารถจัดกลุ่มเข้าด้วยกันเป็นองค์ประกอบที่ซับซ้อน ซึ่งจะสร้างการกําหนดโครงสร้าง C ที่เทียบเท่า
องค์ประกอบยังมีประเภทได้ด้วย ซึ่งเป็นข้อมูลเชิงความหมายที่ใช้ตีความข้อมูลพิกเซล โปรดดู rs_data_kind
เมื่อสร้างการแบ่งองค์ประกอบทั่วไป คุณก็ใช้องค์ประกอบที่กําหนดไว้ล่วงหน้าอย่าง F32_2 ได้
หากต้องการสร้างองค์ประกอบที่ซับซ้อน ให้ใช้คลาส Java Element.Builder
แซมเพลอร์
ออบเจ็กต์ Samplers จะกำหนดวิธีอ่าน Allocation เป็นโครงสร้างภายในเคอร์เนล ดูที่ android.renderscript.S
ฟังก์ชัน | |
---|---|
rsAllocationGetDimFaces | มีใบหน้ามากกว่า 1 ใบหน้า |
rsAllocationGetDimLOD | ระดับรายละเอียด |
rsAllocationGetDimX | ขนาดของมิติข้อมูล X |
rsAllocationGetDimY | ขนาดของมิติข้อมูล Y |
rsAllocationGetDimZ | ขนาดของมิติข้อมูล Z |
rsAllocationGetElement | รับออบเจ็กต์ที่อธิบายเซลล์ของการแบ่งสรร |
rsClearObject | ปล่อยวัตถุ |
rsElementGetBytesSize | ขนาดขององค์ประกอบ |
rsElementGetDataKind | ประเภทองค์ประกอบ |
rsElementGetDataType | ประเภทข้อมูลขององค์ประกอบ |
rsElementGetSubElement | องค์ประกอบย่อยขององค์ประกอบที่ซับซ้อน |
rsElementGetSubElementArraySize | ขนาดอาร์เรย์ขององค์ประกอบย่อยขององค์ประกอบที่ซับซ้อน |
rsElementGetSubElementCount | จํานวนองค์ประกอบย่อย |
rsElementGetSubElementName | ชื่อองค์ประกอบย่อย |
rsElementGetSubElementNameLength | ความยาวของชื่อองค์ประกอบย่อย |
rsElementGetSubElementOffsetBytes | ส่วนต่างขององค์ประกอบย่อยที่สร้างขึ้น |
rsElementGetVectorSize | ขนาดเวกเตอร์ขององค์ประกอบ |
rsIsObject | ตรวจสอบแฮนเดิลที่ว่างเปล่า |
rsSamplerGetAnisotropy | ความไม่สมมาตรของแซมเพลอร์ |
rsSamplerGetMagnification | ค่าการขยายของเครื่องมือวัด |
rsSamplerGetMinification | ค่าการลดขนาดของแซมเพลอร์ |
rsSamplerGetWrapS | ค่า S ของการตัดขอบ Sampler |
rsSamplerGetWrapT | ค่า T ของการตัดขอบ Sampler |
ฟังก์ชันและประเภทการเรียกใช้เคอร์เนล
คุณสามารถใช้ฟังก์ชัน 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 | มีใบหน้ามากกว่า 1 ใบหน้าสำหรับบริบทเคอร์เนลที่ระบุ |
rsGetDimLod | จำนวนระดับรายละเอียดสำหรับบริบทเคอร์เนลที่ระบุ |
rsGetDimX | ขนาดของมิติข้อมูล X สําหรับบริบทเคอร์เนลที่ระบุ |
rsGetDimY | ขนาดของมิติข้อมูล Y สําหรับบริบทเคอร์เนลที่ระบุ |
rsGetDimZ | ขนาดของมิติข้อมูล Z สําหรับบริบทเคอร์เนลที่ระบุ |
rsGetFace | พิกัดของใบหน้าสําหรับบริบทเคอร์เนลที่ระบุ |
rsGetLod | ดัชนีในมิติข้อมูลระดับรายละเอียดสําหรับบริบทเคอร์เนลที่ระบุ |
ฟังก์ชันอินพุต/เอาต์พุต
ฟังก์ชันเหล่านี้มีไว้เพื่อดำเนินการต่อไปนี้
- ส่งข้อมูลไปยังไคลเอ็นต์ Java และ
- ส่งการจัดสรรที่ประมวลผลแล้วหรือรับการจัดสรรถัดไปเพื่อประมวลผล
ฟังก์ชัน | |
---|---|
rsAllocationIoReceive | รับเนื้อหาใหม่จากคิว |
rsAllocationIoSend | ส่งเนื้อหาใหม่ไปยังคิว |
rsSendToClient | ส่งข้อความไปยังไคลเอ็นต์แบบไม่บล็อก |
rsSendToClientBlocking | ส่งข้อความถึงไคลเอ็นต์โดยบล็อก |
การแก้ไขข้อบกพร่องของฟังก์ชัน
ฟังก์ชันด้านล่างมีไว้เพื่อใช้ในระหว่างการพัฒนาแอปพลิเคชัน ไม่ควรใช้ในแอปพลิเคชันการจัดส่ง
ฟังก์ชัน | |
---|---|
rsDebug | บันทึกข้อความและค่า |
ฟังก์ชันและประเภทของกราฟิก
ระบบย่อยกราฟิกของ RenderScript ถูกนําออกใน API ระดับ 23