Descripción general
RenderScript es un entorno de ejecución de alto rendimiento que proporciona operaciones de procesamiento en el nivel nativo. El código de RenderScript se compila en dispositivos en el entorno de ejecución para permitir también la independencia de la plataforma.
En esta documentación de referencia, se describen las APIs del entorno de ejecución de RenderScript, que puedes usar para escribir código de RenderScript en C99. Los archivos de encabezado de procesamiento de RenderScript se incluyen automáticamente.
Para usar RenderScript, debes utilizar las APIs del entorno de ejecución de RenderScript que se documentan aquí, así como las APIs del framework de Android para RenderScript. Para obtener documentación sobre las APIs del framework de Android, consulta la referencia del paquete android.renderscript.
Si deseas obtener más información para desarrollar con RenderScript y cómo interactúan las APIs del framework de Android y el entorno de ejecución, consulta la Guía para desarrolladores de RenderScript y las Muestras de RenderScript.
Tipos numéricos
Escalares:
RenderScript admite los siguientes tipos numéricos escalares:
8 bits | 16 bits | 32 bits | 64 bits | |
Número entero: | carácter, int8_t | corto, int16_t | int32_t | largo, largo, int64_t |
Número entero sin firma: | uchar o uint8_t | ushort, uint16_t. | uint, uint32_t | ulong o uint64_t |
Punto flotante: | tiempo | float | double |
Vectores:
RenderScript admite vectores de tamaño fijo de longitud 2, 3 y 4. Los vectores se declaran con el nombre de tipo común seguido de 2, 3 o 4. P.ej., float4, int3, double2, ulong4.
Para crear literales de vectores, usa el tipo de vector seguido de los valores encerrados entre llaves, p.ej., (float3){1.0f, 2.0f, 3.0f}
.
Se puede acceder a las entradas de un vector usando diferentes estilos de nomenclatura.
Se puede acceder a entradas individuales siguiendo el nombre de la variable con un punto y:
- Las letras "x", "y", "z" y "w",
- Las letras r, g, b y a,
- La letra s o S, seguida de un índice basado en cero.
Por ejemplo, con int4 myVar;
, los siguientes son equivalentes:
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
Se puede acceder a varias entradas de un vector al mismo tiempo mediante un identificador que es la concatenación de varias letras o índices. El vector resultante tiene un tamaño igual al número de entradas nombradas.
Con el ejemplo anterior, se puede acceder a las dos entradas del medio mediante myVar.yz
, myVar.gb
, myVar.s12
y myVar.S12
.
No es necesario que las entradas sean contiguas ni estén en orden creciente. Las entradas se pueden repetir, siempre y cuando no intentemos asignarlas. Tampoco puedes combinar los estilos de nomenclatura.
Estos son ejemplos de lo que se puede y no se puede hacer:
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 y cuaterniones:
RenderScript admite matrices cuadradas de tamaño fijo de números de punto flotante de 2x2, 3x3 y 4x4. Los tipos se denominan rs_matrix2x2, rs_matrix3x3 y rs_matrix4x4. Consulta Funciones de matriz para ver la lista de operaciones.
Los cuaterniones también son compatibles con rs_quaternion. Consulta Funciones de cuaterión para ver la lista de operaciones.
Tipos | |
---|---|
carácter2 | Dos números enteros de 8 bits con firma |
char3 | Tres números enteros de 8 bits con firma |
carácter4 | Cuatro números enteros con firma de 8 bits |
double2 | Dos flotantes de 64 bits |
double3 | Tres números de punto flotante de 64 bits |
double4 | Cuatro flotantes de 64 bits |
float2 | Dos flotantes de 32 bits |
float3 | Tres números de punto flotante de 32 bits |
float4 | Cuatro flotantes de 32 bits |
medio | Valor de punto flotante de 16 bits |
medio2 | Dos flotantes de 16 bits |
medio3 | Tres números de punto flotante de 16 bits |
medio4 | Cuatro flotantes de 16 bits |
int16_t | Número entero de 16 bits con firma |
Número entero2 | Dos números enteros de 32 bits con firma |
Número de teléfono internacional3 | Tres números enteros de 32 bits con firma |
int32_t | Número entero de 32 bits con firma |
Número entero4 | Cuatro números enteros de 32 bits con firma |
int64_t | Número entero de 64 bits con firma |
int8_t | Número entero de 8 bits con firma |
largo2 | Dos números enteros de 64 bits con firma |
largo3 | Tres números enteros de 64 bits con firma |
largo4 | Cuatro números enteros de 64 bits con firma |
rs_matriz2x2 | Matriz 2x2 de números de punto flotante de 32 bits |
rs_matriz3x3 | Matriz 3×3 de números de punto flotante de 32 bits |
rs_matriz4x4 | Matriz 4x4 de números de punto flotante de 32 bits |
rs_quaternion | Cuaternión |
corto2 | Dos números enteros de 16 bits con firma |
corto3 | Tres números enteros de 16 bits con firma |
corto4 | Cuatro números enteros con firma de 16 bits |
tamaño_t | Tipo de talla sin firma |
tamaño_s_t | Tipo de tamaño firmado |
uchar | Número entero de 8 bits sin firma |
uchar2 | Dos números enteros de 8 bits sin firma |
uchar3 | Tres números enteros de 8 bits sin firma |
uchar4 | Cuatro números enteros sin firma de 8 bits |
uint | Número entero de 32 bits sin firma |
uint16_t | Número entero de 16 bits sin firma |
uint2 | Dos números enteros de 32 bits sin firma |
Uint3 | Tres números enteros sin firma de 32 bits |
uint32_t | Número entero de 32 bits sin firma |
Uint4 | Cuatro números enteros sin firma de 32 bits |
uint64_t. | Número entero sin firma de 64 bits |
uint8_t. | Número entero de 8 bits sin firma |
ulong | Número entero sin firma de 64 bits |
ulong2 | Dos números enteros sin firma de 64 bits |
ulong3 | Tres números enteros de 64 bits sin firma |
ulong4 | Cuatro números enteros sin firma de 64 bits |
ushort | Número entero de 16 bits sin firma |
ushort2 | Dos números enteros de 16 bits sin firma |
ushort3 | Tres números enteros sin firma de 16 bits |
ushort4 | Cuatro números enteros sin firma de 16 bits |
Tipos de objetos
Los siguientes tipos se usan para manipular objetos de RenderScript, como asignaciones, samplers, elementos y secuencias de comandos. La mayoría de estos objetos se crean con las APIs de RenderScript de Java.
Tipos | |
---|---|
rs_allocation | Controla para una asignación |
rs_allocation_cubemap_face; | Enum para seleccionar caras de mapa de cubo |
rs_allocation_usage_type; | Campo de bits para especificar cómo se usa una asignación |
rs_data_kind | Tipo de datos del elemento |
rs_data_type; | Tipo de datos básicos del elemento |
rs_element | Cómo controlar un elemento |
rs_sampler | Controlar a un sampler |
rs_sampler_value [valor_muestra_rs_sampler] | Valor T de ajuste de muestra |
secuencias de comandos_rs | Controla a una secuencia de comandos |
rs_type | Cómo controlar un tipo |
rs_yuv_format. | Formato YUV |
Funciones de conversión
Las siguientes funciones convierten de un tipo de vector numérico a otro, o de una representación de color a otra.
Funciones | |
---|---|
convertir | Convierte vectores numéricos |
rsPackColorTo8888 | Cómo crear una uchar4 RGBA a partir de números de punto flotante |
rsUnpackColor8888. | Cómo crear una RGBA float4 a partir de uchar4 |
rsYuvToRGBA | Cómo convertir un valor YUV a RGBA |
Funciones y constantes matemáticas
Las funciones matemáticas que aparecen a continuación se pueden aplicar a escalares y vectores. Cuando se aplica a los vectores, el valor que se muestra es un vector de la función aplicada a cada entrada de la entrada.
Por ejemplo:
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 las Funciones matemáticas de vector para ver funciones como distance() y length(), que interpretan la entrada como un solo vector en un espacio n-dimensional.
La precisión de las operaciones matemáticas en flotantes de 32 bits se ve afectada por los pragmas rs_fp_relaxed y rs_fp_full. Bajo rs_fp_relaxed, los valores subnormales pueden pasarse a cero y se puede redondear hacia cero. En comparación, rs_fp_full requiere el manejo correcto de valores subnormales, es decir, menores que 1.17549435e-38f. rs_fp_rull también requiere redondear al más cercano con empate.
Se pueden lograr diferentes concesiones entre la velocidad y la precisión mediante el uso de variantes de las funciones matemáticas comunes. Funciones cuyo nombre comienza con
- native_: Es posible que tenga implementaciones de hardware personalizadas con una precisión más débil. Además, los valores subnormales pueden pasarse a cero y se puede usar el redondeo hacia cero, y es posible que la entrada infinita y NaN no se manejen de forma correcta.
- mitad_: Puede realizar cómputos internos con flotantes de 16 bits. Además, los valores subnormales pueden descartarse a cero y se puede usar el redondeo hacia cero.
Constantes | |
---|---|
M_1_PI | 1 / pi, como un número de punto flotante de 32 bits |
M_2_PI | 2 / pi, como un número de punto flotante de 32 bits |
M_2_RAIZ2PI | 2 / sqrt(pi), como un número de punto flotante de 32 bits |
M_E | e, como un número de punto flotante de 32 bits |
M_LN10 | log_e(10), como un número de punto flotante de 32 bits |
M_LN2 | log_e(2), como un número de punto flotante de 32 bits |
M_LOG10E | log_10(e), como un número de punto flotante de 32 bits |
M_LOG2E | log_2(e), como un número de punto flotante de 32 bits |
M_PI | pi, como un número de punto flotante de 32 bits. |
M_PI_2 | pi / 2, como un número de punto flotante de 32 bits |
M_PI_4 | pi / 4, como un número de punto flotante de 32 bits |
M_SQRT1_2 | 1 / sqrt(2), como un número de punto flotante de 32 bits |
M_SQRT2 | cuadrado(2), como número de punto flotante de 32 bits |
Funciones | |
---|---|
absoluto | Valor absoluto de un número entero |
acos | Coseno inverso |
acosador | Coseno hiperbólico inverso |
acospi | Coseno inverso dividido por pi |
asen | Seno inverso |
asinh | Seno hiperbólico inverso |
asinpi | Seno inverso dividido por pi |
atán | Tangente inversa |
atan2 | Tangente inversa de una proporción |
atan2pi | Tangente inversa de una proporción, dividida por el valor pi |
atán | Tangente hiperbólica inversa |
atanpi | Tangente inversa dividida por pi |
CTR | Raíz cúbica |
ceil | Número entero más pequeño no menor que un valor |
restringir | Restringe un valor a un rango |
clz | Cantidad de 0 bits iniciales |
copysign | Copia el signo de un número a otro |
cos | Coseno |
coge | Coseno hiperbólico |
cospi | Coseno de un número multiplicado por pi |
grados | Convierte radianes en grados. |
erf | Función de error matemático |
EFC | Función de error complementario matemático |
exp. | elevado a un número |
exp.10 | 10 elevado a un número |
exp.2 | 2 elevado a un número |
expm1 | e elevado a un número menos uno |
fabulosos | Valor absoluto de un número de punto flotante |
fdim | Diferencia positiva entre dos valores |
piso | Número entero más pequeño que no sea mayor que un valor |
mujer | Multiplica y agrega |
campaña de máx. rendimiento | Máximo de dos números de punto flotante |
juan | Mínimo de dos números de punto flotante |
fmod | Módulo |
fracta | Parte fraccionaria positiva |
frexp | Mantisa binaria y exponente |
half_recip | Calculado recíproco con una precisión de 16 bits |
medio_rsqrt | Recíproco de una raíz cuadrada calculada con una precisión de 16 bits |
medio_sqrt | Raíz cuadrada calculada con una precisión de 16 bits |
hipoteo | Hipotenusa |
ilogb | Exponente base dos |
exp. ldexp | Crea un punto flotante a partir de la mantisa y el exponente. |
lgamma | Logaritmo natural de la función gamma |
registro | Logaritmo natural |
Registro10 | Logaritmo en base 10 |
log1p | Logaritmo natural de un valor más 1 |
Registro2 | Logaritmo en base 2 |
logb | Exponente base dos |
enfadado | Multiplica y agrega |
máx. | Máxima |
min | Mínima |
mezcla | Combina dos valores |
modf | Componentes integrales y fraccionarios |
nan | No es un número |
nan_half | No es un número |
native_acos | Coseno inverso aproximado |
nativo_acosh | Coseno hiperbólico inverso aproximado |
native_acospi | Coseno inverso aproximado dividido por pi |
native_asin | Seno inverso aproximado |
native_asinh | Seno hiperbólico inverso aproximado |
native_asinpi | Seno inverso aproximado dividido por pi |
native_atan | Tangente inversa aproximada |
native_atan2 | Tangente inversa aproximada de una proporción |
native_atan2pi | Tangente inversa aproximada de una proporción, dividida por el valor pi |
nativo_atanh | Tangente hiperbólica inversa aproximada |
native_atanpi | Tangente inversa aproximada dividida por pi |
native_cbrt | Raíz cúbica aproximada |
native_cos | Coseno aproximado |
native_cosh | Coseno hipobólico aproximado |
native_cospi | Coseno aproximado de un número multiplicado por pi |
native_divide | División aproximada |
nativo_exp. | E aproximadamente elevado a un número |
nativo_exp10 | Aproximadamente 10 elevado a un número |
native_exp2 | Aproximadamente 2 se elevado a un número |
native_expm1 | E aproximadamente elevado a un número menos uno |
native_hypot | Hipotenusa aproximada |
native_log | Logaritmo natural aproximado |
native_log10; | Logaritmo en base 10 aproximado |
native_log1p; | Logaritmo natural aproximado de un valor más 1 |
native_log2 | Logaritmo aproximado en base 2 |
native_powr | Base positiva aproximada elevada a un exponente |
native_recip | Recíproco aproximado |
native_rootn | Raíz enésima aproximada |
native_rsqrt | Recíproco aproximado de una raíz cuadrada |
native_sen | Seno aproximado |
native_sincos | Seno y coseno aproximados |
native_sinh | Seno hiperbólico aproximado |
native_sinpi | Seno aproximado de un número multiplicado por pi |
native_sqrt | Raíz cuadrada aproximada |
native_tan | Tangente aproximada |
native_tanh | Tangente hiperbólica aproximada |
native_tanpi | Tangente aproximada de un número multiplicado por pi |
nextafter | Siguiente número de punto flotante |
pistolas | Se eleva la base a un exponente |
polo | Base elevada a un exponente de número entero |
pulso | Base positiva elevada a un exponente |
radianes | Convierte grados en radianes. |
resto | El resto de una división |
remo | Resto y cociente de una división |
rint | Redondear a par |
raíz | Raíz enésima |
redondo | Redondear desde cero |
rsRand | Número pseudoaleatorio |
rsqrt | Recíproco de una raíz cuadrada |
signo | Signo de un valor |
sen | Seno |
sincos | Seno y coseno |
sena | Seno hiperbólico |
sinpi | Seno de un número multiplicado por pi |
sqrt | Raíz cuadrada |
paso | 0 si es menor que un valor, 0 de lo contrario |
bronce | Tangente |
juan | Tangente hiperbólica |
tanpi | Tangente de un número multiplicado por pi |
tgamma | Función gamma |
truco | Trunca un punto flotante |
Funciones matemáticas de vector
Estas funciones interpretan los argumentos de entrada como una representación de vectores en un espacio n-dimensional.
La precisión de las operaciones matemáticas en flotantes de 32 bits se ve afectada por los pragmas rs_fp_relaxed y rs_fp_full. Consulta Constantes y funciones matemáticas para obtener más detalles.
Se pueden lograr diferentes concesiones entre la velocidad y la precisión mediante el uso de variantes de las funciones matemáticas comunes. Funciones cuyo nombre comienza con
- native_: Es posible que tenga implementaciones de hardware personalizadas con una precisión más débil. Además, los valores subnormales pueden pasarse a cero y se puede usar el redondeo hacia cero, y es posible que la entrada infinita y NaN no se manejen de forma correcta.
- fast_: Puede realizar cálculos internos con flotantes de 16 bits. Además, los valores subnormales pueden descartarse a cero y se puede usar el redondeo hacia cero.
Funciones | |
---|---|
cruz | Producto cruzado de dos vectores |
distancia | Distancia entre dos puntos |
punto | Producto punto de dos vectores |
fast_distancia | Distancia aproximada entre dos puntos |
fast_length | Longitud aproximada de un vector |
fast_normalize | Vector normalizado aproximado |
longitud | Longitud de un vector |
native_distance | Distancia aproximada entre dos puntos |
native_length | Longitud aproximada de un vector |
native_normalize | Normalizar un vector de manera aproximada |
normalizar | Normalizar un vector |
Funciones de matriz
Estas funciones te permiten manipular matrices cuadradas de rango 2x2, 3x3 y 4x4. Son particularmente útiles para las transformaciones gráficas y son compatibles con OpenGL.
Usamos un índice basado en cero para las filas y columnas. P.ej., el último elemento de una rs_matrix4x4 se encuentra en (3, 3).
RenderScript usa matrices de columna mayor y vectores basados en columnas. Se puede transformar un vector mediante la posmultiplicación, p.ej., (matrix * vector)
, según lo proporciona rsMatrixMultiply().
Para crear una matriz de transformación que realice dos transformaciones a la vez, multiplica las dos matrices de origen, con la primera transformación como el argumento correcto. P.ej., para crear una matriz de transformación que aplique la transformación s1 seguida de s2, llama a rsMatrixLoadMultiply(&combined, &s2, &s1)
.
Esto deriva de s2 * (s1 * v)
, que es (s2 * s1) * v
.
Tenemos dos estilos de funciones para crear matrices de transformación: rsMatrixLoadTransformation y rsMatrixTransformation. El primer estilo simplemente almacena la matriz de transformación en el primer argumento. La última modificación modifica una matriz de transformación preexistente para que la transformación nueva ocurra primero. P.ej., si llamas a rsMatrixTranslate() en una matriz que ya realiza un ajuste de tamaño, la matriz resultante cuando se aplica a un vector realizará primero la traducción y, luego, el ajuste.
Funciones | |
---|---|
rsExtractFrustumPlanes | Calcula los planos de tronco |
rsIsSphereInFrustum. | Comprueba si una esfera está dentro de los planos del tronco. |
rsMatrixGet | Obtén un elemento |
rsMatrixInverso | Invierte una matriz en su lugar |
rsMatrixInverseTranspose | Invierte y transpone una matriz en el lugar |
rsMatrixLoad | Carga o copia una matriz |
rsMatrixLoadFrustum. | Carga una matriz de proyección de tronco |
rsMatrixLoadIdentity | Cargar matriz de identidad |
rsMatrixLoadMultiply. | Multiplica dos matrices |
rsMatrixLoadOrtho | Carga una matriz de proyección ortográfica |
rsMatrixLoadPerspective | Cómo cargar una matriz de proyección de perspectiva |
rsMatrixLoadRotate | Carga una matriz de rotación |
rsMatrixLoadScale | Carga una matriz de escalamiento |
rsMatrixLoadTranslate | Carga una matriz de traducción |
rsMatrixMultiply | Multiplicar una matriz por un vector o por otra matriz |
rsMatrixRotate | Aplicar una rotación a una matriz de transformación |
rsMatrixScale | Aplicar un escalamiento a una matriz de transformación |
ConjuntorsMatrix | Cómo establecer un elemento |
rsMatrixTranslate | Aplicar una traslación a una matriz de transformación |
rsMatrixTranspose | Transpone un lugar de matriz |
Funciones de cuaternión
Las siguientes funciones manipulan cuaterniones.
Funciones | |
---|---|
rsQuaternionAdd | Suma dos cuaterniones |
rsQuaternionConjugate | Conjugar un cuaternión |
rsQuaternionDot | Producto punto de dos cuaterniones |
rsQuaternionGetMatrixUnit. | Obtén una matriz de rotación a partir de un cuaternión |
rsQuaternionLoadRotate | Crea un cuaternión de rotación |
rsQuaternionLoadRotateUnit | Cuaternión que representa una rotación sobre un vector unitario arbitrario |
rsQuaternionMultiply | Multiplicar un cuaternión por un escalar o algún otro cuaternión |
rsQuaternionNormalize | Normaliza un cuaternión |
rsQuaternionSet | Crea un cuaternión |
rsQuaternionSlerp | Interpolación lineal esférica entre dos cuaterniones |
Funciones de actualizaciones atómicas
Usa las siguientes funciones para actualizar valores compartidos entre varios subprocesos. Garantizan que los valores se actualicen de forma atómica, es decir, que la memoria lea, las actualizaciones y las escrituras de memoria se realicen en el orden correcto.
Estas funciones son más lentas que sus equivalentes no atómicos, por lo que solo debes usarlas cuando se necesite sincronización.
Ten en cuenta que, en RenderScript, es probable que tu código se ejecute en subprocesos separados, aunque no los hayas creado explícitamente. El entorno de ejecución de RenderScript con frecuencia dividirá la ejecución de un kernel en varios subprocesos. La actualización de los globales debe hacerse con funciones atómicas. Si es posible, modifica el algoritmo para evitarlos por completo.
Funciones | |
---|---|
rsAtomicAdd. | Adición segura para subprocesos |
rsAtomicAnd. | A nivel de bits y con seguridad para subprocesos |
rsAtomicCas | Comparación y configuración de subprocesos seguros |
rsAtomicDec; | Disminución segura para subprocesos |
rsAtomicInc. | Incremento seguro para subprocesos |
rsAtomicMax; | Máximo de seguridad para subprocesos |
rsAtomicMin | Mínimo de seguridad para subprocesos |
rsAtomicOr | o a nivel de bits seguro para subprocesos |
rsAtomicSub. | Resta de subprocesos seguros |
rsAtomicXor. | Exclusivo a nivel de bits seguro para subprocesos |
Tipos y funciones de tiempo
Las siguientes funciones se pueden usar para indicar la hora actual del reloj y la hora actual del sistema. No se recomienda llamar a estas funciones dentro de un kernel.
Tipos | |
---|---|
rs_time_t | Segundos desde el 1 de enero de 1970 |
rs_tm | Estructura de fecha y hora |
Funciones | |
---|---|
rsGetDt | Tiempo transcurrido desde la última llamada |
rsLocaltime | Convertir a hora local |
Hora de los rs | Segundos desde el 1 de enero de 1970 |
rsUptimeMillis | Tiempo de actividad del sistema en milisegundos |
rsUptimeNanos | Tiempo de actividad del sistema en nanosegundos |
Funciones de creación de asignaciones
Las siguientes funciones se pueden usar para crear asignaciones desde una secuencia de comandos.
Se puede llamar a estas funciones de forma directa o indirecta desde una función invocable. Si alguna ruta de flujo de control puede generar una llamada a estas funciones desde una función del kernel de RenderScript, se generará un error de compilador.
Funciones | |
---|---|
rsCreateAllocation | Crea un objeto rs_allocation de un Type determinado. |
rsCreateElement | Crea un objeto rs_element del tipo de datos especificado. |
rsCreatePixelElement. | Crea un objeto rs_element del tipo y el tipo de datos especificados |
rsCreateType | Crea un objeto rs_type con los atributos de elemento y forma especificados. |
rsCreateVectorElement | Crea un objeto rs_element del tipo de datos y el ancho del vector especificados |
Funciones de acceso a datos de asignación
Las siguientes funciones se pueden usar para obtener y establecer las celdas que conforman una asignación.
- Se puede acceder a las celdas individuales con las funciones rsGetElementAt* y rsSetElementAt.
- Se pueden copiar varias celdas con las funciones rsAllocationCopy* y rsAllocationV*.
- Para obtener valores a través de un muestreo, usa rsSample.
Funciones | |
---|---|
rsAllocationCopy1DRange | Copiar celdas consecutivas entre asignaciones |
rsAllocationCopy2DRange | Copiar una región rectangular de celdas entre asignaciones |
rsAllocationVLoadX | Obtener un vector a partir de una asignación de escalares |
rsAllocationVStoreX | Almacena un vector en una asignación de escalares |
rsGetElementAt. | Cómo mostrar una celda a partir de una asignación |
rsGetElementAtYuv_uchar_U. | Cómo obtener el componente U de una asignación de YUV |
rsGetElementAtYuv_uchar_V. | Cómo obtener el componente V de una asignación de YUV |
rsGetElementAtYuv_uchar_Y. | Cómo obtener el componente Y de una asignación de YUV |
Muestra de rs | Cómo tomar muestras de un valor de una asignación de textura |
rsSetElementAt. | Cómo establecer una celda de una asignación |
Funciones de características de objetos
Las siguientes funciones se pueden usar para consultar las características de un objeto de asignación, elemento o muestrar. Estos objetos se crean a partir de Java. No puedes crearlas a partir de una secuencia de comandos.
Asignaciones:
Las asignaciones son el método principal que se usa para pasar datos hacia y desde kernels de RenderScript.
Son una colección estructurada de celdas que se puede usar para almacenar mapas de bits, texturas, datos arbitrarios, etcétera.
Esta colección de celdas puede tener muchas dimensiones (X, Y, Z, Array0, Array1, Array2, Array3), caras (para cubemaps) y niveles de detalles (para mipmapping).
Consulta android.renderscript.Allocation para obtener información detallada sobre cómo crear asignaciones.
Elementos:
El término "elemento" se usa de manera un poco ambigua en RenderScript, ya que tanto la información de tipo para las celdas de una asignación como la creación de instancias de ese tipo. Por ejemplo:
- rs_element es un controlador para una especificación de tipo.
- En funciones como rsGetElementAt(), "element" se refiere a la creación de instancias del tipo, es decir, la celda de una asignación.
Las siguientes funciones te permiten consultar las características de la especificación del tipo.
Un elemento puede especificar tipos de datos simples, como se encuentran en C, p.ej., un número entero, un número de punto flotante o un valor booleano. También puede especificar un controlador para un objeto RenderScript. Consulta rs_data_type para ver una lista de los tipos básicos.
Los elementos pueden especificar versiones de vectores de tamaño fijo (de tamaño 2, 3 o 4) de los tipos básicos. Los elementos se pueden agrupar en elementos complejos, lo que crea el equivalente de las definiciones de estructura de C.
Los elementos también pueden tener un tipo, que es la información semántica que se usa para interpretar los datos de los píxeles. Consulta rs_data_kind.
Cuando creas asignaciones de elementos comunes, simplemente puedes usar uno de los numerosos elementos predefinidos, como F32_2.
Para crear elementos complejos, usa la clase de Java Element.Builder.
Samples:
Los objetos de muestra definen cómo se pueden leer las asignaciones como estructuras dentro de un kernel. Consulta android.renderscript.S.
Funciones | |
---|---|
rsAllocationGetDimFaces | Presencia de más de un rostro |
rsAllocationGetDimLOD | Presencia de niveles de detalle |
rsAllocationGetDimX | Tamaño de la dimensión X |
rsAllocationGetDimY | Tamaño de la dimensión Y |
rsAllocationGetDimZ | Tamaño de la dimensión Z |
rsAllocationGetElement | Obtén el objeto que describe la celda de una asignación |
rsClearObject; | Libera un objeto |
rsElementGetBytesSize. | Tamaño de un elemento |
rsElementGetDataKind | Tipo de elemento |
rsElementGetDataType | Tipo de datos de un elemento |
rsElementGetSubElement. | Subelemento de un elemento complejo |
rsElementGetSubElementArraySize | Tamaño de matriz de un subelemento de un elemento complejo |
rsElementGetSubElementCount | Cantidad de subelementos |
rsElementGetSubElementName | Nombre de un subelemento |
rsElementGetSubElementNameLength | Longitud del nombre de un subelemento |
rsElementGetSubElementOffsetBytes | Compensación del subelemento con instancia |
rsElementGetVectorSize. | Tamaño del vector del elemento |
rsIsObject | Comprueba si hay un identificador vacío |
rsSamplerObtenerAnisotropía | Anisotropía del sampler |
rsSamplerGetMagnification | Valor de ampliación de la muestra |
rsSamplerGetMinification | Valor de reducción de la muestra |
rsSamplerGetWrapS | Valor S de ajuste de muestra |
rsSamplerGetWrapT | Valor T de ajuste de muestra |
Tipos y funciones de invocación de kernel
La función rsForEach() se puede usar para invocar el kernel raíz de una secuencia de comandos.
Las otras funciones se usan para obtener las características de la invocación de un kernel en ejecución, como las dimensiones y los índices actuales. Estas funciones toman un rs_kernel_context como argumento.
Tipos | |
---|---|
rs_for_each_strategy_t | Orden de procesamiento de celda sugerido |
rs_kernel | Cómo controlar una función de kernel |
rs_kernel_context | Controla el contexto de invocación de un kernel |
rs_script_call_t, | Información de iteración de celdas |
Funciones | |
---|---|
rsForEach | Inicia un kernel. |
rsForEachInternal | (API interna) Inicia un kernel en la secuencia de comandos actual (con el número de ranura) |
rsForEachWithOptions | Inicia un kernel con opciones. |
rsGetArray0 | Índice en la dimensión Array0 para el contexto de kernel especificado |
rsGetArray1 | Índice en la dimensión Array1 para el contexto de kernel especificado |
rsGetArray2 | Índice en la dimensión Array2 para el contexto de kernel especificado |
rsGetArray3 | Índice en la dimensión Array3 para el contexto de kernel especificado |
rsGetDimArray0 | Tamaño de la dimensión Array0 para el contexto de kernel especificado |
rsGetDimArray1 | Tamaño de la dimensión Array1 para el contexto de kernel especificado |
rsGetDimArray2 | Tamaño de la dimensión Array2 para el contexto de kernel especificado |
rsGetDimArray3 | Tamaño de la dimensión Array3 para el contexto de kernel especificado |
rsGetDimHasFaces | Presencia de más de una cara para el contexto de kernel especificado |
rsGetDimLod | Cantidad de niveles de detalle para el contexto de kernel especificado |
rsGetDimX | Tamaño de la dimensión X para el contexto de kernel especificado |
rsGetDimY | Tamaño de la dimensión Y para el contexto de kernel especificado |
rsGetDimZ | Tamaño de la dimensión Z para el contexto de kernel especificado |
rsGetFace | Coordenada de la cara para el contexto del kernel especificado |
rsGetLod | Índice en la dimensión Niveles de detalle para el contexto de kernel especificado |
Funciones de entrada y salida
Estas funciones se usan para lo siguiente:
- Enviar información al cliente de Java
- Envía la asignación procesada o recibe la siguiente asignación que se procesará.
Funciones | |
---|---|
rsAllocationIoReceive | Recibir contenido nuevo de la fila |
rsAllocationIoSend | Envía contenido nuevo a la fila |
rsSendToClient. | Envía un mensaje al cliente sin bloqueos |
rsSendToClientBlocking | Enviar un mensaje al cliente y bloquear |
Funciones de depuración
Las siguientes funciones están diseñadas para utilizarse durante el desarrollo de aplicaciones. No deben usarse en aplicaciones de envío.
Funciones | |
---|---|
rsDebug | Registrar un mensaje y valores |
Tipos y funciones de gráficos
El subsistema de gráficos de RenderScript se quitó en el nivel de API 23.