QGLWidget игнорирует glClear

Я в тупике. У меня есть виджет внутри главного окна в приложении QT 4.6, который был настроен как виджет openGL. Он хорошо рисует, за исключением того, что я не могу очистить фон между кадрами. Я получаю черный фон, когда он открывает окно, и оно никогда не очищается после этого, поэтому со временем я получаю беспорядочный беспорядок визуализированных объектов. Мне также приходится вызывать swapBuffers () в конце функции paintGL (), чтобы виджет отображал самый последний кадр, который меня озадачил, так как у меня сложилось впечатление, что swapBuffers () был вызван автоматически. Я настроен на двойную буферизацию, и виджет не является общим. Вот соответствующий код:

void GLWidget::paintGL ( )
{
m_Input.Draw();
QGLWidget::swapBuffers();
}

void GLWidget::initializeGL ( )
{
qglClearColor(QColor(0,0,255,128));
glClear(GL_COLOR_BUFFER_BIT);
}

Кажется, что-то не так с двойной буферизацией. Очистка экрана до цвета фона довольно проста. Но это сводит меня с ума, почему это не работает. Остальная часть кода рисования работает нормально. Есть идеи? (Это в системе Linux.)

2

Решение

glClear это операция рисования. Это не относится к initializeGL но в paintGL, Цвет очистки должен быть установлен прямо перед вызовом glClear ну так двигай так [q]glClearColor вместе.

Обновить

Метод paintGL должен выглядеть следующим образом:

void GLWidget::paintGL()
{
qglClearColor(QColor(0,0,255,128));
glClear(GL_COLOR_BUFFER_BIT);
// you probably also want to clear the depth and stencil buffers
// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

m_Input.Draw();

QGLWidget::swapBuffers();
}

Конечно, вы должны убедиться, что m_Input.Draw() больше ничего не портит. Вы не показали код для этого, поэтому я здесь в шторке.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]