summaryrefslogtreecommitdiffstats
path: root/tests/png.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/png.c')
-rw-r--r--tests/png.c234
1 files changed, 96 insertions, 138 deletions
diff --git a/tests/png.c b/tests/png.c
index a2f647a..e5641f5 100644
--- a/tests/png.c
+++ b/tests/png.c
@@ -17,181 +17,139 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************/
-/* Test PNG file I/O */
-
#include "tests.h"
#include <stdlib.h>
#include <stdio.h>
-#include <stdint.h>
int
main() {
- dmnsn_canvas *canvas;
dmnsn_progress *progress;
- dmnsn_color color;
- dmnsn_CIE_xyY xyY;
- dmnsn_CIE_Lab Lab;
- dmnsn_CIE_Luv Luv;
- dmnsn_sRGB sRGB;
- FILE *ofile, *ifile;
- unsigned int i, j;
- const unsigned int x = 333, y = 300;
+ FILE *ifile, *ofile;
+ dmnsn_scene *scene;
+ dmnsn_canvas *canvas;
/* Set the resilience low for tests */
dmnsn_set_resilience(DMNSN_SEVERITY_LOW);
- /* Allocate a canvas */
- canvas = dmnsn_new_canvas(3*x, y);
- if (!canvas) {
- fprintf(stderr, "--- Allocation of canvas failed! ---\n");
- return EXIT_FAILURE;
- }
+ /* Render the scene */
+ {
+ /* Allocate our default scene */
+ scene = dmnsn_new_default_scene();
+ if (!scene) {
+ fprintf(stderr, "--- Allocation of default scene failed! ---\n");
+ return EXIT_FAILURE;
+ }
- /* Optimize the canvas for PNG export */
- if (dmnsn_png_optimize_canvas(canvas) != 0) {
- dmnsn_delete_canvas(canvas);
- fprintf(stderr, "--- Couldn't optimize canvas for PNG! ---\n");
- return EXIT_FAILURE;
- }
+ /* Optimize the canvas for PNG export */
+ if (dmnsn_png_optimize_canvas(scene->canvas) != 0) {
+ dmnsn_delete_default_scene(scene);
+ fprintf(stderr, "--- Couldn't optimize canvas for PNG! ---\n");
+ return EXIT_FAILURE;
+ }
- for (i = 0; i < x; ++i) {
- for (j = 0; j < y; ++j) {
- /*
- * CIE xyY colorspace
- */
- xyY.Y = 0.5;
- xyY.x = ((double)i)/(x - 1);
- xyY.y = ((double)j)/(y - 1);
-
- color = dmnsn_color_from_xyY(xyY);
- sRGB = dmnsn_sRGB_from_color(color);
-
- if (sRGB.R > 1.0 || sRGB.G > 1.0 || sRGB.B > 1.0
- || sRGB.R < 0.0 || sRGB.G < 0.0 || sRGB.B < 0.0) {
- /* Out of sRGB gamut */
- color.trans = 0.5;
- }
-
- dmnsn_set_pixel(canvas, i, j, color);
-
- /*
- * CIE Lab colorspace
- */
- Lab.L = 75.0;
- Lab.a = 200.0*(((double)i)/(x - 1) - 0.5);
- Lab.b = 200.0*(((double)j)/(y - 1) - 0.5);
-
- color = dmnsn_color_from_Lab(Lab, dmnsn_whitepoint);
- sRGB = dmnsn_sRGB_from_color(color);
-
- if (sRGB.R > 1.0 || sRGB.G > 1.0 || sRGB.B > 1.0
- || sRGB.R < 0.0 || sRGB.G < 0.0 || sRGB.B < 0.0) {
- /* Out of sRGB gamut */
- color.trans = 0.5;
- }
-
- dmnsn_set_pixel(canvas, i + x, j, color);
-
- /*
- * CIE Luv colorspace
- */
- Luv.L = 75.0;
- Luv.u = 200.0*(((double)i)/(x - 1) - 0.5);
- Luv.v = 200.0*(((double)j)/(y - 1) - 0.5);
-
- color = dmnsn_color_from_Luv(Luv, dmnsn_whitepoint);
- sRGB = dmnsn_sRGB_from_color(color);
-
- if (sRGB.R > 1.0 || sRGB.G > 1.0 || sRGB.B > 1.0
- || sRGB.R < 0.0 || sRGB.G < 0.0 || sRGB.B < 0.0) {
- /* Out of sRGB gamut */
- color.trans = 0.5;
- }
-
- dmnsn_set_pixel(canvas, i + 2*x, j, color);
+ /* Render scene */
+
+ progress = dmnsn_raytrace_scene_async(scene);
+ if (!progress) {
+ dmnsn_delete_default_scene(scene);
+ fprintf(stderr, "--- Couldn't start raytracing worker thread! ---\n");
+ return EXIT_FAILURE;
}
- }
- /* Write the image to PNG */
+ progressbar("Raytracing scene: ", progress);
- ofile = fopen("dimension1.png", "wb");
- if (!ofile) {
- fprintf(stderr, "--- Opening 'dimension1.png' for writing failed! ---\n");
- dmnsn_delete_canvas(canvas);
- return EXIT_FAILURE;
- }
+ if (dmnsn_finish_progress(progress) != 0) {
+ dmnsn_delete_default_scene(scene);
+ fprintf(stderr, "--- Raytracing failed! ---\n");
+ return EXIT_FAILURE;
+ }
- progress = dmnsn_png_write_canvas_async(canvas, ofile);
- if (!progress) {
- fprintf(stderr, "--- Creating PNG writing worker thread failed! ---\n");
- fclose(ofile);
- dmnsn_delete_canvas(canvas);
- return EXIT_FAILURE;
- }
+ /* Write the image to PNG */
+
+ ofile = fopen("png1.png", "wb");
+ if (!ofile) {
+ dmnsn_delete_default_scene(scene);
+ fprintf(stderr, "--- Couldn't open 'png1.png' for writing! ---\n");
+ return EXIT_FAILURE;
+ }
- progressbar("Writing PNG file: ", progress);
+ progress = dmnsn_png_write_canvas_async(scene->canvas, ofile);
+ if (!progress) {
+ fclose(ofile);
+ dmnsn_delete_default_scene(scene);
+ fprintf(stderr, "--- Couldn't start PNG writing worker thread! ---\n");
+ return EXIT_FAILURE;
+ }
+
+ progressbar("Writing PNG file: ", progress);
+
+ if (dmnsn_finish_progress(progress) != 0) {
+ fclose(ofile);
+ dmnsn_delete_default_scene(scene);
+ fprintf(stderr, "--- Writing canvas to PNG failed! ---\n");
+ return EXIT_FAILURE;
+ }
- if (dmnsn_finish_progress(progress) != 0) {
- fprintf(stderr, "--- Writing canvas to PNG failed! ---\n");
fclose(ofile);
- dmnsn_delete_canvas(canvas);
- return EXIT_FAILURE;
+ dmnsn_delete_default_scene(scene);
}
- fclose(ofile);
- dmnsn_delete_canvas(canvas);
+ /* Now test PNG import/export */
+ {
+ /* Read the image back from PNG */
- /* Read the image back from the PNG file */
+ ifile = fopen("png1.png", "rb");
+ if (!ifile) {
+ fprintf(stderr, "--- Couldn't open 'png1.png' for reading! ---\n");
+ return EXIT_FAILURE;
+ }
- ifile = fopen("dimension1.png", "rb");
- if (!ifile) {
- fprintf(stderr, "--- Opening 'dimension1.png' for reading failed! ---\n");
- return EXIT_FAILURE;
- }
+ progress = dmnsn_png_read_canvas_async(&canvas, ifile);
+ if (!progress) {
+ fclose(ifile);
+ fprintf(stderr, "--- Couldn't start PNG reading worker thread! ---\n");
+ return EXIT_FAILURE;
+ }
- progress = dmnsn_png_read_canvas_async(&canvas, ifile);
- if (!progress) {
- fprintf(stderr, "--- Creating PNG reading worker thread failed! ---\n");
- fclose(ifile);
- return EXIT_FAILURE;
- }
+ progressbar("Reading PNG file: ", progress);
- progressbar("Reading PNG file: ", progress);
+ if (dmnsn_finish_progress(progress) != 0) {
+ fclose(ifile);
+ fprintf(stderr, "--- Reading canvas from PNG failed! ---\n");
+ return EXIT_FAILURE;
+ }
- if (dmnsn_finish_progress(progress) != 0) {
- fprintf(stderr, "--- Reading canvas from PNG failed! ---\n");
fclose(ifile);
- return EXIT_FAILURE;
- }
- fclose(ifile);
+ /* And write it back */
- /* ... and write it back again */
+ ofile = fopen("png2.png", "wb");
+ if (!ofile) {
+ fprintf(stderr, "--- Couldn't open 'png2.png' for writing! ---\n");
+ dmnsn_delete_canvas(canvas);
+ return EXIT_FAILURE;
+ }
- ofile = fopen("dimension2.png", "wb");
- if (!ofile) {
- fprintf(stderr, "--- Opening 'dimension2.png' for writing failed! ---\n");
- return EXIT_FAILURE;
- }
+ progress = dmnsn_png_write_canvas_async(canvas, ofile);
+ if (!progress) {
+ fclose(ofile);
+ dmnsn_delete_canvas(canvas);
+ fprintf(stderr, "--- Couldn't start PNG writing worker thread! ---\n");
+ return EXIT_FAILURE;
+ }
- progress = dmnsn_png_write_canvas_async(canvas, ofile);
- if (!progress) {
- fprintf(stderr, "--- Creating PNG writing worker thread failed! ---\n");
- fclose(ofile);
- dmnsn_delete_canvas(canvas);
- return EXIT_FAILURE;
- }
+ progressbar("Writing PNG file: ", progress);
- progressbar("Writing PNG file: ", progress);
+ if (dmnsn_finish_progress(progress) != 0) {
+ fclose(ofile);
+ dmnsn_delete_canvas(canvas);
+ fprintf(stderr, "--- Writing canvas to PNG failed! ---\n");
+ return EXIT_FAILURE;
+ }
- if (dmnsn_finish_progress(progress) != 0) {
- fprintf(stderr, "--- Writing canvas to PNG failed! ---\n");
fclose(ofile);
dmnsn_delete_canvas(canvas);
- return EXIT_FAILURE;
}
- fclose(ofile);
- dmnsn_delete_canvas(canvas);
return EXIT_SUCCESS;
}