安裝環(huán)境
機(jī)器:macbook air
芯片: M1芯片(arm64)
macOS:macOS Ventura 13.4
VScode version:April 2023 1.78
下載GLAD與GLFW
一、下載GLAD
? 1. 從GLAD的在線(xiàn)服務(wù)下載所需的文件,參數(shù)選擇如下,可根據(jù)自己的需要進(jìn)行更換:
?
? 2. 點(diǎn)擊GENERATE生成
? 3. 下載相應(yīng)的壓縮包
? 4. 解壓縮,正確的目錄結(jié)構(gòu)如下所示:
glad
├── include
│ ├── KHR
│ │ └── khrplatform.h
│ └── glad
│ └── glad.h
└── src
└── glad.c
? 至此,GLAD的下載結(jié)束。
二、下載GLFW
? 1. GLFW官網(wǎng)處下載,可以選擇下載源碼然后自己進(jìn)行編譯,也可以選擇直接下載編譯好的庫(kù)文件。從源碼開(kāi)始編譯的話(huà)更加靈活,能夠靈活適配不同的操作系統(tǒng),也能讓自己對(duì)GLFW的源碼結(jié)構(gòu)有一個(gè)基本的了解。出于方便起見(jiàn)本文選擇了后者。
? 2. 下載下來(lái)的壓縮包如下所示,
? 3. 解壓壓縮包,得到目錄結(jié)構(gòu)如下的文件:
├── LICENSE.md
├── README.md
├── docs
├── include
├── lib-arm64
├── lib-universal
└── lib-x86_64
該目錄下主要用到兩個(gè)目錄。
首先,根據(jù)自己的芯片型號(hào)選擇lib-xxx,如果你是intel(x86)的芯片,那么就選擇lib-x86-64,如果你是新版的m1或者m2芯片(arm)那么就選擇lib-arm64。除此之外,lib-universal據(jù)說(shuō)是兩種芯片類(lèi)型都能兼容,但由于沒(méi)有機(jī)器,作者并未進(jìn)行測(cè)試,有興趣的同學(xué)可以自行測(cè)試一下。
其次,除了lib-xxx外,還需要用到的一個(gè)目錄是include目錄中的文件,剩下的文件和目錄可以刪除,不予保留。
至此,GLFW的下載結(jié)束。
項(xiàng)目結(jié)構(gòu)配置
? 創(chuàng)建工作目錄new_openGL,并創(chuàng)建include、lib和src三個(gè)文件夾,并將GLAD和GLFW目錄下的文件移動(dòng)到相應(yīng)的目錄下:
glfw-3.3.8.bin.MACOS/include/GLFW/ -> new_openGL/include/GLFW/
glfw-3.3.8.bin.MACOS/lib-arm64/* -> new_openGL/lib/
glad/include/glad/ -> new_openGL/include/glad/
glad/include/KHR/ -> new_openGL/include/KHR/
glad/src/glad.c ->. new_openGL/src/glad.c
移動(dòng)完成后,正確的文件目錄結(jié)構(gòu)如下所示:
new_openGL
├── include
│ ├── GLFW
│ │ ├── glfw3.h
│ │ └── glfw3native.h
│ ├── KHR
│ │ └── khrplatform.h
│ └── glad
│ └── glad.h
├── lib
│ ├── libglfw.3.dylib
│ └── libglfw3.a
└── src
└── glad.c
至此,項(xiàng)目結(jié)構(gòu)配置完成。
測(cè)試程序與項(xiàng)目的編譯
? 1. 項(xiàng)目的src/目錄下創(chuàng)建文件main.cpp,并寫(xiě)入以下程序:
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
void processInput(GLFWwindow *window)
{
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); //MAC OSX needs
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
glViewport(0, 0, 800, 600);
while(!glfwWindowShouldClose(window))
{
processInput(window);
glClearColor(0.9f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
? 2. 項(xiàng)目的根目錄下創(chuàng)建CMakeLists.txt文件,并將下面的語(yǔ)句復(fù)制進(jìn)去:
cmake_minimum_required(VERSION 3.0.0)
project(HelloGL VERSION 0.1.0)
# 使用 C++ 17 標(biāo)準(zhǔn)
set(CMAKE_CXX_STANDARD 17)
# 設(shè)置代碼文件
set(SRC_DIR ${PROJECT_SOURCE_DIR}/src/)
# 添加頭文件
set(HEADER_DIR ${PROJECT_SOURCE_DIR}/include/)
set(LIB_DIR ${PROJECT_SOURCE_DIR}/lib/)
include_directories(${HEADER_DIR} ${LIB_DIR})
# 添加目標(biāo)鏈接
set(GLFW_LINK ${LIB_DIR}libglfw.3.dylib)
link_libraries(${GLFW_LINK})
# 執(zhí)行編譯命令
set(SOURCES ${SRC_DIR}glad.c ${SRC_DIR}main.cpp)
add_executable(HelloGL ${SOURCES})
# 鏈接系統(tǒng)的 OpenGL 框架
if (APPLE)
target_link_libraries(HelloGL "-framework OpenGL")
endif()
include(CTest)
enable_testing()
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
此時(shí)項(xiàng)目的目錄結(jié)構(gòu)如下:
new_openGL
├── CMakeLists.txt
├── include
│ ├── GLFW
│ │ ├── glfw3.h
│ │ └── glfw3native.h
│ ├── KHR
│ │ └── khrplatform.h
│ └── glad
│ └── glad.h
├── lib
│ ├── libglfw.3.dylib
│ └── libglfw3.a
└── src
├── glad.c
└── main.cpp
? 3. 項(xiàng)目根目錄下創(chuàng)建build目錄,進(jìn)入build目錄并執(zhí)行:
mkdir build
cd build
cmake ..
? 如需安裝cmake 請(qǐng)至:Download | CMake
得到以下結(jié)果:
(base) liushanlin@192 build % cmake ..
-- The C compiler identification is AppleClang 14.0.3.14030022
-- The CXX compiler identification is AppleClang 14.0.3.14030022
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/liushanlin/cpp_directory/new_openGL/build
可以看到cmake指令在build目錄下為我們生成了許多新的文件和目錄,包括CMakeFiles
、Testing
等等,這些都是中間文件,不需要管。
創(chuàng)建build目錄的目的使這些生成的中間文件不會(huì)影響源代碼的結(jié)構(gòu),如果需要?jiǎng)h除所有生成的文件,只需要?jiǎng)h除build目錄,就可以還原原始的目錄結(jié)構(gòu)。
cmake最終的目的就是為了生成Makefile文件,即下圖中最后一個(gè)文件,該文件用于后續(xù)make命令的執(zhí)行。
然后,在build目錄下執(zhí)行:
make
得到以下輸出結(jié)果,并生成了HelloGL可執(zhí)行文件:
(base) liushanlin@192 build % make
[ 33%] Building C object CMakeFiles/HelloGL.dir/src/glad.c.o
[ 66%] Building CXX object CMakeFiles/HelloGL.dir/src/main.cpp.o
[100%] Linking CXX executable HelloGL
[100%] Built target HelloGL
至此,測(cè)試文件的編譯已經(jīng)全部結(jié)束。
測(cè)試可執(zhí)行文件HelloGL
在build目錄中執(zhí)行下面的命令:
./HelloGL
得到下面的結(jié)果說(shuō)明一切都正確:
至此,Mac環(huán)境下VScode中OpenGL環(huán)境搭建與測(cè)試就已經(jīng)全部完成了。
參考文章:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-508021.html
- 十分鐘最簡(jiǎn)便配置mac+OpenGL+vscode_mac vscode opengl_seewed的博客-CSDN博客
創(chuàng)作不易,如果你覺(jué)得還不錯(cuò),請(qǐng)點(diǎn)贊關(guān)注哦 ^^文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-508021.html
到了這里,關(guān)于(超級(jí)詳細(xì))如何在Mac OS上的VScode中配置OpenGL環(huán)境并編譯的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!