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(无效值)的主要内容,如果未能解决你的问题,请参考以下文章