RSS

(root)/iphone/common : 70 : source/ES2Shader.m

To get this branch, use:
bzr branch /browse/iphone/common

« back to all changes in this revision

Viewing changes to source/ES2Shader.m

Dömötör Gulyás
2010-08-08 17:59:45
Revision ID: dognotdog@gmail.com-20100808155945-d5p1gehk7jjd3dzo
adds method to free VertexArray resources for shared objects; changes +sharedQuad to have the tex coords rightside up; adds support for VAO on hardware supporting it; changes GLESView animation to be driven by CADisplayLink; ES2Shader can now set arbitrarily named uniforms in shaders, also gets better error checking

Show diffs side-by-side

added added

removed removed

120
120
        sampler0loc = glGetUniformLocation(programObj, "tex0");
121
121
        glUniform1i(sampler0loc, 0);
122
122
 
 
123
        uniformDict = [[NSMutableDictionary alloc] init];
 
124
 
123
125
        return self;
124
126
}
125
127
 
212
214
        sampler0loc = glGetUniformLocation(programObj, "tex0");
213
215
        glUniform1i(sampler0loc, 0);
214
216
 
 
217
        uniformDict = [[NSMutableDictionary alloc] init];
 
218
 
215
219
        return self;
216
220
}
217
221
 
220
224
        glDeleteProgram(programObj);
221
225
        glDeleteShader(fsShader);
222
226
        glDeleteShader(vsShader);
 
227
        
 
228
        [uniformDict release];
223
229
 
224
230
        [super dealloc];
225
231
}
229
235
        glUseProgram(programObj);
230
236
}
231
237
 
 
238
- (void) setUniformInteger: (GLint) i named: (NSString*) name
 
239
{
 
240
        GLuint loc = [[uniformDict objectForKey: name] unsignedIntValue];
 
241
        if (!loc)
 
242
        {
 
243
                loc = glGetUniformLocation(programObj, [name UTF8String]);
 
244
                [uniformDict setObject: [NSNumber numberWithUnsignedInt: loc] forKey: name];
 
245
        }
 
246
        
 
247
        if (loc != -1)
 
248
                glUniform1i(loc, i);
 
249
        else
 
250
                NSLog(@"failed to set uniform %@", name);
 
251
}
 
252
 
 
253
- (void) setUniformFloat: (float) f named: (NSString*) name
 
254
{
 
255
        GLuint loc = [[uniformDict objectForKey: name] unsignedIntValue];
 
256
        if (!loc)
 
257
        {
 
258
                loc = glGetUniformLocation(programObj, [name UTF8String]);
 
259
                [uniformDict setObject: [NSNumber numberWithUnsignedInt: loc] forKey: name];
 
260
        }
 
261
        
 
262
        if (loc != -1)
 
263
                glUniform1f(loc, f);
 
264
        else
 
265
                NSLog(@"failed to set uniform %@", name);
 
266
}
 
267
 
 
268
- (void) setUniformFloat: (float*) f count: (int) count named: (NSString*) name
 
269
{
 
270
        GLuint loc = [[uniformDict objectForKey: name] unsignedIntValue];
 
271
        if (!loc)
 
272
        {
 
273
                loc = glGetUniformLocation(programObj, [name UTF8String]);
 
274
                [uniformDict setObject: [NSNumber numberWithUnsignedInt: loc] forKey: name];
 
275
        }
 
276
        
 
277
        if (loc != -1)
 
278
                glUniform1fv(loc, count, f);
 
279
        else
 
280
                NSLog(@"failed to set uniform %@", name);
 
281
}
 
282
 
 
283
 
 
284
 
232
285
- (void) setModelviewMatrix: (m16*) m
233
286
{
234
287
        m16 nm = mtranspose(minverse(*m));
237
290
        if (!normalMatrixLoc)
238
291
                normalMatrixLoc = glGetUniformLocation(programObj, "normalMatrix");
239
292
        
240
 
        glUniformMatrix4fv(modelviewMatrixLoc, 1, GL_FALSE, m->a);
241
 
        glUniformMatrix4fv(normalMatrixLoc, 1, GL_FALSE, nm.a);
 
293
        if (modelviewMatrixLoc != -1)
 
294
                glUniformMatrix4fv(modelviewMatrixLoc, 1, GL_FALSE, m->a);
 
295
        if (normalMatrixLoc != -1)
 
296
                glUniformMatrix4fv(normalMatrixLoc, 1, GL_FALSE, nm.a);
242
297
}
243
298
 
244
299
- (void) setProjectionMatrix: (m16*) m
245
300
{
246
301
        if (!projectionMatrixLoc)
247
302
                projectionMatrixLoc = glGetUniformLocation(programObj, "projectionMatrix");
248
 
        glUniformMatrix4fv(projectionMatrixLoc, 1, GL_FALSE, m->a);
 
303
 
 
304
        if (projectionMatrixLoc != -1)
 
305
                glUniformMatrix4fv(projectionMatrixLoc, 1, GL_FALSE, m->a);
249
306
}
250
307
- (void) setTextureMatrix: (m16*) m
251
308
{
252
309
        if (!textureMatrixLoc)
253
310
                textureMatrixLoc = glGetUniformLocation(programObj, "textureMatrix");
254
 
        glUniformMatrix4fv(textureMatrixLoc, 1, GL_FALSE, m->a);
 
311
 
 
312
        if (textureMatrixLoc != -1)
 
313
                glUniformMatrix4fv(textureMatrixLoc, 1, GL_FALSE, m->a);
255
314
}
256
315
 
257
316
- (void) setColorRed: (float) r green: (float) g blue: (float) b alpha: (float) a
258
317
{
259
318
        if (!colorLoc)
260
319
                colorLoc = glGetUniformLocation(programObj, "color");
261
 
        glUniform4f(colorLoc, r, g, b, a);
 
320
 
 
321
        if (colorLoc != -1)
 
322
                glUniform4f(colorLoc, r, g, b, a);
262
323
}
263
324
 
264
325
 

Loggerhead 1.17 is a web-based interface for Bazaar branches