环境配置:
GLFW:下载编译
- 地址:www.glfw.org/,首页有 src 下载
- 安装 CMake,brew install cmake
- 解压 1 的安装包
- 编译 libglfw3.a 产物,默认会出现在 /usr/local/lib 中
cd glfw-3.3.2
cmake .
make install
Glad:实现能力下载,OPENGL 规范的实现
- 按照如下配置下载 glad
- 下载好之后,确认文件夹和文件
配置 xcode 调试环境
-
Xcode 选择 command line 工程
-
创建工程
-
选择工程 -> build Settings, 设置头寻找头文件和外部链接库 folder 地址,
-
添加三方库,Build Phrase
- 注意,glad.c 需要一同与 source 一同编译,在 compile source 处
- 三方的链接库要包括
- 之前编译好的 libglfw3.a
- OPENGL
- IOKit
- Cocoa
写下第一份代码
- 在 main.cpp 中写下如下代码
//
// main.cpp
// opengllearn-new
//
// Created by on 2020/11/24.
//
#include <iostream>
#include <glad/glad.h>
#include <glfw3.h>
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;
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)
{
glViewport(0, 0, width, height);
}
int main(int argc, const char * argv[]) {
// glfw: initialize and configure
// ------------------------------
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
// glfw window creation
// --------------------
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// glad: load all OpenGL function pointers
// ---------------------------------------
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
// render loop
// -----------
while (!glfwWindowShouldClose(window))
{
// input
// -----
processInput(window);
// render
// ------
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
// -------------------------------------------------------------------------------
glfwSwapBuffers(window);
glfwPollEvents();
}
// glfw: terminate, clearing all previously allocated GLFW resources.
// ------------------------------------------------------------------
glfwTerminate();
return 0;
}
- 编译运行,出现如下窗口说明 opengl 之旅可以正式开始了