【问题标题】:The GL_LINE_STIPPLE does not work in ubuntuGL_LINE_STIPPLE 在 ubuntu 中不起作用
【发布时间】:2012-02-15 04:52:50
【问题描述】:

这几天在学习OpenGL,尝试编译书上的示例代码(OpenGL SuperBible)

代码是这样的:先用glEnable(GL_LINE_STIPPLE)打开GL_LINE_STIPPLE,再用glLineStipple(2, (GLushort)0x00ff),最后画了一些线,但是执行的时候,只是显示正常的线。 (在 Ubuntu 中)

但是,我在 windows 中编译了相同的代码,它工作了!!

为什么? Windows 和 Linux 之间有什么不同的细节吗?

#include <QtGui>
#include "GLWidget.h"
GLWidget::GLWidget(QWidget *parent)
    : QGLWidget(parent)
{
    setFormat(QGLFormat(QGL::DoubleBuffer));
}
GLWidget::~GLWidget()
{
}
void GLWidget::initializeGL()
{
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glEnable(GL_LINE_STIPPLE);
}
void GLWidget::resizeGL(int w, int h)
{
    if(h == 0)
        h = 1;
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-100, 100, -100, 100, -1, +1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}
void GLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);
    drawLine();
}
void GLWidget::drawLine()
{
    GLint factor = 1;
    GLushort pattern = 0x00ff;
    glColor3f(1.0f, 1.0f, 1.0f);
    for(GLfloat i = -90.0f; i < 90.0f; i += 20.0f)
    {
        glLineStipple(factor, pattern);
        glLineWidth(5.0);
        glBegin(GL_LINES);
            glVertex2f(-80.0f, i);
            glVertex2f(+80.0f, i);
        glEnd();
        factor++;
    }
}

【问题讨论】:

    标签: c++ linux opengl


    【解决方案1】:

    我从您对@Lefteris 的评论回答中看到您正在使用基于 Mesa3D/DRI 的“radeon”驱动程序。我建议您从他们的网站下载 AMD 的专有驱动程序 (fglrx),安装并重试。

    【讨论】:

    • 感谢您的回答,按照您的想法,我尝试安装了最新的驱动,程序运行完美,问题已经解决!!
    • 但是出现了一些其他问题,我的笔记本在安装了ati驱动后运行不是很流畅,比如我拖动一个窗体时,窗体会频繁闪烁,我花了很长时间才解决这个问题,但是失败了。
    • @user1149333:您遇到的闪烁不是您的程序的问题,而是驱动程序如何在内部管理窗口大小调整的人工制品。你对此无能为力。这甚至不是一个错误,因为调整大小之后但重绘之前的窗口内容是未定义的,因此可能是任何内容。我可以确认,同样的事情也发生在我的机器上。至于 Mesa 驱动:不支持 OpenGL-1.2 的 line stipple 绝对是一个 bug。
    【解决方案2】:

    您必须告诉我们您正在使用什么 OpenGL 上下文才能了解它为什么不起作用。如果在 Linux 中它是 openGL 4 上下文,例如 glEnable(GL_LINE_STIPPLE) 不是 openGL 4 的一部分。

    另一方面,在 Windows 中,如果您不费心创建特定的 openGL 上下文,您将获得默认版本,该版本绝对支持 glEnable(GL_LINE_STIPPLE)。

    所以请告诉我们您在 Linux 中使用的 OpenGL 上下文。

    【讨论】:

    • 制造商:X.Org 着色器标志:AMD REDWOOD 上的 Gallium 0.4 OpenGL 版本:2.1 Mesa 7.11 gluVersion:1.3
    • 嗯,如果是这样,那么我的回答不正确。根据 openGL 2.1 参考页面opengl.org/sdk/docs/man,当时它仍然受到支持。恐怕我们需要更多关于整个代码的信息,以便在这种情况下为您提供更准确的答案
    • 感谢您的回答,我已经添加了我的主要部分源代码,它基于 QT。
    【解决方案3】:

    点画基元是anything above a R200 的 TODO。

    【讨论】:

      【解决方案4】:

      glLineStipple 是一个已弃用的 API,因此它可能已从 Linux 驱动程序中删除。

      【讨论】:

        猜你喜欢
        • 2017-04-05
        • 2023-03-12
        • 2015-10-19
        • 2014-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-20
        • 2013-10-12
        相关资源
        最近更新 更多