openGL,open Graphics Library,开放图形库,用来渲染2D、3D的跨平台、跨语言API,其中内含的库GLFW、GLUT和GLAD就是我现在要用要学的,个人喜欢在vscode上面编辑,所以下面的都是基于本机win10系统和vscode上面的配置开发。
- 下载
GLFW下载
首先就是这个包的下载,对应官网有两个版本:
最上面的source package和下面对应windows系统的windows pre-compiled binaries,前者是源代码版本,下载后需要另外编译配置,我没去试,我选择后面的已经构架好的,直接就用,这里是64位。
下载后解压是这样的
GLAD下载
在上面的语言项选择[c/c++],API选择最新的[我这里是4.6],profile中选择[core],options选中generate a loader,最后点击generate生成下载即可。
GLUT下载
和上面的类似的,找到压缩包,点击下载即可。 - 下载好后就是应用配置。
vscode下创立工程文件夹test,创建include、src和lib目录,开始配置…然后发现,没有我要的lib-mingw-w64目录(glfw目录下),然后我只能回头找到32位的来用一下,发现居然有。。。。。。
接下来的工作就是复制粘贴了
glfw-3.3.3.bin.WIN32目录下:
include目录中GLFW目录复制到新建的include目录下;
lib-mingw目录中glfw3.dll和libglfw3dll.a文件复制到新建lib目录下;
glad目录下:
include目录中glad目录和KHR目录复制到新建include目录下;
src目录下glad.c复制到新建src目录下
承接上文,根据大佬起见,我把glad.c编成静态库
进入cmd命令行,进行编译
E:\>h:
H:\>cd H:\project\vscode course\c++_course\test
H:\project\vscode course\c++_course\test>gcc .\src\glad.c -c -I.\include\
H:\project\vscode course\c++_course\test>ar -rc libglad.a glad.o
H:\project\vscode course\c++_course\test>
gcc -I 命令是把后接目录作为第一个查找头文件目录
生成静态库文件
ar –rc test.a test.o
得到的结果如下:
然后复制上面的libglad.a到lib目录,结果是否可行,现在还不确定。
3. 测试
好了,准备工作好像ok了,来测试一下
src目录新建一个test.cpp文件,网上找一个测试代码:
#include "glad.h"
#include "glfw3.h"
#include <iostream>
// 设置窗口尺寸
const unsigned int SCR_WIDTH = 400;
const unsigned int SCR_HEIGHT = 300;
int main()
{
// glfw: 初始化
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__
// uncomment this statement to fix compilation on OS X
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
// glfw 创建窗口
GLFWwindow *window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "Test<GLFW+GLAD>", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
// 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))
{
glClearColor(0.0f, 1.f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// glfw: swap buffers and poll IO events (keyspressed/released, mouse moved etc.)
glfwSwapBuffers(window);
glfwPollEvents();
}
// glfw: terminate, clearing all previously allocated GLFWresources.
glfwTerminate();
system("pause");
return 0;
}
然后可以看到的是vscode显示无法查找头文件<glad/glad.h>和<GLFW/glfw3.h>,也就是说接下来得配置头文件查找路径:
捣鼓了半天,干脆破罐子破摔,直接把这两个文件给复制到当前工作目录下:
#include "glad.h"
#include "glfw3.h"
后面继续修改,各种头文件无法查找,粗暴放在了工作目录上然后#include" "
然后就是undefined reference to `glfwTerminate’错误了,编译链接的问题
然后问题实在太多,只好放了
回到vs2015进行简单使用先
创立空项目
打开项目属性,点击VC++目录
在包含目录里面加进所下载的glad和glfw的include目录路径,然后是库目录加进glfw对应vs版本的路径,我的是vs2015,所以加进去的是lib-vc2015目录,然后是链接器的输入项,
附加依赖项输入glfw3.lib进行链接。最后往源文件一项复制进glad目录中src目录下的glad.c文件,新建main.cpp进行测试
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
int main() {
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 == NULL) {
cout << "Failed to create GLFW window" << 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);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
while (!glfwWindowShouldClose(window)) {
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
glViewport(0, 0, width, height);
}
要注意的是,我这里是64位系统,对应的glfw也是选中的64位文件,还有vs2015中配置也改一下:debug那里,点击配置管理器,平台选中x64,活动解决方案平台x64,最后编译运行就可以了。
上面就是我的测试结果。学习先搁置,现在求职ing。