Tweaks
This commit is contained in:
parent
f40a7c3545
commit
da55fda07a
@ -30,7 +30,7 @@ int media_SDL_PollEvent(SDL_Event *event) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int media_SDL_PushEvent(SDL_Event *event) {
|
int media_SDL_PushEvent(const SDL_Event *event) {
|
||||||
queue.push_back(*event);
|
queue.push_back(*event);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ extern "C" {
|
|||||||
|
|
||||||
int media_SDL_Init(uint32_t flags);
|
int media_SDL_Init(uint32_t flags);
|
||||||
int media_SDL_PollEvent(SDL_Event *event);
|
int media_SDL_PollEvent(SDL_Event *event);
|
||||||
int media_SDL_PushEvent(SDL_Event *event);
|
int media_SDL_PushEvent(const SDL_Event *event);
|
||||||
void media_SDL_WM_SetCaption(const char *title, const char *icon);
|
void media_SDL_WM_SetCaption(const char *title, const char *icon);
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -65,16 +65,19 @@ struct gl_state_t {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[[nodiscard]] bool get_array_enabled_const(const GLenum array) const {
|
||||||
|
return const_cast<gl_state_t *>(this)->get_array_enabled(array);
|
||||||
|
}
|
||||||
#ifndef MEDIA_LAYER_TRAMPOLINE_GUEST
|
#ifndef MEDIA_LAYER_TRAMPOLINE_GUEST
|
||||||
void send_array_to_driver(const GLenum array) {
|
void send_array_to_driver(const GLenum array) const {
|
||||||
const bool state = get_array_enabled(array);
|
const bool state = get_array_enabled_const(array);
|
||||||
if (state) {
|
if (state) {
|
||||||
media_glEnableClientState(array);
|
media_glEnableClientState(array);
|
||||||
} else {
|
} else {
|
||||||
media_glDisableClientState(array);
|
media_glDisableClientState(array);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void send_to_driver() {
|
void send_to_driver() const {
|
||||||
send_array_to_driver(GL_VERTEX_ARRAY);
|
send_array_to_driver(GL_VERTEX_ARRAY);
|
||||||
send_array_to_driver(GL_COLOR_ARRAY);
|
send_array_to_driver(GL_COLOR_ARRAY);
|
||||||
send_array_to_driver(GL_TEXTURE_COORD_ARRAY);
|
send_array_to_driver(GL_TEXTURE_COORD_ARRAY);
|
||||||
@ -121,7 +124,7 @@ void _media_restore_gl_state() {
|
|||||||
#define CALL_GL_POINTER(unique_id, name) \
|
#define CALL_GL_POINTER(unique_id, name) \
|
||||||
CALL(unique_id, name, unused, ()) \
|
CALL(unique_id, name, unused, ()) \
|
||||||
media_glBindBuffer(GL_ARRAY_BUFFER, args.next<GLuint>()); \
|
media_glBindBuffer(GL_ARRAY_BUFFER, args.next<GLuint>()); \
|
||||||
gl_array_details_t state = args.next<gl_array_details_t>(); \
|
const gl_array_details_t &state = args.next<gl_array_details_t>(); \
|
||||||
func(state.size, state.type, state.stride, (const void *) uintptr_t(state.pointer)); \
|
func(state.size, state.type, state.stride, (const void *) uintptr_t(state.pointer)); \
|
||||||
return 0; \
|
return 0; \
|
||||||
}
|
}
|
||||||
@ -153,7 +156,7 @@ CALL(15, media_glDrawArrays, void, (GLenum mode, GLint first, GLsizei count))
|
|||||||
#ifdef MEDIA_LAYER_TRAMPOLINE_GUEST
|
#ifdef MEDIA_LAYER_TRAMPOLINE_GUEST
|
||||||
trampoline(true, gl_state, mode, first, count);
|
trampoline(true, gl_state, mode, first, count);
|
||||||
#else
|
#else
|
||||||
gl_state_t gl_state = args.next<gl_state_t>();
|
const gl_state_t &gl_state = args.next<gl_state_t>();
|
||||||
gl_state.send_to_driver();
|
gl_state.send_to_driver();
|
||||||
GLenum mode = args.next<GLenum>();
|
GLenum mode = args.next<GLenum>();
|
||||||
GLint first = args.next<GLint>();
|
GLint first = args.next<GLint>();
|
||||||
@ -167,7 +170,7 @@ CALL(70, media_glMultiDrawArrays, void, (GLenum mode, const GLint *first, const
|
|||||||
#ifdef MEDIA_LAYER_TRAMPOLINE_GUEST
|
#ifdef MEDIA_LAYER_TRAMPOLINE_GUEST
|
||||||
trampoline(true, gl_state, mode, copy_array(drawcount, first), copy_array(drawcount, count));
|
trampoline(true, gl_state, mode, copy_array(drawcount, first), copy_array(drawcount, count));
|
||||||
#else
|
#else
|
||||||
gl_state_t gl_state = args.next<gl_state_t>();
|
const gl_state_t &gl_state = args.next<gl_state_t>();
|
||||||
gl_state.send_to_driver();
|
gl_state.send_to_driver();
|
||||||
GLenum mode = args.next<GLenum>();
|
GLenum mode = args.next<GLenum>();
|
||||||
uint32_t drawcount;
|
uint32_t drawcount;
|
||||||
@ -578,7 +581,7 @@ CALL(47, media_glAlphaFunc, void, (GLenum func, GLclampf ref))
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MEDIA_LAYER_TRAMPOLINE_HOST
|
#ifdef MEDIA_LAYER_TRAMPOLINE_HOST
|
||||||
static int get_glGetFloatv_params_size(GLenum pname) {
|
static int get_glGetFloatv_params_size(const GLenum pname) {
|
||||||
switch (pname) {
|
switch (pname) {
|
||||||
case GL_MODELVIEW_MATRIX:
|
case GL_MODELVIEW_MATRIX:
|
||||||
case GL_PROJECTION_MATRIX: {
|
case GL_PROJECTION_MATRIX: {
|
||||||
@ -588,7 +591,7 @@ static int get_glGetFloatv_params_size(GLenum pname) {
|
|||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
ERR("Unsupported media_glGetFloatv Property: %u", pname);
|
ERR("Unsupported glGetFloatv Property: %u", pname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -598,7 +601,7 @@ CALL(48, media_glGetFloatv, void, (GLenum pname, GLfloat *params))
|
|||||||
trampoline(false, pname, uint32_t(params));
|
trampoline(false, pname, uint32_t(params));
|
||||||
#else
|
#else
|
||||||
GLenum pname = args.next<GLenum>();
|
GLenum pname = args.next<GLenum>();
|
||||||
int size = get_glGetFloatv_params_size(pname);
|
const int size = get_glGetFloatv_params_size(pname);
|
||||||
GLfloat *params = new GLfloat[size];
|
GLfloat *params = new GLfloat[size];
|
||||||
func(pname, params);
|
func(pname, params);
|
||||||
writer(args.next<uint32_t>(), params, size * sizeof(GLfloat));
|
writer(args.next<uint32_t>(), params, size * sizeof(GLfloat));
|
||||||
@ -718,7 +721,7 @@ CALL(58, media_glIsEnabled, GLboolean, (GLenum cap))
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MEDIA_LAYER_TRAMPOLINE_HOST
|
#ifdef MEDIA_LAYER_TRAMPOLINE_HOST
|
||||||
static int get_glGetIntegerv_params_size(GLenum pname) {
|
static int get_glGetIntegerv_params_size(const GLenum pname) {
|
||||||
switch (pname) {
|
switch (pname) {
|
||||||
case GL_TEXTURE_BINDING_2D:
|
case GL_TEXTURE_BINDING_2D:
|
||||||
case GL_PACK_ALIGNMENT:
|
case GL_PACK_ALIGNMENT:
|
||||||
@ -729,7 +732,7 @@ static int get_glGetIntegerv_params_size(GLenum pname) {
|
|||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
ERR("Unsupported media_glGetIntegerv Property: %u", pname);
|
ERR("Unsupported glGetIntegerv Property: %u", pname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -743,7 +746,7 @@ CALL(61, media_glGetIntegerv, void, (GLenum pname, GLint *params))
|
|||||||
trampoline(false, pname, uint32_t(params));
|
trampoline(false, pname, uint32_t(params));
|
||||||
#else
|
#else
|
||||||
GLenum pname = args.next<GLenum>();
|
GLenum pname = args.next<GLenum>();
|
||||||
int size = get_glGetIntegerv_params_size(pname);
|
const int size = get_glGetIntegerv_params_size(pname);
|
||||||
GLint *params = new GLint[size];
|
GLint *params = new GLint[size];
|
||||||
func(pname, params);
|
func(pname, params);
|
||||||
writer(args.next<uint32_t>(), params, size * sizeof(GLint));
|
writer(args.next<uint32_t>(), params, size * sizeof(GLint));
|
||||||
@ -810,7 +813,7 @@ CALL(72, media_glNormalPointer, void, (GLenum type, GLsizei stride, const void *
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
media_glBindBuffer(GL_ARRAY_BUFFER, args.next<GLuint>());
|
media_glBindBuffer(GL_ARRAY_BUFFER, args.next<GLuint>());
|
||||||
gl_array_details_t state = args.next<gl_array_details_t>();
|
const gl_array_details_t &state = args.next<gl_array_details_t>();
|
||||||
func(state.type, state.stride, (const void *) uintptr_t(state.pointer));
|
func(state.type, state.stride, (const void *) uintptr_t(state.pointer));
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
|
@ -48,14 +48,6 @@ inline void _handle_trampoline_arg<copy_array>(unsigned char *&out, const copy_a
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Variadic Templates
|
|
||||||
__attribute__((unused)) static void _add_to_trampoline_args(__attribute__((unused)) unsigned char *&out) {
|
|
||||||
}
|
|
||||||
template <typename T, typename... Args>
|
|
||||||
void _add_to_trampoline_args(unsigned char *&out, const T &first, Args&&... args) {
|
|
||||||
_handle_trampoline_arg(out, first);
|
|
||||||
_add_to_trampoline_args(out, std::forward<Args>(args)...);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Main Trampoline Function
|
// Main Trampoline Function
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
@ -63,7 +55,7 @@ unsigned int _trampoline(const unsigned int id, const bool allow_early_return, A
|
|||||||
// Create Arguments
|
// Create Arguments
|
||||||
static unsigned char out[MAX_TRAMPOLINE_ARGS_SIZE];
|
static unsigned char out[MAX_TRAMPOLINE_ARGS_SIZE];
|
||||||
unsigned char *end = out;
|
unsigned char *end = out;
|
||||||
_add_to_trampoline_args(end, std::forward<Args>(args)...);
|
(_handle_trampoline_arg(end, std::forward<Args>(args)), ...); // https://stackoverflow.com/a/25683817
|
||||||
const uint32_t length = end - out;
|
const uint32_t length = end - out;
|
||||||
// Call
|
// Call
|
||||||
uint32_t ret = 0;
|
uint32_t ret = 0;
|
||||||
|
@ -26,9 +26,9 @@ struct TrampolineArguments {
|
|||||||
|
|
||||||
// Read Next Value
|
// Read Next Value
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T next() {
|
const T &next() {
|
||||||
block_pointer(T);
|
block_pointer(T);
|
||||||
T ret = *(const T *) raw_args;
|
const T &ret = *(const T *) raw_args;
|
||||||
raw_args += sizeof(T);
|
raw_args += sizeof(T);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -29,11 +29,11 @@ CALL(1, media_SDL_PollEvent, int, (SDL_Event *event))
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
CALL(2, media_SDL_PushEvent, int, (SDL_Event *event))
|
CALL(2, media_SDL_PushEvent, int, (const SDL_Event *event))
|
||||||
#ifdef MEDIA_LAYER_TRAMPOLINE_GUEST
|
#ifdef MEDIA_LAYER_TRAMPOLINE_GUEST
|
||||||
return trampoline(false, *event);
|
return trampoline(false, *event);
|
||||||
#else
|
#else
|
||||||
SDL_Event event = args.next<SDL_Event>();
|
const SDL_Event &event = args.next<SDL_Event>();
|
||||||
return func(&event);
|
return func(&event);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -12,18 +12,17 @@ struct ServerProperty {
|
|||||||
ServerProperty(const std::string &key_, const std::string &def_, const std::string &comment_):
|
ServerProperty(const std::string &key_, const std::string &def_, const std::string &comment_):
|
||||||
key(key_),
|
key(key_),
|
||||||
def(def_),
|
def(def_),
|
||||||
comment(comment_) {
|
comment(comment_)
|
||||||
|
{
|
||||||
get_all().push_back(this);
|
get_all().push_back(this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ServerProperties {
|
struct ServerProperties {
|
||||||
std::map<std::string, std::string> properties;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void load(std::istream &stream);
|
void load(std::istream &stream);
|
||||||
|
|
||||||
[[nodiscard]] std::string get_string(const ServerProperty &property) const;
|
[[nodiscard]] std::string get_string(const ServerProperty &property) const;
|
||||||
[[nodiscard]] int get_int(const ServerProperty &property) const;
|
[[nodiscard]] int get_int(const ServerProperty &property) const;
|
||||||
[[nodiscard]] bool get_bool(const ServerProperty &property) const;
|
[[nodiscard]] bool get_bool(const ServerProperty &property) const;
|
||||||
};
|
private:
|
||||||
|
std::map<std::string, std::string> properties;
|
||||||
|
};
|
||||||
|
@ -7,14 +7,10 @@ std::vector<const ServerProperty *> &ServerProperty::get_all() {
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_true(std::string const& val) {
|
|
||||||
return val == "true" || val == "yes" || val == "1";
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServerProperties::load(std::istream &stream) {
|
void ServerProperties::load(std::istream &stream) {
|
||||||
std::string line;
|
std::string line;
|
||||||
while (std::getline(stream, line)) {
|
while (std::getline(stream, line)) {
|
||||||
if (line.length() > 0) {
|
if (!line.empty()) {
|
||||||
if (line[0] == '#') {
|
if (line[0] == '#') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -32,9 +28,16 @@ std::string ServerProperties::get_string(const ServerProperty &property) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ServerProperties::get_int(const ServerProperty &property) const {
|
int ServerProperties::get_int(const ServerProperty &property) const {
|
||||||
return std::stoi(get_string(property));
|
try {
|
||||||
|
return std::stoi(get_string(property));
|
||||||
|
} catch (...) {
|
||||||
|
return std::stoi(property.def);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_true(const std::string &val) {
|
||||||
|
return val == "true" || val == "yes" || val == "1";
|
||||||
|
}
|
||||||
bool ServerProperties::get_bool(const ServerProperty &property) const {
|
bool ServerProperties::get_bool(const ServerProperty &property) const {
|
||||||
return is_true(get_string(property));
|
return is_true(get_string(property));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user