提交 8c3878b0 编写于 作者: J jp9000

win-capture: Add graphics-hook-info.h

This header contains global defines, structures, and helper inline
functions for the graphics hook that will be shared between game
capture, the hook, and the get-graphics-addrs helper application.
上级 6ece7943
......@@ -3,6 +3,7 @@ project(win-capture)
set(win-capture_HEADERS
obfuscate.h
hook-helpers.h
graphics-hook-info.h
window-helpers.h
dc-capture.h)
......
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <stdio.h>
#include "hook-helpers.h"
#define EVENT_CAPTURE_RESTART "CaptureHook_Restart"
#define EVENT_CAPTURE_STOP "CaptureHook_Stop"
#define EVENT_HOOK_READY "CaptureHook_HookReady"
#define EVENT_HOOK_EXIT "CaptureHook_Exit"
#define EVENT_HOOK_KEEPALIVE "CaptureHook_KeepAlive"
#define MUTEX_TEXTURE1 "CaptureHook_TextureMutex1"
#define MUTEX_TEXTURE2 "CaptureHook_TextureMutex2"
#define SHMEM_HOOK_INFO "Local\\CaptureHook_HookInfo"
#define SHMEM_TEXTURE "Local\\CaptureHook_Texture"
#define PIPE_NAME "CaptureHook_Pipe"
#pragma pack(push, 8)
struct d3d8_offsets {
uint32_t present;
uint32_t reset;
};
struct d3d9_offsets {
uint32_t present;
uint32_t present_ex;
uint32_t present_swap;
uint32_t reset;
uint32_t reset_ex;
};
struct dxgi_offsets {
uint32_t present;
uint32_t resize;
};
struct ddraw_offsets {
uint32_t surface_create;
uint32_t surface_restore;
uint32_t surface_release;
uint32_t surface_unlock;
uint32_t surface_blt;
uint32_t surface_flip;
uint32_t surface_set_palette;
uint32_t palette_set_entries;
};
struct shmem_data {
volatile int last_tex;
uint32_t tex1_offset;
uint32_t tex2_offset;
};
struct shtex_data {
uint32_t tex_handle;
};
enum capture_type {
CAPTURE_TYPE_MEMORY,
CAPTURE_TYPE_TEXTURE
};
struct graphics_offsets {
struct d3d8_offsets d3d8;
struct d3d9_offsets d3d9;
struct dxgi_offsets dxgi;
struct ddraw_offsets ddraw;
};
struct hook_info {
/* capture info */
enum capture_type type;
uint32_t window;
uint32_t format;
uint32_t cx;
uint32_t cy;
uint32_t base_cx;
uint32_t base_cy;
uint32_t pitch;
uint32_t map_id;
uint32_t map_size;
bool flip;
/* additional options */
uint64_t frame_interval;
bool use_scale;
bool force_shmem;
bool capture_overlay;
/* hook addresses */
struct graphics_offsets offsets;
};
#pragma pack(pop)
static inline HANDLE get_hook_info(DWORD id)
{
HANDLE handle;
char new_name[64];
sprintf(new_name, "%s%d", SHMEM_HOOK_INFO, id);
handle = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, sizeof(struct hook_info), new_name);
if (!handle && GetLastError() == ERROR_ALREADY_EXISTS) {
handle = OpenFileMappingA(FILE_MAP_ALL_ACCESS, false,
new_name);
}
return handle;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册