Kaynağa Gözat

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.
jp9000 11 yıl önce
ebeveyn
işleme
8c3878b0b6

+ 1 - 0
plugins/win-capture/CMakeLists.txt

@@ -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)
 

+ 120 - 0
plugins/win-capture/graphics-hook-info.h

@@ -0,0 +1,120 @@
+#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;
+}