1524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu/* 2524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * Mesa 3-D graphics library 3524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * Version: 7.9 4524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * 5524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 6524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * Copyright (C) 2010 LunarG Inc. 7524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * 8524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a 9524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * copy of this software and associated documentation files (the "Software"), 10524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * to deal in the Software without restriction, including without limitation 11524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * and/or sell copies of the Software, and to permit persons to whom the 13524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * Software is furnished to do so, subject to the following conditions: 14524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * 15524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * The above copyright notice and this permission notice shall be included 16524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * in all copies or substantial portions of the Software. 17524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * 18524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 24524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * DEALINGS IN THE SOFTWARE. 25524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * 26524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * Authors: 27524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * Keith Whitwell <keith@tungstengraphics.com> 28524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * Chia-I Wu <olv@lunarg.com> 29524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu */ 30524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 31524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu/* these macros are optional */ 32524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#ifndef LOCAL_VARS 33d38afcd2f286e924e0f9b7f484712ac19e3f98fcChia-I Wu#define LOCAL_VARS 34524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#endif 35524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#ifndef FUNC_ENTER 36524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#define FUNC_ENTER do {} while (0) 37524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#endif 38524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#ifndef FUNC_EXIT 39524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#define FUNC_EXIT do {} while (0) 40524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#endif 41524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#ifndef LINE_ADJ 42524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#define LINE_ADJ(flags, a0, i0, i1, a1) LINE(flags, i0, i1) 43524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#endif 44524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#ifndef TRIANGLE_ADJ 45524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#define TRIANGLE_ADJ(flags, i0, a0, i1, a1, i2, a2) TRIANGLE(flags, i0, i1, i2) 46524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#endif 47524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 48524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wustatic void 49524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I WuFUNC(FUNC_VARS) 50524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu{ 51524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu unsigned idx[6], i; 52524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu ushort flags; 53d38afcd2f286e924e0f9b7f484712ac19e3f98fcChia-I Wu LOCAL_VARS 54524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 55524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu FUNC_ENTER; 56524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 57f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu /* prim, prim_flags, count, and last_vertex_last should have been defined */ 58524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (0) { 59f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu debug_printf("%s: prim 0x%x, prim_flags 0x%x, count %d, last_vertex_last %d\n", 60f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu __FUNCTION__, prim, prim_flags, count, last_vertex_last); 61524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 62524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 63524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu switch (prim) { 64524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_POINTS: 65524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i < count; i++) { 66524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = GET_ELT(i); 67524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu POINT(idx[0]); 68524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 69524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 70524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 71524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_LINES: 72524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_RESET_STIPPLE; 73524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 1 < count; i += 2) { 74524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = GET_ELT(i); 75524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = GET_ELT(i + 1); 76524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu LINE(flags, idx[0], idx[1]); 77524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 78524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 79524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 80524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_LINE_LOOP: 81524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_LINE_STRIP: 82524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (count >= 2) { 83f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu flags = (prim_flags & DRAW_SPLIT_BEFORE) ? 0 : DRAW_PIPE_RESET_STIPPLE; 84524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = GET_ELT(0); 85524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = idx[1]; 86524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 87524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 1; i < count; i++, flags = 0) { 88524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = idx[1]; 89524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = GET_ELT(i); 90524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu LINE(flags, idx[0], idx[1]); 91524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 92524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* close the loop */ 93f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu if (prim == PIPE_PRIM_LINE_LOOP && !prim_flags) 94524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu LINE(flags, idx[1], idx[2]); 95524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 96524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 97524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 98524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_TRIANGLES: 99524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_RESET_STIPPLE | DRAW_PIPE_EDGE_FLAG_ALL; 100524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 2 < count; i += 3) { 101524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = GET_ELT(i); 102524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = GET_ELT(i + 1); 103524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 104524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[0], idx[1], idx[2]); 105524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 106524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 107524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 108524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_TRIANGLE_STRIP: 109524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (count >= 3) { 110524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_RESET_STIPPLE | DRAW_PIPE_EDGE_FLAG_ALL; 111524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = GET_ELT(0); 112524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(1); 113524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 114524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (last_vertex_last) { 115524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 2 < count; i++) { 116524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = idx[1]; 117524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = idx[2]; 118524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 119524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* always emit idx[2] last */ 120524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (i & 1) 121524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[1], idx[0], idx[2]); 122524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu else 123524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[0], idx[1], idx[2]); 124524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 125524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 126524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu else { 127524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 2 < count; i++) { 128524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = idx[1]; 129524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = idx[2]; 130524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 131524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* always emit idx[0] first */ 132524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (i & 1) 133524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[0], idx[2], idx[1]); 134524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu else 135524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[0], idx[1], idx[2]); 136524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 137524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 138524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 139524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 140524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 141524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_TRIANGLE_FAN: 142524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (count >= 3) { 143524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_RESET_STIPPLE | DRAW_PIPE_EDGE_FLAG_ALL; 144524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = GET_ELT(0); 145524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(1); 146524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 147524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* idx[0] is neither the first nor the last vertex */ 148524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (last_vertex_last) { 149524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 2 < count; i++) { 150524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = idx[2]; 151524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 152524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* always emit idx[2] last */ 153524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[0], idx[1], idx[2]); 154524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 155524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 156524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu else { 157524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 2 < count; i++) { 158524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = idx[2]; 159524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 160524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* always emit idx[1] first */ 161524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[1], idx[2], idx[0]); 162524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 163524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 164524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 165524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 166524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 167524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_QUADS: 168524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (last_vertex_last) { 169524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 3 < count; i += 4) { 170524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = GET_ELT(i); 171524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = GET_ELT(i + 1); 172524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 173524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(i + 3); 174524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 175524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_RESET_STIPPLE | 176524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_0 | 177524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_2; 178524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* always emit idx[3] last */ 179524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[0], idx[1], idx[3]); 180524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 181524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_EDGE_FLAG_0 | 182524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_1; 183524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[1], idx[2], idx[3]); 184524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 185524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 186524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu else { 187524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 3 < count; i += 4) { 188524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = GET_ELT(i); 189524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = GET_ELT(i + 1); 190524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 191524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(i + 3); 192524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 193524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_RESET_STIPPLE | 194524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_0 | 195524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_1; 1968b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller /* always emit idx[3] / idx[0] first */ 1978b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller if (quads_flatshade_last) 1988b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller TRIANGLE(flags, idx[3], idx[0], idx[1]); 1998b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller else 2008b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller TRIANGLE(flags, idx[0], idx[1], idx[2]); 201524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 202524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_EDGE_FLAG_1 | 203524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_2; 2048b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller if (quads_flatshade_last) 2058b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller TRIANGLE(flags, idx[3], idx[1], idx[2]); 2068b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller else 2078b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller TRIANGLE(flags, idx[0], idx[2], idx[3]); 208524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 209524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 210524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 211524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 212524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_QUAD_STRIP: 213524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (count >= 4) { 214524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(0); 215524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(1); 216524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 217524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (last_vertex_last) { 218524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 3 < count; i += 2) { 219524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = idx[2]; 220524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = idx[3]; 221524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 222524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(i + 3); 223524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 224524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* always emit idx[3] last */ 225524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_RESET_STIPPLE | 226524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_0 | 227524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_2; 228524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[2], idx[0], idx[3]); 229524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 230524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_EDGE_FLAG_0 | 231524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_1; 232524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[0], idx[1], idx[3]); 233524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 234524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 235524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu else { 236524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 3 < count; i += 2) { 237524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = idx[2]; 238524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = idx[3]; 239524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 240524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(i + 3); 241524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 242524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_RESET_STIPPLE | 243524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_0 | 244524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_1; 2458b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller /* always emit idx[3] / idx[0 first */ 2468b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller if (quads_flatshade_last) 2478b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller TRIANGLE(flags, idx[3], idx[2], idx[0]); 2488b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller else 2498b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller TRIANGLE(flags, idx[0], idx[3], idx[2]); 250524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 251524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_EDGE_FLAG_1 | 252524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_2; 2538b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller if (quads_flatshade_last) 2548b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller TRIANGLE(flags, idx[3], idx[0], idx[1]); 2558b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller else 2568b4f7b0672d663273310fffa9490ad996f5b914aChristoph Bumiller TRIANGLE(flags, idx[0], idx[1], idx[3]); 257524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 258524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 259524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 260524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 261524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 262524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_POLYGON: 263524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (count >= 3) { 264524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu ushort edge_next, edge_finish; 265524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 266524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (last_vertex_last) { 267524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = (DRAW_PIPE_RESET_STIPPLE | 268524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_0); 269f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu if (!(prim_flags & DRAW_SPLIT_BEFORE)) 2709271059b361128070c68b3d1a7982b4f9f151546Chia-I Wu flags |= DRAW_PIPE_EDGE_FLAG_2; 271f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu 272524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu edge_next = DRAW_PIPE_EDGE_FLAG_0; 273f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu edge_finish = 274f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu (prim_flags & DRAW_SPLIT_AFTER) ? 0 : DRAW_PIPE_EDGE_FLAG_1; 275524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 276524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu else { 277524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = (DRAW_PIPE_RESET_STIPPLE | 278524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu DRAW_PIPE_EDGE_FLAG_1); 279f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu if (!(prim_flags & DRAW_SPLIT_BEFORE)) 280f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu flags |= DRAW_PIPE_EDGE_FLAG_0; 281f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu 282524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu edge_next = DRAW_PIPE_EDGE_FLAG_1; 283f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu edge_finish = 284f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu (prim_flags & DRAW_SPLIT_AFTER) ? 0 : DRAW_PIPE_EDGE_FLAG_2; 285524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 286524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 287524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = GET_ELT(0); 288524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(1); 289524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 290524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 2 < count; i++, flags = edge_next) { 291524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = idx[2]; 292524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 293524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 294524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (i + 3 == count) 295524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags |= edge_finish; 296524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 297524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* idx[0] is both the first and the last vertex */ 298524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (last_vertex_last) 299524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[1], idx[2], idx[0]); 300524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu else 301524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE(flags, idx[0], idx[1], idx[2]); 302524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 303524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 304524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 305524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 306524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_LINES_ADJACENCY: 307524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_RESET_STIPPLE; 308524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 3 < count; i += 4) { 309524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = GET_ELT(i); 310524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = GET_ELT(i + 1); 311524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 312524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(i + 3); 313524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu LINE_ADJ(flags, idx[0], idx[1], idx[2], idx[3]); 314524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 315524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 316524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 317524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_LINE_STRIP_ADJACENCY: 318524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (count >= 4) { 319f141abdc8fdbff41e16b0ce53fa3fa8fba32a7f9Chia-I Wu flags = (prim_flags & DRAW_SPLIT_BEFORE) ? 0 : DRAW_PIPE_RESET_STIPPLE; 320524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = GET_ELT(0); 321524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(1); 322524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(2); 323524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 324524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 1; i + 2 < count; i++, flags = 0) { 325524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = idx[1]; 326524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = idx[2]; 327524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = idx[3]; 328524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(i + 2); 329524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu LINE_ADJ(flags, idx[0], idx[1], idx[2], idx[3]); 330524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 331524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 332524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 333524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 334524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_TRIANGLES_ADJACENCY: 335524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_RESET_STIPPLE | DRAW_PIPE_EDGE_FLAG_ALL; 336524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 5 < count; i += 6) { 337524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = GET_ELT(i); 338524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = GET_ELT(i + 1); 339524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(i + 2); 340524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(i + 3); 341524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[4] = GET_ELT(i + 4); 342524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[5] = GET_ELT(i + 5); 343524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE_ADJ(flags, idx[0], idx[1], idx[2], idx[3], idx[4], idx[5]); 344524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 345524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 346524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 347524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY: 348524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (count >= 6) { 349524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu flags = DRAW_PIPE_RESET_STIPPLE | DRAW_PIPE_EDGE_FLAG_ALL; 350524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = GET_ELT(1); 351524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = GET_ELT(0); 352524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[4] = GET_ELT(2); 353524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(4); 354524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 355524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* 356524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * The vertices of the i-th triangle are stored in 357524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * idx[0,2,4] = { 2*i, 2*i+2, 2*i+4 }; 358524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * 359524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * The adjacent vertices are stored in 360524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * idx[1,3,5] = { 2*i-2, 2*i+6, 2*i+3 }. 361524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * 362524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * However, there are two exceptions: 363524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * 364524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * For the first triangle, idx[1] = 1; 365524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * For the last triangle, idx[3] = 2*i+5. 366524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu */ 367524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (last_vertex_last) { 368524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 5 < count; i += 2) { 369524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = idx[0]; 370524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 371524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = idx[2]; 372524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = idx[4]; 373524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[4] = idx[3]; 374524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 375524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(i + ((i + 7 < count) ? 6 : 5)); 376524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[5] = GET_ELT(i + 3); 377524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 378524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* 379524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * alternate the first two vertices (idx[0] and idx[2]) and the 380524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * corresponding adjacent vertices (idx[3] and idx[5]) to have 381524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * the correct orientation 382524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu */ 383524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (i & 2) { 384524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE_ADJ(flags, 385524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2], idx[1], idx[0], idx[5], idx[4], idx[3]); 386524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 387524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu else { 388524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE_ADJ(flags, 389524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0], idx[1], idx[2], idx[3], idx[4], idx[5]); 390524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 391524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 392524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 393524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu else { 394524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu for (i = 0; i + 5 < count; i += 2) { 395524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[1] = idx[0]; 396524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 397524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0] = idx[2]; 398524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[2] = idx[4]; 399524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[4] = idx[3]; 400524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 401524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[3] = GET_ELT(i + ((i + 7 < count) ? 6 : 5)); 402524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[5] = GET_ELT(i + 3); 403524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 404524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu /* 405524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * alternate the last two vertices (idx[2] and idx[4]) and the 406524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * corresponding adjacent vertices (idx[1] and idx[5]) to have 407524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu * the correct orientation 408524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu */ 409524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu if (i & 2) { 410524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE_ADJ(flags, 411524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0], idx[5], idx[4], idx[3], idx[2], idx[1]); 412524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 413524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu else { 414524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu TRIANGLE_ADJ(flags, 415524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu idx[0], idx[1], idx[2], idx[3], idx[4], idx[5]); 416524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 417524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 418524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 419524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 420524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 421524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 422524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu default: 423524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu assert(0); 424524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu break; 425524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu } 426524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 427524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu FUNC_EXIT; 428524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu} 429524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 430524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#undef LOCAL_VARS 431524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#undef FUNC_ENTER 432524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#undef FUNC_EXIT 433524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#undef LINE_ADJ 434524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#undef TRIANGLE_ADJ 435524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu 436524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#undef FUNC 437524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#undef FUNC_VARS 438524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#undef GET_ELT 439524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#undef POINT 440524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#undef LINE 441524b2626c2d018f330ae7423c858ef73ea0424b5Chia-I Wu#undef TRIANGLE 442