gpt4 book ai didi

c++ - glVertexAttribPointer - 无效操作 - 存在缓冲区

转载 作者:行者123 更新时间:2023-11-28 02:21:46 26 4
gpt4 key购买 nike

我遇到了一些奇怪的问题。我在带有 glfw3 和 glew 的 ubuntu 15.04 上使用 OpenGL 4.3。在我的代码中,我有以下函数调用:

void VertexElement::bindAttribute(uint32 stride) {
GL_CALL(glEnableVertexAttribArray(mAttributeIndex));
GL_CALL(glVertexAttribPointer(mAttributeIndex, mComponentCount, (GLenum) mDataType,
mIsNormalized ? GL_TRUE : GL_FALSE, stride, reinterpret_cast<void*>(mDataOffset)));
}

GL_CALL 在 Debug模式下基本上可以:

  • glGetError()
  • 调用函数
  • glGetError() -> 不正常 -> 抛出异常

然后我在 glVertexAttribPointer() 中收到一个 INVALID_OPERATION 错误。使用调试器,我可以验证所有参数是否符合预期:

glVertexAttribPointer(0, 2, GL_FLOAT, FALSE, 16, 0x0000000000000000)

我正在检查文档并意识到没有记录到 INVALID_OPERATION 的单一可能性。 typesize 的所有限制似乎都不适用于此处,因为在此调用中 pointer 不是 NULL即使是可能的零缓冲区对象也适用。但即使不是,我在调用之前检查了 GL_ARRAY_BUFFER 上的绑定(bind),并且当前绑定(bind)了缓冲区 1。

所以在我看来,文档中描述的所有可能错误在我的情况下似乎都不可能,或者我遗漏了什么?这可能是什么其他原因?它可能是我的设置中的东西吗?我在笔记本电脑上 native 使用 ubuntu 并安装了 nvidia-346 驱动程序,但是我使用桌面上的 teamviewer 连接到机器(但是当没有 teamviewer 连接时也会发生错误)。以下是 GL_VERSION 等调用的输出:

Version:    4.3.0 NVIDIA 346.59
Renderer: GeForce GT 755M/PCIe/SSE2
Vendor: NVIDIA Corporation

我尝试创建一个调试上下文,我想附加一个调试消息回调,但以下所有函数都是 nullptr:glDebugMessageCallbackglDebugMessageCallbackARBglDebugMessageCallbackAMD , glDebugMessageControl, glDebugMessageControlARB, glDebugMessageControlAMD

我对这些结果感到有点困惑,如果有任何关于正确方向的提示,我将不胜感激!

最佳答案

看起来您在 Ubuntu 上有一个 Core Profile 上下文。对于 Core Profile,需要使用 VAO(顶点数组对象)。

Core Profile 规范说:

An INVALID_OPERATION error is generated by any commands which modify, draw from, or query vertex array state when no vertex array is bound.

这包括 glVertexAttribPointer()

关于c++ - glVertexAttribPointer - 无效操作 - 存在缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32166352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com