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 |
Tópicos relacionados