2012-02-15 16 views
0

我學習OpenGL的這些天工作,我試圖編譯書上的例子代碼(OpenGL的OpenGL超級)的GL_LINE_STIPPLE不會在Ubuntu

代碼喜歡這樣的:先用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++; 
    } 
} 

回答

0

我從你的評論回答看過@Lefteris,你正在使用基於Mesa3D/DRI的「radeon」驅動程序。我建議你從他們的網站下載AMD的propritary驅動程序(fglrx),安裝它並重試。

+0

感謝您的回答,因爲您的想法,我試圖安裝最新的驅動程序,並且程序運行完美,所以問題已解決! – Kenfly 2012-02-15 11:34:44

+0

但是出現了一些其他的問題,比如我在安裝ati驅動程序後運行的不是很流暢,例如,當我拖動一個窗口窗體,窗口會經常閃爍,我花了很長時間來解決這個問題,但是失敗了。 – Kenfly 2012-02-15 11:44:08

+0

@ user1149333:您遇到的閃爍並不是您程序的問題,而是驅動程序內部管理窗口大小的工件。你無能爲力。它甚至不是一個bug,因爲在調整大小之後但在重畫之前的窗口內容是未定義的,因此可能是任何東西。我可以證實,我的機器上發生的是同樣的事情。至於Mesa驅動程序:不支持OpenGL-1.2的直線點畫肯定是一個錯誤。 – datenwolf 2012-02-15 12:29:15

-1

glLineStipple是棄用的API,因此也許它是從Linux驅動程序刪除。

0

你將不得不告訴我們你正在使用什麼OpenGL上下文來了解它爲什麼不起作用。如果在Linux中,它是一個openGL 4上下文,例如glEnable(GL_LINE_STIPPLE)不是openGL 4的一部分。

另一方面,在Windows中,如果您不打算創建特定的openGL上下文,是一個肯定支持glEnable(GL_LINE_STIPPLE)的版本。

那麼請告訴我們您在Linux中使用的OpenGL環境。

+0

製造商:X.Org 着色器標誌:鎵0.4對AMD REDWOOD 的OpenGL版本:2.1梅薩7.11 gluVersion:1.3 – Kenfly 2012-02-15 05:18:59

+0

嗯,如果這是這樣的話我的答案是不正確。根據openGL 2.1參考頁面http://www.opengl.org/sdk/docs/man/,當時它仍然受到支持。 恐怕我們需要整個代碼的更多信息,以便在這種情況下爲您提供更準確的答案 – Lefteris 2012-02-15 05:23:00

+0

感謝您的回答,我添加了源代碼的主要部分,它基於QT。 – Kenfly 2012-02-15 06:00:03