From: José Fonseca Date: Wed, 2 May 2012 12:16:20 +0000 (+0100) Subject: Delete linear regions when retracing unlock. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=8f724a06f38e5284e669941e89f5940fc2ab8fa9;p=apitrace Delete linear regions when retracing unlock. --- 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;