Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2018-05-19 14:09:47 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-05-20 20:14:22 +0300
commit883cb583550596e0c2e3b809ec8de059d0b053ad (patch)
treeabbcabb0d474185a7b6b4f6a45fa8bf045ebd624 /intern/gawain
parent4308602d6a6f9890f6145cacff681e3c3b91815d (diff)
GWN: Add Line Adjacency primitive support.
Diffstat (limited to 'intern/gawain')
-rw-r--r--intern/gawain/gawain/gwn_element.h1
-rw-r--r--intern/gawain/gawain/gwn_primitive.h1
-rw-r--r--intern/gawain/src/gwn_element.c16
-rw-r--r--intern/gawain/src/gwn_primitive.c2
4 files changed, 20 insertions, 0 deletions
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,
};