这些天我正在学习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++;
}
}发布于 2012-02-15 18:37:51
我从你对@Lefteris的评论回答中看到,你正在使用基于Mesa3D/DRI的"radeon“驱动程序。我建议你从他们的网站上下载AMD的专业驱动程序(fglrx),安装后再试一次。
发布于 2012-02-15 12:58:22
您必须告诉我们您使用的是什么OpenGL上下文,才能了解它为什么不工作。例如,如果在Linux中是openGL 4上下文,那么glEnable(GL_LINE_STIPPLE)就不是openGL 4的一部分。
另一方面,在Windows中,如果你不创建一个特定的openGL上下文,你会得到一个默认的,它是一个绝对支持glEnable(GL_LINE_STIPPLE)的版本。
所以请告诉我们你在Linux中使用的是什么OpenGL上下文。
发布于 2012-02-16 00:33:29
点画原语是anything above a R200的TODO。
https://stackoverflow.com/questions/9288056
复制相似问题