zoukankan      html  css  js  c++  java
  • Mac搭建OpenGL开发环境

    一、构建GLFW

    GLFW 是配合 OpenGL 使用的轻量级工具程序库,缩写自 Graphics Library Framework(图形库框架)。GLFW 的主要功能是创建并管理窗口和 OpenGL 上下文,同时还提供了处理手柄、键盘、鼠标输入的功能。

    下载地址:https://www.glfw.org/download.html

    我们可以选择直接下载编译好的库,也可以下载源文件然后通过camke来自己编译,区别是如果用cmake库的话,在执行成功以后,会直接将生成的库与头文件分别添加到系统路径,也就是/usr/local/include和/usr/local/lib。

    这里我选择了下载编译好的库

    二、配置GLAD

    GLAD是一个开源项目:https://github.com/Dav1dde/glad
    同时它还提供了一个在线服务:https://glad.dav1d.de/
    打开GLAD在线服务,如图11所示,我设置语言为C/C++,gl版本选择4.6:

     点击GENERATE按钮,GLAD现在应该提供给你了一个zip压缩文件,包含两个头文件目录,和一个glad.c文件

     

    三、创建XCode项目

    3.1 新建XCode项目,如图13所示,选择”Command Line Tool“:

    3.2 导入第三方库:

    将之前下载的编译好的GLFW库和GLAD文件导入项目中

     

     3.3 链接第三方库:

     设置libs搜索路径:

     设置头文件的搜索路径:

     3.4 把glad.c加入到工程项目中:

     3.5 示例代码:

     1 #include <glad.h>
     2 #include <glfw3.h>
     3 
     4 #include <iostream>
     5 
     6 void framebuffer_size_callback(GLFWwindow* window, int width, int height);
     7 void processInput(GLFWwindow *window);
     8 
     9 // settings
    10 const unsigned int SCR_WIDTH = 800;
    11 const unsigned int SCR_HEIGHT = 600;
    12 
    13 int main()
    14 {
    15     // glfw: initialize and configure
    16     // ------------------------------
    17     glfwInit();
    18     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    19     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    20     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    21 
    22 #ifdef __APPLE__
    23     glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    24 #endif
    25 
    26     // glfw window creation
    27     // --------------------
    28     GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
    29     if (window == NULL)
    30     {
    31         std::cout << "Failed to create GLFW window" << std::endl;
    32         glfwTerminate();
    33         return -1;
    34     }
    35     glfwMakeContextCurrent(window);
    36     glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
    37 
    38     // glad: load all OpenGL function pointers
    39     // ---------------------------------------
    40     if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    41     {
    42         std::cout << "Failed to initialize GLAD" << std::endl;
    43         return -1;
    44     }
    45 
    46     // render loop
    47     // -----------
    48     while (!glfwWindowShouldClose(window))
    49     {
    50         // input
    51         // -----
    52         processInput(window);
    53 
    54         // render
    55         // ------
    56         glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    57         glClear(GL_COLOR_BUFFER_BIT);
    58 
    59         // glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
    60         // -------------------------------------------------------------------------------
    61         glfwSwapBuffers(window);
    62         glfwPollEvents();
    63     }
    64 
    65     // glfw: terminate, clearing all previously allocated GLFW resources.
    66     // ------------------------------------------------------------------
    67     glfwTerminate();
    68     return 0;
    69 }
    70 
    71 // process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly
    72 // ---------------------------------------------------------------------------------------------------------
    73 void processInput(GLFWwindow *window)
    74 {
    75     if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
    76         glfwSetWindowShouldClose(window, true);
    77 }
    78 
    79 // glfw: whenever the window size changed (by OS or user resize) this callback function executes
    80 // ---------------------------------------------------------------------------------------------
    81 void framebuffer_size_callback(GLFWwindow* window, int width, int height)
    82 {
    83     // make sure the viewport matches the new window dimensions; note that width and
    84     // height will be significantly larger than specified on retina displays.
    85     glViewport(0, 0, width, height);
    86 }

    3.6 示例代码的运行结果

    四、遇到的问题

    按照步骤配置,发现并没有成功运行,出现如下错误:

    dyld: Library not loaded: @rpath/libglfw.3.dylib

      Referenced from: /Users/a11/Library/Developer/Xcode/DerivedData/GlfwTest-fswltakqdftvrjhcuqcxnrfzjoko/Build/Products/Debug/GlfwTest

      Reason: image not found

    这个意思是找不到dylib库图片(镜像)了,我们再来确认下这个库是否链接了

     

     发现这个库文件确实存在,是不是重新导入就好了,结果重新导入没有成功。

    解决办法:

    将出现问题的Framework拷贝到项目里去,步骤如下图所示:

     

     把出现Reason:image not found的Framework添加进去

     添加之后再次运行,成功运行! 

     项目链接

  • 相关阅读:
    32位系统最大只能支持4GB内存之由来
    无线传感器网络中的节点定位技术
    Python 面向对象编程(一)
    Eclipse+PyDev+Django+Mysql搭建Python web开发环境
    Python中的函数(二)
    关于raw_input()和sys.stdin.readline()的区别
    Python中的函数(三)
    将Sublime Text 2搭建成一个好用的IDE
    Windows Phone 7 Tips (1)
    Expression Blend 知识锦分享
  • 原文地址:https://www.cnblogs.com/ring1992/p/12973566.html
Copyright © 2011-2022 走看看