У меня есть QOpenGLFramebufferObject fbo code>, который я использую для рисования простой линии:
Код: Выделить всё
void Example::drawLine() {
fbo->bind();
glBegin(GL_LINES);
glVertex2f(0, 0);
glVertex2f(100, 100);
glEnd();
fbo->release();
}
Код: Выделить всё
void Example::paintGL() { // This implementation works.
drawLine();
QPainter painter(this);
painter.beginNativePainting();
auto im = fbo->toImage();
painter.drawImage(QPoint(0, 0), im);
painter.endNativePainting();
}
Код: Выделить всё
void Example::paintGL() { // This one doesn't display anything.
drawLine();
fbo->bind();
glBindFramebuffer(GL_FRAMEBUFFER, fbo->handle());
glBindTexture(GL_TEXTURE_2D, fbo->texture());
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f( 1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0f, 1.0f);
glEnd();
glDisable(GL_TEXTURE_2D);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
fbo->release();
}
(Примечание: я упростил фрагмент кода, чтобы его было легче читать; в реальном коде я делаю дополнительные проверяет glGetError, и я проверяю, что привязка и выпуск возвращают true.)
Подробнее здесь: https://stackoverflow.com/questions/785 ... g-textures
Мобильная версия