nuclear@1: #include "opengl.h" nuclear@1: #include "geom.h" nuclear@1: nuclear@1: #ifdef SINGLE_PRECISION_MATH nuclear@1: #define ELEM_TYPE GL_FLOAT nuclear@1: #else nuclear@1: #define ELEM_TYPE GL_DOUBLE nuclear@1: #endif nuclear@1: nuclear@3: void draw_mesh(unsigned int prim, int num_verts, const Vertex *vbuf, const unsigned int *ibuf, int attr_tang_loc) nuclear@1: { nuclear@1: glEnableClientState(GL_VERTEX_ARRAY); nuclear@1: glVertexPointer(3, ELEM_TYPE, sizeof *vbuf, &vbuf->pos); nuclear@1: nuclear@1: glEnableClientState(GL_NORMAL_ARRAY); nuclear@1: glNormalPointer(ELEM_TYPE, sizeof *vbuf, &vbuf->norm); nuclear@1: nuclear@1: glEnableClientState(GL_TEXTURE_COORD_ARRAY); nuclear@1: glTexCoordPointer(2, ELEM_TYPE, sizeof *vbuf, &vbuf->tc); nuclear@1: nuclear@3: if(attr_tang_loc >= 0) { nuclear@3: glEnableVertexAttribArrayARB(attr_tang_loc); nuclear@3: glVertexAttribPointerARB(attr_tang_loc, 3, ELEM_TYPE, GL_FALSE, sizeof *vbuf, &vbuf->tang); nuclear@3: } nuclear@3: nuclear@1: if(ibuf) { nuclear@1: glDrawElements(prim, num_verts, GL_UNSIGNED_INT, ibuf); nuclear@1: } else { nuclear@1: glDrawArrays(prim, 0, num_verts); nuclear@1: } nuclear@1: nuclear@1: glDisableClientState(GL_VERTEX_ARRAY); nuclear@1: glDisableClientState(GL_NORMAL_ARRAY); nuclear@1: glDisableClientState(GL_TEXTURE_COORD_ARRAY); nuclear@3: nuclear@3: if(attr_tang_loc >= 0) { nuclear@3: glDisableVertexAttribArrayARB(attr_tang_loc); nuclear@3: } nuclear@1: #if 0 nuclear@1: glBegin(GL_QUADS); nuclear@1: for(int i=0; inorm.x, v->norm.y, v->norm.z); nuclear@1: glVertex3f(v->pos.x, v->pos.y, v->pos.z); nuclear@1: } nuclear@1: } nuclear@1: glEnd(); nuclear@1: #endif nuclear@1: }