|  |  |  | @ -46,6 +46,7 @@ | 
			
		
	
		
			
				
					|  |  |  |  | #include <GLFW/glfw3.h> | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #include <tinycthread.h> | 
			
		
	
		
			
				
					|  |  |  |  | #include <getopt.h> | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | // Define tokens for GL_EXT_separate_specular_color if not already defined
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifndef GL_EXT_separate_specular_color | 
			
		
	
	
		
			
				
					|  |  |  | @ -238,6 +239,24 @@ const GLfloat floor_shininess      = 18.f; | 
			
		
	
		
			
				
					|  |  |  |  | const GLfloat fog_color[4]         = { 0.1f, 0.1f, 0.1f, 1.f }; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | //========================================================================
 | 
			
		
	
		
			
				
					|  |  |  |  | // Print usage information
 | 
			
		
	
		
			
				
					|  |  |  |  | //========================================================================
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static void usage(void) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     printf("Usage: particles [-hbs]\n"); | 
			
		
	
		
			
				
					|  |  |  |  |     printf("Options:\n"); | 
			
		
	
		
			
				
					|  |  |  |  |     printf(" -b   Benchmark (run program for 60 seconds)\n"); | 
			
		
	
		
			
				
					|  |  |  |  |     printf(" -s   Run program as single thread (default is to use two threads)\n"); | 
			
		
	
		
			
				
					|  |  |  |  |     printf(" -h   Display this help\n"); | 
			
		
	
		
			
				
					|  |  |  |  |     printf("\n"); | 
			
		
	
		
			
				
					|  |  |  |  |     printf("Program runtime controls:\n"); | 
			
		
	
		
			
				
					|  |  |  |  |     printf(" W    Toggle wireframe mode\n"); | 
			
		
	
		
			
				
					|  |  |  |  |     printf(" Esc  Exit program\n"); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | //========================================================================
 | 
			
		
	
		
			
				
					|  |  |  |  | // Initialize a new particle
 | 
			
		
	
		
			
				
					|  |  |  |  | //========================================================================
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -940,7 +959,7 @@ static int physics_thread_main(void* arg) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | int main(int argc, char** argv) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     int i, frames, benchmark; | 
			
		
	
		
			
				
					|  |  |  |  |     int i, ch, frames, benchmark; | 
			
		
	
		
			
				
					|  |  |  |  |     double t0, t; | 
			
		
	
		
			
				
					|  |  |  |  |     thrd_t physics_thread = 0; | 
			
		
	
		
			
				
					|  |  |  |  |     GLFWwindow* window; | 
			
		
	
	
		
			
				
					|  |  |  | @ -949,38 +968,19 @@ int main(int argc, char** argv) | 
			
		
	
		
			
				
					|  |  |  |  |     multithreading = 1; | 
			
		
	
		
			
				
					|  |  |  |  |     benchmark = 0; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     for (i = 1;  i < argc;  i++) | 
			
		
	
		
			
				
					|  |  |  |  |     while ((ch = getopt(argc, argv, "bhs")) != -1) | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         // Use benchmarking?
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (strcmp(argv[i], "-b") == 0) | 
			
		
	
		
			
				
					|  |  |  |  |             benchmark = 1; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // Force multithreading off?
 | 
			
		
	
		
			
				
					|  |  |  |  |         else if (strcmp(argv[i], "-s") == 0) | 
			
		
	
		
			
				
					|  |  |  |  |             multithreading = 0; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // With a Finder launch on Mac OS X we get a bogus -psn_0_46268417
 | 
			
		
	
		
			
				
					|  |  |  |  |         // kind of argument (actual numbers vary). Ignore it.
 | 
			
		
	
		
			
				
					|  |  |  |  |         else if (strncmp(argv[i], "-psn_", 5) == 0) | 
			
		
	
		
			
				
					|  |  |  |  |             ; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // Usage
 | 
			
		
	
		
			
				
					|  |  |  |  |         else | 
			
		
	
		
			
				
					|  |  |  |  |         switch (ch) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             if (strcmp(argv[i], "-?") != 0) | 
			
		
	
		
			
				
					|  |  |  |  |                 printf("Unknonwn option %s\n\n", argv[i]); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             printf("Usage: %s [options]\n", argv[0]); | 
			
		
	
		
			
				
					|  |  |  |  |             printf("\n"); | 
			
		
	
		
			
				
					|  |  |  |  |             printf("Options:\n"); | 
			
		
	
		
			
				
					|  |  |  |  |             printf(" -b   Benchmark (run program for 60 s)\n"); | 
			
		
	
		
			
				
					|  |  |  |  |             printf(" -s   Run program as single thread (default is to use two threads)\n"); | 
			
		
	
		
			
				
					|  |  |  |  |             printf(" -?   Display this text\n"); | 
			
		
	
		
			
				
					|  |  |  |  |             printf("\n"); | 
			
		
	
		
			
				
					|  |  |  |  |             printf("Program runtime controls:\n"); | 
			
		
	
		
			
				
					|  |  |  |  |             printf(" w    Toggle wireframe mode\n"); | 
			
		
	
		
			
				
					|  |  |  |  |             printf(" ESC  Exit program\n"); | 
			
		
	
		
			
				
					|  |  |  |  |             exit(EXIT_FAILURE); | 
			
		
	
		
			
				
					|  |  |  |  |             case 'b': | 
			
		
	
		
			
				
					|  |  |  |  |                 benchmark = 1; | 
			
		
	
		
			
				
					|  |  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |  |             case 'h': | 
			
		
	
		
			
				
					|  |  |  |  |                 usage(); | 
			
		
	
		
			
				
					|  |  |  |  |                 exit(EXIT_SUCCESS); | 
			
		
	
		
			
				
					|  |  |  |  |             case 's': | 
			
		
	
		
			
				
					|  |  |  |  |                 multithreading = 0; | 
			
		
	
		
			
				
					|  |  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |