Referenz zur RenderScript Runtime API

Ü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.
Die Funktionen rsGetElementAt und rsSetElement* sind etwas falsch benannt. Sie können keine Elemente abrufen oder festlegen, die Datentypen ähneln. Sie erhalten oder legen Zellen fest. Stellen Sie sich diese als rsGetCellAt und rsSetCellAt vor.

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.