This commit is contained in:
TheBrokenRail 2025-02-15 19:36:43 -05:00
parent f40a7c3545
commit da55fda07a
8 changed files with 38 additions and 41 deletions

View File

@ -30,7 +30,7 @@ int media_SDL_PollEvent(SDL_Event *event) {
return ret;
}
int media_SDL_PushEvent(SDL_Event *event) {
int media_SDL_PushEvent(const SDL_Event *event) {
queue.push_back(*event);
return 1;
}

View File

@ -13,7 +13,7 @@ extern "C" {
int media_SDL_Init(uint32_t flags);
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);
typedef enum {

View File

@ -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
void send_array_to_driver(const GLenum array) {
const bool state = get_array_enabled(array);
void send_array_to_driver(const GLenum array) const {
const bool state = get_array_enabled_const(array);
if (state) {
media_glEnableClientState(array);
} else {
media_glDisableClientState(array);
}
}
void send_to_driver() {
void send_to_driver() const {
send_array_to_driver(GL_VERTEX_ARRAY);
send_array_to_driver(GL_COLOR_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) \
CALL(unique_id, name, unused, ()) \
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)); \
return 0; \
}
@ -153,7 +156,7 @@ CALL(15, media_glDrawArrays, void, (GLenum mode, GLint first, GLsizei count))
#ifdef MEDIA_LAYER_TRAMPOLINE_GUEST
trampoline(true, gl_state, mode, first, count);
#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();
GLenum mode = args.next<GLenum>();
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
trampoline(true, gl_state, mode, copy_array(drawcount, first), copy_array(drawcount, count));
#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();
GLenum mode = args.next<GLenum>();
uint32_t drawcount;
@ -578,7 +581,7 @@ CALL(47, media_glAlphaFunc, void, (GLenum func, GLclampf ref))
}
#ifdef MEDIA_LAYER_TRAMPOLINE_HOST
static int get_glGetFloatv_params_size(GLenum pname) {
static int get_glGetFloatv_params_size(const GLenum pname) {
switch (pname) {
case GL_MODELVIEW_MATRIX:
case GL_PROJECTION_MATRIX: {
@ -588,7 +591,7 @@ static int get_glGetFloatv_params_size(GLenum pname) {
return 2;
}
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));
#else
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];
func(pname, params);
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
static int get_glGetIntegerv_params_size(GLenum pname) {
static int get_glGetIntegerv_params_size(const GLenum pname) {
switch (pname) {
case GL_TEXTURE_BINDING_2D:
case GL_PACK_ALIGNMENT:
@ -729,7 +732,7 @@ static int get_glGetIntegerv_params_size(GLenum pname) {
return 4;
}
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));
#else
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];
func(pname, params);
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
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));
return 0;
#endif

View File

@ -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
template <typename... Args>
@ -63,7 +55,7 @@ unsigned int _trampoline(const unsigned int id, const bool allow_early_return, A
// Create Arguments
static unsigned char out[MAX_TRAMPOLINE_ARGS_SIZE];
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;
// Call
uint32_t ret = 0;

View File

@ -26,9 +26,9 @@ struct TrampolineArguments {
// Read Next Value
template <typename T>
T next() {
const T &next() {
block_pointer(T);
T ret = *(const T *) raw_args;
const T &ret = *(const T *) raw_args;
raw_args += sizeof(T);
return ret;
}

View File

@ -29,11 +29,11 @@ CALL(1, media_SDL_PollEvent, int, (SDL_Event *event))
#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
return trampoline(false, *event);
#else
SDL_Event event = args.next<SDL_Event>();
const SDL_Event &event = args.next<SDL_Event>();
return func(&event);
#endif
}

View File

@ -12,18 +12,17 @@ struct ServerProperty {
ServerProperty(const std::string &key_, const std::string &def_, const std::string &comment_):
key(key_),
def(def_),
comment(comment_) {
comment(comment_)
{
get_all().push_back(this);
}
};
class ServerProperties {
std::map<std::string, std::string> properties;
public:
struct ServerProperties {
void load(std::istream &stream);
[[nodiscard]] std::string get_string(const ServerProperty &property) const;
[[nodiscard]] int get_int(const ServerProperty &property) const;
[[nodiscard]] bool get_bool(const ServerProperty &property) const;
};
private:
std::map<std::string, std::string> properties;
};

View File

@ -7,14 +7,10 @@ std::vector<const ServerProperty *> &ServerProperty::get_all() {
return out;
}
static bool is_true(std::string const& val) {
return val == "true" || val == "yes" || val == "1";
}
void ServerProperties::load(std::istream &stream) {
std::string line;
while (std::getline(stream, line)) {
if (line.length() > 0) {
if (!line.empty()) {
if (line[0] == '#') {
continue;
}
@ -32,9 +28,16 @@ std::string ServerProperties::get_string(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 {
return is_true(get_string(property));
}