macOS Mojave配置OpenGL开发环境
---恢复内容开始---
前言:
本文写作目的:
是由于本人参考 csdn原文 的方法配置环境时踩了很多坑,所以在此写一篇文防止以后用到。
工具:
Xcode
CMake
步骤:
准备工作:
Xcode一般Mac用户都安装了。
1. 在终端键入 xcode-select --install 安装Xcode command Line Tools, 里面包含了很多Apple打包的常用工具,一定要安装。
2. 本人踩的第一个坑是macOS Mojave把 /usr/local/ 路径下的 include 和 lib 文件夹移除了,后面配置会找不到,所以我们先在终端键入 cd /Library/Developer/CommandLineTools/Packages/ 然后键入 open macOS_SDK_headers_for_macOS_10..pkg 来将头文件和库文件安装到 /usr/include ; /usr/lib 。
3. 后面的步骤会涉及往 include 文件夹和 lib 文件夹里添加文件的操作,这两个文件夹是连系统管理员都禁止修改的 ,所以我们必须按以下步骤赋予我们操作的权限:
(1) 重启
(2) 启动立即按住 command + r , 进入恢复模式 ,在恢复模式里打开终端 , 键入 csrutil disable
(3) 重启
4. 之后安装CMake下载CMake ,下载macOS版本的dmg安装文件 , 安装CMake
5. 进入 下载GLFW,下载GLFW的Source Package (源代码)
6. 根据 learnopgl网“创建窗口”下方的CMake部分,将你下载的GLFW文件夹进行编译(记得在这个文件夹里再新建一个叫build的文件夹,用作CMake的编译目标文件夹)。编译完成后浏览一下 build/src ,里面有一个 libglfw3.a 文件,将它复制进 /usr/lib 文件夹中
7. 终端cd进你的build目录,依次键入 make 与 make install , 完成后关闭终端
8. 进入glad 在线服务 网站, 将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本(我们的教程中将使用3.3版本,但更新的版本也能正常工作)。之后将模式(Profile)设置为Core,并且保证生成加载器(Generate a loader)的选项是选中的。现在可以先忽略拓展(Extensions)中的内容。都选择完之后,点击生成(Generate)按钮来生成库文件。然后在文件列表里点击glad.zip文件进行下载。
9. 下载后的压缩包有两个头文件文件夹(glad和KHR)和一个 glad.c 文件,解压出来 , 将此两个头文件文件夹与之前编译的glfw根目录里的include文件夹里的GLFW文件夹一并复制进 /usr/include 文件夹中 (重点)
10. 打开Xcode,新建一个macOS下的command Line tool工程,语言选择C++,进入工程配置(假设我们的工程就叫OpenGL):
(1) 在左侧文件栏右键(工程名)文件夹
选择 Add files to "(工程名)" , 将之前解压的 glad.c 文件添加进来,此文件实现了 glad.h 中的大量功能
(2) 左键点击(工程名)文件夹上方的(工程名),进入配置界面
首先如图在搜索框输入search,找到两个配置头文件和库文件的选项,双击它们来添加我们的路径:
然后我们移动到 Build Phases 选项卡,在 Link Binary With Libraries 中将五个 .framework 以及我们拷贝进lib的 libglfw3.a 文件添加进我们的工程 : (注意,五个framework文件可以直接在弹出的搜索框里搜索到,但是 libglfw3.a 需要我们手动点击 Add other 并在 /usr/bin 中找到)
现在,我们离成功不远了,在文件列表里新建一个 main.cpp , 添加如下内容测试( glad.h必须在glfw3.h上面 ):
#include <glad/glad.h>
#include <GLFW/glfw3.h> int main()
{
return 0;
}
此时有一定的可能Xcode会提示找不到这两个头文件,我就是踩了这个坑,明明配置里已经写清楚了怎么有这种神经错误.....
我的解决方案是,将 /usr/ 下的include和lib文件夹直接拷贝到一个你认为合适的地方,再在Xcode配置里改为你的路径。
现在,我猜你的Xcode已经能成功编译了,将你的 main.cpp 的内容改为我引用的csdn博主的代码来测试:
// System Headers
#include <glad/glad.h>
#include <GLFW/glfw3.h> // Standard Headers
#include <cstdio>
#include <cstdlib>
#include <iostream> void framebuffer_size_callback(GLFWwindow* window, int width, int height);//回调函数原型声明
void processInput(GLFWwindow *window); // settings
const unsigned int SCR_WIDTH = ;
const unsigned int SCR_HEIGHT = ; int main(int argc, char * argv[]) { //初始化GLFW
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, );
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, );
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X
#endif
//创建一个窗口对象
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "FirstGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -;
}
//通知GLFW将我们窗口的上下文设置为当前线程的主上下文
glfwMakeContextCurrent(window);
//对窗口注册一个回调函数,每当窗口改变大小,GLFW会调用这个函数并填充相应的参数供你处理
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
//初始化GLAD用来管理OpenGL的函数指针
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -;
} //渲染循环
while(!glfwWindowShouldClose(window))
{
// 输入
processInput(window); // 渲染指令
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT); // 检查并调用事件,交换缓冲
glfwSwapBuffers(window);//检查触发事件
glfwPollEvents(); //交换颜色缓冲
} //释放/删除之前的分配的所有资源
glfwTerminate();
return EXIT_SUCCESS;
} //输入控制,检查用户是否按下了返回键(Esc)
void processInput(GLFWwindow *window)
{
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
} // 当用户改变窗口的大小的时候,视口也应该被调整
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
// 注意:对于视网膜(Retina)显示屏,width和height都会明显比原输入值更高一点。
glViewport(, , width, height);
}
---------------------
作者:milletluo
来源:CSDN
原文:https://blog.csdn.net/lm409/article/details/78420044
版权声明:本文为博主原创文章,转载请附上博文链接!
不出意外的话,运行成功会出现一个啥也没有的绿色窗口,表明我们大功告成了!
macOS Mojave配置OpenGL开发环境的更多相关文章
- VC 6中配置OpenGL开发环境
2010,2012中配置类似 http://hi.baidu.com/yanzi52351/item/f9a600dffa4caa4ddcf9be1d VC 6中配置OpenGL开发环境 这里,我习惯 ...
- Windows 7 Visual Studio 2008配置OpenGL开发环境
Windows 7 Visual Studio 2008配置OpenGL开发环境 glut下载地址: http://www.opengl.org/resources/libraries/glut/gl ...
- VS2010配置OpenGL开发环境
OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口.OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应 ...
- cocos2d-x3.0 macOS下配置Android开发环境以及使用cocos2d-console来新建执行project
下面是子龙山人录制的关于cocos2d-x3.0的视频教程,macOS下配置Android开发环境.使用cocos2d-console来新建执行project.怎样执行cocos2d-x 3.0win ...
- VS2010配置OpenGL开发环境(转)
OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口.OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应 ...
- macOS 下配置 MAMP 开发环境(Mac + Apache + Mysql + PHP)
macOS 中已经内置了 PHP.Python.Ruby.Perl 等常用的脚本语言,以及 Apache HTTP 服务器,所以使用起来非常方便.本文以最新的 macOS Sierra 10.12 配 ...
- vs2015配置OpenGL开发环境
先吐槽下,不知道微软怎么整的,从win7开始,OpenGL的头文件更改到windows SDK中,不安装就不能用. 更搞笑的是,在win10下,vs2015安装还报win sdk安装失败,这典型的自己 ...
- [OpenGL]VS2010配置OpenGL开发环境
opengl概述 OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口. OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任 ...
- 【最新版】从零开始在 macOS 上配置 Lua 开发环境
脚本语言,你可能更需要的是 Lua 不同的脚本语言有不同的特性,第一接触的脚本语言,可能会影响自己对整个脚本语言的理解和认知.我以前接触最多的脚本语言是 JavaScript.后果就是:我一度以为脚本 ...
随机推荐
- SQL 行转列 PIVOT 学习示例
CREATE TABLE [StudentScores] ( ), --学生姓名 ), --科目 [Score] FLOAT, --成绩 ) select * from [StudentScores] ...
- Ajax异步交互基础
1. ajax是什么? * asynchronous javascript and xml:异步的js和xml * 它能使用js访问服务器,而且是异步访问! * 服务器给客户端的响应一般是整个页面,一 ...
- Data Protection - how to manage expired key?(转载)
问 According to ASP.NET Key Management: Deleting a key is truly destructive behavior, and consequentl ...
- 使用FreeHttp强制登出微信公众号登陆状态(实现~原理)
概述 我们使用的部分网站设计成一旦登录即不允许用户手动退出,现实场景中是没有问题的 但如果是在测试或调试过程中就会有强制登出的需求 如果当前使用的是PC浏览器,您或许可以通过调试模式清除保持登录信息的 ...
- Vue (三) --- Vue 组件开发
------------------------------------------------------------------好心情,会让你峰回路转. 5. 组件化开发 5.1 组件[compo ...
- vue 绑定样式的几种方式
vue 绑定样式 对象语法 1.v-bind:class设置一个对象,动态切换class <div :class="{'active':isActive}">xxx&l ...
- springboot配置SSL自签名证书
1.证书生成 每一个JDK或者JRE里都有一个工具,叫做:keytool,安装了jdk或jre之后,配置好JAVA环境之后,就可以直接在控制台使用该命令生成自签名证书: 在控制台输入: keytool ...
- Counting Sort(Java)
public static void countingsort(int[] a, int n) //n = a.length { int max = a[0], min = a[0]; for(int ...
- 手动安装Package Control
手动下载一个package control的包:https://github.com/wbond/package_control 然后Download ZIP后,解压,将解压后的文件夹重命名为 Pac ...
- Spring项目定时任务
最近某协会网站有个需求:显示当天访问量,很明显需要做俩步:一个是访问请求量的显示,一个需要每天00点恢复访问次数为0 所以需要做个定时任务:每天00点更新: 注解用法Spring配置: 1.在spri ...