summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/draw/draw_context.c
diff options
context:
space:
mode:
authorBrian <brian.paul@tungstengraphics.com>2007-08-30 16:37:56 -0600
committerBrian <brian.paul@tungstengraphics.com>2007-08-30 16:37:56 -0600
commit963b8a74493a474560447080b23407bfe4c707c5 (patch)
treec6543db1fc959a433ee7487f2dcc68d947193b2b /src/mesa/pipe/draw/draw_context.c
parentc9e133eab450870c8804e1d3d1e7a44f509454a0 (diff)
Remove dependency on TGSI_ATTRIB_x tokens in draw_twoside.c
Added a new draw_set_twoside_attributes() function for specifying which vertex attributes are to be copied/replaced when a polygon is back-facing.
Diffstat (limited to 'src/mesa/pipe/draw/draw_context.c')
-rw-r--r--src/mesa/pipe/draw/draw_context.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/mesa/pipe/draw/draw_context.c b/src/mesa/pipe/draw/draw_context.c
index b14de34141..c15f7652a6 100644
--- a/src/mesa/pipe/draw/draw_context.c
+++ b/src/mesa/pipe/draw/draw_context.c
@@ -67,6 +67,11 @@ struct draw_context *draw_create( void )
draw->vcache.vertex[i] = (struct vertex_header *)(tmp + i * MAX_VERTEX_SIZE);
}
+ draw->attrib_front0 = -1;
+ draw->attrib_back0 = -1;
+ draw->attrib_front1 = -1;
+ draw->attrib_back1 = -1;
+
return draw;
}
@@ -210,3 +215,39 @@ draw_set_vertex_shader(struct draw_context *draw,
{
draw->vertex_shader = *shader;
}
+
+
+/**
+ * This function is used to tell the draw module about attributes
+ * (like colors) that need to be selected based on front/back face
+ * orientation.
+ *
+ * The logic is:
+ * if (polygon is back-facing) {
+ * vertex->attrib[front0] = vertex->attrib[back0];
+ * vertex->attrib[front1] = vertex->attrib[back1];
+ * }
+ *
+ * \param front0 first attrib to replace if the polygon is back-facing
+ * \param back0 first attrib to copy if the polygon is back-facing
+ * \param front1 second attrib to replace if the polygon is back-facing
+ * \param back1 second attrib to copy if the polygon is back-facing
+ *
+ * Pass -1 to disable two-sided attributes.
+ */
+void
+draw_set_twoside_attributes(struct draw_context *draw,
+ uint front0, uint back0,
+ uint front1, uint back1)
+{
+ /* XXX we could alternately pass an array of front/back attribs if there's
+ * ever need for more than two. One could imagine a shader extension
+ * that allows arbitrary attributes to be selected based on polygon
+ * orientation...
+ */
+ draw->attrib_front0 = front0;
+ draw->attrib_back0 = back0;
+ draw->attrib_front1 = front1;
+ draw->attrib_back1 = back1;
+}
+