Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QGLWidget RenderText()崩溃,文本混乱_Qt_Opengl_Qt5.5 - Fatal编程技术网

Qt QGLWidget RenderText()崩溃,文本混乱

Qt QGLWidget RenderText()崩溃,文本混乱,qt,opengl,qt5.5,Qt,Opengl,Qt5.5,我将Qt应用程序从Qt4.8.6移植到qt5.5.1 移植后,GUI在renderText(x、y、z、字体)随机崩溃。有时文字也会弄乱,显示的不是字母和数字,而是不同大小的粗体黑色矩形。此代码用于处理Qt4.8时工作正常 我的调用堆栈如下所示:- ig7icd64.dll!000007fedbeeed17() 请帮我做这件事。如果有人遇到过类似的问题。我正在使用Windows 8,驱动程序已更新。崩溃不是在Ubuntu 14上复制,而是在Ubuntu上文本混乱。 这种过时的原因以及您有这种奇怪

我将Qt应用程序从Qt4.8.6移植到qt5.5.1

移植后,GUI在renderText(x、y、z、字体)随机崩溃。有时文字也会弄乱,显示的不是字母和数字,而是不同大小的粗体黑色矩形。此代码用于处理Qt4.8时工作正常

我的调用堆栈如下所示:- ig7icd64.dll!000007fedbeeed17()

请帮我做这件事。如果有人遇到过类似的问题。我正在使用Windows 8,驱动程序已更新。崩溃不是在Ubuntu 14上复制,而是在Ubuntu上文本混乱。

这种过时的原因以及您有这种奇怪行为的原因是,opengl已经弃用了它的直接模式渲染api,这是opengl元素过去依赖的api Qt4。实际上,不推荐的功能可能保留在新的驱动程序中,也可能不保留,具体取决于供应商

Opengl文本渲染技术使用矩形渲染文本。要使其工作,必须启用alpha混合。从中,你可以看到窗户是如何打开的

如果未启用混合,则如下所示:

第二张图片非常符合你的描述

用不同颜色的粗体黑色矩形代替字母和数字 显示大小

这种过时的原因以及您有这种奇怪行为的原因是,opengl已经弃用了它的直接模式渲染api,这是opengl元素过去依赖的api Qt4。实际上,不推荐的功能可能保留在新的驱动程序中,也可能不保留,具体取决于供应商

Opengl文本渲染技术使用矩形渲染文本。要使其工作,必须启用alpha混合。从中,你可以看到窗户是如何打开的

如果未启用混合,则如下所示:

第二张图片非常符合你的描述

用不同颜色的粗体黑色矩形代替字母和数字 显示大小



你能显示代码吗?Qt 4.8代码也在windows 8上吗?您需要在每种情况下使用有效的opengl和glsl版本。对于opengl,相同的缺陷可能会根据驱动程序产生不同的错误,这解释了为什么Ubuntu不会崩溃。代码如下:-不需要代码。罪魁祸首在堆栈跟踪中。你有一个英特尔GPU。到底是哪一个?总体建议是:立即升级其驱动程序!然而,其中一些是如此破碎,你不应该用它们来做OpenGL。你能显示代码吗?Qt4.8代码也在Windows8上吗?您需要在每种情况下使用有效的opengl和glsl版本。对于opengl,相同的缺陷可能会根据驱动程序产生不同的错误,这解释了为什么Ubuntu不会崩溃。代码如下:-不需要代码。罪魁祸首在堆栈跟踪中。你有一个英特尔GPU。到底是哪一个?总体建议是:立即升级其驱动程序!但是,其中一些已经损坏,你不应该使用OpenGL。谢谢@UmNyobe是的,我已经渲染了类似的文本。所以我需要用QOpenGLWidget完全替换QGLWidget?我正在处理遗留代码,这将是一个很大的变化。如果你想成为未来的证明,我知道没有解决办法。很容易看到QGLWidget方法、旧的nativeopengl方法及其替代方法之间的映射。这不是一个复杂的过程,但您需要知道opengl是如何工作的。我自己也经历了类似的阶段。看看这个问题,就像你们尝试移植。你也可以破解本机代码来代替文本呈现,但这将是一个地狱般的调试过程。实际上,QopenglFunction与QGLWidget方法非常相似。我已经更新了使用QOpenGLWidget的代码,并使用了link[link]中建议的renderText api。然而,这个问题仍在继续。如果有人还有其他建议,请告诉我。我们的应用程序中可能有很多QopenglWidget/QglWidget。我们使用了QOpenGLContext/QGLcontext的一个实例,该实例由所有QOpenGLwidgets/QGLwidgets共享,并且从未被删除。当我删除QOpenGLWidget/QGLwidget并尝试在另一个QOpenGLWidget上呈现文本时,问题会复制。谢谢@UmNyobe是的,我呈现了类似的文本。所以我需要用QOpenGLWidget完全替换QGLWidget?我正在处理遗留代码,这将是一个很大的变化。如果你想成为未来的证明,我知道没有解决办法。很容易看到QGLWidget方法、旧的nativeopengl方法及其替代方法之间的映射。这不是一个复杂的过程,但您需要知道opengl是如何工作的。我自己也经历了类似的阶段。看看这个问题,就像你们尝试移植。你也可以破解本机代码来代替文本呈现,但这将是一个地狱般的调试过程。实际上,QopenglFunction与QGLWidget方法非常相似。我已经更新了使用QOpenGLWidget的代码,并使用了link[link]中建议的renderText api。然而,这个问题仍在继续。如果有人还有其他建议,请告诉我。我们的应用程序中可能有很多QopenglWidget/QglWidget。我们使用了QOpenGLContext/QGLcontext的一个实例,该实例由所有QOpenGLwidgets/QGLwidgets共享,并且从未被删除。当我删除QOpenGLWidget/QGLwidget并尝试在另一个QOpenGLWidget上呈现文本时,问题会复制。
[Frames below may be incorrect and/or missing, no symbols loaded for ig7icd64.dll]  

ig7icd64.dll!000007fedbdbcbe1()     

ig7icd64.dll!000007fedbf3aa39()     

ig7icd64.dll!000007fedbf3a751() 

Qt5Guid.dll!QOpenGLFunctions::glDrawElements(unsigned int mode=5, int count=60, unsigned int type=5123, const void * indices=0x000000e2cd2459c8)  Line 730  C++
Qt5OpenGLd.dll!QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngine::GlyphFormat glyphFormat=Format_A8, QStaticTextItem * staticTextItem=0x000000e2fe3a3dd0)  Line 1902   C++

Qt5OpenGLd.dll!QGL2PaintEngineEx::drawTextItem(const QPointF & p={...}, const QTextItem & textItem={...})  Line 1591    C++

Qt5Guid.dll!QPainterPrivate::drawTextItem(const QPointF & p={...}, const QTextItem & _ti={...}, QTextEngine * textEngine=0x0000000000000000)  Line 6501 C++

Qt5Guid.dll!QPainter::drawTextItem(const QPointF & p={...}, const QTextItem & ti={...})  Line 6372  C++

Qt5Guid.dll!QPainter::drawText(const QPointF & p={...}, const QString & str={...}, int tf=0, int justificationPadding=0)  Line 5913 C++

Qt5Guid.dll!QPainter::drawText(const QPointF & p={...}, const QString & str={...})  Line 5697   C++

Qt5Guid.dll!QPainter::drawText(int x=427, int y=175, const QString & s={...})  Line 884 C++

Qt5OpenGLd.dll!qt_gl_draw_text(QPainter * p=0x000000e2ca3c2ee0, int x=427, int y=175, const QString & str={...}, const QFont & font={...})  Line 4776   C++

Qt5OpenGLd.dll!QGLWidget::renderText(double x=8.0000000000000000, double y=0.00000000000000000, double z=0.00000000000000000, const QString & str={...}, const QFont & font={...})  Line 4960   C++