Visão geral
Escalares:
O RenderScript é compatível com os seguintes tipos numéricos escalares:
8 bits | 16 bits | 32 bits | 64 bits | |
Número inteiro: | caractere, int8_t | curto, int16_t | int32_t (link em inglês) | long, long, int64_t |
Número inteiro sem assinatura: | uchar, uint8_t | ushort, uint16_t | uint, uint32_t | ulong, uint64_t |
Ponto flutuante: | tempo | float | double |
Vetores:
O RenderScript é compatível com vetores de tamanho fixo de 2, 3 e 4. Os vetores são declarados usando o nome de tipo comum seguido por 2, 3 ou 4. Por exemplo, float4, int3, double2, ulong4.
Para criar literais vetoriais, use o tipo de vetor seguido pelos valores entre chaves, por exemplo, (float3){1.0f, 2.0f, 3.0f}
.
As entradas de um vetor podem ser acessadas usando estilos de nomenclatura diferentes.
Entradas únicas podem ser acessadas seguindo o nome da variável com um ponto e:
- As letras x, y, z e w
- As letras r, g, b e a
- A letra s ou S, seguida por um índice baseado em zero.
Por exemplo, com int4 myVar;
, os seguintes são 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
Várias entradas de um vetor podem ser acessadas de uma só vez usando um identificador que é a concatenação de várias letras ou índices. O vetor resultante tem um tamanho igual ao número de entradas nomeadas.
No exemplo acima, as duas entradas do meio podem ser acessadas usando
myVar.yz
, myVar.gb
, myVar.s12
e myVar.S12
.
As entradas não precisam ser contíguas ou em ordem crescente. As entradas podem até ser repetidas, desde que não estejamos tentando atribuir a elas. Também não é possível misturar estilos de nomenclatura.
Confira alguns exemplos do que pode ou não ser feito:
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
Matrizes e quatérnios:
O RenderScript é compatível com matrizes quadradas de tamanho fixo de pontos flutuantes de 2x2, 3x3 e 4x4. Os tipos são chamados de rs_matrix2x2, rs_matrix3x3 e rs_matrix4x4. Consulte Funções de matriz para ver a lista de operações.
Os quaternions também são compatíveis com rs_quaternion. Consulte Funções do Quaterion para a lista de operações.
Resumo
Tipos | |
---|---|
char2 | Dois números inteiros com sinal de 8 bits |
char3. | Três números inteiros com sinal de 8 bits |
char4 (link em inglês) | Quatro números inteiros com sinal de 8 bits |
double2. | Dois flutuantes de 64 bits |
double3. | Três flutuações de 64 bits |
double4. | Quatro flutuações de 64 bits |
float2 (link em inglês) | Dois flutuantes de 32 bits |
float3 (link em inglês) | Três flutuantes de 32 bits |
float4 (link em inglês) | Quatro flutuações de 32 bits |
metade | Valor de ponto flutuante de 16 bits |
metade2 | Dois flutuantes de 16 bits |
half3 | Três flutuações de 16 bits |
half4 | Quatro flutuações de 16 bits |
int16_t (link em inglês) | Número inteiro assinado de 16 bits |
int2 (link em inglês) | Dois números inteiros com sinal de 32 bits |
int3 (link em inglês) | Três números inteiros com sinal de 32 bits |
int32_t (link em inglês) | Número inteiro assinado de 32 bits |
int4 (link em inglês) | Quatro números inteiros assinados de 32 bits |
int64_t (link em inglês) | Número inteiro assinado de 64 bits |
int8_t (link em inglês) | Número inteiro assinado de 8 bits |
long2 (link em inglês) | Dois números inteiros com sinal de 64 bits |
long3 (link em inglês) | Três números inteiros com assinatura de 64 bits |
long4 (link em inglês) | Quatro números inteiros assinados de 64 bits |
rs_matrix2x2 (link em inglês) | Matriz 2x2 de flutuações de 32 bits |
rs_matrix3x3 (link em inglês) | Matriz 3x3 de flutuações de 32 bits |
rs_matrix4x4 (link em inglês) | Matriz 4x4 de flutuações de 32 bits |
rs_quaternion (em inglês) | Quaternion |
curta2 | Dois números inteiros com sinal de 16 bits |
curta3 | Três números inteiros assinados de 16 bits |
short4 (em inglês) | Quatro números inteiros com sinal de 16 bits |
size_t (em inglês) | Tipo de tamanho sem assinatura |
tamanho_t | Tipo de tamanho assinado |
uchar (em inglês) | Número inteiro não assinado de 8 bits |
uchar2 (em inglês) | Dois números inteiros de 8 bits sem assinatura |
uchar3 (link em inglês) | Três números inteiros de 8 bits sem assinatura |
uchar4 (link em inglês) | Quatro números inteiros sem assinatura de 8 bits |
uint (em inglês) | Número inteiro não assinado de 32 bits |
uint16_t (link em inglês) | Número inteiro não assinado de 16 bits |
uint2 (em inglês) | Dois números inteiros de 32 bits sem assinatura |
uint3 (em inglês) | Três números inteiros de 32 bits sem assinatura |
uint32_t (link em inglês) | Número inteiro não assinado de 32 bits |
uint4 (link em inglês) | Quatro números inteiros de 32 bits sem assinatura |
uint64_t (link em inglês) | Número inteiro não assinado de 64 bits |
uint8_t (link em inglês) | Número inteiro não assinado de 8 bits |
ulong (link em inglês) | Número inteiro não assinado de 64 bits |
ulong2 (link em inglês) | Dois números inteiros de 64 bits sem assinatura |
ulong3 (link em inglês) | Três números inteiros de 64 bits sem assinatura |
ulong4 (link em inglês) | Quatro números inteiros sem assinatura de 64 bits |
ushort | Número inteiro não assinado de 16 bits |
ushort2 (em inglês) | Dois números inteiros de 16 bits sem assinatura |
ushort3 (em inglês) | Três números inteiros de 16 bits sem assinatura |
ushort4 (link em inglês) | Quatro números inteiros sem assinatura de 16 bits |
Tipos
char2 : dois números inteiros assinados de 8 bits
Um typedef de: char __attribute__((ext_vector_type(2)))
Vetor de dois caracteres. Esses dois caracteres são compactados em um único campo de 16 bits com um alinhamento de 16 bits.
char3 : três números inteiros assinados de 8 bits
Um typedef de: char __attribute__((ext_vector_type(3)))
Vetor de três caracteres. Esses três caracteres são compactados em um único campo de 32 bits com um alinhamento de 32 bits.
char4 : quatro números inteiros assinados de 8 bits
Um typedef de: char __attribute__((ext_vector_type(4)))
Vetor de quatro caracteres. Esses quatro caracteres são compactados em um único campo de 32 bits com alinhamento de 32 bits.
double2 : dois flutuantes de 64 bits
Um typedef de: double __attribute__((ext_vector_type(2)))
Um vetor de dois valores duplos. Esses dois campos duplos compactados em um único campo de 128 bits com um alinhamento de 128 bits.
double3 : três flutuantes de 64 bits
Um typedef de: double __attribute__((ext_vector_type(3)))
Um vetor de três valores duplos. Esses três campos duplos compactados em um único campo de 256 bits com um alinhamento de 256 bits.
double4 : quatro flutuações de 64 bits
Um typedef de: double __attribute__((ext_vector_type(4)))
Um vetor de quatro valores duplos. Esses quatro campos duplos compactados em um único campo de 256 bits com um alinhamento de 256 bits.
float2 : dois flutuantes de 32 bits
Um typedef de: float __attribute__((ext_vector_type(2)))
Um vetor de dois pontos flutuantes. Esses dois flutuantes são compactados em um único campo de 64 bits com alinhamento de 64 bits.
Um vetor de dois pontos flutuantes. Esses dois flutuantes são compactados em um único campo de 64 bits com alinhamento de 64 bits.
float3 : três flutuantes de 32 bits
Um typedef de: float __attribute__((ext_vector_type(3)))
Um vetor de três flutuações. Esses três flutuantes são compactados em um único campo de 128 bits com um alinhamento de 128 bits.
float4 : quatro flutuantes de 32 bits
Um typedef de: float __attribute__((ext_vector_type(4)))
Um vetor com quatro pontos flutuantes. Esses quatro pontos flutuantes são compactados em um único campo de 128 bits com alinhamento de 128 bits.
metade : valor de ponto flutuante de 16 bits
Um typedef de: __fp16 Adicionado no nível 23 da API
Um valor de ponto flutuante de 16 bits.
half2 : dois flutuantes de 16 bits
Um typedef de: half __attribute__((ext_vector_type(2))) Adicionado no nível 23 da API
Versão vetorial do tipo de meio flutuante. Fornece dois campos parciais compactados em um único campo de 32 bits com alinhamento de 32 bits.
half3 : três flutuantes de 16 bits
Um typedef de: half __attribute__((ext_vector_type(3))) Adicionado no nível 23 da API
Versão vetorial do tipo de meio flutuante. Fornece três campos meio empacotados em um único campo de 64 bits com alinhamento de 64 bits.
half4 : quatro flutuações de 16 bits
Um typedef de: half __attribute__((ext_vector_type(4))) Adicionado no nível 23 da API
Versão vetorial do tipo de meio flutuante. Fornece quatro campos meios compactados em um único campo de 64 bits com alinhamento de 64 bits.
int16_t : número inteiro assinado de 16 bits
Um typedef de: curto
Um tipo de número inteiro assinado de 16 bits.
int2 : dois números inteiros assinados de 32 bits
Um typedef de: int __attribute__((ext_vector_type(2)))
Um vetor de dois inteiros. Esses dois ints são compactados em um único campo de 64 bits com um alinhamento de 64 bits.
int3 : três números inteiros assinados de 32 bits
Um typedef de: int __attribute__((ext_vector_type(3)))
Um vetor de três inteiros. Esses três ints são compactados em um único campo de 128 bits com um alinhamento de 128 bits.
int32_t : número inteiro assinado de 32 bits
Um typedef de: int
Um tipo de número inteiro assinado de 32 bits.
int4 : quatro números inteiros assinados de 32 bits
Um typedef de: int __attribute__((ext_vector_type(4)))
Um vetor de quatro inteiros. Esses dois quatros são compactados em um único campo de 128 bits com um alinhamento de 128 bits.
int64_t : número inteiro assinado de 64 bits
Um typedef de: long long Removida da API de nível 21 e posteriores
Um typedef de: long Adicionado no nível 21 da API
Um tipo de número inteiro assinado de 64 bits.
int8_t : número inteiro assinado de 8 bits
Um typedef de: char
Tipo de número inteiro assinado de 8 bits.
long2 : dois números inteiros assinados de 64 bits
Um typedef de: long __attribute__((ext_vector_type(2)))
Vetor de dois valores longos. Esses dois dados longos são compactados em um único campo de 128 bits com um alinhamento de 128 bits.
long3 : três números inteiros assinados de 64 bits
Um typedef de: long __attribute__((ext_vector_type(3)))
Um vetor de três valores longos. Esses três longos são compactados em um único campo de 256 bits com um alinhamento de 256 bits.
long4 : quatro números inteiros assinados de 64 bits
Um typedef de: long __attribute__((ext_vector_type(4)))
Um vetor de quatro valores longos. Esses quatro dados longos são compactados em um único campo de 256 bits com um alinhamento de 256 bits.
rs_matrix2x2 : matriz 2x2 de pontos flutuantes de 32 bits
Uma estrutura com os seguintes campos:
ponto flutuante m[4] |
---|
Uma matriz quadrada de pontos flutuantes 2x2. As entradas são armazenadas na matriz no local [row*2 + col].
Consulte Funções de matriz.
rs_matrix3x3 : matriz 3x3 de flutuações de 32 bits
Uma estrutura com os seguintes campos:
flutuação m[9] |
---|
Uma matriz quadrada 3x3 de dados flutuantes. As entradas são armazenadas na matriz no local [row*3 + col].
Consulte Funções de matriz.
rs_matrix4x4 : matriz 4x4 de flutuações de 32 bits
Uma estrutura com os seguintes campos:
flutuação m[16] |
---|
Uma matriz quadrada 4x4 de flutuantes. As entradas são armazenadas na matriz no local [row*4 + col].
Consulte Funções de matriz.
rs_quaternion : quaternion
Um typedef de: float4
Uma matriz quadrada de flutuação 4x4 que representa um quatérnio.
Consulte Funções quaternion.
short2 : dois números inteiros assinados de 16 bits
Um typedef de: short __attribute__((ext_vector_type(2)))
Vetor com dois Shorts. Esses dois Shorts são compactados em um único campo de 32 bits com um alinhamento de 32 bits.
short3 : três números inteiros assinados de 16 bits
Um typedef de: short __attribute__((ext_vector_type(3)))
Vetor com três Shorts. Esses três campos curtos empacotados em um único campo de 64 bits com um alinhamento de 64 bits.
short4 : quatro números inteiros assinados de 16 bits
Um typedef de: short __attribute__((ext_vector_type(4)))
Vetor com quatro Shorts. Esses quatro campos curtos empacotados em um único campo de 64 bits com um alinhamento de 64 bits.
size_t : tipo de tamanho sem assinatura
Um typedef de: uint64_t Ao compilar para 64 bits.
Um typedef de: uint32_t Ao compilar para 32 bits.
Tipo de tamanho sem assinatura. O número de bits depende dos sinalizadores de compilação.
ssize_t : tipo de tamanho assinado
Um typedef de: int64_t Ao compilar para 64 bits.
Um typedef de: int32_t Ao compilar para 32 bits.
Tipo de tamanho assinado. O número de bits depende dos sinalizadores de compilação.
uchar : número inteiro não assinado de 8 bits
Um typedef de: uint8_t
Tipo de número inteiro não assinado de 8 bits.
uchar2 : dois números inteiros não assinados de 8 bits
Um typedef de: uchar __attribute__((ext_vector_type(2)))
Vetor de dois uchars. Esses dois campos uchar compactados em um único campo de 16 bits com um alinhamento de 16 bits.
uchar3 : três números inteiros não assinados de 8 bits
Um typedef de: uchar __attribute__((ext_vector_type(3)))
Vetor de três uchars. Esses três campos uchar compactados em um único campo de 32 bits com um alinhamento de 32 bits.
uchar4 : quatro números inteiros não assinados de 8 bits
Um typedef de: uchar __attribute__((ext_vector_type(4)))
Um vetor de quatro uchars. Esses quatro campos uchar compactados em um único campo de 32 bits com um alinhamento de 32 bits.
uint : número inteiro não assinado de 32 bits
Um typedef de: uint32_t
Um tipo de número inteiro não assinado de 32 bits.
uint16_t : número inteiro não assinado de 16 bits
Um typedef de: curto não assinado
Um tipo de número inteiro não assinado de 16 bits.
uint2 : dois números inteiros de 32 bits não assinados
Um typedef de: uint __attribute__((ext_vector_type(2)))
Vetor de duas uints. Essas duas uints são empacotadas em um único campo de 64 bits com um alinhamento de 64 bits.
uint3 : três números inteiros de 32 bits
Um typedef de: uint __attribute__((ext_vector_type(3)))
Vetor de três uints. Essas três uints são empacotadas em um único campo de 128 bits com um alinhamento de 128 bits.
uint32_t : número inteiro não assinado de 32 bits
Um typedef de: unsigned int
Um tipo de número inteiro não assinado de 32 bits.
uint4 : quatro números inteiros não assinados de 32 bits
Um typedef de: uint __attribute__((ext_vector_type(4)))
Vetor de quatro uints. Essas quatro uints são empacotadas em um único campo de 128 bits com um alinhamento de 128 bits.
uint64_t : número inteiro não assinado de 64 bits
Um typedef de: sem assinatura long long Removido da API de nível 21 e versões mais recentes.
Um typedef de: sem assinatura long Adicionado no nível 21 da API
Um tipo de número inteiro não assinado de 64 bits.
uint8_t : número inteiro não assinado de 8 bits
Um typedef de: não assinado char
Tipo de número inteiro não assinado de 8 bits.
ulong : número inteiro não assinado de 64 bits
Um typedef de: uint64_t
Um tipo de número inteiro não assinado de 64 bits.
ulong2 : dois números inteiros não assinados de 64 bits
Um typedef de: ulong __attribute__((ext_vector_type(2)))
Vetor de doisulongs. Esses dois comprimentos são compactados em um único campo de 128 bits com um alinhamento de 128 bits.
ulong3 : três números inteiros de 64 bits não assinados
Um typedef de: ulong __attribute__((ext_vector_type(3)))
Vetor de três comprimentos. Esses três campos ulong são compactados em um único campo de 256 bits com um alinhamento de 256 bits.
ulong4 : quatro números inteiros não assinados de 64 bits
Um typedef de: ulong __attribute__((ext_vector_type(4)))
Vetor de quatro comprimentos. Esses quatro campos ulong são compactados em um único campo de 256 bits com um alinhamento de 256 bits.
ushort : número inteiro não assinado de 16 bits
Um typedef de: uint16_t
Um tipo de número inteiro não assinado de 16 bits.
ushort2 : dois números inteiros não assinados de 16 bits
Um typedef de: ushort __attribute__((ext_vector_type(2)))
Vetor de dois ushorts. Esses dois campos ushort compactados em um único campo de 32 bits com um alinhamento de 32 bits.
ushort3 : três números inteiros de 16 bits não assinados
Um typedef de: ushort __attribute__((ext_vector_type(3)))
Vetor de três ushorts. Esses três campos ushort compactados em um único campo de 64 bits com um alinhamento de 64 bits.
ushort4 : quatro números inteiros não assinados de 16 bits
Um typedef de: ushort __attribute__((ext_vector_type(4)))
Vetor de quatro ushorts. Esses quatro campos ushort compactados em um único campo de 64 bits com um alinhamento de 64 bits.