Я использую QML и хочу запустить пользовательский код OpenGL. Я создал собственный виджет в C++ (расширяя QQuickItem) и переопределив функцию paint().
Когда я запускаю мое приложение, консоль печатаетПроблемы с буфером глубины и буфером шаблонов QML
QSGContext::initialize: depth buffer support missing, expect rendering errors
QSGContext::initialize: stencil buffer support missing, expect rendering errors
И точно так же, как это предсказывал, я получаю ошибки рендеринга. В качестве примера я использую модель паука. Вот что он хотел бы
я не знаю точно, как описать его, но в основном противоположное лицо (которое должно быть заблокировано передняя грань) показывается, когда я поворачиваю его.
Я сумел избавиться от ошибки буфера глубины с этим:
void MyGLWidget::handleWindowChanged(QQuickWindow *win)
{
if (win) {
connect(win, SIGNAL(beforeSynchronizing()), this, SLOT(sync()), Qt::DirectConnection);
connect(win, SIGNAL(sceneGraphInvalidated()), this, SLOT(cleanup()), Qt::DirectConnection);
win->setClearBeforeRendering(false);
QSurfaceFormat glFormat;
glFormat.setVersion(3,2);
glFormat.setProfile(QSurfaceFormat::CoreProfile);
/*I'm showing everything for context, but this is the key line*/
glFormat.setDepthBufferSize(1);
win->setFormat(glFormat);
}
}
Так что теперь я только получаю ошибку трафарета, но это вызывает другой вопрос. Одна сторона полностью черная и не показывает никакого освещения.
Некоторые другие справочную информацию: Я отображая QQuickView. Мой OpenGLWidget импортируется в QML и заливал так:
MyGLWidget {
id: glWidget
}
В краске() мой визуализатор, я звоню glEnable(GL_DEPTH_TEST)
и glEnable(GL_STENCIL_TEST)
в верхней части, но это, кажется, не делать ничего. Может, я позвоню в неправильном контексте? Однако я не знаю, где еще я мог бы назвать это.
ничего не менял. Я посмотрю ссылку и посмотрю, смогу ли я получить решение – faraza