天天看点

(64位)opengl配置+vs2017+glew+glfw

注意****本机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进行编译,如下图

(64位)opengl配置+vs2017+glew+glfw

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,看见如下界面

(64位)opengl配置+vs2017+glew+glfw

编译源代码

2、点击Source package进行下载(稍等几秒会弹出下载提示)

下载之后,解压压缩包

(64位)opengl配置+vs2017+glew+glfw

3、自己编译GLFW需要使用CMake。CMake是一个可以通过源代码生成相应编译器的项目文件的软件。进入CMake官方网站 cmake.org,点击右上角的download进入下载页面:

建议选择最新版,安装完成后打开cmake-gui.exe

(64位)opengl配置+vs2017+glew+glfw

4、 在Where is the source code栏里,选择GLFW源代码所在目录(即前面的include、src等文件夹所在目录)

Where to build the binaries栏里,选择要将项目文件生成在哪个文件夹里,可以不存在。我这里选择的是E:/opengl_install/glfw-3.2.1/build

(64位)opengl配置+vs2017+glew+glfw

点击configure,如上图箭头指向的位置可修改,即为生成.lib文件的位置

然后点击Generate,等待生成完毕。如果底下显示"Generating done"则生成成功。接下来可以直接点击Open Project,或找到生成的GLFW.sln

5、编译时选择批生成,注意把uninstall生成的几个勾去掉,其他全部勾上,再点击生成

(64位)opengl配置+vs2017+glew+glfw

6、 在build文件夹里,是不是出现了一个名为glfw3.lib的文件( VS2017在build/src/Debug目录下)或者在刚才cmake中设置的目录下E:/opengl_install/glfw

(64位)opengl配置+vs2017+glew+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 <iostream>

// GLEW
#define GLEW_STATIC
#include <GL/glew.h>

// GLFW
#include <GL/glfw3.h>


// 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;
}
           

运行后出现黑色的框

(64位)opengl配置+vs2017+glew+glfw

参考资源

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

继续阅读