optimized draw command size

This commit is contained in:
vurtun 2015-04-27 16:22:56 +02:00
parent 5c14ed0a9e
commit 1774c74fc2
3 changed files with 52 additions and 47 deletions

View File

@ -13,7 +13,7 @@
/* macros */ /* macros */
#define MAX_BUFFER 64 #define MAX_BUFFER 64
#define MAX_MEMORY (16 * 1024) #define MAX_MEMORY (8 * 1024)
#define MAX_PANELS 4 #define MAX_PANELS 4
#define WIN_WIDTH 800 #define WIN_WIDTH 800
#define WIN_HEIGHT 600 #define WIN_HEIGHT 600
@ -228,7 +228,8 @@ surface_scissor(XSurface *surf, float x, float y, float w, float h)
} }
static void static void
surface_draw_line(XSurface *surf, float x0, float y0, float x1, float y1, struct gui_color col) surface_draw_line(XSurface *surf, gui_short x0, gui_short y0, gui_short x1,
gui_short y1, struct gui_color col)
{ {
unsigned long c = color_from_byte(col); unsigned long c = color_from_byte(col);
XSetForeground(surf->dpy, surf->gc, c); XSetForeground(surf->dpy, surf->gc, c);
@ -236,7 +237,8 @@ surface_draw_line(XSurface *surf, float x0, float y0, float x1, float y1, struct
} }
static void static void
surface_draw_rect(XSurface* surf, float x, float y, float w, float h, struct gui_color col) surface_draw_rect(XSurface* surf, gui_short x, gui_short y, gui_ushort w,
gui_ushort h, struct gui_color col)
{ {
unsigned long c = color_from_byte(col); unsigned long c = color_from_byte(col);
XSetForeground(surf->dpy, surf->gc, c); XSetForeground(surf->dpy, surf->gc, c);
@ -244,8 +246,8 @@ surface_draw_rect(XSurface* surf, float x, float y, float w, float h, struct gui
} }
static void static void
surface_draw_triangle(XSurface *surf, float x0, float y0, float x1, float y1, surface_draw_triangle(XSurface *surf, gui_short x0, gui_short y0, gui_short x1,
float x2, float y2, struct gui_color col) gui_short y1, gui_short x2, gui_short y2, struct gui_color col)
{ {
XPoint pnts[3]; XPoint pnts[3];
unsigned long c = color_from_byte(col); unsigned long c = color_from_byte(col);
@ -260,7 +262,8 @@ surface_draw_triangle(XSurface *surf, float x0, float y0, float x1, float y1,
} }
static void static void
surface_draw_circle(XSurface *surf, float x, float y, float w, float h, struct gui_color col) surface_draw_circle(XSurface *surf, gui_short x, gui_short y, gui_ushort w,
gui_ushort h, struct gui_color col)
{ {
unsigned long c = color_from_byte(col); unsigned long c = color_from_byte(col);
XSetForeground(surf->dpy, surf->gc, c); XSetForeground(surf->dpy, surf->gc, c);
@ -269,8 +272,8 @@ surface_draw_circle(XSurface *surf, float x, float y, float w, float h, struct g
} }
static void static void
surface_draw_text(XSurface *surf, float x, float y, float w, float h, const char *text, surface_draw_text(XSurface *surf, gui_short x, gui_short y, gui_ushort w, gui_ushort h,
size_t len, XFont *font, struct gui_color cbg, struct gui_color cfg) const char *text, size_t len, XFont *font, struct gui_color cbg, struct gui_color cfg)
{ {
int i, tx, ty, th, olen; int i, tx, ty, th, olen;
unsigned long bg = color_from_byte(cbg); unsigned long bg = color_from_byte(cbg);

52
gui.c
View File

@ -974,10 +974,10 @@ gui_buffer_push_scissor(struct gui_command_buffer *buffer, gui_float x, gui_floa
buffer->clip.w = w; buffer->clip.w = w;
buffer->clip.h = h; buffer->clip.h = h;
cmd->x = x; cmd->x = (gui_short)x;
cmd->y = y; cmd->y = (gui_short)y;
cmd->w = w; cmd->w = (gui_ushort)w;
cmd->h = h; cmd->h = (gui_ushort)h;
} }
void void
@ -996,10 +996,10 @@ gui_buffer_push_line(struct gui_command_buffer *buffer, gui_float x0, gui_float
} }
cmd = gui_buffer_push(buffer, GUI_COMMAND_LINE, sizeof(*cmd)); cmd = gui_buffer_push(buffer, GUI_COMMAND_LINE, sizeof(*cmd));
if (!cmd) return; if (!cmd) return;
cmd->begin[0] = x0; cmd->begin[0] = (gui_short)x0;
cmd->begin[1] = y0; cmd->begin[1] = (gui_short)y0;
cmd->end[0] = x1; cmd->end[0] = (gui_short)x1;
cmd->end[1] = y1; cmd->end[1] = (gui_short)y1;
cmd->color = c; cmd->color = c;
} }
@ -1019,10 +1019,10 @@ gui_buffer_push_rect(struct gui_command_buffer *buffer, gui_float x, gui_float y
} }
cmd = gui_buffer_push(buffer, GUI_COMMAND_RECT, sizeof(*cmd)); cmd = gui_buffer_push(buffer, GUI_COMMAND_RECT, sizeof(*cmd));
if (!cmd) return; if (!cmd) return;
cmd->x = x; cmd->x = (gui_short)x;
cmd->y = y; cmd->y = (gui_short)y;
cmd->w = w; cmd->w = (gui_ushort)w;
cmd->h = h; cmd->h = (gui_ushort)h;
cmd->color = c; cmd->color = c;
} }
@ -1043,10 +1043,10 @@ gui_buffer_push_circle(struct gui_command_buffer *buffer, gui_float x, gui_float
cmd = gui_buffer_push(buffer, GUI_COMMAND_CIRCLE, sizeof(*cmd)); cmd = gui_buffer_push(buffer, GUI_COMMAND_CIRCLE, sizeof(*cmd));
if (!cmd) return; if (!cmd) return;
cmd->x = x; cmd->x = (gui_short)x;
cmd->y = y; cmd->y = (gui_short)y;
cmd->w = w; cmd->w = (gui_ushort)w;
cmd->h = h; cmd->h = (gui_ushort)h;
cmd->color = c; cmd->color = c;
} }
@ -1068,12 +1068,12 @@ gui_buffer_push_triangle(struct gui_command_buffer *buffer, gui_float x0, gui_fl
} }
cmd = gui_buffer_push(buffer, GUI_COMMAND_TRIANGLE, sizeof(*cmd)); cmd = gui_buffer_push(buffer, GUI_COMMAND_TRIANGLE, sizeof(*cmd));
if (!cmd) return; if (!cmd) return;
cmd->a[0] = x0; cmd->a[0] = (gui_short)x0;
cmd->a[1] = y0; cmd->a[1] = (gui_short)y0;
cmd->b[0] = x1; cmd->b[0] = (gui_short)x1;
cmd->b[1] = y1; cmd->b[1] = (gui_short)y1;
cmd->c[0] = x2; cmd->c[0] = (gui_short)x2;
cmd->c[1] = y2; cmd->c[1] = (gui_short)y2;
cmd->color = c; cmd->color = c;
} }
@ -1095,10 +1095,10 @@ gui_buffer_push_text(struct gui_command_buffer *buffer, gui_float x, gui_float y
} }
cmd = gui_buffer_push(buffer, GUI_COMMAND_TEXT, sizeof(*cmd) + length + 1); cmd = gui_buffer_push(buffer, GUI_COMMAND_TEXT, sizeof(*cmd) + length + 1);
if (!cmd) return; if (!cmd) return;
cmd->x = x; cmd->x = (gui_short)x;
cmd->y = y; cmd->y = (gui_short)y;
cmd->w = w; cmd->w = (gui_ushort)w;
cmd->h = h; cmd->h = (gui_ushort)h;
cmd->bg = bg; cmd->bg = bg;
cmd->fg = fg; cmd->fg = fg;
cmd->font = font->userdata; cmd->font = font->userdata;

28
gui.h
View File

@ -20,6 +20,7 @@ typedef int32_t gui_bool;
typedef int16_t gui_short; typedef int16_t gui_short;
typedef int64_t gui_long; typedef int64_t gui_long;
typedef float gui_float; typedef float gui_float;
typedef uint16_t gui_ushort;
typedef uint32_t gui_uint; typedef uint32_t gui_uint;
typedef uint64_t gui_ulong; typedef uint64_t gui_ulong;
typedef uint32_t gui_flags; typedef uint32_t gui_flags;
@ -33,6 +34,7 @@ typedef int gui_bool;
typedef short gui_short; typedef short gui_short;
typedef long gui_long; typedef long gui_long;
typedef float gui_float; typedef float gui_float;
typedef unsigned short gui_ushort;
typedef unsigned int gui_uint; typedef unsigned int gui_uint;
typedef unsigned long gui_ulong; typedef unsigned long gui_ulong;
typedef unsigned int gui_flags; typedef unsigned int gui_flags;
@ -214,43 +216,43 @@ struct gui_command {
struct gui_command_scissor { struct gui_command_scissor {
struct gui_command header; struct gui_command header;
gui_float x, y; gui_short x, y;
gui_float w, h; gui_ushort w, h;
}; };
struct gui_command_line { struct gui_command_line {
struct gui_command header; struct gui_command header;
gui_float begin[2]; gui_short begin[2];
gui_float end[2]; gui_short end[2];
struct gui_color color; struct gui_color color;
}; };
struct gui_command_rect { struct gui_command_rect {
struct gui_command header; struct gui_command header;
gui_float x, y; gui_short x, y;
gui_float w, h; gui_ushort w, h;
struct gui_color color; struct gui_color color;
}; };
struct gui_command_circle { struct gui_command_circle {
struct gui_command header; struct gui_command header;
gui_float x, y; gui_short x, y;
gui_float w, h; gui_ushort w, h;
struct gui_color color; struct gui_color color;
}; };
struct gui_command_triangle { struct gui_command_triangle {
struct gui_command header; struct gui_command header;
gui_float a[2]; gui_short a[2];
gui_float b[2]; gui_short b[2];
gui_float c[2]; gui_short c[2];
struct gui_color color; struct gui_color color;
}; };
struct gui_command_text { struct gui_command_text {
struct gui_command header; struct gui_command header;
gui_float x, y; gui_short x, y;
gui_float w, h; gui_ushort w, h;
gui_size length; gui_size length;
struct gui_color bg; struct gui_color bg;
struct gui_color fg; struct gui_color fg;