前置条件
-
VSCode,安装好
C/C++
CMakeTools
插件 -
安装好 CMake
-
OpenGL
项目需要的第三方库:- GLFW 用于定义窗口、上下文以及处理用户输入等等
编译glfw,参见:juejin.cn/post/704111…
- GLAD提供了跨平台的访问 OpenGL 接口,因为 OpenGL 只是提供了标准,具体的实现是由各个显卡的驱动去做,由于驱动版本众多,很多函数在编译期没有办法确定,只能通过
LoadLibrary
的方式在运行时查找,每个函数都这么干非常麻烦,glad
就是用来完成这部分工作的
准备glad
创建项目
打开一个空的文件目录,然后按下F1
,执行CMake:Quick Start
命令快速创建
安装glad
把上面下载好的glad
解压,然后把include
目录下的 glad
KHR
copy到项目的include
,然后把src/glad.c
copy到项目中
CMakeList.txt
:
cmake_minimum_required(VERSION 3.0.0)
project(HelloGL VERSION 0.1.0)
# 使用C++ 11标准
set(CMAKE_CXX_STANDARD 11)
## 添加头文件
set(GLFW_H /usr/local/include)
set(GLAD_H ${PROJECT_SOURCE_DIR}/include)
include_directories(${GLAD_H} ${GLFW_H})
##添加目标链接
set(GLFW_LINK /usr/local/lib/libglfw.3.dylib)
link_libraries(${GLFW_LINK})
## 执行编译命令
set(SOURCES glad.c main.cpp)
add_executable(HelloGL ${SOURCES})
## 链接系统的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)
main.cpp
:
#include <iostream>
#include <glad/glad.h>
#include <stdio.h>
#include <stdlib.h>
#include <GLFW/glfw3.h>
void framebuffer_size_callback(GLFWwindow *window, int width, int height);
void processInput(GLFWwindow *window);
int main(int, char **)
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__
//如果使用的是Mac OS X系统,你还需要加下面这行代码到你的初始化代码中这些配置才能起作用
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
GLFWwindow *window = glfwCreateWindow(800, 600, "study OPenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "fail to create window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "failed to initalize GLAD" << std::endl;
return -1;
}
glViewport(0, 0, 800, 600);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
while (!glfwWindowShouldClose(window))
{
processInput(window);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
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);
}
}
生成与调试:
可以通过 CMake Tools
提供的图形界面进行生成,也可以通过一下命令,打开 F1
,执行命令CMake:Build
如果需要调试程序,在 Debug 面板中点击齿轮按钮,然后选择
C++(GDB/LLDB)
调试器,再选择默认配置,最后修改 launch.json
中的 program
属性,指向生成的程序
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "clang++ - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/HelloGL",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"preLaunchTask": "C/C++: clang++ 生成活动文件"
}
]
}
github
:HelloGL