5 #include "3dengfx/3dengfx.hpp"
6 #include "dsys/demosys.hpp"
7 #include "common/err_msg.h"
8 #include "parts/parts.hpp"
10 #include "sdlvf/sdlvf.h"
21 std::vector<dsys::Part*> parts;
27 const char *render_path = "frames";
29 unsigned long avg_frame_time, frame_count;
31 const char *help_str = "command line options\n------------------\n"
32 "-r\trender the demo as a sequence of targa files\n"
33 "-f <fps>\tset the rendering framerate for -r above\n"
34 "-p <path>\tset the directory in which to render the sequnce for -r.\n"
36 "-h\tthis help screen\n\n";
38 int main(int argc, char **argv) {
39 for(int i=1; i<argc; i++) {
40 if(argv[i][0] == '-' && argv[i][2] == 0) {
47 if(isdigit(argv[++i][0])) {
48 render_fps = atoi(argv[i]);
50 cerr << "invalid argument -f " << argv[i] << endl;
56 render_path = argv[++i];
65 return argv[i][1] == 'h' ? 0 : EXIT_FAILURE;
77 return fxwt::main_loop();
81 GraphicsInitParameters *gip;
82 if(!(gip = load_graphics_context_config("3dengfx.conf"))) {
86 if(!create_graphics_context(*gip)) {
94 fxwt::set_window_title("The Lab Demos :: Summer Hack (rebuild)");
95 fxwt::set_display_handler(update_gfx);
96 fxwt::set_idle_handler(update_gfx);
97 fxwt::set_keyboard_handler(key_handler);
98 fxwt::set_motion_handler(motion_handler);
99 fxwt::set_button_handler(bn_handler);
104 // show loading screen
105 dsys::overlay(get_texture("data/img/loading.jpg"), Vector2(0, 0), Vector2(1, 1), 1.0);
108 // check if we have all the textures we need
109 FILE *fp = fopen("data/tex_list", "r");
111 error("couldn't find texture list, run this only from its directory");
116 while(fgets(tex_name, 512, fp)) {
117 char *last_char = tex_name + strlen(tex_name) - 1;
118 if(*last_char == '\n') {
121 if(!get_texture(tex_name)) {
122 error("failed to load texture: \"%s\"", tex_name);
128 set_scene_data_path("data/img");
132 for(size_t i=0; i<parts.size(); i++) {
139 dsys::render_demo(render_fps, render_path);
143 sdlvf_init("data/music/red_herring.ogg");
153 unsigned long time = timer_getmsec(&timer);
161 for(size_t i=0; i<parts.size(); i++) {
164 destroy_graphics_context();
167 avg_frame_time /= frame_count;
168 printf("average frame time: %lu msec, average fps: %.2f\n", avg_frame_time, 1000.0 / avg_frame_time);
174 cout << time << " seconds\n";
176 cout << time / 60 << ":" << time - (time / 60) * 60 << "\n";
181 unsigned long frame_start = timer_getmsec(&timer);
185 if((sdlvf_err = sdlvf_check()) != SDLVF_PLAYING) {
186 fprintf(stderr, "quit: %s", sdlvf_strerror(sdlvf_err));
191 if(dsys::update_graphics() == -1) {
195 avg_frame_time += timer_getmsec(&timer) - frame_start;