I've taken the plunge and downloaded xCode 6 and iOS 8 and am trying to get things working.
So far the Juce demo will run in the simulator (yay), but only if bypassing the OpenGL renderer. There are 4 errors in juce_OpenGL_ios.h. I've been googling and searching Apple's docs but I don't see any reason for these failures. Is there maybe something that's not being correctly linked?
line 197:
context = contextToShare != nullptr
? [context initWithAPI: type sharegroup: [(EAGLContext*) contextToShare sharegroup]]
: [context initWithAPI: type];
"Cannot initialize a parameter of type 'EAGLRenderingAPI' with an lvalue of type 'NSUInteger' (aka 'unsigned long')"
in this case "type" would be "kEAGLRenderingAPIOpenGLES3" and if I replace it directly there's no warning -- no idea why this doesn't work!
back to the earlier point of xCode possibly not importing everything automatically, if I import OpenGLES/ES1/glext.h it builds (if you go back to using glResolveMultisampleFramebufferAPPLE() ).
However now the app has gone black, so guess there's more work to be done somewhere...
arg. ok, finally some explanation buried in the docs:
Using Multisampling
OpenGL ES 3.0 incorporates all features of the APPLE_framebuffer_multisample extension, except for theglResolveMultisampleFramebufferAPPLE function. Instead the glBlitFramebuffer function provides this and other other framebuffer copying options. To resolve a multisampling buffer, set the read and draw framebuffers (as in Using Multisampling to Improve Image Quality) and then use glBlitFramebuffer to copy the entire read framebuffer into the entire draw framebuffer:
Ok, thanks, even if it's not perfect, that's at least a start! Presumably the __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0 stuff is doing its job correctly?
yes, but actually, you might want to check line 59 of juce_opengl.h. It only checks against iOS7, so I believe ES3 won't get included for 8 unless you update this.
Things are looking ok in general in the demo, but rotating the screen causes problems. Rotating the screen to landscape will show the interface still in portrait orientation, just turned sideways.
They've changed how the coordinate system works and also deprecated a bunch of screen rotation stuff this time round, so I'd guess it's related to one of those.