Почему на iOS происходит сбой glRenderbufferStorage? - PullRequest
2 голосов
/ 28 января 2011

На устройстве iOS (iPad) я решил изменить хранилище для моего буфера рендеринга с CAEAGLLayer, который поддерживает представление в явное хранилище через glRenderbufferStorage. К сожалению, следующий код не может привести к правильному FBO. Может кто-нибудь сказать мне, что я пропустил?:

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);

Примечание:
Размер слоя правильный и правильный. Это надежный рабочий код рендеринга. Единственное изменение, которое я делаю, это строка:

glRenderbufferStorage(...)

ранее я делал:

[m_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer]

Ответы [ 2 ]

5 голосов
/ 18 января 2012

в iOS, вы не можете использовать glRenderBufferStorage для привязки цветовых вложений, вам нужно запросить хранилище у EAGLContext на слое представления.Где-то в вашем коде представления вы должны использовать код, подобный следующему:

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

Вы не можете избежать второй строки, так как это необходимо для iOS, это строка, которую вы называете "связывание" от рендеринга до слоя

2 голосов
/ 28 января 2011

Первый аргумент для glRenderbufferStorage должен быть GL_RENDERBUFFER, а не m_colorbuffer.

(он будет храниться в m_colorbuffer, потому что это то, что связано с целью GL_RENDERBUFFER из предыдущего glBindRenderbuffer звонок)

...