int d2_init(const char *title, int width, int height, render_handler render) { int argc = 0; char **argv = 0; glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(width, height); glutCreateWindow(title); user_render = render; glutDisplayFunc(draw); enable_2d(width, height); glColor3f(1.0f, 1.0f, 1.0f); return 0; }
void render() { int i; //Typical render pass glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //First render background and menu if it is enabled enable_2d(); glEnable(GL_TEXTURE_2D); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glVertexPointer(2, GL_FLOAT, 0, shadow_vertices); glTexCoordPointer(2, GL_FLOAT, 0, shadow_tex_coord); glBindTexture(GL_TEXTURE_2D, shadow); //glColor4f(0.85f, 0.85f, 0.85f, 1.0f); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); if (menu_active || menu_show_animation || menu_hide_animation) { glTranslatef(pos_x, pos_y, 0.0f); for (i = 0; i < 4; i++) { if (i == selected) { glVertexPointer(2, GL_FLOAT, 0, radio_btn_selected_vertices); glTexCoordPointer(2, GL_FLOAT, 0, radio_btn_selected_tex_coord); glBindTexture(GL_TEXTURE_2D, radio_btn_selected); } else { glVertexPointer(2, GL_FLOAT, 0, radio_btn_unselected_vertices); glTexCoordPointer(2, GL_FLOAT, 0, radio_btn_unselected_tex_coord); glBindTexture(GL_TEXTURE_2D, radio_btn_unselected); } glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glTranslatef(0.0f, 60.0f, 0.0f); } glColor4f(0.35f, 0.35f, 0.35f, 1.0f); bbutil_render_text(font, "Color Menu", 10.0f, 10.0f); bbutil_render_text(font, "Red", 70.0f, -40.0f); bbutil_render_text(font, "Green", 70.0f, -100.0f); bbutil_render_text(font, "Blue", 70.0f, -160.0f); bbutil_render_text(font, "Yellow", 70.0f, -220.0f); } glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); glDisable(GL_TEXTURE_2D); //Then render the cube enable_3d(); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_COLOR_MATERIAL); glEnable(GL_DEPTH_TEST); glTranslatef(cube_pos_x, cube_pos_y, cube_pos_z); glRotatef(30.0f, 1.0f, 0.0f, 0.0f); glRotatef(15.0f, 0.0f, 0.0f, 1.0f); glRotatef(angle, 0.0f, 1.0f, 0.0f); glColor4f(cube_color[0], cube_color[1], cube_color[2], cube_color[3]); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3, GL_FLOAT, 0, cube_vertices); glNormalPointer(GL_FLOAT, 0, cube_normals); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDrawArrays(GL_TRIANGLE_STRIP, 4, 4); glDrawArrays(GL_TRIANGLE_STRIP, 8, 4); glDrawArrays(GL_TRIANGLE_STRIP, 12, 4); glDrawArrays(GL_TRIANGLE_STRIP, 16, 4); glDrawArrays(GL_TRIANGLE_STRIP, 20, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); glDisable(GL_COLOR_MATERIAL); glDisable(GL_DEPTH_TEST); //Use utility code to update the screen bbutil_swap(); }
/** * main render function */ void render() { counter++; if(counter >= 36000){ counter = 0; } //Typical render pass glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // update dimensions enable_2d(); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glPushMatrix(); // if in portrait mode if (oriention_side_up > 0) { glVertexPointer(2, GL_FLOAT, 0, verticesH); glTexCoordPointer(2, GL_FLOAT, 0, tex_coordH); } // if in landscape mode else { glVertexPointer(2, GL_FLOAT, 0, vertices); glTexCoordPointer(2, GL_FLOAT, 0, tex_coord); } //portrait or landscape? glBindTexture(GL_TEXTURE_2D, oriention_side_up>0?backgroundH:background); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glPopMatrix(); pp = points.begin(); while (pp != points.end()) { if (pp->visible) { // draw touchpoint glPushMatrix(); glTranslatef(pp->getX(), (oriention_side_up>0?1024:600) - pp->getY(), 0); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glVertexPointer(2, GL_FLOAT, 0, verticesTouchpoint); glTexCoordPointer(2, GL_FLOAT, 0, tex_coord_touchpoint); glBindTexture(GL_TEXTURE_2D, touchpoint); glPushMatrix(); glRotatef((float) ((float)(pp->startRotation) + (float) counter / 0.25f), 0, 0, 1); glPushMatrix(); glTranslatef(-60, -60, 0); glColor4f(pp->r,pp->g,pp->b,1); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glPopMatrix(); glPopMatrix(); glPopMatrix(); // draw touchpoint number glPushMatrix(); glColor4f(0.3f,0.3f,0.3f,1.0f); char buffer [33]; itoa (pp->id+1,buffer,10); glTranslatef(pp->getX()+50,(oriention_side_up>0?1024:600)-pp->getY()+50,0); glPushMatrix(); bbutil_render_text(font,buffer,0,0); glPopMatrix(); glPopMatrix(); } pp++; } glColor4f(1.0f,1.0f,1.0f,1.0f); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); //Use utility code to update the screen bbutil_swap(); }