我學習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++;
}
}
感謝您的回答,因爲您的想法,我試圖安裝最新的驅動程序,並且程序運行完美,所以問題已解決! – Kenfly 2012-02-15 11:34:44
但是出現了一些其他的問題,比如我在安裝ati驅動程序後運行的不是很流暢,例如,當我拖動一個窗口窗體,窗口會經常閃爍,我花了很長時間來解決這個問題,但是失敗了。 – Kenfly 2012-02-15 11:44:08
@ user1149333:您遇到的閃爍並不是您程序的問題,而是驅動程序內部管理窗口大小的工件。你無能爲力。它甚至不是一個bug,因爲在調整大小之後但在重畫之前的窗口內容是未定義的,因此可能是任何東西。我可以證實,我的機器上發生的是同樣的事情。至於Mesa驅動程序:不支持OpenGL-1.2的直線點畫肯定是一個錯誤。 – datenwolf 2012-02-15 12:29:15