Tipos numéricos de RenderScript

Descripción general

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.

Resumen

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

char2 : dos números enteros de 8 bits con firma

Una typedef de: char __attribute__(((ext_vector_type(2)))

Vector de dos caracteres Estos dos caracteres se empaquetan en un solo campo de 16 bits con una alineación de 16 bits.

char3 : tres números enteros de 8 bits con firma

Un typedef de: char __attribute__(((ext_vector_type(3)))

Un vector de tres caracteres. Estos tres caracteres se empaquetan en un solo campo de 32 bits con una alineación de 32 bits.

char4 : cuatro números enteros firmados de 8 bits

Un typedef de: char __attribute__(((ext_vector_type(4)))

Un vector de cuatro caracteres. Estos cuatro caracteres se empaquetan en un solo campo de 32 bits con una alineación de 32 bits.

double2 : Dos flotantes de 64 bits

Un typedef de: doble __atributo__((ext_vector_type(2)))

Vector de dos dobles. Estos dos campos dobles empaquetados en un solo campo de 128 bits con una alineación de 128 bits.

double3 : Tres números flotantes de 64 bits

Un typedef de: doble __atributo__((ext_vector_type(3)))

Vector de tres dobles. Estos tres campos dobles empaquetados en un solo campo de 256 bits con una alineación de 256 bits

double4 : Cuatro flotantes de 64 bits

A typedef de: doble __atributo__((ext_vector_type(4)))

Vector de cuatro dobles. Estos cuatro campos dobles empaquetados en un solo campo de 256 bits con una alineación de 256 bits.

float2 : Dos flotantes de 32 bits

Un typedef de: __atributo___flotante ((ext_vector_type(2)))

Vector de dos números de punto flotante. Estos dos números de punto flotante se empaquetan en un solo campo de 64 bits con una alineación de 64 bits.

Vector de dos números de punto flotante. Estos dos números de punto flotante se empaquetan en un solo campo de 64 bits con una alineación de 64 bits.

float3 : Tres números flotantes de 32 bits

Un typedef de: __attribute___float_((ext_vector_type(3)))

Vector de tres números de punto flotante. Estos tres números de punto flotante se empaquetan en un solo campo de 128 bits con una alineación de 128 bits.

float4 : Cuatro flotantes de 32 bits

Un typedef de: __attribute___float_((ext_vector_type(4)))

Vector de cuatro tipos de números de punto flotante. Estos cuatro números de punto flotante se empaquetan en un solo campo de 128 bits con una alineación de 128 bits.

mitad : valor de punto flotante de 16 bits

Se agregó un typedef de __fp16 en el nivel de API 23.

Un valor de punto flotante de 16 bits.

half2 : dos flotantes de 16 bits

Se agregó un typedef de: mitad __atributo__((ext_vector_type(2))) Se agregó en el nivel de API 23.

Versión vectorial del tipo de punto flotante medio. Proporciona dos semicampos empaquetados en un solo campo de 32 bits con alineación de 32 bits.

half3 : tres números flotantes de 16 bits

Se agregó un typedef de: medio __attribute__((ext_vector_type(3))) Se agregó en el nivel de API 23.

Versión vectorial del tipo de punto flotante medio. Proporciona tres semicampos empaquetados en un solo campo de 64 bits con alineación de 64 bits.

half4 : cuatro flotantes de 16 bits

A typedef de: mitad __attribute__(((ext_vector_type(4)))) Se agregó en el nivel de API 23.

Versión vectorial del tipo de punto flotante medio. Proporciona cuatro semicampos empaquetados en un solo campo de 64 bits con alineación de 64 bits.

int16_t : Número entero de 16 bits firmado

A typedef de: corto

Tipo de número entero de 16 bits con firma.

int2 : dos números enteros con firma de 32 bits

Un typedef de: int __attribute__(((ext_vector_type(2)))

Vector de dos ints. Estos dos int se empaquetan en un solo campo de 64 bits con una alineación de 64 bits.

int3 : Tres números enteros de 32 bits con firma

Un typedef de: int __attribute__(((ext_vector_type(3)))

Vector de tres ints. Estos tres ints se empaquetan en un solo campo de 128 bits con una alineación de 128 bits.

int32_t : Número entero de 32 bits con firma

A typedef de: int

Tipo de número entero de 32 bits con firma.

int4 : Cuatro números enteros firmados de 32 bits

A typedef de: int __attribute__(((ext_vector_type(4)))

Vector de cuatro ints. Estos cuatro cuatro se empaquetan en un solo campo de 128 bits con una alineación de 128 bits.

int64_t : Número entero de 64 bits con firma

Una typedef de: long. Se quitó del nivel de API 21 y versiones posteriores.

Se agregó un typedef de: long. Se agregó en el nivel de API 21.

Tipo de número entero con firma de 64 bits.

int8_t : Número entero de 8 bits con firma

A typedef de: char

Tipo de número entero con firma de 8 bits.

long2 : dos números enteros firmados de 64 bits

A typedef de: long __attribute__(((ext_vector_type(2)))

Vector de dos largos. Estos dos largos se empaquetan en un solo campo de 128 bits con una alineación de 128 bits.

long3 : tres números enteros de 64 bits con firma

Un typedef de: largo __attribute__((ext_vector_type(3)))

Vector de tres largos. Estos tres archivos largos se empaquetan en un solo campo de 256 bits con una alineación de 256 bits.

long4 : cuatro números enteros firmados de 64 bits

Un typedef de: largo __attribute__(((ext_vector_type(4)))

Vector de cuatro largos. Estos cuatro largos se empaquetan en un solo campo de 256 bits con una alineación de 256 bits.

rs_matrix2x2 : Matriz de 2x2 de números de punto flotante de 32 bits

Una estructura con los siguientes campos:     

m[4] de número de punto flotante

Matriz cuadrada de números de punto flotante de 2x2. Las entradas se almacenan en el array en la ubicación [row*2 + col].

Consulta Funciones de matriz.

rs_matrix3x3 : Matriz de 3×3 de números de punto flotante de 32 bits

Una estructura con los siguientes campos:     

m[9] flotante

Matriz cuadrada de números de punto flotante de 3 x 3 Las entradas se almacenan en el array en la ubicación [row*3 + col].

Consulta Funciones de matriz.

rs_matrix4x4 : Matriz de 4×4 de números de punto flotante de 32 bits

Una estructura con los siguientes campos:     

m[16] flotante

Matriz cuadrada de números de punto flotante de 4 x 4 Las entradas se almacenan en el array en la ubicación [row*4 + col].

Consulta Funciones de matriz.

rs_quaternion : Cuaternión

Un typedef de: float4

Es una matriz cuadrada de números de punto flotante de 4 x 4 que representa un cuaternión.

Consulta Funciones de cuaternión.

short2 : dos números enteros con firma de 16 bits

A typedef de: __attribute__ corto(((ext_vector_type(2)))

Vector de dos Shorts. Estos dos Shorts se empaquetan en un solo campo de 32 bits con una alineación de 32 bits.

short3 : tres números enteros con firma de 16 bits

A typedef de: __attribute__ corto(((ext_vector_type(3))))

Vector de tres Shorts. Estos tres campos cortos empaquetados en un solo campo de 64 bits con una alineación de 64 bits

short4 : cuatro números enteros con firma de 16 bits

A typedef de: __attribute__ corto(((ext_vector_type(4)))

Vector de cuatro Shorts. Estos cuatro campos cortos se empaquetan en un solo campo de 64 bits con una alineación de 64 bits.

size_t : Tipo de talla sin firma

Un typedef de: uint64_t Cuando compilas para 64 bits

Un typedef de: uint32_t Cuando compilas para 32 bits

Tipo de tamaño sin firma. La cantidad de bits depende de las marcas de compilación.

ssize_t : Tipo de talla firmado

Un typedef de: int64_t Cuando compilas para 64 bits

Un typedef de: int32_t Cuando compilas para 32 bits

Tipo de tamaño con firma. La cantidad de bits depende de las marcas de compilación.

uchar : Número entero de 8 bits sin firma

A typedef de: uint8_t

Tipo de número entero sin firma de 8 bits.

uchar2 : dos números enteros de 8 bits sin firma

Un typedef de: uchar __attribute__(((ext_vector_type(2)))

Vector de dos uchars Estos dos campos uchar empaquetados en un solo campo de 16 bits con una alineación de 16 bits.

uchar3 : tres números enteros de 8 bits sin firma

Un typedef de: uchar __attribute__(((ext_vector_type(3))))

Vector de tres uchars. Estos tres campos uchar empaquetados en un solo campo de 32 bits con una alineación de 32 bits

uchar4 : cuatro números enteros sin firma de 8 bits

Un typedef de: uchar __attribute__(((ext_vector_type(4)))

Un vector de cuatro uchars. Estos cuatro campos uchar empaquetados en un solo campo de 32 bits con una alineación de 32 bits

uint : Número entero de 32 bits sin firma

Un typedef de: uint32_t

Un tipo de número entero sin firma de 32 bits.

uint16_t : Número entero sin firma de 16 bits

A typedef de: short sin firma

Un tipo de número entero sin firma de 16 bits.

uint2 : Dos números enteros de 32 bits sin firma

Un typedef de: uint __attribute__(((ext_vector_type(2))))

Vector de dos Uints. Estas dos combinaciones se empaquetan en un solo campo de 64 bits con una alineación de 64 bits.

uint3 : Tres números enteros de 32 bits sin firma

Un typedef de: uint __attribute__(((ext_vector_type(3))))

Vector de tres colores Estas tres sugerencias se empaquetan en un solo campo de 128 bits con una alineación de 128 bits.

uint32_t : Número entero sin firma de 32 bits

A typedef de: unsigned int

Un tipo de número entero sin firma de 32 bits.

uint4 : Cuatro números enteros sin firma de 32 bits

Un typedef de: uint __attribute__(((ext_vector_type(4))))

Vector de cuatro uints. Estas cuatro sugerencias se empaquetan en un solo campo de 128 bits con una alineación de 128 bits.

uint64_t : Número entero sin firma de 64 bits

Un typedef de: long sin firma long Se quitó del nivel de API 21 y versiones posteriores

Un typedef de: largo sin firma Se agregó en el nivel de API 21.

Un tipo de número entero sin firma de 64 bits.

uint8_t : Número entero de 8 bits sin firma

A typedef de: carácter sin firma

Tipo de número entero sin firma de 8 bits.

ulong : Número entero sin firma de 64 bits

Un typedef de: uint64_t

Un tipo de número entero sin firma de 64 bits.

ulong2 : Dos números enteros de 64 bits sin firma

Un typedef de: ulong __attribute__(((ext_vector_type(2)))

Vector de dos ulongs. Estos dos ulongs se empaquetan en un solo campo de 128 bits con una alineación de 128 bits.

ulong3 : tres números enteros sin firma de 64 bits

Un typedef de: ulong __attribute__(((ext_vector_type(3))))

Vector de tres ulongs. Estos tres campos ulong empaquetados en un solo campo de 256 bits con una alineación de 256 bits.

ulong4 : Cuatro números enteros sin firma de 64 bits

Un typedef de: ulong __attribute__(((ext_vector_type(4))))

Vector de cuatro ulongs. Estos cuatro campos ulong empaquetados en un solo campo de 256 bits con una alineación de 256 bits.

ushort : Número entero sin firma de 16 bits

A typedef de: uint16_t

Un tipo de número entero sin firma de 16 bits.

ushort2 : dos números enteros sin firma de 16 bits

Un typedef de: ushort __attribute__(((ext_vector_type(2)))

Vector de dos ushorts Estos dos campos ushort empaquetados en un solo campo de 32 bits con una alineación de 32 bits.

ushort3 : Tres números enteros sin firma de 16 bits

Un typedef de: ushort __attribute__(((ext_vector_type(3)))

Vector de tres ushorts Estos tres campos ushort empaquetados en un solo campo de 64 bits con una alineación de 64 bits.

ushort4 : Cuatro números enteros sin firma de 16 bits

Un typedef de: ushort __attribute__((ext_vector_type(4)))

Un vector de cuatro ushorts. Estos cuatro campos ushort empaquetados en un solo campo de 64 bits con una alineación de 64 bits.