Exemplo n.º 1
0
int	init(int argc, char** argv, t_env* env)
{
	id_memset(env, 0, sizeof(*env));
	if (argc != 4)
		return (id_error("id_rt width height fileToLoad"));
	env->width = id_atoi(argv[1]);
	env->height = id_atoi(argv[2]);
	if (env->height <= 0 || env->width <= 0)
		return (id_error("width and height should be over 0"));
	if (init_input(env, argv[3]))
		return (-1);
	env->screen = idx_init("Raytracing", env->width,
			       env->height);
	if (env->screen == NULL)
		return (-1);
	env->pixels = malloc(sizeof(*env->pixels) * (env->width * env->height));
	if (!env->pixels)
		return (-1);
	if (build_thread(env))
		return (-1);
	env->global_work = 0;
	env->scale = (((env->width * env->height) / 10) * (ANTIALIASING / 2)) * 2;
	env->current_work = 0;
	return (0);
}
Exemplo n.º 2
0
void group_t::create_threads() {
  assert(state == PASSIVE);
  assert(factory != NULL);
  state = ACTIVE;
  all_workers_should_exit = false;
  factory->create_shared_state();
  pthreads = new pthread_t[nb_workers];
  creation_barrier.init(nb_workers);
  destruction_barrier.init(nb_workers);
  for (worker_id_t id = 1; id < nb_workers; id++) {
    std::pair<worker_id_t, group_p>* worker_init = 
      new std::pair<worker_id_t, group_p>;
    worker_init->first = id;
    worker_init->second = this;
    pthread_create(&(pthreads[id]), NULL, build_thread, worker_init);
  }
  pthreads[0] = pthread_self();
  std::pair<worker_id_t, group_p>* worker0_init = 
    new std::pair<worker_id_t, group_p>;
  worker0_init->first = 0;
  worker0_init->second = this;
  build_thread(worker0_init);
  creation_barrier.wait();
  controllers[0]->init();
#ifndef DISABLE_INTERRUPTS
  ping_loop_create();
#endif
}