1 | /***************************************
2 | $Header$
3 |
4 | This file uses Imlib2 to turn guchar arrays into Imlib images, render sets of
5 | triangles into those images, and send back the guchar arrays.
6 | ***************************************/
7 |
8 |
9 | #include "illuminator.h"
10 |
11 |
12 | #undef __FUNCT__
13 | #define __FUNCT__ "imlib2_render_triangles"
14 |
15 | /*++++++++++++++++++++++++++++++++++++++
16 | This simply takes a bunch of triangle vertex and color data and renders it
17 | into the "data" buffer in RGBA format using Imlib2.
18 |
19 | int imlib2_render_triangles It returns zero or an error code.
20 |
21 | DATA32 *data The data buffer into which to render with
22 | +latex+4$\times$width$\times$height
23 | +html+ 4 x width x height
24 | bytes.
25 |
26 | int width Width of the data buffer in pixels.
27 |
28 | int height Height of the data buffer in pixels.
29 |
30 | int num_triangles Number of triangles to render.
31 |
32 | int *triangle_coords Integer coordinates of the triangles.
33 |
34 | PetscScalar *triangle_colors R,G,B,A colors of the triangles between 0 and 1.
35 |
36 | int color_skip Number of PetscScalars to skip between color sets.
37 |
38 | PetscScalar *triangle_shades Shading of each triangle, zero for black to one
39 | for normal.
40 |
41 | int shade_skip Number of PetscScalars to skip between shades.
42 | ++++++++++++++++++++++++++++++++++++++*/
43 |
44 | int imlib2_render_triangles (DATA32 *data, int width, int height,
45 | int num_triangles, int *triangle_coords,
46 | PetscScalar *triangle_colors, int color_skip,
47 | PetscScalar *triangle_shades, int shade_skip)
48 | {
49 | int i;
50 | Imlib_Image myimage =
51 | imlib_create_image_using_data (width, height, data);
52 | imlib_context_set_image (myimage);
53 |
54 | for (i=0; i<num_triangles; i++)
55 | {
56 | ImlibPolygon polly = imlib_polygon_new ();
57 | imlib_polygon_add_point
58 | (polly, triangle_coords [6*i], triangle_coords [6*i+1]);
59 | imlib_polygon_add_point
60 | (polly, triangle_coords[6*i+2], triangle_coords[6*i+3]);
61 | imlib_polygon_add_point
62 | (polly, triangle_coords[6*i+4], triangle_coords[6*i+5]);
63 | imlib_context_set_color (255 * triangle_colors [color_skip*i] *
64 | triangle_shades [shade_skip*i],
65 | 255 * triangle_colors [color_skip*i+1] *
66 | triangle_shades [shade_skip*i],
67 | 255 * triangle_colors [color_skip*i+2] *
68 | triangle_shades [shade_skip*i],
69 | 255 * triangle_colors [color_skip*i+3]);
70 | imlib_image_fill_polygon (polly);
71 | imlib_polygon_free (polly);
72 | }
73 |
74 | imlib_free_image ();
75 | }