diff options
author | Jose Fonseca <jfonseca@vmware.com> | 2016-09-21 12:08:38 +0100 |
---|---|---|
committer | Jose Fonseca <jfonseca@vmware.com> | 2016-09-21 12:08:38 +0100 |
commit | 0c85d0b2483f996d18b796fafa92bb39aa8a466f (patch) | |
tree | 9ddad9cad2ccfaac52727bd55b477ff6fda5b014 | |
parent | 5791f6f8d004de7780184dabec1393109e0a60ac (diff) |
d3dstate: Port some of the recent D3D9 code to D3D8.
-rw-r--r-- | retrace/d3d8state.cpp | 173 |
1 files changed, 169 insertions, 4 deletions
diff --git a/retrace/d3d8state.cpp b/retrace/d3d8state.cpp index e4112ad2..c29670b9 100644 --- a/retrace/d3d8state.cpp +++ b/retrace/d3d8state.cpp @@ -27,6 +27,7 @@ #include <stdio.h> #include <iostream> +#include <sstream> #include "state_writer.hpp" #include "com_ptr.hpp" @@ -113,14 +114,178 @@ dumpShaders(StateWriter &writer, IDirect3DDevice8 *pDevice) writer.endMember(); // shaders } -void -dumpDevice(StateWriter &writer, IDirect3DDevice8 *pDevice) +static void +dumpTextureStates(StateWriter &writer, IDirect3DDevice8 *pDevice) { - /* TODO */ +#define _DUMP_TS_INT(x) { \ + DWORD rsDword = 0; \ + pDevice->GetTextureStageState(i, x, &rsDword); \ + writer.writeIntMember(#x, rsDword); \ +} + +#define _DUMP_TS_FLOAT(x) { \ + float rsFloat = 0.0f; \ + pDevice->GetTextureStageState(i, x, (DWORD *)&rsFloat); \ + writer.writeFloatMember(#x, rsFloat); \ +} + + for (int i = 0; i < 8; i++) + { + std::ostringstream oss; + oss << "TextureStageState" << i; + writer.beginMember(oss.str()); + writer.beginObject(); + + _DUMP_TS_INT(D3DTSS_COLOROP); + _DUMP_TS_INT(D3DTSS_COLORARG1); + _DUMP_TS_INT(D3DTSS_COLORARG2); + _DUMP_TS_INT(D3DTSS_ALPHAOP); + _DUMP_TS_INT(D3DTSS_ALPHAARG1); + _DUMP_TS_INT(D3DTSS_ALPHAARG2); + _DUMP_TS_FLOAT(D3DTSS_BUMPENVMAT00); + _DUMP_TS_FLOAT(D3DTSS_BUMPENVMAT01); + _DUMP_TS_FLOAT(D3DTSS_BUMPENVMAT10); + _DUMP_TS_FLOAT(D3DTSS_BUMPENVMAT11); + _DUMP_TS_INT(D3DTSS_TEXCOORDINDEX); + _DUMP_TS_FLOAT(D3DTSS_BUMPENVLSCALE); + _DUMP_TS_FLOAT(D3DTSS_BUMPENVLOFFSET); + _DUMP_TS_INT(D3DTSS_TEXTURETRANSFORMFLAGS); + _DUMP_TS_INT(D3DTSS_COLORARG0); + _DUMP_TS_INT(D3DTSS_ALPHAARG0); + _DUMP_TS_INT(D3DTSS_RESULTARG); + + writer.endObject(); + writer.endMember(); + } + +#undef _DUMP_TS_INT +#undef _DUMP_TS_FLOAT +} + +static void +dumpViewport(StateWriter &writer, IDirect3DDevice8 *pDevice) +{ + writer.beginMember("Viewport"); + writer.beginObject(); + + D3DVIEWPORT8 vp; + pDevice->GetViewport(&vp); + writer.writeIntMember("X", vp.X); + writer.writeIntMember("Y", vp.Y); + writer.writeIntMember("Width", vp.Width); + writer.writeIntMember("Height", vp.Height); + writer.writeFloatMember("MinZ", vp.MinZ); + writer.writeFloatMember("MaxZ", vp.MaxZ); + + writer.endObject(); + writer.endMember(); +} + +static void +dumpRenderstate(StateWriter &writer, IDirect3DDevice8 *pDevice) +{ +#define _DUMP_RS_INT(x) { \ + DWORD rsDword = 0; \ + pDevice->GetRenderState(x, &rsDword); \ + writer.writeIntMember(#x, rsDword); \ +} + +#define _DUMP_RS_FLOAT(x) { \ + float rsFloat = 0.0f; \ + pDevice->GetRenderState(x, (DWORD *)&rsFloat); \ + writer.writeFloatMember(#x, rsFloat); \ +} + writer.beginMember("parameters"); writer.beginObject(); + + _DUMP_RS_INT(D3DRS_ZENABLE); + _DUMP_RS_INT(D3DRS_FILLMODE); + _DUMP_RS_INT(D3DRS_SHADEMODE); + _DUMP_RS_INT(D3DRS_ZWRITEENABLE); + _DUMP_RS_INT(D3DRS_ALPHATESTENABLE); + _DUMP_RS_INT(D3DRS_LASTPIXEL); + _DUMP_RS_INT(D3DRS_SRCBLEND); + _DUMP_RS_INT(D3DRS_DESTBLEND); + _DUMP_RS_INT(D3DRS_CULLMODE); + _DUMP_RS_INT(D3DRS_ZFUNC); + _DUMP_RS_INT(D3DRS_ALPHAREF); + _DUMP_RS_INT(D3DRS_ALPHAFUNC); + _DUMP_RS_INT(D3DRS_DITHERENABLE); + _DUMP_RS_INT(D3DRS_ALPHABLENDENABLE); + _DUMP_RS_INT(D3DRS_FOGENABLE); + _DUMP_RS_INT(D3DRS_SPECULARENABLE); + _DUMP_RS_INT(D3DRS_FOGCOLOR); + _DUMP_RS_INT(D3DRS_FOGTABLEMODE); + _DUMP_RS_FLOAT(D3DRS_FOGSTART); + _DUMP_RS_FLOAT(D3DRS_FOGEND); + _DUMP_RS_FLOAT(D3DRS_FOGDENSITY); + _DUMP_RS_INT(D3DRS_ZBIAS); + _DUMP_RS_INT(D3DRS_RANGEFOGENABLE); + _DUMP_RS_INT(D3DRS_STENCILENABLE); + _DUMP_RS_INT(D3DRS_STENCILFAIL); + _DUMP_RS_INT(D3DRS_STENCILZFAIL); + _DUMP_RS_INT(D3DRS_STENCILPASS); + _DUMP_RS_INT(D3DRS_STENCILFUNC); + _DUMP_RS_INT(D3DRS_STENCILREF); + _DUMP_RS_INT(D3DRS_STENCILMASK); + _DUMP_RS_INT(D3DRS_STENCILWRITEMASK); + _DUMP_RS_INT(D3DRS_TEXTUREFACTOR); + _DUMP_RS_INT(D3DRS_WRAP0); + _DUMP_RS_INT(D3DRS_WRAP1); + _DUMP_RS_INT(D3DRS_WRAP2); + _DUMP_RS_INT(D3DRS_WRAP3); + _DUMP_RS_INT(D3DRS_WRAP4); + _DUMP_RS_INT(D3DRS_WRAP5); + _DUMP_RS_INT(D3DRS_WRAP6); + _DUMP_RS_INT(D3DRS_WRAP7); + _DUMP_RS_INT(D3DRS_CLIPPING); + _DUMP_RS_INT(D3DRS_LIGHTING); + _DUMP_RS_FLOAT(D3DRS_AMBIENT); + _DUMP_RS_INT(D3DRS_FOGVERTEXMODE); + _DUMP_RS_INT(D3DRS_COLORVERTEX); + _DUMP_RS_INT(D3DRS_LOCALVIEWER); + _DUMP_RS_INT(D3DRS_NORMALIZENORMALS); + _DUMP_RS_INT(D3DRS_DIFFUSEMATERIALSOURCE); + _DUMP_RS_INT(D3DRS_SPECULARMATERIALSOURCE); + _DUMP_RS_INT(D3DRS_AMBIENTMATERIALSOURCE); + _DUMP_RS_INT(D3DRS_EMISSIVEMATERIALSOURCE); + _DUMP_RS_INT(D3DRS_VERTEXBLEND); + _DUMP_RS_INT(D3DRS_CLIPPLANEENABLE); + _DUMP_RS_FLOAT(D3DRS_POINTSIZE); + _DUMP_RS_FLOAT(D3DRS_POINTSIZE_MIN); + _DUMP_RS_INT(D3DRS_POINTSPRITEENABLE); + _DUMP_RS_INT(D3DRS_POINTSCALEENABLE); + _DUMP_RS_FLOAT(D3DRS_POINTSCALE_A); + _DUMP_RS_FLOAT(D3DRS_POINTSCALE_B); + _DUMP_RS_FLOAT(D3DRS_POINTSCALE_C); + _DUMP_RS_INT(D3DRS_MULTISAMPLEANTIALIAS); + _DUMP_RS_INT(D3DRS_MULTISAMPLEMASK); + _DUMP_RS_INT(D3DRS_PATCHEDGESTYLE); + _DUMP_RS_INT(D3DRS_DEBUGMONITORTOKEN); + _DUMP_RS_FLOAT(D3DRS_POINTSIZE_MAX); + _DUMP_RS_INT(D3DRS_INDEXEDVERTEXBLENDENABLE); + _DUMP_RS_INT(D3DRS_COLORWRITEENABLE); + _DUMP_RS_INT(D3DRS_TWEENFACTOR); + _DUMP_RS_INT(D3DRS_BLENDOP); + _DUMP_RS_INT(D3DRS_POSITIONORDER); + _DUMP_RS_INT(D3DRS_NORMALORDER); + +#undef _DUMP_RS_INT +#undef _DUMP_RS_FLOAT + + dumpViewport(writer, pDevice); + + dumpTextureStates(writer, pDevice); + writer.endObject(); - writer.endMember(); // parameters + writer.endMember(); +} + +void +dumpDevice(StateWriter &writer, IDirect3DDevice8 *pDevice) +{ + dumpRenderstate(writer, pDevice); dumpShaders(writer, pDevice); |