Sto utilizzando QML e volevo eseguire codice OpenGL personalizzato. Ho creato un widget personalizzato in C++ (estendendo QQuickItem) e sovrascritto la funzione paint().
Quando eseguo la mia applicazione, le stampe consoleProblemi di buffer di profondità e buffer di stencil QML
QSGContext::initialize: depth buffer support missing, expect rendering errors
QSGContext::initialize: stencil buffer support missing, expect rendering errors
E proprio come predetto, io capisco errori di rendering. Userò un modello di ragno come esempio. Ecco cosa vorrei
Ed ecco quello che sto ricevendo
Anche io non so esattamente come descriverlo, ma in fondo la faccia opposta (che dovrebbe essere bloccato da la faccia anteriore) è visibile mentre lo ruoto.
Sono riuscito a sbarazzarsi di errore di buffer di profondità con questo:
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);
}
}
Così ora sto ottenendo soltanto l'errore stencil, ma che causa un problema diverso. Un lato è completamente nero e non mostra alcuna illuminazione.
alcune altre informazioni di fondo: Sto visualizzando un QQuickView. Il mio OpenGLWidget viene importato in QML e incorporato in questo modo:
MyGLWidget {
id: glWidget
}
nella vernice() del mio renderer, mi chiamo glEnable(GL_DEPTH_TEST)
e glEnable(GL_STENCIL_TEST)
in alto, ma che non sembra di fare nulla. Forse lo sto chiamando nel contesto sbagliato? Non so dove altro potrei chiamarlo, comunque.
Purtroppo non è stato modificato nulla. Dò un'occhiata al link e vedrò se riesco a trovare una soluzione – faraza