我正在尝试在Xcode 5(Mac OSX 10.8.4)上为我的OpenGL项目设置GLFW3。我已成功安装并将我的项目链接到GLFW3没问题。我甚至在项目中成功创建了一个窗口,我能够通过窗口检测鼠标和键盘输入,所以我相信我正确地连接了GLFW3(或者至少看起来如此)。
但是,当我尝试绘制对象时出现问题。这是出现错误的代码片段:
#include <GLFW/glfw3.h>
void LoadObject()
{
glGenVertexArrays(1, &VAO_myObj); // ERROR : Use of undeclared identifier 'glGenVertexArrays'
glBindVertexArray(VAO_myObj); // ERROR : Use of undeclared identifier 'glBindVertexArray'
glGenBuffers(1, &VBO_myObj); // No error
glBindBuffer(GL_ARRAY_BUFFER, VBO_myObj); // No error
glBufferData(blah blah blah); // No error
glEnableVertexAttribArray(0); // No error
glVertexAttribPointer(blah); // No error
glBindBuffer(GL_ARRAY_BUFFER, 0); // No error
glBindVertexArray(0); // ERROR : Use of undeclared identifier 'glBindVertexArray'
}
所以,这让我相信GLFW3无法以某种方式链接到那些功能(?)。当我向Xcode键入“glGen ...”时,我只在弹出窗口中看到以下4个函数:
void glGenBuffers(GLsizei n, GLuint * buffers)
GLuint glGenLists(GLsizei range)
void glGenQueries(GLsizei n, GLuint * ids)
void glGenTextures(GLsizei n, GLuint * textures)
所以,很可能glgenVertexArrays()确实从库中丢失了。
同样对于“glBind ...”,当我输入Xcode的名称时,只有这些出现在弹出窗口中:
void glBindAttribLocation(GLuint program, GLuint index, const GLchar * name)
void glBindBuffer(GLenum target, GLuint buffer)
void glBindTexture(GLenum target, GLuint texture)
我在哪里看到列表中的glBindVertexArray()。
因此,似乎缺少glGenVertexArrays()和glBindVertexArray()。但他们怎么会错过这些重要的功能呢?所以,我最有可能在这里错过了一些东西。
我只是想知道是否有人之前使用Xcode 5遇到过GLFW3这个问题?顺便说一下,我没有使用glew或任何其他OpenGL支持的东西。我只使用GLFW3。
我很感激有关此问题的任何提示或指针。
在旁注中,您会建议在Mac上为一个现代(基于着色器的)OpenGL项目创建一个窗口吗?
提前感谢您的帮助。
答案 0 :(得分:18)
您需要在OS X上包含<OpenGL/gl3.h>
才能使用OpenGL 3.2核心API调用。请注意,如果同时包含<OpenGL/gl.h>
和<OpenGL/gl3.h>
,则可能会收到编译器警告,这是因为gl3.h
有两个目的:
它们实际上是互斥的,正确的标题取决于您使用的上下文版本:
#include <OpenGL/gl.h>
#include <OpenGL/gl3.h>
答案 1 :(得分:10)
GLFW3默认包含<GL/gl.h>
。要包含<GL/gl3.h>
,您需要在#define GLFW_INCLUDE_GLCOREARB
#include <GLFW/glfw3.h>
在使用自制软件的GLFW3的Mac OSX安装中,include之前的define宏将使用OpenGL/gl3.h
。它可以在头文件中看到:
#if defined(__APPLE__)
#if defined(GLFW_INCLUDE_GLCOREARB)
#include <OpenGL/gl3.h>
#if defined(GLFW_INCLUDE_GLEXT)
#include <OpenGL/gl3ext.h>
#endif
...
glfw3的build guide概述了定义选项。这也减轻了编译器的警告。