Delen via


Codemigratie vanuit de XNA Math Library

In dit overzicht worden de wijzigingen beschreven die nodig zijn voor het migreren van bestaande code met behulp van de XNA Math-bibliotheek naar de DirectXMath-bibliotheek.

Koptekstwijzigingen

De DirectXMath-bibliotheek maakt gebruik van een nieuwe set headers.

Vervang de xnamath.h-header door DirectXMath.hen voeg DirectXPackedVector.h toe voor de GPU--typen.

De begrenzingstypen uit het Voorbeeld van directX SDK-conflicten in xnacollision.h maakt nu deel uit van de DirectXMath-bibliotheek in DirectXCollision.h. Deze zijn gewijzigd voor het gebruik van C++-klassen in plaats van een C-stijl-API.

Constante wijzigingen

XNAMATH_VERSION (200, 201, 202, 203, 204, enzovoort) is vervangen door DIRECXTMATH_VERSION (300, 301, 302, 303 enzovoort).

Notitie

DirectXMath 3.00 en 3.02 zijn geleverd met voorlopige versies van de Windows SDK. DirectXMath 3.03 bevindt zich in de definitieve versie van de Windows 8 SDK.

Naamruimten

De DirectXMath-bibliotheek maakt gebruik van C++-naamruimten om de typen te ordenen. XNA Math heeft alleen de globale naamruimte gebruikt. De DirectXMath-typen die gemeenschappelijk zijn met XNA Math, bevinden zich in de DirectX- of de DirectX::P ackedVector naamruimte.

In C++ bronbestanden is een eenvoudige oplossing om using instructies toe te voegen.

#include "DirectXMath.h"
#include "DirectXPackedVector.h"

using namespace DirectX; 
using namespace DirectX::PackedVector;

Voor headers wordt het niet beschouwd als best practice om gebruiksinstructies toe te voegen. Voeg in plaats daarvan volledig gekwalificeerde naamruimten toe.

struct mystruct
{
   DirectX::XMFLOAT3 position;
   DirectX::PackedVector::HALF packedValue;
};

Gedeeltelijke belastingen

Voor verschillende functies die minder dan 4 elementen van een XMVECTOR laden, liet de XNA Math-bibliotheek de extra elementen ongedefinieerd. DirectXMath vult deze extra elementen altijd met 0.

Verwijdering van Xbox 360-specifieke typen

De volgende XNA Math-bibliotheektypen, -functies en -constanten zijn niet beschikbaar in DirectXMath.

  • HENDN3, XMHEND3, XMUHENDN3, XMUHEND3, XMDHENN3, XMDHEN3, XMUDHENN3, XMUDHEN3
  • XMLoadHenDN3(), XMLoadHenD3(), XMLoadUHenDN3(), XMLoadUHenD3(), XMLoadDHenN3(), XMLoadDHen3(), XMLoadUDHenN3(), XMLoadUDHen3()
  • XMStoreHenDN3(), XMStoreHenD3(), XMStoreUHenDN3(), XMStoreUHenD3(), XMStoreDHenN3(), XMStoreDHen3(), XMStoreUDHenN3(), XMStoreUDHenn3()
  • g_XMMaskHenD3, g_XMMaskDHen3, g_XMAddUHenD3, g_XMAddHenD3, g_XMAddDHen, g_XMMulHenD3, g_XMMulDHen3, g_XMXorHenD3, g_XMXorDHen3
  • XMXICON4, XMXICO4, XMICON4, XMICO4, XMUICON4, XMUICO4
  • XMLoadXIcoN4(), XMLoadXIco4(), XMLoadIcoN4(), XMLoadIco4(), XMLoadUIcoN4(), XMLoadUIco4()
  • XMStoreXIcoN4(), XMStoreXIco4() ,XMStoreIcoN4(), XMStoreIco4(), XMStoreUIcoN4(), XMStoreUIco4()
  • g_XMMaskIco4, g_XMXorXIco4, g_XMXorIco4, g_XMAddXIco4, g_XMAddUIco4, g_XMAddIco4, g_XMMulIco4

__vector4i is afgeschaft. Gebruik in plaats daarvan XMVECTORI32 of XMVECTORU32.

De volgende functies en typen zijn afgeschaft omdat ze alleen Xbox 360 zijn: XMLoadDecN4, XMStoreDecN4, XMDECN4, XMLoadDec4, XMStoreDec4, XMDEC4, XMLoadXDec4, XMStoreXDec4, XMXDEC4.

ARM-NEON intrinsieke kenmerken

Het declareren van een vectorconstante met deze code wordt gecompileerd voor XNA Math for SSE en NO-INTRINSICS, maar mislukt voor DirectXMath met ARM-NEON.

XMVECTOR v = { 1.f, 2.f, 3.f, 4.f }

Over het algemeen raden we deze methode voor het initialiseren van een XMVECTOR-niet aan. Als u echter een vectorconstante wilt, ondersteunt de XMVECTORF32 klasse deze stijl van initialisatie en retourneert de XMVECTOR type automatisch, zodat u XMVECTORF32 in de meeste van dezelfde contexten kunt gebruiken. Schrijfbewerkingen naar een XMVECTORF32-klasse vereisen expliciet verwijzingen naar het .v-XMVECTOR- lid.

Permute

De XNA Math-bibliotheek had de volgende vorm voor algemene vector permute:

XMVECTOR XMVectorPermuteControl(UINT ElementIndex0, UINT ElementIndex1, UINT ElementIndex2, UINT ElementIndex3);
XMVECTOR XMVectorPermute(FXMVECTOR V1, FXMVECTOR V2, FXMVECTOR Control);

Voor DirectXMath is XMVectorPermuteControl verwijderd en is het XM_PERMUTE_0X .. XM_PERMUTE_1Z constanten zijn opnieuw gedefinieerd om eenvoudige 0-7 indexen te zijn. Hier volgt de nieuwe handtekening voor XMVectorPermute-:

XMVECTOR XMVectorPermute(FXMVECTOR V1, FXMVECTOR V2, uint32_t PermuteX, uint32_t PermuteY, uint32_t PermuteZ, uint32_t PermuteW);

In plaats van een besturingselementwoord, neemt deze functie rechtstreeks de 4 indexen als parameters, waardoor het ook vergelijkbaar is met de XMVectorSwizzle functie met behulp van de nieuwe XM_SWIZZLE_X .. XM_SWIZZLE_W constanten gedefinieerd als eenvoudige 0-3 indexen.

XMVECTOR XMVectorSwizzle(FXMVECTOR V, uint32_t E0, uint32_t E1, uint32_t E2, uint32_t E3);

Notitie

Voor constante waarden is er een veel efficiëntere manier om permute te implementeren. Gebruik in plaats van de functievorm van XMVectorPermute-de sjabloon formulier:

template<uint32_t PermuteX, uint32_t PermuteY, uint32_t PermuteZ, uint32_t PermuteW>
    XMVECTOR XMVectorPermute(FXMVECTOR V1, FXMVECTOR V2)</code></pre></td>

Sjabloonformulieren

Over het algemeen is het gebruik van een sjabloonformulier via een functievorm van de volgende functies veel efficiënter en kan de bibliotheek platformspecifieke optimalisaties uitvoeren via sjabloonspecialisatie.

template<uint32_t PermuteX, uint32_t PermuteY, uint32_t PermuteZ, uint32_t PermuteW>
    XMVECTOR XMVectorPermute(FXMVECTOR V1, FXMVECTOR V2)

template<uint32_t SwizzleX, uint32_t SwizzleY, uint32_t SwizzleZ, uint32_t SwizzleW>
    XMVECTOR XMVectorSwizzle(FXMVECTOR V)

template<uint32_t Elements>
    XMVECTOR XMVectorShiftLeft(FXMVECTOR V1, FXMVECTOR V2)

template<uint32_t Elements>
    XMVECTOR XMVectorRotateLeft(FXMVECTOR V)

template<uint32_t Elements>
    XMVECTOR XMVectorRotateRight(FXMVECTOR V)

template<uint32_t VSLeftRotateElements, uint32_t Select0, uint32_t Select1, uint32_t Select2, uint32_t Select3>
    XMVECTOR XMVectorInsert(FXMVECTOR VD, FXMVECTOR VS)</code></pre></td>

Geëlimineerde functies

Uitgeschakelde functie Vervanging
XMStoreFloat3x3NC XMStoreFloat3x3
XMStoreFloat4NC XMStoreFloat4-
XMStoreFloat4x3NC XMStoreFloat4x3-
XMStoreFloat4x4NC XMStoreFloat4x4
XMStoreInt4NC XMStoreInt4-
XMVector2InBoundsR XMVector2InBounds? XM_CRMASK_CR6BOUNDS : 0
XMVector2TransformStreamNC XMVector2TransformStream-
XMVector3InBoundsR XMVector3InBounds? XM_CRMASK_CR6BOUNDS : 0
XMVector3TransformStreamNC XMVector3TransformStream-
XMVector4InBoundsR XMVector4InBounds? XM_CRMASK_CR6BOUNDS : 0
XMVectorCosHEst XMVectorCosH-
XMVectorExpEst XMVectorExp-
XMVectorLogEst XMVectorLog-
XMVectorPowEst XMVectorPow-
XMVectorSinHEst XMVectorSinH-
XMVectorTanHEst XMVectorTanH-

DirectXMath Programming Guide