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.
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.