Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /trunk/src/include/Diderot/inline-image.h
ViewVC logotype

Annotation of /trunk/src/include/Diderot/inline-image.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3349 - (view) (download) (as text)

1 : jhr 1115 /*! \file inline-image.h
2 :     *
3 :     * \author John Reppy
4 :     */
5 :    
6 :     /*
7 : jhr 3349 * This code is part of the Diderot Project (http://diderot-language.cs.uchicago.edu)
8 :     *
9 :     * COPYRIGHT (c) 2015 The University of Chicago
10 : jhr 1115 * All rights reserved.
11 :     */
12 :    
13 :     #ifndef _DIDEROT_INLINE_IMAGE_H_
14 :     #define _DIDEROT_INLINE_IMAGE_H_
15 :    
16 :     #ifndef _DIDEROT_TYPES_H_
17 :     # include "types.h"
18 :     #endif
19 :     #ifndef _DIDEROT_INLINE_VEC2_H_
20 :     # include "inline-vec2.h"
21 :     #endif
22 :     #ifndef _DIDEROT_INLINE_VEC3_H_
23 :     # include "inline-vec3.h"
24 :     #endif
25 :     #ifndef _DIDEROT_INLINE_VEC4_H_
26 :     # include "inline-vec4.h"
27 :     #endif
28 :     #ifndef _DIDEROT_INLINE_MATRIX_H_
29 :     # include "inline-matrix.h"
30 :     #endif
31 :    
32 :     /***** 1D Image functions *****/
33 :    
34 :     // check if pos is inside the img, assuming that we have a border of width s.
35 :     //
36 : jhr 2356 STATIC_INLINE bool Inside1 (Diderot_real_t pos, Diderot_image1D_t *img, int s)
37 : jhr 1115 {
38 :     return ((s-1 < pos) && (pos < (img->size[0] - s)));
39 :     }
40 :    
41 : jhr 2356 STATIC_INLINE Diderot_real_t ToImageSpace1 (Diderot_image1D_t *img, Diderot_real_t pos)
42 : jhr 1115 {
43 :     return img->s * pos + img->t;
44 :     }
45 :    
46 :    
47 :     /***** 2D Image functions *****/
48 :    
49 :     // check if pos is inside the img, assuming that we have a border of width s.
50 :     //
51 : jhr 1640 STATIC_INLINE bool Inside2 (Diderot_vec2_t posArg, Diderot_image2D_t *img, int s)
52 : jhr 1115 {
53 :     // NOTE: there might be a vectorized way to do this compare!
54 :     // cvtps2pi -- converts vector of floats to vector of int32_t values
55 :    
56 : jhr 1640 Diderot_union2_t pos;
57 : jhr 1115 pos.v = posArg;
58 :     return ((s-1 < pos.r[0]) && (pos.r[0] < (img->size[0] - s))
59 :     && (s-1 < pos.r[1]) && (pos.r[1] < (img->size[1] - s)));
60 :     }
61 :    
62 : jhr 1640 STATIC_INLINE Diderot_vec2_t ToImageSpace2 (Diderot_image2D_t *img, Diderot_vec2_t p)
63 : jhr 1115 {
64 : jhr 1640 return vec2(dot2(img->w2i[0].v, p), dot2(img->w2i[1].v, p)) + img->tVec;
65 : jhr 1115 }
66 :    
67 : jhr 1640 STATIC_INLINE Diderot_vec2_t ToWorldSpace2 (Diderot_image2D_t *img, Diderot_vec2_t g)
68 : jhr 1115 {
69 : jhr 1640 return vec2(
70 :     dot2(img->w2iT[0].v, g),
71 :     dot2(img->w2iT[1].v, g));
72 : jhr 1115 }
73 :    
74 : jhr 1640 STATIC_INLINE void ToWorldSpace2x2 (Diderot_Mat2x2_t dst, Diderot_image2D_t *img, Diderot_Mat2x2_t src)
75 : jhr 1115 {
76 :     Diderot_Mat2x2_t tmp;
77 : jhr 1640 mulMat2x2Mat2x2 (tmp, img->w2iT, src);
78 :     mulMat2x2Mat2x2 (dst, tmp, img->w2i);
79 : jhr 1115 }
80 :    
81 : jhr 2356 STATIC_INLINE void ToWorldSpace2x2x2 (Diderot_Ten2x2x2_t dst, Diderot_image2D_t *img, Diderot_Ten2x2x2_t src)
82 :     {
83 :     #define PROD(m,n,p) img->w2i[i].r[m] * img->w2i[j].r[n] * img->w2i[k].r[p] * src[m][n].r[p]
84 : jhr 1115
85 : jhr 2356 for (int i = 0; i < 2; i++) {
86 :     for (int j = 0; j < 2; j++) {
87 :     for (int k = 0; k < 2; k++) {
88 :     dst[i][j].r[k] =
89 :     PROD(0,0,0) + PROD(0,0,1) + PROD(0,1,0) + PROD(0,1,1) +
90 :     PROD(1,0,0) + PROD(1,0,1) + PROD(1,1,0) + PROD(1,1,1);
91 :     }
92 :     }
93 :     }
94 :    
95 :     #undef PROD
96 :     }
97 :    
98 :    
99 : jhr 1115 /***** 3D Image functions *****/
100 :    
101 :     // check if pos is inside the img, assuming that we have a border of width s.
102 :     //
103 : jhr 1640 STATIC_INLINE bool Inside3 (Diderot_vec3_t posArg, Diderot_image3D_t *img, int s)
104 : jhr 1115 {
105 :     // NOTE: there might be a vectorized way to do this compare!
106 :     // cvtps2pi -- converts vector of floats to vector of int32_t values
107 :    
108 : jhr 1640 Diderot_union3_t pos;
109 : jhr 1115 pos.v = posArg;
110 :     return ((s-1 < pos.r[0]) && (pos.r[0] < (img->size[0] - s))
111 :     && (s-1 < pos.r[1]) && (pos.r[1] < (img->size[1] - s))
112 :     && (s-1 < pos.r[2]) && (pos.r[2] < (img->size[2] - s)));
113 :     }
114 :    
115 : jhr 1640 STATIC_INLINE Diderot_vec3_t ToImageSpace3 (Diderot_image3D_t *img, Diderot_vec3_t p)
116 : jhr 1115 {
117 : jhr 1640 return vec3(dot3(img->w2i[0].v, p), dot3(img->w2i[1].v, p), dot3(img->w2i[2].v, p)) + img->tVec;
118 : jhr 1115 }
119 :    
120 : jhr 1640 STATIC_INLINE Diderot_vec3_t ToWorldSpace3 (Diderot_image3D_t *img, Diderot_vec3_t g)
121 : jhr 1115 {
122 : jhr 1640 return vec3(
123 :     dot3(img->w2iT[0].v, g),
124 :     dot3(img->w2iT[1].v, g),
125 :     dot3(img->w2iT[2].v, g));
126 : jhr 1115 }
127 :    
128 : jhr 1640 STATIC_INLINE void ToWorldSpace3x3 (Diderot_Mat3x3_t dst, Diderot_image3D_t *img, Diderot_Mat3x3_t src)
129 : jhr 1115 {
130 :     Diderot_Mat3x3_t tmp;
131 : jhr 1640 mulMat3x3Mat3x3 (tmp, img->w2iT, src);
132 :     mulMat3x3Mat3x3 (dst, tmp, img->w2i);
133 : jhr 1115 }
134 :    
135 : jhr 2356 STATIC_INLINE void ToWorldSpace3x3x3 (Diderot_Ten3x3x3_t dst, Diderot_image3D_t *img, Diderot_Ten3x3x3_t src)
136 :     {
137 :     #define PROD(m,n,p) img->w2i[i].r[m] * img->w2i[j].r[n] * img->w2i[k].r[p] * src[m][n].r[p]
138 :    
139 :     for (int i = 0; i < 3; i++) {
140 :     for (int j = 0; j < 3; j++) {
141 :     for (int k = 0; k < 3; k++) {
142 :     dst[i][j].r[k] =
143 :     PROD(0,0,0) + PROD(0,0,1) + PROD(0,0,2) +
144 :     PROD(0,1,0) + PROD(0,1,1) + PROD(0,1,2) +
145 :     PROD(0,2,0) + PROD(0,2,1) + PROD(0,2,2) +
146 :     PROD(1,0,0) + PROD(1,0,1) + PROD(1,0,2) +
147 :     PROD(1,1,0) + PROD(1,1,1) + PROD(1,1,2) +
148 :     PROD(1,2,0) + PROD(1,2,1) + PROD(1,2,2) +
149 :     PROD(2,0,0) + PROD(2,0,1) + PROD(2,0,2) +
150 :     PROD(2,1,0) + PROD(2,1,1) + PROD(2,1,2) +
151 :     PROD(2,2,0) + PROD(2,2,1) + PROD(2,2,2);
152 :     }
153 :     }
154 :     }
155 :    
156 :     #undef PROD
157 :     }
158 :    
159 : jhr 1115 #endif /* !_DIDEROT_INLINE_IMAGE_H_ */

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0