/* * Run engine until stop() is called. * * The virtual member frame() will be called once for * each control system frame. pre_render() and * post_render() will be called before/after the engine * renders each video frame. */ void gfxengine_t::run() { open(); show(); start_engine(); is_running = 1; double toframe = 0.0f; double fdt = 1.0f; cs_engine_advance(csengine, 0); while(is_running) { int t = (int)SDL_GetTicks(); int dt = t - last_tick; last_tick = t; if(abs(dt) > 500) last_tick = t; if(dt > 250) dt = (int)ticks_per_frame; if(_timefilter) fdt += (dt - fdt) * _timefilter; else fdt = ticks_per_frame; toframe += fdt / ticks_per_frame; cs_engine_advance(csengine, toframe); pre_render(); window->select(); cs_engine_render(csengine); post_render(); if(_autoinvalidate) window->invalidate(); flip(); } stop_engine(); }
void main(void) { slave_id(); port_configure(); //ini(); analog_config(); while(true) { analog_read(); // Le posicao corrente if (buffer_adc>250) // Limite mecanico superior { stop_engine(); limit_up=0; limit_down=1; } else if (buffer_adc<10) // Limite mecanico inferior { stop_engine(); limit_down=0; limit_up=1; } else if ((buffer_adc==buffer_pos)) // Para motor em posicao { stop_engine(); } else if ((buffer_adc>buffer_pos) && limit_down!=0) { move_down(); limit_up=1; //liberta limite cima } else if ((buffer_adc<buffer_pos) && limit_up!=0) { move_up(); limit_down=1; //liberta limite baixo } } }
int main(int argc, char *argv[]) { int time; char method[SCREEN_UPDATE_STR_LEN]; char fps_text[16]; if (argc > 1) { if (strstr(argv[1], "help")) { printf("Type \"kwestkingdom\" to play!\n"); exit(0); } } if (!init_kwestkingdom()) { return 1; } init_engine(); /** * Reset the timers just before the game begins. */ reset_timer(); /** * BEGIN MAIN LOOP */ while (!quitting) { while (get_ticks() == 0) { rest(1); } while (get_ticks() > 0) { time = get_ticks(); /** * UPDATE */ update_engine(); decrease_timer(); if (time <= get_ticks()) { break; } } /** * DRAW */ paint_engine(grab_canvas()); /** * Show FPS */ sprintf(fps_text, "FPS %d", get_fps()); show_text(grab_canvas(), fps_text, 10, 10, WHITE, BLACK); /** * Show the method of screen updating. */ find_screen_update_method(method); show_text( grab_canvas(), method, grab_tile_size() / 5, /* x */ grab_canvas_height() - (grab_tile_size() / 2), /* y */ WHITE, BLACK ); /** * Show all of the new screen changes */ refresh_screen(); mark_frame_complete(); } /** * END MAIN LOOP */ /** * Cleanup */ stop_engine(); stop_screen(); stop_resources(); check_memory(); return 0; }
// Aborts and returns 1 if an error is encountered. int PackageRenderer::render_package(RenderPackage *package) { int audio_done = 0; int video_done = 0; int samples_rendered = 0; result = 0; this->package = package; // printf( // "PackageRenderer::render_package: audio s=%lld l=%lld video s=%lld l=%lld\n", // package->audio_start, // package->audio_end - package->audio_start, // package->video_start, // package->video_end - package->video_start); // FIXME: The design that we only get EDL once does not give us neccessary flexiblity to do things the way they should be donek default_asset->video_data = package->video_do; default_asset->audio_data = package->audio_do; Render::check_asset(edl, *default_asset); create_output(); if(!asset->video_data) video_done = 1; if(!asset->audio_data) audio_done = 1; // Create render engine if(!result) { create_engine(); //printf("PackageRenderer::render_package 5 %d\n", result); // Main loop while((!audio_done || !video_done) && !result) { int need_audio = 0, need_video = 0; // Calculate lengths to process. Audio fragment is constant. if(!audio_done) { if(audio_position + audio_read_length >= package->audio_end) { audio_done = 1; audio_read_length = package->audio_end - audio_position; } samples_rendered = audio_read_length; need_audio = 1; } //printf("PackageRenderer::render_package 6 %d\n", samples_rendered); if(!video_done) { if(audio_done) { video_read_length = package->video_end - video_position; // Packetize video length so progress gets updated video_read_length = (int)MIN(asset->frame_rate, video_read_length); video_read_length = MAX(video_read_length, 30); } else // Guide video with audio { video_read_length = Units::to_int64( (double)(audio_position + audio_read_length) / asset->sample_rate * asset->frame_rate) - video_position; } // Clamp length if(video_position + video_read_length >= package->video_end) { video_done = 1; video_read_length = package->video_end - video_position; } // Calculate samples rendered for progress bar. if(audio_done) samples_rendered = Units::round((double)video_read_length / asset->frame_rate * asset->sample_rate); need_video = 1; } //printf("PackageRenderer::render_package 1 %d %lld %lld\n", result, audio_read_length, video_read_length); if(need_video && !result) do_video(); //printf("PackageRenderer::render_package 7 %d %d\n", result, samples_rendered); if(need_audio && !result) do_audio(); if(!result) set_progress(samples_rendered); if(!result && progress_cancelled()) result = 1; // printf("PackageRenderer::render_package 10 %d %d %d %d\n", // audio_read_length, video_read_length, samples_rendered, result); if(result) set_result(result); else result = get_result(); } //printf("PackageRenderer::render_package 20\n"); stop_engine(); //printf("PackageRenderer::render_package 30\n"); stop_output(); //printf("PackageRenderer::render_package 40\n"); } //printf("PackageRenderer::render_package 50\n"); close_output(); //printf("PackageRenderer::render_package 60\n"); set_result(result); //printf("PackageRenderer::render_package 70\n"); return result; }