ss_triangle.c revision 1182ffeec39bf419928ba862c225e80a439fee7a
1fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse/* $Id: ss_triangle.c,v 1.14 2001/07/12 22:09:21 keithw Exp $ */ 2fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse 3fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse/* 4fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * Mesa 3-D graphics library 5fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * Version: 3.5 6fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * 7fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. 8fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * 9fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * Permission is hereby granted, free of charge, to any person obtaining a 10fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * copy of this software and associated documentation files (the "Software"), 11fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * to deal in the Software without restriction, including without limitation 12fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * the rights to use, copy, modify, merge, publish, distribute, sublicense, 13fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * and/or sell copies of the Software, and to permit persons to whom the 14fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * Software is furnished to do so, subject to the following conditions: 15fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * 16fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * The above copyright notice and this permission notice shall be included 17fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * in all copies or substantial portions of the Software. 18fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * 19fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 23330b6c85c961b32f704ce8ec7dbf8cb7fc0b80a8Marek Olšák * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 24555c8d500a4a09445a892316610a428d408318edMarek Olšák * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25330b6c85c961b32f704ce8ec7dbf8cb7fc0b80a8Marek Olšák * 26fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse * Authors: 27330b6c85c961b32f704ce8ec7dbf8cb7fc0b80a8Marek Olšák * Keith Whitwell <keithw@valinux.com> 288fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch */ 298fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch 308fb7f1a8a4cbab5365491b4b41e50ff3f03306c8Kai Wasserbäch#include "glheader.h" 31d1cc87c0b64c2221b079015a6c3b593af83f0758Dave Airlie#include "colormac.h" 323fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#include "macros.h" 333fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#include "mtypes.h" 343fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 353fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#include "tnl/t_context.h" 363fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 373fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#include "ss_triangle.h" 383fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#include "ss_context.h" 393fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 403fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define SS_RGBA_BIT 0x1 413fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define SS_OFFSET_BIT 0x2 423fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define SS_TWOSIDE_BIT 0x4 433fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define SS_UNFILLED_BIT 0x8 443fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define SS_MAX_TRIFUNC 0x10 453fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 463fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeetstatic triangle_func tri_tab[SS_MAX_TRIFUNC]; 473fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeetstatic quad_func quad_tab[SS_MAX_TRIFUNC]; 483fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 493fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 503fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeetstatic void _swsetup_render_line_tri( GLcontext *ctx, 513fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet GLuint e0, GLuint e1, GLuint e2 ) 523fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet{ 533fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet SScontext *swsetup = SWSETUP_CONTEXT(ctx); 543fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; 553fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet GLubyte *ef = VB->EdgeFlag; 563fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet SWvertex *verts = swsetup->verts; 573fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet SWvertex *v0 = &verts[e0]; 583fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet SWvertex *v1 = &verts[e1]; 593fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet SWvertex *v2 = &verts[e2]; 603fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet GLchan c[2][4]; 613fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet GLchan s[2][4]; 623fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet GLuint i[2]; 633fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 643fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ctx->_TriangleCaps & DD_FLATSHADE) { 653fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(c[0], v0->color); 663fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(c[1], v1->color); 673fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(s[0], v0->specular); 683fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(s[1], v1->specular); 693fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet i[0] = v0->index; 703fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet i[1] = v1->index; 713fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 723fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v0->color, v2->color); 733fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v1->color, v2->color); 743fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v0->specular, v2->specular); 753fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v1->specular, v2->specular); 763fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet v0->index = v2->index; 773fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet v1->index = v2->index; 783fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet } 793fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 803fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (swsetup->render_prim == GL_POLYGON) { 813fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ef[e2]) _swrast_Line( ctx, v2, v0 ); 823fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ef[e0]) _swrast_Line( ctx, v0, v1 ); 833fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ef[e1]) _swrast_Line( ctx, v1, v2 ); 843fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet } else { 853fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ef[e0]) _swrast_Line( ctx, v0, v1 ); 863fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ef[e1]) _swrast_Line( ctx, v1, v2 ); 873fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ef[e2]) _swrast_Line( ctx, v2, v0 ); 883fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet } 893fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 903fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ctx->_TriangleCaps & DD_FLATSHADE) { 913fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v0->color, c[0]); 923fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v1->color, c[1]); 933fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v0->specular, s[0]); 943fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v1->specular, s[1]); 953fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet v0->index = i[0]; 963fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet v1->index = i[1]; 973fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet } 983fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet} 993fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 1003fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeetstatic void _swsetup_render_point_tri( GLcontext *ctx, 1013fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet GLuint e0, GLuint e1, GLuint e2 ) 1023fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet{ 1038698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák SScontext *swsetup = SWSETUP_CONTEXT(ctx); 1043fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; 1053fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet GLubyte *ef = VB->EdgeFlag; 1063fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet SWvertex *verts = swsetup->verts; 1073fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet SWvertex *v0 = &verts[e0]; 1083fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet SWvertex *v1 = &verts[e1]; 1093fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet SWvertex *v2 = &verts[e2]; 1103fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet GLchan c[2][4]; 1113fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet GLchan s[2][4]; 1123fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet GLuint i[2]; 1138698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák 1148698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák if (ctx->_TriangleCaps & DD_FLATSHADE) { 1153fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(c[0], v0->color); 1168698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák COPY_CHAN4(c[1], v1->color); 1178698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák COPY_CHAN4(s[0], v0->specular); 1183fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(s[1], v1->specular); 1193fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet i[0] = v0->index; 1203fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet i[1] = v1->index; 121eb44c36df842af010269eda1be77c4aea8ebe736Dave Airlie 1223fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v0->color, v2->color); 1233fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v1->color, v2->color); 1243fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v0->specular, v2->specular); 1253fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet COPY_CHAN4(v1->specular, v2->specular); 1263fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet v0->index = v2->index; 1273fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet v1->index = v2->index; 1283fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet } 1293fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 1303fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ef[e0]) _swrast_Point( ctx, v0 ); 1313fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ef[e1]) _swrast_Point( ctx, v1 ); 1323fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ef[e2]) _swrast_Point( ctx, v2 ); 133866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie 1343fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet if (ctx->_TriangleCaps & DD_FLATSHADE) { 13589954723bfeef59d055d2332ff112f0204b48130Marek Olšák COPY_CHAN4(v0->color, c[0]); 13689954723bfeef59d055d2332ff112f0204b48130Marek Olšák COPY_CHAN4(v1->color, c[1]); 137866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie COPY_CHAN4(v0->specular, s[0]); 13889954723bfeef59d055d2332ff112f0204b48130Marek Olšák COPY_CHAN4(v1->specular, s[1]); 1393fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet v0->index = i[0]; 1403fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet v1->index = i[1]; 1413fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet } 1423fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet} 1433fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 1443fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define SS_COLOR(a,b) UNCLAMPED_FLOAT_TO_RGBA_CHAN(a,b) 1453fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define SS_SPEC(a,b) UNCLAMPED_FLOAT_TO_RGB_CHAN(a,b) 1463fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define SS_IND(a,b) (a = b) 1473fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 1483fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define IND (0) 149ac35ded4733883037316d556af596524e5e02535Marek Olšák#define TAG(x) x 1503fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#include "ss_tritmp.h" 151ac35ded4733883037316d556af596524e5e02535Marek Olšák 1523fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define IND (SS_OFFSET_BIT) 1533fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define TAG(x) x##_offset 1543fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#include "ss_tritmp.h" 1553fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet 1563fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define IND (SS_TWOSIDE_BIT) 1573fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#define TAG(x) x##_twoside 1583fccc14b2fb35aef95bc04dee46e280a48679299Henri Verbeet#include "ss_tritmp.h" 159fd266ec62ca772a8551d2d7922d718d9d84bdf07Jerome Glisse 16018cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#define IND (SS_OFFSET_BIT|SS_TWOSIDE_BIT) 16118cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#define TAG(x) x##_offset_twoside 16218cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#include "ss_tritmp.h" 16318cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet 16418cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#define IND (SS_UNFILLED_BIT) 16518cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#define TAG(x) x##_unfilled 1668698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák#include "ss_tritmp.h" 16718cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet 16818cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#define IND (SS_OFFSET_BIT|SS_UNFILLED_BIT) 16918cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#define TAG(x) x##_offset_unfilled 17018cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#include "ss_tritmp.h" 17118cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet 17218cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#define IND (SS_TWOSIDE_BIT|SS_UNFILLED_BIT) 17318cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#define TAG(x) x##_twoside_unfilled 17418cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#include "ss_tritmp.h" 17518cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet 17618cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#define IND (SS_OFFSET_BIT|SS_TWOSIDE_BIT|SS_UNFILLED_BIT) 1778698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák#define TAG(x) x##_offset_twoside_unfilled 17896ed6c90eff58ce030c39c2b4db6daf512586b34Marek Olšák#include "ss_tritmp.h" 1798698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák 180c2e9dd0276464ed61d48d3d80b9be8228767dfe2Marek Olšák#define IND (0|SS_RGBA_BIT) 181c2e9dd0276464ed61d48d3d80b9be8228767dfe2Marek Olšák#define TAG(x) x##_rgba 182d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák#include "ss_tritmp.h" 183c2e9dd0276464ed61d48d3d80b9be8228767dfe2Marek Olšák 1848698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák#define IND (SS_OFFSET_BIT|SS_RGBA_BIT) 1858698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák#define TAG(x) x##_offset_rgba 186df5e2c058f73b72909fa99a2a189f5877525e3bfMarek Olšák#include "ss_tritmp.h" 187fc887d687b0598e09de76be885652d96e20ae07eMarek Olšák 188fc887d687b0598e09de76be885652d96e20ae07eMarek Olšák#define IND (SS_TWOSIDE_BIT|SS_RGBA_BIT) 189df5e2c058f73b72909fa99a2a189f5877525e3bfMarek Olšák#define TAG(x) x##_twoside_rgba 190df5e2c058f73b72909fa99a2a189f5877525e3bfMarek Olšák#include "ss_tritmp.h" 1918698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák 1928698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák#define IND (SS_OFFSET_BIT|SS_TWOSIDE_BIT|SS_RGBA_BIT) 1938698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák#define TAG(x) x##_offset_twoside_rgba 1948698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák#include "ss_tritmp.h" 1958698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák 1968698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák#define IND (SS_UNFILLED_BIT|SS_RGBA_BIT) 1978698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák#define TAG(x) x##_unfilled_rgba 1988698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák#include "ss_tritmp.h" 1998698a3b85dd89c5d2fa473e7942b7dc8d25f3c8fMarek Olšák 20018cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#define IND (SS_OFFSET_BIT|SS_UNFILLED_BIT|SS_RGBA_BIT) 2016a250877eaea932e2bddd35ba694e4dc38cc57ccMarek Olšák#define TAG(x) x##_offset_unfilled_rgba 2026a250877eaea932e2bddd35ba694e4dc38cc57ccMarek Olšák#include "ss_tritmp.h" 2036a250877eaea932e2bddd35ba694e4dc38cc57ccMarek Olšák 2046a250877eaea932e2bddd35ba694e4dc38cc57ccMarek Olšák#define IND (SS_TWOSIDE_BIT|SS_UNFILLED_BIT|SS_RGBA_BIT) 2056a250877eaea932e2bddd35ba694e4dc38cc57ccMarek Olšák#define TAG(x) x##_twoside_unfilled_rgba 2066a250877eaea932e2bddd35ba694e4dc38cc57ccMarek Olšák#include "ss_tritmp.h" 2076a250877eaea932e2bddd35ba694e4dc38cc57ccMarek Olšák 2086a250877eaea932e2bddd35ba694e4dc38cc57ccMarek Olšák#define IND (SS_OFFSET_BIT|SS_TWOSIDE_BIT|SS_UNFILLED_BIT|SS_RGBA_BIT) 20918cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#define TAG(x) x##_offset_twoside_unfilled_rgba 21018cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet#include "ss_tritmp.h" 21118cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet 21218cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet 21318cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeetvoid _swsetup_trifuncs_init( GLcontext *ctx ) 214770719eb821f96688c7efa12dc42805590f984efMarek Olšák{ 215770719eb821f96688c7efa12dc42805590f984efMarek Olšák (void) ctx; 216ac35ded4733883037316d556af596524e5e02535Marek Olšák 21718cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init(); 21818cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_offset(); 21918cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_twoside(); 22018cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_offset_twoside(); 22118cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_unfilled(); 222770719eb821f96688c7efa12dc42805590f984efMarek Olšák init_offset_unfilled(); 223770719eb821f96688c7efa12dc42805590f984efMarek Olšák init_twoside_unfilled(); 224770719eb821f96688c7efa12dc42805590f984efMarek Olšák init_offset_twoside_unfilled(); 22518cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet 22618cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_rgba(); 22718cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_offset_rgba(); 22818cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_twoside_rgba(); 22918cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_offset_twoside_rgba(); 23018cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_unfilled_rgba(); 23118cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_offset_unfilled_rgba(); 23218cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_twoside_unfilled_rgba(); 23318cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet init_offset_twoside_unfilled_rgba(); 23418cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet} 23518cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet 23618cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet 23718cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeetstatic void swsetup_points( GLcontext *ctx, GLuint first, GLuint last ) 23818cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet{ 23918cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; 24018cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet SWvertex *verts = SWSETUP_CONTEXT(ctx)->verts; 24118cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet GLuint i; 24218cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet 24318cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet if (VB->Elts) { 24418cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet for (i = first; i < last; i++) 245ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák if (VB->ClipMask[VB->Elts[i]] == 0) 2460b841b0349d7aca218eac4e9d9b7b1406ad71944Jerome Glisse _swrast_Point( ctx, &verts[VB->Elts[i]] ); 247d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák } 248ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák else { 249ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák for (i = first; i < last; i++) 250ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák if (VB->ClipMask[i] == 0) 251ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák _swrast_Point( ctx, &verts[i] ); 252ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák } 253ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák} 254ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák 255ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšákstatic void swsetup_line( GLcontext *ctx, GLuint v0, GLuint v1 ) 256ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák{ 257ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák SWvertex *verts = SWSETUP_CONTEXT(ctx)->verts; 258ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák _swrast_Line( ctx, &verts[v0], &verts[v1] ); 259ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák} 260ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák 2610b841b0349d7aca218eac4e9d9b7b1406ad71944Jerome Glisse 262ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšák 263ab075de53baa9829780cc133e5ac06e5498a763cMarek Olšákvoid _swsetup_choose_trifuncs( GLcontext *ctx ) 264d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák{ 265d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák TNLcontext *tnl = TNL_CONTEXT(ctx); 266d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák GLuint ind = 0; 267d5b23dfc1c07f98afe749053b9cb4b69829fe3d4Marek Olšák 2680b841b0349d7aca218eac4e9d9b7b1406ad71944Jerome Glisse if (ctx->Polygon._OffsetAny) 2690b841b0349d7aca218eac4e9d9b7b1406ad71944Jerome Glisse ind |= SS_OFFSET_BIT; 270faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák 271faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák if (ctx->Light.Enabled && ctx->Light.Model.TwoSide) 272faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák ind |= SS_TWOSIDE_BIT; 273faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák 274faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák if (ctx->_TriangleCaps & DD_TRI_UNFILLED) 275faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák ind |= SS_UNFILLED_BIT; 276faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák 277faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák if (ctx->Visual.rgbMode) 278faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák ind |= SS_RGBA_BIT; 279faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák 280faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák tnl->Driver.Render.Triangle = tri_tab[ind]; 281faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák tnl->Driver.Render.Quad = quad_tab[ind]; 282faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák tnl->Driver.Render.Line = swsetup_line; 283faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák tnl->Driver.Render.Points = swsetup_points; 284faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák} 285faaba52aedf9807ced2ddfccc4133589a7bacd5fMarek Olšák