From 883cb583550596e0c2e3b809ec8de059d0b053ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Sat, 19 May 2018 13:09:47 +0200 Subject: GWN: Add Line Adjacency primitive support. --- intern/gawain/gawain/gwn_element.h | 1 + intern/gawain/gawain/gwn_primitive.h | 1 + intern/gawain/src/gwn_element.c | 16 ++++++++++++++++ intern/gawain/src/gwn_primitive.c | 2 ++ 4 files changed, 20 insertions(+) (limited to 'intern/gawain') diff --git a/intern/gawain/gawain/gwn_element.h b/intern/gawain/gawain/gwn_element.h index 7a28ab183f8..a80da71e0e8 100644 --- a/intern/gawain/gawain/gwn_element.h +++ b/intern/gawain/gawain/gwn_element.h @@ -61,6 +61,7 @@ void GWN_indexbuf_add_primitive_restart(Gwn_IndexBufBuilder*); void GWN_indexbuf_add_point_vert(Gwn_IndexBufBuilder*, unsigned v); void GWN_indexbuf_add_line_verts(Gwn_IndexBufBuilder*, unsigned v1, unsigned v2); void GWN_indexbuf_add_tri_verts(Gwn_IndexBufBuilder*, unsigned v1, unsigned v2, unsigned v3); +void GWN_indexbuf_add_line_adj_verts(Gwn_IndexBufBuilder*, unsigned v1, unsigned v2, unsigned v3, unsigned v4); Gwn_IndexBuf* GWN_indexbuf_build(Gwn_IndexBufBuilder*); void GWN_indexbuf_build_in_place(Gwn_IndexBufBuilder*, Gwn_IndexBuf*); diff --git a/intern/gawain/gawain/gwn_primitive.h b/intern/gawain/gawain/gwn_primitive.h index efcc67243ad..3359b3582bb 100644 --- a/intern/gawain/gawain/gwn_primitive.h +++ b/intern/gawain/gawain/gwn_primitive.h @@ -22,6 +22,7 @@ typedef enum { GWN_PRIM_TRI_STRIP, GWN_PRIM_TRI_FAN, + GWN_PRIM_LINES_ADJ, GWN_PRIM_TRIS_ADJ, GWN_PRIM_LINE_STRIP_ADJ, diff --git a/intern/gawain/src/gwn_element.c b/intern/gawain/src/gwn_element.c index c56516817d6..e2fbb657c78 100644 --- a/intern/gawain/src/gwn_element.c +++ b/intern/gawain/src/gwn_element.c @@ -63,6 +63,9 @@ void GWN_indexbuf_init(Gwn_IndexBufBuilder* builder, Gwn_PrimType prim_type, uns case GWN_PRIM_TRIS: verts_per_prim = 3; break; + case GWN_PRIM_LINES_ADJ: + verts_per_prim = 4; + break; default: #if TRUST_NO_ONE assert(false); @@ -127,6 +130,19 @@ void GWN_indexbuf_add_tri_verts(Gwn_IndexBufBuilder* builder, unsigned v1, unsig GWN_indexbuf_add_generic_vert(builder, v3); } +void GWN_indexbuf_add_line_adj_verts(Gwn_IndexBufBuilder* builder, unsigned v1, unsigned v2, unsigned v3, unsigned v4) + { +#if TRUST_NO_ONE + assert(builder->prim_type == GWN_PRIM_LINES_ADJ); + assert(v2 != v3); /* only the line need diff indices */ +#endif + + GWN_indexbuf_add_generic_vert(builder, v1); + GWN_indexbuf_add_generic_vert(builder, v2); + GWN_indexbuf_add_generic_vert(builder, v3); + GWN_indexbuf_add_generic_vert(builder, v4); + } + #if GWN_TRACK_INDEX_RANGE // Everything remains 32 bit while building to keep things simple. // Find min/max after, then convert to smallest index type possible. diff --git a/intern/gawain/src/gwn_primitive.c b/intern/gawain/src/gwn_primitive.c index 8ec2a102df1..c2638bcc8c8 100644 --- a/intern/gawain/src/gwn_primitive.c +++ b/intern/gawain/src/gwn_primitive.c @@ -24,6 +24,7 @@ Gwn_PrimClass GWN_primtype_class(Gwn_PrimType prim_type) [GWN_PRIM_TRI_STRIP] = GWN_PRIM_CLASS_SURFACE, [GWN_PRIM_TRI_FAN] = GWN_PRIM_CLASS_SURFACE, + [GWN_PRIM_LINES_ADJ] = GWN_PRIM_CLASS_LINE, [GWN_PRIM_LINE_STRIP_ADJ] = GWN_PRIM_CLASS_LINE, [GWN_PRIM_TRIS_ADJ] = GWN_PRIM_CLASS_SURFACE, @@ -57,6 +58,7 @@ GLenum convert_prim_type_to_gl(Gwn_PrimType prim_type) [GWN_PRIM_TRI_STRIP] = GL_TRIANGLE_STRIP, [GWN_PRIM_TRI_FAN] = GL_TRIANGLE_FAN, + [GWN_PRIM_LINES_ADJ] = GL_LINES_ADJACENCY, [GWN_PRIM_LINE_STRIP_ADJ] = GL_LINE_STRIP_ADJACENCY, [GWN_PRIM_TRIS_ADJ] = GL_TRIANGLES_ADJACENCY, }; -- cgit v1.2.3