Documentation de référence de l'API RenderScript Runtime

Présentation

RenderScript est un environnement d'exécution hautes performances qui fournit des opérations de calcul au niveau natif. Le code RenderScript est compilé sur les appareils au moment de l'exécution pour permettre également l'indépendance par rapport à la plate-forme.

Cette documentation de référence décrit les API d'exécution RenderScript, que vous pouvez utiliser pour écrire du code RenderScript en C99. Les fichiers d'en-tête de calcul RenderScript sont automatiquement inclus.

Pour utiliser RenderScript, vous devez vous servir des API d'exécution RenderScript décrites ici, ainsi que des API du framework Android pour RenderScript. Pour en savoir plus sur les API du framework Android, consultez la documentation de référence du package android.renderscript.

Pour en savoir plus sur le développement avec RenderScript et sur la manière dont les API d'exécution et du framework Android interagissent, consultez le guide du développeur RenderScript et les exemples RenderScript.

Types numériques

Scalaires:

RenderScript accepte les types numériques scalaires suivants:

8 bits 16 bits 32 bits 64 bits
Entier: car, int8_t court, int16_t int32_t long, long, int64_t
Entier non signé: uchar, uint8_t ushort, uint16_t uint, uint32_t ulong, uint64_t
Virgule flottante: mi-temps float double

Vecteurs:

RenderScript accepte les vecteurs de taille fixe de longueur 2, 3 et 4. Les vecteurs sont déclarés à l'aide du nom de type commun suivi du 2, du 3 ou du 4. Exemple : float4, int3, double2, ulong4.

Pour créer des littéraux vectoriels, utilisez le type de vecteur suivi des valeurs entre accolades (par exemple, (float3){1.0f, 2.0f, 3.0f}).

Il est possible d'accéder aux entrées d'un vecteur en utilisant différents styles de dénomination.

Pour accéder aux entrées uniques, ajoutez un point à la suite du nom de la variable et ajoutez les lignes suivantes:

  • Les lettres x, y, z et w,
  • Les lettres r, g, b et a
  • La lettre s ou S, suivie d'un index basé sur zéro.

Par exemple, avec int4 myVar;, les éléments suivants sont équivalents:
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

Il est possible d'accéder simultanément à plusieurs entrées d'un vecteur à l'aide d'un identifiant qui est la concaténation de plusieurs lettres ou index. La taille du vecteur résultant est égale au nombre d'entrées nommées.

Dans l'exemple ci-dessus, les deux entrées du milieu sont accessibles à l'aide de myVar.yz, myVar.gb, myVar.s12 et myVar.S12.

Les entrées ne doivent pas nécessairement être contiguës ni par ordre croissant. Les entrées peuvent même être répétées, tant que nous n'essayons pas de leur attribuer. Vous ne pouvez pas non plus mélanger les styles d'attribution de noms.

Voici quelques exemples de ce que vous pouvez faire ou non:
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

Matrices et quaternions:

RenderScript accepte les matrices carrées de taille fixe de flottants de taille 2x2, 3x3 et 4x4. Les types sont nommés rs_matrix2x2, rs_matrix3x3 et rs_matrix4x4. Consultez la section Fonctions matricielles pour obtenir la liste des opérations.

Les quaternions sont également compatibles avec rs_quaternion. Consultez la page Fonctions de quantification pour obtenir la liste des opérations.

Types
car2 Deux entiers signés de 8 bits
car3 Trois entiers signés de 8 bits
carac4 Quatre entiers signés de 8 bits
double2 Deux floats 64 bits
double3 Trois flottants 64 bits
double4 Quatre floats 64 bits
float2 Deux floats 32 bits
Flottant 3 Trois flottants 32 bits
Nombre décimal4 Quatre floats 32 bits
moitié Valeur à virgule flottante 16 bits
moitié2 Deux floats 16 bits
demi-3 Trois flottants 16 bits
moitié4 Quatre floats 16 bits
int16_t Entier signé de 16 bits
Int2 Deux entiers signés de 32 bits
Int3 Trois entiers signés de 32 bits
int32_t Entier signé de 32 bits
Int4 Quatre entiers signés de 32 bits
int64_t Entier signé de 64 bits
int8_t Entier signé de 8 bits
longue2 Deux entiers signés de 64 bits
long3 Trois entiers signés de 64 bits
long4 Quatre entiers signés de 64 bits
rs_matrix2x2 Matrice 2 x 2 de floats 32 bits
rs_matrix3x3 Matrice 3 x 3 de floats 32 bits
rs_matrix4x4 Matrice 4 x 4 de floats 32 bits
quaternion_rs Quaternion
courte2 Deux entiers signés de 16 bits
courte3 Trois entiers signés de 16 bits
courte4 Quatre entiers signés de 16 bits
taille_t Type de coupe non signé
taille_t Type de taille signée
uchar Entier non signé de 8 bits
uchar2 Deux entiers non signés de 8 bits
uchar3 Trois entiers non signés de 8 bits
uchar4 Quatre entiers non signés de 8 bits
uint Entier non signé de 32 bits
uint16_t. Entier non signé de 16 bits
uint2 Deux entiers non signés de 32 bits
uint3 Trois entiers non signés de 32 bits
uint32_t Entier non signé de 32 bits
uint4 Quatre entiers non signés de 32 bits
uint64_t Entier non signé de 64 bits
uint8_t Entier non signé de 8 bits
ulong Entier non signé de 64 bits
ulong2 Deux entiers non signés de 64 bits
ulong3 Trois entiers non signés de 64 bits
ulong4 Quatre entiers non signés de 64 bits
ushort Entier non signé de 16 bits
ushort2 Deux entiers non signés de 16 bits
ushort3 Trois entiers non signés de 16 bits
ushort4 Quatre entiers non signés de 16 bits

Types d'objets

Les types ci-dessous sont utilisés pour manipuler des objets RenderScript tels que les allocations, les échantillonneurs, les éléments et les scripts. La plupart de ces objets sont créés à l'aide des API Java RenderScript.

Types
rs_allocation Gérer une allocation
rs_allocation_cubemap_face Énumération pour la sélection de faces en forme de cube
rs_allocation_usage_type Champ de bits permettant de spécifier le mode d'utilisation d'une allocation
rs_data_kind Type de données de l'élément
rs_data_type Type de données de base de l'élément
rs_element Gérer un élément
rs_sampler Traiter un échantillonneur
rs_sampler_value Valeur T de l'encapsulation de l'échantillonneur
script rs Traiter un script
rs_type Appliquer une poignée à un type
rs_yuv_format. Format YUV

Fonctions de conversion

Les fonctions ci-dessous convertissent un type de vecteur numérique à un autre, ou une représentation couleur à une autre.

Fonctions
convertir Convertir des vecteurs numériques
rsPackColorTo8888 Créer un RVBA uchar4 à partir de floats
rsUnpackColor8888 Créer un RVBA float4 à partir de uchar4
rsYuvToRVBA Convertir une valeur YUV en RVBA

Constantes et fonctions mathématiques

Les fonctions mathématiques ci-dessous peuvent être appliquées aux scalaires et aux vecteurs. Lorsqu'elle est appliquée à des vecteurs, la valeur renvoyée est un vecteur de la fonction appliquée à chaque entrée de l'entrée.

Exemple:
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);

Consultez la section Fonctions de mathématiques vectorielles pour obtenir des fonctions telles que distance() et length() qui interprètent plutôt l'entrée comme un vecteur unique dans un espace à N dimensions.

La précision des opérations mathématiques sur les floats 32 bits est affectée par les pragmas rs_fp_relaxed et rs_fp_full. Sous rs_fp_relaxed, les valeurs subnormales peuvent être vidées à zéro et les valeurs arrondies peuvent être arrondies vers zéro. En comparaison, rs_fp_full nécessite de traiter correctement les valeurs subnormales, c'est-à-dire inférieures à 1,17549435e-38f. rs_fp_rull nécessite également d'arrondir au plus proche avec des relations égales à pair.

Différents compromis de précision/vitesse peuvent être obtenus en utilisant des variantes des fonctions mathématiques courantes. Fonctions dont le nom commence par

  • native_: peut disposer d'implémentations matérielles personnalisées avec une précision plus faible. En outre, les valeurs subnormales peuvent être vidées à zéro, les valeurs arrondies vers zéro peuvent être utilisées, et les valeurs NaN et infinies peuvent ne pas être gérées correctement.
  • Half_: peut effectuer des calculs internes à l'aide de floats 16 bits. En outre, les valeurs inférieures à zéro peuvent être arrondies à zéro.

Constantes
M_1_PI 1 / pi, en tant que valeur flottante de 32 bits
M_2_PI 2 / pi, en tant que float 32 bits
M_2_RACINE.PI 2 / carrée(pi), en tant que float 32 bits
M_E e, sous la forme d'une valeur flottante de 32 bits
M_LN10 log_e(10), sous forme de float 32 bits
M_LN2 log_e(2), sous forme de float 32 bits
M_LOG10E log_10(e), sous forme de float 32 bits
LOG2E_M log_2(e), sous forme de float 32 bits
M_PI pi, sous la forme d'une valeur flottante de 32 bits
M_PI_2 pi / 2, en tant que valeur flottante de 32 bits
M_PI_4 pi / 4, en tant que float 32 bits
M_RACINE1_2 1 / carrée(2), en tant que float 32 bits
M_RACINE2 sqrt(2), en tant que valeur flottante de 32 bits
Fonctions
abdos Valeur absolue d'un entier
Acos Cosinus inverse
Acosh Cosinus hyperbolique inverse
Acospi Cosinus inverse divisé par pi
asin Sinus inverse
Asinh Sinus hyperbolique inverse
Asinpi Sinus inverse divisé par pi
TAtan Tangente inversée
Atan2 Tangente inverse d'un ratio
atan2pi Tangente inverse d'un ratio, divisée par Pi
Atanh Tangente hyperbolique inverse
Atanpi Tangente inverse divisée par Pi
cbrt Racine cubique
ceil Le plus petit nombre entier supérieur ou égal à une valeur
pincer Limiter une valeur à une plage
clz Nombre de 0 bits au début
copier Copie le signe d'un nombre dans un autre
Cs Cosinus
cosh Cosinus hypobolique
Cospi Cosinus d'un nombre multiplié par pi
degrés Convertit des radians en degrés
erf Fonction d'erreur mathématique
ERFC Fonction d'erreur mathématique complémentaire
expérience e élevé à un nombre
"exp10" 10 élevé à un nombre
Exp2 2 élevé à un nombre
expm1 e élevé à un chiffre moins un
fabricants de café Valeur absolue d'un float
FID Différence positive entre deux valeurs
étage Le plus petit nombre entier inférieur à une valeur
FMA Multiplier et ajouter
FMax Deux valeurs flottantes au maximum
Fmin Minimum de deux nombres à virgule flottante
Fmod Module
fracter Partie fractionnaire positive
frexp Mantisse binaire et exposant
demi-récip Calcul réciproque avec une précision de 16 bits
half_rsqrt Réciproque d'une racine carrée calculée avec une précision de 16 bits
half_sqrt Racine carrée calculée avec une précision de 16 bits
hypot Hypoténuse
Ilogb Exposant de base deux
ldexp Crée une valeur à virgule flottante à partir d'une mantisse et de l'exposant
Lgamma Logarithme naturel de la fonction gamma
journal Logarithme naturel
Journal10 Logarithme de base 10
log1p Logarithme naturel d'une valeur plus 1
Journal2 Logarithme de base 2
Logb Exposant de base deux
fou Multiplier et ajouter
max. Maximum
min Minimum
mix Mélange deux valeurs
modf Composants intégraux et fractionnaires
Nan N'est pas un nombre
nan_half N'est pas un nombre
native_acos Cosinus inverse approximatif
native_acosh Cosinus hyperbolique inverse approximatif
native_acospi Cosinus inverse approximatif divisé par pi
native_asin [asin_native] Sinus inverse approximatif
native_asinh Sinus hyperbolique inverse approximatif
native_asinpi Sinus inverse approximatif divisé par pi
native_atan Tangente inverse approximative
native_atan2 Tangente inverse approximative d'un ratio
native_atan2pi Tangente inverse approximative d'un ratio, divisée par Pi
native_atanh Tangente hyperbolique inverse approximative
native_atanpi Tangente inverse approximative divisée par Pi
native_cbrt Racine cubique approximative
native_cos Cosinus approximatif
native_cosh Cosinus hypébolique approximatif
native_cospi Cosinus approximatif d'un nombre multiplié par pi
native_divide Division approximative
native_exp. e approximatif élevé à un nombre
native_exp10. Environ 10 remontées à un nombre donné
native_exp2 Environ 2 élevé à un nombre
native_expm1. E approximatif élevé à un chiffre moins un
native_hypot (hypothèse_native) Hypoténuse approximatif
native_log Logarithme naturel approximatif
log10_native Logarithme en base 10 approximatif
native_log1p Logarithme naturel approximatif d'une valeur plus 1
log_native_2 Logarithme approximatif en base 2
native_powr Base positive approximative élevée à un exposant
native_recip Réciproque approximatif
native_rootn Racine n-ième approximative
native_rsqrt. Réciproque approximatif d'une racine carrée
native_sin (sin_natif) Sinus approximatif
native_sincos Sinus et cosinus approximatifs
native_sinh Sinus hyperbolique approximatif
native_sinpi Sinus approximatif d'un nombre multiplié par pi
native_sqrt. Racine carrée approximative
native_tan Tangente approximative
native_tanh Tangente hyperbolique approximative
native_tanpi Tangente approximative d'un nombre multiplié par pi
Suivant Nombre à virgule flottante suivant
mouve Base élevée à un exposant
Base élevée à un exposant entier
powr Base positive élevée à un exposant
radians Convertit des degrés en radians
reste Reste d'une division
Remquo Reste et quotient d'une division
rincer Arrondir au nombre pair
rootn Racine n-ième
arrondi Arrondi à zéro
rsRand Nombre pseudo-aléatoire
Réciproque d'une racine carrée
signe Signe d'une valeur
sin Sinus
sincos Sinus et cosinus
sinh Sinus hyperbolique
Sinpi Sinus d'un nombre multiplié par Pi
raccourci Racine carrée
pas 0 si inférieur à une valeur, 0 dans le cas contraire
brun clair Tangente
Tanh Tangente hyperbolique
tanpi Tangente d'un nombre multiplié par Pi
tgamma Fonction gamma
tronc Tronque une valeur à virgule flottante

Fonctions de mathématiques vectorielles

Ces fonctions interprètent les arguments d'entrée comme une représentation de vecteurs dans un espace à N dimensions.

La précision des opérations mathématiques sur les floats 32 bits est affectée par les pragmas rs_fp_relaxed et rs_fp_full. Pour en savoir plus, consultez la page Constantes et fonctions mathématiques.

Différents compromis de précision/vitesse peuvent être obtenus en utilisant des variantes des fonctions mathématiques courantes. Fonctions dont le nom commence par

  • native_: peut disposer d'implémentations matérielles personnalisées avec une précision plus faible. En outre, les valeurs subnormales peuvent être vidées à zéro, les valeurs arrondies vers zéro peuvent être utilisées, et les valeurs NaN et infinies peuvent ne pas être gérées correctement.
  • fast_: peut effectuer des calculs internes à l'aide de floats 16 bits. En outre, les valeurs inférieures à zéro peuvent être arrondies à zéro.

Fonctions
croix Produit croisé de deux vecteurs
distance Distance entre deux points
point Produit scalaire de deux vecteurs
fast_distance Distance approximative entre deux points
longueur_rapide Longueur approximative d'un vecteur
fast_normalize Vecteur normalisé approximatif
longueur Longueur d'un vecteur
native_distance Distance approximative entre deux points
native_length Longueur approximative d'un vecteur
native_normalize Normaliser approximativement un vecteur
normaliser Normaliser un vecteur

Fonctions matricielles

Ces fonctions vous permettent de manipuler des matrices carrées de rang 2x2, 3x3 et 4x4. Ils sont particulièrement utiles pour les transformations graphiques et sont compatibles avec OpenGL.

Nous utilisons un index de base zéro pour les lignes et les colonnes. Par exemple, le dernier élément d'un élément rs_matrix4x4 se trouve aux coordonnées (3, 3).

RenderScript utilise des matrices à majeure colonne et des vecteurs basés sur des colonnes. La transformation d'un vecteur s'effectue en post-multipliant (par exemple, (matrix * vector)) par la méthode rsMatrixMultiply().

Pour créer une matrice de transformation qui effectue deux transformations à la fois, multipliez les deux matrices sources, en utilisant la première transformation comme argument de droite. Par exemple, pour créer une matrice de transformation qui applique la transformation s1 suivie de s2, appelez rsMatrixLoadMultiply(&combined, &s2, &s1). Elle est dérivée de s2 * (s1 * v), qui correspond à (s2 * s1) * v.

Nous disposons de deux styles de fonctions pour créer des matrices de transformation : rsMatrixLoadTransformation et rsMatrixTransformation. Le premier style stocke simplement la matrice de transformation dans le premier argument. Ce dernier modifie une matrice de transformation préexistante afin que la nouvelle transformation soit effectuée en premier. Par exemple, si vous appelez rsMatrixTranslate() sur une matrice qui effectue déjà une mise à l'échelle, la matrice résultante lorsqu'elle est appliquée à un vecteur effectue d'abord la translation, puis la mise à l'échelle.

Fonctions
rsExtractFrustumPlanes Calculer les plans de tronc
rsIsSphereInFrustum Vérifie si une sphère se trouve dans les plans troncaux
rsMatrixGet Obtenir un élément
rsMatrixInverse Inverser une matrice en place
rsMatrixInverseTranspose Inverser et transposer une matrice sur place
rsMatrixLoad Charger ou copier une matrice
rsMatrixLoadFrustum Charger une matrice de projection de tronc
rsMatrixLoadIdentity Charger la matrice d'identité
rsMatrixLoadMultiply Multiplier deux matrices
rsMatrixLoadOrtho Charger une matrice de projection orthographique
rsMatrixLoadPerspective Charger une matrice de projection en perspective
rsMatrixLoadRotation Charger une matrice de rotation
rsMatrixLoadScale Charger une matrice de scaling
rsMatrixLoadTranslate Charger une matrice de traduction
rsMatrixMultiply Multiplier une matrice par un vecteur ou une autre matrice
rsMatrixRotate Appliquer une rotation à une matrice de transformation
rsMatrixScale Appliquer un scaling à une matrice de transformation
rsMatrixSet Définir un élément
rsMatrixTranslate Appliquer une traduction à une matrice de transformation
rsMatrixTranspose Transposer un lieu matriciel

Fonctions quaternioniques

Les fonctions suivantes manipulent des quaternions.

Fonctions
rsQuaternionAdd Ajouter deux quaternions
Conjugate rsQuaternion Conjuguer un quaternion
rsQuaternionDot Produit scalaire de deux quaternions
rsQuaternionGetMatrixUnit Obtenir une matrice de rotation à partir d'un quaternion
rsQuaternionLoadScroll Créer un quaternion de rotation
rsQuaternionLoadScrollUnit Quaternion représentant une rotation par rapport à un vecteur unitaire arbitraire
rsQuaternionMultiply Multiplier un quaternion par un scalaire ou un autre quaternion
rsQuaternionNormalize Normaliser un quaternion
Ensemble rsQuaternion Créer un quaternion
rsQuaternionSlerp Interpolation linéaire sphérique entre deux quaternions

Fonctions de mise à jour atomique

Pour mettre à jour les valeurs partagées entre plusieurs threads, utilisez les fonctions ci-dessous. Ils garantissent que les valeurs sont mises à jour de manière atomique, c'est-à-dire que les lectures, les mises à jour et les écritures de la mémoire sont effectuées dans le bon ordre.

Ces fonctions sont plus lentes que leurs équivalents non atomiques. Vous ne devez donc les utiliser que lorsqu'une synchronisation est nécessaire.

Notez que dans RenderScript, votre code est susceptible de s'exécuter dans des threads distincts, même si vous ne les avez pas créés explicitement. L'environnement d'exécution RenderScript divise très souvent l'exécution d'un noyau sur plusieurs threads. La mise à jour des éléments généraux doit être effectuée à l'aide de fonctions atomiques. Si possible, modifiez votre algorithme pour les éviter complètement.

Fonctions
rsAtomicAdd Ajout sécurisé
rsAtomicAnd Thread sécurisé et au niveau du bit
rsAtomicCas Fonctionnalité de comparaison et de définition sécurisée
rsAtomicDec Décréement de type thread sécurisé
rsAtomicInc Incrément de sécurité thread
rsAtomicMax Sécurité maximale
rsAtomicMin Valeur minimale de sécurité du thread
rsAtomicOr Thread sécurisé au niveau du bit ou
rsAtomicSub Soustraction sécurisée
rsAtomicXor Thread sécurisé exclusif ou au niveau du bit

Fonctions et types de temps

Les fonctions ci-dessous peuvent être utilisées pour indiquer l'heure actuelle et l'heure de disponibilité actuelle du système. Il est déconseillé d'appeler ces fonctions à l'intérieur d'un noyau.

Types
rs_time_t Secondes depuis le 1er janvier 1970
rs_tm Structure de la date et de l'heure
Fonctions
rsGetDt Temps écoulé depuis le dernier appel
rsLocaltime Convertir en heure locale
rsTime Secondes depuis le 1er janvier 1970
rsUptimeMillis Temps d'activité du système en millisecondes
rsUptimeNanos Temps d'activité du système en nanosecondes

Fonctions de création d'allocation

Les fonctions ci-dessous peuvent être utilisées pour créer des allocations à partir d'un script.

Ces fonctions peuvent être appelées directement ou indirectement à partir d'une fonction pouvant être appelée. Si un chemin de flux de contrôle peut entraîner un appel à ces fonctions à partir d'une fonction de noyau RenderScript, une erreur de compilateur sera générée.

Fonctions
rsCreateAllocation Crée un objet "rs_allocation" du type donné.
rsCreateElement Crée un objet rs_element avec le type de données spécifié
rsCreatePixelElement Crée un objet rs_element avec le type de données et le genre de données spécifiés
Type rsCreate Crée un objet rs_type avec les attributs d'élément et de forme spécifiés.
rsCreateVectorElement. Crée un objet rs_element avec le type de données et la largeur vectorielle spécifiés

Fonctions d'accès aux données d'allocation

Les fonctions ci-dessous peuvent être utilisées pour obtenir et définir les cellules qui composent une allocation.

  • Les cellules individuelles sont accessibles à l'aide des fonctions rsGetElementAt* et rsSetElementAt.
  • Vous pouvez copier plusieurs cellules à l'aide des fonctions rsAllocationCopy* et rsAllocationV*.
  • Pour obtenir des valeurs via un échantillonneur, utilisez rsSample.
Les fonctions rsGetElementAt et rsSetElement* portent un nom incorrect. Ils n'obtiennent ni ne définissent d'éléments, qui s'apparentent aux types de données, mais obtiennent ou ne définissent des cellules. Considérez-les comme rsGetCellAt et rsSetCellAt.

Fonctions
rsAllocationCopy1DRange Copier des cellules consécutives entre des allocations
rsAllocationCopy2DRange Copier une zone rectangulaire de cellules entre des allocations
rsAllocationVLoadX. Obtenir un vecteur à partir d'une allocation de scalaires
rsAllocationVStoreX Stocker un vecteur dans une allocation de scalaires
rsGetElementAt Renvoyer une cellule à partir d'une allocation
rsGetElementAtYuv_uchar_U Obtenir la composante U d'une allocation de YUV
rsGetElementAtYuv_uchar_V Obtenir la composante V d'une allocation de YUV
rsGetElementAtYuv_uchar_Y Obtenir la composante Y d'une allocation de YUV
rsSample Échantillonner une valeur à partir d'une allocation de texture
rsSetElementAt Définir une cellule d'allocation

Fonctions des caractéristiques de l'objet

Les fonctions ci-dessous peuvent être utilisées pour interroger les caractéristiques d'un objet Attribution, Element ou Sampler. Ces objets sont créés à partir de Java. Vous ne pouvez pas les créer à partir d'un script.

Allocations:

Les allocations constituent la principale méthode utilisée pour transmettre des données vers et depuis les noyaux RenderScript.

Il s'agit d'une collection structurée de cellules pouvant être utilisées pour stocker des bitmaps, des textures, des points de données arbitraires, etc.

Cet ensemble de cellules peut comporter de nombreuses dimensions (X, Y, Z, Array0, Array1, Array2 et Array3), de faces (pour les cubes) et de niveaux de détails (pour mipmapping).

Pour en savoir plus sur la création d'allocations, consultez android.renderscript.Allocation.

Éléments:

Le terme "élément" est utilisé de manière un peu ambiguë dans RenderScript, à la fois comme informations de type pour les cellules d'une allocation et pour instanciation de ce type. Par exemple :

  • rs_element est un handle vers une spécification de type.
  • Dans des fonctions telles que rsGetElementAt(), "element" désigne l'instanciation du type, c'est-à-dire une cellule d'une allocation.

Les fonctions ci-dessous vous permettent d'interroger les caractéristiques de la spécification de type.

Un élément peut spécifier des types de données simples (par exemple, un entier, un nombre à virgule flottante ou un booléen). Il peut également spécifier un handle vers un objet RenderScript. Consultez la section rs_data_type pour obtenir la liste des types de base.

Les éléments peuvent spécifier des versions de vecteur de taille fixe (de taille 2, 3 ou 4) des types de base. Les éléments peuvent être regroupés en éléments complexes, créant ainsi l'équivalent des définitions de la structure C.

Les éléments peuvent également avoir un genre, qui correspond à une information sémantique utilisée pour interpréter les données de pixels. Consultez rs_data_kind.

Lorsque vous créez des allocations d'éléments communs, vous pouvez simplement utiliser l'un des nombreux éléments prédéfinis tels que F32_2.

Pour créer des éléments complexes, utilisez la classe Java Element.Builder.

Échantillonneurs:

Les objets Samplers définissent comment les allocations peuvent être lues comme une structure au sein d'un noyau. Voir android.renderscript.S.

Fonctions
rsAllocationGetDimFaces Présence de plusieurs visages
rsAllocationGetDimLOD Présence de niveaux de détail
rsAllocationGetDimX Taille de la dimension X
rsAllocationGetDimY Taille de la dimension Y
rsAllocationGetDimZ Taille de la dimension Z
rsAllocationGetElement Obtenir l'objet qui décrit la cellule d'une allocation
rsClearObject Libérer un objet
rsElementGetBytesSize Taille d'un élément
rsElementGetDataKind Type d'élément
rsElementGetDataType Type de données d'un élément
rsElementGetSubElement Sous-élément d'un élément complexe
rsElementGetSubElementArraySize Taille du tableau d'un sous-élément d'un élément complexe
rsElementGetSubElementCount Nombre de sous-éléments
rsElementGetSubElementName Nom d'un sous-élément
rsElementGetSubElementNameLength Longueur du nom d'un sous-élément
rsElementGetSubElementOffsetBytes Décalage du sous-élément instancié
rsElementGetVectorSize. Taille vectorielle de l'élément
rsIsObject Rechercher un identifiant vide
rsSamplerGetAnisotropy Anisotropie de l'échantillonneur
rsSamplerGetMagnification Valeur d'agrandissement de l'échantillonneur
rsSamplerGetMinification Valeur de minimisation de l'échantillonneur
rsSamplerGetWrapS Valeur S de l'encapsulation de l'échantillonneur
rsSamplerGetWrapT Valeur T de l'encapsulation de l'échantillonneur

Fonctions et types d'appels du noyau

La fonction rsForEvery() peut être utilisée pour appeler le noyau racine d'un script.

Les autres fonctions permettent d'obtenir les caractéristiques de l'appel d'un noyau en cours d'exécution, telles que les dimensions et les index actuels. Ces fonctions utilisent rs_kernel_context comme argument.

Types
rs_for_each_strategy_t Ordre suggéré pour le traitement des cellules
rs_kernel Gérer une fonction de noyau
rs_kernel_context Gérer un contexte d'appel du noyau
rs_script_call_t Informations sur l'itération des cellules
Fonctions
rsForChaque Lance un noyau
rsForEveryInternal (API interne) Lancer un noyau dans le script actuel (avec le numéro d'emplacement)
rsForEveryWithOptions Lance un noyau avec des options
rsGetArray0 Index dans la dimension Array0 pour le contexte de noyau spécifié
rsGetArray1 Index dans la dimension Array1 pour le contexte de noyau spécifié
rsGetArray2 Index dans la dimension Array2 pour le contexte de noyau spécifié
rsGetArray3 Index dans la dimension Array3 pour le contexte de noyau spécifié
rsGetDimArray0 Taille de la dimension Array0 pour le contexte de noyau spécifié
rsGetDimArray1 Taille de la dimension Array1 pour le contexte de noyau spécifié
rsGetDimArray2 Taille de la dimension Array2 pour le contexte de noyau spécifié
rsGetDimArray3 Taille de la dimension Array3 pour le contexte de noyau spécifié
rsGetDimHasFaces Présence de plusieurs visages pour le contexte de noyau spécifié
rsGetDimLod Nombre de niveaux de détail pour le contexte de noyau spécifié
rsGetDimX Taille de la dimension X pour le contexte de noyau spécifié
RSGetDimY Taille de la dimension Y pour le contexte de noyau spécifié
rsGetDimZ Taille de la dimension Z pour le contexte de noyau spécifié
rsGetFace Coordonnées du visage pour le contexte du noyau spécifié
rsGetLod Index dans la dimension Niveaux de détail pour le contexte de noyau spécifié

Fonctions d'entrée/sortie

Ces fonctions sont utilisées pour:

  • envoyer des informations au client Java ;
  • Envoyer l'allocation traitée ou recevoir l'allocation suivante à traiter.

Fonctions
rsAllocationIoReceive Recevoir le nouveau contenu de la file d'attente
rsAllocationIoSend Envoyer les nouveaux contenus dans la file d'attente
rsSendToClient Envoyer un message au client, non bloquant
rsSendToClientBlocking Envoyer un message au client, en bloquant

Fonctions de débogage

Les fonctions ci-dessous sont destinées à être utilisées lors du développement d'applications. Ils ne doivent pas être utilisés dans les applications de livraison.

Fonctions
rsDebug Enregistrer un message et ses valeurs

Fonctions et types de graphiques

Le sous-système graphique de RenderScript a été supprimé au niveau d'API 23.