【问题标题】:Weird GL_INVALID_OPERATION error in OpenGLOpenGL 中奇怪的 GL_INVALID_OPERATION 错误
【发布时间】:2013-08-14 14:09:55
【问题描述】:
glClearColor( 1.0f, 1.0f, 1.0f, 1.0f );

AttachVertexShader( shader, "szescian_vs.glsl" );
AttachFragmentShader( shader, "szescian_fs.glsl" );
LinkProgram( shader );

glBindVertexArray( vertexVAO );

glGenBuffers( 1, &positionBuffer );

glGenBuffers( 1, &positionBuffer );
glBindBuffer( GL_ARRAY_BUFFER, positionBuffer );
glBufferData( GL_ARRAY_BUFFER, sizeof( position ), position, GL_STATIC_DRAW );
positionLoc = glGetAttribLocation( shader, "inPosition" );
glEnableVertexAttribArray ( positionLoc );
glVertexAttribPointer ( positionLoc, 3, GL_FLOAT, GL_FALSE, 0, ( void* ) 0 ); //here gDEBugger GL breaks on OpenGL Error

它是我的 init 函数的一部分,我真的不知道为什么 gDEBugger 会中断它,谁能帮我解释一下?

中断原因 OpenGL 错误中断 glVertexAttribPointer(0 , 3 , GL_FLOAT , FALSE , 0 , 0x00000000) 错误代码
GL_INVALID_OPERATION 错误描述 指定的操作是 当前状态不允许。有问题的功能被忽略, 除了设置错误标志之外没有任何副作用。 * 在函数执行前停止

这是休息信息。

【问题讨论】:

  • 我的猜测是 (void*) 0 是指向 0x00000000 处内存的指针,因为它是内存的开头,所以可能无法访问,应该保留
  • 我不太喜欢 openGL。但是文档对每个参数及其用途有什么看法?
  • @Xtroce 不,该指针被解释为当前绑定缓冲区的偏移量。

标签: c++ opengl opengl-3


【解决方案1】:

glVertexAttribPointer()可能产生的GL_INVALID_OPERATION错误:

  1. 如果大小为GL_BGRA 且类型不是,则生成GL_INVALID_OPERATION GL_UNSIGNED_BYTEGL_INT_2_10_10_10_REVGL_UNSIGNED_INT_2_10_10_10_REV

  2. 如果类型为GL_INT_2_10_10_10_REV,则生成GL_INVALID_OPERATIONGL_UNSIGNED_INT_2_10_10_10_REV 且大小不是 4 或 GL_BGRA

  3. GL_INVALID_OPERATION 如果 type 为 GL_UNSIGNED_INT_10F_11F_11F_REV 并且大小不是 3。

  4. GL_INVALID_OPERATIONglVertexAttribPointer 生成,如果大小 是GL_BGRA,标准化是GL_FALSE

  5. GL_INVALID_OPERATION 如果将零绑定到 GL_ARRAY_BUFFER缓冲区对象绑定点和指针参数 不是NULL

http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribPointer.xml

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多