-
Notifications
You must be signed in to change notification settings - Fork 0
/
link.cpp
125 lines (109 loc) · 4.77 KB
/
link.cpp
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include "link.h"
#include "gamewindow.h"
#define REG_NAMED_FUNC(name, fnc) state.luapp_add_translated_function( #name, Lua::Transform(fnc) )
#define REG_FUNC(fnc) state.luapp_add_translated_function( #fnc, Lua::Transform(fnc))
#define REG_NAMED_MEM_FUNC(name, var, type, fnc) state.luapp_add_translated_function( #name, Lua::Transform(var, &type::fnc))
#define REG_MEM_FUNC(var, type, fnc) state.luapp_add_translated_function( #fnc, Lua::Transform(var, &type::fnc))
#define REG_NAMED_CONST(name, var) { state.pushinteger(var); state.setglobal( #name ); }
#define REG_CONST(var) { state.pushinteger(var); state.setglobal( #var ); }
#define REG_NAMED_CONSTF(name, var) { state.pushnumber(var); state.setglobal( #name ); }
#define REG_CONSTF(var) { state.pushnumber(var); state.setglobal( #var ); }
#define REG_NAMED_GL_FUNC(name, var) state.luapp_add_translated_function( #var, Lua::Transform(*gl, &GL_t::name ))
#define REG_GL_FUNC(name) state.luapp_add_translated_function( #name, Lua::Transform(*gl, &GL_t::name ))
#define REG_NAMED_AL_FUNC(name, var) state.luapp_add_translated_function( #var, Lua::Transform(&SoundContextProperties::name))
#define REG_AL_FUNC(name) state.luapp_add_translated_function( #name, Lua::Transform(&SoundContextProperties::name))
#define REG_EXPL_FUNC(name, var, arg) state.luapp_add_translated_function( #name, Lua::Transform(&var, arg))
namespace LuaApi {
namespace impl {
static float const inv_1000 = static_cast<float>(1.0 / 1000.0);
static thread_local std::chrono::high_resolution_clock::time_point start;
static thread_local bool is_first_run = true;
std::uint64_t timei() {
if(is_first_run)
{
is_first_run = false;
start = std::chrono::high_resolution_clock::now();
}
return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - start).count();
}
float timef() {
return static_cast<float>(timei()) * inv_1000;
}
}
Link::Link() {}
bool xglIsEnabled(GL_t* gl, GLenum n)
{
return gl->glIsEnabled(n) != 0;
}
bool xglIsEnabledi(GL_t* gl, GLenum n, int i)
{
return gl->glIsEnabledi(n,i) != 0;
}
void xglDepthMask(GL_t* gl, bool v)
{
gl->glDepthMask(v ? 1 : 0);
}
bool Link::Init(GL_t* gl, GameWindow* gw, Lua::State& state)
{
registerEnums(state);
// GL
state.luapp_register_object<LuaApi::ObjectMaterial>();
state.luapp_register_object<LuaApi::Texture>();
state.luapp_register_object<LuaApi::Shader>();
state.luapp_register_object<LuaApi::ModelStorage>();
state.luapp_register_object<LuaApi::ModelBone>();
state.luapp_register_object<LuaApi::Model>();
// Misc
state.luapp_register_object<LuaApi::Timer>();
// AL
state.luapp_register_object<LuaApi::DeviceList>();
state.luapp_register_object<LuaApi::Device>();
state.luapp_register_object<LuaApi::Context>();
state.luapp_register_object<LuaApi::SoundEmitter>();
state.luapp_push_object<LuaApi::DeviceList>();
state.setglobal("Audio");
// Custom Functions
REG_NAMED_FUNC(TimeI, impl::timei);
REG_NAMED_FUNC(TimeF, impl::timef);
REG_NAMED_MEM_FUNC(Data, *gw, GameWindow, DataPath);
// OpenGL Functions
REG_GL_FUNC(glEnable);
REG_GL_FUNC(glEnablei);
REG_GL_FUNC(glDisable);
REG_GL_FUNC(glDisablei);
REG_GL_FUNC(glLineWidth);
REG_GL_FUNC(glDepthFunc);
REG_GL_FUNC(glClearColor);
REG_GL_FUNC(glClearDepth);
REG_GL_FUNC(glClearDepthf);
REG_GL_FUNC(glClearStencil);
REG_GL_FUNC(glCullFace);
REG_GL_FUNC(glClear);
REG_GL_FUNC(glViewport);
REG_GL_FUNC(glDepthRange);
REG_GL_FUNC(glDepthRangef);
REG_GL_FUNC(glFlush);
REG_GL_FUNC(glFinish);
REG_GL_FUNC(glFrontFace);
REG_GL_FUNC(glHint);
REG_EXPL_FUNC(glIsEnabled, xglIsEnabled, gl);
REG_EXPL_FUNC(glIsEnabledi, xglIsEnabledi, gl);
REG_EXPL_FUNC(glDepthMask, xglDepthMask, gl);
// OpenAL Functions
REG_NAMED_AL_FUNC(queryDopplerFactor, DopplerFactor);
REG_NAMED_AL_FUNC(querySoundSpeed, SoundSpeed);
REG_NAMED_AL_FUNC(queryDistanceModel, DistanceModel);
REG_NAMED_AL_FUNC(setDopplerFactor, SetDopplerFactor);
REG_NAMED_AL_FUNC(setSoundSpeed, SetSoundSpeed);
REG_NAMED_AL_FUNC(setDistanceModel, SetDistanceModel);
REG_NAMED_AL_FUNC(queryListenerGain, ListenerGain);
REG_NAMED_AL_FUNC(luaQueryListenerPosition, ListenerPosition);
REG_NAMED_AL_FUNC(luaQueryListenerVelocity, ListenerVelocity);
REG_NAMED_AL_FUNC(luaQueryListenerOrientation, ListenerOrientation);
REG_NAMED_AL_FUNC(setListenerGain, SetListenerGain);
REG_NAMED_AL_FUNC(setListenerPosition, SetListenerPosition);
REG_NAMED_AL_FUNC(setListenerVelocity, SetListenerVelocity);
REG_NAMED_AL_FUNC(setListenerOrientation, SetListenerOrientation);
return true;
}
}