rays 0.1.12 → 0.1.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +5 -5
  2. data/.doc/ext/rays/bitmap.cpp +22 -76
  3. data/.doc/ext/rays/bounds.cpp +95 -125
  4. data/.doc/ext/rays/camera.cpp +171 -0
  5. data/.doc/ext/rays/color.cpp +223 -45
  6. data/.doc/ext/rays/color_space.cpp +146 -46
  7. data/.doc/ext/rays/defs.cpp +183 -0
  8. data/.doc/ext/rays/font.cpp +69 -21
  9. data/.doc/ext/rays/image.cpp +26 -37
  10. data/.doc/ext/rays/matrix.cpp +186 -29
  11. data/.doc/ext/rays/native.cpp +14 -8
  12. data/.doc/ext/rays/noise.cpp +53 -0
  13. data/.doc/ext/rays/painter.cpp +187 -292
  14. data/.doc/ext/rays/point.cpp +96 -77
  15. data/.doc/ext/rays/polygon.cpp +313 -0
  16. data/.doc/ext/rays/polygon_line.cpp +96 -0
  17. data/.doc/ext/rays/polyline.cpp +167 -0
  18. data/.doc/ext/rays/rays.cpp +103 -12
  19. data/.doc/ext/rays/shader.cpp +83 -9
  20. data/LICENSE +21 -0
  21. data/README.md +1 -1
  22. data/Rakefile +24 -9
  23. data/VERSION +1 -1
  24. data/ext/rays/bitmap.cpp +23 -81
  25. data/ext/rays/bounds.cpp +100 -128
  26. data/ext/rays/camera.cpp +186 -0
  27. data/ext/rays/color.cpp +231 -51
  28. data/ext/rays/color_space.cpp +149 -47
  29. data/ext/rays/defs.cpp +183 -0
  30. data/ext/rays/defs.h +26 -2
  31. data/ext/rays/extconf.rb +2 -3
  32. data/ext/rays/font.cpp +74 -24
  33. data/ext/rays/image.cpp +28 -40
  34. data/ext/rays/matrix.cpp +198 -30
  35. data/ext/rays/native.cpp +14 -8
  36. data/ext/rays/noise.cpp +55 -0
  37. data/ext/rays/painter.cpp +203 -298
  38. data/ext/rays/point.cpp +105 -81
  39. data/ext/rays/polygon.cpp +329 -0
  40. data/ext/rays/polygon_line.cpp +99 -0
  41. data/ext/rays/polyline.cpp +176 -0
  42. data/ext/rays/rays.cpp +103 -13
  43. data/ext/rays/shader.cpp +84 -9
  44. data/include/rays.h +10 -2
  45. data/include/rays/bitmap.h +14 -26
  46. data/include/rays/bounds.h +21 -4
  47. data/include/rays/camera.h +74 -0
  48. data/include/rays/color.h +25 -14
  49. data/include/rays/color_space.h +15 -10
  50. data/include/rays/coord.h +114 -0
  51. data/include/rays/debug.h +22 -0
  52. data/include/rays/defs.h +36 -0
  53. data/include/rays/exception.h +6 -2
  54. data/include/rays/font.h +4 -4
  55. data/include/rays/image.h +12 -18
  56. data/include/rays/matrix.h +50 -24
  57. data/include/rays/noise.h +42 -0
  58. data/include/rays/opengl.h +2 -50
  59. data/include/rays/painter.h +89 -93
  60. data/include/rays/point.h +44 -51
  61. data/include/rays/polygon.h +198 -0
  62. data/include/rays/polyline.h +71 -0
  63. data/include/rays/rays.h +3 -0
  64. data/include/rays/ruby.h +7 -1
  65. data/include/rays/ruby/bounds.h +1 -1
  66. data/include/rays/ruby/camera.h +41 -0
  67. data/include/rays/ruby/color.h +1 -1
  68. data/include/rays/ruby/color_space.h +1 -1
  69. data/include/rays/ruby/font.h +1 -1
  70. data/include/rays/ruby/matrix.h +1 -1
  71. data/include/rays/ruby/point.h +1 -1
  72. data/include/rays/ruby/polygon.h +52 -0
  73. data/include/rays/ruby/polyline.h +41 -0
  74. data/include/rays/ruby/rays.h +8 -0
  75. data/include/rays/ruby/shader.h +1 -1
  76. data/include/rays/shader.h +36 -8
  77. data/lib/rays.rb +7 -2
  78. data/lib/rays/bitmap.rb +0 -15
  79. data/lib/rays/bounds.rb +17 -23
  80. data/lib/rays/camera.rb +24 -0
  81. data/lib/rays/color.rb +20 -47
  82. data/lib/rays/color_space.rb +13 -13
  83. data/lib/rays/image.rb +3 -7
  84. data/lib/rays/matrix.rb +28 -0
  85. data/lib/rays/module.rb +4 -19
  86. data/lib/rays/painter.rb +78 -93
  87. data/lib/rays/point.rb +13 -21
  88. data/lib/rays/polygon.rb +58 -0
  89. data/lib/rays/polygon_line.rb +36 -0
  90. data/lib/rays/polyline.rb +32 -0
  91. data/lib/rays/shader.rb +20 -1
  92. data/rays.gemspec +5 -7
  93. data/src/bitmap.h +36 -0
  94. data/src/bounds.cpp +74 -11
  95. data/src/color.cpp +58 -23
  96. data/src/color_space.cpp +52 -34
  97. data/src/color_space.h +22 -0
  98. data/src/coord.cpp +170 -0
  99. data/src/coord.h +35 -0
  100. data/src/font.cpp +118 -0
  101. data/src/font.h +64 -0
  102. data/src/frame_buffer.cpp +37 -71
  103. data/src/frame_buffer.h +4 -4
  104. data/src/image.cpp +172 -98
  105. data/src/image.h +25 -0
  106. data/src/ios/bitmap.h +23 -0
  107. data/src/ios/bitmap.mm +133 -110
  108. data/src/ios/camera.mm +510 -0
  109. data/src/ios/font.mm +50 -62
  110. data/src/ios/helper.h +4 -4
  111. data/src/ios/opengl.mm +19 -4
  112. data/src/ios/rays.mm +3 -0
  113. data/src/matrix.cpp +111 -26
  114. data/src/matrix.h +30 -0
  115. data/src/noise.cpp +74 -0
  116. data/src/opengl.cpp +9 -27
  117. data/src/opengl.h +37 -0
  118. data/src/osx/bitmap.h +23 -0
  119. data/src/osx/bitmap.mm +133 -110
  120. data/src/osx/camera.mm +451 -0
  121. data/src/osx/font.mm +49 -62
  122. data/src/osx/helper.h +2 -2
  123. data/src/osx/opengl.mm +19 -83
  124. data/src/osx/rays.mm +3 -0
  125. data/src/painter.cpp +845 -671
  126. data/src/painter.h +24 -0
  127. data/src/point.cpp +140 -119
  128. data/src/polygon.cpp +1266 -0
  129. data/src/polygon.h +32 -0
  130. data/src/polyline.cpp +160 -0
  131. data/src/polyline.h +69 -0
  132. data/src/render_buffer.cpp +11 -4
  133. data/src/render_buffer.h +2 -2
  134. data/src/shader.cpp +163 -106
  135. data/src/shader.h +38 -0
  136. data/src/shader_program.cpp +533 -0
  137. data/src/{program.h → shader_program.h} +28 -16
  138. data/src/shader_source.cpp +140 -0
  139. data/src/shader_source.h +52 -0
  140. data/src/texture.cpp +136 -160
  141. data/src/texture.h +65 -0
  142. data/src/win32/bitmap.cpp +62 -52
  143. data/src/win32/font.cpp +11 -13
  144. data/src/win32/font.h +24 -0
  145. data/src/win32/gdi.h +6 -6
  146. data/test/helper.rb +0 -3
  147. data/test/test_bitmap.rb +31 -7
  148. data/test/test_bounds.rb +36 -0
  149. data/test/test_color.rb +59 -19
  150. data/test/test_color_space.rb +95 -0
  151. data/test/test_font.rb +5 -0
  152. data/test/test_image.rb +24 -20
  153. data/test/test_matrix.rb +106 -0
  154. data/test/test_painter.rb +157 -51
  155. data/test/test_painter_shape.rb +102 -0
  156. data/test/test_point.rb +29 -0
  157. data/test/test_polygon.rb +234 -0
  158. data/test/test_polygon_line.rb +167 -0
  159. data/test/test_polyline.rb +171 -0
  160. data/test/test_shader.rb +9 -9
  161. metadata +102 -70
  162. data/.doc/ext/rays/texture.cpp +0 -138
  163. data/ext/rays/texture.cpp +0 -149
  164. data/include/rays/ruby/texture.h +0 -41
  165. data/include/rays/texture.h +0 -71
  166. data/lib/rays/texture.rb +0 -24
  167. data/src/program.cpp +0 -648
  168. data/test/test_texture.rb +0 -27
@@ -0,0 +1,30 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __RAYS_SRC_MATRIX_H__
4
+ #define __RAYS_SRC_MATRIX_H__
5
+
6
+
7
+ #include <glm/mat4x4.hpp>
8
+ #include <rays/matrix.h>
9
+
10
+
11
+ namespace Rays
12
+ {
13
+
14
+
15
+ typedef glm::tmat4x4<coord> Mat4;
16
+
17
+
18
+ inline Mat4& to_glm ( Matrix& val) {return *( Mat4*) &val;}
19
+
20
+ inline const Mat4& to_glm (const Matrix& val) {return *(const Mat4*) &val;}
21
+
22
+ inline Matrix& to_rays ( Mat4& val) {return *( Matrix*) &val;}
23
+
24
+ inline const Matrix& to_rays (const Mat4& val) {return *(const Matrix*) &val;}
25
+
26
+
27
+ }// Rays
28
+
29
+
30
+ #endif//EOH
@@ -0,0 +1,74 @@
1
+ #include "rays/noise.h"
2
+
3
+
4
+ #include <glm/gtc/noise.hpp>
5
+ #include "coord.h"
6
+
7
+
8
+ namespace Rays
9
+ {
10
+
11
+
12
+ coord
13
+ perlin (coord x)
14
+ {
15
+ return (coord) glm::perlin(glm::vec2(x, 0));
16
+ }
17
+
18
+ coord
19
+ perlin (coord x, coord y)
20
+ {
21
+ return (coord) glm::perlin(glm::vec2(x, y));
22
+ }
23
+
24
+ coord
25
+ perlin (coord x, coord y, coord z)
26
+ {
27
+ return (coord) glm::perlin(glm::vec3(x, y, z));
28
+ }
29
+
30
+ coord
31
+ perlin (coord x, coord y, coord z, coord w)
32
+ {
33
+ return (coord) glm::perlin(glm::vec4(x, y, z, w));
34
+ }
35
+
36
+ coord
37
+ perlin (const Coord3& position)
38
+ {
39
+ return (coord) glm::perlin(to_glm(position));
40
+ }
41
+
42
+
43
+ coord
44
+ simplex (coord x)
45
+ {
46
+ return (coord) glm::simplex(glm::vec2(x, 0));
47
+ }
48
+
49
+ coord
50
+ simplex (coord x, coord y)
51
+ {
52
+ return (coord) glm::simplex(glm::vec2(x, y));
53
+ }
54
+
55
+ coord
56
+ simplex (coord x, coord y, coord z)
57
+ {
58
+ return (coord) glm::simplex(glm::vec3(x, y, z));
59
+ }
60
+
61
+ coord
62
+ simplex (coord x, coord y, coord z, coord w)
63
+ {
64
+ return (coord) glm::simplex(glm::vec4(x, y, z, w));
65
+ }
66
+
67
+ coord
68
+ simplex (const Coord3& position)
69
+ {
70
+ return (coord) glm::simplex(to_glm(position));
71
+ }
72
+
73
+
74
+ }// Rays
@@ -1,4 +1,4 @@
1
- #include "rays/opengl.h"
1
+ #include "opengl.h"
2
2
 
3
3
 
4
4
  #include "rays/exception.h"
@@ -9,23 +9,11 @@ namespace Rays
9
9
 
10
10
 
11
11
  GLenum
12
- get_error ()
12
+ OpenGL_get_error ()
13
13
  {
14
14
  return glGetError();
15
15
  }
16
16
 
17
- bool
18
- no_error ()
19
- {
20
- return get_error() == GL_NO_ERROR;
21
- }
22
-
23
- bool
24
- is_error (GLenum err)
25
- {
26
- return get_error() == err;
27
- }
28
-
29
17
  static String
30
18
  get_error_name (GLenum error)
31
19
  {
@@ -35,30 +23,24 @@ namespace Rays
35
23
  case GL_INVALID_ENUM: return "GL_INVALID_ENUM";
36
24
  case GL_INVALID_VALUE: return "GL_INVALID_VALUE";
37
25
  case GL_INVALID_OPERATION: return "GL_INVALID_OPERATION";
38
- #ifndef IOS
39
- case GL_STACK_OVERFLOW: return "GL_STACK_OVERFLOW";
40
- case GL_STACK_UNDERFLOW: return "GL_STACK_UNDERFLOW";
41
- #endif
42
26
  case GL_OUT_OF_MEMORY: return "GL_OUT_OF_MEMORY";
27
+ #ifndef IOS
28
+ case GL_STACK_OVERFLOW: return "GL_STACK_OVERFLOW";
29
+ case GL_STACK_UNDERFLOW: return "GL_STACK_UNDERFLOW";
30
+ #endif
43
31
  case 0x506: return "GL_INVALID_FRAMEBUFFER_OPERATION";
44
32
  case 0x8031: return "GL_TABLE_TOO_LARGE";
33
+ default: return "UNKNOWN ERROR";
45
34
  }
46
- return "UNKNOWN ERROR";
47
35
  }
48
36
 
49
37
  void
50
- check_error (const char* file, int line)
38
+ OpenGL_check_error (const char* file, int line)
51
39
  {
52
- GLenum e = get_error();
40
+ GLenum e = OpenGL_get_error();
53
41
  if (e != GL_NO_ERROR)
54
42
  opengl_error(file, line, "OpenGL error %s", get_error_name(e).c_str());
55
43
  }
56
44
 
57
- void
58
- clear_error ()
59
- {
60
- get_error();
61
- }
62
-
63
45
 
64
46
  }// Rays
@@ -0,0 +1,37 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __RAYS_SRC_OPENGL_H__
4
+ #define __RAYS_SRC_OPENGL_H__
5
+
6
+
7
+ #if defined(OSX)
8
+ #include <OpenGL/gl.h>
9
+ #include <OpenGL/glext.h>
10
+ #elif defined(IOS)
11
+ #include <OpenGLES/ES3/gl.h>
12
+ #include <OpenGLES/ES3/glext.h>
13
+ #elif defined(WIN32)
14
+ #include <GL/gl.h>
15
+ #include <GL/glext.h>
16
+ #endif
17
+
18
+ #include <rays/opengl.h>
19
+
20
+
21
+ namespace Rays
22
+ {
23
+
24
+
25
+ void OpenGL_set_context (Context context);
26
+
27
+ Context OpenGL_get_context ();
28
+
29
+ GLenum OpenGL_get_error ();
30
+
31
+ void OpenGL_check_error (const char* file, int line);
32
+
33
+
34
+ }// Rays
35
+
36
+
37
+ #endif//EOH
@@ -0,0 +1,23 @@
1
+ // -*- mode: c++ -*-
2
+ #pragma once
3
+ #ifndef __RAYS_SRC_OSX_BITMAP_H__
4
+ #define __RAYS_SRC_OSX_BITMAP_H__
5
+
6
+
7
+ #import <CoreGraphics/CGImage.h>
8
+ #include "../bitmap.h"
9
+
10
+
11
+ namespace Rays
12
+ {
13
+
14
+
15
+ void Bitmap_draw_image (
16
+ Bitmap* bitmap, CGImageRef image,
17
+ coord x = 0, coord y = 0, coord width = -1, coord height = -1);
18
+
19
+
20
+ }// Rays
21
+
22
+
23
+ #endif//EOH
@@ -1,12 +1,12 @@
1
1
  // -*- objc -*-
2
- #import "rays/bitmap.h"
2
+ #import "bitmap.h"
3
3
 
4
4
 
5
- #include <assert.h>
6
- #include <boost/scoped_array.hpp>
7
5
  #import <Cocoa/Cocoa.h>
8
6
  #include "rays/exception.h"
9
- #include "rays/texture.h"
7
+ #include "../color_space.h"
8
+ #include "../font.h"
9
+ #include "../texture.h"
10
10
  #include "../frame_buffer.h"
11
11
  #include "helper.h"
12
12
 
@@ -26,14 +26,14 @@ namespace Rays
26
26
  if (cs.is_alpha_first())
27
27
  {
28
28
  info |= cs.is_premult()
29
- ? kCGImageAlphaPremultipliedFirst
30
- : kCGImageAlphaFirst;
29
+ ? kCGImageAlphaPremultipliedFirst
30
+ : kCGImageAlphaFirst;
31
31
  }
32
32
  else if (cs.is_alpha_last())
33
33
  {
34
34
  info |= cs.is_premult()
35
- ? kCGImageAlphaPremultipliedLast
36
- : kCGImageAlphaLast;
35
+ ? kCGImageAlphaPremultipliedLast
36
+ : kCGImageAlphaLast;
37
37
  }
38
38
  else if (cs.is_skip_first())
39
39
  info |= kCGImageAlphaNoneSkipFirst;
@@ -59,14 +59,13 @@ namespace Rays
59
59
 
60
60
  ColorSpace color_space;
61
61
 
62
- void* pixels;
62
+ void* pixels = NULL;
63
63
 
64
- CGContextRef context;
64
+ CGContextRef context = NULL;
65
65
 
66
- bool dirty;
66
+ bool modified;
67
67
 
68
68
  Data ()
69
- : pixels(NULL), context(NULL)
70
69
  {
71
70
  clear();
72
71
  }
@@ -85,7 +84,7 @@ namespace Rays
85
84
  if (bpc <= 0 || pitch <= 0) return NULL;
86
85
 
87
86
  CGColorSpaceRef cgcs = NULL;
88
- if (color_space.is_gray())
87
+ if (color_space.is_gray() || color_space.is_alpha())
89
88
  cgcs = CGColorSpaceCreateDeviceGray();
90
89
  else if (color_space.is_rgb() || color_space.is_bgr())
91
90
  cgcs = CGColorSpaceCreateDeviceRGB();
@@ -114,7 +113,7 @@ namespace Rays
114
113
  color_space = COLORSPACE_UNKNOWN;
115
114
  pixels = NULL;
116
115
  context = NULL;
117
- dirty = false;
116
+ modified = false;
118
117
  }
119
118
 
120
119
  };// Bitmap::Data
@@ -134,7 +133,7 @@ namespace Rays
134
133
  this_->self->width = w;
135
134
  this_->self->height = h;
136
135
  this_->self->color_space = cs;
137
- this_->self->dirty = true;
136
+ this_->self->modified = true;
138
137
 
139
138
  size_t size = w * h * cs.Bpp();
140
139
  this_->self->pixels = new uchar[size];
@@ -151,16 +150,127 @@ namespace Rays
151
150
  if (!this_ || !tex)
152
151
  argument_error(__FILE__, __LINE__);
153
152
 
154
- setup_bitmap(this_, tex.width(), tex.height(), tex.color_space(), NULL, false);
153
+ setup_bitmap(
154
+ this_, tex.width(), tex.height(), tex.color_space(), NULL, false);
155
155
 
156
156
  GLenum format, type;
157
- tex.color_space().get_gl_enums(&format, &type, tex.alpha_only());
157
+ ColorSpace_get_gl_format_and_type(&format, &type, tex.color_space());
158
158
 
159
159
  FrameBuffer fb(tex);
160
160
  FrameBufferBinder binder(fb.id());
161
161
 
162
162
  for (int y = 0; y < this_->height(); ++y)
163
- glReadPixels(0, y, this_->width(), 1, format, type, (GLvoid*) this_->at<uchar>(0, y));
163
+ {
164
+ GLvoid* ptr = (GLvoid*) this_->at<uchar>(0, y);
165
+ glReadPixels(0, y, this_->width(), 1, format, type, ptr);
166
+ }
167
+ }
168
+
169
+ Bitmap
170
+ Bitmap_from (const Texture& texture)
171
+ {
172
+ Bitmap bmp;
173
+ setup_bitmap(&bmp, texture);
174
+ return bmp;
175
+ }
176
+
177
+ void
178
+ Bitmap_draw_image (
179
+ Bitmap* bitmap, CGImageRef image,
180
+ coord x, coord y, coord width, coord height)
181
+ {
182
+ if (width == 0 || height == 0) return;
183
+
184
+ if (!bitmap || !image)
185
+ argument_error(__FILE__, __LINE__);
186
+
187
+ CGContextRef context = bitmap->self->get_context();
188
+ if (!context)
189
+ rays_error(__FILE__, __LINE__, "getting CGContext failed.");
190
+
191
+ if (width < 0) width = (coord) CGImageGetWidth(image);
192
+ if (height < 0) height = (coord) CGImageGetHeight(image);
193
+ CGContextDrawImage(context, CGRectMake(x, y, width, height), image);
194
+
195
+ Bitmap_set_modified(bitmap);
196
+ }
197
+
198
+ void
199
+ Bitmap_draw_string (
200
+ Bitmap* bitmap, const RawFont& font, const char* str, coord x, coord y)
201
+ {
202
+ if (!bitmap || !*bitmap || !font || !str)
203
+ argument_error(__FILE__, __LINE__);
204
+
205
+ if (*str == '\0') return;
206
+
207
+ font.draw_string(bitmap->self->get_context(), bitmap->height(), str, x, y);
208
+
209
+ Bitmap_set_modified(bitmap);
210
+ }
211
+
212
+ void
213
+ Bitmap_set_modified (Bitmap* bitmap, bool modified)
214
+ {
215
+ assert(bitmap);
216
+
217
+ bitmap->self->modified = modified;
218
+ }
219
+
220
+ bool
221
+ Bitmap_get_modified (const Bitmap& bitmap)
222
+ {
223
+ return bitmap.self->modified;
224
+ }
225
+
226
+ void
227
+ Bitmap_save (const Bitmap& bmp, const char* path_)
228
+ {
229
+ std::shared_ptr<CGImage> img(bmp.self->get_image(), CGImageRelease);
230
+ if (!img)
231
+ rays_error(__FILE__, __LINE__, "getting CGImage failed.");
232
+
233
+ NSString* path = [NSString stringWithUTF8String: path_];
234
+ NSURL* url = [NSURL fileURLWithPath: path];
235
+ if (!url)
236
+ rays_error(__FILE__, __LINE__, "creating NSURL failed.");
237
+
238
+ std::shared_ptr<CGImageDestination> dest(
239
+ CGImageDestinationCreateWithURL((CFURLRef) url, kUTTypePNG, 1, NULL),
240
+ safe_cfrelease);
241
+ if (!dest)
242
+ rays_error(__FILE__, __LINE__, "CGImageDestinationCreateWithURL() failed.");
243
+
244
+ CGImageDestinationAddImage(dest.get(), img.get(), NULL);
245
+ if (!CGImageDestinationFinalize(dest.get()))
246
+ rays_error(__FILE__, __LINE__, "CGImageDestinationFinalize() failed.");
247
+ }
248
+
249
+ Bitmap
250
+ Bitmap_load (const char* path_)
251
+ {
252
+ if (!path_ || path_[0] == '\0')
253
+ argument_error(__FILE__, __LINE__);
254
+
255
+ NSString* path = [NSString stringWithUTF8String: path_];
256
+ NSBitmapImageRep* imagerep =
257
+ [NSBitmapImageRep imageRepWithContentsOfFile: path];
258
+ if (!imagerep)
259
+ rays_error(__FILE__, __LINE__, "[NSBitmapImageRep imageRepWithContentsOfFile] failed.");
260
+
261
+ CGImageRef image = [imagerep CGImage];
262
+ if (!image)
263
+ rays_error(__FILE__, __LINE__, "[imagerep CGImage] failed.");
264
+
265
+ size_t width = CGImageGetWidth(image);
266
+ size_t height = CGImageGetHeight(image);
267
+
268
+ Bitmap bmp((int) width, (int) height, RGBA);
269
+ if (!bmp)
270
+ rays_error(__FILE__, __LINE__, "invalid bitmap.");
271
+
272
+ Bitmap_draw_image(&bmp, image);
273
+ return bmp;
164
274
  }
165
275
 
166
276
 
@@ -174,17 +284,12 @@ namespace Rays
174
284
  setup_bitmap(this, width, height, color_space, pixels);
175
285
  }
176
286
 
177
- Bitmap::Bitmap (const Texture& texture)
178
- {
179
- setup_bitmap(this, texture);
180
- }
181
-
182
287
  Bitmap::~Bitmap ()
183
288
  {
184
289
  }
185
290
 
186
291
  Bitmap
187
- Bitmap::copy () const
292
+ Bitmap::dup () const
188
293
  {
189
294
  return Bitmap(width(), height(), color_space(), pixels());
190
295
  }
@@ -239,22 +344,13 @@ namespace Rays
239
344
  return const_cast<This*>(this)->pixels();
240
345
  }
241
346
 
242
- bool
243
- Bitmap::dirty () const
244
- {
245
- return self->dirty;
246
- }
247
-
248
- void
249
- Bitmap::set_dirty (bool b)
250
- {
251
- self->dirty = b;
252
- }
253
-
254
347
  Bitmap::operator bool () const
255
348
  {
256
349
  return
257
- self->width > 0 && self->height > 0 && self->color_space && self->pixels;
350
+ self->width > 0 &&
351
+ self->height > 0 &&
352
+ self->color_space &&
353
+ self->pixels;
258
354
  }
259
355
 
260
356
  bool
@@ -264,77 +360,4 @@ namespace Rays
264
360
  }
265
361
 
266
362
 
267
- Bitmap
268
- load_bitmap (const char* path_)
269
- {
270
- if (!path_ || path_[0] == '\0')
271
- argument_error(__FILE__, __LINE__);
272
-
273
- NSString* path = [NSString stringWithUTF8String: path_];
274
- NSBitmapImageRep* imagerep =
275
- [NSBitmapImageRep imageRepWithContentsOfFile: path];
276
- if (!imagerep)
277
- rays_error(__FILE__, __LINE__, "[NSBitmapImageRep imageRepWithContentsOfFile] failed.");
278
-
279
- CGImageRef image = [imagerep CGImage];
280
- if (!image)
281
- rays_error(__FILE__, __LINE__, "[imagerep CGImage] failed.");
282
-
283
- size_t width = CGImageGetWidth(image);
284
- size_t height = CGImageGetHeight(image);
285
-
286
- Bitmap bmp((int) width, (int) height, RGBA);
287
- if (!bmp)
288
- rays_error(__FILE__, __LINE__, "invalid bitmap.");
289
-
290
- CGContextRef context = bmp.self->get_context();
291
- if (!context)
292
- rays_error(__FILE__, __LINE__, "creating CGContext failed.");
293
-
294
- CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
295
- return bmp;
296
- }
297
-
298
- void
299
- save_bitmap (const Bitmap& bmp, const char* path_)
300
- {
301
- boost::shared_ptr<CGImage> img(
302
- bmp.self->get_image(), CGImageRelease);
303
- if (!img)
304
- rays_error(__FILE__, __LINE__, "getting CGImage failed.");
305
-
306
- NSString* path = [NSString stringWithUTF8String: path_];
307
- NSURL* url = [NSURL fileURLWithPath: path];
308
- if (!url)
309
- rays_error(__FILE__, __LINE__, "creating NSURL failed.");
310
-
311
- boost::shared_ptr<CGImageDestination> dest(
312
- CGImageDestinationCreateWithURL((CFURLRef) url, kUTTypePNG, 1, NULL),
313
- safe_cfrelease);
314
- if (!dest)
315
- rays_error(__FILE__, __LINE__, "CGImageDestinationCreateWithURL() failed.");
316
-
317
- CGImageDestinationAddImage(dest.get(), img.get(), NULL);
318
- if (!CGImageDestinationFinalize(dest.get()))
319
- rays_error(__FILE__, __LINE__, "CGImageDestinationFinalize() failed.");
320
- }
321
-
322
-
323
- void draw_string (
324
- CGContextRef, coord, const char*, coord, coord, const Font&);
325
-
326
- void
327
- draw_string (
328
- Bitmap* bmp, const char* str, coord x, coord y, const Font& font)
329
- {
330
- if (!bmp || !*bmp || !str || !font)
331
- argument_error(__FILE__, __LINE__);
332
-
333
- if (*str == '\0') return;
334
-
335
- draw_string(bmp->self->get_context(), bmp->height(), str, x, y, font);
336
- bmp->set_dirty();
337
- }
338
-
339
-
340
363
  }// Rays