【发布时间】:2015-03-06 15:40:51
【问题描述】:
我正在尝试使用 MFC 学习更新版本的 OpenGL,并且我正在关注红皮书。
我已经对一个 SDI 项目进行了快速测试,其中:
在我的 CView 继承类中,我创建了比赛并开始了 glew。
添加了一个名为“实体”的类,我在其中写下了第一个示例的部分内容,特别是顶点和缓冲区的初始化。
在我的 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 保持未初始化,而着色器没有被编译(但这可能是另一个与此无关的错误)。