diff options
Diffstat (limited to 'libs/cocos2d/CCTexture2D.h')
-rwxr-xr-x | libs/cocos2d/CCTexture2D.h | 328 |
1 files changed, 328 insertions, 0 deletions
diff --git a/libs/cocos2d/CCTexture2D.h b/libs/cocos2d/CCTexture2D.h new file mode 100755 index 0000000..45eea9c --- /dev/null +++ b/libs/cocos2d/CCTexture2D.h | |||
@@ -0,0 +1,328 @@ | |||
1 | /* | ||
2 | |||
3 | ===== IMPORTANT ===== | ||
4 | |||
5 | This is sample code demonstrating API, technology or techniques in development. | ||
6 | Although this sample code has been reviewed for technical accuracy, it is not | ||
7 | final. Apple is supplying this information to help you plan for the adoption of | ||
8 | the technologies and programming interfaces described herein. This information | ||
9 | is subject to change, and software implemented based on this sample code should | ||
10 | be tested with final operating system software and final documentation. Newer | ||
11 | versions of this sample code may be provided with future seeds of the API or | ||
12 | technology. For information about updates to this and other developer | ||
13 | documentation, view the New & Updated sidebars in subsequent documentation | ||
14 | seeds. | ||
15 | |||
16 | ===================== | ||
17 | |||
18 | File: Texture2D.h | ||
19 | Abstract: Creates OpenGL 2D textures from images or text. | ||
20 | |||
21 | Version: 1.6 | ||
22 | |||
23 | Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. | ||
24 | ("Apple") in consideration of your agreement to the following terms, and your | ||
25 | use, installation, modification or redistribution of this Apple software | ||
26 | constitutes acceptance of these terms. If you do not agree with these terms, | ||
27 | please do not use, install, modify or redistribute this Apple software. | ||
28 | |||
29 | In consideration of your agreement to abide by the following terms, and subject | ||
30 | to these terms, Apple grants you a personal, non-exclusive license, under | ||
31 | Apple's copyrights in this original Apple software (the "Apple Software"), to | ||
32 | use, reproduce, modify and redistribute the Apple Software, with or without | ||
33 | modifications, in source and/or binary forms; provided that if you redistribute | ||
34 | the Apple Software in its entirety and without modifications, you must retain | ||
35 | this notice and the following text and disclaimers in all such redistributions | ||
36 | of the Apple Software. | ||
37 | Neither the name, trademarks, service marks or logos of Apple Inc. may be used | ||
38 | to endorse or promote products derived from the Apple Software without specific | ||
39 | prior written permission from Apple. Except as expressly stated in this notice, | ||
40 | no other rights or licenses, express or implied, are granted by Apple herein, | ||
41 | including but not limited to any patent rights that may be infringed by your | ||
42 | derivative works or by other works in which the Apple Software may be | ||
43 | incorporated. | ||
44 | |||
45 | The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO | ||
46 | WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED | ||
47 | WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
48 | PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN | ||
49 | COMBINATION WITH YOUR PRODUCTS. | ||
50 | |||
51 | IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR | ||
52 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE | ||
53 | GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
54 | ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR | ||
55 | DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF | ||
56 | CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF | ||
57 | APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
58 | |||
59 | Copyright (C) 2008 Apple Inc. All Rights Reserved. | ||
60 | |||
61 | */ | ||
62 | |||
63 | #import <Availability.h> | ||
64 | |||
65 | #ifdef __IPHONE_OS_VERSION_MAX_ALLOWED | ||
66 | #import <UIKit/UIKit.h> // for UIImage | ||
67 | #endif | ||
68 | |||
69 | #import <Foundation/Foundation.h> // for NSObject | ||
70 | |||
71 | #import "Platforms/CCGL.h" // OpenGL stuff | ||
72 | #import "Platforms/CCNS.h" // Next-Step stuff | ||
73 | |||
74 | //CONSTANTS: | ||
75 | |||
76 | /** @typedef CCTexture2DPixelFormat | ||
77 | Possible texture pixel formats | ||
78 | */ | ||
79 | typedef enum { | ||
80 | kCCTexture2DPixelFormat_Automatic = 0, | ||
81 | //! 32-bit texture: RGBA8888 | ||
82 | kCCTexture2DPixelFormat_RGBA8888, | ||
83 | //! 16-bit texture without Alpha channel | ||
84 | kCCTexture2DPixelFormat_RGB565, | ||
85 | //! 8-bit textures used as masks | ||
86 | kCCTexture2DPixelFormat_A8, | ||
87 | //! 8-bit intensity texture | ||
88 | kCCTexture2DPixelFormat_I8, | ||
89 | //! 16-bit textures used as masks | ||
90 | kCCTexture2DPixelFormat_AI88, | ||
91 | //! 16-bit textures: RGBA4444 | ||
92 | kCCTexture2DPixelFormat_RGBA4444, | ||
93 | //! 16-bit textures: RGB5A1 | ||
94 | kCCTexture2DPixelFormat_RGB5A1, | ||
95 | //! 4-bit PVRTC-compressed texture: PVRTC4 | ||
96 | kCCTexture2DPixelFormat_PVRTC4, | ||
97 | //! 2-bit PVRTC-compressed texture: PVRTC2 | ||
98 | kCCTexture2DPixelFormat_PVRTC2, | ||
99 | |||
100 | //! Default texture format: RGBA8888 | ||
101 | kCCTexture2DPixelFormat_Default = kCCTexture2DPixelFormat_RGBA8888, | ||
102 | |||
103 | // backward compatibility stuff | ||
104 | kTexture2DPixelFormat_Automatic = kCCTexture2DPixelFormat_Automatic, | ||
105 | kTexture2DPixelFormat_RGBA8888 = kCCTexture2DPixelFormat_RGBA8888, | ||
106 | kTexture2DPixelFormat_RGB565 = kCCTexture2DPixelFormat_RGB565, | ||
107 | kTexture2DPixelFormat_A8 = kCCTexture2DPixelFormat_A8, | ||
108 | kTexture2DPixelFormat_RGBA4444 = kCCTexture2DPixelFormat_RGBA4444, | ||
109 | kTexture2DPixelFormat_RGB5A1 = kCCTexture2DPixelFormat_RGB5A1, | ||
110 | kTexture2DPixelFormat_Default = kCCTexture2DPixelFormat_Default | ||
111 | |||
112 | } CCTexture2DPixelFormat; | ||
113 | |||
114 | //CLASS INTERFACES: | ||
115 | |||
116 | /** CCTexture2D class. | ||
117 | * This class allows to easily create OpenGL 2D textures from images, text or raw data. | ||
118 | * The created CCTexture2D object will always have power-of-two dimensions. | ||
119 | * Depending on how you create the CCTexture2D object, the actual image area of the texture might be smaller than the texture dimensions i.e. "contentSize" != (pixelsWide, pixelsHigh) and (maxS, maxT) != (1.0, 1.0). | ||
120 | * Be aware that the content of the generated textures will be upside-down! | ||
121 | */ | ||
122 | @interface CCTexture2D : NSObject | ||
123 | { | ||
124 | GLuint name_; | ||
125 | CGSize size_; | ||
126 | NSUInteger width_, | ||
127 | height_; | ||
128 | CCTexture2DPixelFormat format_; | ||
129 | GLfloat maxS_, | ||
130 | maxT_; | ||
131 | BOOL hasPremultipliedAlpha_; | ||
132 | } | ||
133 | /** Intializes with a texture2d with data */ | ||
134 | - (id) initWithData:(const void*)data pixelFormat:(CCTexture2DPixelFormat)pixelFormat pixelsWide:(NSUInteger)width pixelsHigh:(NSUInteger)height contentSize:(CGSize)size; | ||
135 | |||
136 | /** These functions are needed to create mutable textures */ | ||
137 | - (void) releaseData:(void*)data; | ||
138 | - (void*) keepData:(void*)data length:(NSUInteger)length; | ||
139 | |||
140 | /** pixel format of the texture */ | ||
141 | @property(nonatomic,readonly) CCTexture2DPixelFormat pixelFormat; | ||
142 | /** width in pixels */ | ||
143 | @property(nonatomic,readonly) NSUInteger pixelsWide; | ||
144 | /** hight in pixels */ | ||
145 | @property(nonatomic,readonly) NSUInteger pixelsHigh; | ||
146 | |||
147 | /** texture name */ | ||
148 | @property(nonatomic,readonly) GLuint name; | ||
149 | |||
150 | /** returns content size of the texture in pixels */ | ||
151 | @property(nonatomic,readonly, nonatomic) CGSize contentSizeInPixels; | ||
152 | |||
153 | /** texture max S */ | ||
154 | @property(nonatomic,readwrite) GLfloat maxS; | ||
155 | /** texture max T */ | ||
156 | @property(nonatomic,readwrite) GLfloat maxT; | ||
157 | /** whether or not the texture has their Alpha premultiplied */ | ||
158 | @property(nonatomic,readonly) BOOL hasPremultipliedAlpha; | ||
159 | |||
160 | /** returns the content size of the texture in points */ | ||
161 | -(CGSize) contentSize; | ||
162 | @end | ||
163 | |||
164 | /** | ||
165 | Drawing extensions to make it easy to draw basic quads using a CCTexture2D object. | ||
166 | These functions require GL_TEXTURE_2D and both GL_VERTEX_ARRAY and GL_TEXTURE_COORD_ARRAY client states to be enabled. | ||
167 | */ | ||
168 | @interface CCTexture2D (Drawing) | ||
169 | /** draws a texture at a given point */ | ||
170 | - (void) drawAtPoint:(CGPoint)point; | ||
171 | /** draws a texture inside a rect */ | ||
172 | - (void) drawInRect:(CGRect)rect; | ||
173 | @end | ||
174 | |||
175 | /** | ||
176 | Extensions to make it easy to create a CCTexture2D object from an image file. | ||
177 | Note that RGBA type textures will have their alpha premultiplied - use the blending mode (GL_ONE, GL_ONE_MINUS_SRC_ALPHA). | ||
178 | */ | ||
179 | @interface CCTexture2D (Image) | ||
180 | /** Initializes a texture from a UIImage object */ | ||
181 | #ifdef __IPHONE_OS_VERSION_MAX_ALLOWED | ||
182 | - (id) initWithImage:(UIImage *)uiImage; | ||
183 | #elif defined(__MAC_OS_X_VERSION_MAX_ALLOWED) | ||
184 | - (id) initWithImage:(CGImageRef)cgImage; | ||
185 | #endif | ||
186 | @end | ||
187 | |||
188 | /** | ||
189 | Extensions to make it easy to create a CCTexture2D object from a string of text. | ||
190 | Note that the generated textures are of type A8 - use the blending mode (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA). | ||
191 | */ | ||
192 | @interface CCTexture2D (Text) | ||
193 | /** Initializes a texture from a string with dimensions, alignment, line break mode, font name and font size | ||
194 | Supported lineBreakModes: | ||
195 | - iOS: all UILineBreakMode supported modes | ||
196 | - Mac: Only NSLineBreakByWordWrapping is supported. | ||
197 | @since v1.0 | ||
198 | */ | ||
199 | - (id) initWithString:(NSString*)string dimensions:(CGSize)dimensions alignment:(CCTextAlignment)alignment lineBreakMode:(CCLineBreakMode)lineBreakMode fontName:(NSString*)name fontSize:(CGFloat)size; | ||
200 | /** Initializes a texture from a string with dimensions, alignment, font name and font size */ | ||
201 | - (id) initWithString:(NSString*)string dimensions:(CGSize)dimensions alignment:(CCTextAlignment)alignment fontName:(NSString*)name fontSize:(CGFloat)size; | ||
202 | /** Initializes a texture from a string with font name and font size */ | ||
203 | - (id) initWithString:(NSString*)string fontName:(NSString*)name fontSize:(CGFloat)size; | ||
204 | @end | ||
205 | |||
206 | |||
207 | /** | ||
208 | Extensions to make it easy to create a CCTexture2D object from a PVRTC file | ||
209 | Note that the generated textures don't have their alpha premultiplied - use the blending mode (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA). | ||
210 | */ | ||
211 | @interface CCTexture2D (PVRSupport) | ||
212 | /** Initializes a texture from a PVR Texture Compressed (PVRTC) buffer | ||
213 | * | ||
214 | * IMPORTANT: This method is only defined on iOS. It is not supported on the Mac version. | ||
215 | */ | ||
216 | #ifdef __IPHONE_OS_VERSION_MAX_ALLOWED | ||
217 | -(id) initWithPVRTCData: (const void*)data level:(int)level bpp:(int)bpp hasAlpha:(BOOL)hasAlpha length:(int)length pixelFormat:(CCTexture2DPixelFormat)pixelFormat; | ||
218 | #endif // __IPHONE_OS_VERSION_MAX_ALLOWED | ||
219 | /** Initializes a texture from a PVR file. | ||
220 | |||
221 | Supported PVR formats: | ||
222 | - BGRA 8888 | ||
223 | - RGBA 8888 | ||
224 | - RGBA 4444 | ||
225 | - RGBA 5551 | ||
226 | - RBG 565 | ||
227 | - A 8 | ||
228 | - I 8 | ||
229 | - AI 8 | ||
230 | - PVRTC 2BPP | ||
231 | - PVRTC 4BPP | ||
232 | |||
233 | By default PVR images are treated as if they alpha channel is NOT premultiplied. You can override this behavior with this class method: | ||
234 | - PVRImagesHavePremultipliedAlpha:(BOOL)haveAlphaPremultiplied; | ||
235 | |||
236 | IMPORTANT: This method is only defined on iOS. It is not supported on the Mac version. | ||
237 | |||
238 | */ | ||
239 | -(id) initWithPVRFile: (NSString*) file; | ||
240 | |||
241 | /** treats (or not) PVR files as if they have alpha premultiplied. | ||
242 | Since it is impossible to know at runtime if the PVR images have the alpha channel premultiplied, it is | ||
243 | possible load them as if they have (or not) the alpha channel premultiplied. | ||
244 | |||
245 | By default it is disabled. | ||
246 | |||
247 | @since v0.99.5 | ||
248 | */ | ||
249 | +(void) PVRImagesHavePremultipliedAlpha:(BOOL)haveAlphaPremultiplied; | ||
250 | @end | ||
251 | |||
252 | /** | ||
253 | Extension to set the Min / Mag filter | ||
254 | */ | ||
255 | typedef struct _ccTexParams { | ||
256 | GLuint minFilter; | ||
257 | GLuint magFilter; | ||
258 | GLuint wrapS; | ||
259 | GLuint wrapT; | ||
260 | } ccTexParams; | ||
261 | |||
262 | @interface CCTexture2D (GLFilter) | ||
263 | /** sets the min filter, mag filter, wrap s and wrap t texture parameters. | ||
264 | If the texture size is NPOT (non power of 2), then in can only use GL_CLAMP_TO_EDGE in GL_TEXTURE_WRAP_{S,T}. | ||
265 | @since v0.8 | ||
266 | */ | ||
267 | -(void) setTexParameters: (ccTexParams*) texParams; | ||
268 | |||
269 | /** sets antialias texture parameters: | ||
270 | - GL_TEXTURE_MIN_FILTER = GL_LINEAR | ||
271 | - GL_TEXTURE_MAG_FILTER = GL_LINEAR | ||
272 | |||
273 | @since v0.8 | ||
274 | */ | ||
275 | - (void) setAntiAliasTexParameters; | ||
276 | |||
277 | /** sets alias texture parameters: | ||
278 | - GL_TEXTURE_MIN_FILTER = GL_NEAREST | ||
279 | - GL_TEXTURE_MAG_FILTER = GL_NEAREST | ||
280 | |||
281 | @since v0.8 | ||
282 | */ | ||
283 | - (void) setAliasTexParameters; | ||
284 | |||
285 | |||
286 | /** Generates mipmap images for the texture. | ||
287 | It only works if the texture size is POT (power of 2). | ||
288 | @since v0.99.0 | ||
289 | */ | ||
290 | -(void) generateMipmap; | ||
291 | |||
292 | |||
293 | @end | ||
294 | |||
295 | @interface CCTexture2D (PixelFormat) | ||
296 | /** sets the default pixel format for UIImages that contains alpha channel. | ||
297 | If the UIImage contains alpha channel, then the options are: | ||
298 | - generate 32-bit textures: kCCTexture2DPixelFormat_RGBA8888 (default one) | ||
299 | - generate 16-bit textures: kCCTexture2DPixelFormat_RGBA4444 | ||
300 | - generate 16-bit textures: kCCTexture2DPixelFormat_RGB5A1 | ||
301 | - generate 16-bit textures: kCCTexture2DPixelFormat_RGB565 | ||
302 | - generate 8-bit textures: kCCTexture2DPixelFormat_A8 (only use it if you use just 1 color) | ||
303 | |||
304 | How does it work ? | ||
305 | - If the image is an RGBA (with Alpha) then the default pixel format will be used (it can be a 8-bit, 16-bit or 32-bit texture) | ||
306 | - If the image is an RGB (without Alpha) then an RGB565 texture will be used (16-bit texture) | ||
307 | |||
308 | This parameter is not valid for PVR images. | ||
309 | |||
310 | @since v0.8 | ||
311 | */ | ||
312 | +(void) setDefaultAlphaPixelFormat:(CCTexture2DPixelFormat)format; | ||
313 | |||
314 | /** returns the alpha pixel format | ||
315 | @since v0.8 | ||
316 | */ | ||
317 | +(CCTexture2DPixelFormat) defaultAlphaPixelFormat; | ||
318 | |||
319 | /** returns the bits-per-pixel of the in-memory OpenGL texture | ||
320 | @since v1.0 | ||
321 | */ | ||
322 | -(NSUInteger) bitsPerPixelForFormat; | ||
323 | @end | ||
324 | |||
325 | |||
326 | |||
327 | |||
328 | |||