Fundição e Conversão

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

DXSAS define as seguintes regras de conversão de tipo. Este é um superconjunto do efeito (.fx) e das regras de conversão de tipo HLSL. O DXSAS também define alguns modificadores de parâmetro de valor que podem afetar o valor a ser transferido do aplicativo host para um parâmetro vinculado.

Tipo Fundição

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

Tipo de fonte Tipo de destino Comportamento
flutuar Int Arredondar em direção a zero.
flutuar, 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 flutuar
Bool int, float False é convertido em zero. O verdadeiro é convertido em um.
textura1D, textura2D, textura3D, textureCUBE textura A textura de destino é tratada como o tipo de textura de origem.
string textura1D, textura2D, textura3D, textureCUBE O valor de string é 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, o casting será inválido e as aplicações 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.

 

Fundição de Classe

Além das regras de coerção de tipo descritas acima, o DXSAS define o conjunto de regras de coerçã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.

Os parâmetros da matriz de efeitos e as variáveis da matriz HLSL podem definir se o valor é uma matriz linha-principal ou coluna-principal; no entanto, as APIs do DirectX sempre tratam D3DMATRIX e D3DXMATRIX como matrizes linha-principal.

Classe de origem Classe de destino Comportamento
Escalar Escalar Aplicar fundição de tipo.
Escalar Vetor Replique o valor de origem escalar em cada componente do vetor de destino após aplicar o comportamento de conversão e casting de tipo descrito em Conversão de Tipo.
Escalar Matriz Replique o valor escalar de origem em cada componente da matriz de destino após aplicar o comportamento de casting de tipo e conversão descrito em Casting de Tipo.
Escalar Objeto Elenco inválido. As aplicações host devem devolver 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 transmissão de tipo descrito em Tipo de transmissão.
Vetor Escalar O escalar de destino recebe o valor do primeiro componente do vetor de origem após a aplicação do comportamento de conversão e de 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 a conversão de tipo e o comportamento de conversão descrito em Conversão de Tipo. Os componentes restantes mais à direita 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 transmissão for válida, o comportamento da transmissão vetor-a-vetor será então aplicado.
Vetor Objeto Elenco inválido. As aplicações 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 tem componentes. Os elementos da estrutura de destino recebem os componentes mais à esquerda do vetor de origem após aplicar o comportamento de conversão e coerção de tipo descrito em Coerção de Tipo.
Matriz Escalar O escalar de destino recebe o valor mais à esquerda e em cima da matriz de origem depois de aplicar o comportamento de coerção e conversão de tipo descrito em Coerçã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 é então 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 da parte superior esquerda da matriz de origem após aplicar o comportamento de conversão e coerção de tipo descritos em Coerção de Tipo. Os restantes componentes mais à direita da matriz de origem são perdidos.
Matriz Objeto Elenco inválido. As aplicações anfitriãs 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 Elenco inválido. As aplicações anfitriãs devem retornar um erro.
Objeto Vetor Elenco inválido. As aplicações host devem retornar um erro.
Objeto Matriz Elenco inválido. As aplicações 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 Type Casting.
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 type casting e conversão descrito em .
Estrutura Vetor A estrutura da fonte 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 da fonte 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 do que a estrutura de origem. Uma transmissão válida deve existir entre todos os respetivos componentes de origem e destino.

 

Modificadores de valor de parâmetro

As anotações do modificador de parâmetros 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 são 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";

onde Valor é Verdadeiro ou Falso.

Aqui está um exemplo:

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

SasUnits

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

string SasUnits = "Value";

onde Valor é um dos seguintes:

Tipo de medição Valor Descrição
Sem Unidades string vazia Sem unidades
Distância em milímetro Milímetros
cm Centímetros
m Medidores
km Quilómetros
Ângulo Rad Radianos
Hora ms Milésimos de segundo
seg Segundos
min Minutos
RH Horário
Velocidade Linear mm/seg Milímetros por segundo
cm/seg Centímetros por segundo
m/seg Metros por segundo
m/h Metros por hora
km/h Quilómetros por hora
Aceleração Linear mm/seg² Milímetros por segundo ao quadrado
cm/seg² Centímetros por segundo ao quadrado
m/seg² Metros por segundo ao quadrado
m/hora² Metros por hora quadrada
km/h² Quilómetros por hora ao quadrado
Velocidade angular rad/seg Radianos por segundo
Aceleração angular rad/seg² Radianos por segundo ao quadrado
Área mm² Milímetros quadrados
cm² Centímetros quadrados
Metros quadrados
km² Quilómetros quadrados
Volume mm³ Milímetros cúbicos
cm³ Centímetros cúbicos
Metros cúbicos
km³ Quilómetros cúbicos

 

Anotações padrão e referência de semântica do DirectX