//--------------------------------------------------------------------------- // newFrameData //--------------------------------------------------------------------------- FrameData *newFrameData( Shared *shared ) { FrameData *framedata; if ( frameDataBuffer == NULL ) { framedata = (FrameData *) mpkMalloc( sizeof(FrameData) ); } else { framedata = frameDataBuffer; frameDataBuffer = framedata->next; } framedata->next = NULL; framedata->time = gettime() - shared->starttime; ui_move(framedata->time); framedata->r_eyecluster = g->r_eyecluster; framedata->r_eyepos[0] = g->r_eyepos[0]; framedata->r_eyepos[1] = g->r_eyepos[1]; framedata->r_eyepos[2] = g->r_eyepos[2]; framedata->r_eye_az = g->r_eye_az; framedata->r_eye_el = g->r_eye_el; return framedata; }
static void display(void) { double time; time = (double) SDL_GetTicks() / 1000.0 - starttime; ui_move(time); ui_display(r_context, time); hud_render(r_context); SDL_GL_SwapBuffers(); }
static void ui_toolbox_update_buttons(struct ui_toolbox *tb) { sf_list_iter_t iter; float xstep; float x; /* * 假设每个 buttons 的宽度相同,高度和 toolbox 一样。 * 后期改进可以使用权重来计算每个 button 的位置。 */ xstep = tb->ui.area.w * 1.0f / (sf_list_cnt(&tb->buttons) + 1); x = xstep; if (sf_list_begin(&tb->buttons, &iter)) do { struct ui *button = *(struct ui**) sf_list_iter_elt(&iter); ui_move(button, x - button->area.w / 2, 0); x += xstep; } while (sf_list_iter_next(&iter)); }