##########################################################################/
-"""GL retracer generator."""
+"""D3D retracer generator."""
from dllretrace import DllRetracer as Retracer
'IDirect3DIndexBuffer9',
]
- def extractArg(self, function, arg, arg_type, lvalue, rvalue):
- if arg.type is D3DSHADER9:
- print r' %s = extractShader((%s).toString());' % (lvalue, rvalue)
- return
-
- Retracer.extractArg(self, function, arg, arg_type, lvalue, rvalue)
-
def invokeInterfaceMethod(self, interface, method):
- if interface.name == 'IDirect3D9' and method.name == 'CreateDevice':
+ # keep track of the last used device for state dumping
+ if interface.name in ('IDirect3DDevice9', 'IDirect3DDevice9Ex'):
+ print r' d3dretrace::pLastDirect3DDevice9 = _this;'
+
+ # create windows as neccessary
+ if method.name in ('CreateDevice', 'CreateDeviceEx'):
print r' HWND hWnd = createWindow(pPresentationParameters->BackBufferWidth, pPresentationParameters->BackBufferHeight);'
- print r' pPresentationParameters->hDeviceWindow = hWnd;'
print r' hFocusWindow = hWnd;'
+ print r' pPresentationParameters->hDeviceWindow = hWnd;'
Retracer.invokeInterfaceMethod(self, interface, method)
+ # check errors
if str(method.type) == 'HRESULT':
- print r' if (_result != S_OK) {'
+ print r' if (FAILED(_result)) {'
print r' retrace::warning(call) << "failed\n";'
print r' }'
- if interface.name in self.bufferInterfaceNames and method.name == 'Lock':
- getDescMethod = interface.getMethodByName('GetDesc')
- descArg = getDescMethod.args[0]
- assert descArg.output
- descType = getDescMethod.args[0].type.type
-
- print ' if (!SizeToLock) {'
- print ' %s Desc;' % descType
- print ' _this->GetDesc(&Desc);'
- print ' SizeToLock = Desc.Size;'
- print ' }'
+ if method.name in ('Lock', 'LockRect'):
+ print ' size_t _LockedSize = _getLockSize(_this, %s);' % ', '.join(method.argNames()[:-1])
if __name__ == '__main__':
#include <iostream>
#include "d3d9imports.hpp"
+#include "d3dsize.hpp"
#include "d3dretrace.hpp"
HRESULT hr;
hr = pfnD3DXAssembleShader(pSrcData, strlen(pSrcData), NULL, NULL, 0, &pTokens, NULL);
- if (hr == D3D_OK) {
+ if (SUCCEEDED(hr)) {
return (DWORD *)pTokens->GetBufferPointer();
}
}
'''
- d3d9.name = 'd3d9d'
retracer = D3DRetracer()
retracer.retraceApi(d3d9)