LearnOpenGL01:创建项目
基于LearnOpenGL
相关链接:
工程搭建
hello window
环境
UBUNTU
GLFW3.3:负责创建窗口+处理输入
GLAD:根据不同操作系统加载不同的OPENGL函数实现
安装GLFW以及编译项
sudo apt update
sudo apt install cmake build-essential libglfw3-dev
根据不同版本配置对应的glad
配置链接
选择对应版本 将profile设置为Core以及勾选Generate a loader
点击gennerate会生成对应的zip,下载zip(里面的include和src放到项目目录下)
创建项目
目录结构
CMakeLists.txt
cmake_minimum_required(VERSION 3.24)
project(OGLTest)set(CMAKE_CXX_STANDARD 14)include_directories(include)# 查找GLFW库
find_package(PkgConfig REQUIRED)
pkg_search_module(GLFW REQUIRED glfw3)
# 貌似不引入头文件也行
include_directories(${GLFW_INCLUDE_DIRS})# include_directories和add_executable可以二选一
add_executable(OGLTestsrc/main.cpp src/glad.c)target_link_libraries(OGLTest ${GLFW_LIBRARIES})
main.cpp
#include "iostream"// 必须先include glad.h再include glfw
#include "glad/glad.h"
#include <GLFW/glfw3.h>// 窗口变化回调函数
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {glViewport(0, 0, width, height);
}void processInput(GLFWwindow *window)
{// 按esc键就退出if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)glfwSetWindowShouldClose(window, true);
}int main(void) {// 初始化GLFW库glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// 创建窗口GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);if (window == nullptr) {std::cout << "failed to create window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);// 注册窗口大小变化回调函数glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);// 调用任何OPENGL函数之前必须初始化GLAD// 给GLAD传入了用来加载系统相关的OpenGL函数指针地址的函数。// GLFW给我们的是glfwGetProcAddress,它根据我们编译的系统定义了正确的函数if (!gladLoadGLLoader((GLADloadproc) glfwGetProcAddress)) {std::cout << "Failed to initialize GLAD" << std::endl;return -1;}// 渲染循环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;
}