Compartilhar via


Conversão e conversão

Ao transferir valores entre o aplicativo host e um parâmetro de efeito, os dados são gravados conforme o esperado quando o tipo de dados de origem (no aplicativo host) corresponde ao tipo de dados de destino (no parâmetro de efeito). Quando os tipos de dados forem diferentes, a conversão ocorrerá à medida que os dados de origem forem reorganizados para se ajustarem ao destino.

O DXSAS define as seguintes regras de conversão de tipo. Esses são um superconjunto do efeito (.fx) e das regras de conversão de tipo HLSL. O DXSAS também define alguns modificadores de valor de parâmetro que podem afetar o valor que está sendo transferido do aplicativo host para um parâmetro associado.

Conversão de tipo

A tabela a seguir lista a conversão que ocorrerá quando um tipo de dados for transferido para outro tipo de dados:

Tipo de Fonte Tipo de Destino Comportamento
FLOAT INT Arredondar para zero.
float, int bool Valores não iguais a 0 - com base em uma comparação não igual a 0 (int) ou 0,0 (float) - são considerados verdadeiros, caso contrário, o valor é considerado falso.
INT FLOAT
bool int, float False é convertido em zero. True é convertido em um.
texture1D, texture2D, texture3D, textureCUBE textura A textura de destino é tratada como o tipo de textura de origem.
string texture1D, texture2D, texture3D, textureCUBE O valor da cadeia de caracteres é tratado como um endereço de recurso e resolvido da mesma forma que a Anotação de Inicialização de Parâmetro. Se o endereço do recurso não puder ser resolvido, a conversão será inválida e os aplicativos host deverão retornar um erro. Se o recurso for resolvido corretamente, o tipo da expressão será tratado como o mesmo tipo que o recurso resolvido.

 

Conversão de classe

Além das regras de conversão de tipo descritas acima, o DXSAS define o conjunto de regras de conversão necessárias para converter entre tipos de classe. Matrizes de coluna (N x 1), matrizes de linha (1 x N) e estruturas numéricas são tratadas como vetores.

Parâmetros de matriz de efeito e variáveis de matriz HLSL podem definir se o valor é uma matriz principal de linhas ou colunas; no entanto, as APIs do DirectX sempre tratam D3DMATRIX e D3DXMATRIX como principais linhas.

Classe Source Classe destination Comportamento
Escalar Escalar Aplicar Conversão de Tipo.
Escalar Vetor Replique o valor de origem escalar em cada componente do vetor de destino depois de aplicar o comportamento de conversão e conversão de tipo descrito em Conversão de Tipo.
Escalar Matriz Replique o valor de origem escalar em cada componente da matriz de destino depois de aplicar o comportamento de conversão e conversão de tipo descrito em Conversão de Tipo.
Escalar Objeto Conversão inválida. Os aplicativos host devem retornar um erro.
Escalar Estrutura Válido somente se a estrutura de destino contiver apenas elementos numéricos. Se for válido, replique o valor de origem escalar em cada componente da estrutura de destino depois de aplicar o comportamento de conversão e conversão de tipo descrito em Conversão de Tipo.
Vetor Escalar O escalar de destino recebe o valor do primeiro componente do vetor de origem depois de aplicar o comportamento de conversão e conversão de tipo descrito em Conversão de Tipo.
Vetor Vetor Conversão inválida se o vetor de destino tiver mais componentes do que o vetor de origem. O vetor de destino recebe os valores mais à esquerda do vetor de origem depois de aplicar o comportamento de conversão e conversão de tipo descrito em Conversão de Tipo. Os componentes mais à direita restantes do vetor de origem são perdidos.
Vetor Matriz Conversão inválida, a menos que o vetor de origem tenha o mesmo número de componentes que a matriz de destino. Se a conversão for válida, o comportamento da conversão de vetor para vetor será aplicado.
Vetor Objeto Conversão inválida. Os aplicativos host devem retornar um erro.
Vetor Estrutura Válido somente se a estrutura de destino tiver apenas elementos numéricos e não contiver mais elementos do que o vetor de origem tiver componentes. Os elementos da estrutura de destino recebem os componentes mais à esquerda do vetor de origem depois de aplicar o comportamento de conversão e conversão de tipo descrito em Conversão de Tipo.
Matriz Escalar O escalar de destino recebe o valor do valor superior esquerdo da matriz de origem depois de aplicar o comportamento de conversão e conversão de tipo descrito em Conversão de Tipo.
Matriz Vetor Conversão inválida, a menos que a matriz de origem tenha o mesmo número de componentes que o vetor de destino. Se a conversão for válida, o comportamento da conversão de vetor para vetor acima será aplicado.
Matriz Matriz Conversão inválida se a matriz de destino tiver mais componentes do que a matriz de origem. A matriz de destino recebe os valores mais à esquerda superior da matriz de origem depois de aplicar o comportamento de conversão e conversão de tipo descrito em Conversão de Tipo. Os componentes mais baixos à direita restantes da matriz de origem são perdidos.
Matriz Objeto Conversão inválida. Os aplicativos host devem retornar um erro.
Matriz Estrutura O tamanho da estrutura deve ser igual ao tamanho da matriz e todos os componentes da estrutura devem ser numéricos.
Objeto Escalar Conversão inválida. Os aplicativos host devem retornar um erro.
Objeto Vetor Conversão inválida. Os aplicativos host devem retornar um erro.
Objeto Matriz Conversão inválida. Os aplicativos host devem retornar um erro.
Objeto Objeto Válido se os tipos dos objetos forem idênticos e de acordo com o comportamento definido em Conversão de Tipos.
Estrutura Escalar Válido se a estrutura de origem contiver pelo menos um membro numérico. O escalar de destino recebe o valor do primeiro membro numérico da estrutura de origem depois de aplicar o comportamento de conversão e conversão de tipo descrito em Conversão de Tipo.
Estrutura Vetor A estrutura de origem deve ter pelo menos o tamanho do vetor. Os primeiros componentes devem ser numéricos até o tamanho do vetor de destino.
Estrutura Matriz A estrutura de origem deve ter pelo menos o tamanho do vetor. Os primeiros componentes devem ser numéricos até o tamanho do vetor de destino.
Estrutura Estrutura A estrutura de destino não deve ser maior que a estrutura de origem. Uma conversão válida deve existir entre todos os respectivos componentes de origem e de destino.

 

Modificadores de valor de parâmetro

As anotações do modificador de parâmetro adicionam informações adicionais a um parâmetro para que os dados do parâmetro possam ser interpretados corretamente. Por exemplo, um vetor pode precisar ser expresso com dados normalizados ou um comprimento pode ser medido em polegadas. As anotações do modificador de valor de parâmetro expressam essas informações adicionais para que os aplicativos host possam transformar valores corretamente quando os dados forem transferidos para um parâmetro de efeito.

Estes são os modificadores de parâmetro:

Anotações do modificador de valor de parâmetro Descrição
SasNormalize Especifique se um vetor está normalizado ou não.
SasUnits Especifique as unidades de medida para um parâmetro.

 

SasNormalize

A anotação SasNormalize indica que o parâmetro associado deve ser um valor normalizado sempre que for atribuído. Essa anotação afeta apenas os parâmetros float2, float3 e float4.

string SasNormalize = "Value";

em que Value é True ou False.

Veja um exemplo:

float3 UpNormal
<
  bool SasNormalize = "True";
>;

SasUnits

Os dados do parâmetro de efeito estão nas seguintes unidades:

string SasUnits = "Value";

em que Value é um dos seguintes:

Tipo de Medida Valor Descrição
Sem unidades cadeia de caracteres vazia Nenhuma unidade
Distância MM Milímetros
cm Centímetros
m Metros
km quilômetros
Ângulo rad Radians
Hora ms Milissegundos
Segundo Segundos
min minutos
h Horas
Velocidade Linear mm/s Milímetros por segundo
cm/s Centímetros por segundo
m/s Metros por segundo
m/hr Medidores por hora
km/h Quilômetros por hora
Aceleração linear mm/sec² Milímetros por segundo ao quadrado
cm/sec² Centímetros por segundo ao quadrado
m/sec² Metros por segundo quadrado
m/hr² Metros por hora ao quadrado
km/hr² Quilômetros por hora ao quadrado
Angular Velocity rad/s Radianos por segundo
Aceleração de Angular rad/sec² Radianos por segundo ao quadrado
Área mm² Milímetros ao quadrado
cm² Centímetros ao quadrado
M ² Metros quadrados
Km ² Quilômetros ao quadrado
Volume mm óls Milímetros em cubos
Cm ³ Centímetros em cubos
M ³ Metros em cubos
km zero Quilômetros em cubos

 

Referência de semântica e anotações padrão do DirectX