This library is a completely refactored and rewritten version of the original graphics hook. The code is more clean, readable, and has a variety of new features, such as scaling and forcing memory capture. Currently, only D3D9, 10, and 11 are implemented. (This commit may be updated on this branch)
83 lines
2.2 KiB
C
83 lines
2.2 KiB
C
#pragma once
|
|
|
|
/* conversion from data/function pointer */
|
|
#pragma warning(disable: 4152)
|
|
|
|
#include "../graphics-hook-info.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#else
|
|
#ifndef inline
|
|
#define inline __inline
|
|
#endif
|
|
#endif
|
|
|
|
#define NUM_BUFFERS 3
|
|
|
|
extern void hlog(const char *format, ...);
|
|
extern void hlog_hr(const char *text, HRESULT hr);
|
|
extern inline const char *get_process_name(void);
|
|
extern inline HMODULE get_system_module(const char *module);
|
|
extern inline HMODULE load_system_library(const char *module);
|
|
extern uint64_t os_gettime_ns(void);
|
|
|
|
extern inline bool capture_active(void);
|
|
extern inline bool capture_ready(void);
|
|
extern inline bool capture_should_stop(void);
|
|
extern inline bool capture_should_init(void);
|
|
|
|
extern inline void shmem_copy_data(size_t idx, void *volatile data);
|
|
extern inline bool shmem_texture_data_lock(int idx);
|
|
extern inline void shmem_texture_data_unlock(int idx);
|
|
|
|
extern bool hook_ddraw(void);
|
|
extern bool hook_d3d8(void);
|
|
extern bool hook_d3d9(void);
|
|
extern bool hook_dxgi(void);
|
|
extern bool hook_gl(void);
|
|
|
|
extern void d3d10_capture(void *swap, void *backbuffer);
|
|
extern void d3d10_free(void);
|
|
extern void d3d11_capture(void *swap, void *backbuffer);
|
|
extern void d3d11_free(void);
|
|
|
|
extern uint8_t *get_d3d1x_vertex_shader(size_t *size);
|
|
extern uint8_t *get_d3d1x_pixel_shader(size_t *size);
|
|
|
|
extern bool rehook_gl(void);
|
|
|
|
extern bool capture_init_shtex(struct shtex_data **data, HWND window,
|
|
uint32_t base_cx, uint32_t base_cy, uint32_t cx, uint32_t cy,
|
|
uint32_t format, bool flip, uint32_t handle);
|
|
extern bool capture_init_shmem(struct shmem_data **data, HWND window,
|
|
uint32_t base_cx, uint32_t base_cy, uint32_t cx, uint32_t cy,
|
|
uint32_t pitch, uint32_t format, bool flip);
|
|
extern void capture_free(void);
|
|
|
|
extern struct hook_info *global_hook_info;
|
|
|
|
struct vertex {
|
|
struct {
|
|
float x, y, z, w;
|
|
} pos;
|
|
struct {
|
|
float u, v;
|
|
} tex;
|
|
};
|
|
|
|
static inline bool duplicate_handle(HANDLE *dst, HANDLE src)
|
|
{
|
|
return !!DuplicateHandle(GetCurrentProcess(), src, GetCurrentProcess(),
|
|
dst, 0, false, DUPLICATE_SAME_ACCESS);
|
|
}
|
|
|
|
static inline void *get_offset_addr(HMODULE module, uint32_t offset)
|
|
{
|
|
return (void*)((uintptr_t)module + (uintptr_t)offset);
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|