crosire / d3d8to9

A D3D8 pseudo-driver which converts API calls and bytecode shaders to equivalent D3D9 ones.
BSD 2-Clause "Simplified" License
881 stars 78 forks source link

Adding an option to force loading of d3dx9_43.dll? #22

Closed HerMajestyDrMona closed 7 years ago

HerMajestyDrMona commented 7 years ago

Hello. After the last changes, the converter doesn't longer throw an error when "d3dx9_43.dll is missing", when users don't install required DirectX 9 SDKs. In some games it causes graphics bugs like missing/deformed textures: http://i.imgur.com/KwbVZLA.jpg I would rather want to see an error on game start, than experiencing graphics bugs. Is there any option to force d3dx9_43.dll loading, just as it used to be in previous versions of d3d8to9? I tried adding d3dx9.lib to additional dependencies, but it doesn't seem to help (still not "missing .dll" error).

crosire commented 7 years ago

Mmh. The error should be made more noticable, I agree. Could display an error messagebox instead of just silently writing a log message ...

HerMajestyDrMona commented 7 years ago

I noticed that before commit: "Clean up code" ( https://github.com/crosire/d3d8to9/commit/9eb8faa14737aa22619b02d7ae0c6b0491b4eca6 ) When I added d3dx9.lib to additional dependencies, and file "C:\Windows\SysWOW64\D3DX9_43.dll" was missing - it still displayed an error that it's unable to start the application because d3dx9_43.dll is missing. So I suppose that one of those cleaning changes "fixed" it. Do you maybe know what change could cause it? Maybe I could add some unused function to the code, something to force d3dx9_43.dll loading? I don't know anything about DirectX API, so I would very appreciate any recommendation. I think system errors are better than message boxes created by a .dll file (when a .dll file is missing then some Windows process displays the error, not the app itself),

crosire commented 7 years ago

This was changed in and because of #16.

HerMajestyDrMona commented 7 years ago

You're right. I double checked it. Seems like I was testing in a wrong folder and I thought it already had https://github.com/crosire/d3d8to9/pull/16 :) I'll see if I can revert this change later, or at least add a workaround.

elishacloud commented 7 years ago

I would not recommend reverting change #16. Instead you could add two lines to d3d8to9.cpp after this line:

LOG << "Failed to load d3dx9_43.dll! Some features will not work correctly." << std::endl;

Add these lines:

MessageBox(nullptr, TEXT("Failed to load \"d3dx9_43.dll\"!"), nullptr, MB_ICONWARNING);
return nullptr;

That should do what you want.

HerMajestyDrMona commented 7 years ago

Thank you. Seems like this solution is acceptable too :) I made more detailed error message with MB_OKCANCEL, and also ShellExecute with: https://www.microsoft.com/en-us/download/details.aspx?id=8109 when user clicks "OK". It opens the site where the missing "End-User Runtime" can be downloaded.

crosire commented 7 years ago

Closed in #23.