iOS не работает с кадровым буфером по умолчанию с индексом 0. Вам нужно привязать буфер, который вы используете в качестве основного. Это зависит от используемого вами инструмента, но если вы используете UIView
, то вы должны найти код, подобный следующему:
- (instancetype)initWithView:(UIView *)view {
if((self = [super init])) {
{
GLuint bufferID = 0;
glGenFramebuffers(1, &bufferID);
glBindFramebuffer(GL_FRAMEBUFFER, bufferID);
self.frameBufferID = bufferID;
}
{
GLuint bufferID = 0;
glGenRenderbuffers(1, &bufferID);
glBindRenderbuffer(GL_RENDERBUFFER, bufferID);
view.layer.contentsScale = UIScreen.mainScreen.scale;
[[EAGLContext currentContext] renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer *)view.layer];
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, bufferID);
self.colorBufferID = bufferID;
GLint width, height;
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &height);
self.bufferWidth = width;
self.bufferHeight = height;
}
}
return self;
}
Вы ищете звонок для renderbufferStorage:fromDrawable:
. Рядом с ним должен быть создан кадровый буфер, который связан с этим буфером рендеринга. Идентификатор этого буфера кадра - это то, что вам нужно связать.
Так что в приведенном выше примере вы бы использовали self.frameBufferID
.
Что касается опубликованного фрагмента, то он является частью проекта, который генерирует фрейм и буфер рендеринга из заданного UIView
. Сначала он генерирует кадровый буфер и связывает его. Следующий буфер рендеринга создан и привязан. Буфер рендеринга затем настраивается через собственный код iOS со слоем. Мы прикрепляем буфер рендеринга к кадровому буферу. В конце ширина и высота извлекаются.
Перед рисованием к этому объекту вызывается следующий bind
метод:
- (void)bind {
glBindFramebuffer(GL_FRAMEBUFFER, self.frameBufferID);
glBindRenderbuffer(GL_RENDERBUFFER, self.colorBufferID);
}