私はQMLを使用しており、カスタムOpenGLコードを実行したかったのです。私はC++(QQuickItemを拡張)でカスタムウィジェットを作成し、ペイント関数()をオーバーライドしました。
私は自分のアプリケーションを実行し、コンソール版画 深度バッファとステンシルバッファの問題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