1 /* 2 * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) 3 * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice including the dates of first publication and 13 * either this permission notice or a reference to 14 * http://oss.sgi.com/projects/FreeB/ 15 * shall be included in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 22 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 * SOFTWARE. 24 * 25 * Except as contained in this notice, the name of Silicon Graphics, Inc. 26 * shall not be used in advertising or otherwise to promote the sale, use or 27 * other dealings in this Software without prior written authorization from 28 * Silicon Graphics, Inc. 29 */ 30 /* 31 */ 32 33 /*we do not use the constans GL_... so that this file is independent of 34 *<GL/gl.h> 35 */ 36 37 #ifndef _PRIMITIVE_STREAM_H 38 #define _PRIMITIVE_STREAM_H 39 40 enum {PRIMITIVE_STREAM_FAN, PRIMITIVE_STREAM_STRIP}; 41 42 #include "definitions.h" 43 44 class primStream { 45 Int *lengths; /*length[i]=number of vertices of ith primitive*/ 46 Int *types; /*each primive has a type: FAN or STREAM*/ 47 Real *vertices; /*the size >= 2 * num_vertices, each vertex (u,v)*/ 48 49 /*the following size information are used for dynamic arrays*/ 50 Int index_lengths; /*the current available entry*/ 51 Int size_lengths; /*the allocated size of the array: lengths*/ 52 Int index_vertices; 53 Int size_vertices; 54 55 /*the vertex is inserted one by one. counter is used to 56 *count the number of vertices which have been inserted so far in 57 *the current primitive 58 */ 59 Int counter; 60 61 public: 62 primStream(Int sizeLengths, Int sizeVertices); 63 ~primStream(); 64 get_n_prims()65 Int get_n_prims() //num of primitives 66 { 67 return index_lengths; 68 } get_type(Int i)69 Int get_type(Int i) //the type of ith primitive 70 { 71 return types[i]; 72 } get_length(Int i)73 Int get_length(Int i) //the length of the ith primitive 74 { 75 return lengths[i]; 76 } get_vertices()77 Real* get_vertices() {return vertices;} 78 79 /*the begining of inserting a new primitive. 80 *reset counter to be 0. 81 */ 82 void begin(); 83 void insert(Real u, Real v); insert(Real v[2])84 void insert(Real v[2]) {insert(v[0], v[1]);} 85 void end(Int type); 86 87 Int num_triangles(); 88 triangle(Real A[2],Real B[2],Real C[2])89 void triangle(Real A[2], Real B[2], Real C[2]) 90 { 91 begin(); 92 insert(A); 93 insert(B); 94 insert(C); 95 end(PRIMITIVE_STREAM_FAN); 96 } 97 void print(); 98 void draw(); /*using GL to draw the primitives*/ 99 }; 100 101 102 103 104 105 106 107 108 #endif 109 110