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

C++ code using GLFW3 on Maverick: glShaderSource no matching function

本文关键字:glShaderSource 函数 代码 c++ Maverick GLFW3      更新时间:2023-10-16

我正在尝试使用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);

我确信我错过了一些基本的东西,但是什么?谢谢你的帮助。我担心这与ext有关,但不知道该怎么做。我在网上找不到任何关于Stackoverflow的东西

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

在GLFW文档中,在"构建使用GLFW的程序"一页。(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>与这个额外的定义。