在Maverick上使用GLFW3的C ++代码:glShaderSource没有匹配函数

时间:2014-07-09 22:30:58

标签: c++ macos opengl glfw

我正在尝试使用Mac上的库GLFW3编译一个相当简单的C ++程序。操作系统是OS 10.9.3(Maverick)。它编译好,直到我尝试使用GLS函数,如glShaderSource等。

以下是我使用的包含文件:

#include <GLFW/glfw3.h>
#include <cstdlib>
#include <cstdio>

我正在使用OpenGL3.2:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

这是编译程序的命令行:

clang++ -o xxxx xxxx.cpp  -framework Cocoa -framework OpenGL  -Wall -lglfw3 -I/usr/local/include/ -L/usr/local/lib  -framework Quartz -framework IOKit

现在错误:

xxxx:38:5: error: no matching function for call to 'glShaderSource'
    glShaderSource(vertexShader, 1, &vertexSource, NULL);

我确信我遗漏了一些基本的但是什么?谢谢你的帮助。我担心它与glext有关,但不确定该怎么做。我无法在网络上的Stackoverflow上找到任何内容。

1 个答案:

答案 0 :(得分:2)

在OS X上,您需要包含<OpenGL/gl3.h>以获取GL3 +级别入口点的定义。

在GLFW文档中,在“构建使用GLFX的程序”(http://www.glfw.org/docs/latest/build.html)页面上,有一个名为“GLFW标题选项宏”的部分。相关部分是:

  

可以在包含GLFW标头之前定义这些宏,并影响标头的行为。

     

GLFW_INCLUDE_GLCOREARB使标题包含现代GL / glcorearb.h标题(OS X上的OpenGL / gl3.h),而不是常规的OpenGL标题。

所以以下应该可以解决问题:

#define GLFW_INCLUDE_GLCOREARB
#include <GLFW/glfw3.h>

查看glfw3.h标题(http://www.glfw.org/docs/latest/glfw3_8h_source.html),确认其中包含<OpenGL/gl3.h>此附加定义。