Sign in to follow this  
Tibetan Sand Fox

XNAMath vs D3DX10Math && *.fx files vs *.psh and *.vsh

Recommended Posts

Hello.
As mentioned in one of my topics I was lately reading "Beginning DirectX 11 Game Programming" book, which introduced me to XNAMAth library and *.fx files, which are used to store shaders code.

As I always like to learn from many sources (I'm also studying MSDN and DirectX SDK samples) I was looking for some more sources of knowledge and I found [url="http://www.rastertek.com"]http://www.rastertek.com[/url]. Author of D3D11 tutorials on this website uses D3DX10Math library and *.psh, *.vsh files for shaders.
I read in the book that D3DXVECTOR3 is old way of doing the same thing by XMFLOAT3, but now I'm a bit lost. What's better to do ? Should I store Vertex Shaders in *.vsh files and Pixel Shaders in *.psh files or maybe it just doesn't matter if I store them in one *.fx file ? Should I use XNAMath library or stick to D3DX10Math ?

I'll be much grateful for any help. Edited by Agbahlok

Share this post


Link to post
Share on other sites
Thank you for so long and so satisfying reply. I read about DirectXMath on MSDN and as I can see it is built on top of XNAMath ? You mentioned in your post that DirectXMath is just a new name for XNAMath, so I imagine that they have just changed name and added few more things (I saw on MSDN that there are declarations from XNAMath in DirectXMath). Also you said that DirectXMath "allows for high performance math code if used right". Well, didn't XNAMath work similarly as DirectXMath is built on XNAMath ?

About Shaders. Hm, in that way why does Microsoft use Effect Framework in DX SDK samples ? I always thought that SDK is good base for knowledge.

Share this post


Link to post
Share on other sites
MJP    19754
Yeah DirectXMath is just the new name for XNAMath, you can think of it as the latest version of XNAMath. Most of it is exactly the same as XNAMath, so the things I said about DirectXMath apply to XNAMath as well (including what I said about high performance math code).

If you look at the samples, you'll actually noticed that MS stopped using effects for the D3D11 samples.

Share this post


Link to post
Share on other sites
Dave Eberly    1173
[quote name='MJP' timestamp='1350161730' post='4989884']
...generally requires you to write more code since you have to explicitly load and store SIMD values.
[/quote]

Or if you are careful, you can use 16-byte alignment directives so that the variables you care about are automatically 16-byte aligned, thus allowing you not to have to explicitly load/store SIMD values. The "care" is in dynamic allocation; for example, if you have an STL container of SIMD values requiring 16-byte alignment, then you need to use custom allocators. If you have 16-byte-aligned members in a class/struct, you need dynamic allocation of that class/struct to produce 16-byte aligned memory.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this