DirectXTK
codeplex, direct3d, winphoneOriginally posted to Chuck Walbourn's Blog on MSDN,
The DirectXTex library does an excellent job of providing all the ‘texture content processing’ functionality from the venerable D3DX library (see “Where is the DirectX SDK?”), and DirectXMath (or the older XNAMath) takes over for D3DXMath. Shawn Hargreaves and I have been putting together another utility library, dubbed “DirectX Tool Kit” or “DirectXTK”, to address some additional runtime needs for Direct3D 11 applications.
DirectXTK includes the following components:
- SpriteBatch - a 2D sprite rendering class (a C++ version of the SpriteBatch used for XNA Game Studio)
- SpriteFont - a bitmap based text rendering (a C++ version of the SpriteFont used for XNA Game Studio)
- Effects - a collection of ready-to-use common shaders (C++ versions of the BasicEffect, AlphaTestEffect, DualTextureEffect, EnvironmentMapEffect, and SkinnedEffect used for XNA Game Studio)
- PrimtiveBatch - simple and efficient way to draw user primitives which replicates the simplicity of the Direct3D 9 era DrawUP APIs
- GeometricPrimitives - geometry helpers for common shapes (Cube, Sphere, GeoSphere, Cylinder, Torus, Teapot, Tetrahedron, Octahedron, Dodecahedron, and Isosahedron)
- Model - draws simple meshes loaded from .CMO or .SDKMESH files
- CommonStates - Factory for common combinations of rendering states as Direct3D 11 state objects (C++ versions modelled after the 'public fields' of BlendState, DepthStencilState, RasterizerState, and SampleState classes used for XNA Game Studio)
- VertexTypes - collection of commonly used vertex buffer data structures with a input layout descriptions (C++ versions of VertexPositionColor, VertexPositionTexture, VertexPositionColorTexture, and VertexPositionNormalTexture structures used for XNA Game Studio)
- It also includes DDSTextureLoader, WICTextureLoader, and ScreenGrab from the DirectXTex package.
- SimpleMath - a wrapper for DirectXMath that makes it easier to write basic math operations without as many restrictions as the SIMD-friendly base library
- And the MakeSpriteFont utility for generating
.spritefont
files (based on the Bitmap Font Maker Tool for XNA Game Studio)
Platforms: The code is designed to build with the Windows 8.x SDK using Visual Studio 2010, 2012, or 2013 and works on Windows Vista, Windows 7, Windows 8.x Win32 desktop, Windows Store apps, Windows phone 8.1, and Xbox One.
The README.TXT in the ZIP package contains additional information, and see Shawn’s posts here and here with some code snippets for usage.
Porting Notes
Here’s a handy table of equivalents for D3DX (see Living without D3DX for a complete listing):
ID3DX10Sprite |
SpriteBatch |
ID3DX10Font |
SpriteFont, SpriteBatch |
ID3DX10Mesh |
Model, ModelMesh, ModelMeshPart |
D3DXCreateBox
D3DXCreateCylinder
D3DXCreateSphere
D3DXCreateTeapot
D3DXCreateTorus |
GeometricPrimitive |
D3DX11CreateShaderResourceViewFromFile |
CreateXXXTextureFromFile |
D3DX11CreateShaderResourceViewFromResource
D3DX11CreateShaderResourceViewFromMemory |
CreateXXXTextureFromMemory |
D3DX11CreateTextureFromFile |
CreateXXXTextureFromFile |
D3DX11CreateTextureFromResource
D3DX11CreateTextureFromMemory |
CreateXXXTextureFromMemory |
D3DX11SaveTextureToFile |
SaveXXXTextureToFile |
Where XXX is “DDS” for working with .DDS
files, or “WIC” for working with WIC-supported bitmap image formats such as .BMP
, .JPG
, .PNG
, etc. Note that .TGA
is supported by legacy D3DX and by DirectXTex, but not by DirectXTK.
Note
Update: DirectXTK is now hosted on GitHub.The latest version of the library, documentation, notes on future work, release history, and other information is now available there. The library now includes PrimitiveBatch, Model, GamePad, Keyboard/Mouse, SimpleMath, and DirectXTK for Audio as well.
Windows phone 8: DirectXTK supports Windows phone 8 apps using the Windows phone SDK 8.0. See ShawnHar’s post. It also supports Windows phone 8.1 using VS 2013 Update 2 or later.
DirectX 12: If you are already an expert in using DirectX 11 and would like to use DirectX 12 instead, see DirectX Tool Kit for DirectX 12
vcpkg: The vcpkg C++ Package Manager has a directxtk port available.
Related: DirectXMesh