2012-02-15 16 views
0

では動作しませんGL_LINE_STIPPLEが、私はこれらの日OpenGLを学んでいます、と私は本(OpenGLのSuperBible)上のサンプルコードをコンパイルしようとしたUbuntuの

コードは、これを好き:最初GL_LINE_STIPPLEを開くためにglEnable(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

あなたがMesa3D/DRIベースの "radeon"ドライバを使っている@Lefterisへのあなたのコメントの回答からわかりました。私は、AMDのpropritaryドライバ(fglrx)をWebサイトからダウンロードしてインストールし、もう一度試してみることをお勧めします。

+0

あなたのアイデアに答えてくれてありがとう、私は最新のドライバをインストールしようとしていましたが、プログラムは完璧に動作していますので、問題は解決されました! – Kenfly

+0

しかし、他のいくつかの問題が出てくる、私のノートブックは、私はウィンドウのフォームをドラッグすると、ウィンドウが頻繁に、私はこの問題を解決するために長い時間がかかったが、失敗すると、例えばatiドライバをインストールした後、あまり流動的に実行されません。 – Kenfly

+0

@ user1149333:あなたが経験するちらつきはあなたのプログラムの問題ではありませんが、ドライバが内部的にウィンドウのサイズをどのように管理しているかのアーティファクトです。あなたはそれについて何もできません。ウィンドウの内容はサイズ変更後で、再描画の前には定義されていないため、バグではありません。私はマシンで全く同じことが起こることを確認することができます。メサドライバについて:OpenGL-1.2のラインスティプルをサポートしていないのは間違いです。 – datenwolf

-1

glLineStippleので、おそらくそれは、Linuxのドライバから削除された非推奨APIです。

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のレッドウッドの OpenGLのバージョン:2.1メサ7.11 gluVersion:1.3 – Kenfly

+0

フムそれはそうだならば、私の答えは間違っています。 OpenGL 2.1のリファレンスページhttp://www.opengl.org/sdk/docs/man/によれば、それは当時まだサポートされていました。 この場合、より正確な答えを提供するために、コード全体についてより多くの情報が必要であることを恐れています。 – Lefteris

+0

回答のおかげで、私はソースの主要部分を追加しました。 – Kenfly

関連する問題