Casten en converteren

Wanneer u waarden overdraagt tussen de hosttoepassing en een effectparameter, worden gegevens geschreven zoals verwacht wanneer het brongegevenstype (in de hosttoepassing) overeenkomt met het doelgegevenstype (in de effectparameter). Wanneer de gegevenstypen verschillen, zal er typeconversie plaatsvinden wanneer de brongegevens worden herschikt om aan de bestemming te voldoen.

DXSAS definieert de volgende typeconversieregels. Dit zijn een superset van de effectregels (.fx) en HLSL-typeconversieregels. DXSAS definieert ook enkele parameterwaarde modifiers die van invloed kunnen zijn op de waarde die wordt overgedragen van de hosttoepassing naar een afhankelijke parameter.

Typconversie

De volgende tabel bevat de conversie die plaatsvindt wanneer het ene gegevenstype wordt omgezet in een ander gegevenstype.

Brontype Doeltype Gedrag
drijven Int Rond naar nul.
float, int Boolean Waarden die niet gelijk zijn aan 0 - op basis van een niet-gelijk-aan-vergelijking met 0 (int) of 0,0 (float) - worden beschouwd als waar, anders wordt de waarde als onwaar beschouwd.
Int drijven
Bool int, float Onwaar wordt omgezet naar nul. Waar wordt omgezet naar één.
texture1D, texture2D, texture3D, textureCUBE textuur Doeltextuur wordt als brontextuurtype behandeld.
snaar texture1D, texture2D, texture3D, textureCUBE Tekenreekswaarde wordt behandeld als een resourceadres en opgelost op dezelfde manier als de parameteraantekening. Als het adres van de bron niet kan worden opgelost, is de cast ongeldig en moeten de hosttoepassingen een fout teruggeven. Als de resource correct is opgelost, wordt het type expressie behandeld als hetzelfde type als de opgeloste resource.

 

Klassecasting

Naast de hierboven beschreven type cast-regels definieert DXSAS de set cast-regels die nodig zijn om te converteren tussen klassetypen. Kolommatrices (N x 1), rijmatrices (1 x N) en numerieke structuren worden behandeld als vectoren.

Effectmatrixparameters en HLSL-matrixvariabelen kunnen bepalen of de waarde een rij- of kolom-georiënteerde matrix is; de DirectX-API's behandelen echter altijd D3DMATRIX en D3DXMATRIX als rij-georiënteerd.

Bronklasse Bestemmingsklasse Gedrag
Scalaire scalaire Type cast toepassen.
Scalaire Vector Repliceer de scalaire bronwaarde naar elk onderdeel van de doelvector nadat u het type cast- en conversiegedrag hebt toegepast dat wordt beschreven in Type Casting.
Scalaire Matrix Repliceer de scalaire bronwaarde naar elk onderdeel van de doelmatrix na het toepassen van het type cast- en conversiegedrag dat wordt beschreven in Type Casting.
Scalaire Object Ongeldige typeconversie. Hosttoepassingen moeten een fout teruggeven.
Scalair Structuur Alleen geldig als de doelstructuur alleen numerieke elementen bevat. Indien geldig, repliceert u de scalaire bronwaarde naar elk onderdeel van de doelstructuur nadat u het type cast- en conversiegedrag hebt toegepast dat wordt beschreven in Type Casting.
Vector Scalair De doelschaal ontvangt de waarde van het eerste onderdeel van de bronvector na toepassing van het typecasting- en conversiegedrag dat wordt beschreven in Type Casting.
Vector Vector Ongeldige cast als de doelvector meer onderdelen heeft dan de bronvector. De doelvector ontvangt de meest linkse waarden van de bronvector nadat het type cast- en conversiegedrag is toegepast dat wordt beschreven in Type Casting. De resterende meest rechtse onderdelen van de bronvector gaan verloren.
Vector Matrix Ongeldige cast tenzij de bronvector hetzelfde aantal onderdelen heeft als de doelmatrix. Als de cast geldig is, wordt het gedrag van de vector-naar-vector-cast toegepast.
Vector Object Ongeldige cast. Hosttoepassingen moeten een fout teruggeven.
Vector Structuur Alleen geldig als de doelstructuur alleen numerieke elementen bevat en niet meer elementen bevat dan de bronvector onderdelen bevat. De elementen van de doelstructuur ontvangen de linker componenten van de bronvector na het toepassen van het typecasting- en conversiegedrag dat wordt beschreven in Type Casting.
Matrix Scalar De bestemmingsscalaire ontvangt de waarde van de meest linksboven in de bronmatrix, na toepassing van het typecast- en conversiegedrag beschreven in Type Casting.
Matrix Vector Ongeldige cast tenzij de bronmatrix hetzelfde aantal onderdelen heeft als de doelvector. Als de typeomzetting geldig is, wordt het gedrag van de typeomzetting van vector naar vector hierboven toegepast.
Matrix Matrix Ongeldige cast als de doelmatrix meer onderdelen heeft dan de bronmatrix. De doelmatrix ontvangt de linkerbovenste waarden van de bronmatrix na het toepassen van het typecasting- en conversiegedrag dat wordt beschreven in Type Casting. De resterende onderdelen rechtsonder van de bronmatrix gaan verloren.
Matrix Object Ongeldige typeconversie. Hosttoepassingen moeten een fout retourneren.
Matrix Structuur De grootte van de structuur moet gelijk zijn aan de grootte van de matrix en alle onderdelen van de structuur moeten numeriek zijn.
Object Scalar Ongeldige typeconversie. Hosttoepassingen moeten een fout teruggeven.
Object Vector Ongeldige typeconversie. Hosttoepassingen moeten een fout teruggeven.
Object Matrix Ongeldige typeconversie. Hosttoepassingen moeten een fout retourneren.
Object Voorwerp Geldig als de typen van de objecten identiek zijn en in overeenstemming zijn met het gedrag dat is gedefinieerd in Type Casting.
Structuur Scalair Geldig als de bronstructuur ten minste één numeriek lid bevat. De doelscalaire krijgt de waarde van het eerste numerieke lid van de bronstructuur na toepassing van het type cast- en conversiegedrag zoals beschreven in Type Casting.
Structuur Vector De bronstructuur moet ten minste de grootte van de vector zijn. De eerste onderdelen moeten numeriek zijn tot de grootte van de doelvector.
Structuur Matrix De bronstructuur moet ten minste de grootte van de vector zijn. De eerste onderdelen moeten numeriek zijn tot de grootte van de doelvector.
Structuur Structuur De doelstructuur mag niet groter zijn dan de bronstructuur. Er moet een geldige cast bestaan tussen alle respectieve bron- en doelonderdelen.

 

Parameterwaardenmodificaties

Parameteraanpassingsaantekeningen voegen aanvullende informatie toe aan een parameter, zodat de gegevens van de parameter correct kunnen worden geïnterpreteerd. Een vector moet bijvoorbeeld worden uitgedrukt met genormaliseerde gegevens of een lengte kan worden gemeten in inches. Aantekeningen van parameterwaarden geven deze aanvullende informatie weer, zodat hosttoepassingen waarden correct kunnen transformeren wanneer gegevens worden overgebracht naar een effectparameter.

Dit zijn de parameteraanpassingen:

Aantekeningen van parameterwaardewijzigers Beschrijving
SasNormalize Geef op of een vector al dan niet wordt genormaliseerd.
SasUnits Geef de maateenheden voor een parameter op.

 

SasNormalize

De sasNormalize-aantekening geeft aan dat de bijbehorende parameter een genormaliseerde waarde moet zijn wanneer deze wordt toegewezen. Deze aantekening is alleen van invloed op float2-, float3- en float4-parameters.

string SasNormalize = "Value";

waarbij waarde Waar of Onwaar is.

Hier volgt een voorbeeld:

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

SasUnits

De effectparametergegevens zijn in de volgende eenheden:

string SasUnits = "Value";

waarbij waarde een van de volgende is:

Meetsoort Waarde Beschrijving
Geen eenheden lege tekenreeks Geen eenheden
Afstand Mm Millimeters
centimeter centimeters
m Meter
kilometer Kilometer
Hoek Rad Radialen
Tijd mevrouw Milliseconden
seconde Seconden
Min Notulen
uur Uren
Lineaire snelheid mm per seconde Millimeters per seconde
cm per seconde Centimeters per seconde
m/sec Meters per seconde
m/hr Meters per uur
km/uur Kilometer per uur
Lineaire versnelling mm/sec² Millimeters per seconde in het kwadraat
cm/sec² Centimeters per vierkante seconde
m/sec² Meters per seconde kwadraat
m/hr² Meters per uur in het kwadraat
km/hr² Kilometer per uur kwadraat
Hoeksnelheid rad/sec Radialen per seconde
Hoekversnelling rad/sec² Radialen per seconde in het kwadraat
Gebied mm² Millimeters vierkant
cm² Centimeters vierkant
Vierkante meter
km² Vierkante kilometer
Volume mm³ Millimeters kubus
cm³ Kubieke centimeters
Kubieke meters
km³ Kubieke kilometer

 

DirectX Standard-aantekeningen en Semantiekreferenties