Inexor
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
macros.hpp
Go to the documentation of this file.
1 
2 #define writetex(t, body) \
3  { \
4  uchar *dstrow = t.data; \
5  loop(y, t.h) \
6  { \
7  for(uchar *dst = dstrow, *end = &dstrow[t.w*t.bpp]; dst < end; dst += t.bpp) \
8  { \
9  body; \
10  } \
11  dstrow += t.pitch; \
12  } \
13  }
14 
15 #define readwritetex(t, s, body) \
16  { \
17  uchar *dstrow = t.data, *srcrow = s.data; \
18  loop(y, t.h) \
19  { \
20  for(uchar *dst = dstrow, *src = srcrow, *end = &srcrow[s.w*s.bpp]; src < end; dst += t.bpp, src += s.bpp) \
21  { \
22  body; \
23  } \
24  dstrow += t.pitch; \
25  srcrow += s.pitch; \
26  } \
27  }
28 
29 #define read2writetex(t, s1, src1, s2, src2, body) \
30  { \
31  uchar *dstrow = t.data, *src1row = s1.data, *src2row = s2.data; \
32  loop(y, t.h) \
33  { \
34  for(uchar *dst = dstrow, *end = &dstrow[t.w*t.bpp], *src1 = src1row, *src2 = src2row; dst < end; dst += t.bpp, src1 += s1.bpp, src2 += s2.bpp) \
35  { \
36  body; \
37  } \
38  dstrow += t.pitch; \
39  src1row += s1.pitch; \
40  src2row += s2.pitch; \
41  } \
42  }
43 
44 
45 #define readwritergbtex(t, s, body) \
46  { \
47  if(t.bpp >= 3) { readwritetex(t, s, body); } \
48  else \
49  { \
50  ImageData rgb(t.w, t.h, 3); \
51  read2writetex(rgb, t, orig, s, src, \
52  { \
53  switch(t.bpp) \
54  { \
55  case 1: dst[0] = orig[0]; dst[1] = orig[0]; dst[2] = orig[0]; break; \
56  case 2: dst[0] = orig[0]; dst[1] = orig[1]; dst[2] = orig[1]; break; \
57  } \
58  body; \
59  }); \
60  t.replace(rgb); \
61  } \
62  }
63 
64 #define readwritergbatex(t, s, body) \
65  { \
66  if(t.bpp >= 4) { readwritetex(t, s, body); } \
67  else \
68  { \
69  ImageData rgba(t.w, t.h, 4); \
70  read2writetex(rgba, t, orig, s, src, \
71  { \
72  switch(t.bpp) \
73  { \
74  case 1: dst[0] = orig[0]; dst[1] = orig[0]; dst[2] = orig[0]; break; \
75  case 2: dst[0] = orig[0]; dst[1] = orig[1]; dst[2] = orig[1]; break; \
76  case 3: dst[0] = orig[0]; dst[1] = orig[1]; dst[2] = orig[2]; break; \
77  } \
78  body; \
79  }); \
80  t.replace(rgba); \
81  } \
82  }