Recently, I’ve been trying to learn how to use OpenGL ES 2.0 and GLKit to create simple 2D games. I’ve been following this tutorial by Ray Wenderlich and it’s been very helpful so far. However, upon profiling my project (and his) for leaks I found that GLKBaseEffect‘s prepareToDraw: (specifically, GLKShaderBlockNode‘s copyWithZone) is leaking everywhere – I’m using ARC, by the way. After searching around quite a bit it seems that this is a bug in GLKBaseEffect and that I can’t do anything about it. Is this true? The only solution I’ve found suggested is scrapping GLKBaseEffect entirely.
If that’s the case, I have to roll my own custom vertex and fragment shaders as a result. However, I have no idea how to do this. I would appreciate any resources or help on creating custom shaders and adapting the code in the above tutorial to use those instead.
Thank you very much for your time. 🙂
Well, after a decent amount of procrastination, I decided to bite the bullet and just do it. The leaks are gone now, although it took me a while to get it working. I read through OpenGL ES 2.0 for iPhone, Chapter 4 and learned about vertex and fragment shaders along with how to compile them and link them. After understanding how it worked, I put the author’s
GLProgramhelper class into my project to handle all the boilerplate stuff and got to work quickly. Then, I created two shaders, nearly identical to the ones found here.I followed his instructions on getting the attribute and uniform locations and stored them in a structure, passing them all at once to my sprite objects as they were initialized. Then, when it came time to render I passed in all the information for my attributes as I had done earlier when I was using
GLKBaseEffect; the only difference (aside from manually binding the texture to a texture unit) was that I had to pass in themodelviewMatrixandprojectionMatrixuniforms in myself instead of setting aGLKBaseEffectproperty.