dugla
dugla

Reputation: 12954

Why, on iOS, is glRenderbufferStorage appearing to fail?

On an iOS device (iPad) I decided to change the storage for my renderbuffer from the CAEAGLLayer that backs the view to explicit storage via glRenderbufferStorage. Sadly, the following code fails to result in a valid FBO. Can someone please tell me what I missed?:

glGenFramebuffers(1, &m_framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer);

glGenRenderbuffers(1, &m_colorbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_colorbuffer);

GLsizei width  = (GLsizei)layer.bounds.size.width;
GLsizei height = (GLsizei)layer.bounds.size.height;
glRenderbufferStorage(m_colorbuffer, GL_RGBA8_OES, width, height);

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_colorbuffer);

Note:
The layer size is valid and correct. This is solid production working rendering code. The only change I am making is the line:

glRenderbufferStorage(...)

previously I did:

[m_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer]

Upvotes: 2

Views: 4336

Answers (2)

Lynx Luna
Lynx Luna

Reputation: 71

in iOS, you cannot use glRenderBufferStorage to bind color attachment, you need to request the storage from EAGLContext on the view layer. Somewhere on your view code, you must use code similar to this:

// First Bind a Render Buffer
glBindRenderbuffer(GL_RENDERBUFFER, m_colorBuffer);
[context renderBufferStorage:GL_RENDERBUFFER forDrawable:(CAEAGLLayer*) self.layer];

You cannot avoid the second line as it's needed by iOS, this is the line you refer to "linkage" from renderbuffer to layer

Upvotes: 5

Shezan Baig
Shezan Baig

Reputation: 1484

The first argument for glRenderbufferStorage should be GL_RENDERBUFFER, not m_colorbuffer.

(It will store in m_colorbuffer because that is what's bound to the GL_RENDERBUFFER target from the previous glBindRenderbuffer call)

Upvotes: 2

Related Questions