static void d3d8_init(IDirect3DDevice8 *device) { data.d3d8 = get_system_module("d3d8.dll"); if (!d3d8_init_format_backbuffer(device)) return; if (!d3d8_shmem_init(device)) d3d8_free(); }
void get_d3d8_offsets(struct d3d8_offsets *offsets) { d3d8_info info = {}; bool success = d3d8_init(info); if (success) { offsets->present = vtable_offset(info.module, info.device, 15); } d3d8_free(info); }
static void d3d8_capture(IDirect3DDevice8 *device, IDirect3DSurface8 *backbuffer) { if (capture_should_stop()) { d3d8_free(); } if (capture_should_init()) { d3d8_init(device); } if (capture_ready()) { d3d8_shmem_capture(device, backbuffer); } }
static HRESULT STDMETHODCALLTYPE hook_reset(IDirect3DDevice8 *device, D3DPRESENT_PARAMETERS *parameters) { HRESULT hr; if (capture_active()) d3d8_free(); unhook(&reset); reset_t call = (reset_t)reset.call_addr; hr = call(device, parameters); rehook(&reset); return hr; }