在我们基于Qt5的应用程序中,许多这样的消息都显示在控制台中:
0x1beccb0 void QWindowPrivate::setTopLevelScreen(QScreen*, bool) ( QScreen(0xd25b80) ): Attempt to set a screen on a child window.
Run Code Online (Sandbox Code Playgroud)
它不会阻止应用程序运行,但我想修复它们,因为它往往表明我们正在做的事情可能有些不对劲.代码非常大(不能包含在帖子中,它在那里:http://gforge.inria.fr/frs/?group_id = 1465).我不能要求你看一下(太大了),但也许你会对以下附加信息有所了解:
消息仅在Linux下出现,而不在Windows下出现
我们的应用程序是一个3D建模器,它有几个用于显示3D内容的QGLWidgets.如果我删除了QGLWidgets,那么消息就会消失.
在调试器中,如果我在QWindowPrivate :: setTopLevelScreen()上放置一个断点,它将被调用:
kernel/qwindow.cpp:368 368 q-> connect(screen,SIGNAL(destroyed(QObject*)),q,SLOT(screenDestroyed(QObject*)));
Update1: 我在QMessageLogger :: warning上放了一个断点(qDebug()是一个使用这个函数的宏),现在我可以更好地看到看起来像这样的堆栈:
#0 0x00007fffefa50600 in QMessageLogger::warning() const@plt () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#1 0x00007fffefa851cb in QWindowPrivate::setTopLevelScreen (this=0xd330e0, newScreen=0x7201a0, recreate=<optimized out>)
at kernel/qwindow.cpp:371
#2 0x00007fffefa7f2f5 in QGuiApplicationPrivate::processWindowSystemEvent (e=e@entry=0x760600)
at kernel/qguiapplication.cpp:1608
#3 0x00007fffefa631f8 in QWindowSystemInterface::sendWindowSystemEvents (flags=...)
at kernel/qwindowsysteminterface.cpp:625
#4 0x00007fffeb7d4100 in userEventSourceDispatch (source=<optimized out>)
at eventdispatchers/qeventdispatcher_glib.cpp:70
(More stack frames …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Emscriten 将 OpenGL 框架移植到 JavaScript。
状态存储在一个统一的结构中:
struct UniformState {
...
mat4 modelviewprojection_matrix;
mat4 modelview_matrix;
mat3 normal_matrix;
mat4 texture_matrix;
...
};
Run Code Online (Sandbox Code Playgroud)
我想在顶点和片段着色器中访问:
uniform UniformState GLUP;
Run Code Online (Sandbox Code Playgroud)
当我这样做时,在链接时出现错误:
Uniform `GLUP`is not linkable between attached shaders
Run Code Online (Sandbox Code Playgroud)
是否禁止在顶点着色器和片段着色器中绑定相同的uniform?
(如果它被禁止,那么显然我可以为每个着色器声明两组不同的统一变量,但我更喜欢只有一组,因为它使代码更清晰/更简单,这就是我问的原因,以防万一是做一些特别的事情才能使它成为可能)。
给定一个由三角网格表示的边界定义的 3D 多面体,如何实现一种算法来确定给定的 3D 点是否属于多面体的内部?