Übersicht
RenderScript ist eine leistungsstarke Laufzeit, die Computing-Vorgänge auf nativer Ebene bereitstellt. Der RenderScript-Code wird zur Laufzeit auf Geräten kompiliert, um auch eine Plattformunabhängigkeit zu ermöglichen.
In dieser Referenzdokumentation werden die RenderScript-Laufzeit-APIs beschrieben, mit denen Sie RenderScript-Code in C99 schreiben können. Die Compute-Header-Dateien von RenderScript sind automatisch enthalten.
Wenn Sie RenderScript nutzen möchten, müssen Sie die hier dokumentierten RenderScript-Laufzeit-APIs sowie die Android Framework APIs für RenderScript verwenden. Eine Dokumentation zu den Android-Framework-APIs finden Sie in der Paketreferenz android.renderscript.
Weitere Informationen zur Entwicklung mit RenderScript und zur Interaktion der Runtime- und Android-Framework-APIs finden Sie im RenderScript-Entwicklerleitfaden und in den RenderScript-Beispielen.
Numerische Typen
Skalare:
RenderScript unterstützt die folgenden skalaren numerischen Typen:
8 Bit | 16 Bit | 32 Bit | 64 Bit | |
Ganzzahl: | char, int8_t | kurz, int16_t | int32_t | long, long long, int64_t |
Vorzeichenlose Ganzzahl: | uchar, uint8_t | ushort, uint16_t | uint, uint32_t | Ulong, uint64_t |
Gleitkommawert: | Spielhälfte | schweben | Doppelt |
Vektoren:
RenderScript unterstützt Vektoren mit fester Größe in den Längen 2, 3 und 4. Vektoren werden mit dem allgemeinen Typnamen gefolgt von 2, 3 oder 4 deklariert. Beispiel: float4, int3, double2, ulong4.
Verwenden Sie zum Erstellen von Vektorliteralen den Vektortyp, gefolgt von den Werten in geschweiften Klammern, z.B. (float3){1.0f, 2.0f, 3.0f}
.
Auf Einträge eines Vektors kann mithilfe verschiedener Namensstile zugegriffen werden.
Um auf einzelne Einträge zuzugreifen, folgen Sie dem Variablennamen mit einem Punkt und:
- Die Buchstaben x, y, z und w
- Die Buchstaben r, g, b und a,
- Der Buchstabe „s“ oder „S“ gefolgt von einem nullbasierten Index.
Mit int4 myVar;
ist beispielsweise Folgendes äquivalent:
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
Auf mehrere Einträge eines Vektors kann gleichzeitig zugegriffen werden, indem eine Kennung verwendet wird, die die Verkettung mehrerer Buchstaben oder Indizes ist. Der resultierende Vektor hat eine Größe, die der Anzahl der benannten Einträge entspricht.
Im Beispiel oben kann mit myVar.yz
, myVar.gb
, myVar.s12
und myVar.S12
auf die beiden mittleren Einträge zugegriffen werden.
Die Einträge müssen nicht fortlaufend oder in aufsteigender Reihenfolge sein. Einträge können sogar wiederholt werden, solange nicht versucht wird, sie zuzuweisen. Außerdem dürfen die Benennungsstile nicht gemischt werden.
Hier sind einige Beispiele dafür, was möglich ist und was nicht:
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
Matrizen und Quaternionen:
RenderScript unterstützt quadratische Matrizen mit fester Größe von Gleitkommazahlen der Größe 2 x 2, 3 x 3 und 4 x 4. Die Typen heißen rs_matrix2x2, rs_matrix3x3 und rs_matrix4x4. Eine Liste der Vorgänge finden Sie unter Matrixfunktionen.
Quaternion werden auch über rs_quaternion unterstützt. Die Liste der Vorgänge finden Sie unter Quaterionsfunktionen.
Typen | |
---|---|
char2 | Zwei ganze 8-Bit-Ganzzahlen mit Vorzeichen |
char3 | Drei vorzeichenbehaftete 8-Bit-Ganzzahlen |
char4 | Vier ganze 8-Bit-Ganzzahlen mit Vorzeichen |
Double2 | Zwei 64-Bit-Gleitkommazahlen |
double3 | Drei 64-Bit-Gleitkommazahlen |
Double4 | Vier 64-Bit-Gleitkommazahlen |
Gleitkommazahl2 | Zwei 32-Bit-Gleitkommazahlen |
Gleitkommazahl3 | Drei 32-Bit-Gleitkommazahlen |
Gleitkommazahl4 | Vier 32-Bit-Gleitkommazahlen |
die Hälfte | 16-Bit-Gleitkommawert |
Hälft2 | Zwei 16-Bit-Gleitkommazahlen |
Hälft3 | Drei 16-Bit-Gleitkommazahlen |
Hälft4 | Vier 16-Bit-Gleitkommazahlen |
int16_t | Vorzeichenbehaftete 16-Bit-Ganzzahl |
int2 | Zwei ganze 32-Bit-Ganzzahlen mit Vorzeichen |
int3 | Drei vorzeichenbehaftete 32-Bit-Ganzzahlen |
int32_t | Vorzeichenbehaftete 32-Bit-Ganzzahl |
int4 | Vier ganze 32-Bit-Ganzzahlen mit Vorzeichen |
int64_t | Vorzeichenbehaftete 64-Bit-Ganzzahl |
int8_t | Vorzeichenbehaftete 8-Bit-Ganzzahl |
long2 | Zwei ganze 64-Bit-Ganzzahlen mit Vorzeichen |
long3 | Drei vorzeichenbehaftete 64-Bit-Ganzzahlen |
long4 | Vier ganze 64-Bit-Ganzzahlen mit Vorzeichen |
rs_matrix2x2 | 2x2-Matrix aus 32-Bit-Gleitkommazahlen |
rs_matrix3x3 | 3x3-Matrix aus 32-Bit-Gleitkommazahlen |
rs_matrix4x4 | 4x4-Matrix aus 32-Bit-Gleitkommazahlen |
rs_quaternion | Quaternion |
Kurz2 | Zwei ganze 16-Bit-Ganzzahlen mit Vorzeichen |
Kurz3 | Drei vorzeichenbehaftete 16-Bit-Ganzzahlen |
Kurz4 | Vier Ganzzahlen mit Vorzeichen (16 Bit) |
size_t [Größe] | Nicht signierter Größentyp |
ssize_t [Größe_T] | Typ der signierten Größe |
Uchar | Vorzeichenlose 8-Bit-Ganzzahl |
Uchar2 | Zwei vorzeichenlose 8-Bit-Zahlen |
Uchar3 | Drei vorzeichenlose 8-Bit-Ganzzahlen |
Uchar 4 | Vier vorzeichenlose 8-Bit-Ganzzahlen |
Uint | Vorzeichenlose 32-Bit-Ganzzahl |
uint16_t | Vorzeichenlose 16-Bit-Ganzzahl |
Uint2 | Zwei vorzeichenlose 32-Bit-Zahlen |
uint3 | Drei vorzeichenlose 32-Bit-Zahlen |
uint32_t | Vorzeichenlose 32-Bit-Ganzzahl |
uint4 | Vier vorzeichenlose 32-Bit-Ganzzahlen |
uint64_t | Vorzeichenlose 64-Bit-Ganzzahl |
uint8_t | Vorzeichenlose 8-Bit-Ganzzahl |
Ulong | Vorzeichenlose 64-Bit-Ganzzahl |
Ulong2 | Zwei vorzeichenlose 64-Bit-Zahlen |
Ulong3 | Drei vorzeichenlose 64-Bit-Ganzzahlen |
Ulong4 | Vier vorzeichenlose 64-Bit-Ganzzahlen |
Ushort | Vorzeichenlose 16-Bit-Ganzzahl |
Ushort2 | Zwei vorzeichenlose 16-Bit-Zahlen |
Ushort3 | Drei vorzeichenlose 16-Bit-Ganzzahlen |
Ushort4 | Vier vorzeichenlose 16-Bit-Ganzzahlen |
Objekttypen
Mit den folgenden Typen können Sie RenderScript-Objekte wie Zuweisungen, Sampler, Elemente und Skripts bearbeiten. Die meisten dieser Objekte werden mit den Java RenderScript-APIs erstellt.
Typen | |
---|---|
rs_allocation | Handle mit einer Zuweisung |
rs_allocation_cubemap_face | Enum-Option zur Auswahl von Würfel-Kartenelementen |
rs_allocation_usage_type | Bitfeld zur Angabe, wie eine Zuweisung verwendet wird |
rs_data_kind | Elementdatenart |
rs_data_type | Grundlegender Datentyp des Elements |
rs_element | Ziehpunkt zu einem Element |
rs_sampler | Zugriff auf einen Sampler |
rs_sampler_value | T-Wert für Sampler-Wrapping |
RS-Script | Umgang mit einem Script |
rs_type | Handle zu einem Typ |
rs_yuv_format | YUV-Format |
Konvertierungsfunktionen
Die folgenden Funktionen konvertieren von einem numerischen Vektortyp in einen anderen oder von einer Farbdarstellung in einen anderen.
Funktionen | |
---|---|
konvertieren | Numerische Vektoren umwandeln |
rsPackColorTo8888 | uchar4-RGBA aus Gleitkommazahlen erstellen |
rsUnpackColor8888 | RGBA-Fließ4 (Gleitkommazahl) aus uchar4 erstellen |
rsYuvToRGBA | YUV-Wert in RGBA umwandeln |
Mathematische Konstanten und Funktionen
Die unten aufgeführten mathematischen Funktionen können auf Skalare und Vektoren angewendet werden. Bei Anwendung auf Vektoren ist der zurückgegebene Wert ein Vektor der Funktion, die auf jeden Eintrag der Eingabe angewendet wird.
Beispiel:
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);
Unter Mathematische Vektorfunktionen finden Sie Informationen zu Funktionen wie distance() und length(), die stattdessen die Eingabe als einzelnen Vektor im n-dimensionalen Bereich interpretieren.
Die Genauigkeit der mathematischen Operationen in 32-Bit-Gleitkommazahlen wird von den Pragmas rs_fp_relaxed und rs_fp_full beeinflusst. Unter rs_fp_relaxed können subnormale Werte auf null geleert und gegen null gerundet werden. Im Gegensatz dazu erfordert rs_fp_full eine korrekte Verarbeitung von subnormalen Werten, d. h. kleiner als 1, 17549435e-38f. erfordert rs_fp_rull außerdem eine Rundung auf die nächste und eine gleichmäßige Aufstellung.
Mithilfe von Varianten gängiger mathematischer Funktionen können unterschiedliche Kompromisse bei Genauigkeit und Geschwindigkeit erreicht werden. Funktionen mit einem Namen, der mit
- native_: Kann benutzerdefinierte Hardwareimplementierungen mit geringerer Genauigkeit haben. Darüber hinaus können subnormale Werte auf null bereinigt werden, eine Rundung in Richtung Null kann verwendet werden und die Eingabe von NaN und Unendlichkeit wird möglicherweise nicht korrekt verarbeitet.
- halb_: Kann interne Berechnungen mit 16-Bit-Gleitkommazahlen durchführen. Darüber hinaus können subnormale Werte auf null bereinigt und gegen null gerundet werden.
Konstanten | |
---|---|
M_1_PI | 1 / Pi als 32-Bit-Gleitkommazahl |
M_2_PI | 2 / Pi als 32-Bit-Gleitkommazahl |
M_2_WURZEL | 2 / Qrt(Pi) als 32-Bit-Gleitkommazahl |
M_E | e als 32-Bit-Gleitkommazahl |
M_LN10 | log_e(10), als 32-Bit-Gleitkommazahl |
M_LN2 | log_e(2) als 32-Bit-Gleitkommazahl |
M_LOG10E | log_10(e) als 32-Bit-Gleitkommazahl |
M_LOG2E | log_2(e) als 32-Bit-Gleitkommazahl |
M_PI | Pi als 32-Bit-Gleitkommazahl |
M_PI_2 | Pi / 2 als 32-Bit-Gleitkommazahl |
M_PI_4 | Pi / 4 als 32-Bit-Gleitkommazahl |
M_SQRT1_2 | 1 / QRT(2) als 32-Bit-Gleitkommazahl |
M_WURZEL2 | QRT(2) als 32-Bit-Gleitkommazahl |
Funktionen | |
---|---|
Bauchmuskeln | Absoluter Wert einer Ganzzahl |
acos | Inverser Kosinus |
acosh | Inverser hyperbolischer Kosinus |
Acospi | Inverser Kosinus geteilt durch Pi |
assinen | Inverser Sinus |
Asinh | Inverser hyperbolischer Sinus |
Asinpi | Umkehrsinus geteilt durch Pi |
Atan | Umgekehrter Tangens |
atan2 | Umgekehrter Tangens eines Verhältnisses |
atan2pi | Umgekehrter Tangens eines Verhältnisses, geteilt durch Pi |
Atanh | Umgekehrter hyperbolischer Tangens |
Atanpi | Umgekehrter Tangens geteilt durch Pi |
cbrt | Kubikwurzel |
Ceil | Kleinste Ganzzahl, die nicht kleiner als ein Wert ist |
Klemme | Wert auf einen Bereich beschränken |
clz | Anzahl der führenden 0-Bits |
Kopierzeichen | Kopiert das Vorzeichen einer Zahl auf eine andere |
cos | Kosinus |
Cosh | Hypebolischer Kosinus |
cospi | Kosinus einer Zahl multipliziert mit Pi |
Grad | Wandelt Bogenmaß (Radiant) in Grad um |
erf | Mathematische Fehlerfunktion |
erFC | Mathematische komplementäre Fehlerfunktion |
test | e auf eine Zahl erhöht |
Test 10 | 10 als Zahl erhöht |
Test 2 | 2 ist eine Zahl |
expm1: | e wird auf eine Zahl minus eins erhöht |
Fabs | Absoluter Wert einer Gleitkommazahl |
FDIM | Positive Differenz zwischen zwei Werten |
Etage | Kleinste Ganzzahl, die nicht größer als ein Wert ist |
FMA | Multiplizieren und addieren |
fmax | Maximal zwei Gleitkommazahlen |
FMIN | Mindestens zwei Gleitkommazahlen |
Fmod | Modulo |
Fakt | Positiver Bruchteil |
frexp | Binäre Mantisse und Exponent |
half_recip | Gegenseitig berechnet, berechnet auf 16-Bit-Genauigkeit |
half_rsqrt | Kehrwert einer Quadratwurzel, berechnet auf 16-Bit-Genauigkeit |
half_sqrt | Quadratwurzel, berechnet auf 16-Bit-Genauigkeit |
Hypot | Hypotenuse |
ilogb | Basis 2-Exponent |
ldexp | Erstellt einen Gleitkommawert aus Mantissen und Exponenten |
Lgamma | Natürlicher Logarithmus der Gammafunktion |
log | Natürlicher Logarithmus |
log10 | Logarithmus zur Basis 10 |
log1p | Natürlicher Logarithmus eines Werts plus 1 |
log2 | Logarithmus zur Basis 2 |
Logb | Basis 2-Exponent |
verrückt | Multiplizieren und addieren |
max. | Maximum |
Min. | Minimum |
Mix | Es vermischt zwei Werte |
modf | Integral- und Bruchkomponenten |
Nan | Keine Zahl |
nan_half | Keine Zahl |
native_acos | Ungefährer Arkuskosinus |
native_acosh | Ungefährer umgekehrter hyperbolischer Kosinus |
native_acospi | Ungefährer Arkuskosinus geteilt durch Pi |
native_asin | Ungefährer Arkussinus |
native_asinh | Ungefährer umgekehrter hyperbolischer Sinus |
native_asinpi | Ungefährer Arkussinus geteilt durch Pi |
native_atan | Ungefährer inverser Tangens |
native_atan2 | Ungefährer inverser Tangens eines Verhältnisses |
native_atan2pi | Ungefährer inverser Tangens eines Verhältnisses, geteilt durch Pi |
native_atanh | Ungefährer umgekehrter hyperbolischer Tangens |
native_atanpi | Ungefährer umgekehrter Tangens geteilt durch Pi |
native_cbrt | Ungefähre Kubikwurzel |
native_cos | Ungefährer Kosinus |
native_cosh | Ungefährer hypebolischer Kosinus |
native_cospi | Ungefährer Kosinus einer Zahl multipliziert mit Pi |
native_divide | Ungefähre Division |
native_exp | Ungefähre Zahl, e |
native_exp10 | Ungefähr 10 erhöht auf eine Zahl |
native_exp2 | Ungefähr 2 erhöht auf eine Zahl |
native_expm1 | Geschätzter e-Wert auf eine Zahl minus eins erhöht |
native_Hypot | Ungefähre Hypotenuse |
native_log | Ungefährer natürlicher Logarithmus |
native_log10 | Logarithmus zur Basis 10 |
native_log1p | Ungefährer natürlicher Logarithmus eines Werts plus 1 |
native_log2 | Logarithmus zur Basis 2 |
native_powr | Ungefähre positive Basis mit einem Exponenten potenziert |
native_Rezepte | Annähernd reziprok |
native_rootn | Ungefähre n-te Wurzel |
native_rsqrt | Ungefähre Kehrzahl einer Quadratwurzel |
native_sin | Ungefährer Sinus |
native_sincos | Ungefährer Sinus und Kosinus |
native_sinh | Ungefährer hyperbolischer Sinus |
native_sinpi | Ungefährer Sinus einer Zahl multipliziert mit Pi |
native_sqrt | Ungefähre Quadratwurzel |
native_Hellbraun | Ungefährer Tangens |
native_tanh | Ungefährer hyperbolischer Tangens |
native_tanpi | Ungefährer Tangens einer Zahl multipliziert mit Pi |
Weiternach | Nächste Gleitkommazahl |
pow | Die Basis wird mit einem Exponenten potenziert. |
Pown | Die Basis wird auf einen ganzzahligen Exponenten potenziert. |
Powr | Positive Basis mit einem Exponenten potenziert |
Radiant | Wandelt Grad in Bogenmaß um |
Rest | Rest einer Division |
Remquo | Rest und Quotient einer Division |
RRT | Runden auf gleichmäßig |
Rooten | N-te Wurzel |
rund | Von null aufrunden |
RSRand | Pseudozufallszahl |
RSQRT | Kehrwert einer Quadratwurzel |
Zeichen | Vorzeichen eines Werts |
Sin | Sinus |
Sincos | Sinus und Kosinus |
Sinh | Hyperbolischer Sinus |
Sinpi | Sinus einer Zahl multipliziert mit Pi |
SQRT | Quadratwurzel |
Schritt | 0, falls kleiner als ein Wert, andernfalls 0 |
Hellbraun | Tangens |
Tanh | Hyperbolischer Tangens |
Tanpi | Tangens einer Zahl mit Pi |
Tgamma | Gammafunktion |
Trunk | Kürzt einen Gleitkommawert |
Mathematische Vektorfunktionen
Diese Funktionen interpretieren die Eingabeargumente als Darstellung von Vektoren im n-dimensionalen Bereich.
Die Genauigkeit der mathematischen Operationen in 32-Bit-Gleitkommazahlen wird von den Pragmas rs_fp_relaxed und rs_fp_full beeinflusst. Weitere Informationen finden Sie unter Mathematische Konstanten und Funktionen.
Mithilfe von Varianten gängiger mathematischer Funktionen können unterschiedliche Kompromisse bei Genauigkeit und Geschwindigkeit erreicht werden. Funktionen mit einem Namen, der mit
- native_: Kann benutzerdefinierte Hardwareimplementierungen mit geringerer Genauigkeit haben. Darüber hinaus können subnormale Werte auf null bereinigt werden, eine Rundung in Richtung Null kann verwendet werden und die Eingabe von NaN und Unendlichkeit wird möglicherweise nicht korrekt verarbeitet.
- fast_: Kann interne Berechnungen mit 16-Bit-Gleitkommazahlen ausführen. Darüber hinaus können subnormale Werte auf null bereinigt und gegen null gerundet werden.
Funktionen | |
---|---|
Kreuz | Kreuzprodukt zweier Vektoren |
Entfernung | Entfernung zwischen zwei Punkten |
Punkt | Punktprodukt zweier Vektoren |
fast_distance | Ungefähre Entfernung zwischen zwei Punkten |
fast_length (schnelle_Länge) | Ungefähre Länge eines Vektors |
fast_normalize | Ungefährer normalisierter Vektor |
Länge | Länge eines Vektors |
native_distance | Ungefähre Entfernung zwischen zwei Punkten |
native_length (native_Länge) | Ungefähre Länge eines Vektors |
native_normalisieren | Einen Vektor ungefähr normalisieren |
normalisieren | Vektoren normalisieren |
Matrixfunktionen
Mit diesen Funktionen können Sie quadratische Matrizen des Rangs 2x2, 3x3 und 4x4 bearbeiten. Sie sind besonders nützlich für grafische Transformationen und sind mit OpenGL kompatibel.
Wir verwenden einen nullbasierten Index für Zeilen und Spalten. Das letzte Element einer rs_matrix4x4 befindet sich z.B. bei (3, 3).
RenderScript verwendet spaltenorientierte Matrizen und spaltenbasierte Vektoren. Ein Vektor wird durch Nachmultiplikation des Vektors transformiert, z.B. mit (matrix * vector)
, wie von rsMatrixMultiply() bereitgestellt.
Multiplizieren Sie die beiden Quellmatrizen, um eine Transformationsmatrix zu erstellen, die zwei Transformationen gleichzeitig ausführt, wobei die erste Transformation das rechte Argument ist. Um beispielsweise eine Transformationsmatrix zu erstellen, die die Transformation s1 gefolgt von s2 anwendet, rufen Sie rsMatrixLoadMultiply(&combined, &s2, &s1)
auf.
Sie leitet sich von s2 * (s1 * v)
ab, was (s2 * s1) * v
ist.
Zum Erstellen von Transformationsmatrizen gibt es zwei Arten von Funktionen: rsMatrixLoadTransformation und rsMatrixTransformation. Beim erstgenannten Stil wird die Transformationsmatrix einfach im ersten Argument gespeichert. Letzterer modifiziert eine bereits vorhandene Transformationsmatrix so, dass die neue Transformation zuerst stattfindet. Wenn Sie beispielsweise rsMatrixTranslate() für eine Matrix aufrufen, die bereits eine Skalierung ausführt, führt die resultierende Matrix bei Anwendung auf einen Vektor zuerst die Übersetzung und dann die Skalierung durch.
Funktionen | |
---|---|
rsExtractFrustumPlanes | Sichtbereichebenen berechnen |
rsIsSphereInFrustum | Prüft, ob sich eine Kugel innerhalb der Sichtbereichebenen befindet |
rsMatrixGet | Ein Element abrufen |
rsMatrixInverse | Invertiert eine vorhandene Matrix |
rsMatrixInverseTranspose | Eine vorhandene Matrix invertieren und transponieren |
rsMatrixLoad | Matrix laden oder kopieren |
rsMatrixLoadFrustum | Sichtbereichsmatrix laden |
rsMatrixLoadIdentity | Identitätsmatrix laden |
rsMatrixLoadMultiply | Zwei Matrizen multiplizieren |
rsMatrixLoadOrtho | orthografische Projektionsmatrix laden |
rsMatrixLoadPerspective | Perspektivische Projektionsmatrix laden |
rsMatrixLoadRotieren | Rotationsmatrix laden |
rsMatrixLoadScale | Skalierungsmatrix laden |
rsMatrixLoadTranslate | Übersetzungsmatrix laden |
rsMatrixMultiply | Eine Matrix mit einem Vektor oder einer anderen Matrix multiplizieren |
rsMatrixRotieren | Rotation auf eine Transformationsmatrix anwenden |
rsMatrixScale | Skalierung auf eine Transformationsmatrix anwenden |
rsMatrixSet | Ein Element festlegen |
rsMatrixTranslate | Übersetzung auf eine Transformationsmatrix anwenden |
rsMatrixTranspose | Matrixort transponieren |
Quaternionfunktionen
Die folgenden Funktionen bearbeiten Quaternionen.
Funktionen | |
---|---|
rsQuaternionAdd | Zwei Quaternionen addieren |
rsQuaternionConjugate | Ein Quaternion konjugieren |
RSQuaternionDot | Punktprodukt zweier Quaternionen |
rsQuaternionGetMatrixUnit | Rotationsmatrix aus einem Quaternion erhalten |
rsQuaternionLoadRotation | Rotationsquaternion erstellen |
rsQuaternionLoadRotUnit | Quaternion, die eine Rotation um einen beliebigen Einheitsvektor darstellt |
rsQuaternionMultiply | Ein Quaternion mit einem Skalar oder einem anderen Quaternion multiplizieren |
rsQuaternionNormalize | Quaternion normalisieren |
rsQuaternionSet | Quaternion erstellen |
rsQuaternionSlerp | Sphärische lineare Interpolation zwischen zwei Quaternionen |
Funktionen für atomare Updates
Verwenden Sie die folgenden Funktionen, um Werte zu aktualisieren, die von mehreren Threads gemeinsam genutzt werden. Sie sorgen dafür, dass die Werte atomar aktualisiert werden, d.h., dass die Arbeitsspeicherlesevorgänge, die Aktualisierungen und die Schreibvorgänge im Arbeitsspeicher in der richtigen Reihenfolge ausgeführt werden.
Diese Funktionen sind langsamer als ihre nicht atomaren Äquivalente und sollten daher nur verwendet werden, wenn eine Synchronisierung erforderlich ist.
In RenderScript wird Ihr Code wahrscheinlich in separaten Threads ausgeführt, auch wenn Sie sie nicht explizit erstellt haben. In der RenderScript-Laufzeit wird die Ausführung eines Kernels sehr oft auf mehrere Threads aufgeteilt. Das Aktualisieren globaler Elemente sollte mit atomaren Funktionen erfolgen. Ändern Sie nach Möglichkeit den Algorithmus, um sie ganz zu vermeiden.
Funktionen | |
---|---|
rsAtomicAdd | Threadsicheres Hinzufügen |
rsAtomicAnd | Thread-sicher – bitweise und |
rsAtomicCas | Threadsicheres Vergleichen und Festlegen |
rsAtomicDe | Threadsicheres Dekrementieren |
rsAtomic Inc. | Threadsicheres Inkrement |
rsAtomicMax | Thread-sicheres Maximum |
rsAtomicMin | Thread-sicheres Minimum |
rsAtomicOr | Thread-sicher – bitweises oder |
rsAtomicSub | Threadsichere Subtraktion |
rsAtomicXor | Threadsicheres bitweises Exklusiv- oder |
Zeitfunktionen und -typen
Mit den folgenden Funktionen können die aktuelle Uhrzeit und die aktuelle Systembetriebszeit ermittelt werden. Es wird nicht empfohlen, diese Funktionen innerhalb eines Kernels aufzurufen.
Typen | |
---|---|
rs_time_t | Sekunden seit 1. Januar 1970 |
rs_tm | Struktur von Datum und Uhrzeit |
Funktionen | |
---|---|
rsGetDt | Seit dem letzten Anruf verstrichene Zeit |
rsOrtszeit | In Ortszeit umrechnen |
rsTime | Sekunden seit 1. Januar 1970 |
rsUptimeMillis | Systembetriebszeit in Millisekunden |
rsUptimeNanos | Systemverfügbarkeit in Nanosekunden |
Funktionen zum Erstellen von Zuweisungen
Mit den folgenden Funktionen können Sie Zuweisungen aus einem Script erstellen.
Diese Funktionen können direkt oder indirekt von einer aufrufbaren Funktion aus aufgerufen werden. Wenn ein bestimmter Ablaufpfad zu einem Aufruf dieser Funktionen über eine RenderScript-Kernelfunktion führen kann, wird ein Compilerfehler generiert.
Funktionen | |
---|---|
rsCreateAllocation | Erstellt ein rs_allocation-Objekt des angegebenen Typs. |
rsCreateElement | Erstellt ein rs_element-Objekt des angegebenen Datentyps |
rsCreatePixelElement | Erstellt ein rs_element-Objekt des angegebenen Datentyps und der angegebenen Datentyp |
rsCreateType: | Erstellt ein rs_type-Objekt mit den angegebenen Element- und Formattributen. |
rsCreateVectorElement | Erstellt ein rs_element-Objekt mit dem angegebenen Datentyp und der Vektorbreite |
Zugriffsfunktionen für Zuordnungsdaten
Mit den folgenden Funktionen können Sie die Zellen einer Zuweisung abrufen und festlegen.
- Der Zugriff auf einzelne Zellen wird mit den Funktionen rsGetElementAt* und rsSetElementAt durchgeführt.
- Mit den Funktionen rsAllocationCopy* und rsAllocationV* können Sie mehrere Zellen kopieren.
- Verwenden Sie rsSample, um Werte über einen Sampler abzurufen.
Funktionen | |
---|---|
rsAllocationCopy1DRange | Aufeinanderfolgende Zellen zwischen Zuweisungen kopieren |
rsAllocationCopy2DRange | Rechteckigen Bereich von Zellen zwischen Zuweisungen kopieren |
rsAllocationVLoadX | Einen Vektor aus einer Zuweisung von Skalaren abrufen |
rsAllocationVStoreX | Einen Vektor in einer Zuordnung von Skalaren speichern |
rsGetElementAt | Zelle aus einer Zuweisung zurückgeben |
rsGetElementAtYuv_uchar_U | U-Komponente einer Zuweisung von YUVs abrufen |
rsGetElementAtYuv_uchar_V | V-Komponente einer Zuweisung von YUVs abrufen |
rsGetElementAtYuv_uchar_Y | Y-Komponente einer Zuweisung von YUVs abrufen |
RSSample | Wert aus einer Texturzuordnung abfragen |
rsSetElementAt | Zelle einer Zuweisung festlegen |
Objektmerkmalfunktionen
Mit den folgenden Funktionen können Sie die Eigenschaften eines Allocation-, Element- oder Sampler-Objekts abfragen. Diese Objekte werden aus Java erstellt. Sie können sie nicht aus einem Skript erstellen.
Zuweisungen:
Zuweisungen sind die primäre Methode, um Daten an und von RenderScript-Kerneln zu übergeben.
Sie sind eine strukturierte Sammlung von Zellen, in denen Bitmaps, Texturen, beliebige Datenpunkte usw. gespeichert werden können.
Diese Sammlung von Zellen kann viele Dimensionen (X, Y, Z, Array0, Array1, Array2, Array3), Flächen (für Cubemaps) und Detailebenen (für Mipmapping) haben.
Weitere Informationen zum Erstellen von Zuweisungen finden Sie unter android.renderscript.Allocation.
Elemente:
Der Begriff "Element" wird in RenderScript etwas mehrdeutig verwendet, da sowohl Typinformationen für die Zellen einer Zuordnung als auch die Instanziierung dieses Typs verwendet werden. Beispiele:
- rs_element ist ein Handle zu einer Typspezifikation und
- In Funktionen wie rsGetElementAt() bezeichnet „element“ die Instanziierung des Typs, also eine Zelle einer Zuordnung.
Mit den folgenden Funktionen können Sie die Eigenschaften der Typspezifikation abfragen.
Ein Element kann einfache Datentypen wie in C enthalten, z.B. eine Ganzzahl, eine Gleitkommazahl oder einen booleschen Wert. Außerdem kann ein Handle für ein RenderScript-Objekt angegeben werden. Eine Liste der Basistypen finden Sie unter rs_data_type.
In den Elementen können Vektorversionen mit fester Größe (Größe 2, 3 oder 4) der Basistypen angegeben werden. Elemente können zu komplexen Elementen gruppiert werden und entsprechen so den C-Strukturdefinitionen.
Elemente können auch eine Art haben. Dabei handelt es sich um semantische Informationen, die zur Interpretation von Pixeldaten verwendet werden. Siehe rs_data_kind.
Beim Erstellen von Zuordnungen gängiger Elemente können Sie einfach eines der vielen vordefinierten Elemente wie F32_2 verwenden.
Verwenden Sie die Java-Klasse Element.Builder, um komplexe Elemente zu erstellen.
Sampler:
Sampler-Objekte definieren, wie Zuweisungen als Struktur innerhalb eines Kernels gelesen werden können. Siehe android.renderscript.S.
Funktionen | |
---|---|
rsAllocationGetDimFaces | Vorhandensein mehrerer Gesichter |
rsAllocationGetDimLOD | Hohe Detailgenauigkeit |
rsAllocationGetDimX | Größe der Dimension „X“ |
rsAllocationGetDimY | Größe der Y-Dimension |
rsAllocationGetDimZ | Größe der Z-Dimension |
rsAllocationGetElement | Objekt abrufen, das die Zelle einer Zuweisung beschreibt |
RSClearObject | Objekt freigeben |
rsElementGetBytesSize | Größe eines Elements |
rsElementGetDataKind | Art eines Elements |
rsElementGetDataType | Datentyp eines Elements |
rsElementGetSubElement | Unterelement eines komplexen Elements |
rsElementGetSubElementArraySize | Arraygröße eines Unterelements eines komplexen Elements |
rsElementGetSubElementCount | Anzahl der Unterelemente |
rsElementGetSubElementName | Name eines Unterelements |
rsElementGetSubElementNameLength | Länge des Namens eines Unterelements |
rsElementGetSubElementOffsetBytes | Offset des instanziierten Unterelements |
rsElementGetVectorSize | Vektorgröße des Elements |
rsIsObject | Nach einem leeren Alias suchen |
rsSamplerGetAnisotropy | Anisotropie des Samplers |
rsSamplerGetMagnification | Sampler-Vergrößerungswert |
rsSamplerGetMinification | Sampler-Minifizierungswert |
rsSamplerGetWrapS | S-Wert für Sampler-Wrapping |
rsSamplerGetWrapT | T-Wert für Sampler-Wrapping |
Kernel-Aufruffunktionen und -typen
Mit der Funktion rsForEvery() kann der Stammkernel eines Skripts aufgerufen werden.
Mit den anderen Funktionen werden die Eigenschaften des Aufrufs eines ausgeführten Kernels abgerufen, z. B. Dimensionen und aktuelle Indexe. Diese Funktionen verwenden einen rs_kernel_context als Argument.
Typen | |
---|---|
rs_for_each_strategy_t | Vorgeschlagener Zellverarbeitungsauftrag |
rs_kernel | Handle zu einer Kernelfunktion |
rs_kernel_context | Umgang mit einem Kernelaufrufkontext |
rs_script_call_t | Informationen zur Zellenwiederholung |
Funktionen | |
---|---|
rsForEvery | Startet einen Kernel |
rsForEveryInternal | (Interne API) Einen Kernel im aktuellen Skript starten (mit der Slotnummer) |
rsForEveryWithOptions | Startet einen Kernel mit Optionen |
rsGetArray0 | Index in der Array0-Dimension für den angegebenen Kernelkontext |
rsGetArray1 | Index in der Dimension „Array1“ für den angegebenen Kernelkontext |
rsGetArray2 | Index in der Array2-Dimension für den angegebenen Kernelkontext |
rsGetArray3 | Index in der Array3-Dimension für den angegebenen Kernelkontext |
rsGetDimArray0 | Größe der Array0-Dimension für den angegebenen Kernelkontext |
rsGetDimArray1 | Größe der Array1-Dimension für den angegebenen Kernelkontext |
rsGetDimArray2 | Größe der Array2-Dimension für den angegebenen Kernelkontext |
rsGetDimArray3 | Größe der Array3-Dimension für den angegebenen Kernelkontext |
RSGetDimHasFaces | Vorhandensein von mehr als einem Gesicht für den angegebenen Kernelkontext |
rsGetDimLod | Anzahl der Detailebenen für den angegebenen Kernelkontext |
rsGetDimX | Größe der X-Dimension für den angegebenen Kernelkontext |
„rsGetDimY“ | Größe der Y-Dimension für den angegebenen Kernelkontext |
RSGetDimZ | Größe der Z-Dimension für den angegebenen Kernel-Kontext |
rsGetFace | Koordinate des Gesichts für den angegebenen Kernel-Kontext |
RSGetLod | Index in der Dimension „Detailebenen“ für den angegebenen Kernel-Kontext |
Eingabe-/Ausgabefunktionen
Diese Funktionen werden verwendet, um:
- Informationen an den Java-Client senden und
- Senden Sie die verarbeitete Zuweisung oder erhalten Sie die nächste Zuweisung, die verarbeitet werden soll.
Funktionen | |
---|---|
rsAllocationIoReceive | Neue Inhalte aus der Wiedergabeliste empfangen |
rsAllocationIoSend | Neue Inhalte an die Warteschlange senden |
rsSendToClient | Eine nicht blockierende Nachricht an den Client senden |
rsSendToClientBlocking | Nachricht an den Client senden, Blockierung: |
Debugging-Funktionen
Die folgenden Funktionen sind für die Entwicklung von Anwendungen vorgesehen. Sie sollten nicht für den Versand verwendet werden.
Funktionen | |
---|---|
rsDebug | Nachricht und Werte protokollieren |
Grafikfunktionen und -typen
Das Grafiksubsystem von RenderScript wurde auf API-Level 23 entfernt.