1 /* $Id: vb.h,v 1.12 1997/08/13 02:07:17 brianp Exp $ */ 2 3 /* 4 * Mesa 3-D graphics library 5 * Version: 2.4 6 * Copyright (C) 1995-1997 Brian Paul 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Library General Public 10 * License as published by the Free Software Foundation; either 11 * version 2 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Library General Public License for more details. 17 * 18 * You should have received a copy of the GNU Library General Public 19 * License along with this library; if not, write to the Free 20 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 21 */ 22 23 24 /* 25 * $Log: vb.h,v $ 26 * Revision 1.12 1997/08/13 02:07:17 brianp 27 * set VB_MAX to 72 is using Glide for better performance (David Bucciarelli) 28 * 29 * Revision 1.11 1997/06/21 21:30:59 brianp 30 * updated many comments 31 * 32 * Revision 1.10 1997/06/20 02:08:23 brianp 33 * changed color components from GLfixed to GLubyte 34 * 35 * Revision 1.9 1997/05/09 22:41:55 brianp 36 * replaced gl_init_vb() with gl_alloc_vb() 37 * 38 * Revision 1.8 1997/04/24 00:29:36 brianp 39 * added TexCoordSize 40 * 41 * Revision 1.7 1997/04/20 15:59:30 brianp 42 * removed VERTEX2_BIT stuff 43 * 44 * Revision 1.6 1997/04/12 16:21:35 brianp 45 * added CLIP_* flags and gl_init_vb() 46 * 47 * Revision 1.5 1997/04/07 02:59:59 brianp 48 * added VertexSizeMask 49 * 50 * Revision 1.4 1997/04/02 03:13:12 brianp 51 * removed Unclipped[], added ClipMask[], ClipOrMask, ClipAndMask 52 * 53 * Revision 1.3 1996/12/18 19:59:44 brianp 54 * removed the material bitmask constants 55 * 56 * Revision 1.2 1996/09/27 01:31:17 brianp 57 * added gl_init_vb() prototype 58 * 59 * Revision 1.1 1996/09/13 01:38:16 brianp 60 * Initial revision 61 * 62 */ 63 64 65 /* 66 * OVERVIEW: The vertices defined between glBegin() and glEnd() 67 * are accumulated in the vertex buffer. When either the 68 * vertex buffer becomes filled or glEnd() is called, we must flush 69 * the buffer. That is, we apply the vertex transformations, compute 70 * lighting, fog, texture coordinates etc. Then, we can render the 71 * vertices as points, lines or polygons by calling the gl_render_vb() 72 * function in render.c 73 * 74 */ 75 76 77 #ifndef VB_H 78 #define VB_H 79 80 81 #include "types.h" 82 83 84 85 /* Flush VB when this number of vertices is accumulated: (a multiple of 12) */ 86 #define VB_MAX 480 87 88 /* Arrays must also accomodate new vertices from clipping: */ 89 #define VB_SIZE (VB_MAX + 2 * (6 + MAX_CLIP_PLANES)) 90 91 92 /* Bit values for VertexSizeMask, below. */ 93 /*#define VERTEX2_BIT 1*/ 94 #define VERTEX3_BIT 2 95 #define VERTEX4_BIT 4 96 97 98 99 struct vertex_buffer { 100 GLfloat Obj[VB_SIZE][4]; /* Object coords */ 101 GLfloat Eye[VB_SIZE][4]; /* Eye coords */ 102 GLfloat Clip[VB_SIZE][4]; /* Clip coords */ 103 GLfloat Win[VB_SIZE][3]; /* Window coords */ 104 105 GLfloat Normal[VB_SIZE][3]; /* Normal vectors */ 106 107 GLubyte Fcolor[VB_SIZE][4]; /* Front colors (RGBA) */ 108 GLubyte Bcolor[VB_SIZE][4]; /* Back colors (RGBA) */ 109 GLubyte (*Color)[4]; /* == Fcolor or Bcolor */ 110 111 GLuint Findex[VB_SIZE]; /* Front color indexes */ 112 GLuint Bindex[VB_SIZE]; /* Back color indexes */ 113 GLuint *Index; /* == Findex or Bindex */ 114 115 GLboolean Edgeflag[VB_SIZE]; /* Polygon edge flags */ 116 117 GLfloat TexCoord[VB_SIZE][4];/* Texture coords */ 118 119 GLubyte ClipMask[VB_SIZE]; /* bitwise-OR of CLIP_* values, below */ 120 GLubyte ClipOrMask; /* bitwise-OR of all ClipMask[] values */ 121 GLubyte ClipAndMask; /* bitwise-AND of all ClipMask[] values */ 122 123 GLuint Start; /* First vertex to process */ 124 GLuint Count; /* Number of vertexes in buffer */ 125 GLuint Free; /* Next empty position for clipping */ 126 127 GLuint VertexSizeMask; /* Bitwise-or of VERTEX[234]_BIT */ 128 GLuint TexCoordSize; /* Either 2 or 4 */ 129 GLboolean MonoColor; /* Do all vertices have same color? */ 130 GLboolean MonoNormal; /* Do all vertices have same normal? */ 131 GLboolean MonoMaterial; /* Do all vertices have same material? */ 132 133 /* to handle glMaterial calls inside glBegin/glEnd: */ 134 GLuint MaterialMask[VB_SIZE]; /* Which material values to change */ 135 struct gl_material Material[VB_SIZE][2]; /* New material values */ 136 }; 137 138 139 140 /* Vertex buffer clipping flags */ 141 #define CLIP_RIGHT_BIT 0x01 142 #define CLIP_LEFT_BIT 0x02 143 #define CLIP_TOP_BIT 0x04 144 #define CLIP_BOTTOM_BIT 0x08 145 #define CLIP_NEAR_BIT 0x10 146 #define CLIP_FAR_BIT 0x20 147 #define CLIP_USER_BIT 0x40 148 #define CLIP_ALL_BITS 0x3f 149 150 #define CLIP_ALL 1 151 #define CLIP_NONE 2 152 #define CLIP_SOME 3 153 154 155 extern struct vertex_buffer *gl_alloc_vb(void); 156 157 158 #endif 159