Przegląd
RenderScript to wydajne środowisko wykonawcze, które umożliwia operacje obliczeniowe na poziomie natywnym. Kod RenderScript jest kompilowany na urządzeniach w czasie działania, co zapewnia niezależność od platformy.
W tej dokumentacji znajdziesz opis interfejsów API środowiska wykonawczego RenderScript, których możesz używać do zapisywania kodu RenderScript w języku C99. Pliki nagłówka Compute RenderScript są dołączane automatycznie.
Aby użyć RenderScript, musisz użyć opisanych tutaj interfejsów API środowiska wykonawczego RenderScript, a także interfejsów API platformy RenderScript. Dokumentację dotyczącą interfejsów API platformy Android znajdziesz w dokumentacji pakietu android.renderscript.
Więcej informacji o tworzeniu kodu za pomocą RenderScriptu oraz o wzajemnych interakcjach interfejsu środowiska wykonawczego z interfejsami API platformy Android znajdziesz w przewodniku dla programistów RenderScript i przykładach RenderScript.
Typy liczbowe
Skalary:
RenderScript obsługuje te skalarne typy wartości numerycznych:
8-bitowa | 16-bitowa | 32-bitowa | 64-bitowa | |
Liczba całkowita: | char, int8_t | krótki, int16_t | int32_t | długie, długie, int64_t |
Liczba całkowita bez znaku: | uchar, uint8_t | ushort, uint16_t | uint, uint32_t | ulong, uint64_t |
Liczba zmiennoprzecinkowa: | połowa | liczba zmiennoprzecinkowa | podwójny |
Wektory:
RenderScript obsługuje wektory o stałym rozmiarze o długości 2, 3 i 4. Wektory są deklarowane z użyciem wspólnej nazwy typu, po której następuje litera 2, 3 lub 4. Na przykład: float4, int3, double2, ulong4.
Aby utworzyć literały wektorowe, użyj typu wektorowego, a następnie wartości w nawiasach klamrowych, np. (float3){1.0f, 2.0f, 3.0f}
.
Dostęp do wpisów wektorowych można uzyskać za pomocą różnych stylów nazewnictwa.
Dostęp do pojedynczych wpisów można uzyskać, wpisując przy nazwie zmiennej kropkę i:
- litery x, y, z i w,
- litery r, g, b i a,
- Litera s lub S, po której następuje indeks liczony od zera.
Na przykład w polu int4 myVar;
te wartości są równoważne:
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
Dostęp do wielu wpisów wektora można uzyskać jednocześnie za pomocą identyfikatora, który składa się z wielu liter lub indeksów. Powstały wektor ma rozmiar równy liczbie nazwanych wpisów.
W przykładzie powyżej 2 środkowe wpisy można uzyskać za pomocą właściwości myVar.yz
, myVar.gb
, myVar.s12
i myVar.S12
.
Wpisy nie muszą być obok siebie ani w kolejności rosnącej. Wpisy można nawet powtarzać, o ile nie próbujemy ich przypisać. Nie można też łączyć różnych stylów nazewnictwa.
Oto przykłady tego, co można, a czego nie można:
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
Macierze i kwartyle:
RenderScript obsługuje macierze kwadratowe o stałym rozmiarze 2 x 2, 3 x 3 i 4 x 4. Typy są nazywane rs_matrix2x2, rs_matrix3x3 i rs_matrix4x4. Listę operacji znajdziesz w sekcji Funkcje macierzy.
Kwartiony są też obsługiwane przez rs_quaternion. Listę operacji znajdziesz w sekcji Funkcje Quaterion.
Rodzaje | |
---|---|
znak2 | Dwie 8-bitowe liczby całkowite ze znakiem |
znak3 | Trzy 8-bitowe liczby całkowite ze znakiem |
znak4 | Cztery 8-bitowe liczby całkowite ze znakiem |
podwójny2 | Dwie 64-bitowe liczby pływające |
Double3 | 3 64-bitowe liczby pływające |
Double4 | 4 64-bitowe liczby zmiennoprzecinkowe |
liczba zmiennoprzecinkowa2 | Dwie 32-bitowe swobody |
float3 | 3 32-bitowe liczby zmiennoprzecinkowe |
float4 | Cztery 32-bitowe liczby zmiennoprzecinkowe |
połowa | 16-bitowa wartość zmiennoprzecinkowa |
połowa 2 | Dwie 16-bitowe liczby pływające |
połowa 3 | 3 16-bitowe liczby pływające |
połowa 4 | Cztery 16-bitowe liczby zmiennoprzecinkowe |
int16_t | 16-bitowa liczba całkowita ze znakiem |
int2 | Dwie 32-bitowe liczby całkowite ze znakiem |
int3 | Trzy 32-bitowe liczby całkowite ze znakiem |
int32_t | 32-bitowa liczba całkowita ze znakiem |
int4 | Cztery 32-bitowe liczby całkowite ze znakiem |
int64_t | 64-bitowa liczba całkowita ze znakiem |
int8_t | 8-bitowa liczba całkowita ze znakiem |
long2, | Dwie 64-bitowe liczby całkowite ze znakiem |
długi3 | 3 64-bitowe liczby całkowite ze znakiem |
long4, | Cztery 64-bitowe liczby całkowite ze znakiem |
rs_matrix2x2 | Macierz 2 x 2 32-bitowych liczb zmiennoprzecinkowych |
rs_matrix3x3 | Matryca 3 x 3 z 32-bitową liczbą zmiennoprzecinkową |
rs_matrix4x4 | Matryca 4 x 4 32-bitowych liczb zmiennoprzecinkowych |
rs_quaternion | Kwartion |
skrót2 | Dwie 16-bitowe liczby całkowite ze znakiem |
Short3 | 3 16-bitowe liczby całkowite ze znakiem |
skrót4 | Cztery 16-bitowe liczby całkowite ze znakiem |
size_t [rozmiar_t] | Niepodpisany typ rozmiaru |
ssize_t | Podpisany rodzaj rozmiaru |
uchar | 8-bitowa nieoznaczona liczba całkowita |
uchar2 | Dwie 8-bitowe liczby całkowite bez znaku |
uchar3 | Trzy 8-bitowe liczby całkowite bez znaku |
uchar4 | Cztery 8-bitowe liczby całkowite bez znaku |
uint, | 32-bitowa nieoznaczona liczba całkowita |
uint16_t | 16-bitowa nieoznaczona liczba całkowita |
uint2 | Dwie 32-bitowe liczby całkowite bez znaku |
uint3 | Trzy 32-bitowe liczby całkowite bez znaku |
uint32_t | 32-bitowa nieoznaczona liczba całkowita |
uint4 | Cztery 32-bitowe liczby całkowite bez znaku |
uint64_t | 64-bitowa nieoznaczona liczba całkowita |
uint8_t | 8-bitowa nieoznaczona liczba całkowita |
ulong, | 64-bitowa nieoznaczona liczba całkowita |
ulong2, | Dwie 64-bitowe liczby całkowite bez znaku |
ulong3, | Trzy 64-bitowe liczby całkowite bez znaku |
ulong4 | Cztery 64-bitowe liczby całkowite bez znaku |
Ushort | 16-bitowa nieoznaczona liczba całkowita |
ushort2. | Dwie 16-bitowe liczby całkowite bez znaku |
ushort3. | Trzy 16-bitowe liczby całkowite bez znaku |
ushort4. | Cztery 16-bitowe liczby całkowite bez znaku |
Typy obiektów
Opisane poniżej typy służą do manipulowania obiektami RenderScript, takimi jak alokacje, próbki, elementy i skrypty. Większość z nich jest tworzona przy użyciu interfejsów API Java RenderScript.
Rodzaje | |
---|---|
rs_allocation | Obsługa alokacji |
rs_allocation_cubemap_face, | Wyliczenie do wyboru tarcz mapy sześciennej |
rs_allocation_usage_type | Pole bitowe do określania sposobu użycia alokacji |
rs_data_kind | Rodzaj danych elementu |
rs_data_type | Podstawowy typ danych elementu |
rs_element, | Uchwyt do elementu |
rs_sampler | Użyj nicka do próbki |
rs_sampler_value | Wartość zawijania próbek (T) |
rs_script, | Uchwyt do skryptu |
rs_type | Użyj uchwytu do typu |
rs_yuv_format | Format YUV |
Funkcje konwersji
Poniższe funkcje konwertują wartości wektorów liczbowych na inne lub z jednej reprezentacji kolorów na drugi.
Funkcje | |
---|---|
dokonuj konwersji | Przekonwertuj wektory liczbowe |
rsPackColorTo8888 | Utwórz RGBA uchar4 na podstawie liczb zmiennoprzecinkowych |
rsUnpackColor8888 | Tworzenie modelu RGBA typu float4 z pliku uchar4 |
rsYuvToRGBA, | Przekonwertuj wartość YUV na RGBA |
Stałe i funkcje matematyczne
Poniższe funkcje matematyczne można stosować do skalarów i wektorów. Gdy zwracana wartość jest stosowana do wektorów, jest wektorem funkcji stosowanej do każdego wpisu danych wejściowych.
Przykład:
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);
W sekcji Funkcje matematyczne wektorowe znajdziesz funkcje takie jak distance() i length(), które interpretują dane wejściowe jako pojedynczy wektor w przestrzeni n-wymiarowej.
Na dokładność działań matematycznych na 32-bitowych liczbach zmiennoprzecinkowych wpływają wartości pragmas rs_fp_relaxed i rs_fp_full. W parametrze rs_fp_relaxed wartości nienormalne mogą być opróżniane do zera i można je zaokrąglać do zera. Dla porównania parametr rs_fp_full wymaga prawidłowej obsługi wartości podrzędnych, tj. mniejszych niż 1.17549435e-38f. Parametr rs_fp_rull wymaga też zaokrąglania do najbliższej z parzystymi wartościami.
Za pomocą wariantów typowych funkcji matematycznych można osiągnąć różne zmiany w zakresie precyzji i szybkości. Funkcje, których nazwy zaczynają się od
- natywne_: mogą mieć niestandardowe implementacje sprzętowe o niższej dokładności. Dodatkowo wartości nienormalne mogą być opróżniane do zera, można zaokrąglać do zera, a dane wejściowe NaN i nieskończoności mogą nie być prawidłowo obsługiwane.
- połowy_: umożliwia wykonywanie wewnętrznych obliczeń przy użyciu 16-bitowych liczb zmiennoprzecinkowych. Dodatkowo wartości podrzędne mogą być opróżniane do zera i można je zaokrąglać do zera.
Stałe | |
---|---|
M_1_PI | 1 / pi w postaci 32-bitowej liczby zmiennoprzecinkowej. |
M_2_PI | 2 / pi w postaci 32-bitowej liczby zmiennoprzecinkowej. |
M_2_PIERW.PI | 2 / sqrt(pi) w postaci 32-bitowej liczby zmiennoprzecinkowej. |
M_E | e, w postaci 32-bitowej liczby zmiennoprzecinkowej. |
M_LN10 | log_e(10), w postaci 32-bitowej liczby zmiennoprzecinkowej. |
M_LN2 | log_e(2), w postaci 32-bitowej liczby zmiennoprzecinkowej. |
M_LOG10E | log_10(e), jako 32-bitowa liczba zmiennoprzecinkowa |
M_LOG2E | log_2(e), jako 32-bitowa liczba zmiennoprzecinkowa, |
M_PI | pi w postaci 32-bitowej liczby zmiennoprzecinkowej. |
M_PI_2 | pi / 2 w postaci 32-bitowej liczby zmiennoprzecinkowej. |
M_PI_4 | pi / 4 w postaci 32-bitowej liczby zmiennoprzecinkowej. |
M_PIERWIASTEK1_2 | 1 / sqrt(2), w postaci 32-bitowej liczby zmiennoprzecinkowej. |
PIERWIASTEK_M_PIERWIASTEK | sqrt(2), w postaci 32-bitowej liczby zmiennoprzecinkowej. |
Funkcje | |
---|---|
absolut | Wartość bezwzględna liczby całkowitej |
akos | Odwrotny cosinus |
acosh | Odwrotny cosinus hiperboliczny |
acospi | Odwrotny cosinus podzielony przez pi |
asin | Odwrotny sinus |
asinh | Odwrotny sinus hiperboliczny |
asinpi | Odwrotny sinus podzielony przez pi |
atan | Odwrotny tangens |
atan2 | Odwrotny tangens współczynnika |
atan2pi | Odwrotny tangens współczynnika podzielony przez pi |
atanh | Odwrotny tangens hiperboliczny |
Atanpi | Odwrotny tangens podzielony przez pi |
cbrt | Pierwiastek sześcienny |
ceil | Najmniejsza liczba całkowita, nie mniejsza od wartości |
ograniczyć | Ogranicz wartość do zakresu |
clz | Liczba pierwszych 0 bitów |
copysign. | Kopiuje znak liczby do innej |
Cos | Cosinus |
cosh | Cosinus hiperboliczny |
Cospi | Cosinus liczby pomnożonej przez pi |
stopnie | Przekształca radiany na stopnie |
erf | Funkcja błędu matematycznego |
erfc | Uzupełniająca funkcja matematyczna błędu |
exp | e podniesiona do liczby |
exp10 | 10 podniesiona do liczby |
wyr2 | 2 podniesiona do liczby |
expm1 | e podniesiona do liczby minus jeden |
pracowników | Wartość bezwzględna liczby zmiennoprzecinkowej |
FDim | Różnica dodatnia między 2 wartościami |
piętro | Najmniejsza liczba całkowita nie większa od wartości |
FMA | Pomnóż i dodaj |
FMax | Maksymalnie dwie liczby zmiennoprzecinkowe |
min | Co najmniej dwie liczby zmiennoprzecinkowe |
Fmod | Modulo |
frakt | Dodatnia część ułamkowa |
frexp, | Binarna mantysa i wykładnik |
pół_recip | Wartość odwrotna obliczona z dokładnością do 16 bitów |
half_rsqrt | Odwrotność pierwiastka kwadratowego obliczony z dokładnością 16-bitową |
half_sqrt | Pierwiastek kwadratowy obliczony z 16-bitową precyzją |
hipot | przeciwprostokątna |
ilogb | Podstawa dwóch wykładników |
lekcja ldexp | Tworzy punkt zmiennoprzecinkowy na podstawie mantysy i wykładnika |
Lgamma | Logarytm naturalny funkcji gamma |
dziennik | Logarytm naturalny |
log10 | Logarytm dziesiętny |
log1p | Logarytm naturalny wartości plus 1 |
log2 | Logarytm dziesiętny |
logb | Podstawa dwóch wykładników |
szalony | Pomnóż i dodaj |
maks. | Wartość maksymalna |
min | Wartość minimalna |
mieszanka | Łączy 2 wartości |
modf (modf) | Składniki całkowite i ułamkowe |
nan | To nie jest liczba |
nan_połowa | To nie jest liczba |
natywne_acos | Przybliżony odwrotny cosinus |
native_acosh | Przybliżony odwrotny odwrotny cosinus hiperboliczny |
native_acospi | Przybliżony odwrotny cosinus podzielony przez pi |
native_asin | Przybliżony odwrotny sinus |
native_asinh | Przybliżony odwrotny odwrotny sinus hiperboliczny |
natywny_asinpi | Przybliżony odwrotny sinus podzielony przez pi |
native_atan | Przybliżony odwrotny tangens |
natywny_atan2 | Przybliżony odwrotny tangens współczynnika |
native_atan2pi | Przybliżony odwrotny tangens współczynnika podzielony przez pi |
native_atanh | Przybliżony odwrotny tangens hiperboliczny |
natywny_atanpi | Przybliżony odwrotny tangens podzielony przez pi |
natywny_cbrt | Przybliżony pierwiastek sześcienny |
native_cos | Przybliżony cosinus |
natywna_cosh | Przybliżony cosinus hipeboliczny |
native_cospi | Przybliżony cosinus liczby pomnożonej przez pi |
natywna_divide | Podział przybliżony |
native_exp | Przybliżona liczba e podniesiona do określonej liczby |
native_exp10 | Podniesiona do określonej liczby około 10 |
natywna_wyrażenia2 | Podniesiono ok. 2 do określonej liczby |
native_expm1 | Przybliżona liczba e podniesiona do liczby minus jeden |
native_hypot | Przybliżona przeciwprostokątna |
native_log | Przybliżony logarytm naturalny |
native_log10 | Logarytm dziesiętny w przybliżeniu |
native_log1p | Przybliżony logarytm naturalny wartości plus 1 |
native_log2 | Przybliżony logarytm dziesiętny |
natywna_powr, | Przybliżona podstawa dodatnia podniesiona do wykładnika |
natywny_recip | Przybliżona liczba odwrotna |
native_rootn | Przybliżony n-ty pierwiastek |
native_rsqrt | Przybliżony odwrotność pierwiastka kwadratowego |
natywny_sin | Przybliżony sinus |
native_sincos | Przybliżony sinus i cosinus |
native_sinh | Przybliżony sinus hiperboliczny |
natywny_sinpi | Przybliżony sinus liczby pomnożonej przez pi |
native_sqrt | Przybliżony pierwiastek kwadratowy |
natywny_jasnobrązowy | Przybliżona tangens |
natywny_tanh | Przybliżony tangens hiperboliczny |
natywna_tanpi | Przybliżony tangens liczby pomnożonej przez pi |
nextafter | Następna liczba zmiennoprzecinkowa |
pow | Podstawa podniesiona do wykładnika |
pown | Podstawa podniesiona do wykładnika całkowitej |
powr, | Dodatnia podstawa podniesiona do wykładnika |
radiany | Konwertuje stopnie na radiany |
reszta | Pozostała część oddziału |
remquo | Reszta i iloraz dzielenia |
Rint | Zaokrąglaj do parzystych |
rootn | Pierwiastek stopnia n |
round | Zaokrąglaj od zera |
rsRand, | Pseudolosowa liczba |
rsqrt | Odwrotność pierwiastka kwadratowego |
podpisz | Znak wartości |
sin | Sinus |
Sincos | Sinus i cosinus |
Sinh | Sinus hiperboliczny |
Sinpi | Sinus liczby pomnożonej przez pi |
sqrt | Pierwiastek kwadratowy |
krok | Wartość 0, jeśli jest mniejsza od wartości, lub 0 w przeciwnym razie |
jasnobrązowy | Tangens |
tanh | Tangens hiperboliczny |
tanpi, | Tangens liczby pomnożonej przez pi |
tgamma | Funkcja gamma |
obcinanie | Przycina liczbę zmiennoprzecinkową |
Wektorowe funkcje matematyczne
Te funkcje interpretują argumenty wejściowe jako reprezentacje wektorów w przestrzeni n-wymiarowej.
Na dokładność działań matematycznych na 32-bitowych liczbach zmiennoprzecinkowych wpływają wartości pragmas rs_fp_relaxed i rs_fp_full. Szczegółowe informacje znajdziesz w sekcji Stałe i funkcje matematyczne.
Za pomocą wariantów typowych funkcji matematycznych można osiągnąć różne zmiany w zakresie precyzji i szybkości. Funkcje, których nazwy zaczynają się od
- natywne_: mogą mieć niestandardowe implementacje sprzętowe o niższej dokładności. Dodatkowo wartości nienormalne mogą być opróżniane do zera, można zaokrąglać do zera, a dane wejściowe NaN i nieskończoności mogą nie być prawidłowo obsługiwane.
- fast_: umożliwia wykonywanie wewnętrznych obliczeń przy użyciu 16-bitowych liczb zmiennoprzecinkowych. Dodatkowo wartości podrzędne mogą być opróżniane do zera i można je zaokrąglać do zera.
Funkcje | |
---|---|
krzyżyk | Iloczyn krzyżowy 2 wektorów |
odległość | Odległość między dwoma punktami |
kropka | Iloczyn skalarny dwóch wektorów |
szybka_odległość | Przybliżona odległość między dwoma punktami |
szybka_długość | Przybliżona długość wektora |
fast_normalize | Przybliżona znormalizowana wektor |
length (długość) | Długość wektora |
odległość_natywna | Przybliżona odległość między dwoma punktami |
długość_natywnej | Przybliżona długość wektora |
native_normalize | Normalizuj wektor w przybliżeniu |
normalizacja | Normalizuj wektor |
Funkcje macierzy
Te funkcje umożliwiają obsługę macierzy kwadratowych rangi 2 x 2, 3 x 3 i 4 x 4. Są one szczególnie przydatne w przypadku przekształceń graficznych i są zgodne z OpenGL.
W wierszach i kolumnach używamy indeksu liczonego od zera. Np. ostatni element w tablicy rs_matrix4x4 znajduje się w miejscu (3, 3).
RenderScript wykorzystuje macierze dużych kolumn i wektory kolumnowe. Przekształcanie wektora odbywa się po jego pomnożeniu, np. (matrix * vector)
, zgodnie z funkcją rsMatrixMultiply().
Aby utworzyć macierz, która przeprowadza 2 przekształcenia naraz, należy pomnożyć te 2 macierze, przy czym pierwsza z nich będzie właściwym argumentem. Aby np. utworzyć macierz przekształceń, która stosuje przekształcenie s1, a następnie s2, wywołaj rsMatrixLoadMultiply(&combined, &s2, &s1)
.
Pochodzi z pola s2 * (s1 * v)
, czyli (s2 * s1) * v
.
Istnieją 2 rodzaje funkcji do tworzenia macierzy transformacji: rsMatrixLoadTransformation i rsMatrixTransformation. W poprzednim argumencie macierz przekształceń jest przechowywana w pierwszym argumencie. Ten ostatni zmienia dotychczasową macierz przekształceń tak, aby nowe przekształcenie odbywało się jako pierwsze. Jeśli np. wywołasz funkcję rsMatrixTranslate() w macierzy, która już skaluje, otrzymana macierz po zastosowaniu do wektora najpierw wykona translację, a następnie skalowanie.
Funkcje | |
---|---|
rsExtractFrustumPlanes | Obliczanie płaszczyzn ostrych |
rsIsSphereInFrustum | Sprawdza, czy kula znajduje się w płaszczyznach rozluźniających |
rsMatrixGet | Pobierz 1 element |
rsMatrixInverse. | Odwraca macierz w miejscu |
rsMatrixInverseTranspose | Odwraca i transponuje macierz w miejscu |
rsMatrixLoad | Wczytywanie lub kopiowanie macierzy |
rsMatrixLoadFrustum | Wczytaj macierz projekcji frustum |
rsMatrixLoadIdentity | Wczytywanie macierzy tożsamości |
rsMatrixLoadMultiply | Pomnóż 2 macierze |
rsMatrixLoadOrtho, | Wczytaj macierz odwzorowania ortograficznego |
rsMatrixLoadPerspective, | Wczytywanie macierzy projekcji perspektywy |
rsMatrixLoadDuration | Wczytaj macierz rotacji |
rsMatrixLoadScale | Wczytaj macierz skalowania |
rsMatrixLoadTranslate | Wczytaj macierz translacji |
rsMatrixMultiply | Pomnóż macierz przez wektor lub inną macierz |
rsMatrixRotacja | Zastosuj rotację do macierzy przekształceń |
rsMatrixScale. | Zastosuj skalowanie do macierzy transformacji |
rsMatrixSet | Ustawianie jednego elementu |
rsMatrixTranslate | Zastosuj translację do macierzy przekształceń |
rsMatrixTranspose | Transponuj miejsce macierzy |
Funkcje kwartyli
Poniższe funkcje manipulowają kwantionami.
Funkcje | |
---|---|
rsQuaternionAdd | Dodaj dwie kwaternony |
rsQuaternionConjugate | Sprzęgaj kwaternion |
rsQuaternionDot | Iloczyn skalarny dwóch kwaternionów |
rsQuaternionGetMatrixUnit | Pobierz macierz rotacji z kwaternionu |
rsQuaternionLoadBalance | Utwórz kwaternion rotacji |
rsQuaternionLoadBalanceUnit | Kwartionek reprezentujący obrót wokół dowolnego wektora jednostkowego |
rsQuaternionMultiply | Pomnóż kwartion przez skalar lub inny kwionion |
rsQuaternionNormalize | Normalizuj kwaternion |
rsQuaternionSet, | Utwórz kwaternion |
rsQuaternionSlerp | Sferyczna interpolacja liniowa między 2 kwaternionami |
Funkcje aktualizacji atomowej
Aby zaktualizować wartości udostępniane w wielu wątkach, użyj poniższych funkcji. Zapewniają one aktualizację atomową wartości, co oznacza, że pamięć odczyty, aktualizacje i zapis są wykonywane we właściwej kolejności.
Te funkcje są wolniejsze od ich nieatomowych odpowiedników, więc używaj ich tylko wtedy, gdy potrzebna jest synchronizacja.
Pamiętaj, że w kodzie RenderScript Twój kod może działać w oddzielnych wątkach, nawet jeśli nie został on utworzony przez Ciebie. Środowisko wykonawcze RenderScript bardzo często dzieli wykonanie jednego jądra na wiele wątków. Globalne aktualizowanie musi być przeprowadzane za pomocą funkcji niepodzielnych. Jeśli to możliwe, zmień algorytm tak, aby całkowicie ich unikać.
Funkcje | |
---|---|
rsAtomicAdd, | Dodawanie bezpieczne w wątku |
rsAtomicAnd | Bezpieczne do użycia w wątkach |
rsAtomicCas, | Porównywanie i konfigurowanie w wątku |
rsAtomicDec | Zmniejszanie bezpieczne w wątku |
rsAtomicInc, | Zwiększenie bezpieczeństwa w wątku |
rsAtomicMax, | Maksymalna dozwolony w wątku |
rsAtomicMin, | Minimalna możliwa do zastosowania w wątku |
rsAtomicOr, | Bezpieczne w wątku bitowe lub |
rsAtomicSub, | Odejmowanie w wątkach |
rsAtomicXor | Tylko bitowe zabezpieczenia w wątkach lub |
Funkcje i typy czasu
Opisane poniżej funkcje pozwalają określić bieżącą godzinę i godzinę działania systemu. Nie zaleca się wywoływania tych funkcji w jądrze.
Rodzaje | |
---|---|
rs_time_t | Sekundy od 1 stycznia 1970 r. |
rs_tm | Struktura daty i godziny |
Funkcje | |
---|---|
rsGetDt | Czas, który upłynął od ostatniego połączenia |
rsLocaltime, | Konwertuj na czas lokalny |
rsTime, | Sekundy od 1 stycznia 1970 r. |
rsUptimeMillis | Czas działania systemu w milisekundach |
rsUptimeNanos | Czas działania systemu w nanosekundach |
Funkcje tworzenia alokacji
Poniższe funkcje mogą służyć do tworzenia przydziałów na podstawie skryptu.
Te funkcje można wywoływać bezpośrednio lub pośrednio z funkcji niewprowadzonej. Jeśli jakaś ścieżka przepływu kontroli może skutkować wywołaniem tych funkcji przez funkcję jądra RenderScript, zostanie wygenerowany błąd kompilatora.
Funkcje | |
---|---|
rsCreateAllocation, | Utwórz obiekt rs_allocation danego typu. |
rsCreateElement. | Tworzy obiekt rs_element określonego typu danych |
rsCreatePixelElement. | Tworzy obiekt rs_element określonego typu i rodzaju danych |
rsCreateType, | Tworzy obiekt rs_type z określonymi atrybutami Element i kształt |
rsCreateVectorElement. | Tworzy obiekt rs_element o określonym typie danych i szerokości wektora |
Funkcje dostępu do danych alokacji
Opisane poniżej funkcje służą do pobierania i ustawiania komórek, które składają się na alokację.
- Dostęp do poszczególnych komórek można uzyskać za pomocą funkcji rsGetElementAt* i rsSetElementAt.
- Za pomocą funkcji rsAllocationCopy* i rsAllocationV* możesz kopiować wiele komórek.
- Aby pobierać wartości za pomocą próbnika, użyj rsSample.
Funkcje | |
---|---|
rsAllocationCopy1DRange, | Kopiuj następujące po sobie komórki między przydziałami |
rsAllocationCopy2DRange, | Kopiuj prostokątny region komórek między przydziałami |
rsAllocationVLoadX, | Pobierz wektor z przydziału skalarów |
rsAllocationVStoreX, | Zapisuj wektor w alokacji skalarnych |
rsGetElementAt | Zwracanie komórki z alokacji |
rsGetElementAtYuv_uchar_U | Pobierz komponent U w przydziału jednostek YUV |
rsGetElementAtYuv_uchar_V (tylko w języku angielskim) | Pobierz komponent V przydziału jednostek YUV |
rsGetElementAtYuv_uchar_Y (w języku angielskim) | Pobierz komponent Y przydziału jednostek YUV |
rsSample, | Próbkowanie wartości z przydziału tekstury |
rsSetElementAt, | Ustaw komórkę w alokacji |
Funkcje cech obiektów
Opisane poniżej funkcje mogą służyć do wysyłania zapytań o cechy obiektów Alokacji, Elementu lub Samplera. Obiekty te są tworzone w języku Java. Nie można ich tworzyć ze skryptu.
Przydziały:
Alokacje to podstawowa metoda używana do przekazywania danych do i z jądra RenderScript.
Jest to uporządkowany zbiór komórek, którego można używać do przechowywania map bitowych, tekstur, dowolnych punktów danych itp.
Ten zbiór komórek może mieć wiele wymiarów (X, Y, Z, tablica0, tablica1, tablica2, tablica3), twarze (mapy sześcienne) oraz poziom szczegółów (do mipmappingu).
Szczegółowe informacje o tworzeniu przydziałów znajdziesz na stronie android.renderscript.Allocation.
Elementy:
Termin „element” w RenderScript jest używany nieco niejednoznacznie jako informacje o typie zarówno dla komórek alokacji, jak i wystąpienia tego typu. Na przykład:
- rs_element to uchwyt specyfikacji typu,
- W funkcjach takich jak rsGetElementAt() „element” oznacza wystąpienie typu, np. komórkę alokacji.
Poniższe funkcje umożliwiają wysyłanie zapytań o cechy specyfikacji typu.
Element może określać proste typy danych znane z C, np. liczbę całkowitą, liczbę zmiennoprzecinkową lub wartość logiczną. Może też określić uchwyt obiektu RenderScript. Listę podstawowych typów znajdziesz w sekcji rs_data_type.
Elementy mogą określać wersje podstawowych typów wektorowych o stałym rozmiarze (o rozmiarze 2, 3 lub 4). Elementy można grupować w elementy złożone, tworząc odpowiednik definicji struktur C.
Elementy mogą też mieć rodzaj, czyli informacje semantyczne używane do interpretacji danych piksela. Zobacz rs_data_kind.
Podczas tworzenia alokacji wspólnych elementów możesz używać jednego z wielu wstępnie zdefiniowanych elementów, np. F32_2.
Aby tworzyć elementy złożone, użyj klasy Java Element.Builder.
Sample:
Obiekty próbkowania określają, jak alokacje mogą być odczytywane jako struktura w jądrze. Zobacz android.renderscript.S.
Funkcje | |
---|---|
rsAllocationGetDimFaces, | Obecność więcej niż jednej twarzy |
rsAllocationGetDimLOD, | Obecność poziomów szczegółowości |
rsAllocationGetDimX, | Rozmiar wymiaru X |
rsAllocationGetDimY, | Rozmiar wymiaru Y |
rsAllocationGetDimZ, | Rozmiar wymiaru Z |
rsAllocationGetElement, | Pobieranie obiektu opisującego komórkę przydziału |
rsClearObject | Zwalnianie obiektu |
rsElementGetBytesSize | Rozmiar elementu |
rsElementGetDataKind | Rodzaj elementu |
rsElementGetDataType | Typ danych elementu |
rsElementGetSubElement | Element podrzędny elementu złożonego |
rsElementGetSubElementTrackSize | Rozmiar tablicy elementu podrzędnego elementu złożonego |
rsElementGetSubElementCount | Liczba elementów podrzędnych |
rsElementGetSubElementName | Nazwa podelementu |
rsElementGetSubElementNameLength | Długość nazwy podelementu |
rsElementGetSubElementOffsetBytes | Przesunięcie elementu podrzędnego utworzonego na podstawie instancji |
rsElementGetVectorSize | Rozmiar wektora elementu |
rsIsObject, | Sprawdzanie, czy nic nie jest puste |
rsSamplerGetanizotropia | Anizotropia próbki |
rsSamplerGetMagnification, | Wartość powiększenia próbnika |
rsSamplerGetMinification | Wartość minifikacji próbkowania |
rsSamplerGetWrapS | Wartość zawijania próbek (S) |
rsSamplerGetWrapT, | Wartość zawijania próbek (T) |
Funkcje i typy wywoływania jądra
Funkcja rsForEach() może służyć do wywołania głównego jądra skryptu.
Pozostałe funkcje służą do sprawdzania właściwości wywołania wykonywanego jądra, np. wymiarów i bieżących indeksów. Funkcje te przyjmują argument rs_kernel_context.
Rodzaje | |
---|---|
rs_for_each_strategy_t | Sugerowana kolejność przetwarzania komórek |
rs_kernel | Uchwyć do funkcji jądra |
rs_kernel_context | Uchwyt do kontekstu wywołania jądra |
rs_script_call_t | Informacje o iteracji komórki |
Funkcje | |
---|---|
rsForEach | Uruchamia jądro |
rsForEachInternal | (Wewnętrzny interfejs API) Uruchamianie jądra w bieżącym skrypcie (z numerem przedziału) |
rsForEachWithOptions | Uruchamia jądro z opcjami |
rsGetTrack0 | Indeks w wymiarze tablica0 dla określonego kontekstu jądra |
rsGetSlate1 | Indeks w wymiarze tablica1 dla określonego kontekstu jądra |
rsGetTrack2 | Indeks w wymiarze Tablica2 dla określonego kontekstu jądra |
rsGetTrack3 | Indeks w wymiarze Array3 dla określonego kontekstu jądra |
rsGetDimTrack0 | Rozmiar wymiaru tablica0 dla określonego kontekstu jądra |
rsGetDimSlate1 | Rozmiar wymiaru tablica1 dla określonego kontekstu jądra |
rsGetDimSlate2 | Rozmiar wymiaru tablica2 dla określonego kontekstu jądra |
rsGetDimSlate3 | Rozmiar wymiaru Array3 dla określonego kontekstu jądra |
rsGetDimHasFaces | Obecność więcej niż jednej twarzy w określonym kontekście jądra |
rsGetDimLod | Liczba poziomów szczegółowości dla określonego kontekstu jądra |
rsGetDimX | Rozmiar wymiaru X dla określonego kontekstu jądra |
rsGetDimY | Rozmiar wymiaru Y dla określonego kontekstu jądra |
rsGetDimZ | Rozmiar wymiaru Z dla określonego kontekstu jądra |
rsGetFace | Współrzędne twarzy dla określonego kontekstu jądra |
rsGetLod | Indeks w wymiarze Poziomy szczegółów dla określonego kontekstu jądra |
Funkcje wejściowe/wyjściowe
Te funkcje służą do:
- wysłać informacje do klienta Java i
- Wyślij przetworzony przydział lub otrzymaj następny przydział do przetworzenia.
Funkcje | |
---|---|
rsAllocationIoReceived | Odbierz nowe treści z kolejki |
rsAllocationIoSend | Wysyłaj nowe treści do kolejki |
rsSendToClient | Wyślij wiadomość do klienta (bez blokowania) |
rsSendToClientBlokowanie | Wyślij wiadomość do klienta, blokując |
Funkcje debugowania
Opisane poniżej funkcje są przeznaczone do użytku podczas tworzenia aplikacji. Nie należy ich używać w aplikacjach związanych z dostawą.
Funkcje | |
---|---|
rsDebug | Rejestruj komunikat i wartości |
Funkcje i typy graficzne
Podsystem graficzny RenderScript został usunięty na poziomie API 23.