RenderScript Runtime API Reference

نمای کلی

RenderScript یک زمان اجرا با کارایی بالا است که عملیات محاسباتی را در سطح بومی ارائه می کند. کد RenderScript در زمان اجرا روی دستگاه‌ها کامپایل می‌شود تا امکان استقلال از پلتفرم را نیز فراهم کند.

این مستندات مرجع API های زمان اجرا RenderScript را توصیف می کند که می توانید از آنها برای نوشتن کد RenderScript در C99 استفاده کنید. فایل های هدر محاسباتی RenderScript به طور خودکار برای شما گنجانده می شود.

برای استفاده از RenderScript، باید از APIهای زمان اجرا RenderScript که در اینجا مستند شده اند و همچنین APIهای چارچوب Android برای RenderScript استفاده کنید. برای مستندات مربوط به APIهای چارچوب Android، به مرجع بسته android.renderscript مراجعه کنید.

برای اطلاعات بیشتر در مورد نحوه توسعه با RenderScript و نحوه تعامل زمان اجرا و APIهای فریمورک Android، به راهنمای برنامه‌نویس RenderScript و نمونه‌های RenderScript مراجعه کنید.

انواع عددی

اسکالرها:

RenderScript از انواع عددی اسکالر زیر پشتیبانی می کند:

8 بیت 16 بیت 32 بیت 64 بیت
عدد صحیح: char، int8_t کوتاه، int16_t int32_t طولانی، طولانی طولانی، int64_t
عدد صحیح بدون علامت: uchar، uint8_t کوتاه، uint16_t uint، uint32_t ulong، uint64_t
نقطه شناور: نصف شناور دو برابر کردن

بردارها:

RenderScript از بردارهای با اندازه ثابت با طول 2، 3 و 4 پشتیبانی می کند. بردارها با استفاده از نام نوع معمولی و به دنبال آن 2، 3 یا 4 اعلام می شوند. به عنوان مثال float4 ، int3 ، double2 ، ulong4 .

برای ایجاد لفظ برداری، از نوع بردار و به دنبال آن مقادیر محصور شده بین مهاربندهای فرفری، به عنوان مثال (float3){1.0f, 2.0f, 3.0f} استفاده کنید.

ورودی های یک بردار را می توان با استفاده از سبک های نامگذاری مختلف مشاهده کرد.

با دنبال کردن نام متغیر با یک نقطه می توان به ورودی های منفرد دسترسی پیدا کرد:

  • حروف x، y، z و w،
  • حروف r، g، b و a،
  • حرف s یا S و به دنبال آن یک شاخص مبتنی بر صفر.

به عنوان مثال، با int4 myVar; موارد زیر معادل هستند:
myVar.x == myVar.r == myVar.s0 == myVar.S0
myVar.y == myVar.g == myVar.s1 == myVar.S1
myVar.z == myVar.b == myVar.s2 == myVar.S2
myVar.w == myVar.a == myVar.s3 == myVar.S3

با استفاده از شناسه ای که ترکیبی از حروف یا شاخص های متعدد است، می توان به چندین ورودی یک بردار به طور همزمان دسترسی داشت. اندازه بردار حاصل برابر با تعداد ورودی های نامگذاری شده است.

با مثال بالا، دو ورودی میانی را می توان با استفاده از myVar.yz ، myVar.gb ، myVar.s12 و myVar.S12 دسترسی داشت.

ورودی ها نباید به هم پیوسته یا به ترتیب افزایشی باشند. ورودی‌ها حتی می‌توانند تکرار شوند، تا زمانی که سعی نکنیم به آن اختصاص دهیم. شما همچنین نمی توانید سبک های نام گذاری را با هم ترکیب کنید.

در اینجا نمونه هایی از کارهایی که می توان یا نمی توان انجام داد آورده شده است:
float4 v4;
float3 v3;
float2 v2;
v2 = v4.xx; // Valid
v3 = v4.zxw; // Valid
v3 = v4.bba; // Valid
v3 = v4.s032; // Valid
v3.s120 = v4.S233; // Valid
v4.yz = v3.rg; // Valid
v4.yzx = v3.rg; // Invalid: mismatched sizes
v4.yzz = v3; // Invalid: z appears twice in an assignment
v3 = v3.xas0; // Invalid: can't mix xyzw with rgba nor s0...
v3 = v4.s034; // Invalid: the digit can only be 0, 1, 2, or 3

ماتریس ها و کواترنیون ها:

RenderScript از ماتریس های مربعی با اندازه ثابت شناورهایی با اندازه های 2x2، 3x3 و 4x4 پشتیبانی می کند. این نوع ها rs_matrix2x2 ، rs_matrix3x3 و rs_matrix4x4 نام دارند. برای لیست عملیات به توابع ماتریس مراجعه کنید.

کواترنیون ها نیز از طریق rs_quaternion پشتیبانی می شوند. برای لیست عملیات به توابع Quaterion مراجعه کنید.

انواع
char2 دو عدد صحیح امضا شده 8 بیتی
char3 سه عدد صحیح امضا شده 8 بیتی
char4 چهار عدد صحیح امضا شده 8 بیتی
double2 دو شناور 64 بیتی
double3 سه شناور 64 بیتی
دوبل4 چهار شناور 64 بیتی
شناور2 دو شناور 32 بیتی
float3 سه شناور 32 بیتی
شناور4 چهار شناور 32 بیتی
نصف مقدار ممیز شناور 16 بیتی
نیمه2 دو شناور 16 بیتی
نیمه 3 سه شناور 16 بیتی
نیمه 4 چهار شناور 16 بیتی
int16_t عدد صحیح امضا شده 16 بیتی
int2 دو عدد صحیح امضا شده 32 بیتی
int3 سه عدد صحیح امضا شده 32 بیتی
int32_t عدد صحیح امضا شده 32 بیتی
int4 چهار عدد صحیح امضا شده 32 بیتی
int64_t عدد صحیح امضا شده 64 بیتی
int8_t عدد صحیح امضا شده 8 بیتی
طولانی 2 دو عدد صحیح امضا شده 64 بیتی
طولانی3 سه عدد صحیح امضا شده 64 بیتی
طولانی4 چهار عدد صحیح امضا شده 64 بیتی
rs_matrix2x2 ماتریس 2x2 32 بیتی شناور است
rs_matrix3x3 ماتریس 3x3 32 بیتی شناور است
rs_matrix4x4 ماتریس 4x4 32 بیتی شناور است
rs_quaternion کواترنیون
کوتاه 2 دو عدد صحیح امضا شده 16 بیتی
کوتاه 3 سه عدد صحیح امضا شده 16 بیتی
کوتاه 4 چهار عدد صحیح امضا شده 16 بیتی
اندازه_t نوع اندازه بدون علامت
ssize_t نوع سایز امضا شده
uchar عدد صحیح بدون علامت 8 بیتی
uchar2 دو عدد صحیح بدون علامت 8 بیتی
uchar3 سه عدد صحیح بدون علامت 8 بیتی
uchar4 چهار عدد صحیح بدون علامت 8 بیتی
unint عدد صحیح بدون علامت 32 بیتی
uint16_t عدد صحیح بدون علامت 16 بیتی
uint2 دو عدد صحیح بدون علامت 32 بیتی
uint3 سه عدد صحیح بدون علامت 32 بیتی
uint32_t عدد صحیح بدون علامت 32 بیتی
uint4 چهار عدد صحیح بدون علامت 32 بیتی
uint64_t عدد صحیح بدون علامت 64 بیتی
uint8_t عدد صحیح بدون علامت 8 بیتی
طولانی عدد صحیح بدون علامت 64 بیتی
ulong2 دو عدد صحیح بدون علامت 64 بیتی
ulong3 سه عدد صحیح بدون علامت 64 بیتی
ulong4 چهار عدد صحیح بدون علامت 64 بیتی
کوتاه عدد صحیح بدون علامت 16 بیتی
کوتاه 2 دو عدد صحیح بدون علامت 16 بیتی
کوتاه 3 سه عدد صحیح بدون علامت 16 بیتی
کوتاه 4 چهار عدد صحیح بدون علامت 16 بیتی

انواع شی

انواع زیر برای دستکاری اشیاء RenderScript مانند تخصیص ها، سمپلرها، عناصر و اسکریپت ها استفاده می شود. بیشتر این اشیاء با استفاده از API های Java RenderScript ایجاد می شوند.

انواع
rs_allocation رسیدگی به یک تخصیص
rs_allocation_cubemap_face Enum برای انتخاب چهره های نقشه مکعبی
rs_allocation_usage_type Bitfield برای تعیین نحوه استفاده از یک تخصیص
rs_data_kind نوع داده عنصر
rs_data_type نوع داده پایه عنصر
rs_element دسته به یک عنصر
rs_sampler دسته به یک نمونه
rs_sampler_value مقدار T بسته بندی نمونه
rs_script دسته به یک اسکریپت
rs_type دسته به یک نوع
rs_yuv_format فرمت YUV

توابع تبدیل

توابع زیر از یک نوع برداری عددی به نوع دیگر یا از یک نمایش رنگی به دیگری تبدیل می شوند.

توابع
تبدیل کنید بردارهای عددی را تبدیل کنید
rsPackColorTo8888 یک uchar4 RGBA از شناورها ایجاد کنید
rsUnpackColor8888 یک float4 RGBA از uchar4 ایجاد کنید
rsYuvToRGBA یک مقدار YUV را به RGBA تبدیل کنید

ثابت ها و توابع ریاضی

توابع ریاضی زیر را می توان برای اسکالرها و بردارها اعمال کرد. هنگامی که به بردارها اعمال می شود، مقدار بازگشتی بردار تابع اعمال شده برای هر ورودی ورودی است.

به عنوان مثال:
float3 a, b;
// The following call sets
// ax to sin(bx),
// ay to sin(by), and
// az to sin(bz).
a = sin(b);

توابع ریاضی برداری را برای توابعی مانند فاصله () و طول () ببینید که در عوض ورودی را به عنوان یک بردار در فضای n بعدی تفسیر می کنند.

دقت عملیات ریاضی روی شناورهای 32 بیتی تحت تأثیر عملگرهای rs_fp_relaxed و rs_fp_full قرار دارد. در rs_fp_relaxed، مقادیر غیرعادی ممکن است به صفر برسند و گرد کردن به سمت صفر انجام شود. در مقایسه، rs_fp_full نیاز به مدیریت صحیح مقادیر غیرعادی دارد، یعنی کوچکتر از 1.17549435e-38f. rs_fp_rull همچنین نیاز به دور به نزدیکترین با پیوندهایی به زوج دارد.

با استفاده از انواع توابع ریاضی رایج می توان به معاوضه های مختلف دقت/سرعت دست یافت. توابع با نام شروع شده با

  • native_: ممکن است پیاده سازی سخت افزاری سفارشی با دقت ضعیف تری داشته باشد. علاوه بر این، مقادیر غیرعادی ممکن است به صفر برسند، ممکن است از گرد کردن به سمت صفر استفاده شود، و NaN و ورودی بی نهایت ممکن است به درستی مدیریت نشوند.
  • half_: ممکن است محاسبات داخلی را با استفاده از شناورهای 16 بیتی انجام دهد. علاوه بر این، مقادیر غیرعادی ممکن است به صفر برسند، و ممکن است از گرد کردن به سمت صفر استفاده شود.

ثابت ها
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 بیتی
توابع
عضلات شکم مقدار مطلق یک عدد صحیح
acos کسینوس معکوس
آکوش کسینوس هذلولی معکوس
acospi کسینوس معکوس تقسیم بر پی
asin سینوس معکوس
asinh سینوس هذلولی معکوس
آسینپی سینوس معکوس تقسیم بر پی
آتان مماس معکوس
آتان 2 مماس معکوس یک نسبت
atan2pi مماس معکوس یک نسبت، تقسیم بر پی
atanh مماس هذلولی معکوس
آتانپی مماس معکوس تقسیم بر پی
cbrt ریشه مکعب
سقف کوچکترین عدد صحیح که کمتر از یک مقدار نباشد
گیره یک مقدار را به یک محدوده محدود کنید
clz تعداد 0 بیت های پیشرو
کپی علامت علامت یک عدد را به دیگری کپی می کند
cos کسینوس
cosh کسینوس هایپبولیک
cospi کسینوس یک عدد ضربدر پی
درجه رادیان ها را به درجه تبدیل می کند
erf تابع خطای ریاضی
erfc تابع خطای مکمل ریاضی
انقضا e به یک عدد افزایش یافت
exp10 10 به یک عدد افزایش یافته است
exp2 2 به یک عدد افزایش یافته است
expm1 e به عدد منهای یک افزایش یافته است
fabs ارزش مطلق یک شناور
fdim تفاوت مثبت بین دو مقدار
طبقه کوچکترین عدد صحیح که از یک مقدار بیشتر نباشد
fma ضرب و جمع کنید
fmax حداکثر دو شناور
fmin حداقل دو شناور
fmod ماژول
کسری قسمت کسری مثبت
frexp مانتیس و توان باینری
نیم_دستور متقابل با دقت 16 بیت محاسبه می شود
half_rsqrt متقابل یک ریشه مربع با دقت 16 بیت محاسبه شده است
half_sqrt ریشه مربع با دقت 16 بیت محاسبه شده است
هیپوت هیپوتانوز
ilogb توان پایه دو
ldexp یک نقطه شناور از مانتیس و نما ایجاد می کند
الگاما لگاریتم طبیعی تابع گاما
ورود به سیستم لگاریتم طبیعی
log10 لگاریتم پایه 10
log1p لگاریتم طبیعی یک مقدار به اضافه 1
log2 لگاریتم پایه 2
logb توان پایه دو
دیوانه ضرب و جمع کنید
حداکثر حداکثر
دقیقه حداقل
مخلوط کردن دو مقدار را مخلوط می کند
modf اجزای انتگرال و کسری
نان یک عدد نیست
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 کسینوس تقریبی یک عدد ضرب در پی
Native_divide تقسیم تقریبی
native_exp e تقریبی به یک عدد افزایش یافته است
native_exp10 تقریباً 10 به یک عدد افزایش یافته است
native_exp2 تقریباً 2 به یک عدد افزایش یافته است
native_expm1 e تقریبی به عدد منهای یک افزایش یافته است
native_hypot هیپوتانوز تقریبی
native_log لگاریتم طبیعی تقریبی
native_log10 لگاریتم پایه 10 تقریبی
native_log1p لگاریتم طبیعی تقریبی یک مقدار به اضافه 1
native_log2 لگاریتم پایه 2 تقریبی
native_powr پایه مثبت تقریبی به یک توان افزایش یافته است
بومی_دستورالعمل تقریبی متقابل
native_rootn ریشه n تقریبی
native_rsqrt تقریبی متقابل یک جذر
native_sin سینوس تقریبی
native_sincos سینوس و کسینوس تقریبی
native_sinh سینوس هیپربولیک تقریبی
native_sinpi سینوس تقریبی یک عدد ضربدر پی
native_sqrt جذر تقریبی
native_tan مماس تقریبی
native_tanh تانژانت هذلولی تقریبی
native_tanpi مماس تقریبی یک عدد ضرب در پی
بعدی شماره ممیز شناور بعدی
قدرت پایه به یک توان افزایش یافته است
پاون پایه به یک توان عدد صحیح افزایش یافته است
قدرت پایه مثبت به یک توان افزایش یافته است
رادیان درجه را به رادیان تبدیل می کند
باقی مانده باقی مانده از یک بخش
remquo باقیمانده و نصاب یک تقسیم
چاپ کردن گرد تا زوج
ریشه ریشه نهم
گرد دور از صفر گرد کنید
rsRand عدد شبه تصادفی
rsqrt متقابل یک جذر
علامت بزنید نشانه یک ارزش
گناه سینوسی
sincos سینوس و کسینوس
گناه سینوس هایپربولیک
سینپی سینوس یک عدد ضربدر پی
sqrt ریشه مربع
گام 0 اگر کمتر از یک مقدار باشد، 0 در غیر این صورت
برنزه مماس
tanh مماس هایپربولیک
تانپی مماس یک عدد ضربدر پی
tgamma تابع گاما
تنه یک نقطه شناور را کوتاه می کند

وکتور توابع ریاضی

این توابع آرگومان های ورودی را به عنوان نمایش بردارها در فضای n بعدی تفسیر می کنند.

دقت عملیات ریاضی روی شناورهای 32 بیتی تحت تأثیر عملگرهای rs_fp_relaxed و rs_fp_full قرار دارد. برای جزئیات بیشتر به ثابت ها و توابع ریاضی مراجعه کنید.

با استفاده از انواع توابع ریاضی رایج می توان به معاوضه های مختلف دقت/سرعت دست یافت. توابع با نام شروع شده با

  • native_: ممکن است پیاده سازی سخت افزاری سفارشی با دقت ضعیف تری داشته باشد. علاوه بر این، مقادیر غیرعادی ممکن است به صفر برسند، ممکن است از گرد کردن به سمت صفر استفاده شود، و NaN و ورودی بی نهایت ممکن است به درستی مدیریت نشوند.
  • fast_: ممکن است محاسبات داخلی را با استفاده از شناورهای 16 بیتی انجام دهد. علاوه بر این، مقادیر غیرعادی ممکن است به صفر برسند، و ممکن است از گرد کردن به سمت صفر استفاده شود.

توابع
متقاطع حاصل ضرب دو بردار
فاصله فاصله بین دو نقطه
نقطه حاصل ضرب نقطه ای دو بردار
سریع_فاصله فاصله تقریبی بین دو نقطه
fast_length طول تقریبی یک بردار
fast_normalize بردار نرمال شده تقریبی
طول طول یک بردار
بومی_فاصله فاصله تقریبی بین دو نقطه
طول_طول طول تقریبی یک بردار
native_normalize یک بردار را تقریباً نرمال کنید
عادی کردن یک بردار را عادی کنید

توابع ماتریسی

این توابع به شما امکان می دهند ماتریس های مربعی با رتبه های 2x2، 3x3 و 4x4 را دستکاری کنید. آنها به ویژه برای تبدیل های گرافیکی مفید هستند و با OpenGL سازگار هستند.

ما از یک شاخص مبتنی بر صفر برای سطرها و ستون ها استفاده می کنیم. به عنوان مثال آخرین عنصر یک rs_matrix4x4 در (3، 3) یافت می شود.

RenderScript از ماتریس های ستون اصلی و بردارهای مبتنی بر ستون استفاده می کند. تبدیل یک بردار با پس ضرب بردار انجام می شود، به عنوان مثال (matrix * vector) ، همانطور که توسط rsMatrixMultiply () ارائه شده است.

برای ایجاد یک ماتریس تبدیل که دو تبدیل را همزمان انجام می دهد، دو ماتریس منبع را ضرب کنید و اولین تبدیل به عنوان آرگومان مناسب است. به عنوان مثال برای ایجاد یک ماتریس تبدیل که تبدیل s1 و سپس s2 را اعمال می کند، rsMatrixLoadMultiply(&combined, &s2, &s1) را فراخوانی کنید. این از s2 * (s1 * v) گرفته شده است که (s2 * s1) * v است.

ما دو سبک تابع برای ایجاد ماتریس های تبدیل داریم: rsMatrixLoad Transformation و rsMatrix Transformation . سبک قبلی به سادگی ماتریس تبدیل را در آرگومان اول ذخیره می کند. دومی یک ماتریس تبدیل از قبل موجود را اصلاح می کند تا تبدیل جدید ابتدا اتفاق بیفتد. به عنوان مثال، اگر rsMatrixTranslate () را روی ماتریسی که قبلاً مقیاس‌بندی را انجام می‌دهد، فراخوانی کنید، ماتریس به‌دست‌آمده وقتی روی یک بردار اعمال می‌شود، ابتدا ترجمه را انجام می‌دهد و سپس مقیاس‌گذاری را انجام می‌دهد.

توابع
rsExtractFrustum Planes صفحات فروستوم را محاسبه کنید
rsIsSphereInFrustum بررسی می کند که آیا یک کره در صفحات فروستوم قرار دارد یا خیر
rsMatrixGet یک عنصر را دریافت کنید
rsMatrixInverse یک ماتریس را در جای خود معکوس می کند
rsMatrixInverseTranspose یک ماتریس را در جای خود معکوس و جابجا می کند
rsMatrixLoad یک ماتریس را بارگیری یا کپی کنید
rsMatrixLoadFrustum یک ماتریس طرح ریزی فروستوم را بارگذاری کنید
rsMatrixLoadIdentity بارگذاری ماتریس هویت
rsMatrixLoadMultiply دو ماتریس را ضرب کنید
rsMatrixLoadOrtho بارگذاری یک ماتریس طرح ریزی املایی
rsMatrixLoadPerspective بارگذاری یک ماتریس طرح ریزی پرسپکتیو
rsMatrixLoadRotate یک ماتریس چرخشی بارگذاری کنید
rsMatrixLoadScale یک ماتریس مقیاس بندی را بارگذاری کنید
rsMatrixLoadTranslate ماتریس ترجمه را بارگیری کنید
rsMatrixMultiply یک ماتریس را در یک بردار یا یک ماتریس دیگر ضرب کنید
rsMatrixRotate یک چرخش را به یک ماتریس تبدیل اعمال کنید
rsMatrixScale یک مقیاس بندی را برای یک ماتریس تبدیل اعمال کنید
rsMatrixSet یک عنصر را تنظیم کنید
rsMatrixTranslate یک ترجمه را به یک ماتریس تبدیل اعمال کنید
rsMatrixTranspose جابجایی یک مکان ماتریسی

توابع کواترنیون

توابع زیر کواترنیون ها را دستکاری می کنند.

توابع
rsQuaternionAdd دو کواترنیون اضافه کنید
rsQuaternionConjugate یک کواترنیون را مزدوج کنید
rsQuaternionDot حاصل ضرب نقطه ای دو کواترنیون
rsQuaternionGetMatrixUnit یک ماتریس چرخش از یک کواترنیون بگیرید
rsQuaternionLoadRotate یک کواترنیون چرخشی ایجاد کنید
rsQuaternionLoadRotateUnit کواترنیونی که چرخش حول یک بردار واحد دلخواه را نشان می دهد
rsQuaternionMultiply یک کواترنیون را در یک اسکالر یا یک کواترنیون دیگر ضرب کنید
rsQuaternionNormalize یک کواترنیون را عادی کنید
rsQuaternionSet یک کواترنیون ایجاد کنید
rsQuaternionSlerp درونیابی خطی کروی بین دو کواترنیون

توابع به روز رسانی اتمی

برای به روز رسانی مقادیر به اشتراک گذاشته شده بین چندین رشته، از توابع زیر استفاده کنید. آنها اطمینان حاصل می کنند که مقادیر به صورت اتمی به روز می شوند، یعنی خواندن حافظه، به روز رسانی ها و نوشتن حافظه به ترتیب درست انجام می شود.

این توابع کندتر از معادل های غیر اتمی خود هستند، بنابراین فقط زمانی از آنها استفاده کنید که همگام سازی مورد نیاز است.

توجه داشته باشید که در RenderScript، کد شما احتمالاً در رشته‌های جداگانه اجرا می‌شود، حتی اگر به صراحت آنها را ایجاد نکرده باشید. زمان اجرا RenderScript اغلب اجرای یک هسته را در چندین رشته تقسیم می کند. به روز رسانی جهانی ها باید با توابع اتمی انجام شود. در صورت امکان، الگوریتم خود را تغییر دهید تا به طور کلی از آنها اجتناب کنید.

توابع
rsAtomicAdd علاوه بر نخ ایمن
rsAtomicAnd Thread-safe بیتی و
rsAtomicCas مقایسه و تنظیم ایمن نخ
rsAtomicDec کاهش ایمن نخ
rsAtomicInc افزایش ایمن نخ
rsAtomicMax حداکثر رزوه ایمن
rsAtomicMin حداقل رزوه ایمن
rsAtomicOr Thread-safe به صورت بیتی یا
rsAtomicSub تفریق بی خطر
rsAtomicXor Thread-safe bitwise انحصاری یا

توابع و انواع زمان

توابع زیر را می توان برای اعلام زمان فعلی ساعت و زمان فعلی سیستم استفاده کرد. فراخوانی این توابع در داخل هسته توصیه نمی شود.

انواع
rs_time_t چند ثانیه از اول ژانویه 1970
rs_tm ساختار تاریخ و زمان
توابع
rsGetDt زمان سپری شده از آخرین تماس
rsLocaltime تبدیل به زمان محلی
rsTime چند ثانیه از اول ژانویه 1970
rsUptimeMillis زمان کارکرد سیستم بر حسب میلی ثانیه
rsUptimeNanos زمان کارکرد سیستم در نانوثانیه

توابع ایجاد تخصیص

توابع زیر را می توان برای ایجاد تخصیص از یک اسکریپت استفاده کرد.

این توابع را می توان به طور مستقیم یا غیر مستقیم از یک تابع فراخوانی فراخوانی کرد. اگر برخی از مسیرهای کنترل جریان بتواند منجر به فراخوانی این توابع از یک تابع هسته RenderScript شود، یک خطای کامپایلر ایجاد خواهد شد.

توابع
rsCreateAllocation یک شی rs_allocation از نوع داده شده ایجاد کنید.
rsCreateElement یک شی rs_element از نوع داده مشخص شده ایجاد می کند
rsCreatePixelElement یک شی rs_element از نوع داده و نوع داده مشخص شده ایجاد می کند
rsCreateType یک شی rs_type با ویژگی های Element و shape مشخص شده ایجاد می کند
rsCreateVectorElement یک شی rs_element با نوع داده و عرض برداری مشخص شده ایجاد می کند

توابع دسترسی به داده های تخصیص

از توابع زیر می توان برای دریافت و تنظیم سلول هایی که یک تخصیص را تشکیل می دهند استفاده کرد.

  • سلول های جداگانه با استفاده از توابع rsGetElementAt* و rsSetElementAt قابل دسترسی هستند.
  • چندین سلول را می توان با استفاده از توابع rsAllocationCopy* و rsAllocationV* کپی کرد.
  • برای دریافت مقادیر از طریق یک نمونه‌گر، از rsSample استفاده کنید.
توابع rsGetElementAt و rsSetElement* تا حدودی به اشتباه نامگذاری شده اند. آنها عناصری را که شبیه به انواع داده است، دریافت یا تنظیم نمی کنند. آنها سلول ها را می گیرند یا تنظیم می کنند. آنها را به عنوان rsGetCellAt و rsSetCellAt در نظر بگیرید.

توابع
rsAlocationCopy1DRange سلول های متوالی را بین تخصیص ها کپی کنید
rsAllocationCopy2DRange یک ناحیه مستطیلی از سلول ها را بین تخصیص ها کپی کنید
rsAllocationVLoadX یک بردار از تخصیص اسکالرها دریافت کنید
rsAllocationVStoreX یک بردار را در یک تخصیص اسکالر ذخیره کنید
rsGetElementAt یک سلول را از یک تخصیص برگردانید
rsGetElementAtYuv_uchar_U مولفه U را از تخصیص YUV دریافت کنید
rsGetElementAtYuv_uchar_V جزء V یک تخصیص YUV را دریافت کنید
rsGetElementAtYuv_uchar_Y مولفه Y را از تخصیص YUV دریافت کنید
rsSample یک مقدار از تخصیص بافت نمونه بگیرید
rsSetElementAt یک سلول از یک تخصیص را تنظیم کنید

توابع ویژگی های شی

توابع زیر را می توان برای پرس و جو از ویژگی های یک شیء تخصیص، عنصر یا نمونه استفاده کرد. این اشیاء از جاوا ایجاد شده اند. شما نمی توانید آنها را از یک اسکریپت ایجاد کنید.

تخصیص ها:

تخصیص ها روش اصلی مورد استفاده برای ارسال داده ها به و از هسته های RenderScript هستند.

آنها مجموعه ای ساختار یافته از سلول ها هستند که می توانند برای ذخیره بیت مپ ها، بافت ها، نقاط داده دلخواه و غیره استفاده شوند.

این مجموعه از سلول ها ممکن است دارای ابعاد زیادی (X، Y، Z، Array0، Array1، Array2، Array3)، چهره (برای نقشه مکعبی)، و سطح جزئیات (برای mipmapping) باشد.

برای جزئیات بیشتر در مورد ایجاد تخصیص به android.renderscript.Allocation مراجعه کنید.

عناصر:

اصطلاح "عنصر" کمی مبهم در RenderScript استفاده می شود، هم به عنوان اطلاعات نوع برای سلول های یک تخصیص و هم به عنوان نمونه سازی از آن نوع. به عنوان مثال:

  • rs_element یک دسته برای مشخصات نوع است و
  • در توابعی مانند rsGetElementAt ()، "element" به معنای نمونه سازی نوع، یعنی سلولی از یک تخصیص است.

توابع زیر به شما این امکان را می دهد که ویژگی های مشخصات نوع را جستجو کنید.

یک عنصر می تواند انواع داده های ساده ای را که در C یافت می شود، به عنوان مثال یک عدد صحیح، شناور یا بولی مشخص کند. همچنین می تواند یک دسته برای یک شی RenderScript مشخص کند. برای لیستی از انواع اصلی به rs_data_type مراجعه کنید.

عناصر می توانند نسخه های بردار اندازه ثابت (از اندازه 2، 3 یا 4) از انواع پایه را مشخص کنند. عناصر را می توان با هم به عناصر پیچیده گروه بندی کرد و معادل تعاریف ساختار C را ایجاد کرد.

عناصر همچنین می توانند نوعی داشته باشند که اطلاعات معنایی است که برای تفسیر داده های پیکسلی استفاده می شود. rs_data_kind را ببینید.

هنگام ایجاد تخصیص عناصر مشترک، می توانید به سادگی از یکی از بسیاری از عناصر از پیش تعریف شده مانند F32_2 استفاده کنید.

برای ایجاد عناصر پیچیده، از کلاس جاوا Element.Builder استفاده کنید.

نمونه گیرها:

اشیاء نمونه‌گیر تعریف می‌کنند که چگونه تخصیص‌ها را می‌توان به عنوان ساختار درون یک هسته خواند. android.renderscript.S را ببینید.

توابع
rsAllocationGetDimFaces حضور بیش از یک چهره
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 پوشش نمونه
rsSamplerGetWrapT مقدار T بسته بندی نمونه

توابع و انواع فراخوان هسته

تابع rsForEach () می تواند برای فراخوانی هسته ریشه یک اسکریپت استفاده شود.

توابع دیگر برای بدست آوردن ویژگی های فراخوانی یک هسته اجرایی مانند ابعاد و شاخص های فعلی استفاده می شوند. این توابع یک rs_kernel_context را به عنوان آرگومان می گیرند.

انواع
rs_for_each_strategy_t سفارش پردازش سلولی پیشنهادی
rs_kernel دسته به یک تابع هسته
rs_kernel_context به یک زمینه فراخوانی هسته رسیدگی کنید
rs_script_call_t اطلاعات تکرار سلول
توابع
rsForEach یک هسته راه اندازی می کند
rsForEachInternal (Internal API) یک هسته را در اسکریپت فعلی راه اندازی کنید (با شماره شکاف)
rsForEachWithOptions هسته ای را با گزینه ها راه اندازی می کند
rsGetArray0 ایندکس در بعد Array0 برای زمینه هسته مشخص شده
rsGetArray1 ایندکس در بعد Array1 برای زمینه هسته مشخص شده
rsGetArray2 ایندکس در بعد Array2 برای زمینه هسته مشخص شده
rsGetArray3 ایندکس در بعد Array3 برای زمینه هسته مشخص شده
rsGetDimArray0 اندازه بعد Array0 برای زمینه هسته مشخص شده
rsGetDimArray1 اندازه بعد Array1 برای زمینه هسته مشخص شده
rsGetDimArray2 اندازه بعد Array2 برای زمینه هسته مشخص شده
rsGetDimArray3 اندازه بعد Array3 برای زمینه هسته مشخص شده
rsGetDimHasFaces وجود بیش از یک چهره برای زمینه هسته مشخص شده
rsGetDimLod تعداد سطوح جزئیات برای زمینه هسته مشخص شده
rsGetDimX اندازه بعد X برای زمینه هسته مشخص شده
rsGetDimY اندازه بعد Y برای زمینه هسته مشخص شده
rsGetDimZ اندازه بعد Z برای زمینه هسته مشخص شده
rsGetFace مختصات Face برای زمینه هسته مشخص شده
rsGetLod نمایه در بعد Levels of Detail برای زمینه هسته مشخص شده

توابع ورودی/خروجی

از این توابع برای موارد زیر استفاده می شود:

  • ارسال اطلاعات به مشتری جاوا، و
  • تخصیص پردازش شده را ارسال کنید یا تخصیص بعدی را برای پردازش دریافت کنید.

توابع
rsAlocationIoReceive محتوای جدید را از صف دریافت کنید
rsAlocationIoSend ارسال مطالب جدید به صف
rsSendToClient ارسال پیام به مشتری، بدون مسدود کردن
rsSendToClientBlocking ارسال پیام به مشتری، مسدود کردن

توابع اشکال زدایی

توابع زیر برای استفاده در طول توسعه برنامه در نظر گرفته شده است. آنها نباید در برنامه های حمل و نقل استفاده شوند.

توابع
rsDebug یک پیام و مقادیر را ثبت کنید

توابع و انواع گرافیک

زیرسیستم گرافیکی RenderScript در سطح API 23 حذف شد.