GL_LINE_STIPPLE не работает в Ubuntu - PullRequest
0 голосов
/ 15 февраля 2012

В эти дни я изучаю 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++;
    }
}

Ответы [ 4 ]

0 голосов
/ 15 февраля 2012

Пестрые примитивы - это TODO для всего, что выше R200 .

0 голосов
/ 15 февраля 2012

Вы должны сообщить нам, какой контекст OpenGL вы используете, чтобы понять, почему он не работает. Если в Linux это контекст openGL 4, например, glEnable (GL_LINE_STIPPLE) не является частью openGL 4.

С другой стороны, в Windows, если вы не удосужились создать определенный контекст openGL, вы получите значение по умолчанию, которое является версией, которая определенно поддерживает glEnable (GL_LINE_STIPPLE).

Итак, расскажите, пожалуйста, какой контекст OpenGL вы используете в Linux.

0 голосов
/ 15 февраля 2012

Из вашего комментария к ответу @Lefteris я видел, что вы используете драйвер "radeon" на основе Mesa3D / DRI. Я предлагаю вам скачать драйвер AMD (fglrx) с их сайта, установить его и попробовать еще раз.

0 голосов
/ 15 февраля 2012

glLineStipple является устаревшим API, поэтому, возможно, он был удален из драйвера Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...