Tài liệu tham khảo về API Thời gian chạy RenderScript

Tổng quan

RenderScript là một thời gian chạy có hiệu suất cao cung cấp các thao tác tính toán ở cấp độ gốc. Mã RenderScript được biên dịch trên thiết bị trong thời gian chạy để cho phép sự phụ thuộc vào nền tảng.

Tài liệu tham khảo này mô tả về API thời gian chạy RenderScript mà bạn có thể sử dụng để viết mã RenderScript trong C99. Các tệp tiêu đề điện toán RenderScript sẽ tự động được đưa vào cho bạn.

Để sử dụng RenderScript, bạn cần sử dụng API thời gian chạy RenderScript được nêu tại đây cũng như API khung Android cho RenderScript. Để xem tài liệu về API khung Android, hãy xem tài liệu tham khảo về gói android.renderscript.

Để biết thêm thông tin về cách phát triển bằng RenderScript cũng như cách các API khung thời gian chạy và Android tương tác, hãy xem hướng dẫn cho nhà phát triển RenderScriptmẫu RenderScript.

Loại số

Các đại lượng vô hướng:

RenderScript hỗ trợ các kiểu số vô hướng sau đây:

8 bit 16 bit 32 bit 64 bit
Số nguyên: ký tự, int8_t ngắn, int16_t int32_t dài, dài, int64_t
Số nguyên chưa ký: uchar, uint8_t ushort, uint16_t uint, uint32_t ulong, uint64_t
Dấu phẩy động: hiệp số thực dấu phẩy động gấp đôi

Vectơ:

RenderScript hỗ trợ các vectơ kích thước cố định có độ dài 2, 3 và 4. Vectơ được khai báo bằng tên kiểu phổ biến, theo sau là 2, 3 hoặc 4. Ví dụ: float4, int3, double2, ulong4.

Để tạo giá trị cố định vectơ, hãy sử dụng loại vectơ theo sau là các giá trị nằm giữa các dấu ngoặc nhọn, ví dụ: (float3){1.0f, 2.0f, 3.0f}.

Có thể truy cập các mục vào của vectơ bằng cách sử dụng các kiểu đặt tên khác nhau.

Bạn có thể truy cập vào các mục nhập đơn lẻ bằng cách theo sau tên biến có dấu chấm và:

  • Các chữ cái x, y, z và w,
  • Chữ cái r, g, b, a,
  • Chữ cái s hoặc S, theo sau là chỉ số dựa trên 0.

Ví dụ: với int4 myVar;, các giá trị sau đây tương đương:
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

Bạn có thể truy cập nhiều mục của một vectơ cùng một lúc bằng cách sử dụng giá trị nhận dạng là chuỗi nối của nhiều chữ cái hoặc chỉ mục. Vectơ thu được có kích thước bằng với số mục nhập được đặt tên.

Với ví dụ trên, bạn có thể truy cập hai mục ở giữa bằng myVar.yz, myVar.gb, myVar.s12myVar.S12.

Các mục không nhất thiết phải liền nhau hoặc theo thứ tự tăng dần. Các mục nhập thậm chí có thể lặp lại, miễn là chúng ta không cố gắng gán cho nó. Bạn cũng không thể kết hợp các kiểu đặt tên.

Sau đây là ví dụ về những việc có thể hoặc không thể làm:
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

Ma trận và quaternion:

RenderScript hỗ trợ các ma trận vuông có kích thước cố định của các số thực có kích thước 2x2, 3x3 và 4x4. Các loại này được đặt tên là rs_ma trận2x2, rs_ma trận3x3rs_ma trận4x4. Hãy xem Hàm ma trận để biết danh sách các phép toán.

Quaternion cũng được hỗ trợ thông qua rs_quaternion. Hãy xem Hàm định kỳ để biết danh sách các phép toán.

Loại
ký tự2 Hai số nguyên 8 bit có dấu
ký tự 3 Ba số nguyên 8 bit có dấu
ký tự 4 Bốn số nguyên 8 bit có dấu
double2 Hai số thực 64 bit
đôi3 3 số thực 64 bit
đôi4 4 số thực 64 bit
float2 Hai số thực có độ chính xác đơn 32 bit
float3 3 số thực 32 bit
float4 4 số thực 32 bit
một nửa Giá trị dấu phẩy động 16 bit
half2 Hai số thực có độ chính xác đơn 16 bit
half3 3 số thực có độ chính xác đơn 16 bit
half4 4 số thực 16 bit
int16_t Số nguyên 16 bit đã ký
int2 Hai số nguyên 32 bit có dấu
int3 Ba số nguyên 32 bit có dấu
int32_t Số nguyên 32 bit đã ký
int4 Bốn số nguyên 32 bit có dấu
int64_t Số nguyên 64 bit đã ký
int8_t Số nguyên 8 bit đã ký
long2 Hai số nguyên 64 bit có dấu
long3 Ba số nguyên 64 bit có dấu
long4 Bốn số nguyên 64 bit có dấu
rs_ma trận2x2 Ma trận 2x2 của số thực 32 bit
rs_ma trận3x3 Ma trận 3x3 của số thực 32 bit
rs_ma trận4x4 Ma trận 4x4 của số thực 32 bit
rs_quaternion Quaternion
short2 Hai số nguyên 16 bit có dấu
short3 Ba số nguyên 16 bit có dấu
short4 Bốn số nguyên 16 bit có dấu
size_t Loại kích thước chưa ký
ssize_t (kích thước t) Loại kích thước đã ký
uchar Số nguyên 8 bit chưa ký
uchar2 Hai số nguyên 8 bit không dấu
uchar3 Ba số nguyên 8 bit không dấu
uchar4 Bốn số nguyên 8 bit không dấu
uint Số nguyên 32 bit chưa ký
uint16_t Số nguyên 16 bit chưa ký
uint2 Hai số nguyên 32 bit không dấu
uint3 Ba số nguyên 32 bit không dấu
uint32_t Số nguyên 32 bit chưa ký
uint4 Bốn số nguyên 32 bit không dấu
uint64_t Số nguyên 64 bit chưa ký
uint8_t Số nguyên 8 bit chưa ký
ulong Số nguyên 64 bit chưa ký
ulong2 Hai số nguyên 64 bit không dấu
ulong3 Ba số nguyên 64 bit không dấu
ulong4 Bốn số nguyên 64 bit không dấu
ngắn gọn Số nguyên 16 bit chưa ký
ushort2 Hai số nguyên 16 bit không dấu
ushort3 Ba số nguyên 16 bit không dấu
ushort4 Bốn số nguyên 16 bit không dấu

Các loại đối tượng

Các loại dưới đây được dùng để thao tác với các đối tượng RenderScript như cơ cấu phân bổ, trình lấy mẫu, phần tử và tập lệnh. Hầu hết các đối tượng này được tạo bằng API RenderScript Java.

Loại
rs_allocation Xử lý hoạt động phân bổ
rs_allocation_bamap_face Enum để chọn các mặt trên bản đồ hình khối
rs_allocation_usage_type Trường bit để chỉ định cách sử dụng mô hình phân bổ
rs_data_kind Loại dữ liệu phần tử
rs_data_type Loại dữ liệu cơ bản của phần tử
rs_element Xử lý một phần tử
trình lấy mẫu Xử lý Trình lấy mẫu
rs_sampler_value Giá trị T gói bộ lấy mẫu
rs_script Xử lý tập lệnh
rs_type Xử lý cho một loại
rs_yuv_format Định dạng YUV

Hàm chuyển đổi

Các hàm dưới đây chuyển đổi từ kiểu vectơ số sang một kiểu vectơ khác hoặc từ cách biểu diễn màu này sang kiểu biểu diễn màu khác.

Hàm
chuyển đổi Chuyển đổi vectơ số
rsPackColorTo8888 Tạo một uchar4 RGBA từ các số thực có độ chính xác đơn
rsUnpackColor8888 Tạo float4 RGBA từ uchar4
Hàm rsYuvToRGBA Chuyển đổi giá trị YUV sang RGBA

Hằng số và hàm toán học

Bạn có thể áp dụng các hàm toán học dưới đây cho đại lượng vô hướng và vectơ. Khi áp dụng cho vectơ, giá trị trả về là một vectơ của hàm được áp dụng cho mỗi mục của đầu vào.

Ví dụ:
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);

Xem Hàm toán học vectơ để tìm hiểu các hàm như distance() và length() mà diễn giải dữ liệu đầu vào dưới dạng một vectơ đơn trong không gian n chiều.

Độ chính xác của các phép toán trên số thực 32 bit chịu ảnh hưởng của các pragmas rs_FP_relaxed và rs_FP_full. Trong rs_FP_relaxed, các giá trị phụ bình thường có thể được đẩy về 0 và có thể làm tròn về 0. Để so sánh, rs_FP_full yêu cầu xử lý chính xác các giá trị bất thường, tức là nhỏ hơn 1,17549435e-38f. rs_FP_rull cũng yêu cầu làm tròn đến gần nhất với các mối liên kết với hàm chẵn.

Bạn có thể đạt được nhiều sự đánh đổi về độ chính xác/tốc độ bằng cách sử dụng các biến thể của các hàm toán học phổ biến. Các hàm có tên bắt đầu bằng

  • native_: Có thể có các phương pháp triển khai phần cứng tuỳ chỉnh với độ chính xác thấp hơn. Ngoài ra, các giá trị bất thường có thể được đẩy về 0, làm tròn về 0, đồng thời NaN và phương thức nhập vô cực có thể không được xử lý chính xác.
  • nửa_: Có thể thực hiện các phép tính nội bộ bằng số thực 16 bit. Ngoài ra, các giá trị bất thường có thể được đẩy về 0 và có thể được làm tròn về 0.

Hằng số
M_1_PI 1 / pi, dưới dạng số thực 32 bit
M_2_PI 2 / pi, dưới dạng số thực 32 bit
M_2_SQRTPI 2 / sqrt(pi), dưới dạng số thực 32 bit
M_E e, dưới dạng số thực 32 bit
M_LN10 log_e(10), dưới dạng số thực 32 bit
M_LN2 log_e(2), dưới dạng số thực 32 bit
M_LOG10E log_10(e), dưới dạng số thực 32 bit
M_LOG2E log_2(e), dưới dạng số thực 32 bit
M_PI pi, dưới dạng số thực 32 bit
M_PI_2 pi / 2, dưới dạng số thực 32 bit
M_PI_4 pi / 4, dưới dạng số thực 32 bit
M_SQRT1_2 1 / sqrt(2), dưới dạng số thực 32 bit
M_SQRT2 sqrt(2), dưới dạng số thực 32 bit
Hàm
ABS Giá trị tuyệt đối của một số nguyên
acos Cosin nghịch đảo
Cosin hypebol nghịch đảo
Acospi Cosin nghịch đảo chia cho pi
asin Sin nghịch đảo
asinh Sin hypebol nghịch đảo
asinpi Sin nghịch đảo chia cho pi
atan Tang nghịch đảo
atan2 Tang nghịch đảo của tỷ số
atan2pi Tang nghịch đảo của một tỷ số, chia cho pi
atanh Tang hyperbol nghịch đảo
atanpi Tang nghịch đảo chia cho pi
cbrt Căn bậc ba
ceil Số nguyên nhỏ nhất không nhỏ hơn một giá trị
bộ kẹp Giới hạn một giá trị trong một phạm vi
CLz Số lượng bit 0 ở đầu
copysign Sao chép dấu của một số sang số khác
cos Cosin
cosh Cosin hypebol
cospi Cosin của một số nhân với pi
độ Chuyển đổi radian thành độ
erf Hàm lỗi toán học
erfc Hàm sai số bổ trợ trong toán học
exp e đã nâng lên thành một số
exp10 số 10 được nâng lên thành một số
biểu thức 2 Đã nâng 2 thành số
expm1 e được nâng lên thành số trừ đi 1
đồ đen Giá trị tuyệt đối của số thực
fdim Chênh lệch dương giữa hai giá trị
sàn Số nguyên nhỏ nhất không lớn hơn giá trị
fma Nhân và cộng
Tối đa hoá hiệu suất Tối đa hai số thực
fmin Tối thiểu hai số thực
fmod Mô-đun
phân số Phần thập phân dương
frexp Mantissa nhị phân và số mũ
nửa_recip Độ chính xác nghịch đảo đến 16 bit
half_rsqrt nghịch đảo của căn bậc hai được tính toán với độ chính xác 16 bit
half_sqrt Căn bậc hai được tính toán có độ chính xác là 16 bit
khí ngược Hoa cúc
ilogb Số mũ cơ số hai
ldexp Tạo một dấu phẩy động từ mantissa và số mũ
lgamma Lôgarit tự nhiên của hàm gamma
nhật ký Lôgarit tự nhiên
log10 Lôgarit cơ số 10
log1p Lôgarit tự nhiên của một giá trị cộng 1
nhật ký 2 Lôgarit cơ số 2
logb Số mũ cơ số hai
đen Nhân và cộng
tối đa Tối đa
phút Tối thiểu
danh sách kết hợp Kết hợp hai giá trị
modf Thành phần tích phân và phân số
nan Không phải là số
nan_half Không phải là số
native_acos Cosin nghịch đảo gần đúng
native_acosh Cosin hypebol nghịch đảo gần đúng
native_acospi Cosin nghịch đảo gần đúng chia cho pi
native_asin Sin nghịch đảo gần đúng
native_asinh Sin hypebol nghịch đảo gần đúng
native_asinpi Sin nghịch đảo gần đúng chia cho pi
native_atan Tang nghịch đảo gần đúng
native_atan2 Tang nghịch đảo gần đúng của tỷ số
native_atan2pi Tang nghịch đảo gần đúng của một tỷ số, chia cho pi
native_atanh Tang hyperbol nghịch đảo gần đúng
native_atanpi Tang nghịch đảo gần đúng chia cho pi
native_cbrt Căn bậc ba gần đúng
native_cos Cosin gần đúng
native_cosh Cosin hypebol gần đúng
native_cospi Cosin gần đúng của một số nhân với pi
native_divide Phép chia gần đúng
native_exp Số e gần đúng được nâng lên một số
native_exp10 Khoảng 10 được nâng thành một số
native_exp2 Khoảng 2 được nâng thành một số
native_expm1 Số e gần đúng được nâng lên một số trừ đi một
native_hypot Cạnh huyền gần đúng
native_log Lôgarit tự nhiên gần đúng
native_log10 Lôgarit cơ số 10 gần đúng
native_log1p Lôgarit tự nhiên gần đúng của một giá trị cộng 1
native_log2 Lôgarit cơ số 2 gần đúng
native_powr Cơ số dương gần đúng được nâng lên số mũ
native_recip Tỷ lệ nghịch đảo gần đúng
native_root Căn bậc n gần đúng
native_rsqrt nghịch đảo gần đúng của một căn bậc hai
native_sin Sin gần đúng
native_sincos Sin và cos gần đúng
native_sinh Sin hypebol gần đúng
native_sinpi Sin gần đúng của một số nhân với pi
native_sqrt Căn bậc hai gần đúng
gốc_tan Tang gần đúng
native_tanh Tang hyperbol gần đúng
native_tanpi Tang gần đúng của một số nhân với pi
tiếp theo Số có dấu phẩy động tiếp theo
pow Cơ số được nâng lên số mũ
màu máo Cơ số được nâng lên một số mũ nguyên
powr Cơ số dương được nâng lên một số mũ
gốc Chuyển đổi độ thành radian
số dư Phần còn lại của phép chia
remquo Số dư và thương của phép chia
công nghệ mã hoá Làm tròn đến chẵn
gốc Căn bậc n
vòng tròn Làm tròn từ 0
rsRand Số giả ngẫu nhiên
rsqrt nghịch đảo của một căn bậc hai
dấu hiệu Ký hiệu của một giá trị
tội lỗi Sin
sincos Sin và cos
sinh Sin Hyperbbol
sinpi Sin của một số nhân với pi
sqrt Dấu khai căn
bước 0 nếu nhỏ hơn giá trị, nếu không là 0
màu nâu vàng nhạt Tang
tanh Tang Hyperbol
tanpi Tiếp tuyến của một số nhân với pi
Tgamma Hàm Gamma
trunc Cắt bớt một dấu phẩy động

Hàm toán vectơ

Các hàm này diễn giải các đối số đầu vào là đại diện của vectơ trong không gian n chiều.

Độ chính xác của các phép toán trên số thực 32 bit chịu ảnh hưởng của các pragmas rs_FP_relaxed và rs_FP_full. Xem Hằng số và hàm toán học để biết chi tiết.

Bạn có thể đạt được nhiều sự đánh đổi về độ chính xác/tốc độ bằng cách sử dụng các biến thể của các hàm toán học phổ biến. Các hàm có tên bắt đầu bằng

  • native_: Có thể có các phương pháp triển khai phần cứng tuỳ chỉnh với độ chính xác thấp hơn. Ngoài ra, các giá trị bất thường có thể được đẩy về 0, làm tròn về 0, đồng thời NaN và phương thức nhập vô cực có thể không được xử lý chính xác.
  • nhanh_: Có thể thực hiện các phép tính nội bộ bằng số thực 16 bit. Ngoài ra, các giá trị bất thường có thể được đẩy về 0 và có thể được làm tròn về 0.

Hàm
giao diện người dùng Tích chéo của hai vectơ
distance (khoảng cách) Khoảng cách giữa hai điểm
dấu chấm Tích chấm của hai vectơ
fast_distance Khoảng cách gần đúng giữa hai điểm
fast_length Độ dài gần đúng của vectơ
fast_normalize Vectơ chuẩn hoá gần đúng
length Độ dài của vectơ
native_distance Khoảng cách gần đúng giữa hai điểm
native_length Độ dài gần đúng của vectơ
native_normalize Chuẩn hoá gần đúng một vectơ
chuẩn hoá Chuẩn hoá vectơ

Các hàm ma trận

Các hàm này cho phép bạn thao tác với các ma trận vuông bậc 2x2, 3x3 và 4x4. Các hàm này đặc biệt hữu ích cho các phép biến đổi đồ hoạ và tương thích với OpenGL.

Chúng tôi sử dụng chỉ mục dựa trên 0 cho các hàng và cột. Ví dụ: phần tử cuối cùng của rs_ma trận4x4 được tìm thấy tại (3, 3).

RenderScript sử dụng ma trận chính cột và vectơ dựa trên cột. Việc biến đổi một vectơ được thực hiện bằng cách nhân sau vectơ, ví dụ: (matrix * vector), như được rsMatrixPeople() cung cấp.

Để tạo một ma trận biến đổi thực hiện 2 phép biến đổi cùng một lúc, hãy nhân 2 ma trận nguồn với phép biến đổi đầu tiên làm đối số đúng. Ví dụ: để tạo một ma trận biến đổi áp dụng phép biến đổi s1 rồi đến s2, hãy gọi rsMatrixLoadMultiply(&combined, &s2, &s1). Giá trị này bắt nguồn từ s2 * (s1 * v), là (s2 * s1) * v.

Chúng tôi có hai kiểu hàm để tạo ma trận biến đổi: rsMatrixLoadTransformation và rsMatrixTransformation. Kiểu cũ chỉ lưu trữ ma trận biến đổi trong đối số đầu tiên. Phần sau sửa đổi ma trận biến đổi có sẵn để phép biến đổi mới xảy ra trước. Ví dụ: nếu bạn gọi rsMatrixTranslate() trên một ma trận đã thực hiện chuyển tỷ lệ, thì ma trận thu được khi được áp dụng cho vectơ trước tiên sẽ thực hiện việc dịch, sau đó chuyển tỷ lệ.

Hàm
rsExtractFrustumPlanes Tính mặt phẳng hình phẳng
rsIsSphereInFrustum Kiểm tra xem một hình cầu có nằm trong các mặt phẳng hình cầu hay không
rsMatrixGet Nhận một phần tử
rsMatrixInverse Nghịch đảo ma trận tại chỗ
rsMatrixInverseTranspose Đảo ngược và hoán vị ma trận tại chỗ
rsMatrixLoad Tải hoặc sao chép ma trận
rsMatrixLoadFrustum Tải ma trận chiếu hình đáy
rsMatrixLoadIdentity Tải ma trận nhận dạng
rsMatrixLoad nhân Nhân 2 ma trận
rsMatrixLoadOrtho Tải ma trận chiếu chỉnh hình
rsMatrixLoadPerspective Tải ma trận chiếu phối cảnh
rsMatrixLoadLoad Tải ma trận xoay
rsMatrixLoadScale Tải ma trận tỷ lệ
rsMatrixLoadCompile Tải ma trận dịch
rsMatrixtrix Nhân ma trận với một vectơ hoặc một ma trận khác
rsMatrixRotate Áp dụng phép xoay cho ma trận biến đổi
rsMatrixScale Áp dụng tỷ lệ cho ma trận biến đổi
rsMatrixSet Thiết lập một phần tử
rsMatrixTranslate Áp dụng bản dịch cho ma trận biến đổi
rsMatrixTranspose Hoán vị một địa điểm ma trận

Các hàm quaternion

Các hàm sau đây thao tác với các quaternion.

Hàm
rsQuaternionAdd Cộng hai quaternion
Liên hợp rsQuaternion Liên hợp một quaternion
rsQuaternionDot Tích chấm của hai quaternion
rsQuaternionGetMatrixUnit Nhận ma trận xoay từ một quaternion
rsQuaternionLoadLoad Tạo một bộ bốn xoay
rsQuaternionLoad rotationUnit Quaternion biểu thị phép xoay quanh một vectơ đơn vị tuỳ ý
rsQuaternionPeople Nhân một quaternion với một đại lượng vô hướng hoặc một quaternion khác
rsQuaternionChuẩn hoá Chuẩn hoá một quaternion
rsQuaternionSet Tạo quaternion
rsQuaternionSlerp Loại nội suy tuyến tính hình cầu giữa hai quaternion

Hàm cập nhật nguyên tử

Để cập nhật các giá trị được chia sẻ giữa nhiều luồng, hãy sử dụng các hàm dưới đây. Chúng đảm bảo rằng các giá trị được cập nhật nguyên tử, tức là việc đọc bộ nhớ, cập nhật và ghi bộ nhớ được thực hiện theo đúng thứ tự.

Các hàm này chậm hơn các hàm tương đương không phải nguyên tử, vì vậy, chỉ sử dụng các hàm này khi cần đồng bộ hoá.

Xin lưu ý rằng trong RenderScript, mã của bạn có thể sẽ chạy trong các luồng riêng biệt mặc dù bạn không tạo các luồng đó một cách rõ ràng. Thời gian chạy RenderScript rất thường xuyên chia tách quá trình thực thi của một hạt nhân trên nhiều luồng. Bạn nên cập nhật tập lệnh toàn cục bằng các hàm nguyên tử. Nếu có thể, hãy sửa đổi thuật toán của bạn để tránh hoàn toàn chúng.

Hàm
rsAtomicAdd Thêm an toàn cho luồng
rs Nguyên tử và Bitwise an toàn cho luồng và
rsAtomicCas So sánh và thiết lập an toàn cho luồng
rsAtomicdec Giảm mức an toàn cho luồng
rsAtomicInc Tăng an toàn cho luồng
rsAtomicMax Tối đa an toàn cho luồng
rsAtomicMin Mức tối thiểu cho luồng an toàn
rsAtomicOr Bitwise an toàn cho luồng hoặc
rsAtomicSub Phép trừ an toàn cho luồng
rsAtomicXor Loại bitwise an toàn cho luồng hoặc

Các loại và hàm thời gian

Bạn có thể dùng các hàm bên dưới để cho biết thời gian của đồng hồ hiện tại và thời gian hoạt động của hệ thống hiện tại. Bạn không nên gọi các hàm này bên trong một hạt nhân.

Loại
rs_time_t Giây kể từ ngày 1 tháng 1 năm 1970
rs_tm Cấu trúc ngày và giờ
Hàm
rsGetDt Thời gian đã trôi qua kể từ cuộc gọi gần đây nhất
rsLocaltime Chuyển đổi sang giờ địa phương
rsTime Giây kể từ ngày 1 tháng 1 năm 1970
rsUptimeMillis Thời gian hoạt động của hệ thống tính bằng mili giây
rsUptimeNanos Thời gian hoạt động của hệ thống tính bằng nano giây

Hàm tạo phân bổ

Bạn có thể dùng các hàm bên dưới để tạo Allocations từ một Tập lệnh.

Các hàm này có thể được gọi trực tiếp hoặc gián tiếp từ một hàm không gọi được. Nếu một số đường dẫn luồng điều khiển có thể dẫn đến lệnh gọi đến các hàm này từ hàm hạt nhân RenderScript, thì lỗi trình biên dịch sẽ được tạo.

Hàm
rsCreateAllocation Tạo một đối tượng rs_allocation thuộc Loại đã cho.
rsCreateElement Tạo một đối tượng rs_element thuộc loại dữ liệu được chỉ định
rsCreatePixelElement Tạo một đối tượng rs_element thuộc loại dữ liệu và loại dữ liệu được chỉ định
rsCreateType Tạo một đối tượng rs_type có các thuộc tính hình dạng và phần tử được chỉ định
rsCreateVectorElement Tạo một đối tượng rs_element có kiểu dữ liệu và chiều rộng vectơ được chỉ định

Các hàm truy cập dữ liệu phân bổ

Bạn có thể sử dụng các hàm dưới đây để lấy và đặt các ô bao gồm hoạt động phân bổ.

  • Bạn có thể truy cập vào các ô riêng lẻ bằng các hàm rsGetElementAt* và rsSetElementAt.
  • Bạn có thể sao chép nhiều ô bằng các hàm rsAllocationCopy* và rsAllocationV*.
  • Để nhận các giá trị thông qua trình lấy mẫu, hãy sử dụng rsSample.
Các hàm rsGetElementAt và rsSetElement* có phần bị sai tên. Các lớp này không nhận hoặc đặt các phần tử (gần giống với các loại dữ liệu) mà nhận hoặc đặt các ô. Hãy coi các mã đó là rsGetCellAt và rsSetCellAt.

Hàm
rsAllocationCopy1DRange Sao chép các ô liên tiếp giữa các lần phân bổ
rsAllocationCopy2DRange Sao chép một vùng ô hình chữ nhật giữa các lần phân bổ
rsAllocationVLoadX Lấy vectơ từ phép phân bổ các đại lượng vô hướng
rsAllocationVStoreX Lưu trữ vectơ vào phương thức phân bổ các đại lượng vô hướng
rsGetElementAt Trả về một ô từ một lượt phân bổ
rsGetElementAtYuv_uchar_U Lấy thành phần U của lượt phân bổ YUV
rsGetElementAtYuv_uchar_V Lấy thành phần V của lượt phân bổ YUV
rsGetElementAtYuv_uchar_Y Lấy thành phần Y của lượt phân bổ YUV
rsSample Lấy mẫu một giá trị từ hoạt động phân bổ kết cấu
rsSetElementAt Đặt một ô của một mức phân bổ

Các hàm đặc điểm đối tượng

Bạn có thể dùng các hàm dưới đây để truy vấn các đặc điểm của đối tượng Phân bổ, Phần tử hoặc Trình lấy mẫu. Các đối tượng này được tạo qua Java. Bạn không thể tạo chúng từ một tập lệnh.

Lớp truyền dữ liệu giữa các nhân:

Allocations là phương thức chính dùng để truyền dữ liệu đến và đi qua hạt nhân RenderScript.

Đó là một tập hợp các ô có cấu trúc mà có thể dùng để lưu trữ bitmap, hoạ tiết, điểm dữ liệu tuỳ ý, v.v.

Tập hợp các ô này có thể có nhiều chiều (X, Y, Z, Array0, Array1, Array2, Array3), các mặt (đối với bản đồ lập phương) và cấp độ chi tiết (đối với mipmapping).

Xem android.renderscript.Allocation để biết thông tin chi tiết về cách tạo Allocations.

Phần tử:

Thuật ngữ "phần tử" được sử dụng một cách không rõ ràng trong RenderScript, vì cả hai loại thông tin cho các ô của Allocations và việc tạo thực thể của kiểu đó. Ví dụ:

  • rs_element là đối tượng xử lý cho thông số kỹ thuật loại và
  • Trong các hàm như rsGetElementAt(), "element" có nghĩa là tạo thực thể của loại, tức là một ô của Allocations.

Các hàm dưới đây cho phép bạn truy vấn các đặc điểm của thông số kỹ thuật kiểu.

Một phần tử có thể chỉ định một kiểu dữ liệu đơn giản có trong C, ví dụ: số nguyên, số thực có độ chính xác đơn hoặc boolean. Hàm này cũng có thể chỉ định một đối tượng xử lý cho đối tượng RenderScript. Hãy xem rs_data_type để biết danh sách các loại cơ bản.

Các phần tử có thể chỉ định các phiên bản vectơ kích thước cố định (có kích thước 2, 3 hoặc 4) của các kiểu cơ bản. Các phần tử có thể được nhóm lại với nhau thành các Phần tử phức tạp, tạo ra phần tử tương đương với định nghĩa cấu trúc C.

Các phần tử cũng có thể có một loại, đó là thông tin ngữ nghĩa dùng để diễn giải dữ liệu pixel. Xem rs_data_ kind.

Khi tạo Allocations của các phần tử phổ biến, bạn chỉ cần sử dụng một trong nhiều Phần tử được xác định trước, chẳng hạn như F32_2.

Để tạo các Phần tử phức tạp, hãy sử dụng lớp Java Element.Builder.

Trình lấy mẫu:

Đối tượng Samplers xác định cách Allocations có thể được đọc dưới dạng cấu trúc trong hạt nhân. Xem android.Renderscript.S.

Hàm
rsAllocationGetDimFaces Nhiều khuôn mặt xuất hiện
rsAllocationGetDimLOD Sự hiện diện của các cấp độ chi tiết
rsAllocationGetDimX Kích thước của phương diện X
rsAllocationGetDimY Kích thước của phương diện Y
rsAllocationGetDimZ Kích thước của phương diện Z
rsAllocationGetElement Lấy đối tượng mô tả ô của Allocations
rsClearObject Thả một đối tượng
rsElementGetBytesSize Kích thước của một phần tử
rsElementGetDataKind Loại phần tử
rsElementGetDataType Loại dữ liệu của một phần tử
rsElementGetSubElement Phần tử con của một phần tử phức
rsElementGetSubElementArraySize Kích thước mảng của một phần tử con trong một phần tử phức
rsElementGetSubElementCount Số lượng phần tử phụ
rsElementGetSubElementName Tên phần tử phụ
rsElementGetSubElementNameLength (Bộ tiêu chí xác định độ dài) Độ dài của tên phần tử phụ
rsElementGetSubElementOffsetBytes Mức chênh lệch của phần tử phụ được tạo bản sao
rsElementGetVectorSize Kích thước vectơ của Phần tử
rsIsObject Kiểm tra xem có tên người dùng trống không
rsSamplerGetAnisotropy Tính không đẳng hướng của Trình lấy mẫu
rsSamplerGetMagnification Giá trị phóng to của bộ lấy mẫu
rsSamplerGetMinification Giá trị giảm kích thước của bộ lấy mẫu
rsSamplerGetWrapS Giá trị S gói bộ lấy mẫu
rsSamplerGetWrapT Giá trị T gói bộ lấy mẫu

Các loại và hàm gọi kernel

Bạn có thể dùng hàm rsForEach() để gọi hạt nhân gốc của một tập lệnh.

Các hàm khác dùng để lấy đặc điểm của lệnh gọi một hạt nhân thực thi, chẳng hạn như kích thước và chỉ mục hiện tại. Các hàm này lấy rs_kernel_context làm đối số.

Loại
rs_for_each_strategy_t Thứ tự xử lý ô được đề xuất
rs_kernel Xử lý một hàm hạt nhân
rs_kernel_context Xử lý ngữ cảnh gọi nhân hệ điều hành
rs_script_call_t Thông tin lặp lại của ô
Hàm
rsForEach Khởi chạy một hạt nhân
rsForEachInternal (API nội bộ) Khởi chạy một hạt nhân trong Tập lệnh hiện tại (với số vùng)
rsForEachWithOptions Khởi chạy hạt nhân với các tuỳ chọn
rsGetArray0 Chỉ mục trong phương diện Array0 cho ngữ cảnh hạt nhân được chỉ định
rsGetArray1 Chỉ mục trong phương diện Array1 cho ngữ cảnh hạt nhân được chỉ định
rsGetArray2 Chỉ mục trong phương diện Array2 cho ngữ cảnh hạt nhân được chỉ định
rsGetArray3 Chỉ mục trong phương diện Array3 cho ngữ cảnh hạt nhân được chỉ định
rsGetDimArray0 Kích thước của phương diện Array0 cho ngữ cảnh hạt nhân được chỉ định
rsGetDimArray1 Kích thước của phương diện Array1 cho ngữ cảnh hạt nhân được chỉ định
rsGetDimArray2 Kích thước của phương diện Array2 cho ngữ cảnh hạt nhân được chỉ định
rsGetDimArray3 Kích thước của phương diện Array3 trong ngữ cảnh hạt nhân được chỉ định
rsGetDimHasFaces Sự hiện diện của nhiều khuôn mặt trong ngữ cảnh kernel đã chỉ định
rsGetDimLod Số lượng mức chi tiết cho ngữ cảnh hạt nhân được chỉ định
rsGetDimX Kích thước của phương diện X trong ngữ cảnh hạt nhân được chỉ định
rsGetDimY Kích thước của phương diện Y trong ngữ cảnh hạt nhân được chỉ định
rsGetDimZ Kích thước của phương diện Z cho ngữ cảnh hạt nhân được chỉ định
rsGetFace Toạ độ của Khuôn mặt cho ngữ cảnh hạt nhân được chỉ định
rsGetLod Chỉ mục trong phương diện Cấp chi tiết cho ngữ cảnh hạt nhân được chỉ định

Hàm vào/ra

Các hàm này dùng để:

  • Gửi thông tin đến ứng dụng Java và
  • Gửi mức phân bổ đã được xử lý hoặc nhận mức phân bổ tiếp theo để xử lý.

Hàm
rsAllocationIoReceive Nhận nội dung mới từ danh sách chờ
rsAllocationIoSend Gửi nội dung mới vào hàng đợi
rsSendToClient Gửi tin nhắn đến máy khách, không chặn
rsSendToClientBlocking Gửi tin nhắn cho khách hàng, chặn

Hàm gỡ lỗi

Các hàm dưới đây được dùng trong quá trình phát triển ứng dụng. Không được dùng các thông tin này trong đơn đăng ký vận chuyển.

Hàm
rsDebug Ghi lại thông điệp và các giá trị

Các loại và hàm đồ hoạ

Hệ thống đồ hoạ con của RenderScript đã bị xoá ở API cấp 23.