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 RenderScript và mẫ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.s12
và myVar.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ận3x3 và rs_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.
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.