From 080b59dcc2e663609e8f516aa62fda8e25c83456 Mon Sep 17 00:00:00 2001 From: vurtun Date: Sun, 3 Jan 2016 01:47:01 +0100 Subject: [PATCH] removed sin & cos dependency --- demo/allegro5_complex/allegro.c | 2 +- demo/allegro5_simple/allegro.c | 2 +- demo/glfw/glfw.c | 2 +- demo/linuxgl/linuxgl.c | 2 +- demo/nanovg/nanovg.c | 2 +- demo/sdl/sdl.c | 2 +- demo/x11/xlib.c | 2 +- example/demo/demo.c | 2 +- example/filex/filex.c | 3 +- example/nodedit/nodedit.c | 3 +- zahnrad.c | 65 +++++++++++++++++++++++++-------- zahnrad.h | 22 ++--------- 12 files changed, 64 insertions(+), 45 deletions(-) diff --git a/demo/allegro5_complex/allegro.c b/demo/allegro5_complex/allegro.c index 95cc276..42486c7 100644 --- a/demo/allegro5_complex/allegro.c +++ b/demo/allegro5_complex/allegro.c @@ -354,7 +354,7 @@ main(int argc, char *argv[]) usrfnt = device_init(&dev, font_path, 14, zr_font_default_glyph_ranges()); - zr_init(&gui.ctx, &alloc, &usrfnt, sin, cos); + zr_init(&gui.ctx, &alloc, &usrfnt); } while (running) { diff --git a/demo/allegro5_simple/allegro.c b/demo/allegro5_simple/allegro.c index 616fae8..fecb6bf 100644 --- a/demo/allegro5_simple/allegro.c +++ b/demo/allegro5_simple/allegro.c @@ -205,7 +205,7 @@ main(int argc, char *argv[]) usrfnt.userdata = zr_handle_ptr(font); usrfnt.width = font_get_width; usrfnt.height = al_get_font_line_height(font); - zr_init(&gui.ctx, &alloc, &usrfnt, sin, cos); + zr_init(&gui.ctx, &alloc, &usrfnt); } while (running) { diff --git a/demo/glfw/glfw.c b/demo/glfw/glfw.c index c0b8c13..7caf8e5 100644 --- a/demo/glfw/glfw.c +++ b/demo/glfw/glfw.c @@ -499,7 +499,7 @@ main(int argc, char *argv[]) zr_buffer_init(&device.cmds, &alloc, 1024); usrfnt = font_bake_and_upload(&device, &font, font_path, 14, zr_font_default_glyph_ranges()); - zr_init(&gui.ctx, &alloc, &usrfnt, sin, cos); + zr_init(&gui.ctx, &alloc, &usrfnt); } device_init(&device); diff --git a/demo/linuxgl/linuxgl.c b/demo/linuxgl/linuxgl.c index b8e0ca2..6ea8f1e 100644 --- a/demo/linuxgl/linuxgl.c +++ b/demo/linuxgl/linuxgl.c @@ -855,7 +855,7 @@ int main(int argc, char **argv) zr_buffer_init(&device.cmds, &alloc, 4024); usrfnt = font_bake_and_upload(&device, &font, font_path, 14, zr_font_default_glyph_ranges()); - zr_init(&gui.ctx, &alloc, &usrfnt, sin, cos); + zr_init(&gui.ctx, &alloc, &usrfnt); } device_init(&device); diff --git a/demo/nanovg/nanovg.c b/demo/nanovg/nanovg.c index 8da1097..d5a984f 100644 --- a/demo/nanovg/nanovg.c +++ b/demo/nanovg/nanovg.c @@ -289,7 +289,7 @@ main(int argc, char *argv[]) memset(&gui, 0, sizeof gui); gui.memory = calloc(MAX_MEMORY, 1); - zr_init_fixed(&gui.ctx, gui.memory, MAX_MEMORY, &usrfnt, sin, cos); + zr_init_fixed(&gui.ctx, gui.memory, MAX_MEMORY, &usrfnt); } while (running) { diff --git a/demo/sdl/sdl.c b/demo/sdl/sdl.c index 40d8c95..f58a6fc 100644 --- a/demo/sdl/sdl.c +++ b/demo/sdl/sdl.c @@ -469,7 +469,7 @@ main(int argc, char *argv[]) zr_buffer_init(&device.cmds, &alloc, 1024); usrfnt = font_bake_and_upload(&device, &font, font_path, 14, zr_font_default_glyph_ranges()); - zr_init(&gui.ctx, &alloc, &usrfnt, sin, cos); + zr_init(&gui.ctx, &alloc, &usrfnt); } device_init(&device); diff --git a/demo/x11/xlib.c b/demo/x11/xlib.c index 47fd917..60f8287 100644 --- a/demo/x11/xlib.c +++ b/demo/x11/xlib.c @@ -420,7 +420,7 @@ main(int argc, char *argv[]) font.width = font_get_text_width; memset(&gui, 0, sizeof gui); gui.memory = calloc(MAX_MEMORY, 1); - zr_init_fixed(&gui.ctx, gui.memory, MAX_MEMORY, &font, sin, cos); + zr_init_fixed(&gui.ctx, gui.memory, MAX_MEMORY, &font); while (running) { /* Input */ diff --git a/example/demo/demo.c b/example/demo/demo.c index db2a252..f7f2b2a 100644 --- a/example/demo/demo.c +++ b/example/demo/demo.c @@ -755,7 +755,7 @@ main(int argc, char *argv[]) font.userdata.ptr = vg; font.width = font_get_width; font.height = 20; - zr_init_fixed(&ctx, memory, MAX_MEMORY, &font, sin, cos); + zr_init_fixed(&ctx, memory, MAX_MEMORY, &font); ctx.style.rounding[ZR_ROUNDING_BUTTON] = 3; } diff --git a/example/filex/filex.c b/example/filex/filex.c index 7ad3ed1..569149c 100644 --- a/example/filex/filex.c +++ b/example/filex/filex.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include @@ -824,7 +823,7 @@ main(int argc, char *argv[]) font.userdata.ptr = vg; font.width = font_get_width; nvgTextMetrics(vg, NULL, NULL, &font.height); - zr_init_fixed(&ctx, memory, MAX_MEMORY, &font, sin, cos); + zr_init_fixed(&ctx, memory, MAX_MEMORY, &font); file_browser_init(&browser, vg); } diff --git a/example/nodedit/nodedit.c b/example/nodedit/nodedit.c index 296528d..62eb4ca 100644 --- a/example/nodedit/nodedit.c +++ b/example/nodedit/nodedit.c @@ -23,7 +23,6 @@ #include #include #include -#include #ifdef _WIN32 #include @@ -636,7 +635,7 @@ main(int argc, char *argv[]) font.userdata.ptr = vg; nvgTextMetrics(vg, NULL, NULL, &font.height); font.width = font_get_width; - zr_init_fixed(&ctx, memory, MAX_MEMORY, &font, sin, cos); + zr_init_fixed(&ctx, memory, MAX_MEMORY, &font); ctx.style.header.align = ZR_HEADER_RIGHT; } node_editor_init(&nodedit); diff --git a/zahnrad.c b/zahnrad.c index a24bc44..50651e0 100644 --- a/zahnrad.c +++ b/zahnrad.c @@ -40,6 +40,13 @@ enum zr_orientation { ZR_HORIZONTAL }; +enum zr_draw_list_stroke { + ZR_STROKE_OPEN = zr_false, + /* build up path has no connection back to the beginning */ + ZR_STROKE_CLOSED = zr_true + /* build up path has a connection back to the beginning */ +}; + struct zr_text_selection { int active; /* current selection state */ @@ -305,6 +312,34 @@ zr_inv_sqrt(float number) return conv.f; } +static double +zr_sin(double x) +{ + static const double a0 = +1.91059300966915117e-31; + static const double a1 = +1.00086760103908896; + static const double a2 = -1.21276126894734565e-2; + static const double a3 = -1.38078780785773762e-1; + static const double a4 = -2.67353392911981221e-2; + static const double a5 = +2.08026600266304389e-2; + static const double a6 = -3.03996055049204407e-3; + static const double a7 = +1.38235642404333740e-4; + return a0 + x * (a1 + x * (a2 + x * (a3 + x * (a4 + x * (a5 + x *(a6 + x * a7)))))); +} + +static double +zr_cos(double x) +{ + static const double a0 = +1.00238601909309722; + static const double a1 = -3.81919947353040024e-2; + static const double a2 = -3.94382342128062756e-1; + static const double a3 = -1.18134036025221444e-1; + static const double a4 = +1.07123798512170878e-1; + static const double a5 = -1.86637164165180873e-2; + static const double a6 = +9.90140908664079833e-4; + static const double a7 = -5.23022132118824778e-14; + return a0 + x * (a1 + x * (a2 + x * (a3 + x * (a4 + x * (a5 + x *(a6 + x * a7)))))); +} + struct zr_rect zr_get_null_rect(void) { @@ -2024,16 +2059,14 @@ zr_draw_text(struct zr_command_buffer *b, struct zr_rect r, * ===============================================================*/ #if ZR_COMPILE_WITH_VERTEX_BUFFER static void -zr_canvas_init(struct zr_canvas *list, zr_sin_f sine, zr_cos_f cosine) +zr_canvas_init(struct zr_canvas *list) { zr_size i = 0; zr_zero(list, sizeof(*list)); - list->sin = sine; - list->cos = cosine; for (i = 0; i < ZR_LEN(list->circle_vtx); ++i) { const float a = ((float)i / (float)ZR_LEN(list->circle_vtx)) * 2 * ZR_PI; - list->circle_vtx[i].x = (float)cosine(a); - list->circle_vtx[i].y = (float)sine(a); + list->circle_vtx[i].x = (float)zr_cos(a); + list->circle_vtx[i].y = (float)zr_sin(a); } } @@ -2616,8 +2649,12 @@ zr_canvas_path_arc_to(struct zr_canvas *list, struct zr_vec2 center, if (radius == 0.0f) return; for (i = 0; i <= segments; ++i) { const float a = a_min + ((float)i / (float)segments) * (a_max - a_min); + const float x = center.x + (float)zr_cos(a) * radius; + const float y = center.y + (float)zr_sin(a) * radius; +#if 0 const float x = center.x + (float)list->cos(a) * radius; const float y = center.y + (float)list->sin(a) * radius; +#endif zr_canvas_path_line_to(list, zr_vec2(x, y)); } } @@ -6492,23 +6529,22 @@ zr_clear(struct zr_context *ctx) } static void -zr_setup(struct zr_context *ctx, const struct zr_user_font *font, - zr_sin_f sine, zr_cos_f cosine) +zr_setup(struct zr_context *ctx, const struct zr_user_font *font) { zr_zero(ctx, sizeof(*ctx)); zr_style_default(&ctx->style, ZR_DEFAULT_ALL, font); #if ZR_COMPILE_WITH_VERTEX_BUFFER - if (sine && cosine) zr_canvas_init(&ctx->canvas, sine, cosine); + zr_canvas_init(&ctx->canvas); #endif } int zr_init_fixed(struct zr_context *ctx, void *memory, zr_size size, - const struct zr_user_font *font, zr_sin_f sine, zr_cos_f cosine) + const struct zr_user_font *font) { ZR_ASSERT(memory); if (!memory) return 0; - zr_setup(ctx, font, sine, cosine); + zr_setup(ctx, font); zr_buffer_init_fixed(&ctx->memory, memory, size); ctx->pool = 0; return 1; @@ -6516,13 +6552,12 @@ zr_init_fixed(struct zr_context *ctx, void *memory, zr_size size, int zr_init_custom(struct zr_context *ctx, struct zr_buffer *cmds, - struct zr_buffer *pool, const struct zr_user_font *font, - zr_sin_f sine, zr_cos_f cosine) + struct zr_buffer *pool, const struct zr_user_font *font) { ZR_ASSERT(cmds); ZR_ASSERT(pool); if (!cmds || !pool) return 0; - zr_setup(ctx, font, sine, cosine); + zr_setup(ctx, font); ctx->memory = *cmds; if (pool->type == ZR_BUFFER_FIXED) { /* take memory from buffer and alloc fixed pool */ @@ -6543,11 +6578,11 @@ zr_init_custom(struct zr_context *ctx, struct zr_buffer *cmds, int zr_init(struct zr_context *ctx, struct zr_allocator *alloc, - const struct zr_user_font *font, zr_sin_f sine, zr_cos_f cosine) + const struct zr_user_font *font) { ZR_ASSERT(alloc); if (!alloc) return 0; - zr_setup(ctx, font, sine, cosine); + zr_setup(ctx, font); zr_buffer_init(&ctx->memory, alloc, ZR_DEFAULT_COMMAND_BUFFER_SIZE); ctx->pool = alloc->alloc(alloc->userdata, sizeof(struct zr_pool)); zr_pool_init(ctx->pool, alloc, ZR_POOL_DEFAULT_CAPACTIY); diff --git a/zahnrad.h b/zahnrad.h index a84a61e..f521bfc 100644 --- a/zahnrad.h +++ b/zahnrad.h @@ -123,8 +123,6 @@ typedef char zr_glyph[ZR_UTF_SIZE]; typedef union {void *ptr; int id;} zr_handle; struct zr_image {zr_handle handle; unsigned short w, h; unsigned short region[4];}; struct zr_scroll {unsigned short x, y;}; -typedef double(*zr_sin_f)(double); -typedef double(*zr_cos_f)(double); /* pointer */ #define zr_ptr_add(t, p, i) ((t*)((void*)((zr_byte*)(p) + (i)))) @@ -361,7 +359,7 @@ struct zr_buffer { struct zr_allocator pool; /* allocator callback for dynamic buffers */ enum zr_allocation_type type; - /* memory type management type */ + /* memory management type */ struct zr_memory memory; /* memory and size of the current memory block */ float grow_factor; @@ -731,13 +729,6 @@ struct zr_draw_vertex { zr_draw_vertex_color col; }; -enum zr_draw_list_stroke { - ZR_STROKE_OPEN = zr_false, - /* build up path has no connection back to the beginning */ - ZR_STROKE_CLOSED = zr_true - /* build up path has a connection back to the beginning */ -}; - struct zr_draw_command { unsigned int elem_count; /* number of elements in the current draw batch */ @@ -761,7 +752,6 @@ struct zr_canvas { /* texture with white pixel for easy primitive drawing */ struct zr_rect clip_rect; /* current clipping rectangle */ - zr_cos_f cos; zr_sin_f sin; /* cosine/sine calculation callback since this library does not use libc */ struct zr_buffer *buffer; /* buffer to store draw commands and temporarily store path */ @@ -784,7 +774,6 @@ struct zr_canvas { struct zr_vec2 circle_vtx[12]; /* small lookup table for fast circle drawing */ }; - #endif /* drawing routines */ @@ -1300,13 +1289,10 @@ struct zr_context { /*-------------------------------------------------------------- * CONTEXT * -------------------------------------------------------------*/ -int zr_init_fixed(struct zr_context*, void *memory, zr_size size, - const struct zr_user_font*, zr_sin_f, zr_cos_f); +int zr_init_fixed(struct zr_context*, void *memory, zr_size size, const struct zr_user_font*); int zr_init_custom(struct zr_context*, struct zr_buffer *cmds, - struct zr_buffer *pool, const struct zr_user_font*, - zr_sin_f, zr_cos_f); -int zr_init(struct zr_context*, struct zr_allocator*, - const struct zr_user_font*, zr_sin_f, zr_cos_f); + struct zr_buffer *pool, const struct zr_user_font*); +int zr_init(struct zr_context*, struct zr_allocator*, const struct zr_user_font*); void zr_convert(struct zr_context*, struct zr_buffer *cmds, struct zr_buffer *vertexes, struct zr_buffer *elements, struct zr_draw_null_texture , enum zr_anti_aliasing,