static gboolean view_configure (GLDrawingArea *widget, GdkEventConfigure *event, View *view) { view_resize (view); view_render (view); return TRUE; }
static gboolean view_expose (GLDrawingArea *widget, GdkEventExpose *event, View *view) { view_render (view); return TRUE; }
static gboolean view_scroll (GLDrawingArea *widget, GdkEventScroll *event, View *view) { if (event->direction == GDK_SCROLL_UP) { if (view->camera->distance > 10) view->camera->distance -= 40; view_render (view); } else if (event->direction == GDK_SCROLL_DOWN) { if (view->camera->distance < 1500) view->camera->distance += 40; view_render (view); } return TRUE; }
void view_glx_render(struct view* view) { TIMER_INIT(); TIMER_START(); view_render(view); glXSwapBuffers(view->glx_display, view->glx_window); TIMER_STOP_PRINT("View: GlxRender"); usleep(1000); }
void core_loop(void) { SDL_Event event; while (! app.exit) { while (SDL_PollEvent(&event)) { event_handle(&event); } if (! timer.paused) { process_update(); view_update(); } view_render(); timer_step(); } }
void view_glut_render() { struct view* view = g_glut_view; if ( view == NULL ) return; TIMER_INIT(); TIMER_START(); view_render(view); glutSwapBuffers(); TIMER_STOP_PRINT("View: GlutRender"); usleep(1000); glutPostRedisplay(); }
static void on_gl_context_realize (GLDrawingArea *context, View *view) { view->camera->azimuth = 45; view->camera->elevation = 25; view->camera->distance = 900; view->camera->position[2] = 4; gl_drawing_area_make_current (context); g_signal_connect (G_OBJECT (context), "configure-event", G_CALLBACK (view_configure), (gpointer) view); g_signal_connect (G_OBJECT (context), "expose-event", G_CALLBACK (view_expose), (gpointer) view); g_signal_connect (G_OBJECT (context), "scroll-event", G_CALLBACK (view_scroll), (gpointer) view); g_signal_connect (G_OBJECT (context), "button-press-event", G_CALLBACK (view_click), (gpointer) view); g_signal_connect (G_OBJECT (context), "motion-notify-event", G_CALLBACK (view_motion), (gpointer) view); init_lighting (view); scene_add_view (view->scene, (gpointer) view); view_resize (view); view_render (view); }
static gboolean view_motion (GLDrawingArea *widget, GdkEvent *event, View *view) { double delta_x, delta_y; double current_x, current_y; /* This could be an actual motion event or it could just be a motion hint * from GDK_POINTER_MOTION_HINT_MASK. If it's a hint, we have to ask for * the current mouse position. This ensures we're always drawing with the * current mouse position, rather than queueing mouse positions. */ if (event->motion.is_hint) { gint ix, iy; gdk_window_get_pointer(event->motion.window, &ix, &iy, NULL); current_x = ix; current_y = iy; } else { current_x = event->motion.x; current_y = event->motion.y; } delta_x = current_x - view->mouse[0]; delta_y = current_y - view->mouse[1]; view->mouse[0] = current_x; view->mouse[1] = current_y; view->camera->azimuth -= delta_x / 5; view->camera->elevation += delta_y / 5; if (view->camera->elevation < 0) view->camera->elevation = 0; if (view->camera->elevation > 90) view->camera->elevation = 90; view_render (view); return TRUE; }
void viewglut_render(const viewglut *P) { /* Don't render the path during play mode. */ if (P->state != st_play_fwd && P->state != st_play_rev) { /* Preserve the current GL state. */ glPushAttrib(GL_LINE_BIT | GL_POINT_BIT | GL_CURRENT_BIT | GL_LIGHTING_BIT | GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); { /* Get set up for unlit transparent rendering. */ glDisable(GL_LIGHTING); glDepthMask(GL_FALSE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPointSize(7.0); /* We'll need vertex arrays in the callback. */ glEnableClientState(GL_VERTEX_ARRAY); { view_render(P->V, viewglut_render_state, (void *) P); } glDisableClientState(GL_VERTEX_ARRAY); } glPopAttrib(); } }