d3dx9_36: Implementation of D3DXCheckVersion try 2

tony.wasserka at freenet.de tony.wasserka at freenet.de
Tue Feb 5 04:29:57 CST 2008


I probably should've gone into a bit more detail about this function:
It's just for developer purpose. If you have a very big project and
are trying to upgrade e.g. from d3dx9_27 to d3dx9_36 some files
may need to be rebuild, some files may not. This function is just there
to ensure the developer that all files are built with the right dll.

Now THIS means, that we won't ever see an ENDUSER application
fail because of a d3dx9 version mismatch.

Also, we come to a problem when a user wants to built an application
with Winelib, where we can only use one definition of D3DX_SDK_VERSION
which only applies to ONE dll. Now just watch following code sample:
> #include "d3dx9.h"
>
> int check_version() {
>     if( D3DXCheckVersion( D3D_SDK_VERSION, D3DX_SDK_VERSION ) == FALSE ) {
>         MessageBox( NULL, "D3DX9 Versions don't match!", "Error!", MB_OK );
>         exit( 1 );
>     }
> }

Now, if a Winelib user compiles this, D3DX_SDK_VERSION is 9 (as its specified in our
current d3dx9core.h). But if the program requires to be built with d3dx9_36 (and thus
uses our implementation of D3DXCheckVersion) it will report an error as D3DX_SDK_VERSION
was expected to be 36.

So, the only thing we can test in this function is if D3DX_SDK_VERSION is between 24 and 36,
which are all compatible versions (also, no enduser application will need the accurate implementation
as stated above). I have made a mistake though, when I defined D3DX_SDK_VERSION to be 9,
which was caused by my somewhat old installation of the DX SDK, which is incompatible
with d3dx9_24 to d3dx9_36. (it was statically linked at that time), You don't need correct this
in your patch, as this will be addressed in one of my future patches, I am just waiting for
Julliard to (hopefully) accept my d3dx9_24 patch.

In conclusion, all you have to do is replace the line
> return ((D3DSdkVersion==D3D_SDK_VERSION) && (D3DXSdkVersion==D3DX_SDK_VERSION));
with
> return ((D3DSdkVersion==D3D_SDK_VERSION) && (D3DXSdkVersion>=24 && D3DXSdkVersion <=36));
(Could also be => and =<, ain't that familiar with it)

Best regards,
    Tony











More information about the wine-devel mailing list