Mac xCode配置OpenGl开发环境(C++);

Mac xCode配置OpenGl开发环境C++;


配置过程
  • 安装homebrew
    -打开命令行输入
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 安装GLEW和GLFW
    -在命令行分别输入。
brew install glew
brew install glfw

-brew的安装目录在/usr/local/Cellar下面,后面会使用到此路径。

  • 新建一个xCode Command Line C++项目。
    在这里插入图片描述
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-esFWwRyT-1617015663423)(attachments/47b1e973.png)]

-修改生成项目的Bulid Settings的Header Search Paths和Library Search Paths。(usr文件夹默认隐藏,关闭隐藏的快捷键为shift+command+.)。打开访达直接拖进来即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VO6Qioza-1617015663424)(attachments/b1ac5a3c.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q5W0T68g-1617015663425)(attachments/ecb5ffb2.png)]

-修改Bulid Phases的Link Binary With Libraries(其中2个dylib文件直接搜索不出来,需要addFile从2个lib库里面找)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TR8OR8oc-1617015663425)(attachments/b0bd84e8.png)]

  • 下载GLAD库(3.3亲测无误)
    GLAD
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2HloNhv5-1617015663426)(attachments/e48e5ea3.png)]

  • 测试代码

#include<glad/glad.h>
#include<GLFW/glfw3.h>
#include<iostream>
 
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);
 
//定于窗口宽高
//const unsigned int SCR_WIDTH = 800;
//const unsigned int SCR_HEIGHT = 600;
 
int main()
{
 
    glfwInit();//初始化GLFW
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//OpenGL 主版本号
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//OpenGL 次版本号
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//使用核心模式(Core-profile)
 
    //使用的是Max OS X系统,将下面代码解除注释
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
 
    //Open GLFW Window
    GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    //创建完窗口我们就可以通知GLFW将我们窗口的上下文设置为当前线程的主上下文
    glfwMakeContextCurrent(window);
 
    //GLAD是用来管理OpenGL的函数指针的,所以在调用任何OpenGL的函数之前我们需要初始化GLAD
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }
    //注册framebuffer_size_callback函数,告诉GLFW我们希望每当窗口调整大小的时候调用这个函数
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
 
    //渲染循环 Render Loop
    while (!glfwWindowShouldClose(window))//glfwWindowShouldClose函数在我们每次循环的开始前检查一次GLFW是否被要求退出
    {
        //输入
        processInput(window);
        
        //渲染指令
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);//清空颜色缓冲
 
        //检查并调用事件,交换缓冲
        glfwPollEvents();//glfwPollEvents函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)
        glfwSwapBuffers(window);//glfwSwapBuffers函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上
    }
    
    //防止窗口一闪而过
    while(!glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    
    //释放/删除之前的分配的所有资源
    glfwTerminate();
    return 0;
}
 
//回调函数
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    //glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度(像素)
    glViewport(0, 0, width, height);
}
 
//检查用户是否按下了返回键(Esc)(如果没有按下,glfwGetKey将会返回GLFW_RELEASE。如果用户的确按下了返回键,我们将通过glfwSetwindowShouldClose使用把WindowShouldClose属性设置为 true的方法关闭GLFW。下一次while循环的条件检测将会失败,程序将会关闭
void processInput(GLFWwindow* window)
{
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
        glfwSetWindowShouldClose(window, true);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蟹 !

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值