Как отобразить QOpenGLFramebufferObject в QOpenGLWidget с помощью текстур?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как отобразить QOpenGLFramebufferObject в QOpenGLWidget с помощью текстур?

Сообщение Anonymous »

Я пытаюсь поиграть с QOpenGLFramebufferObject, чтобы посмотреть, как это может повлиять на производительность приложения, над которым я работаю.
У меня есть 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»