有了https://10sxj.com/post/9.html,GLFW,用于桌面上的 OpenGL、OpenGL ES 和 Vulkan 开发。它提供了一个简单的 API,用于创建窗口、上下文和表面,接收输入和事件。
接下来,我们需要引入OpenGL32.lib,此库在windows系统库中有自己带有的一套库文件。
window 目前只支持 OpenGL1.1 的涵数,但 OpenGL 现在都发展到 2.0 以上了,要使用这些 OpenGL 的高级特性,就必须下载最新的扩展,另外,不同的显卡公司,也会发布一些只有自家显卡才支 持的扩展函数,你要想用这数涵数,不得不去寻找最新的 glext.h, 有了 GLEW 扩展库,你就再也不用为找不到函数的接口而烦恼,因为 GLEW 能自动识 别你的平台所支持的全部 OpenGL 高级扩展涵数。
一、获取GLEW开发库
官网:http://glew.sourceforge.net/
gitHub:https://github.com/nigels-com/glew.git glew
我们在此主要学习OpenGL,不考虑GLEW实现原理,so,我们这里使用编译好的二进制文件。
二、配置库文件到项目
将压缩包解压
按照之前配置GLFW的方式,配置GLEW,基于前面项目目录结构,将include和lib放在之前项目目录中,如图:
在VS属性中,引入的文件目录都是include,在此不做修改。
至于链接器,由于新增目录,所以链接器“附加库目录”需要新增配置
“附加依赖项”中引入lib目录中的库文件
注:此处GLEW有两个库glew32.lib和glew32s.lib,后者代表使用static库,不依赖dll,此处为了简单,我重新配置成了glew32s.lib
至此,GLEW库引入完成!!!!
三、使用GLEW库
在之前项目中,在初始化glfw库后面初始化glew:
building项目:
出现此错误,根据GLEW头文件:
所以,我们需要将glew.h头文件定义放在最前面
修改代码后出现main.obj : error LNK2019: 无法解析的外部符号 __imp__glewInit@0,函数 _main 中引用了该符号
再次转到头文件,发现我们使用的GLEW_STATIC根本没有使能:
在属性-》C/C++-》预处理器定义=====》新增GLEW_STATIC
再看头文件,
再次编译:
编译成功,但是有两个警告,暂时不管,直接运行。
发现啥都没有 ,我们补一下输出:
if (GLEW_OK != err) { std::cout << "glewInit() error!!!!!!!!!!" << std::endl; return -1; }
初始化失败????????
根据文档使用:
意思大致为:在创建一个有效的OpenGL渲染上下文后调用glewInit()来初始化扩展程序口。在代码中我们有一句创建窗口当前上下文
/* Make the window's context current */ glfwMakeContextCurrent(window);
因此,将代码修改如下:
#include <GL/glew.h> #include <GLFW/glfw3.h> #include <iostream> int main(void) { GLFWwindow* window; /* Initialize the library */ if (!glfwInit()) return -1; /* Create a windowed mode window and its OpenGL context */ window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); if (!window) { glfwTerminate(); return -1; } /* Make the window's context current */ glfwMakeContextCurrent(window); GLenum err = glewInit(); if (GLEW_OK != err) { std::cout << "glewInit() error!!!!!!!!!!" << std::endl; return -1; } std::cout << "OpenGL Version:" << glGetString(GL_VERSION) << std::endl; /* Loop until the user closes the window */ while (!glfwWindowShouldClose(window)) { /* Render here */ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex2f(-0.5f, -0.5f); glVertex2f(0.0f, 0.5f); glVertex2f(0.5f, -0.5f); glEnd(); /* Swap front and back buffers */ glfwSwapBuffers(window); /* Poll for and process events */ glfwPollEvents(); } glfwTerminate(); return 0; }
编译运行,OK!!!!!!!!!!!!!!
还没有评论,来说两句吧...