diff --git a/engine/gf_core.c b/engine/gf_core.c index e3e9047..aad9445 100644 --- a/engine/gf_core.c +++ b/engine/gf_core.c @@ -21,7 +21,7 @@ #include #include -void gf_engine_begin(void) { +GF_EXPORT void gf_engine_begin(void) { gf_version_t ver; #ifdef _WIN32 WSADATA wsa; @@ -40,12 +40,12 @@ void gf_engine_begin(void) { gf_physics_begin(); } -void gf_engine_end(void) { +GF_EXPORT void gf_engine_end(void) { gf_physics_end(); gf_draw_end(); } -gf_engine_t* gf_engine_create(const char* title, int nogui) { +GF_EXPORT gf_engine_t* gf_engine_create(const char* title, int nogui) { gf_engine_t* engine = malloc(sizeof(*engine)); memset(engine, 0, sizeof(*engine)); engine->log = stderr; @@ -66,7 +66,7 @@ gf_engine_t* gf_engine_create(const char* title, int nogui) { return engine; } -void gf_engine_set_draw(gf_engine_t* engine, void (*func)(gf_draw_t*)) { gf_draw_set_draw(engine->draw, func); } +GF_EXPORT void gf_engine_set_draw(gf_engine_t* engine, void (*func)(gf_draw_t*)) { gf_draw_set_draw(engine->draw, func); } /** * Writing this so I don't forget @@ -81,7 +81,7 @@ void gf_engine_set_draw(gf_engine_t* engine, void (*func)(gf_draw_t*)) { gf_draw * 6. _gf_draw_step swaps buffers * 7. Comes back here */ -void gf_engine_loop(gf_engine_t* engine) { +GF_EXPORT void gf_engine_loop(gf_engine_t* engine) { while(1) { if(engine->draw != NULL) { if(gf_draw_step(engine->draw) != 0) break; @@ -89,7 +89,7 @@ void gf_engine_loop(gf_engine_t* engine) { } } -void gf_engine_destroy(gf_engine_t* engine) { +GF_EXPORT void gf_engine_destroy(gf_engine_t* engine) { if(engine->physics != NULL) gf_physics_destroy(engine->physics); if(engine->draw != NULL) gf_draw_destroy(engine->draw); free(engine); diff --git a/engine/gf_draw_common.c b/engine/gf_draw_common.c index 43f7979..fd68354 100644 --- a/engine/gf_draw_common.c +++ b/engine/gf_draw_common.c @@ -19,11 +19,11 @@ #include #include -void gf_draw_begin(void) { gf_draw_platform_begin(); } +GF_EXPORT void gf_draw_begin(void) { gf_draw_platform_begin(); } -void gf_draw_end(void) { gf_draw_platform_end(); } +GF_EXPORT void gf_draw_end(void) { gf_draw_platform_end(); } -gf_draw_t* gf_draw_create(gf_engine_t* engine, const char* title) { +GF_EXPORT gf_draw_t* gf_draw_create(gf_engine_t* engine, const char* title) { gf_draw_t* draw = malloc(sizeof(*draw)); memset(draw, 0, sizeof(*draw)); draw->x = 0; @@ -55,16 +55,16 @@ gf_draw_t* gf_draw_create(gf_engine_t* engine, const char* title) { return draw; } -void gf_draw_reshape(gf_draw_t* draw) { gf_draw_driver_reshape(draw); } +GF_EXPORT void gf_draw_reshape(gf_draw_t* draw) { gf_draw_driver_reshape(draw); } /* Runs every frame */ -void gf_draw_frame(gf_draw_t* draw) { +GF_EXPORT void gf_draw_frame(gf_draw_t* draw) { if(draw->draw != NULL) draw->draw(draw); } -void gf_draw_set_draw(gf_draw_t* draw, void (*func)(gf_draw_t*)) { draw->draw = func; } +GF_EXPORT void gf_draw_set_draw(gf_draw_t* draw, void (*func)(gf_draw_t*)) { draw->draw = func; } -int gf_draw_step(gf_draw_t* draw) { +GF_EXPORT int gf_draw_step(gf_draw_t* draw) { int ret = gf_draw_platform_step(draw); if(ret != 0) return ret; draw->close = 0; @@ -72,7 +72,7 @@ int gf_draw_step(gf_draw_t* draw) { return 0; } -void gf_draw_destroy(gf_draw_t* draw) { +GF_EXPORT void gf_draw_destroy(gf_draw_t* draw) { int i; if(draw->running) { gf_draw_driver_destroy(draw); diff --git a/engine/gf_log.c b/engine/gf_log.c index d99b3bc..a870b21 100644 --- a/engine/gf_log.c +++ b/engine/gf_log.c @@ -15,7 +15,7 @@ #include #include -void gf_log(gf_engine_t* engine, const char* fmt, ...) { +GF_EXPORT void gf_log(gf_engine_t* engine, const char* fmt, ...) { va_list va; FILE* out = stderr; if(engine != NULL) { diff --git a/engine/gf_math.c b/engine/gf_math.c index e18e572..b5eff77 100644 --- a/engine/gf_math.c +++ b/engine/gf_math.c @@ -13,9 +13,9 @@ #include #include -float gf_log2(float x) { return log(x) / log(2); } +GF_EXPORT float gf_log2(float x) { return log(x) / log(2); } -void gf_calculate_normal(gf_vector_t* r, gf_vector_t v0, gf_vector_t v1, gf_vector_t v2) { +GF_EXPORT void gf_calculate_normal(gf_vector_t* r, gf_vector_t v0, gf_vector_t v1, gf_vector_t v2) { int i; dReal length; gf_vector_t vec; diff --git a/engine/gf_physics.c b/engine/gf_physics.c index 31c57cb..f7ecb03 100644 --- a/engine/gf_physics.c +++ b/engine/gf_physics.c @@ -14,18 +14,18 @@ /* Standard */ #include -void gf_physics_begin(void) { dInitODE(); } +GF_EXPORT void gf_physics_begin(void) { dInitODE(); } -void gf_physics_end(void) { dCloseODE(); } +GF_EXPORT void gf_physics_end(void) { dCloseODE(); } -gf_physics_t* gf_physics_create(void) { +GF_EXPORT gf_physics_t* gf_physics_create(void) { gf_physics_t* physics = malloc(sizeof(*physics)); physics->id = dWorldCreate(); dWorldSetGravity(physics->id, 0, 0, -9.81); return physics; } -void gf_physics_destroy(gf_physics_t* physics) { +GF_EXPORT void gf_physics_destroy(gf_physics_t* physics) { dWorldDestroy(physics->id); free(physics); gf_function_log(NULL, "Destroyed physics", ""); diff --git a/engine/gf_texture.c b/engine/gf_texture.c index 2930afb..651fd96 100644 --- a/engine/gf_texture.c +++ b/engine/gf_texture.c @@ -13,7 +13,7 @@ /* Standard */ #include -gf_texture_t* gf_register_texture(gf_draw_t* draw, int width, int height, unsigned char* data) { +GF_EXPORT gf_texture_t* gf_register_texture(gf_draw_t* draw, int width, int height, unsigned char* data) { gf_texture_t* texture = malloc(sizeof(*texture)); gf_draw_driver_texture_t* ddtexture = gf_draw_driver_register_texture(draw, width, height, data); if(ddtexture == NULL) { @@ -26,9 +26,9 @@ gf_texture_t* gf_register_texture(gf_draw_t* draw, int width, int height, unsign return texture; } -void gf_destroy_texture(gf_texture_t* texture) { +GF_EXPORT void gf_destroy_texture(gf_texture_t* texture) { gf_draw_driver_destroy_texture(texture->draw_driver_texture); free(texture); } -void gf_draw_texture(gf_draw_t* draw, float x, float y, float w, float h, gf_texture_t* texture, float r, float g, float b, float a) { gf_draw_driver_draw_texture(draw, x, y, w, h, texture->draw_driver_texture, r, g, b, a); } +GF_EXPORT void gf_draw_texture(gf_draw_t* draw, float x, float y, float w, float h, gf_texture_t* texture, float r, float g, float b, float a) { gf_draw_driver_draw_texture(draw, x, y, w, h, texture->draw_driver_texture, r, g, b, a); } diff --git a/engine/gf_version.c b/engine/gf_version.c index d486791..3c7a738 100644 --- a/engine/gf_version.c +++ b/engine/gf_version.c @@ -15,7 +15,7 @@ #define GF_VERSION "1.0.0" -void gf_get_version(gf_version_t* version) { +GF_EXPORT void gf_get_version(gf_version_t* version) { char* cpstr = malloc(512); int i; int incr = 0; diff --git a/engine/graphic/opengl/gf_driver.c b/engine/graphic/opengl/gf_driver.c index 2174519..e8cee90 100644 --- a/engine/graphic/opengl/gf_driver.c +++ b/engine/graphic/opengl/gf_driver.c @@ -30,7 +30,7 @@ GLfloat lightblk[] = {0.0, 0.0, 0.0, 1.0}; #define NEAREST_POW2(x) pow((2), gf_log2((int)(x) + 1)) -gf_draw_driver_texture_t* gf_draw_driver_register_texture(gf_draw_t* draw, int width, int height, unsigned char* data) { +GF_EXPORT gf_draw_driver_texture_t* gf_draw_driver_register_texture(gf_draw_t* draw, int width, int height, unsigned char* data) { gf_draw_driver_texture_t* r = malloc(sizeof(*r)); int w = NEAREST_POW2(width); int h = NEAREST_POW2(height); @@ -58,12 +58,12 @@ gf_draw_driver_texture_t* gf_draw_driver_register_texture(gf_draw_t* draw, int w return r; } -void gf_draw_driver_destroy_texture(gf_draw_driver_texture_t* t) { +GF_EXPORT void gf_draw_driver_destroy_texture(gf_draw_driver_texture_t* t) { glDeleteTextures(1, &t->id); free(t); } -void gf_draw_driver_init(gf_draw_t* draw) { +GF_EXPORT void gf_draw_driver_init(gf_draw_t* draw) { int i; int w, h, ch; draw->driver = malloc(sizeof(*draw->driver)); @@ -110,7 +110,7 @@ void gf_draw_driver_init(gf_draw_t* draw) { draw->driver->quadric = gluNewQuadric(); } -int gf_draw_driver_has_extension(gf_draw_t* draw, const char* query) { +GF_EXPORT int gf_draw_driver_has_extension(gf_draw_t* draw, const char* query) { int ret = gf_draw_platform_has_extension(draw, query); const char* ext = NULL; const char* ptr; @@ -122,7 +122,7 @@ int gf_draw_driver_has_extension(gf_draw_t* draw, const char* query) { return ((ptr != NULL) && ((ptr[len] == ' ') || (ptr[len] == '\0'))); } -void gf_draw_driver_reshape(gf_draw_t* draw) { +GF_EXPORT void gf_draw_driver_reshape(gf_draw_t* draw) { glViewport(0, 0, (GLint)draw->width, (GLint)draw->height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); @@ -132,7 +132,7 @@ void gf_draw_driver_reshape(gf_draw_t* draw) { glLoadIdentity(); } -void gf_draw_driver_draw_texture(gf_draw_t* draw, float x, float y, float w, float h, gf_draw_driver_texture_t* texture, float r, float g, float b, float a) { +GF_EXPORT void gf_draw_driver_draw_texture(gf_draw_t* draw, float x, float y, float w, float h, gf_draw_driver_texture_t* texture, float r, float g, float b, float a) { gf_graphic_begin_2d(draw); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); @@ -158,14 +158,14 @@ void gf_draw_driver_draw_texture(gf_draw_t* draw, float x, float y, float w, flo gf_graphic_end_2d(draw); } -void gf_draw_driver_destroy(gf_draw_t* draw) { +GF_EXPORT void gf_draw_driver_destroy(gf_draw_t* draw) { int i; for(i = 0; i < sizeof(gf_font) / sizeof(gf_font[0]); i++) { gf_destroy_texture(draw->font[i]); } } -void gf_draw_driver_before(gf_draw_t* draw) { +GF_EXPORT void gf_draw_driver_before(gf_draw_t* draw) { GLfloat lightpos[3]; GF_VECTOR_COPY(draw->light, lightpos); @@ -178,7 +178,7 @@ void gf_draw_driver_before(gf_draw_t* draw) { gf_graphic_clear(draw); } -void gf_draw_driver_after(gf_draw_t* draw) { +GF_EXPORT void gf_draw_driver_after(gf_draw_t* draw) { glMatrixMode(GL_MODELVIEW); glPopMatrix(); } diff --git a/engine/graphic/opengl/gf_graphic.c b/engine/graphic/opengl/gf_graphic.c index 4cda0c5..78772f5 100644 --- a/engine/graphic/opengl/gf_graphic.c +++ b/engine/graphic/opengl/gf_graphic.c @@ -15,7 +15,7 @@ /* Standard */ -void gf_graphic_begin_2d(gf_draw_t* draw) { +GF_EXPORT void gf_graphic_begin_2d(gf_draw_t* draw) { glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); @@ -25,7 +25,7 @@ void gf_graphic_begin_2d(gf_draw_t* draw) { glLoadIdentity(); } -void gf_graphic_end_2d(gf_draw_t* draw) { +GF_EXPORT void gf_graphic_end_2d(gf_draw_t* draw) { glMatrixMode(GL_MODELVIEW); glPopMatrix(); glMatrixMode(GL_PROJECTION); @@ -33,9 +33,9 @@ void gf_graphic_end_2d(gf_draw_t* draw) { glMatrixMode(GL_MODELVIEW); } -void gf_graphic_clear(gf_draw_t* draw) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } +GF_EXPORT void gf_graphic_clear(gf_draw_t* draw) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } -void gf_graphic_text(gf_draw_t* draw, float x, float y, float size, const char* text, float r, float g, float b, float a) { +GF_EXPORT void gf_graphic_text(gf_draw_t* draw, float x, float y, float size, const char* text, float r, float g, float b, float a) { int i; for(i = 0; text[i] != 0; i++) { gf_draw_texture(draw, x + i * (size / 2), y, size / 2, size, draw->font[text[i]], r, g, b, a); diff --git a/engine/graphic/opengl/glfw/gf_draw.c b/engine/graphic/opengl/glfw/gf_draw.c index eeee4be..78dadbd 100644 --- a/engine/graphic/opengl/glfw/gf_draw.c +++ b/engine/graphic/opengl/glfw/gf_draw.c @@ -20,7 +20,7 @@ #include #include -void gf_draw_platform_begin(void) { +GF_EXPORT void gf_draw_platform_begin(void) { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 1); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); @@ -28,9 +28,9 @@ void gf_draw_platform_begin(void) { glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_ANY_PROFILE); } -void gf_draw_platform_end(void) {} +GF_EXPORT void gf_draw_platform_end(void) {} -void gf_glfw_size(GLFWwindow* window, int w, int h) { +GF_EXPORT void gf_glfw_size(GLFWwindow* window, int w, int h) { gf_draw_t* draw = (gf_draw_t*)glfwGetWindowUserPointer(window); draw->width = w; draw->height = h; @@ -38,7 +38,7 @@ void gf_glfw_size(GLFWwindow* window, int w, int h) { gf_draw_reshape(draw); } -int gf_draw_platform_has_extension(gf_draw_t* draw, const char* query) { +GF_EXPORT int gf_draw_platform_has_extension(gf_draw_t* draw, const char* query) { const char* ext = NULL; const char* ptr; const int len = strlen(query); @@ -48,7 +48,7 @@ int gf_draw_platform_has_extension(gf_draw_t* draw, const char* query) { return glfwExtensionSupported(query); } -int gf_draw_platform_step(gf_draw_t* draw) { +GF_EXPORT int gf_draw_platform_step(gf_draw_t* draw) { int ret = 0; int w, h; glfwMakeContextCurrent(draw->platform->window); @@ -65,7 +65,7 @@ int gf_draw_platform_step(gf_draw_t* draw) { return ret; } -void gf_draw_platform_create(gf_draw_t* draw) { +GF_EXPORT void gf_draw_platform_create(gf_draw_t* draw) { draw->platform = malloc(sizeof(*draw->platform)); memset(draw->platform, 0, sizeof(*draw->platform)); @@ -85,7 +85,7 @@ void gf_draw_platform_create(gf_draw_t* draw) { #endif } -void gf_draw_platform_destroy(gf_draw_t* draw) { +GF_EXPORT void gf_draw_platform_destroy(gf_draw_t* draw) { if(draw->platform->window != NULL) { glfwDestroyWindow(draw->platform->window); } diff --git a/engine/graphic/opengl/glx/gf_draw.c b/engine/graphic/opengl/glx/gf_draw.c index b86d3e0..e07effb 100644 --- a/engine/graphic/opengl/glx/gf_draw.c +++ b/engine/graphic/opengl/glx/gf_draw.c @@ -38,10 +38,10 @@ typedef void (*PFNGLXSWAPINTERVALEXTPROC)(Display*, GLXDrawable, int); typedef void (*PFNGLXSWAPINTERVALSGIPROC)(int); #endif -void gf_draw_platform_begin(void) {} -void gf_draw_platform_end(void) {} +GF_EXPORT void gf_draw_platform_begin(void) {} +GF_EXPORT void gf_draw_platform_end(void) {} -int gf_draw_platform_has_extension(gf_draw_t* draw, const char* query) { +GF_EXPORT int gf_draw_platform_has_extension(gf_draw_t* draw, const char* query) { const char* ext = NULL; const char* ptr; const int len = strlen(query); @@ -53,7 +53,7 @@ int gf_draw_platform_has_extension(gf_draw_t* draw, const char* query) { return ((ptr != NULL) && ((ptr[len] == ' ') || (ptr[len] == '\0'))); } -void gf_draw_platform_create(gf_draw_t* draw) { +GF_EXPORT void gf_draw_platform_create(gf_draw_t* draw) { int i = 0; int attribs[64]; int screen; @@ -151,7 +151,7 @@ void gf_draw_platform_create(gf_draw_t* draw) { #endif } -int gf_draw_platform_step(gf_draw_t* draw) { +GF_EXPORT int gf_draw_platform_step(gf_draw_t* draw) { int ret = 0; glXMakeCurrent(draw->platform->display, draw->platform->window, draw->platform->context); while(XPending(draw->platform->display) > 0) { @@ -183,7 +183,7 @@ int gf_draw_platform_step(gf_draw_t* draw) { return ret; } -void gf_draw_platform_destroy(gf_draw_t* draw) { +GF_EXPORT void gf_draw_platform_destroy(gf_draw_t* draw) { if(draw->platform->context != NULL) { glXMakeCurrent(draw->platform->display, None, NULL); glXDestroyContext(draw->platform->display, draw->platform->context); diff --git a/engine/graphic/opengl/wgl/gf_draw.c b/engine/graphic/opengl/wgl/gf_draw.c index 8951f95..98fc7a3 100644 --- a/engine/graphic/opengl/wgl/gf_draw.c +++ b/engine/graphic/opengl/wgl/gf_draw.c @@ -21,10 +21,10 @@ typedef const char*(APIENTRY* PFNWGLGETEXTENSIONSSTRINGARB)(HDC); typedef BOOL(APIENTRY* PFNWGLSWAPINTERVALPROC)(int); -void gf_draw_platform_begin(void) {} -void gf_draw_platform_end(void) {} +GF_EXPORT void gf_draw_platform_begin(void) {} +GF_EXPORT void gf_draw_platform_end(void) {} -LRESULT CALLBACK gf_draw_platform_proc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { +GF_EXPORT LRESULT CALLBACK gf_draw_platform_proc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PAINTSTRUCT ps; RECT rect; gf_draw_t* draw = (gf_draw_t*)GetWindowLongPtr(hWnd, GWLP_USERDATA); @@ -54,7 +54,7 @@ LRESULT CALLBACK gf_draw_platform_proc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp return 0; } -int gf_draw_platform_has_extension(gf_draw_t* draw, const char* query) { +GF_EXPORT int gf_draw_platform_has_extension(gf_draw_t* draw, const char* query) { const char* ext = NULL; const char* ptr; const int len = strlen(query); @@ -72,7 +72,7 @@ int gf_draw_platform_has_extension(gf_draw_t* draw, const char* query) { return 0; } -int gf_draw_platform_step(gf_draw_t* draw) { +GF_EXPORT int gf_draw_platform_step(gf_draw_t* draw) { MSG msg; int ret = 0; wglMakeCurrent(draw->platform->dc, draw->platform->glrc); @@ -95,7 +95,7 @@ int gf_draw_platform_step(gf_draw_t* draw) { return ret; } -void gf_draw_platform_create(gf_draw_t* draw) { +GF_EXPORT void gf_draw_platform_create(gf_draw_t* draw) { WNDCLASSEX wc; PIXELFORMATDESCRIPTOR desc; PFNWGLSWAPINTERVALPROC wglSwapIntervalEXT; @@ -187,7 +187,7 @@ void gf_draw_platform_create(gf_draw_t* draw) { UpdateWindow(draw->platform->window); } -void gf_draw_platform_destroy(gf_draw_t* draw) { +GF_EXPORT void gf_draw_platform_destroy(gf_draw_t* draw) { if(draw->platform->glrc != NULL) { wglMakeCurrent(NULL, NULL); } diff --git a/engine/include/gf_core.h b/engine/include/gf_core.h index 1b41407..028684d 100644 --- a/engine/include/gf_core.h +++ b/engine/include/gf_core.h @@ -12,11 +12,11 @@ /* Standard */ -void gf_engine_begin(void); -void gf_engine_end(void); -gf_engine_t* gf_engine_create(const char* title, int nogui); -void gf_engine_loop(gf_engine_t* engine); -void gf_engine_set_draw(gf_engine_t* engine, void (*func)(gf_draw_t*)); -void gf_engine_destroy(gf_engine_t* engine); +GF_EXPORT void gf_engine_begin(void); +GF_EXPORT void gf_engine_end(void); +GF_EXPORT gf_engine_t* gf_engine_create(const char* title, int nogui); +GF_EXPORT void gf_engine_loop(gf_engine_t* engine); +GF_EXPORT void gf_engine_set_draw(gf_engine_t* engine, void (*func)(gf_draw_t*)); +GF_EXPORT void gf_engine_destroy(gf_engine_t* engine); #endif diff --git a/engine/include/gf_draw.h b/engine/include/gf_draw.h index 13d585c..c832ba4 100644 --- a/engine/include/gf_draw.h +++ b/engine/include/gf_draw.h @@ -12,13 +12,13 @@ /* Standard */ -gf_draw_t* gf_draw_create(gf_engine_t* engine, const char* title); -void gf_draw_destroy(gf_draw_t* draw); -void gf_draw_frame(gf_draw_t* draw); -int gf_draw_step(gf_draw_t* draw); -void gf_draw_begin(void); -void gf_draw_end(void); -void gf_draw_set_draw(gf_draw_t* engine, void (*func)(gf_draw_t*)); -void gf_draw_reshape(gf_draw_t* draw); +GF_EXPORT gf_draw_t* gf_draw_create(gf_engine_t* engine, const char* title); +GF_EXPORT void gf_draw_destroy(gf_draw_t* draw); +GF_EXPORT void gf_draw_frame(gf_draw_t* draw); +GF_EXPORT int gf_draw_step(gf_draw_t* draw); +GF_EXPORT void gf_draw_begin(void); +GF_EXPORT void gf_draw_end(void); +GF_EXPORT void gf_draw_set_draw(gf_draw_t* engine, void (*func)(gf_draw_t*)); +GF_EXPORT void gf_draw_reshape(gf_draw_t* draw); #endif diff --git a/engine/include/gf_draw_driver.h b/engine/include/gf_draw_driver.h index 706ffb8..fe97cac 100644 --- a/engine/include/gf_draw_driver.h +++ b/engine/include/gf_draw_driver.h @@ -12,15 +12,15 @@ /* Standard */ -void gf_draw_driver_init(gf_draw_t* draw); -void gf_draw_driver_destroy(gf_draw_t* draw); -int gf_draw_driver_has_extension(gf_draw_t* draw, const char* query); -void gf_draw_driver_reshape(gf_draw_t* draw); +GF_EXPORT void gf_draw_driver_init(gf_draw_t* draw); +GF_EXPORT void gf_draw_driver_destroy(gf_draw_t* draw); +GF_EXPORT int gf_draw_driver_has_extension(gf_draw_t* draw, const char* query); +GF_EXPORT void gf_draw_driver_reshape(gf_draw_t* draw); -gf_draw_driver_texture_t* gf_draw_driver_register_texture(gf_draw_t* draw, int width, int height, unsigned char* data); -void gf_draw_driver_destroy_texture(gf_draw_driver_texture_t* texture); -void gf_draw_driver_draw_texture(gf_draw_t* draw, float x, float y, float w, float h, gf_draw_driver_texture_t* texture, float r, float g, float b, float a); -void gf_draw_driver_before(gf_draw_t* draw); -void gf_draw_driver_after(gf_draw_t* draw); +GF_EXPORT gf_draw_driver_texture_t* gf_draw_driver_register_texture(gf_draw_t* draw, int width, int height, unsigned char* data); +GF_EXPORT void gf_draw_driver_destroy_texture(gf_draw_driver_texture_t* texture); +GF_EXPORT void gf_draw_driver_draw_texture(gf_draw_t* draw, float x, float y, float w, float h, gf_draw_driver_texture_t* texture, float r, float g, float b, float a); +GF_EXPORT void gf_draw_driver_before(gf_draw_t* draw); +GF_EXPORT void gf_draw_driver_after(gf_draw_t* draw); #endif diff --git a/engine/include/gf_draw_platform.h b/engine/include/gf_draw_platform.h index ea8be7b..22d8ec6 100644 --- a/engine/include/gf_draw_platform.h +++ b/engine/include/gf_draw_platform.h @@ -12,11 +12,11 @@ /* Standard */ -void gf_draw_platform_create(gf_draw_t* draw); -void gf_draw_platform_destroy(gf_draw_t* draw); -int gf_draw_platform_step(gf_draw_t* draw); -int gf_draw_platform_has_extension(gf_draw_t* draw, const char* query); -void gf_draw_platform_begin(void); -void gf_draw_platform_end(void); +GF_EXPORT void gf_draw_platform_create(gf_draw_t* draw); +GF_EXPORT void gf_draw_platform_destroy(gf_draw_t* draw); +GF_EXPORT int gf_draw_platform_step(gf_draw_t* draw); +GF_EXPORT int gf_draw_platform_has_extension(gf_draw_t* draw, const char* query); +GF_EXPORT void gf_draw_platform_begin(void); +GF_EXPORT void gf_draw_platform_end(void); #endif diff --git a/engine/include/gf_graphic.h b/engine/include/gf_graphic.h index e1d7620..849177f 100644 --- a/engine/include/gf_graphic.h +++ b/engine/include/gf_graphic.h @@ -11,9 +11,9 @@ /* Standard */ -void gf_graphic_clear(gf_draw_t* draw); -void gf_graphic_begin_2d(gf_draw_t* draw); -void gf_graphic_end_2d(gf_draw_t* draw); -void gf_graphic_text(gf_draw_t* draw, float x, float y, float size, const char* text, float r, float g, float b, float a); +GF_EXPORT void gf_graphic_clear(gf_draw_t* draw); +GF_EXPORT void gf_graphic_begin_2d(gf_draw_t* draw); +GF_EXPORT void gf_graphic_end_2d(gf_draw_t* draw); +GF_EXPORT void gf_graphic_text(gf_draw_t* draw, float x, float y, float size, const char* text, float r, float g, float b, float a); #endif diff --git a/engine/include/gf_log.h b/engine/include/gf_log.h index d25f128..43a7bce 100644 --- a/engine/include/gf_log.h +++ b/engine/include/gf_log.h @@ -13,6 +13,6 @@ #define gf_function_log(engine, fmt, ...) gf_log(engine, "%6d %24s: " fmt "\n", __LINE__, __FUNCTION_NAME__, __VA_ARGS__) -void gf_log(gf_engine_t* engine, const char* fmt, ...); +GF_EXPORT void gf_log(gf_engine_t* engine, const char* fmt, ...); #endif diff --git a/engine/include/gf_macro.h b/engine/include/gf_macro.h index 42cefc0..4ffbffb 100644 --- a/engine/include/gf_macro.h +++ b/engine/include/gf_macro.h @@ -55,6 +55,12 @@ #define GF_DECLARE_TYPE(n, b) typedef struct _gf_##n b gf_##n##_t; +#if defined(_WIN32) && defined(_DLL) +#define GF_EXPORT __declspec(dllexport) +#else +#define GF_EXPORT +#endif + /* Expose them by default */ #ifndef GF_EXPOSE_MATH #define GF_EXPOSE_MATH diff --git a/engine/include/gf_math.h b/engine/include/gf_math.h index 0de1f8c..6ada303 100644 --- a/engine/include/gf_math.h +++ b/engine/include/gf_math.h @@ -16,7 +16,7 @@ to[1] = from[1]; \ to[2] = from[2] -float gf_log2(float x); -void gf_calculate_normal(gf_vector_t* r, gf_vector_t v0, gf_vector_t v1, gf_vector_t v2); +GF_EXPORT float gf_log2(float x); +GF_EXPORT void gf_calculate_normal(gf_vector_t* r, gf_vector_t v0, gf_vector_t v1, gf_vector_t v2); #endif diff --git a/engine/include/gf_physics.h b/engine/include/gf_physics.h index 16ae396..5d21bfc 100644 --- a/engine/include/gf_physics.h +++ b/engine/include/gf_physics.h @@ -11,9 +11,9 @@ /* Standard */ -void gf_physics_begin(void); -void gf_physics_end(void); -gf_physics_t* gf_physics_create(void); -void gf_physics_destroy(gf_physics_t* physics); +GF_EXPORT void gf_physics_begin(void); +GF_EXPORT void gf_physics_end(void); +GF_EXPORT gf_physics_t* gf_physics_create(void); +GF_EXPORT void gf_physics_destroy(gf_physics_t* physics); #endif diff --git a/engine/include/gf_texture.h b/engine/include/gf_texture.h index 6a4352c..bf4d84e 100644 --- a/engine/include/gf_texture.h +++ b/engine/include/gf_texture.h @@ -12,8 +12,8 @@ /* Standard */ -gf_texture_t* gf_register_texture(gf_draw_t* draw, int width, int height, unsigned char* data); -void gf_destroy_texture(gf_texture_t* texture); -void gf_draw_texture(gf_draw_t* draw, float x, float y, float w, float h, gf_texture_t* texture, float r, float g, float b, float a); +GF_EXPORT gf_texture_t* gf_register_texture(gf_draw_t* draw, int width, int height, unsigned char* data); +GF_EXPORT void gf_destroy_texture(gf_texture_t* texture); +GF_EXPORT void gf_draw_texture(gf_draw_t* draw, float x, float y, float w, float h, gf_texture_t* texture, float r, float g, float b, float a); #endif diff --git a/engine/include/gf_thread.h b/engine/include/gf_thread.h index 3af7da0..a56009e 100644 --- a/engine/include/gf_thread.h +++ b/engine/include/gf_thread.h @@ -11,8 +11,8 @@ /* Standard */ -gf_thread_t* gf_create_thread(void (*func)(void*), void* userdata); -void gf_join_thread(gf_thread_t* thread); -void gf_destroy_thread(gf_thread_t* thread); +GF_EXPORT gf_thread_t* gf_create_thread(void (*func)(void*), void* userdata); +GF_EXPORT void gf_join_thread(gf_thread_t* thread); +GF_EXPORT void gf_destroy_thread(gf_thread_t* thread); #endif diff --git a/engine/include/gf_version.h b/engine/include/gf_version.h index e98cd85..cdc394d 100644 --- a/engine/include/gf_version.h +++ b/engine/include/gf_version.h @@ -11,6 +11,6 @@ /* Standard */ -void gf_get_version(gf_version_t* version); +GF_EXPORT void gf_get_version(gf_version_t* version); #endif diff --git a/engine/thread/posix/gf_thread.c b/engine/thread/posix/gf_thread.c index b1f295c..ce82d18 100644 --- a/engine/thread/posix/gf_thread.c +++ b/engine/thread/posix/gf_thread.c @@ -13,13 +13,13 @@ /* Standard */ #include -void* gf_wrap_thread(void* arg) { +GF_EXPORT void* gf_wrap_thread(void* arg) { gf_thread_context_t* ctx = (gf_thread_context_t*)arg; ctx->func(ctx->data); return NULL; } -gf_thread_t* gf_create_thread(void (*func)(void*), void* userdata) { +GF_EXPORT gf_thread_t* gf_create_thread(void (*func)(void*), void* userdata) { gf_thread_t* thread = malloc(sizeof(*thread)); thread->context.func = func; thread->context.data = userdata; @@ -28,9 +28,9 @@ gf_thread_t* gf_create_thread(void (*func)(void*), void* userdata) { return NULL; } -void gf_join_thread(gf_thread_t* thread) { +GF_EXPORT void gf_join_thread(gf_thread_t* thread) { void* value; pthread_join(thread->thread, &value); } -void gf_destroy_thread(gf_thread_t* thread) { free(thread); } +GF_EXPORT void gf_destroy_thread(gf_thread_t* thread) { free(thread); } diff --git a/engine/thread/win32/gf_thread.c b/engine/thread/win32/gf_thread.c index 9c18de9..d5adf60 100644 --- a/engine/thread/win32/gf_thread.c +++ b/engine/thread/win32/gf_thread.c @@ -13,13 +13,13 @@ /* Standard */ #include -DWORD WINAPI gf_wrap_thread(void* arg) { +GF_EXPORT DWORD WINAPI gf_wrap_thread(void* arg) { gf_thread_context_t* ctx = (gf_thread_context_t*)arg; ctx->func(ctx->data); return 0; } -gf_thread_t* gf_create_thread(void (*func)(void*), void* userdata) { +GF_EXPORT gf_thread_t* gf_create_thread(void (*func)(void*), void* userdata) { gf_thread_t* thread = malloc(sizeof(*thread)); thread->context.func = func; thread->context.data = userdata; @@ -28,9 +28,9 @@ gf_thread_t* gf_create_thread(void (*func)(void*), void* userdata) { return NULL; } -void gf_join_thread(gf_thread_t* thread) { WaitForSingleObject(thread->thread, INFINITE); } +GF_EXPORT void gf_join_thread(gf_thread_t* thread) { WaitForSingleObject(thread->thread, INFINITE); } -void gf_destroy_thread(gf_thread_t* thread) { +GF_EXPORT void gf_destroy_thread(gf_thread_t* thread) { CloseHandle(thread->thread); free(thread); } diff --git a/premake5.lua b/premake5.lua index 80cd797..68c204d 100644 --- a/premake5.lua +++ b/premake5.lua @@ -158,6 +158,10 @@ function link_stuffs(cond) "toolset:gcc or toolset:clang", cond }) + linkoptions({ + "-static-libgcc", + "-static-libstdc++" + }) links({ "stdc++:static" })