Beispiel #1
0
int main (int argc, char *argv[]){
  char buf[256];

#ifdef GRAPHICS
  gs_init(WIDTH, HEIGHT);
#endif
  
  sw_init();
  sw_start();
  RoadMap();
  sw_stop();

  sw_timeString(buf);
  
  printf("Time taken: %s\n",buf);

#ifdef GRAPHICS
  gs_exit();
#else
  printf("CRC is %x\n",crc);
#endif

  return 0;
}
Beispiel #2
0
int main(int argc, char* argv[])
{

	char* input = NULL;
	char* output = NULL;	

	if(argc == 6) {
		input = argv[1];
		output = argv[2];
		SPU_THREADS = atoi(argv[3]);
		PPEid = atoi(argv[4]);
		file = argv[5]; 	
	} else if (argc == 4) {
		PPEid = 0;
		file = NULL; 		 		
		input = argv[1];
		output = argv[2]; 	
		SPU_THREADS = atoi(argv[3]);
	} else if (argc == 5) {
		PPEid = 0;
		file = NULL; 		 		
		input = argv[1];
		output = argv[2]; 	
		SPU_THREADS = atoi(argv[3]);
		
	} else {
		printf("Wrong number of arguments %i\n", argc);
		return -1;
	}
	
	pthread_t* threads;	
	struct IMAGE_FORMAT result;
	unsigned char* energy;
	unsigned char* cmap;
	unsigned char* scale;
	int scale_size = 9;
	char timer_buffer[256];
	int y, x;
	size_t i;

	WIDTH = 576;
	HEIGTH = 708;
	
	threads = dsmcbe_simpleInitialize(PPEid, file, SPU_THREADS);


	unsigned int* speIDs = dsmcbe_create(SPEID + PPEid, 4);
	*speIDs = PPEid * SPU_THREADS;
	dsmcbe_release(speIDs);

	if (PPEid == 0)
	{
		//printf("Starting loading images!\n");	
		loadImageNormal();
		//loadImageSmall();
		//printf("Finished loading images!\n");
		
			
		//for(i = 0; i < ROUNDS; i++)
		//{
			//struct POINTS* points = create(RESULT + i, sizeof(struct POINTS) * SHOTS_SPU);
			//memset(points, 0, sizeof(struct POINTS) * SHOTS_SPU);
			//release(points);	
		//}
	
			
		energy = dsmcbe_create(ENERGY+PPEid, (sizeof(unsigned char) * (HEIGTH * WIDTH)));
		memset(energy, 0, sizeof(unsigned char) * (HEIGTH * WIDTH));
	
		cmap = (unsigned char*)malloc(sizeof(unsigned char)*(9*3));
		cmap[0] = 0; cmap[1] = 0; cmap[2] = 85;
		cmap[3] = 0; cmap[4] = 0; cmap[5] = 170;
		cmap[6] = 0; cmap[7] = 0; cmap[8] = 255;
		cmap[9] = 0; cmap[10] = 85; cmap[11] = 0;
		cmap[12] = 0; cmap[13] = 170; cmap[14] = 0;
		cmap[15] = 0; cmap[16] = 255; cmap[17] = 0;
		cmap[18] = 85; cmap[19] = 0; cmap[20] = 0;
		cmap[21] = 170; cmap[22] = 0; cmap[23] = 0;
		cmap[24] = 255; cmap[25] = 0; cmap[26] = 0;
	
		scale = (unsigned char*)malloc(sizeof(unsigned char)*9);
		scale[0] = 10; scale[1] = 20; scale[2] = 30;
		scale[3] = 40; scale[4] = 50; scale[5] = 60;
		scale[6] = 70; scale[7] = 80; scale[8] = 90;
		
		srand(1);
	
		//Start timer!
		sw_init();
		sw_start();
				
		printf("Timer started\n");
	
		printf("Start firering canon #1\n");
		canon(0, SHOTS, SHOTS_SPU, 85, 75, 1.0, 0.8, energy);
		printf("Stopped firering canon #1\n");
	
		printf("Start firering canon #2\n");
		canon(1, SHOTS, SHOTS_SPU, 10, 230, 1.0, 0.0, energy);
		printf("Stopped firering canon #2\n");
	
		printf("Start firering canon #3\n");
		canon(2, SHOTS, SHOTS_SPU, 550, 230, -1.0, 0.0, energy);
		printf("Stopped firering canon #3\n");
	
		printf("Start firering canon #4\n");
		canon(3, SHOTS, SHOTS_SPU, 475, 90, -1.0, 0.75, energy);
		printf("Stopped firering canon #4\n");
		
		printf("Start firering canon #5\n");
		canon(4, SHOTS, SHOTS_SPU, 280, 0, 0.0, 1.0, energy);
		printf("Stopped firering canon #5\n");
			
		// Stop timer!
		sw_stop();
		sw_timeString(timer_buffer);
		printf("Time used: %s\n", timer_buffer);
	
		readimage_rgb(input, malloc, &result);
		unsigned long size;

		//printf("Starting harvest\n");		
		for(i=1; i<MAX(dsmcbe_MachineCount(), 1); i++)
		{
			//printf("START - FINISHJOB %i\n", FINISHJOB+i);
			dsmcbe_release(dsmcbe_acquire(FINISHJOB+i, &size, ACQUIRE_MODE_READ));
			//printf("END - FINISHJOB %i\n", FINISHJOB+i);
			//printf("START - ENERGY %i\n", ENERGY+i);
			unsigned char* temp = dsmcbe_acquire(ENERGY+i,&size, ACQUIRE_MODE_READ);

			for(y=0; y<HEIGTH; y++)
			{
				for(x=0; x<WIDTH; x++)
				{
					energy[MAPOFFSET(x,y)] = temp[MAPOFFSET(x,y)];
				}
			}
			dsmcbe_release(temp);
			//printf("END - ENERGY %i\n", ENERGY+i);
		}
		
		//printf("Harvest done\n");

		// Save energy map to image
		for(y=0; y<HEIGTH; y++)
		{
			for(x=0; x<WIDTH; x++)
			{
				if(energy[MAPOFFSET(x,y)] > 0)
				{
					int offset = 3 * fpos(scale, scale_size, energy[MAPOFFSET(x,y)]);
					result.image[MAPOFFSET(x,y)].r = cmap[offset];
					result.image[MAPOFFSET(x,y)].g = cmap[offset+1];
					result.image[MAPOFFSET(x,y)].b = cmap[offset+2];
				}
			}			
		}
		
		//printf("Done\n");

		dsmcbe_release(energy);
		writeimage_rgb(output, &result);
	
		free(cmap);
		free(scale);
		free(result.image);
	}

	if (PPEid != 0)
	{	
		energy = dsmcbe_create(ENERGY+PPEid, sizeof(unsigned char) * (708 * 576));
		memset(energy, 0, sizeof(unsigned char) * (708 * 576));
		
		collectResults(0, SHOTS, SHOTS_SPU, energy);
		collectResults(1, SHOTS, SHOTS_SPU, energy);
		collectResults(2, SHOTS, SHOTS_SPU, energy);
		collectResults(3, SHOTS, SHOTS_SPU, energy);
		collectResults(4, SHOTS, SHOTS_SPU, energy);
		
		dsmcbe_release(energy);
		
		//printf("CREATING - FINISHJOB %i\n", FINISHJOB+PPEid);
		dsmcbe_release(dsmcbe_create(FINISHJOB+PPEid, sizeof(unsigned int)));
		//printf("CREATED\n");
		
		for(i = 0; i < SPU_THREADS; i++)
			pthread_join(threads[i], NULL);
	}
	
	printf("Going to sleep before we die\n");
	//sleep(10);
	return 0;
}
Beispiel #3
0
int main(int argc, char *argv[])
{
	int dx;
	int dy;
	int x;
	int y;
	int tmpcmd = 0;
	int cmd = 0;
	int ret;
	struct sw_world *world = NULL;
	/* TODO: remove this player (world already has one) */
	struct sw_obj *player = NULL;

	ret = sw_start();
	if (ret != 0) {
		sw_logerr("failed to initialize sandworld %d", ret);
		return ret;
	}

	world = sw_world_genstart();
	player = sw_obj_gen(SW_OBJ_PLAYER);

	sw_world_placeobjhome(world, player);
	sw_rucksack_additem(&player->rucksack,
		sw_item_genamount(SW_ITEM_DIRT, 2));

	do {
		switch (cmd) {
		case SW_CMD_UP: case SW_CMD_UP2:
			/* Fallthrough. */
		case SW_CMD_DOWN: case SW_CMD_DOWN2:
			/* Fallthrough. */
		case SW_CMD_LEFT: case SW_CMD_LEFT2:
			/* Fallthrough. */
		case SW_CMD_RIGHT: case SW_CMD_RIGHT2:
			sw_getdelta(cmd, &dx, &dy);
			sw_world_moveobjby(world, player->x, player->y, dx, dy);
			break;
		case SW_CMD_SELF:
			sw_obj_showstats(player);
			break;
		case SW_CMD_RUCKSACK:
			sw_rsui_show(world, &player->rucksack);
			break;
		case SW_CMD_ACTION: case SW_CMD_ACTION2:
			tmpcmd = sw_ui_getdir("Interact with?");
			if (tmpcmd != SW_CMD_NONE) {
				sw_getdelta(tmpcmd, &dx, &dy);
				sw_world_interactobj(world,
					player->x, player->y,
					player->x + dx, player->y + dy);
			}
			break;
		case SW_CMD_ATTACK:
			tmpcmd = sw_ui_getdir("Attack what?");
			if (tmpcmd != SW_CMD_NONE) {
				sw_getdelta(tmpcmd, &dx, &dy);
				sw_world_attackobj(world,
					player->x, player->y,
					player->x + dx, player->y + dy);
			}
			break;
		case SW_CMD_SWAP:
			break;
		case SW_CMD_INFO:
			tmpcmd = sw_ui_getdir("Info on?");
			if (tmpcmd != SW_CMD_NONE) {
				sw_getdelta(tmpcmd, &dx, &dy);
				x = player->x + dx;
				y = player->y + dy;
				if (sw_world_inbounds(world, x, y) &&
					SW_OBJP(world, x, y))
					sw_obj_showstats(SW_OBJP(world, x, y));
			}
			break;
		case SW_CMD_SKILL:
			break;
		case SW_CMD_TOOL:
			tmpcmd = sw_ui_getdir("Use tool on what?");
			if (tmpcmd != SW_CMD_NONE) {
				sw_getdelta(tmpcmd, &dx, &dy);
				sw_world_toolobj(world,
					player->x, player->y,
					player->x + dx, player->y + dy);
			}
			break;
		case SW_CMD_CREATE:
			sw_rsui_create(world, &player->rucksack);
			break;
		case SW_CMD_HELP:
			sw_displayhelp();
			break;
		case SW_CMD_QUIT: case SW_CMD_QUIT2:
			if (sw_ui_confirm("Are you sure? (y/n)"))
				goto exit;
			break;
		default:
			break;
		}

		sw_world_updateobjs(world);
		sw_world_draw(world, 0, 0);
		sw_ui_draw();
		cmd = sw_getcmd();
	} while (1);

exit:
	sw_stop();

	sw_world_freeallobj(world);
	sw_world_free(world);
	return 0;
}