Compartir a través de


Conversión y conversión

Al transferir valores entre la aplicación host y un parámetro de efecto, los datos se escriben según lo previsto cuando el tipo de datos de origen (en la aplicación host) coincide con el tipo de datos de destino (en el parámetro effect). Cuando los tipos de datos difieren, la conversión se producirá a medida que los datos de origen se reorganizan para ajustarse al destino.

DXSAS define las siguientes reglas de conversión de tipos. Se trata de un superconjunto del efecto (.fx) y las reglas de conversión de tipos HLSL. DXSAS también define algunos modificadores de valor de parámetro que pueden afectar al valor que se transfiere de la aplicación host a un parámetro enlazado.

Conversión de tipos

En la tabla siguiente se muestra la conversión que se producirá cuando se transfiera un tipo de datos a otro tipo de datos:

Tipo de origen Tipo de destino Comportamiento
FLOAT int Redondeo a cero.
float, int bool Los valores no son iguales a 0, en función de una comparación no igual a 0 (int) o 0,0 (float), se consideran true; de lo contrario, el valor se considera false.
int FLOAT
bool int, float False se convierte en cero. True se convierte en uno.
texture1D, texture2D, texture3D, textureCUBE textura La textura de destino se trata como el tipo de textura de origen.
string texture1D, texture2D, texture3D, textureCUBE El valor de cadena se trata como una dirección de recurso y se resuelve de la misma manera que la anotación de inicialización de parámetros. Si no se puede resolver la dirección del recurso, la conversión no es válida y las aplicaciones host deben devolver un error. Si el recurso se resuelve correctamente, el tipo de la expresión se trata como el mismo tipo que el recurso resuelto.

 

Conversión de clases

Además de las reglas de conversión de tipos descritas anteriormente, DXSAS define el conjunto de reglas de conversión necesarias para convertir entre tipos de clase. Las matrices de columna (N x 1), las matrices de fila (1 x N) y las estructuras numéricas se tratan como vectores.

Los parámetros de matriz de efecto y las variables de matriz HLSL pueden definir si el valor es una matriz de fila principal o de columna; sin embargo, las API de DirectX siempre tratan D3DMATRIX y D3DXMATRIX como filas principales.

Clase source Clase de destino Comportamiento
Escalar Escalar Aplicar conversión de tipos.
Escalar Vector Replique el valor de origen escalar en todos los componentes del vector de destino después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos.
Escalar Matriz Replique el valor de origen escalar en todos los componentes de la matriz de destino después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos.
Escalar Object Conversión no válida. Las aplicaciones host deben devolver un error.
Escalar Estructura Válido solo si la estructura de destino solo contiene elementos numéricos. Si es válido, replique el valor de origen escalar en cada componente de la estructura de destino después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos.
Vector Escalar El escalar de destino recibe el valor del primer componente del vector de origen después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos.
Vector Vector Conversión no válida si el vector de destino tiene más componentes que el vector de origen. El vector de destino recibe los valores más a la izquierda del vector de origen después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos. Se pierden los componentes restantes de la mayoría de los derechos del vector de origen.
Vector Matrix Conversión no válida a menos que el vector de origen tenga el mismo número de componentes que la matriz de destino. Si la conversión es válida, se aplica el comportamiento de la conversión vectorial a vector.
Vector Object Conversión no válida. Las aplicaciones host deben devolver un error.
Vector Estructura Válido solo si la estructura de destino solo tiene elementos numéricos y no contiene más elementos de los que el vector de origen tiene componentes. Los elementos de la estructura de destino reciben los componentes más a la izquierda del vector de origen después de aplicar el comportamiento de conversión y conversión de tipos descritos en Conversión de tipos.
Matriz Escalar El escalar de destino recibe el valor del valor superior izquierdo de la matriz de origen después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos.
Matriz Vector Conversión no válida a menos que la matriz de origen tenga el mismo número de componentes que el vector de destino. Si la conversión es válida, se aplica el comportamiento de la conversión vectorial a vector anterior.
Matriz Matriz Conversión no válida si la matriz de destino tiene más componentes que la matriz de origen. La matriz de destino recibe los valores superior izquierdo de la matriz de origen después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos. Se pierden los componentes restantes de la parte inferior derecha de la matriz de origen.
Matrix Object Conversión no válida. Las aplicaciones host deben devolver un error.
Matriz Estructura El tamaño de la estructura debe ser igual al tamaño de la matriz y todos los componentes de la estructura deben ser numéricos.
Object Escalar Conversión no válida. Las aplicaciones host deben devolver un error.
Object Vector Conversión no válida. Las aplicaciones host deben devolver un error.
Object Matriz Conversión no válida. Las aplicaciones host deben devolver un error.
Object Object Válido si los tipos de los objetos son idénticos y de acuerdo con el comportamiento definido en La conversión de tipos.
Estructura Escalar Válido si la estructura de origen contiene al menos un miembro numérico. El escalar de destino recibe el valor del primer miembro numérico de la estructura de origen después de aplicar el comportamiento de conversión y conversión de tipos descrito en Conversión de tipos.
Estructura Vector La estructura de origen debe ser al menos el tamaño del vector. Los primeros componentes deben ser numéricos hasta el tamaño del vector de destino.
Estructura Matriz La estructura de origen debe ser al menos el tamaño del vector. Los primeros componentes deben ser numéricos hasta el tamaño del vector de destino.
Estructura Estructura La estructura de destino no debe ser mayor que la estructura de origen. Una conversión válida debe existir entre todos los componentes de origen y destino respectivos.

 

Modificadores de valor de parámetro

Las anotaciones modificadores de parámetro agregan información adicional a un parámetro para que los datos del parámetro se puedan interpretar correctamente. Por ejemplo, es posible que sea necesario expresar un vector con datos normalizados o una longitud se puede medir en pulgadas. Las anotaciones modificadores de valor de parámetro expresan esta información adicional para que las aplicaciones host puedan transformar los valores correctamente cuando los datos se transfieren a un parámetro de efecto.

Estos son los modificadores de parámetro:

Anotaciones modificadores de valor de parámetro Descripción
SasNormalize Especifique si un vector está normalizado o no.
SasUnits Especifique las unidades de medida de un parámetro.

 

SasNormalize

La anotación SasNormalize indica que el parámetro asociado debe ser un valor normalizado cada vez que se asigna. Esta anotación solo afecta a los parámetros float2, float3 y float4.

string SasNormalize = "Value";

donde Value es True o False.

Este es un ejemplo:

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

SasUnits

Los datos del parámetro de efecto están en las siguientes unidades:

string SasUnits = "Value";

donde Value es uno de los siguientes:

Tipo de medida Valor Descripción
Sin unidades cadena vacía Sin unidades
Distancia MM Milímetros
cm Centímetros
m Metros
km Kilómetros
Ángulo rad Radians
Time ms Milisegundos
seg. Segundos
min. Minutos
h Horas
Velocidad lineal mm/s Milímetros por segundo
cm/s Centímetros por segundo
m/s Medidores por segundo
m/hr Medidores por hora
km/hr Kilómetros por hora
Aceleración lineal mm/s² Milímetros por segundo cuadrado
cm/sec² Centímetros por segundo cuadrado
m/s² Metros por segundo cuadrado
m/hr² Metros por hora cuadrado
km/hr² Kilómetros por hora cuadrado
velocidad de Angular rad/s Radianes por segundo
Aceleración de Angular rad/sec² Radianes por segundo cuadrado
Área mm² Milímetros cuadrados
cm² Centímetros cuadrados
Metros cuadrados
Km² Kilómetros cuadrados
Volumen mm³ Milímetros cubos
Cm³ Centímetros cubos
Medidores cubos
km³ Kilómetros en cubo

 

Referencia semántica y anotaciones estándar de DirectX