OpenGL GL_LINE_STRIP 在 glEnd 后给出错误 1281(无效值)

Posted

技术标签:

【中文标题】OpenGL GL_LINE_STRIP 在 glEnd 后给出错误 1281(无效值)【英文标题】:OpenGL GL_LINE_STRIP gives error 1281 (Invalid value) after glEnd 【发布时间】:2010-05-28 13:57:24 【问题描述】:

我不知道简单代码有什么问题。该函数用于python和ctypes。

extern "C" void add_lines(bool antialias,GLdouble coordinates[][2],int array_size,GLdouble w,GLdouble r,GLdouble g, GLdouble b,GLdouble a)
    glDisable(GL_TEXTURE_2D);
    if (antialias)
        glEnable(GL_LINE_SMOOTH); //Enable line smoothing.
    
    glColor4d(r,g,b,a);
    glLineWidth(w);
    glBegin(GL_LINE_STRIP);
    for (int x = 0; x < array_size; x++) 
        glVertex2d(coordinates[x][0],coordinates[x][1]);
    
    glEnd();
    std::cout << glGetError();
    if (antialias)
        glDisable(GL_LINE_SMOOTH); //Disable line smoothing.
    
    glEnable(GL_TEXTURE_2D);

std::cout

谢谢。

【问题讨论】:

在函数开头添加一个类似的 cout 以确保错误发生在其中。它可能是早期操作的结果(例如 glTexImage2d)。在您的代码中,如果 w 小于或等于 0,则 glLineWidth 会生成该错误 是的,你是对的。由于某种原因,GLdouble 接近于零。在 python 脚本中,它通常是 1,但总是一个非常小的数字。我会检查其他双精度值。 是的,它们都非常小。我会看看我是否真的需要事先将它们转换为 ctypes。我认为 ctypes 会自动转换数字。 宽度的错误消失了。 glEnd 的错误没有。 :( 【参考方案1】:

glGetError() 具有粘性:一旦某个函数设置了错误,它将保持该错误值,直到您调用 glGetError()。因此,错误可能是在其他地方引起的。检查函数入口处glGetError() 的值,然后在每个函数调用之后找出它的设置位置。

【讨论】:

阅读我为最后一个答案写的内容。不过我会再检查一次。 哎呀。我确实在 glEnd 之后得到它,但也在 glLineWidth 之后得到它。 "width - 1.08222e-31" 我猜是我的问题。我会看看我能做什么。 现在我已经整理好参数了。您的回答让我再次正确检查 glGetError ,然后我发现了一些我错过的东西。谢谢你和其他所有人。【参考方案2】:

您确定错误没有在 glEnd 之前触发吗? glGetError 会报告最后一个 GL 错误,这可能是在程序执行的早期引起的。

【讨论】:

感谢您的意见。我到处使用 cout,然后发现它起源于 glEnd 之后。

以上是关于OpenGL GL_LINE_STRIP 在 glEnd 后给出错误 1281(无效值)的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL入门02.使用OpenGL绘制三角形多边形

OpenGL基础篇——使用面向对象方法封装OpenGL函数

带有附加数据的 OpenGL 索引缓冲区对象

如何使用 Legacy OpenGL 绘制不同颜色的线条?

如何在Android上将OpenGL ES 1.0代码转换为OpenGL Es 2.0?

opengl 动态贝塞尔曲线有间隙 - glEvalCoord1f();