小编use*_*098的帖子

Qt和OpenGL - QGLWidget和QPainter:深度缓冲

我将QGLWidget子类化,并将我的绘画代码放在paintEvent而不是paintGL中,因为我想使用QPainter在我用OpenGL完成的3D内容上绘制2D叠加层.

当我没有叠加时,我的深度缓冲工作正常.如果覆盖图被绘制,我的深度缓冲区就会变为AWOL:我可以看到应该被前面的对象隐藏的东西.

initializeGL看起来像这样:

qglClearColor(Qt::black);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
Run Code Online (Sandbox Code Playgroud)

我的paintEvent代码的结构如下:

makeCurrent();

...openGLStuff...

if (I need my overlay)
{
    glPushAttrib(GL_ALL_ATTRIB_BITS);
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();

    QPainter painter(this);

    ... do QPainter stuff ...

    glPushAttrib(GL_ALL_ATTRIB_BITS);
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
}

swapBuffers();
Run Code Online (Sandbox Code Playgroud)

根据if,相同的场景看起来没问题(叠加)或错误(叠加).除了奇怪的深度缓冲问题,它的效果非常好.

我的(狂野)猜测是QPainter的构造禁用了深度缓冲.任何暗示都将非常感激.我想一个后备解决方案是将我的叠加层渲染到纹理中并让OpenGL混合它.

opengl qt overlay qpainter qglwidget

7
推荐指数
1
解决办法
2081
查看次数

最好的解析器生成器,用于解析C++中的许多小文本?

出于性能原因,我将C#库移植到C++.在正常操作期间,此库需要解析大约150'000个数学表达式(想想excel公式),平均长度小于150个字符.

在C#版本中,我使用GOLD解析器生成解析代码.它可以在一秒钟内解析所有150'000个表达式.

因为我们正在考虑扩展我们的语言,所以我认为转向C++可能是改为ANTLR的好机会.我已将(简单)语法移植到ANTLR并从中生成C代码.解析150'000表达式需要12秒,因为对于每个表达式,我需要创建一个新的ANTL3_INPUT_STREAM,令牌流,词法分析器和解析器 - 至少在版本3.4中,没有办法重用它们.

我很感激有人可以给我一个推荐使用的内容 - GOLD当然是一个选项,虽然生成C++或C代码似乎比C#变种复杂得多.我的语法是LALR和LL(1)兼容.最重要的是解析小输入的性能.

c++ performance antlr parser-generator gold-parser

1
推荐指数
1
解决办法
3460
查看次数