C++ OpenGL Superbible中的GLBatch问题

C++ OpenGL Superbible中的GLBatch问题,c++,macos,opengl,glut,access-violation,C++,Macos,Opengl,Glut,Access Violation,环顾互联网,似乎有相当多的人有过这个问题,但没有明确的解决办法。对于那些读过《OpenGL超级圣经》(第5版)或没有读过《OpenGL超级圣经》的人来说,GLBatch类似乎在处理几何体方面有问题。以下是使用本书中的GLTools库的代码片段: triangleBatch.Begin(GL_TRIANGLES, 3); triangleBatch.Color4f(1.0f, 0.0f, 0.0f, 1.0f); triangleBatch.Vertex3f(-0.5f, 0.0f, 0.0f)

环顾互联网,似乎有相当多的人有过这个问题,但没有明确的解决办法。对于那些读过《OpenGL超级圣经》(第5版)或没有读过《OpenGL超级圣经》的人来说,
GLBatch
类似乎在处理几何体方面有问题。以下是使用本书中的
GLTools
库的代码片段:

triangleBatch.Begin(GL_TRIANGLES, 3);

triangleBatch.Color4f(1.0f, 0.0f, 0.0f, 1.0f);
triangleBatch.Vertex3f(-0.5f, 0.0f, 0.0f);

triangleBatch.Color4f(0.0f, 1.0f, 0.0f, 1.0f);
triangleBatch.Vertex3f(0.5f, 0.0f, 0.0f);

triangleBatch.Color4f(0.0f, 0.0f, 1.0f, 1.0f);
triangleBatch.Vertex3f(0.0f, 0.5f, 0.0f);

triangleBatch.End();
使用OpenGL 2.1,这是我正在使用的计算机上的默认值(MacOSX运行Mountain Lion,10.8.5版),此代码运行良好。但只要我将
GLUT\u 3\u 2\u CORE\u PROFILE
设置为
glutInitDisplayMode
的参数,我就会得到错误
error:address不包含指向对象文件中某个节的节
Thread 1:EXC\u BAD\u ACCESS(code=1,address=0x0)
triangleBatch.Begin(GL\u TRIANGLES,3)


我已经打开了
GLBatch.cpp
并注释掉了整个
GLBatch::Begin
函数,但仍然收到相同的错误。我完全不知道为什么会这样。这本书的作者显然知道访问OpeGL功能(如FBOs、现代GLSL等)需要核心配置文件。因此,为什么我不能让这么简单的代码工作?

作为与您的错误无关的旁注,“这本书的作者显然知道访问OpenGL功能(如FBOs、现代GLSL)需要核心配置文件”-不,访问这些功能不需要核心配置文件。@ChristianRau好的,也许需要不是这里要用的词。尽管据我所知,FBO只能用作兼容性配置文件中的扩展。至于GLSL,我的印象是许多功能只在更现代的版本(1.3及以上)中可用,例如关键字“in”和“out”。当然,许多功能只在更新的版本中可用。但这与个人资料没有任何关系。OpenGL版本4.4(例如)在每个配置文件中都具有所有现代功能,只是兼容性配置文件除了新的内容外,还包含旧的和不推荐的内容。所以“据我所知,虽然FBO只能用作兼容性配置文件中的扩展。”-不。@ChristianRau啊,我其实不知道。我想这只是一个新的和未知的领域。那么,关于这个问题,这就没有什么意义了,因为只有在我将GLUT设置为使用核心配置文件的情况下,OpenGL的新添加才会起作用。奇怪。。。。