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

SCM Repository

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

Annotation of /branches/pure-cfg/src/include/Diderot/inline-image.h

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : jhr 710 /*! \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 710 * All rights reserved.
11 :     */
12 :    
13 :     #ifndef _DIDEROT_INLINE_IMAGE_H_
14 :     #define _DIDEROT_INLINE_IMAGE_H_
15 :    
16 :     #ifndef _DIDEROT_TYPES_H_
17 : jhr 726 # include "types.h"
18 : jhr 710 #endif
19 : jhr 726 #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 : jhr 983 #ifndef _DIDEROT_INLINE_MATRIX_H_
29 :     # include "inline-matrix.h"
30 :     #endif
31 : jhr 710
32 : jhr 857 /***** 1D Image functions *****/
33 :    
34 :     // check if pos is inside the img, assuming that we have a border of width s.
35 :     //
36 : jhr 1593 STATIC_INLINE bool Inside1 (float pos, Diderot_image1D_t *img, int s)
37 : jhr 857 {
38 :     return ((s-1 < pos) && (pos < (img->size[0] - s)));
39 :     }
40 :    
41 : jhr 1593 STATIC_INLINE float ToImageSpace1 (Diderot_image1D_t *img, float pos)
42 : jhr 857 {
43 : jhr 991 return img->s * pos + img->t;
44 : jhr 857 }
45 :    
46 : jhr 991
47 : jhr 726 /***** 2D Image functions *****/
48 :    
49 : jhr 710 // check if pos is inside the img, assuming that we have a border of width s.
50 :     //
51 : jhr 1593 STATIC_INLINE bool Inside2 (Diderot_vec2_t posArg, Diderot_image2D_t *img, int s)
52 : jhr 710 {
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 1593 Diderot_union2_t pos;
57 : jhr 710 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 1593 STATIC_INLINE Diderot_vec2_t ToImageSpace2 (Diderot_image2D_t *img, Diderot_vec2_t p)
63 : glk 724 {
64 : jhr 1593 return vec2(dot2(img->w2i[0].v, p), dot2(img->w2i[1].v, p)) + img->tVec;
65 : glk 724 }
66 :    
67 : jhr 1593 STATIC_INLINE Diderot_vec2_t ToWorldSpace2 (Diderot_image2D_t *img, Diderot_vec2_t g)
68 : jhr 983 {
69 : jhr 1593 return vec2(
70 :     dot2(img->w2iT[0].v, g),
71 :     dot2(img->w2iT[1].v, g));
72 : jhr 983 }
73 :    
74 : jhr 1593 STATIC_INLINE void ToWorldSpace2x2 (Diderot_Mat2x2_t dst, Diderot_image2D_t *img, Diderot_Mat2x2_t src)
75 : jhr 983 {
76 : jhr 991 Diderot_Mat2x2_t tmp;
77 : jhr 1593 mulMat2x2Mat2x2 (tmp, img->w2iT, src);
78 :     mulMat2x2Mat2x2 (dst, tmp, img->w2i);
79 : jhr 983 }
80 :    
81 : jhr 991
82 : jhr 726 /***** 3D Image functions *****/
83 :    
84 : jhr 710 // check if pos is inside the img, assuming that we have a border of width s.
85 :     //
86 : jhr 1593 STATIC_INLINE bool Inside3 (Diderot_vec3_t posArg, Diderot_image3D_t *img, int s)
87 : jhr 710 {
88 :     // NOTE: there might be a vectorized way to do this compare!
89 :     // cvtps2pi -- converts vector of floats to vector of int32_t values
90 :    
91 : jhr 1593 Diderot_union3_t pos;
92 : jhr 710 pos.v = posArg;
93 :     return ((s-1 < pos.r[0]) && (pos.r[0] < (img->size[0] - s))
94 :     && (s-1 < pos.r[1]) && (pos.r[1] < (img->size[1] - s))
95 :     && (s-1 < pos.r[2]) && (pos.r[2] < (img->size[2] - s)));
96 :     }
97 :    
98 : jhr 1593 STATIC_INLINE Diderot_vec3_t ToImageSpace3 (Diderot_image3D_t *img, Diderot_vec3_t p)
99 : jhr 710 {
100 : jhr 1593 return vec3(dot3(img->w2i[0].v, p), dot3(img->w2i[1].v, p), dot3(img->w2i[2].v, p)) + img->tVec;
101 : jhr 710 }
102 :    
103 : jhr 1593 STATIC_INLINE Diderot_vec3_t ToWorldSpace3 (Diderot_image3D_t *img, Diderot_vec3_t g)
104 : jhr 983 {
105 : jhr 1593 return vec3(
106 :     dot3(img->w2iT[0].v, g),
107 :     dot3(img->w2iT[1].v, g),
108 :     dot3(img->w2iT[2].v, g));
109 : jhr 983 }
110 :    
111 : jhr 1593 STATIC_INLINE void ToWorldSpace3x3 (Diderot_Mat3x3_t dst, Diderot_image3D_t *img, Diderot_Mat3x3_t src)
112 : jhr 983 {
113 : jhr 991 Diderot_Mat3x3_t tmp;
114 : jhr 1593 mulMat3x3Mat3x3 (tmp, img->w2iT, src);
115 :     mulMat3x3Mat3x3 (dst, tmp, img->w2i);
116 : jhr 983 }
117 :    
118 : jhr 710 #endif /* !_DIDEROT_INLINE_IMAGE_H_ */

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