Riferimento all'API RenderScript Runtime

Panoramica

RenderScript è un runtime ad alte prestazioni che fornisce operazioni di calcolo a livello nativo. Il codice RenderScript viene compilato sui dispositivi in fase di runtime per consentire anche l'indipendenza dalla piattaforma.

Questa documentazione di riferimento descrive le API di runtime RenderScript, che puoi utilizzare per scrivere codice RenderScript in C99. I file di intestazione Compute RenderScript sono inclusi automaticamente.

Per usare RenderScript, devi usare le API di runtime RenderScript qui descritte e le API del framework Android per RenderScript. Per la documentazione sulle API del framework Android, consulta il riferimento del pacchetto android.renderscript.

Per ulteriori informazioni su come sviluppare con RenderScript e sull'interazione tra le API runtime e Android Framework, consulta la guida per gli sviluppatori di RenderScript e gli esempi di RenderScript.

Tipi numerici

Scalari:

RenderScript supporta i seguenti tipi numerici scalari:

8 bit 16 bit 32 bit 64 bit
Numero intero: carattere, int8_t breve, int16_t int32_t lungo, lungo lungo, int64_t
Numero intero senza segno: uchar, uint8_t ushort, uint16_t uint, uint32_t ulong, uint64_t
Virgola mobile: metà tempo numero in virgola mobile doppio

Vettori:

RenderScript supporta vettori con dimensioni fisse di 2, 3 e 4. I vettori vengono dichiarati utilizzando il nome di tipo comune seguito da 2, 3 o 4. Ad esempio, float4, int3, Double2, ulong4.

Per creare valori letterali vettoriali, utilizza il tipo di vettore seguito dai valori racchiusi tra parentesi graffe, ad esempio (float3){1.0f, 2.0f, 3.0f}.

È possibile accedere alle voci di un vettore utilizzando diversi stili di denominazione.

È possibile accedere alle singole voci facendo seguire il nome della variabile da un punto e:

  • Le lettere x, y, z e w
  • Le lettere r, g, b e a
  • La lettera s o S, seguita da un indice in base zero.

Ad esempio, con int4 myVar; quanto segue è equivalente:
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

È possibile accedere contemporaneamente a più voci di un vettore utilizzando un identificatore che è la concatenazione di più lettere o indici. Il vettore risultante ha una dimensione uguale al numero di voci denominate.

Con l'esempio precedente, è possibile accedere alle due voci centrali utilizzando myVar.yz, myVar.gb, myVar.s12 e myVar.S12.

Le voci non devono essere contigue o in ordine crescente. Le voci possono anche essere ripetute, purché non si stia tentando di assegnarle. Inoltre, non puoi combinare gli stili di denominazione.

Ecco alcuni esempi di ciò che è possibile o non è possibile fare:
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

Matrici e quaternioni:

RenderScript supporta matrici quadrate di dimensioni fisse di valori in virgola mobile di 2x2, 3x3 e 4x4. I tipi sono denominati rs_matrix2x2, rs_matrix3x3 e rs_matrix4x4. Vedi Funzioni della matrice per l'elenco delle operazioni.

I quaternioni sono supportati anche tramite rs_quaternion. Consulta Funzioni trimestrali per l'elenco delle operazioni.

Tipi
car2 Due numeri interi con segno a 8 bit
car3 Tre numeri interi con segno a 8 bit
car4 Quattro numeri interi firmati a 8 bit
doppio2 Due valori in virgola mobile a 64 bit
doppio3 Tre valori in virgola mobile a 64 bit
doppio4 Quattro floating a 64 bit
float2 Due valori in virgola mobile a 32 bit
float3 Tre valori in virgola mobile a 32 bit
float4 Quattro valori in virgola mobile a 32 bit
metà Valore in virgola mobile a 16 bit
metà 2 Due valori in virgola mobile a 16 bit
metà3 Tre valori a virgola mobile a 16 bit
metà 4 Quattro valori in virgola mobile a 16 bit
int16_t Numero intero con firma a 16 bit
int2 Due numeri interi con segno a 32 bit
int3 Tre numeri interi firmati a 32 bit
int32_t Numero intero con firma a 32 bit
int4 Quattro numeri interi firmati a 32 bit
int64_t Numero intero firmato a 64 bit
int8_t Numero intero con firma a 8 bit
lungo2 Due numeri interi firmati a 64 bit
lungo3 Tre numeri interi firmati a 64 bit
lungo4 Quattro numeri interi firmati a 64 bit
matrix2x2 Matrice 2x2 di galleggianti a 32 bit
rs_matrix3x3 Matrice 3x3 di galleggi a 32 bit
rs_matrix4x4 Matrice 4x4 di galleggianti a 32 bit
rs_quaternion Quaternione
breve2 Due numeri interi firmati a 16 bit
breve3 Tre numeri interi firmati a 16 bit
breve4 Quattro numeri interi firmati a 16 bit
taglia_t Tipo di taglia senza firma
taglia_t Tipo di taglia firmato
Uchar Numero intero senza segno a 8 bit
Uchar2 Due numeri interi senza segno a 8 bit
uchar3 Tre numeri interi senza segno a 8 bit
Uchar4 Quattro numeri interi senza segno a 8 bit
Uint Numero intero senza segno a 32 bit
Uint16_t Numero intero senza segno a 16 bit
Uint2 Due numeri interi senza segno a 32 bit
Uint3 Tre numeri interi senza segno a 32 bit
Uint32_t Numero intero senza segno a 32 bit
Uint4 Quattro numeri interi senza segno a 32 bit
Uint64_t Numero intero senza segno a 64 bit
Uint8_t Numero intero senza segno a 8 bit
Ulong Numero intero senza segno a 64 bit
Ulong2 Due numeri interi senza segno a 64 bit
Ulong3 Tre numeri interi senza segno a 64 bit
Ulong4 Quattro numeri interi senza segno a 64 bit
pantaloni Numero intero senza segno a 16 bit
Ushort2 Due numeri interi senza segno a 16 bit
Ushort3 Tre numeri interi senza segno a 16 bit
Ushort4 Quattro numeri interi senza segno a 16 bit

Tipi di oggetti

I tipi riportati di seguito vengono utilizzati per manipolare gli oggetti RenderScript come allocazioni, campioni, elementi e script. La maggior parte di questi oggetti viene creata utilizzando le API Java RenderScript.

Tipi
allocazione_rs Gestire un'allocazione
faccia_cubo_allocation_rs_allocation Enum per la selezione delle facce della mappa cubica
tipo_utilizzo_allocation Bitfield per specificare la modalità di utilizzo di un'allocazione
rs_data_kind Tipo di dati dell'elemento
tipo_dati_rs Tipo di dati di base dell'elemento
elemento_rs Eseguire l'handle di un elemento
rs_sampler Gestire un Sampler
valore_campione rs Valore T a capo del campionatore
rs_script Gestisci in uno script
tipo_rs Da handle a un tipo
Formato_rs_yuv Formato YUV

Funzioni di conversione

Le funzioni riportate di seguito effettuano la conversione da un tipo numerico a un altro o da una rappresentazione di colore a un'altra.

Funzioni
convertire Convertire i vettori numerici
rsPackColorTo8888 Crea un'immagine RGBA uchar4 da galleggianti
rsUnpackColor8888 Crea un RGBA float4 da uchar4
rsYuvToRGBA Converti un valore YUV in RGBA

Costanti e funzioni matematiche

Le seguenti funzioni matematiche possono essere applicate a scalari e vettori. Se applicato ai vettori, il valore restituito è un vettore della funzione applicata a ciascuna voce dell'input.

Ad esempio:
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);

Consulta Funzioni matematiche vettoriali per funzioni come distance() e length() che interpretano invece l'input come un singolo vettore in uno spazio n-dimensionale.

La precisione delle operazioni matematiche su valori in virgola mobile a 32 bit è influenzata dai pragmas rs_fp_relaxed e rs_fp_full. Sotto rs_fp_relaxed, i valori subnormali possono essere cancellati a zero e potrebbe essere eseguito l'arrotondamento verso zero. In confronto, rs_fp_full richiede la gestione corretta dei valori subnormali, ovvero inferiori a 1,17549435e-38f. rs_fp_rull richiede anche arrotondamento più prossimo con parità.

Utilizzando le varianti delle comuni funzioni matematiche, è possibile ottenere diversi compromessi in termini di precisione/velocità. Funzioni con un nome che inizia con

  • native_: potrebbero avere implementazioni hardware personalizzate con una precisione più debole. Inoltre, i valori subnormali possono essere cancellati a zero, potrebbe essere utilizzato l'arrotondamento verso lo zero e l'input NAN e infinito potrebbe non essere gestito correttamente.
  • half_: può eseguire calcoli interni utilizzando valori in virgola mobile a 16 bit. Inoltre, i valori subnormali possono essere rimossi a zero ed è possibile utilizzare l'arrotondamento verso lo zero.

Costanti
M_1_PI 1 / pi, come float a 32 bit
M_2_PI 2 / pi, come float a 32 bit
M_2_SQRTPI 2 / sqrt(pi), come valore in virgola mobile a 32 bit
L_E e, come valore in virgola mobile a 32 bit
LN10 log_e(10), come valore in virgola mobile a 32 bit
LN2 log_e(2), come valore in virgola mobile a 32 bit
M_LOG10E log_10(e), come valore in virgola mobile a 32 bit
M_LOG2E log_2(e), come valore in virgola mobile a 32 bit
M_PI pi greco, come valore in virgola mobile a 32 bit
M_PI_2 pi / 2, come float a 32 bit
M_PI_4 pi greco / 4, come valore in virgola mobile a 32 bit
M_SQRT1_2 1 / sqrt(2), come valore in virgola mobile a 32 bit
RADQ2 radice quadrata(2), come valore in virgola mobile a 32 bit
Funzioni
addominali Valore assoluto di un numero intero
acos Coseno inverso
acosh Coseno iperbolico inverso
acospi Coseno inverso diviso per pi greco
asin Seno inverso
asinh Seno iperbolico inverso
Asinpi Seno inverso diviso per pi greco
atan Tangente inversa
atan2 Tangente inversa di un rapporto
atan2pi Tangente inversa di un rapporto, divisa per pi greco
Alba Tangente iperbolica inversa
atanpi Tangente inversa divisa per pi greco
Radice cubica
ceil Numero intero più piccolo non inferiore a un valore
pinza Limitare un valore a un intervallo
clz Numero di 0 bit iniziali
copysign Copia il segno di un numero su un altro
cos Coseno
baco Coseno iperbolico
Cospi Coseno di un numero moltiplicato per pi greco
gradi Converte i radianti in gradi
Funzione di errore matematico
erfc Funzione di errore complementare matematica
exp e elevato a un numero
esp10 10 elevato a un numero
esp2 2 elevato a un numero
expm1 e elevato a un numero meno uno
fab Valore assoluto di un numero in virgola mobile
FIDIM Differenza positiva tra due valori
piano Il numero intero più piccolo non è maggiore di un valore
fma Moltiplica e aggiungi
Massimo due valori in virgola mobile
fmin Minimo due float
fmod Modulo
fratta Parte frazionata positiva
Frexp Mantissa binaria ed esponente
ricevimento_metallo Reciproca calcolata con precisione a 16 bit
half_rsqrt Reciproco di una radice quadrata calcolata con una precisione a 16 bit
metà_mq Radice quadrata calcolata con una precisione a 16 bit
ipot Ipotenusa
ilogb Esponente in base a due
ldexp Crea una virgola mobile da mantissa ed esponente
lgamma Logaritmo naturale della funzione gamma
log Logaritmo naturale
log10 Logaritmo in base 10
log1p Logaritmo naturale di un valore più 1
log2 Logaritmo in base 2
log Esponente in base a due
pazzo Moltiplica e aggiungi
massimo Massima
min Minima
mix Combina due valori
modf Componenti integrali e frazionarie
non disponibile Non è un numero
metà_nana Non è un numero
acos_nativi Coseno inverso approssimativo
acosh_nativo Coseno iperbolico inverso approssimativo
acospi_nativo Coseno inverso approssimativo diviso per pi greco
nativo_asin Seno inverso approssimativo
nativo_asinh Seno iperbolico inverso approssimativo
native_asinpi Seno inverso approssimativo diviso pi greco
nativo_atan Tangente inversa approssimativa
native_atan2 Tangente inversa approssimativa di un rapporto
native_atan2pi Tangente inversa approssimativa di un rapporto, divisa per pi greco
natanh_nativa Tangente iperbolica inversa approssimativa
atanpi_nativo Tangente inversa approssimativa divisa per pi greco
crt_nativo Radice cubica approssimativa
native_cos Coseno approssimativo
native_cosh Coseno ipebolico approssimativo
native_cospi Coseno approssimativo di un numero moltiplicato per pi greco
divisione_nativa Divisione approssimativa
esp_nativa Valore approssimativo aumentato a un numero
esperimento_nativo10 Circa 10 elevato a un numero
espressione_nativa2 Circa 2 elevato a un numero
expm1_nativo Valore approssimativo aumentato a un numero meno uno
hypot_nativo Ipotenusa approssimativa
native_log Logaritmo naturale approssimativo
native_log10 Logaritmo approssimativo in base 10
native_log1p Logaritmo naturale approssimativo di un valore più 1
native_log2 Logaritmo approssimativo in base 2
powr_nativo Base positiva approssimativa elevata a un esponente
recip_nativo Reciproco approssimativo
native_rootn Radice n-esima approssimativa
[native_rsqrt] Reciproco approssimativo di una radice quadrata
nativo_sin Seno approssimativo
sincos_nativi Seno e coseno approssimativi
native_sinh Seno iperbolico approssimativo
sinpi_nativo Seno approssimativo di un numero moltiplicato per pi greco
[native_sqrt] Radice quadrata approssimativa
tan_nativo Tangente approssimativa
[native_tanh] Tangente iperbolica approssimativa
tanpi_nativo Tangente approssimativa di un numero moltiplicata per pi greco
nextafter Numero in virgola mobile successivo
papaya Base elevata a un esponente
marrone Base elevata a un esponente intero
powr Base positiva elevata a un esponente
radianti Converte i gradi in radianti
resto Resti di una divisione
remquo Resto e quoziente di una divisione
rint Arrotonda a pari
rootn Radice n-esima
rotondo Arrotondamento lontano da zero
rsRand Numero pseudo-casuale
Reciproco di una radice quadrata
segno Segno di un valore
peccato Seno
Sincos Seno e coseno
senno Seno iperbolico
Seno di un numero moltiplicato per pi greco
mq Radice quadrata
passaggio 0 se è minore di un valore, altrimenti 0
marrone chiaro Tangente
tanh Tangente iperbolica
tanpi Tangente di un numero moltiplicato per pi greco
Tgamma Funzione gamma
tronco Tronca una rappresentazione in virgola mobile

Funzioni matematiche vettoriali

Queste funzioni interpretano gli argomenti di input come rappresentazione di vettori nello spazio n-dimensionale.

La precisione delle operazioni matematiche su valori in virgola mobile a 32 bit è influenzata dai pragmas rs_fp_relaxed e rs_fp_full. Per maggiori dettagli, vedi Costanti e funzioni matematiche.

Utilizzando le varianti delle comuni funzioni matematiche, è possibile ottenere diversi compromessi in termini di precisione/velocità. Funzioni con un nome che inizia con

  • native_: potrebbero avere implementazioni hardware personalizzate con una precisione più debole. Inoltre, i valori subnormali possono essere cancellati a zero, potrebbe essere utilizzato l'arrotondamento verso lo zero e l'input NAN e infinito potrebbe non essere gestito correttamente.
  • fast_: può eseguire calcoli interni utilizzando valori in virgola mobile a 16 bit. Inoltre, i valori subnormali possono essere rimossi a zero ed è possibile utilizzare l'arrotondamento verso lo zero.

Funzioni
croce Prodotto incrociato di due vettori
distanza Distanza tra due punti
punto Prodotto scalare di due vettori
distanza_rapida Distanza approssimativa tra due punti
lunghezza_rapida Lunghezza approssimativa di un vettore
normalizzazione_rapida Approssimativa del vettore normalizzato
lunghezza Lunghezza di un vettore
distanza_nativa Distanza approssimativa tra due punti
lunghezza_nativa Lunghezza approssimativa di un vettore
normalizzazione_nativa Normalizzare approssimativamente un vettore
normalizzare Normalizzare un vettore

Funzioni matriciali

Queste funzioni consentono di manipolare le matrici quadrate di rango 2x2, 3x3 e 4x4. Sono particolarmente utili per le trasformazioni grafiche e sono compatibili con OpenGL.

Utilizziamo un indice in base zero per le righe e le colonne. Ad esempio, l'ultimo elemento di rs_matrix4x4 si trova in (3, 3).

RenderScript utilizza le matrici principali e i vettori basati su colonne. La trasformazione di un vettore viene eseguita postmoltiplicandolo, ad esempio (matrix * vector), come fornito da rsMatrixMultiply().

Per creare una matrice di trasformazione che esegue due trasformazioni contemporaneamente, moltiplica le due matrici di origine, con la prima trasformazione come argomento giusto. Ad esempio, per creare una matrice di trasformazione che applichi la trasformazione s1 seguita da s2, chiama rsMatrixLoadMultiply(&combined, &s2, &s1). Questo deriva da s2 * (s1 * v), che corrisponde a (s2 * s1) * v.

Abbiamo due tipi di funzioni per creare le matrici di trasformazione: rsMatrixLoadTransformation e rsMatrixTransformation. Lo stile precedente archivia semplicemente la matrice di trasformazione nel primo argomento. Quest'ultimo modifica una matrice di trasformazione preesistente in modo che la nuova trasformazione avvenga per prima. Ad esempio, se chiami rsMatrixTranslate() su una matrice che già esegue una scala, la matrice risultante, quando applicata a un vettore, eseguirà prima la traslazione e poi la scala.

Funzioni
rsExtractFrustumPlanes Piani a tronco di calcolo
rsIsSphereInFrustum Verifica se una sfera si trova all'interno dei piani troncocologici
rsMatrixGet Ottieni un elemento
rsMatrixInverse Inverte una matrice presente
rsMatrixInverseTranspose Inverte e trasponi una matrice in posizione
rsMatrixLoad Carica o copia una matrice
rsMatrixLoadFrustum Carica una matrice di proiezione del tronco
rsMatrixLoadIdentity Carica matrice identità
rsMatrixLoadMultiply Moltiplicare due matrici
rsMatrixLoadOrtho Carica una matrice di proiezione ortografica
rsMatrixLoadPerspective Carica una matrice di proiezione prospettica
rsMatrixLoadRuota Carica una matrice di rotazione
rsMatrixLoadScale Carica una matrice di scalabilità
rsMatrixLoadTranslate Carica una matrice di traduzione
rsMatrixMultiply Moltiplicare una matrice per un vettore o un'altra matrice
rsMatrixRuota Applicare una rotazione a una matrice di trasformazione
rsMatrixScale Applicare una scala a una matrice di trasformazione
InsMatrixSet Imposta un elemento
Traduttore di rsMatrix Applicare una traduzione a una matrice di trasformazione
rsMatrixTranspose Trasponi una posizione della matrice

Funzioni quaternioni

Le seguenti funzioni manipolano i quaternioni.

Funzioni
Aggiungi rsQuaternion Sommare due quaternioni
Coniugato rsQuaternion Coniugare un quaternione
DotQuaternion Prodotto scalare di due quaternioni
rsQuaternionGetMatrixUnit Ottieni una matrice di rotazione da un quaternione
rsQuaternionLoadRuota Crea un quaternione di rotazione
rsQuaternionLoadWheelUnit Quaternione che rappresenta una rotazione rispetto a un vettore unitario arbitrario
rsQuaternionMultiply Moltiplicare un quaternione per uno scalare o un altro quaternione
rsQuaternionNormalize Normalizzare un quaternione
SetQuaternion Crea un quaternione
rsQuaternionSlerp Interpolazione sferica lineare tra due quaternioni

Funzioni di aggiornamento atomico

Per aggiornare i valori condivisi tra più thread, utilizza le funzioni riportate di seguito. Garantiscono che i valori vengano aggiornati a livello atomico, ovvero che la memoria viene lettura, gli aggiornamenti e le scritture della memoria vengono eseguite nell'ordine corretto.

Queste funzioni sono più lente rispetto agli equivalenti non atomici, quindi utilizzale solo quando è necessaria la sincronizzazione.

Tieni presente che in RenderScript è probabile che il codice venga eseguito in thread separati anche se non li hai creati esplicitamente. Molto spesso il runtime RenderScript suddivide l'esecuzione di un kernel in più thread. L'aggiornamento dei globali dovrebbe essere eseguito con le funzioni atomiche. Se possibile, modifica l'algoritmo per evitarli del tutto.

Funzioni
rsAtomicAdd Aggiunta sicura per thread
rsAtomicAnd Thread-safe a bit e
rsAtomicCas Confronto e impostazione sicura dei thread
rsAtomicDec Decremento sicuro per thread
rsAtomicInc Incremento Threadsafe
rsAtomicMax Massima sicurezza per thread
rsAtomicMin Minimo per thread sicuro
rsAtomicOr Thread-safe a bit o
rsAtomicSub Sottrazione per thread sicuro
rsAtomicXor Esclusiva a bit a livello di thread o

Tipi e funzioni temporali

Le funzioni seguenti possono essere utilizzate per indicare l'ora dell'orologio attuale e quella del sistema attuale. Non è consigliabile chiamare queste funzioni all'interno di un kernel.

Tipi
tempo_rs_t Secondi dal 1° gennaio 1970
rs_tm Struttura di data e ora
Funzioni
rsGetDt Tempo trascorso dall'ultima chiamata
rsLocaltime Converti in ora locale
rsTime Secondi dal 1° gennaio 1970
rsUptimeMillis Tempo di attività del sistema in millisecondi
rsUptimeNanos Tempo di attività del sistema in nanosecondi

Funzioni di creazione allocazione

Le funzioni seguenti possono essere utilizzate per creare allocazioni da uno script.

Queste funzioni possono essere chiamate direttamente o indirettamente da una funzione evocabile. Se un percorso del flusso di controllo può comportare una chiamata a queste funzioni da una funzione kernel RenderScript, verrà generato un errore del compilatore.

Funzioni
rsCreateAllocation Crea un oggetto rs_allocation di un determinato tipo.
rsCreateElement Crea un oggetto rs_element del tipo di dati specificato
rsCreatePixelElement Crea un oggetto rs_element del tipo di dati e del tipo di dati specificati
rsCreateType Crea un oggetto rs_type con gli attributi Elemento e Forma specificati
rsCreateVectorElement Crea un oggetto rs_element del tipo di dati e della larghezza del vettore specificati

Funzioni di accesso ai dati di allocazione

Le funzioni seguenti possono essere utilizzate per recuperare e impostare le celle che compongono un'allocazione.

  • Puoi accedere alle singole celle utilizzando le funzioni rsGetElementAt* e rsSetElementAt.
  • Puoi copiare più celle con le funzioni rsAllocationCopy* e rsAllocationV*.
  • Per ottenere valori tramite un Sampler, utilizza rsSample.
Le funzioni rsGetElementAt e rsSetElement* presentano in qualche modo nomi errati. Non ricevono o impostano elementi simili ai tipi di dati, ma ricevono o impostano celle. Possono essere paragonati a rsGetCellAt e rsSetCellAt.

Funzioni
rsAllocationCopy1DRange Copia celle consecutive tra le allocazioni
rsAllocationCopy2DRange Copia una regione rettangolare di celle tra le allocazioni
rsAllocationVLoadX Ottieni un vettore da un'allocazione di scalari
rsAllocationVStoreX Archiviare un vettore in un'allocazione di scalari
rsGetElementAt Restituire una cella da un'allocazione
rsGetElementAtYuv_uchar_U Ottieni il componente U di un'allocazione di YUV
rsGetElementAtYuv_uchar_V Ottieni il componente V di un'allocazione di YUV
rsGetElementAtYuv_uchar_Y Ottieni il componente Y di un'allocazione di YUV
rsSample Campiona un valore da un'allocazione delle texture
rsSetElementAt Imposta una cella di un'allocazione

Caratteristiche degli oggetti Funzioni

Le funzioni seguenti possono essere utilizzate per eseguire query sulle caratteristiche di un oggetto Allocazione, Elemento o Sampler. Questi oggetti vengono creati da Java. Non puoi crearle da uno script.

Allocazioni:

Le allocazioni sono il metodo principale utilizzato per passare dati da e verso i kernel RenderScript.

Sono una raccolta strutturata di celle che può essere utilizzata per archiviare bitmap, texture, punti dati arbitrari e così via.

Questa raccolta di celle può avere molte dimensioni (X, Y, Z, Array0, Array1, Array2, Array3), facce (per le mappe cubiche) e livelli di dettagli (per mipmapping).

Consulta android.renderscript.Allocation per avere informazioni dettagliate sulla creazione di allocazioni.

Elementi:

Il termine "elemento" è utilizzato in modo un po' ambiguo in RenderScript, come informazioni di tipo per le celle di un'allocazione e per la creazione di un'istanza di quel tipo. Ecco alcuni esempi:

  • rs_element è un handle di una specifica di tipo e
  • In funzioni come rsGetElementAt(), "element" indica l'istanza del tipo, ovvero una cella di un'allocazione.

Le funzioni riportate di seguito consentono di eseguire query sulle caratteristiche della specifica del tipo.

Un elemento può specificare tipi di dati semplici, come quelli presenti in C, ad esempio un numero intero, un numero in virgola mobile o un valore booleano. Può anche specificare un handle per un oggetto RenderScript. Consulta rs_data_type per un elenco dei tipi di base.

Gli elementi possono specificare versioni vettoriali a dimensioni fisse (di dimensioni 2, 3 o 4) dei tipi di base. Gli elementi possono essere raggruppati in elementi complessi, creando l'equivalente delle definizioni della struttura C.

Gli elementi possono anche avere un tipo, ovvero informazioni semantiche utilizzate per interpretare i dati dei pixel. Consulta rs_data_kind.

Quando crei allocazioni di elementi comuni, puoi semplicemente utilizzare uno dei molti elementi predefiniti, ad esempio F32_2.

Per creare elementi complessi, utilizza la classe Java Element.Builder.

Sampler:

Gli oggetti Samplers definiscono il modo in cui le allocazioni possono essere lette come struttura all'interno di un kernel. Vedi android.renderscript.S.

Funzioni
rsAllocationGetDimFaces Presenza di più volti
rsAllocationGetDimLOD Presenza di livelli di dettaglio
rsAllocationGetDimX Dimensione della dimensione X
rsAllocationGetDimY Dimensione della dimensione Y
rsAllocationGetDimZ Dimensione della dimensione Z
rsAllocationGetElement Ottieni l'oggetto che descrive la cella di un'allocazione
rsClearObject Rilascia un oggetto
rsElementGetBytesSize Dimensioni di un elemento
rsElementGetDataKind Tipo di elemento
rsElementGetDataType Tipo di dati di un elemento
rsElementGetSubElement Elemento secondario di un elemento complesso
rsElementGetSubElementArraySize Dimensione array di un elemento secondario di un elemento complesso
rsElementGetSubElementCount Numero di elementi secondari
rsElementGetSubElementName Nome di un elemento secondario
rsElementGetSubElementNameLength Lunghezza del nome di un elemento secondario
rsElementGetSubElementOffsetBytes Offset del sottoelemento istanziato
rsElementGetVectorSize Dimensione vettoriale dell'elemento
rsIsObject Verifica la presenza di un handle vuoto
rsSamplerGetAnisotropy Anisotropia del campionatore
rsSamplerGetMagnification Valore di ingrandimento del campionatore
rsSamplerGetMinification Valore di minimizzazione del campionamento
rsSamplerGetWrapS Valore S a capo del campionatore
rsSamplerGetWrapT Valore T a capo del campionatore

Funzioni e tipi di chiamata kernel

La funzione rsForeach() può essere utilizzata per richiamare il kernel radice di uno script.

Le altre funzioni vengono utilizzate per ottenere le caratteristiche della chiamata a un kernel in esecuzione, come le dimensioni e gli indici correnti. Queste funzioni prendono un rs_kernel_context come argomento.

Tipi
rs_per_ogni_strategia_t Ordine di elaborazione delle celle suggerito
rs_kernel Handle in una funzione kernel
contesto rs_kernel Handle in un contesto di chiamata kernel
rs_script_call_t Informazioni sull'iterazione delle celle
Funzioni
rsPerOgni Avvia un kernel
rsPerOgniInterno (API interna) Avvia un kernel nello script corrente (con il numero di slot)
rsPerOgniConOpzioni Avvia un kernel con opzioni
rsGetArray0 Indice nella dimensione Array0 per il contesto del kernel specificato
rsGetArray1 Indice nella dimensione Array1 per il contesto del kernel specificato
rsGetArray2 Indice nella dimensione Array2 per il contesto del kernel specificato
rsGetArray3 Indice nella dimensione Array3 per il contesto del kernel specificato
rsGetDimArray0 Dimensione della dimensione Array0 per il contesto del kernel specificato
rsGetDimArray1 Dimensione della dimensione Array1 per il contesto del kernel specificato
rsGetDimArray2 Dimensione della dimensione Array2 per il contesto del kernel specificato
rsGetDimArray3 Dimensione della dimensione Array3 per il contesto del kernel specificato
rsGetDimHasFaces Presenza di più di un volto per il contesto kernel specificato
rsGetDimLod Numero di livelli di dettaglio per il contesto kernel specificato
rsGetDimX Dimensione della dimensione X per il contesto del kernel specificato
rsGetDimY Dimensione della dimensione Y per il contesto del kernel specificato
rsGetDimZ Dimensione della dimensione Z per il contesto del kernel specificato
rsGetFace Coordinata della faccia per il contesto kernel specificato
rsGetLod Indice nella dimensione Livelli di dettaglio per il contesto kernel specificato

Funzioni di input/output

Queste funzioni vengono utilizzate per:

  • Inviare informazioni al client Java.
  • Invia l'allocazione elaborata o ricevi l'allocazione successiva da elaborare.

Funzioni
Allocazione richieste per ricevere i dati Ricevere nuovi contenuti dalla coda
rsAllocationIoSend Invia nuovi contenuti alla coda
rsSendToClient Invia un messaggio al client, senza bloccare
rsSendToClientBlock Invia un messaggio al client, bloccando

Funzioni di debug

Le funzioni seguenti sono pensate per essere utilizzate durante lo sviluppo dell'applicazione. Non devono essere utilizzati in applicazioni di spedizione.

Funzioni
rsDebug Registra un messaggio e i valori

Tipi e funzioni grafiche

Il sottosistema grafico di RenderScript è stato rimosso al livello API 23.