htrdr

Solving radiative transfer in heterogeneous media
git clone git://git.meso-star.fr/htrdr.git
Log | Files | Refs | README | LICENSE

commit 3377989eb536c27a3e8c6361575be2fb23039d53
parent dddf1a2fc28a59662aebb33e05ed27d3cfe4f40d
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue, 24 Jul 2018 12:17:21 +0200

Dump the rendered image in PPM RGB16

Diffstat:
Msrc/htrdr.c | 17+++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/htrdr.c b/src/htrdr.c @@ -142,23 +142,24 @@ error: } static void -dump_buffer(struct htrdr* htrdr) +dump_buffer(struct htrdr_buffer* buf, FILE* output) { struct htrdr_buffer_layout buf_layout; size_t x, y; ASSERT(htrdr); - htrdr_buffer_get_layout(htrdr->buf, &buf_layout); + htrdr_buffer_get_layout(buf, &buf_layout); + ASSERT(buf_layout.elmt_size == sizeof(struct htrdr_accum)); - fprintf(htrdr->output, "P3 %lu %lu\n255\n", + fprintf(output, "P3 %lu %lu\n65535\n", (unsigned long)buf_layout.width, (unsigned long)buf_layout.height); FOR_EACH(y, 0, buf_layout.height) { FOR_EACH(x, 0, buf_layout.width) { - double val = *((double*)htrdr_buffer_at(htrdr->buf, x, y)); - int i; - i = (int)(val * 255); - fprintf(htrdr->output, "%d %d %d\n", i, i, i); + const struct htrdr_accum* acc = htrdr_buffer_at(buf, x, y); + const double E = acc->nweights ? acc->sum_weights/(double)acc->nweights:0; + const uint16_t val_ui16 = (uint16_t)(E * 65535.0 + 0.5/*round*/); + fprintf(output, "%u %u %u\n", val_ui16, val_ui16, val_ui16); } } } @@ -349,7 +350,7 @@ htrdr_run(struct htrdr* htrdr) time_dump(&t0, TIME_ALL, NULL, buf, sizeof(buf)); htrdr_log(htrdr, "Elapsed time: %s\n", buf); - /*dump_buffer(htrdr);*/ + dump_buffer(htrdr->buf, htrdr->output); } exit: return res;