Hi,
How can I get, say, projection matrix, from the current D3D9 context? By current I mean from a certain game, to which I am hooked through a DLL. Such thing is done i.e. in ENB Series, as far as I know.
Regards,
MK
Retrieving data from current D3D9 context
As far as I'm aware, there's a bit of extra magic going on whereupon shader constants are also examined and saved externally. Unfortunately there's no perfect way to do this w/ the programmable pipeline.
With the fixed pipeline you can use IDirect3DDevice9::GetTransform, and there are other Gets for other states available. You need to be aware that if the device was originally created as a Pure Device, many of these Gets won't work, however - if it can be captured in a State Block you can't Get it.
With the programmable pipeline there is no concept of "state" for many things; even a matrix could come from many different souces: it could be passed along with other vertex attributes, constructed on the fly in a shader, or any number of other ways. TextureStageState doesn't exist and Sampler State could be set via an Effect rather than SetSamplerState calls.
One thing you could do - if you know that the program uses Effects - is create an ID3DXEffectStateManager and use that to capture settings. But you'll never really get the full picture with a program using shaders.
With the programmable pipeline there is no concept of "state" for many things; even a matrix could come from many different souces: it could be passed along with other vertex attributes, constructed on the fly in a shader, or any number of other ways. TextureStageState doesn't exist and Sampler State could be set via an Effect rather than SetSamplerState calls.
One thing you could do - if you know that the program uses Effects - is create an ID3DXEffectStateManager and use that to capture settings. But you'll never really get the full picture with a program using shaders.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement