void vbo_draw(void) { if(vertex_buffer_count) { vbo_bind(); vbo_buffer_data(&vertex_buffer[0], VERTEX_SIZE * vertex_buffer_count); glDrawArrays(vertex_draw_mode,0,vertex_buffer_count); vertex_buffer_count = 0; vbo_unbind(); } }
void vbo_enable() { if(vertex_buffer_enabled) return; vbo_bind(); glEnableVertexAttribArray(POSITION_ATTR); glVertexAttribPointer(POSITION_ATTR, 4, GL_FLOAT, false, VERTEX_SIZE, (GLvoid *) offsetof(VERTEX, x)); //Position glEnableVertexAttribArray(COLOUR_ATTR); glVertexAttribPointer(COLOUR_ATTR, 4, GL_UNSIGNED_BYTE, true, VERTEX_SIZE, (GLvoid *) offsetof(VERTEX, b)); //Colour glEnableVertexAttribArray(TEXCOORD_0_ATTR); glVertexAttribPointer(TEXCOORD_0_ATTR, 2, GL_FLOAT, false, VERTEX_SIZE, (GLvoid *) offsetof(VERTEX, coord[2])); //Tex0 glEnableVertexAttribArray(TEXCOORD_1_ATTR); glVertexAttribPointer(TEXCOORD_1_ATTR, 2, GL_FLOAT, false, VERTEX_SIZE, (GLvoid *) offsetof(VERTEX, coord[0])); //Tex1 glEnableVertexAttribArray(FOG_ATTR); glVertexAttribPointer(FOG_ATTR, 1, GL_FLOAT, false, VERTEX_SIZE, (GLvoid *) offsetof(VERTEX, f)); //Fog vbo_unbind(); }
void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glPointSize(10.0f); /* glTranslatef(0.0f,0.0f,-4.0f); */ /* glColor3f(0.0f,0.0f,1.0f); */ /* glBegin(GL_POINTS); */ /* glVertex2fv(shooter.pos); */ /* glEnd(); */ use(shader); vbo_bind(vbo); /* glPointSize(4.0); */ /* glBufferData(GL_ARRAY_BUFFER, sizeof(shooter.pos), shooter.pos, GL_DYNAMIC_DRAW); */ glEnableVertexAttribArray(shader.attrib[0]); glVertexAttribPointer(shader.attrib[0], 2, GL_FLOAT, GL_FALSE, 0, 0); glDrawArrays(GL_POINTS,0,1); /* int size; */ /* glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size); */ /* glDrawElements(GL_POINTS, size/sizeof(GLuint), GL_UNSIGNED_SHORT, 0); */ glDisableVertexAttribArray(shader.attrib[0]); vbo_unbind(); glutSwapBuffers(); }