为什么OpenGL告诉我,在我指定的情况下我已经使用了GL_STATIC_DRAW?

时间:2017-10-16 13:15:32

标签: c++ debugging opengl graphics

当我使用OpenGL启用调试层时,我会注册一个回调,只要有任何注意事项告诉我,就会调用它。似乎并非所有传递给回调的消息都是错误。有一个" OTHER"类别,它似乎只要你做了什么就会输出这些信息。在我的例子中,我创建了一个VBO:

GLuint VBO_ID;
glGenBuffers(1, &VBO_ID); // The VBO_ID I get back is 3.
glBindBuffer(GL_ARRAY_BUFFER, VBO_ID);
glBufferData(GL_ARRAY_BUFFER, sizeInBytes, vertices, GL_DYNAMIC_COPY);
// At this point the callback is called, which gives the message:
  

message:Buffer详细信息:Buffer object 3(绑定到   GL_ARRAY_BUFFER_ARB,用法提示为GL_STATIC_DRAW)将使用VIDEO   内存作为缓冲区对象操作的源。

无论使用提示是什么(glBufferData的最后一个参数),此消息总是说使用提示为GL_STATIC_DRAW。无论我使用GL_DYNAMIC_COPYGL_DYNAMIC_DRAWGL_STATIC_READ,还是其他任何内容。消息总是一样的。

所以是的,我对此非常困惑。另外,为什么它会传达这个信息,它不是一个警告,因为我没有做错任何事,它只是一个确认。我已经结束了这个" OTHER"消息的类别,否则我的日志就会被这些消息填满,因为只要我做某事就会调用它。

1 个答案:

答案 0 :(得分:0)

  1. 如果您启用低严重性/信息/其他,Nvidia驱动程序非常详细,请随时禁用这些
  2. 正如其他人所说,GL_DYNAMIC_COPY只是一个提示,司机可以随意忽略它。
  3. 根据您对缓冲区的访问模式,您可能会看到在不同位置(主机内存,DMA)重新创建消息说明缓冲区
  4. 不要担心这个常数,只需输入GL_STATIC_DRAW即可。它是旧GL版本的剩余部分。您还可以使用glBufferStorage,您可以更精确地指定缓冲区使用情况。