软件 | 版本 |
---|---|
Windows 10 专业版 22H2 | 19045.2486 |
Visual Studio Community 2022 - 使用C++的桌面开发 | 17.4.4 |
MSVC | v143 |
Windows 10 SDK | 10.0.20348.0 |
CMake | 3.25.2 |
VSCode | 1.74.3 |
GLFW | 3.3.8 |
git clone git@github.com:glfw/glfw.git
Glad
: OpenGL
加载代码生成器
进入<Glad>网站生成加载代码
由于我们仅仅需要基础的 OpenGL
功能, 所以只需要选择 gl
的版本, 其它不变
Language
=C/C++
Specification
=OpenGL
API
gl
=Version 4.6
gles1
=None
gles2
=None
glsc2
=None
Profile
=Compatibility
Extensions
=Empty
点击 Generate
生成加载代码, 下载 glad.zip
CMakeLists.txt
cmake_minimum_required(VERSION 3.18)
project(glad)
add_library(glad STATIC src/glad.c)
target_include_directories(glad PUBLIC include)
最终文件结构
glad
│ CMakeLists.txt
│
├─include
│ ├─glad
│ │ glad.h
│ └─KHR
│ khrplatform.h
└─src
glad.c
CMakeLists.txt
cmake_minimum_required(VERSION 3.18)
project(testWnd)
# ##############################################################################
# Find Packages
# ##############################################################################
add_subdirectory(glfw EXCLUDE_FROM_ALL)
add_subdirectory(glad EXCLUDE_FROM_ALL)
# ##############################################################################
# Targets
# ##############################################################################
add_executable(testWnd src/main.cpp)
target_include_directories(testWnd PRIVATE include)
target_link_libraries(testWnd PRIVATE glfw glad)
根据以上教程编写代码, 构建最基础的窗口
main.cpp
#include <cstdlib>
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
int main()
{
// GLFW Init Start
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#if defined(__APPLE__)
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
// GLFW Init End
// Create Window Start
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (!window)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
std::exit(EXIT_FAILURE);
}
glfwMakeContextCurrent(window);
// Create Window End
// GLAD Init Start
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
std::exit(EXIT_FAILURE);
}
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// GLAD Init End
// Event Loop
while (!glfwWindowShouldClose(window))
{
// Background color
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
std::exit(EXIT_SUCCESS);
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
编译运行
至此完成GLFW窗口构建