Referencia de la API de entorno de ejecución de RenderScript

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.
Las funciones rsGetElementAt y rsSetElement* tienen nombres incorrectos. No obtienen ni establecen elementos, que son similares a los tipos de datos, obtienen o establecen celdas. Considérelos como rsGetCellAt y rsSetCellAt.

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.