fixed anti-aliased vertex output
This commit is contained in:
parent
bf426606f3
commit
bd9eb035fd
@ -277,7 +277,8 @@ static zr_float fsin(zr_float f) {return (zr_float)sin(f);}
|
|||||||
static zr_float fcos(zr_float f) {return (zr_float)cos(f);}
|
static zr_float fcos(zr_float f) {return (zr_float)cos(f);}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
device_draw(struct device *dev, struct zr_command_queue *queue, int width, int height)
|
device_draw(struct device *dev, struct zr_command_queue *queue, int width, int height,
|
||||||
|
enum zr_anti_aliasing AA)
|
||||||
{
|
{
|
||||||
GLint last_prog, last_tex;
|
GLint last_prog, last_tex;
|
||||||
GLint last_ebo, last_vbo, last_vao;
|
GLint last_ebo, last_vbo, last_vao;
|
||||||
@ -333,16 +334,16 @@ device_draw(struct device *dev, struct zr_command_queue *queue, int width, int h
|
|||||||
elements = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY);
|
elements = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||||
{
|
{
|
||||||
struct zr_buffer vbuf, ebuf;
|
struct zr_buffer vbuf, ebuf;
|
||||||
zr_buffer_init_fixed(&vbuf, vertexes, (zr_size)MAX_VERTEX_MEMORY);
|
zr_buffer_init_fixed(&vbuf, vertexes, MAX_VERTEX_MEMORY);
|
||||||
zr_buffer_init_fixed(&ebuf, elements, (zr_size)MAX_ELEMENT_MEMORY);
|
zr_buffer_init_fixed(&ebuf, elements, MAX_ELEMENT_MEMORY);
|
||||||
zr_draw_list_init(&draw_list, &dev->cmds, &vbuf, &ebuf,
|
zr_draw_list_init(&draw_list, &dev->cmds, &vbuf, &ebuf,
|
||||||
fsin, fcos, dev->null, ZR_ANTI_ALIASING_ON);
|
fsin, fcos, dev->null, AA);
|
||||||
zr_draw_list_load(&draw_list, queue, 1.0f, 22);
|
zr_draw_list_load(&draw_list, queue, 1.0f, 22);
|
||||||
}
|
}
|
||||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||||
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
|
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
|
||||||
|
|
||||||
/* iterate and execute each draw command */
|
/* iterate over and execute each draw command */
|
||||||
zr_foreach_draw_command(cmd, &draw_list) {
|
zr_foreach_draw_command(cmd, &draw_list) {
|
||||||
glBindTexture(GL_TEXTURE_2D, (GLuint)cmd->texture.id);
|
glBindTexture(GL_TEXTURE_2D, (GLuint)cmd->texture.id);
|
||||||
glScissor((GLint)cmd->clip_rect.x,
|
glScissor((GLint)cmd->clip_rect.x,
|
||||||
@ -510,7 +511,7 @@ main(int argc, char *argv[])
|
|||||||
/* Draw */
|
/* Draw */
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
glClearColor(0.4f, 0.4f, 0.4f, 1.0f);
|
glClearColor(0.4f, 0.4f, 0.4f, 1.0f);
|
||||||
device_draw(&device, &gui.queue, width, height);
|
device_draw(&device, &gui.queue, width, height, ZR_ANTI_ALIASING_ON);
|
||||||
SDL_GL_SwapWindow(win);
|
SDL_GL_SwapWindow(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
zahnrad.c
17
zahnrad.c
@ -1716,7 +1716,6 @@ zr_command_queue_next(struct zr_command_queue *queue, const struct zr_command *c
|
|||||||
next = zr_ptr_add_const(struct zr_command, buffer, cmd->next);
|
next = zr_ptr_add_const(struct zr_command, buffer, cmd->next);
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ==============================================================
|
/* ==============================================================
|
||||||
*
|
*
|
||||||
* Draw List
|
* Draw List
|
||||||
@ -2266,8 +2265,8 @@ zr_draw_list_add_poly_convex(struct zr_draw_list *list, struct zr_vec2 *points,
|
|||||||
|
|
||||||
zr_uint vtx_inner_idx = (zr_uint)(index + 0);
|
zr_uint vtx_inner_idx = (zr_uint)(index + 0);
|
||||||
zr_uint vtx_outer_idx = (zr_uint)(index + 1);
|
zr_uint vtx_outer_idx = (zr_uint)(index + 1);
|
||||||
struct zr_vec2 *normals;
|
struct zr_vec2 *normals = 0;
|
||||||
zr_size size;
|
zr_size size = 0;
|
||||||
if (!vtx || !ids) return;
|
if (!vtx || !ids) return;
|
||||||
|
|
||||||
/* temporary allocate normals */
|
/* temporary allocate normals */
|
||||||
@ -2290,10 +2289,9 @@ zr_draw_list_add_poly_convex(struct zr_draw_list *list, struct zr_vec2 *points,
|
|||||||
struct zr_vec2 p0 = points[i0];
|
struct zr_vec2 p0 = points[i0];
|
||||||
struct zr_vec2 p1 = points[i1];
|
struct zr_vec2 p1 = points[i1];
|
||||||
struct zr_vec2 diff = zr_vec2_sub(p1, p0);
|
struct zr_vec2 diff = zr_vec2_sub(p1, p0);
|
||||||
zr_float len;
|
|
||||||
|
|
||||||
/* vec2 inverted lenth */
|
/* vec2 inverted lenth */
|
||||||
len = zr_vec2_len_sqr(diff);
|
zr_float len = zr_vec2_len_sqr(diff);
|
||||||
if (len != 0.0f)
|
if (len != 0.0f)
|
||||||
len = zr_inv_sqrt(len);
|
len = zr_inv_sqrt(len);
|
||||||
else len = 1.0f;
|
else len = 1.0f;
|
||||||
@ -2318,13 +2316,10 @@ zr_draw_list_add_poly_convex(struct zr_draw_list *list, struct zr_vec2 *points,
|
|||||||
}
|
}
|
||||||
dm = zr_vec2_muls(dm, AA_SIZE * 0.5f);
|
dm = zr_vec2_muls(dm, AA_SIZE * 0.5f);
|
||||||
|
|
||||||
{
|
|
||||||
/* add vertexes */
|
/* add vertexes */
|
||||||
struct zr_vec2 v = zr_vec2_sub(points[i1], dm);
|
vtx[0] = zr_draw_vertex(zr_vec2_sub(points[i1], dm), uv, col);
|
||||||
vtx[0] = zr_draw_vertex(v, uv, col);
|
vtx[1] = zr_draw_vertex(zr_vec2_add(points[i1], dm), uv, col_trans);
|
||||||
vtx[1] = zr_draw_vertex(v, uv, col_trans);
|
|
||||||
vtx += 2;
|
vtx += 2;
|
||||||
}
|
|
||||||
|
|
||||||
/* add indexes */
|
/* add indexes */
|
||||||
ids[0] = (zr_draw_index)(vtx_inner_idx+(i1<<1));
|
ids[0] = (zr_draw_index)(vtx_inner_idx+(i1<<1));
|
||||||
@ -2338,7 +2333,7 @@ zr_draw_list_add_poly_convex(struct zr_draw_list *list, struct zr_vec2 *points,
|
|||||||
/* free temporary normals + points */
|
/* free temporary normals + points */
|
||||||
zr_buffer_reset(list->vertexes, ZR_BUFFER_FRONT);
|
zr_buffer_reset(list->vertexes, ZR_BUFFER_FRONT);
|
||||||
} else {
|
} else {
|
||||||
zr_size i;
|
zr_size i = 0;
|
||||||
zr_size index = list->vertex_count;
|
zr_size index = list->vertex_count;
|
||||||
const zr_size idx_count = (points_count-2)*3;
|
const zr_size idx_count = (points_count-2)*3;
|
||||||
const zr_size vtx_count = points_count;
|
const zr_size vtx_count = points_count;
|
||||||
|
@ -1483,7 +1483,6 @@ const zr_long *zr_font_default_glyph_ranges(void);
|
|||||||
const zr_long *zr_font_chinese_glyph_ranges(void);
|
const zr_long *zr_font_chinese_glyph_ranges(void);
|
||||||
const zr_long *zr_font_cyrillic_glyph_ranges(void);
|
const zr_long *zr_font_cyrillic_glyph_ranges(void);
|
||||||
const zr_long *zr_font_korean_glyph_ranges(void);
|
const zr_long *zr_font_korean_glyph_ranges(void);
|
||||||
|
|
||||||
/* ---------------------------------------------------------------
|
/* ---------------------------------------------------------------
|
||||||
* Baking
|
* Baking
|
||||||
* ---------------------------------------------------------------*/
|
* ---------------------------------------------------------------*/
|
||||||
|
Loading…
Reference in New Issue
Block a user