Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 | |
| m² | Metros quadrados | |
| km² | Quilómetros quadrados | |
| Volume | mm³ | Milímetros cúbicos |
| cm³ | Centímetros cúbicos | |
| m³ | Metros cúbicos | |
| km³ | Quilómetros cúbicos |
Tópicos relacionados