If D3DX11 is deprecated, why does Effects use "D3DX11" naming?

Aug 12, 2013 at 4:31 AM
Edited Aug 12, 2013 at 4:58 AM
The historic naming convention of Direct3D APIs has been "D3Dy" where y is the version number of the core API. The 'utility' library has always been "D3DXy" where y is the version number.

FX9 is not part of Direct3D 9 proper, but is in the utility library "D3DX9.DLL". FX10 is part of the Direct3D 10 Runtime rather than being in "D3DX10" and uses "D3D10" FX11 is essentially in the utility library, but delivered as part of a distinct shared source library rather than being in "D3DX11" proper.

The naming scheme is also not a particular strict rule either. The "D3DCompiler*.DLL" APIs do not use "D3DX" as a prefix, and are in a distinct utility library.

"D3DXMath" in "D3DX10" didn't use the 'D3DX10" name to make it more compatible with existing math code. In fact, you would end up with slightly different math libraries depending on link order if you use D3DX9 and D3DX10 together. And of course, "D3DX11" doesn't contain "D3DXMath" at all in favor of using DirectXMath / XNAMath.

Basically, FX11 uses "D3DX11" because it's not part of the core Direct3D 11 API. If we had been using C++ namespaces, we'd have probably made different naming choices to make the names more distinct. As it stands, the CodePlex shared source library uses the same naming scheme as the Effects 11 system documented on MSDN.