C++ glVertexPointer报告的GLU操作无效,即使glEnableClientState(GLU顶点数组)调用

C++ glVertexPointer报告的GLU操作无效,即使glEnableClientState(GLU顶点数组)调用,c++,opengl,opengl-2.0,C++,Opengl,Opengl 2.0,我的作业使用了OpenGL 2.0管道。问题是,当我尝试设置glvertexinter时,我得到了无效的GL\u操作(错误1282) 我在网上找不到关于此错误的详细信息,但据我所知,此错误是由于在调用glvertexinter之前未调用glEnableClientState(GL\u VERTEX\u ARRAY)造成的 以下是我调用这两个函数的代码: glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(4, GL_DOUBLE, size

我的作业使用了
OpenGL 2.0管道
。问题是,当我尝试设置
glvertexinter
时,我得到了无效的
GL\u操作(错误1282)

我在网上找不到关于此错误的详细信息,但据我所知,此错误是由于在调用
glvertexinter
之前未调用
glEnableClientState(GL\u VERTEX\u ARRAY)
造成的

以下是我调用这两个函数的代码:

glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(4, GL_DOUBLE, sizeof(vert), (void *)0);
我已经检查了调用
glvertexpinter
之前是否存在错误,
glError
在调用此函数之前返回0。这个错误似乎是由其他原因引起的。可能导致此问题的其他情形有哪些

我为一个有点枯燥的问题道歉;我真的不知道我还能提供什么。如果您需要查看其他代码段,请让我知道我可以提供什么。

gl\uuuu指针(…)
永远不会因为相应的固定函数客户端数组状态未启用而生成gl\u无效\u操作错误。当您进行类似于
glDrawElements(…)
的绘制调用时,将使用该状态。在禁用数组指针时指定此指针不是错误

但是,在以下三种情况下进行顶点指针调用是一种错误(将生成GL\u INVALID\u操作):

  • 调用线程中没有活动的渲染上下文
  • 您使用的是OpenGL 3.2核心上下文,没有顶点数组对象绑定
  • 您有一个OpenGL 3.2核心上下文,正在调用一个不推荐使用的函数
  • 如果您有一个3.2+核心上下文,要点2和3都将应用于这个特定的API调用。顶点数组对象实际上是所有顶点缓冲区绑定、数组指针和绘图调用都与之相关的附加上下文。在OpenGL 3.2内核中,如果没有顶点数组对象绑定,那么这些函数没有上下文,你可以认为这种情况是子弹1的专门化。

    在一对
    glBegin(…)
    glEnd(…)
    调用之间调用
    glvertexinter(…)
    也是一个未定义的操作。在这些情况下,实现可能生成错误,也可能不生成错误,如果生成错误,则将生成GL\u INVALID\u操作。这适用于绝大多数OpenGL API调用,如果它与在即时模式下指定顶点数据无关,则它不属于
    glBegin(…)
    glEnd(…)
    之间

    实际的API参考页(即)从未提及我上面概述的三种情况中的任何一种GL\u INVALID\u OPERATION是类似GL\u OUT\u of\u MEMORY的错误之一,具有隐含意义,可以由整个API调用类生成,而无需在手册页面中提及。您应该熟悉GL\u无效\u操作的最常见原因。

    GL\u指针(…)
    不会仅仅因为相应的固定函数客户端数组状态未启用而生成GL\u无效\u操作错误。当您进行类似于
    glDrawElements(…)
    的绘制调用时,将使用该状态。在禁用数组指针时指定此指针不是错误

    但是,在以下三种情况下进行顶点指针调用是一种错误(将生成GL\u INVALID\u操作):

  • 调用线程中没有活动的渲染上下文
  • 您使用的是OpenGL 3.2核心上下文,没有顶点数组对象绑定
  • 您有一个OpenGL 3.2核心上下文,正在调用一个不推荐使用的函数
  • 如果您有一个3.2+核心上下文,要点2和3都将应用于这个特定的API调用。顶点数组对象实际上是所有顶点缓冲区绑定、数组指针和绘图调用都与之相关的附加上下文。在OpenGL 3.2内核中,如果没有顶点数组对象绑定,那么这些函数没有上下文,你可以认为这种情况是子弹1的专门化。

    在一对
    glBegin(…)
    glEnd(…)
    调用之间调用
    glvertexinter(…)
    也是一个未定义的操作。在这些情况下,实现可能生成错误,也可能不生成错误,如果生成错误,则将生成GL\u INVALID\u操作。这适用于绝大多数OpenGL API调用,如果它与在即时模式下指定顶点数据无关,则它不属于
    glBegin(…)
    glEnd(…)
    之间

    实际的API参考页(即)从未提及我上面概述的三种情况中的任何一种GL\u INVALID\u OPERATION是类似GL\u OUT\u of\u MEMORY的错误之一,具有隐含意义,可以由整个API调用类生成,而无需在手册页面中提及。您应该熟悉导致GLU无效操作的最常见原因