【问题标题】:glGenVertexArrays Not Initializing VAO arrayglGenVertexArrays 未初始化 VAO 数组
【发布时间】:2015-03-06 15:40:51
【问题描述】:

我正在尝试使用 MFC 学习更新版本的 OpenGL,并且我正在关注红皮书。

我已经对一个 SDI 项目进行了快速测试,其中:

  1. 在我的 CView 继承类中,我创建了比赛并开始了 glew。

  2. 添加了一个名为“实体”的类,我在其中写下了第一个示例的部分内容,特别是顶点和缓冲区的初始化。

  3. 在我的 CView 的 OnDraw 中,我调用 entity.Draw() 并获得了一些结果。

现在,我已经移动了 CView 继承类 (COGLView) 和 DLL 中的实体,创建了一个测试项目,其中我的视图继承自 COGLView,并且我有一个实体对象。 我深入研究了我的实体构造函数来检查一些东西,我注意到:

glGenVertexArrays( NumVAOs, m_vVAOs );

对 m_vVAOs 没有任何作用,而在之前的测试项目中(在将内容移入 dll 之前)将值 m_vVAOs[0] 设置为 1。 这是正常的还是我做错了什么? 另外,请随时问我可能有用的部分代码。

附录:每个 gl* 函数以代码 0 退出...(glCreateProgram、glCreateShader...)

【问题讨论】:

  • 将这个移动到 DLL 的唯一可能更改与线程本地存储有关。一些框架将当前活动的渲染上下文存储在 TLS 中,并且不能很好地与 DLL 配合使用 - 但如果是这种情况,从 DLL 调用时没有 GL 命令会产生任何影响。只是对 glGenVertexArrays (...) 的调用行为异常吗?
  • 好吧,我尝试用旧的方式(glBegin....)在 Draw 函数中画一些线,一切都很顺利。我几乎不知道其他功能发生了什么。 m_vVAOs 保持未初始化,而着色器没有被编译(但这可能是另一个与此无关的错误)。

标签: c++ opengl mfc


【解决方案1】:

正如猜测的那样,这是我的错:我在设置 OpenGL 上下文之前进行操作。

【讨论】:

    猜你喜欢
    • 2015-10-03
    • 2012-01-08
    • 2018-10-17
    • 2014-11-30
    • 1970-01-01
    • 2020-10-24
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多