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