Я создаю приложение для iPad с использованием OpenGL ES 2.0. Мне нужно сделать несколько текстур, а затем отобразить все текстуры. Я рисую с использованием GL_POINTS на основе пользовательского местоположения. Мой код, который у меня сейчас:OpenGL ES 2.0 рендеринг для нескольких текстур
Сформировать буфера кадра, текстур, и сделать буфер:
glGenFramebuffers(1, &viewFramebuffer);
glGenRenderbuffers(1, &viewRenderbuffer);
glBindFramebuffer(GL_FRAMEBUFFER, viewFramebuffer);
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
glGenTextures(1, layers);
glBindTexture(GL_TEXTURE_2D, layers[0]);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, self.bounds.size.width, self.bounds.size.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, layers[0], 0);
Draw:
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
....
glDrawArrays(GL_POINTS, 0, (int)vertexCount);
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER];
выше работает хорошо, однако, когда я хочу, чтобы оказать новая текстура мое приложение прекращает рисовать любой новый контент. Я связываю новую текстуру следующим образом:
glGenTextures(1, &layers[1]);
glBindTexture(GL_TEXTURE_2D, layers[1]);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, self.bounds.size.width, self.bounds.size.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, layers[1], 0);
И снова вызовите метод рисования. Мой код работает при рендеринге первой текстуры, но когда я пытаюсь создать новую текстуру для рендеринга, приложение перестает рисовать. Может ли кто-нибудь помочь?
Скорее всего, не имеет ничего общего с вашей проблемой, но есть ли причина, почему вы частично с использованием версии расширения (OES) точек входа FBO и определения ? –
@RetoKoradi Не знаете, почему это было. Я следую учебнику от GLPaint от Apple, и именно так оно и было сделано. Я изменил GL_FRAMEBUFFER_OES на GL_FRAMEBUFFER, но проблема не устранена. Какие-либо предложения? – Amendale
Вы проверяете состояние буфера кадра после того, как это новое вложение? Правильный буфер кадра должен быть связан не только с текстурой, прежде чем выполнить эту строку (но это, скорее всего, уже есть). Во всяком случае, я не уверен, что вы даже можете это сделать, но если все, что вы сделали, все в порядке, я бы ожидал, что обе текстуры будут привязаны к буфере кадров, поэтому он должен привлечь к обоим. Во всяком случае, почему вы даже пытаетесь это сделать, вы можете просто создать новый буфер кадров и прикрепить текстуру. Что касается буфера визуализации, если я правильно помню, он вам не нужен, если у вас есть текстура. –