Skip to main content
GameDev.net gamedev.net
🔒 Locked

Retrieving data from current D3D9 context

Started by Matso Mar 2, 2012 at 8:05 PM 3 replies 2.3k views
Original Post
Matso
Matso
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
InvalidPointer
InvalidPointer
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.
clb: At the end of 2012, the positions of jupiter, saturn, mercury, and deimos are aligned so as to cause a denormalized flush-to-zero bug when computing earth's gravitational force, slinging it to the sun.
21st Century Moose
21st Century Moose
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.
Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls. 
Evil Steve
Evil Steve
IDirect3DDevice9::GetBackBuffer and IDirect3DDevice9::GetDepthStencilSurface.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.