/** * @brief Renderer::render render a single frame, then return * @return true if the user wants to quit the application */ bool Renderer::render(){ process_keys(SDL_GetKeyboardState(NULL)); SDL_Event e; while(SDL_PollEvent(&e)){ if(e.type == SDL_QUIT){ printf("received SDL_QUIT\n"); quit_flag = true; } else if(e.type == SDL_MOUSEMOTION){ mousemove_event(e.motion.xrel, e.motion.yrel); } else if(e.type == SDL_WINDOWEVENT && e.window.event == SDL_WINDOWEVENT_RESIZED){ resize_event(e.window.data1, e.window.data2); std::cout << "window resized" << std::endl; } } glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); world_to_camera_matrix = look_matrix(camera_vertical, camera_horizontal, camera_position); camera_to_clip_matrix = glm::mat4( glm::vec4(frustum_scale/(width/(float)height), 0.0, 0.0, 0.0), glm::vec4(0.0, frustum_scale, 0.0, 0.0), glm::vec4(0.0, 0.0, (z_far + z_near)/(z_near - z_far), (2*z_far*z_near)/(z_near - z_far)), glm::vec4(0.0, 0.0, -1.0, 0.0)); // update uniforms for all shaders now (no UBOs in 2.x, unfortunately...) axes_shader->set_camera_to_clip(camera_to_clip_matrix); axes_shader->set_world_to_camera(world_to_camera_matrix); render_axes(); trails_shader->set_camera_to_clip(camera_to_clip_matrix); trails_shader->set_world_to_camera(world_to_camera_matrix); render_trails(); pointsprites_shader->set_camera_to_clip(camera_to_clip_matrix); pointsprites_shader->set_world_to_camera(world_to_camera_matrix); pointsprites_shader->set_uniform("camera_position", camera_position); render_pointsprites(); render_center_of_mass(); SDL_GL_SwapWindow(win); //SDL_Delay(1000/60.0); // limit to 60FPS return quit_flag; }
static void tween_selit(Menuhdr *mh, SHORT hitid) /* Pull-down interpreter for tween system */ { Poly *p; hide_mp(); switch(hitid) { case TWE_UND_PUL: tween_swap_undo(); break; case TWE_ONC_PUL: wireframe_tween(); break; case TWE_LOO_PUL: wireloop_tween(); break; case TWE_REN_PUL: render_tween(); break; case TWE_TRA_PUL: render_trails(); break; case TWE_END_PUL: tween_end_to_start(); break; case TWE_SWA_PUL: tween_swap_ends(); break; case TWE_CLE_PUL: tween_clear(); break; case TWE_FIL_PUL: if (tween_save_undo()>=Success) { if (save_tween_state() >= Success) { tween_undraw(); twe_disable_refresh(); trash_tween_state(&twcb->cur); go_files(FTP_TWEEN); load_tween_state(); twe_enable_refresh(); tween_redraw(); } } break; case TWE_QUI_PUL: mh_gclose_code(mh, Err_abort); break; case SHA_POL_PUL: /* polygon */ vs.tween_tool = TTI_POLY; break; case SHA_SHA_PUL: /* shape */ vs.tween_tool = TTI_SHAPE; break; case SHA_STA_PUL: /* Star */ vs.tween_tool = TTI_STAR; break; case SHA_PET_PUL: /* Petal */ vs.tween_tool = TTI_PETAL; break; case SHA_RPO_PUL: /* Rpoly */ vs.tween_tool = TTI_RPOLY; break; case SHA_OVA_PUL: /* oval */ vs.tween_tool = TTI_OVAL; break; case SHA_REV_PUL: /* reverse */ tween_reverse_poly(); break; case SHA_USE_PUL: /* Use Last */ if (tween_save_undo()>=Success) { if ((load_a_poly(poly_name, p = sel_poly())) >= Success) { softerr(force_other(p),NULL); redraw_both_ends(); } } break; case SHA_LOA_PUL: /* Load */ load_cur_shape(); break; case SHA_SAV_PUL: /* Save */ save_cur_shape(); break; case MOV_MVP_PUL: /* Move Point */ vs.tween_tool = TTI_MPOINT; break; case MOV_MAG_PUL: /* Magnet */ vs.tween_tool = TTI_MAGNET; break; case MOV_BLO_PUL: /* Blow */ vs.tween_tool = TTI_BLOW; break; case MOV_MVS_PUL: /* Move Shape */ vs.tween_tool = TTI_MSHAPE; break; case MOV_MVT_PUL: /* Move tween */ vs.tween_tool = TTI_MTWEEN; break; case MOV_SZS_PUL: /* Size shape */ vs.tween_tool = TTI_SSHAPE; break; case MOV_SZT_PUL: /* Size tween */ vs.tween_tool = TTI_STWEEN; break; case MOV_LIN_PUL: /* Link Points */ vs.tween_tool = TTI_LINK; break; case MOV_CLE_PUL: /* clear links */ if (tween_save_undo()>=Success) { free_dl_list(&twcb->cur.links); redraw_both_ends(); } break; case OPT_CLO_PUL: vs.closed_curve = !vs.closed_curve; redraw_both_ends(); break; case OPT_SPL_PUL: vs.tween_spline = !vs.tween_spline; break; case OPT_TWO_PUL: vs.color2 = !vs.color2; break; case OPT_IN__PUL: /* in slow */ vs.ado_ease = !vs.ado_ease; break; case OPT_OUT_PUL: /* out slow */ vs.ado_ease_out = !vs.ado_ease_out; break; case OPT_STI_PUL: /* still */ vs.ado_tween = !vs.ado_tween; break; case OPT_PIN_PUL: /* ping-pong */ vs.ado_pong = !vs.ado_pong; break; case OPT_REV_PUL: /* reverse */ vs.ado_reverse = !vs.ado_reverse; break; case OPT_COM_PUL: /* complete */ vs.ado_complete = !vs.ado_complete; break; case ACT_STA_PUL: vs.tween_end = TWEEN_START; redraw_both_ends(); break; case ACT_END_PUL: vs.tween_end = TWEEN_END; redraw_both_ends(); break; case ACT_BOT_PUL: vs.tween_end = TWEEN_BOTH; redraw_both_ends(); break; } show_mp(); }