天天看點

(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

繼續閱讀