agrippa1994 / DX9-Overlay-API

Overlay API for DirectX 9 based games.
MIT License
127 stars 26 forks source link

Not working for dx10 games #37

Open xCONFLiCTiONx opened 7 years ago

xCONFLiCTiONx commented 7 years ago

Man, I'm sorry for making this an issue but your dll is the one working for me except I need one for dx10 games too. I search and find for dx9 and dx11 only. Why nothing for dx10? What am I missing here? Thank you for your time.

agrippa1994 commented 7 years ago

I think that this is the right place to post feature requests ;)

Yes, I would also love it, but I'm not familiar with dx 10 and 11 development (not even with dx 9, or with Windows development in general). @nefarius forked this repository a while ago and this fork supports it. (https://github.com/nefarius/Indicium-Supra) However, I don't know how to use this project, but you can check it out anyway.

nefarius commented 7 years ago

Note to self: improve/add documentation 😁

First of all: thanks @agrippa1994 for the initial effort. How to use it? Quick and lazy answer: have a look at the two demo projects included.

Somewhat longer answer: it's design as a core DLL which loads plugins which then do render whatever they want. You create a DLL which exposes certain symbols (e.g. for Present function) which then get's called with the process' device pointers. I will add some doc, I promise 😄

JohnnyCrazy commented 7 years ago

It's really amazing that you can easily embed imgui, a lot of possibilities right there and a cool project @nefarius ! 👍 But it kinda seems like your library will target low-level users more than this one. It won't be able to replace this library because there is not an easy API like TextSetString(...) or similar.

But I just had a quick look at your code, so correct me if i'm wrong 😉

nefarius commented 7 years ago

@JohnnyCrazy thanks. As with a lot of my projects they once had a specific purpose when I started them. This purpose is currently fulfilled so I didn't invest in altering or creating a new "user-friendly" API. Yes, you can say it's low-level and I didn't intend it as a replacement. I'm always open for suggestions though since I'm far away from being perfect 🤣

xCONFLiCTiONx commented 7 years ago

Well, I gotta say, this looks really promising. But, I have no idea where to even start. The sample I found is for dx9 which I already have. A sample for dx10 would be great. I was able to compile the 3 dll's but I still have no idea what to even do with them. LOL

nefarius commented 7 years ago

@mikeyhalla you were a tick too fast, I'm cleaning up and adding samples and documentation right as we speak 😁 Just gimme a few more minutes.

xCONFLiCTiONx commented 7 years ago

nice! thx :D

nefarius commented 7 years ago

It's not that verbose because I lack the time but have a look here.

xCONFLiCTiONx commented 7 years ago

Thank you! I have been looking through it and doing what I can but I am C# coder and know pretty much nothing of C++. I am figuring things out but I just don't know what I'm doing. lol

What I was really hoping for was to compile your dll and just use that with my C# program but I am not sure what reference points to use. <---- not even great at C# especially pinvoke but have more experience with that than C++

Thanks again... :D

nefarius commented 7 years ago

You can't reference a native DLL in C# the way you reference a managed assembly. Even if you could it won't do anything good here because the DLLs don't expose any functionality to a C# program.

The framework is designed as a low-level rendering helper, there - currently - is no way to simply call a method from a C# program and expect something to appear on the games screen like the original version does. One would have to implement all of @agrippa1994 s rendering functions for every DirectX version which wasn't my goal to begin with and would take a lot of time and knowledge. It's totally doable though.

Have a look at this function, this is basically where the magic happens.

INDICIUM_EXPORT Present(IID guid, LPVOID unknown, Direct3DVersion version)

This function gets called on every frame by the game, relayed to your plugin via the core DLL.

I'm afraid if you wanna profit from the library in its current stage you have to get down with C++ and the DirectX API.

xCONFLiCTiONx commented 7 years ago

Thank you @nefarius I got it working in a game now and you provided a way to render FPS already. :D So basically you already did it for me. lol

nefarius commented 7 years ago

Good to know! Have fun!

xCONFLiCTiONx commented 7 years ago

Please forgive if I'm bothering. The sample does not seem to work for dx10 games. I can get it to work in dx9 no problem but anything higher is a no go.

Sample I'm using: https://github.com/nefarius/Indicium-Supra/tree/master/samples/Indicium-ImGui I'm trying, trust me :D

nefarius commented 7 years ago

What DX10 game? I tested with Bioshock 2 where it's rendering fine.

xCONFLiCTiONx commented 7 years ago

hmmm, Assassin's Creed III and bioshock inifinite neither are working... I know I must be missing something (I'm nub) ahahah sorry, I am trying and getting it faster than I thought though.

nefarius commented 7 years ago

You should find a log file generated at %TEMP%\Indicium-Supra.log what does it say?

nefarius commented 7 years ago

Oh and you did press F11, right? This I should document 😆

xCONFLiCTiONx commented 7 years ago

My setup: Visual Studio 2017 on Windows 10 x64. I followed your instructions to the letter in every README.md and all works perfectly except for a few DX10 Games that CAN be run in DX11 but I don't have hardware supported for anything higher than DX10. Its Nvidia 9800GT and its DX10 (not even 10.1 which may have something to do with it). I have it working great in all DX9 games.

Oh and you did press F11, right? This I should document 😆: LOL yeah, I found it in the code near the bottom. :D

You should find a log file generated at %TEMP%\Indicium-Supra.log what does it say?:

DX9 game Working says: Direct3D11 [Error]: Couldn't get handle to D3D11.dll Assassins Creed, being run in DX10 but has DX11 Support, Not working says: Direct3D11 [Error]: Couldn't create D3D11 device

https://pastebin.com/scQ8FrkP

JohnnyCrazy commented 7 years ago

Little side note: Maybe @nefarius could enable issues in his fork and you could continue your discussion there because it's kinda offtopic for this repo.

xCONFLiCTiONx commented 7 years ago

I apologize for the inconvenience and am open for having it done in my own repo if necessary which I can fix later on.

xCONFLiCTiONx commented 7 years ago

Thank you for your support guys! I moved the topic to: https://github.com/nefarius/Indicium-Supra/issues/1

nefarius commented 7 years ago

Yeah sorry for the spam...

agrippa1994 commented 7 years ago

You're welcome. I just thought to build a (better) messaging system and high level API on the top of https://github.com/nefarius/Indicium-Supra as this fork supports all available DirectX backends (except 12 as I can see). This is just a thought but maybe I take a closer look at this approach as soon as I have time for that.

nefarius commented 7 years ago

I thought about the same, I'm currently looking into OpenCV integration which looks very promising so far.

nefarius commented 7 years ago

@agrippa1994 @mikeyhalla FYI I've just added DirectX 12 support to the core.

MSxDOS commented 6 years ago

So, a high-level API for D3D11 (x64) is not going to happen?