mirror of
https://github.com/djhackersdev/bemanitools.git
synced 2026-04-25 23:37:54 -05:00
feat(hook/d3d9): Support hooking of SetScissorRect
This commit is contained in:
parent
b864c0dcfd
commit
6dea29ec6a
|
|
@ -80,6 +80,9 @@ static HRESULT(STDCALL *real_SetViewport)(
|
||||||
static HRESULT(STDCALL *real_SetVertexShader)(
|
static HRESULT(STDCALL *real_SetVertexShader)(
|
||||||
IDirect3DDevice9 *self, IDirect3DVertexShader9 *pShader);
|
IDirect3DDevice9 *self, IDirect3DVertexShader9 *pShader);
|
||||||
|
|
||||||
|
static HRESULT(STDCALL *real_SetScissorRect)(
|
||||||
|
IDirect3DDevice9 *self, const RECT *pRect);
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -154,6 +157,9 @@ my_SetViewport(IDirect3DDevice9 *self, const D3DVIEWPORT9 *pViewport);
|
||||||
static HRESULT STDCALL
|
static HRESULT STDCALL
|
||||||
my_SetVertexShader(IDirect3DDevice9 *self, IDirect3DVertexShader9 *pShader);
|
my_SetVertexShader(IDirect3DDevice9 *self, IDirect3DVertexShader9 *pShader);
|
||||||
|
|
||||||
|
static HRESULT STDCALL
|
||||||
|
my_SetScissorRect(IDirect3DDevice9 *self, const RECT *pRect);
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -220,6 +226,9 @@ hook_d3d9_irp_handler_real_dev_set_viewport(struct hook_d3d9_irp *irp);
|
||||||
static HRESULT
|
static HRESULT
|
||||||
hook_d3d9_irp_handler_real_dev_set_vertex_shader(struct hook_d3d9_irp *irp);
|
hook_d3d9_irp_handler_real_dev_set_vertex_shader(struct hook_d3d9_irp *irp);
|
||||||
|
|
||||||
|
static HRESULT
|
||||||
|
hook_d3d9_irp_handler_real_dev_set_scissor_rect(struct hook_d3d9_irp *irp);
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -249,6 +258,8 @@ static const hook_d3d9_irp_handler_t hook_d3d9_irp_real_handlers[] = {
|
||||||
hook_d3d9_irp_handler_real_dev_set_viewport,
|
hook_d3d9_irp_handler_real_dev_set_viewport,
|
||||||
[HOOK_D3D9_IRP_OP_DEV_SET_VERTEX_SHADER] =
|
[HOOK_D3D9_IRP_OP_DEV_SET_VERTEX_SHADER] =
|
||||||
hook_d3d9_irp_handler_real_dev_set_vertex_shader,
|
hook_d3d9_irp_handler_real_dev_set_vertex_shader,
|
||||||
|
[HOOK_D3D9_IRP_OP_DEV_SET_SCISSOR_RECT] =
|
||||||
|
hook_d3d9_irp_handler_real_dev_set_scissor_rect,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const hook_d3d9_irp_handler_t *hook_d3d9_handlers;
|
static const hook_d3d9_irp_handler_t *hook_d3d9_handlers;
|
||||||
|
|
@ -570,6 +581,23 @@ my_Reset(IDirect3DDevice9 *self, D3DPRESENT_PARAMETERS *pp)
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT STDCALL
|
||||||
|
my_SetScissorRect(IDirect3DDevice9 *self, const RECT *pRect)
|
||||||
|
{
|
||||||
|
struct hook_d3d9_irp irp;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
memset(&irp, 0, sizeof(irp));
|
||||||
|
|
||||||
|
irp.op = HOOK_D3D9_IRP_OP_DEV_SET_SCISSOR_RECT;
|
||||||
|
irp.args.dev_set_scissor_rect.self = self;
|
||||||
|
irp.args.dev_set_scissor_rect.pRect = pRect;
|
||||||
|
|
||||||
|
hr = hook_d3d9_irp_invoke_next(&irp);
|
||||||
|
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -748,6 +776,9 @@ hook_d3d9_irp_handler_real_dev_create_device(struct hook_d3d9_irp *irp)
|
||||||
real_SetVertexShader = api_vtbl->SetVertexShader;
|
real_SetVertexShader = api_vtbl->SetVertexShader;
|
||||||
api_vtbl->SetVertexShader = my_SetVertexShader;
|
api_vtbl->SetVertexShader = my_SetVertexShader;
|
||||||
|
|
||||||
|
real_SetScissorRect = api_vtbl->SetScissorRect;
|
||||||
|
api_vtbl->SetScissorRect = my_SetScissorRect;
|
||||||
|
|
||||||
*irp->args.ctx_create_device.pdev = (IDirect3DDevice9 *) api_proxy;
|
*irp->args.ctx_create_device.pdev = (IDirect3DDevice9 *) api_proxy;
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
|
@ -848,6 +879,16 @@ hook_d3d9_irp_handler_real_dev_set_vertex_shader(struct hook_d3d9_irp *irp)
|
||||||
irp->args.dev_set_vertex_shader.pShader);
|
irp->args.dev_set_vertex_shader.pShader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT
|
||||||
|
hook_d3d9_irp_handler_real_dev_set_scissor_rect(struct hook_d3d9_irp *irp)
|
||||||
|
{
|
||||||
|
log_assert(irp);
|
||||||
|
|
||||||
|
return real_SetScissorRect(
|
||||||
|
irp->args.dev_set_scissor_rect.self,
|
||||||
|
irp->args.dev_set_scissor_rect.pRect);
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ enum hook_d3d9_irp_op {
|
||||||
HOOK_D3D9_IRP_OP_DEV_RESET = 12,
|
HOOK_D3D9_IRP_OP_DEV_RESET = 12,
|
||||||
HOOK_D3D9_IRP_OP_DEV_SET_VIEWPORT = 13,
|
HOOK_D3D9_IRP_OP_DEV_SET_VIEWPORT = 13,
|
||||||
HOOK_D3D9_IRP_OP_DEV_SET_VERTEX_SHADER = 14,
|
HOOK_D3D9_IRP_OP_DEV_SET_VERTEX_SHADER = 14,
|
||||||
|
HOOK_D3D9_IRP_OP_DEV_SET_SCISSOR_RECT = 15,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -188,6 +189,14 @@ struct hook_d3d9_irp {
|
||||||
IDirect3DDevice9 *self;
|
IDirect3DDevice9 *self;
|
||||||
IDirect3DVertexShader9 *pShader;
|
IDirect3DVertexShader9 *pShader;
|
||||||
} dev_set_vertex_shader;
|
} dev_set_vertex_shader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Params of IDIrect3DDevice9_SetScissorRect
|
||||||
|
*/
|
||||||
|
struct {
|
||||||
|
IDirect3DDevice9 *self;
|
||||||
|
const RECT *pRect;
|
||||||
|
} dev_set_scissor_rect;
|
||||||
} args;
|
} args;
|
||||||
|
|
||||||
size_t next_handler;
|
size_t next_handler;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user