C++ OpenGL线条条在glEnd后给出错误1281(无效值)

C++ OpenGL线条条在glEnd后给出错误1281(无效值),c++,python,opengl,ctypes,C++,Python,Opengl,Ctypes,我不知道这个简单的代码出了什么问题。该函数用于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_LIN

我不知道这个简单的代码出了什么问题。该函数用于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);
}
extern“C”void add_行(布尔反别名、GLdouble坐标[][2],int数组大小、GLdouble w、GLdouble r、GLdouble g、GLdouble b、GLdouble a){
glDisable(GL_纹理_2D);
if(反别名){
glEnable(GL_线_平滑);//启用线平滑。
}
GL4D(r,g,b,a);
线宽(w);
glBegin(GL_线_带);
对于(int x=0;x
std::cout您确定在glEnd之前没有触发错误吗?glGetError将报告最后一个GL错误,这可能是在程序执行的早期导致的。

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

是粘性的:一旦错误发生,g如果由某个函数设置,则在调用
glGetError()
之前,它将保持该错误值。因此,该错误可能是由其他地方引起的。请检查
glGetError()的值
在函数项上,然后在每次函数调用后找出它的设置位置。

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

在函数开头添加一个类似的cout,以确保错误发生在函数内部。这可能是早期操作的结果(例如glTexImage2d)。在您的代码中,如果w小于或等于0,glLineWidth可能会生成该错误。是的,您是对的。GLdouble由于某些原因接近于零。在python脚本中,它通常为1,但总是指向一个非常小的数字。我将检查其他双精度值。是的,它们都非常小。我将查看是否确实需要在ctype中转换它们s之前。我认为ctypes会自动转换数字。宽度的错误消失了。glEnd的错误没有。:(在函数开头添加一个类似的cout,以确保错误发生在函数内部。这可能是早期操作的结果(例如glTexImage2d)。在您的代码中,如果w小于或等于0,glLineWidth可能会生成该错误。是的,您是对的。GLdouble由于某些原因接近于零。在python脚本中,它通常为1,但总是指向一个非常小的数字。我将检查其他双精度值。是的,它们都非常小。我将查看是否确实需要在ctype中转换它们s之前。我以为ctypes会自动转换数字。宽度的错误消失了。格伦德的错误没有出现:(谢谢你的输入。我在任何地方都使用cout,然后发现它起源于格伦德之后。谢谢你的输入。我在任何地方使用cout,然后发现它起源于格伦德之后。请阅读我最后一个答案的内容。我会再次检查。哇。我确实在格伦德之后得到它,但也在格伦德之后。“宽度-1.08222e-31”我想这是我的问题。我会看看我能做些什么。现在我已经理清了争论。你的回答让我再次正确地检查glGetError,然后我发现了一些我遗漏的东西。谢谢你和其他人。阅读我最后一个答案的内容。我会再检查一次。哎呀。我确实在格伦德之后,但也是在gl之后得到它线宽。“宽度-1.08222e-31”我想这是我的问题。我会看看我能做些什么。现在我已经整理好了论点。你的回答让我再次正确地检查glGetError,然后我发现了一些我遗漏的东西。谢谢你和其他人。