From 8f724a06f38e5284e669941e89f5940fc2ab8fa9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Wed, 2 May 2012 13:16:20 +0100 Subject: [PATCH] Delete linear regions when retracing unlock. --- retrace/d3dretrace.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/retrace/d3dretrace.py b/retrace/d3dretrace.py index 14ce359..484036b 100644 --- a/retrace/d3dretrace.py +++ b/retrace/d3dretrace.py @@ -62,10 +62,30 @@ class D3DRetracer(Retracer): if method.name in ('Lock', 'LockRect', 'LockBox'): print ' size_t _LockedSize = _getLockSize(_this, %s);' % ', '.join(method.argNames()[:-1]) + if method.name == 'Lock': + # FIXME: handle recursive locks + print ' VOID *_pbData = *ppbData;' + elif method.name == 'LockRect': + print ' VOID *_pbData = pLockedRect->pBits;' + elif method.name == 'LockBox': + print ' VOID *_pbData = pLockedVolume->pBits;' + else: + raise NotImplementedError + print ' _this->SetPrivateData(GUID_APITRACE, &_pbData, sizeof _pbData, 0);' + + if method.name in ('Unlock', 'UnlockRect', 'UnlockBox'): + print ' VOID *_pbData = 0;' + print ' DWORD dwSizeOfData = sizeof _pbData;' + print ' _this->GetPrivateData(GUID_APITRACE, &_pbData, &dwSizeOfData);' + print ' if (_pbData) {' + print ' retrace::delRegionByPointer(_pbData);' + print ' }' if __name__ == '__main__': print r''' +#define INITGUID + #include #include @@ -98,6 +118,9 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } +DEFINE_GUID(GUID_APITRACE,0X7D71CAC9,0X7F58,0X432C,0XA9,0X75,0XA1,0X9F,0XCF,0XCE,0XFD,0X14); + + static HWND createWindow(int width, int height) { static bool first = TRUE; -- 2.45.2