#include #include #include #include #include namespace { HRESULT STDMETHODCALLTYPE execute(IDirect3DDevice* This, LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer, LPDIRECT3DVIEWPORT lpDirect3DViewport, DWORD dwFlags) { D3dDdi::ScopedCriticalSection lock; D3dDdi::Device::enableFlush(false); HRESULT result = CompatVtable::s_origVtable.Execute( This, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags); D3dDdi::Device::enableFlush(true); return result; } void setCompatVtable(IDirect3DDeviceVtbl& vtable) { vtable.Execute = &execute; } template void setCompatVtable(TDirect3dDeviceVtbl& /*vtable*/) { } } namespace Direct3d { template void Direct3dDevice::setCompatVtable(Vtable& vtable) { ::setCompatVtable(vtable); } template Direct3dDevice; template Direct3dDevice; template Direct3dDevice; template Direct3dDevice; }