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.h
en 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- |