diff options
Diffstat (limited to 'src/mesa/pipe/draw/draw_context.c')
-rw-r--r-- | src/mesa/pipe/draw/draw_context.c | 41 |
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 b14de341410..c15f7652a6f 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; +} + |