在 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 上,您需要包含 <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>
。
【讨论】:
非常感谢。我查看了 GLFW3 文档,但错过了这部分。太好了,再次感谢。以上是关于在 Maverick 上使用 GLFW3 的 C++ 代码:glShaderSource 没有匹配函数的主要内容,如果未能解决你的问题,请参考以下文章
错误:在 Linux 上使用 OpenGL 编译 C++ 程序时出现“GL/glfw3.h:没有这样的文件或目录”