void GeomRenderer::sendNormal(GLuint normalIndex) { assert(normalData.size == 3); switch(normalData.type) { case GL_BYTE: glNormal3bv((const GLbyte*)((const char*)normalData.pointer + normalIndex*normalData.stride)); break; case GL_SHORT: glNormal3sv((const GLshort*)((const char*)normalData.pointer + normalIndex*normalData.stride)); break; case GL_INT: glNormal3iv((const GLint*)((const char*)normalData.pointer + normalIndex*normalData.stride)); break; case GL_FLOAT: glNormal3fv((const GLfloat*)((const char*)normalData.pointer + normalIndex*normalData.stride)); break; case GL_DOUBLE: glNormal3dv((const GLdouble*)((const char*)normalData.pointer + normalIndex*normalData.stride)); break; } }
///////////////////////////////////////////////////////// // Render // void GEMglNormal3sv :: render(GemState *state) { glNormal3sv (v); }
void GPU_draw_buffers(void *buffers_v) { GPU_Buffers *buffers = buffers_v; if(buffers->vert_buf && buffers->index_buf) { glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffers->vert_buf); glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, buffers->index_buf); if(buffers->tot_quad) { glVertexPointer(3, GL_FLOAT, sizeof(DMGridData), (void*)offsetof(DMGridData, co)); glNormalPointer(GL_FLOAT, sizeof(DMGridData), (void*)offsetof(DMGridData, no)); glDrawElements(GL_QUADS, buffers->tot_quad * 4, buffers->index_type, 0); } else { glVertexPointer(3, GL_FLOAT, sizeof(VertexBufferFormat), (void*)offsetof(VertexBufferFormat, co)); glNormalPointer(GL_SHORT, sizeof(VertexBufferFormat), (void*)offsetof(VertexBufferFormat, no)); glDrawElements(GL_TRIANGLES, buffers->tot_tri * 3, buffers->index_type, 0); } glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); } else if(buffers->totface) { /* fallback if we are out of memory */ int i; for(i = 0; i < buffers->totface; ++i) { MFace *f = buffers->mface + buffers->face_indices[i]; glBegin((f->v4)? GL_QUADS: GL_TRIANGLES); glNormal3sv(buffers->mvert[f->v1].no); glVertex3fv(buffers->mvert[f->v1].co); glNormal3sv(buffers->mvert[f->v2].no); glVertex3fv(buffers->mvert[f->v2].co); glNormal3sv(buffers->mvert[f->v3].no); glVertex3fv(buffers->mvert[f->v3].co); if(f->v4) { glNormal3sv(buffers->mvert[f->v4].no); glVertex3fv(buffers->mvert[f->v4].co); } glEnd(); } } else if(buffers->totgrid) { int i, x, y, gridsize = buffers->gridsize; for(i = 0; i < buffers->totgrid; ++i) { DMGridData *grid = buffers->grids[buffers->grid_indices[i]]; for(y = 0; y < gridsize-1; y++) { glBegin(GL_QUAD_STRIP); for(x = 0; x < gridsize; x++) { DMGridData *a = &grid[y*gridsize + x]; DMGridData *b = &grid[(y+1)*gridsize + x]; glNormal3fv(a->no); glVertex3fv(a->co); glNormal3fv(b->no); glVertex3fv(b->co); } glEnd(); } } } }
inline void glNormal3v( const GLshort * v ) { glNormal3sv( v ); }
M(void, glNormal3sv, jobject v) { glNormal3sv(BUFF(GLshort, v)); }
void Vector3D<GLshort>::SendOGLNormal(){glNormal3sv(V);}
void __glXDisp_Normal3sv(GLbyte *pc) { glNormal3sv( (GLshort *)(pc + 0) ); }