diff options
Diffstat (limited to 'libs/cocos2d/Platforms/iOS/ES1Renderer.m')
-rwxr-xr-x | libs/cocos2d/Platforms/iOS/ES1Renderer.m | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/libs/cocos2d/Platforms/iOS/ES1Renderer.m b/libs/cocos2d/Platforms/iOS/ES1Renderer.m new file mode 100755 index 0000000..398d946 --- /dev/null +++ b/libs/cocos2d/Platforms/iOS/ES1Renderer.m | |||
@@ -0,0 +1,259 @@ | |||
1 | /* | ||
2 | * cocos2d for iPhone: http://www.cocos2d-iphone.org | ||
3 | * | ||
4 | * Copyright (c) 2010 Ricardo Quesada | ||
5 | * Copyright (c) 2011 Zynga Inc. | ||
6 | * | ||
7 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
8 | * of this software and associated documentation files (the "Software"), to deal | ||
9 | * in the Software without restriction, including without limitation the rights | ||
10 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
11 | * copies of the Software, and to permit persons to whom the Software is | ||
12 | * furnished to do so, subject to the following conditions: | ||
13 | * | ||
14 | * The above copyright notice and this permission notice shall be included in | ||
15 | * all copies or substantial portions of the Software. | ||
16 | * | ||
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
20 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
23 | * THE SOFTWARE. | ||
24 | * | ||
25 | * | ||
26 | * File autogenerated with Xcode. Adapted for cocos2d needs. | ||
27 | */ | ||
28 | |||
29 | // Only compile this code on iOS. These files should NOT be included on your Mac project. | ||
30 | // But in case they are included, it won't be compiled. | ||
31 | #import <Availability.h> | ||
32 | #ifdef __IPHONE_OS_VERSION_MAX_ALLOWED | ||
33 | |||
34 | #import "ES1Renderer.h" | ||
35 | #import "../../Support/OpenGL_Internal.h" | ||
36 | #import "../../ccMacros.h" | ||
37 | |||
38 | |||
39 | @interface ES1Renderer (private) | ||
40 | |||
41 | - (GLenum) convertPixelFormat:(int) pixelFormat; | ||
42 | |||
43 | @end | ||
44 | |||
45 | |||
46 | @implementation ES1Renderer | ||
47 | |||
48 | @synthesize context=context_; | ||
49 | |||
50 | - (id) initWithDepthFormat:(unsigned int)depthFormat withPixelFormat:(unsigned int)pixelFormat withSharegroup:(EAGLSharegroup*)sharegroup withMultiSampling:(BOOL) multiSampling withNumberOfSamples:(unsigned int) requestedSamples | ||
51 | { | ||
52 | if ((self = [super init])) | ||
53 | { | ||
54 | if ( sharegroup == nil ) | ||
55 | { | ||
56 | context_ = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; | ||
57 | } | ||
58 | else | ||
59 | { | ||
60 | context_ = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1 sharegroup:sharegroup]; | ||
61 | } | ||
62 | |||
63 | if (!context_ || ![EAGLContext setCurrentContext:context_]) | ||
64 | { | ||
65 | [self release]; | ||
66 | return nil; | ||
67 | } | ||
68 | |||
69 | // Create default framebuffer object. The backing will be allocated for the current layer in -resizeFromLayer | ||
70 | glGenFramebuffersOES(1, &defaultFramebuffer_); | ||
71 | NSAssert( defaultFramebuffer_, @"Can't create default frame buffer"); | ||
72 | glGenRenderbuffersOES(1, &colorRenderbuffer_); | ||
73 | NSAssert( colorRenderbuffer_, @"Can't create default render buffer"); | ||
74 | |||
75 | glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer_); | ||
76 | glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer_); | ||
77 | glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer_); | ||
78 | |||
79 | depthFormat_ = depthFormat; | ||
80 | |||
81 | if( depthFormat_ ) { | ||
82 | // glGenRenderbuffersOES(1, &depthBuffer_); | ||
83 | // glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthBuffer_); | ||
84 | // glRenderbufferStorageOES(GL_RENDERBUFFER_OES, depthFormat_, 100, 100); | ||
85 | // glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthBuffer_); | ||
86 | |||
87 | // default buffer | ||
88 | // glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer_); | ||
89 | } | ||
90 | |||
91 | pixelFormat_ = pixelFormat; | ||
92 | multiSampling_ = multiSampling; | ||
93 | if (multiSampling_) | ||
94 | { | ||
95 | GLint maxSamplesAllowed; | ||
96 | glGetIntegerv(GL_MAX_SAMPLES_APPLE, &maxSamplesAllowed); | ||
97 | samplesToUse_ = MIN(maxSamplesAllowed,requestedSamples); | ||
98 | |||
99 | /* Create the MSAA framebuffer (offscreen) */ | ||
100 | glGenFramebuffersOES(1, &msaaFramebuffer_); | ||
101 | glBindFramebufferOES(GL_FRAMEBUFFER_OES, msaaFramebuffer_); | ||
102 | |||
103 | } | ||
104 | |||
105 | CHECK_GL_ERROR(); | ||
106 | } | ||
107 | |||
108 | return self; | ||
109 | } | ||
110 | |||
111 | - (BOOL)resizeFromLayer:(CAEAGLLayer *)layer | ||
112 | { | ||
113 | // Allocate color buffer backing based on the current layer size | ||
114 | |||
115 | glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer_); | ||
116 | |||
117 | if (![context_ renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:layer]) | ||
118 | { | ||
119 | CCLOG(@"failed to call context"); | ||
120 | } | ||
121 | |||
122 | glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth_); | ||
123 | glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight_); | ||
124 | |||
125 | CCLOG(@"cocos2d: surface size: %dx%d", (int)backingWidth_, (int)backingHeight_); | ||
126 | |||
127 | if (multiSampling_) | ||
128 | { | ||
129 | |||
130 | if ( msaaColorbuffer_) { | ||
131 | glDeleteRenderbuffersOES(1, &msaaColorbuffer_); | ||
132 | msaaColorbuffer_ = 0; | ||
133 | } | ||
134 | |||
135 | /* Create the offscreen MSAA color buffer. | ||
136 | After rendering, the contents of this will be blitted into ColorRenderbuffer */ | ||
137 | |||
138 | //msaaFrameBuffer needs to be binded | ||
139 | glBindFramebufferOES(GL_FRAMEBUFFER_OES, msaaFramebuffer_); | ||
140 | glGenRenderbuffersOES(1, &msaaColorbuffer_); | ||
141 | glBindRenderbufferOES(GL_RENDERBUFFER_OES, msaaColorbuffer_); | ||
142 | glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER_OES, samplesToUse_,pixelFormat_ , backingWidth_, backingHeight_); | ||
143 | glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, msaaColorbuffer_); | ||
144 | |||
145 | if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) | ||
146 | { | ||
147 | CCLOG(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)); | ||
148 | return NO; | ||
149 | } | ||
150 | } | ||
151 | |||
152 | if (depthFormat_) | ||
153 | { | ||
154 | if( ! depthBuffer_ ) | ||
155 | glGenRenderbuffersOES(1, &depthBuffer_); | ||
156 | |||
157 | glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthBuffer_); | ||
158 | if( multiSampling_ ) | ||
159 | glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER_OES, samplesToUse_, depthFormat_,backingWidth_, backingHeight_); | ||
160 | else | ||
161 | glRenderbufferStorageOES(GL_RENDERBUFFER_OES, depthFormat_, backingWidth_, backingHeight_); | ||
162 | glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthBuffer_); | ||
163 | |||
164 | // bind color buffer | ||
165 | glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer_); | ||
166 | } | ||
167 | |||
168 | glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer_); | ||
169 | |||
170 | if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) | ||
171 | { | ||
172 | CCLOG(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)); | ||
173 | return NO; | ||
174 | } | ||
175 | |||
176 | CHECK_GL_ERROR(); | ||
177 | |||
178 | return YES; | ||
179 | } | ||
180 | |||
181 | -(CGSize) backingSize | ||
182 | { | ||
183 | return CGSizeMake( backingWidth_, backingHeight_); | ||
184 | } | ||
185 | |||
186 | - (NSString*) description | ||
187 | { | ||
188 | return [NSString stringWithFormat:@"<%@ = %08X | size = %ix%i>", [self class], self, backingWidth_, backingHeight_]; | ||
189 | } | ||
190 | |||
191 | |||
192 | - (void)dealloc | ||
193 | { | ||
194 | CCLOGINFO(@"cocos2d: deallocing %@", self); | ||
195 | |||
196 | // Tear down GL | ||
197 | if(defaultFramebuffer_) | ||
198 | { | ||
199 | glDeleteFramebuffersOES(1, &defaultFramebuffer_); | ||
200 | defaultFramebuffer_ = 0; | ||
201 | } | ||
202 | |||
203 | if(colorRenderbuffer_) | ||
204 | { | ||
205 | glDeleteRenderbuffersOES(1, &colorRenderbuffer_); | ||
206 | colorRenderbuffer_ = 0; | ||
207 | } | ||
208 | |||
209 | if( depthBuffer_ ) | ||
210 | { | ||
211 | glDeleteRenderbuffersOES(1, &depthBuffer_); | ||
212 | depthBuffer_ = 0; | ||
213 | } | ||
214 | |||
215 | if ( msaaColorbuffer_) | ||
216 | { | ||
217 | glDeleteRenderbuffersOES(1, &msaaColorbuffer_); | ||
218 | msaaColorbuffer_ = 0; | ||
219 | } | ||
220 | |||
221 | if ( msaaFramebuffer_) | ||
222 | { | ||
223 | glDeleteRenderbuffersOES(1, &msaaFramebuffer_); | ||
224 | msaaFramebuffer_ = 0; | ||
225 | } | ||
226 | |||
227 | // Tear down context | ||
228 | if ([EAGLContext currentContext] == context_) | ||
229 | [EAGLContext setCurrentContext:nil]; | ||
230 | |||
231 | [context_ release]; | ||
232 | context_ = nil; | ||
233 | |||
234 | [super dealloc]; | ||
235 | } | ||
236 | |||
237 | - (unsigned int) colorRenderBuffer | ||
238 | { | ||
239 | return colorRenderbuffer_; | ||
240 | } | ||
241 | |||
242 | - (unsigned int) defaultFrameBuffer | ||
243 | { | ||
244 | return defaultFramebuffer_; | ||
245 | } | ||
246 | |||
247 | - (unsigned int) msaaFrameBuffer | ||
248 | { | ||
249 | return msaaFramebuffer_; | ||
250 | } | ||
251 | |||
252 | - (unsigned int) msaaColorBuffer | ||
253 | { | ||
254 | return msaaColorbuffer_; | ||
255 | } | ||
256 | |||
257 | @end | ||
258 | |||
259 | #endif // __IPHONE_OS_VERSION_MAX_ALLOWED | ||