views:

207

answers:

1

I'm using an EAGL context and view for my application's normal screen rendering. This involves (as expected) creating and binding a renderbuffer and framebuffer to the view's CAEAGLLayer. This works as expected.

However, at some times, I want to use OpenGL to render some geometry fully offscreen (for the purpose of getting the resulting raw pixels.)

I set up an offscreen surface the way the Apple docs tell me to here. I won't post the code I'm using (unless someone asks me) since it is verbatim what is given on that page under "Offscreen framebuffer objects".

But in the final step, glCheckFramebufferStatusOES always returns the failure GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES instead of the expected success. I thought initially that this was happening because there was already a framebuffer (the CAEAGLLayer one) bound, but the problem persists even if I destroy that framebuffer before creating the offscreen one.

Can anyone point me in the right direction on how to make this work? Perhaps I'm misunderstanding something fundamental about the GL pipeline (would not be the first time).

Thanks!

+1  A: 

(Many thanks to GavinB for his helpfully leading comment on the question.)

The call to glRenderbufferStorageOES was failing. glGetError() returned GL_INVALID_VALUE. The constants were all legit, so I cranked down the width and height params to very small, and succeeded here. Seems like there's an upper bound on the size of the surface I can create-- I'm not sure if the error means "you ran out of memory during allocation" or "there's a hard limit on dimensions regardless of ambient free memory" (can anyone enlighten me?).

Is there such a thing as an OpenGL API reference (e.g. from Apple) with information specific to the iPhone? Many behaviors/limits are implementation specific, and it would be awesome to be able to look that stuff up in advance, rather than getting generic stuff when using Google...

quixoto
What was the largest width and height that worked? All iPhone models should support a minimum size of 1024x1024. You can query this by calling glGetInteger(MAX_RENDERBUFFER_SIZE_OES)
Frogblast
I haven't stepped through different sizes-- the original h/w were huge (~2000px or so each side) and the ones that work are all well under 1000.
quixoto
(and thanks for the note on how to find the max size!)
quixoto