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

Posted

技术标签:

【中文标题】在 Maverick 上使用 GLFW3 的 C++ 代码:glShaderSource 没有匹配函数【英文标题】:C++ code using GLFW3 on Maverick: glShaderSource no matching function 【发布时间】:2014-07-09 22:30:57 【问题描述】:

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

这是我使用的包含文件:

#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 有关,但不确定真正要做什么。我在网上的 *** 上找不到任何东西。

【问题讨论】:

GLFW 不会向您的应用程序公开任何 OpenGL 函数。为此,您将需要 GLEW 之类的东西:glew.sourceforge.net @glampert:Mac OS 的标头包含必要的 OpenGL 函数定义。不需要 GLEW。我们这里不是在谈论 Windows... “我们这里不是在谈论 Windows”,我笑了:P Reto 的回答完美、内容丰富、完整,对我有用。所以这就是解决方案。我不得不插入标题。再次感谢,我总是对 *** 上人们的善意印象深刻,他们愿意分享他们的知识并花时间回答。 【参考方案1】:

在 OS X 上,您需要包含 &lt;OpenGL/gl3.h&gt; 以获取 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) 可以确认它将在此附加定义中包含 &lt;OpenGL/gl3.h&gt;

【讨论】:

非常感谢。我查看了 GLFW3 文档,但错过了这部分。太好了,再次感谢。

以上是关于在 Maverick 上使用 GLFW3 的 C++ 代码:glShaderSource 没有匹配函数的主要内容,如果未能解决你的问题,请参考以下文章

C OpenGL glfw3三角形不显示

linux中的C++ GLFW3全屏拉伸问题

错误:在 Linux 上使用 OpenGL 编译 C++ 程序时出现“GL/glfw3.h:没有这样的文件或目录”

GLFW3 中是不是有 glutDisplayFunc 等价物?

如果 OpenGL 3+ 请求,glfw3 不绘图?

Cmake 不适用于 Maverick 上的 openMP