File size: 3,206 Bytes
0c51b93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
 * Copyright (c) 2014-2017, NVIDIA CORPORATION.  All rights reserved.
 *
 * NVIDIA CORPORATION and its licensors retain all intellectual property
 * and proprietary rights in and to this software, related documentation
 * and any modifications thereto.  Any use, reproduction, disclosure or
 * distribution of this software and related documentation without an express
 * license agreement from NVIDIA CORPORATION is strictly prohibited.
 */

//#include <SDL.h>

#include "loader.h"

#include "imguiGraph.h"
#include "loaderMacros.h"

#include <stdio.h>

#include "imguiGraph.h"

struct AppGraphCtx;

#define LOADER_IMGUI_GRAPH_FUNCTIONS(op, inst, inst_func) \
	op(inst, inst_func, void, imguiGraphContextInit,		1, ((const ImguiGraphDesc*, desc)) ) \
	op(inst, inst_func, void, imguiGraphContextUpdate,		1, ((const ImguiGraphDesc*, desc)) ) \
	op(inst, inst_func, void, imguiGraphContextDestroy,		0, (()) ) \
	op(inst, inst_func, void, imguiGraphRecordBegin,		0, (()) ) \
	op(inst, inst_func, void, imguiGraphRecordEnd,			0, (()) ) \
	op(inst, inst_func, void, imguiGraphVertex2f,			2, ((float, x), (float, y)) ) \
	op(inst, inst_func, void, imguiGraphVertex2fv,			1, ((const float*, v)) ) \
	op(inst, inst_func, void, imguiGraphTexCoord2f,			2, ((float, u), (float, v)) ) \
	op(inst, inst_func, void, imguiGraphColor4ub,			4, ((uint8_t, red), (uint8_t, green), (uint8_t, blue), (uint8_t, alpha)) ) \
	op(inst, inst_func, void, imguiGraphColor4ubv,			1, ((const uint8_t*, v)) ) \
	op(inst, inst_func, void, imguiGraphFontTextureEnable,	0, (()) ) \
	op(inst, inst_func, void, imguiGraphFontTextureDisable,	0, (()) ) \
	op(inst, inst_func, void, imguiGraphEnableScissor,		4, ((int, x), (int, y), (int, width), (int, height)) ) \
	op(inst, inst_func, void, imguiGraphDisableScissor,		0, (()) ) \
	op(inst, inst_func, void, imguiGraphFontTextureInit,	1, ((unsigned char*, data)) ) \
	op(inst, inst_func, void, imguiGraphFontTextureRelease,	0, (()) ) \
	op(inst, inst_func, bool, imguiInteropGraphInit,		3, ((imguiGraphInit_t, func), (const char*, fontpath), (AppGraphCtx*, appctx)) ) \
	op(inst, inst_func, void, imguiInteropGraphUpdate,		2, ((imguiGraphUpdate_t, func), (AppGraphCtx*, appctx)) )

LOADER_IMGUI_GRAPH_FUNCTIONS(LOADER_DECLARE_FUNCTION_PTR, (), ())

struct ImguiFunctionSet 
{
LOADER_IMGUI_GRAPH_FUNCTIONS(LOADER_DECLARE_FUNCTION_VAR, (), ())
};

// Declare D3D11/D3D12 versions
#define IMGUI_D3D11_FUNCTION_NAME(x) x##D3D11
#define IMGUI_D3D12_FUNCTION_NAME(x) x##D3D12

extern "C" {

LOADER_IMGUI_GRAPH_FUNCTIONS(LOADER_DECLARE_FUNCTION_NAME, (), IMGUI_D3D11_FUNCTION_NAME)
LOADER_IMGUI_GRAPH_FUNCTIONS(LOADER_DECLARE_FUNCTION_NAME, (), IMGUI_D3D12_FUNCTION_NAME)

} // extern "C"

static ImguiFunctionSet g_functionSet;

void loadImgui(AppGraphCtxType type)
{
	if (type == APP_CONTEXT_D3D11)
	{
		LOADER_IMGUI_GRAPH_FUNCTIONS(LOADER_SET_FUNCTION, g_functionSet, IMGUI_D3D11_FUNCTION_NAME)
	}
	if (type == APP_CONTEXT_D3D12)
	{
		LOADER_IMGUI_GRAPH_FUNCTIONS(LOADER_SET_FUNCTION, g_functionSet, IMGUI_D3D12_FUNCTION_NAME)
	}
}

void unloadImgui()
{
	g_functionSet = ImguiFunctionSet{};
}

// Generate the patches 
LOADER_IMGUI_GRAPH_FUNCTIONS(LOADER_FUNCTION_PTR_CALL, g_functionSet, ())