Add -j option

This commit is contained in:
Josh Holtrop 2026-06-18 08:40:48 -04:00
parent 36e12d1e90
commit 1a5b1292ee

View File

@ -96,11 +96,16 @@ static void * render_thread(void * varg)
static void renderThreaded(Scene & scene,
unsigned char * data,
int width,
int height)
int height,
int num_threads)
{
int num_threads = sysconf(_SC_NPROCESSORS_ONLN);
/* a non-positive override means auto-detect the available cores */
if (num_threads < 1)
num_threads = 1;
{
num_threads = sysconf(_SC_NPROCESSORS_ONLN);
if (num_threads < 1)
num_threads = 1;
}
render_thread_state_t state;
state.scene = &scene;
@ -132,6 +137,7 @@ void usage(const char * progname)
cout << " -d|--max-depth <max-recursion-depth>" << endl;
cout << " -a|--ambient-occlusion <ambient-occlusion-level>" << endl;
cout << " -p|--preview (means -w400 -h300 -m1 -d8 -a0)" << endl;
cout << " -j|--threads <num-threads> (default: number of cores)" << endl;
cout << " --hosts <hosts-file>" << endl;
exit(42);
}
@ -194,6 +200,7 @@ int main(int argc, char * argv[])
unsigned char * data = NULL;
const char * output_file_name = "fart.bmp";
bool child = false;
int num_threads = 0; /* 0 means auto-detect available cores */
static const struct option long_options[] = {
{ "ambient-occlusion", required_argument, NULL, 'a' },
@ -204,6 +211,7 @@ int main(int argc, char * argv[])
{ "field-of-view", required_argument, NULL, 'f' },
{ "max-depth", required_argument, NULL, 'd' },
{ "preview", no_argument, NULL, 'p' },
{ "threads", required_argument, NULL, 'j' },
{ "help", no_argument, NULL, 256 },
{ "host", required_argument, NULL, 257 },
{ "port", required_argument, NULL, 258 },
@ -212,7 +220,7 @@ int main(int argc, char * argv[])
{ NULL, 0, NULL, 0 }
};
while ((opt = getopt_long(argc, argv, "a:o:w:h:m:f:d:p",
while ((opt = getopt_long(argc, argv, "a:o:w:h:m:f:d:pj:",
long_options, &option_index)) != -1)
{
switch (opt)
@ -258,6 +266,9 @@ int main(int argc, char * argv[])
scene_options["max-depth"] = "8";
client_options.push_back("--preview");
break;
case 'j':
num_threads = atoi(optarg);
break;
case 256:
usage(argv[0]);
break;
@ -378,8 +389,8 @@ int main(int argc, char * argv[])
}
else
{
/* local multithreaded render using all available cores */
renderThreaded(scene, data, width, height);
/* local multithreaded render; num_threads of 0 auto-detects cores */
renderThreaded(scene, data, width, height, num_threads);
}
gettimeofday(&after, NULL); /* stop timing */