[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-physics / third-party / chipmunk2d / objectivec / include / ObjectiveChipmunk / ChipmunkImageSampler.h
1 // Copyright 2013 Howling Moon Software. All rights reserved.
2 // See http://chipmunk2d.net/legal.php for more information.
3
4 #import "ObjectiveChipmunk/ObjectiveChipmunk.h"
5 #import "ChipmunkAutoGeometry.h"
6
7 #import <TargetConditionals.h>
8
9 #if TARGET_OS_IPHONE == 1
10         #import <CoreGraphics/CoreGraphics.h>
11 #endif
12
13
14 /**
15         Generic sampler used with bitmap data.
16         Currently limited to 8 bit per component data.
17         Bitmap samplers currently provide no filtering, but could be easily extended to do so.
18 */
19 @interface ChipmunkBitmapSampler : ChipmunkAbstractSampler {
20 @private
21         NSUInteger _width, _height, _stride;
22         NSUInteger _bytesPerPixel, _component;
23         
24         bool _flip;
25         const uint8_t *_pixels;
26         NSData *_pixelData;
27         
28         cpFloat _borderValue;
29         
30         cpBB _outputRect;
31 }
32
33 /// Width of the bitmap in pixels.
34 @property(nonatomic, readonly) NSUInteger width;
35
36 /// Height of the bitmap in pixels.
37 @property(nonatomic, readonly) NSUInteger height;
38
39 /// Bytes per pixel of the bitmap. (ex: RGBA8888 would be 4)
40 @property(nonatomic, readonly) NSUInteger bytesPerPixel;
41
42 /// Zero-based ndex of the component to sample. (ex: alpha of RGBA would be 3)
43 @property(nonatomic, assign) NSUInteger component;
44
45 /// NSData object holding the pixel data.
46 @property(nonatomic, readonly) NSData *pixelData;
47
48 /// Rect that the image maps to.
49 /// Defaults to (0.5, 0.5, width - 0.5, height - 0.5) so that pixel centers will be cleanly sampled.
50 @property(nonatomic, assign) cpBB outputRect;
51
52 /**
53         Init a sampler from bitmap data.
54         Stride refers to the length of a row of pixels in bytes. (Generally just w*h*bytesPerPixel unless there is padding)
55         Image must use one byte per component, but can have any number of components.
56         @c component refers to the 0-based index of the component to sample. (i.e. 3 would sample the alpha in an RGBA bitmap)
57         @c flip allows you to flip the image vertically to match how it migh be drawn.
58         @c pixelData can be either a NSData or NSMutableData (i.e. for deformable terrain) that contains the bitmap data.
59 */
60 -(id)initWithWidth:(NSUInteger)width height:(NSUInteger)height stride:(NSUInteger)stride bytesPerPixel:(NSUInteger)bytesPerPixel component:(NSUInteger)component flip:(bool)flip pixelData:(NSData *)pixelData;
61
62 /// Set the border of the bitmap to repeat the edge pixels.
63 -(void)setBorderRepeat;
64
65 /// Set the border of the bitmap to be a specific value.
66 -(void)setBorderValue:(cpFloat)borderValue;
67
68 /// March the entire image.
69 -(ChipmunkPolylineSet *)marchAllWithBorder:(bool)bordered hard:(bool)hard;
70
71 @end
72
73
74
75 /// Sampler built on top of a CGBitmapContext to allow deformable geometry.
76 /// Very efficient when paired with a ChipmunkTileCache.
77 @interface ChipmunkCGContextSampler : ChipmunkBitmapSampler {
78 @private
79         CGContextRef _context;
80 }
81
82 /// CGBitmapContext for this sampler.
83 @property(nonatomic, readonly) CGContextRef context;
84
85 /// NSMutableData object holding the pixel data.
86 @property(nonatomic, readonly) NSMutableData *pixelData;
87
88 /// Initialize a context based sampler. Must provide options for a valid context.
89 /// Find out more here in the Quartz 2D Programming Guide.
90 -(id)initWithWidth:(unsigned long)width height:(unsigned long)height colorSpace:(CGColorSpaceRef)colorSpace bitmapInfo:(CGBitmapInfo)bitmapInfo component:(NSUInteger)component;
91
92 @end
93
94
95
96 /// A CGBitmapContext sampler initialized with an CGImage.
97 @interface ChipmunkImageSampler : ChipmunkCGContextSampler
98
99 /// Helper method to easily load CGImageRefs by path. You are responsible for releasing the CGImage.
100 +(CGImageRef)loadImage:(NSURL *)url;
101
102 /// Initialize an image sampler of a certain size with a CGImage.
103 /// If isMask is TRUE, the image will be loaded as a black and white image, if FALSE only the image alpha will be loaded.
104 -(id)initWithImage:(CGImageRef)image isMask:(bool)isMask contextWidth:(NSUInteger)width contextHeight:(NSUInteger)height;
105
106 /// Initialize an image sampler with an image file.
107 /// If isMask is TRUE, the image will be loaded as a black and white image, if FALSE only the image alpha will be loaded.
108 -(id)initWithImageFile:(NSURL *)url isMask:(bool)isMask;
109
110 /// Return an autoreleased image sampler initialized with an image file.
111 /// If isMask is TRUE, the image will be loaded as a black and white image, if FALSE only the image alpha will be loaded.
112 +(ChipmunkImageSampler *)samplerWithImageFile:(NSURL *)url isMask:(bool)isMask;
113
114 @end