注意****本机OpenGL版本必须高于GLEW库版本
本机OpenGL版本如何查看?
只需先随意下载任意版本的glew解压,点击文件夹bin目录下的visualinfo.exe,屏幕一闪而过,这时该文件下多了一个文本文件visualinfo.txt,打开看第三行:
OpenGL version string: 4.5.0 - Build 25.20.100.6323
这里我的版本是4.5.0
下载:
1. glew:http://glew.sourceforge.net/ 找到对应本机OpenGL版本的glew
2. glfw: glfw.org 点击右上角的download
3. VS2017:https://visualstudio.microsoft.com/zh-hans/vs/
配置编译glew:
1. 对应本机OpenGL版本的glew ,选择 源代码 ZIP 格式压缩包,如我的是glew-1.10.0 ,解压后进入 glew-1.10.0 文件夹。在 build 文件夹中选择 vc10 (或有v12等更高版本),打开 glew.sln 解决方案。
2、 会提示对由更低版本 VS 创建的 GLEW 项目进行升级,点击“确认”升级 VC++ 编译器和库,以支持 VS 2017 的编译。
3、打开批生成分别对win32和x64进行编译,如下图
4、返回到glew-1.10.0根目录,将 include\GL下所有东西复制到vs的安装目录下的GL文件夹中如E:\vs2017\VC\Tools\MSVC\14.16.27023\include\GL(没有GL自己创建)
5、返回到glew-1.10.0根目录, 把 lib\Release\Win32中的glew32.lib复制到vs的安装目录的lib\x86下,如E:\vs2017\VC\Tools\MSVC\14.16.27023\lib\x86
6、返回到glew-1.10.0根目录, 把 lib\Release\x64中的glew32.lib复制到vs的安装目录的lib\x64下,如E:\vs2017\VC\Tools\MSVC\14.16.27023\lib\x64
(这种直接放到vs目录下的方式不太安全,因为 这样很难管理且容易丢失,推荐的方式是建立一个新的目录包含所有的第三方库文件和头文件,并且在你的IDE或编译器中指定这些文件夹)
7、 返回到glew-1.10.0根目录, 把 bin\Release\Win32 中的 glew32.dll 复制到C:\Windows\System32
8、 返回到glew-1.10.0根目录, 把 bin\Release\x64中的 glew32.dll 复制到C:\Windows\SysWOW64
至此,GLEW 库的配置就完成了!
配置编译glfw:
1、进入GLFW官方网站 glfw.org,点击右上角的download,看见如下界面
编译源代码
2、点击Source package进行下载(稍等几秒会弹出下载提示)
下载之后,解压压缩包
3、自己编译GLFW需要使用CMake。CMake是一个可以通过源代码生成相应编译器的项目文件的软件。进入CMake官方网站 cmake.org,点击右上角的download进入下载页面:
建议选择最新版,安装完成后打开cmake-gui.exe
4、 在Where is the source code栏里,选择GLFW源代码所在目录(即前面的include、src等文件夹所在目录)
Where to build the binaries栏里,选择要将项目文件生成在哪个文件夹里,可以不存在。我这里选择的是E:/opengl_install/glfw-3.2.1/build
点击configure,如上图箭头指向的位置可修改,即为生成.lib文件的位置
然后点击Generate,等待生成完毕。如果底下显示"Generating done"则生成成功。接下来可以直接点击Open Project,或找到生成的GLFW.sln
5、编译时选择批生成,注意把uninstall生成的几个勾去掉,其他全部勾上,再点击生成
6、 在build文件夹里,是不是出现了一个名为glfw3.lib的文件( VS2017在build/src/Debug目录下)或者在刚才cmake中设置的目录下E:/opengl_install/glfw
把include\GLFW下所有复制到vs的安装目录下的GL文件夹中如E:\vs2017\VC\Tools\MSVC\14.16.27023\include\GL
把lib下的glfw3.lib复制到vs安装目录下的lib\x64如 E:\vs2017\VC\Tools\MSVC\14.16.27023\lib\x64
使用glew和glfw
在项目的属性中的附加依赖项添加opengl32.lib;glfw3.lib;glew32s.lib
不加glfw3.lib编译会出现“无法解析的外部符号 glfwInit,该符号在函数 main 中被引用”的错误
示例测试程序
#include
// GLEW
#define GLEW_STATIC
#include
// GLFW
#include
// Window dimensions
const GLuint WIDTH = 800, HEIGHT = 600;
// The MAIN function, from here we start the application and run the game loop
int main()
{
std::cout << "Starting GLFW context, OpenGL 3.3" << std::endl;
// Init GLFW
glfwInit();
// Set all the required options for GLFW
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
// Create a GLFWwindow object that we can use for GLFW's functions
GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);
if (window == nullptr)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
// Set this to true so GLEW knows to use a modern approach to retrieving function pointers and extensions
glewExperimental = GL_TRUE;
// Initialize GLEW to setup the OpenGL Function pointers
if (glewInit() != GLEW_OK)
{
std::cout << "Failed to initialize GLEW" << std::endl;
return -1;
}
// Define the viewport dimensions
int width, height;
glfwGetFramebufferSize(window, &width, &height);
glViewport(0, 0, width, height);
// Game loop
while (!glfwWindowShouldClose(window))
{
// Check if any events have been activiated (key pressed, mouse moved etc.) and call corresponding response functions
glfwPollEvents();
// Swap the screen buffers
glfwSwapBuffers(window);
}
// Terminate GLFW, clearing any resources allocated by GLFW.
glfwTerminate();
return 0;
}
参考资源
https://blog.51cto.com/13960196/2171915
https://blog.csdn.net/j0939115399/article/details/74656672
https://learnopengl-cn.readthedocs.io/zh/latest/01 Getting started/02 Creating a window/
http://www.cnblogs.com/collectionne/p/6937644.html