ข้อมูลอ้างอิง API รันไทม์ของ RenderScript

ภาพรวม

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
ฟังก์ชัน rsGetElementAt และ rsSetElement* มีชื่อไม่ถูกต้อง ฟังก์ชันเหล่านี้ไม่ได้รับหรือตั้งค่าองค์ประกอบ ซึ่งคล้ายกับประเภทข้อมูล แต่รับหรือตั้งค่าเซลล์ โปรดทราบว่าฟังก์ชันเหล่านี้คือ rsGetCellAt และ rsSetCellAt

ฟังก์ชัน
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