【OpenGL4.6】VS2022安装OpenGL4.6的全过程

一、说明

我这里用python完成OpenGL的开发,目前存在一个问题是:OpenGL4.6到目前还没看到python版本。有时需要OpenGL4.6,不能再等,于是只能安装一个C++版的OpenGL4.6试用。以下为安装过程全记录。

二、vs2022环境安装

2.1. 安装vs2022

  • 1首先进入微软的visualstudio主页

https://visualstudio.microsoft.com

  • 下载一个visual studio community并运行
  • 选择安装 在这里插入图片描述
    我按自己的需要选择python、c++、c#桌面、VC++;按“继续”开始安装。
    在这里插入图片描述
    注意:第一次安装后启动,需要注册用户,建议保存注册账号,以后永远可用。

2.2 为OpenGL专门建立目录

为了提高效率,建一个VStudent作为所有VC项目的总目录,然后建立一个AboutOpenGL,在AboutOpenGL下生成VC+opengl的项目,如下:
在这里插入图片描述
此图后文中还要用到。

三、下载安装cmake,用于编译源代码

3.1 为什么安装Cmake

当然,VC++内部有Cmake,为什么要安装一个?
因为VC++内的Cmake为微软产品配套,对于OpenGL这种开源项目,就不能用微软的Cmake,而是Kitware公司的产品。
CMake使用平台无关的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用项目文件,比如可以生成vs项目文件或者makefile。 CMake工具套件由Kitware公司创建,以满足ITK和VTK等开源项目对跨平台构建环境的需求。

3.2 下载和安装Cmake

如果用glfw源码编译就安装Cmake,如果不用源码,可以不安装Cmake。

https://cmake.org/download/

在这里插入图片描述https://github.com/Kitware/CMake/releases/download/v3.24.2/cmake-3.24.2-windows-x86_64.msi
双击msi文件,安装。

  • 要选择系统环境路径变量path。
    在这里插入图片描述
    在这里插入图片描述

四、下载安装glfw,用于窗口界面

4.1 设置glfw库,用于创建窗体

https://www.glfw.org

  • 我们选择使用编译好的二进制库:
  • 在这里插入图片描述

4.2 如何使用glfw库?

glfw不属于微软默认系统,需要手工添加到你的具体项目中。
下载的glfw-3.4.bin.WIN64.zip是一个多版本并存的包,展开以后挑选相应版本添加到你的opengl项目中:
在这里插入图片描述
解压后放到文件夹里面备用opengl32.lib和include

五、下载glad支持

5.1 glad是什么?

glad是最重要的OpenGL库,包括GL_CORE核心库的调用。我们这里下载glad是include文件,不是对全部opengl的lib的安装,因为一般的win10系统,凡是安装了Nvidia驱动,必然安装opengl32.lib,因此不必单独安装opengl32了。

5.2 下载

https://glad.dav1d.de/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
只要单击对应压缩文件就可以下载了。下载后解压。

六、配置OpenGL项目

6.1 配置步骤总览

在VC下使用OpenGL,属于对三方代码的管理,因此,围绕OpenGL的配置过程,实际上是对项目的一种定制。这里的定制需要几个方面:

  • 1 生成一个项目地址,建议固定一个OpenGL项目地址,内含多个OpenGL项目,这样可以集中配置环境。
  • 2 配置glad,opengl核心库
  • 3 配置glfw,opengl界面

6.2 集中部署OpenGL的项目环境

在这里插入图片描述

1)在D盘生成一个Vstudent总目录,该目录存放许多不同的C++项目
2)在D盘的Vstudent目录下,生成AboutOpenGL目录,在该目录下生成具体OpenGL项目。
3)用VC++管理平台生成第一个OpenGL项目:firstOpenGL
4)在AboutOpenGL安置OpenGL的环境支持。
5)在VC开发界面配置include、lib。

先给出测试代码,建议边配置,边调试代码,将该代码调通了,安装也就成功了。

#include <glad/glad.h>  
#include <GLFW/glfw3.h>
#include <glad.c>


class Window
{
	public:
	GLFWwindow* win = 0;
	int w = 0; int h = 0;
	char* title = 0;

	char* glsl_version = (char*)"#version 330";
	int SwapInterval = 1;

	static void glfw_error_callback(int error, const char* description)
	{
		fprintf(stderr, "Glfw Error %d: %s\n", error, description);
	}

			static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
			{
				if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) glfwSetWindowShouldClose(window, GLFW_TRUE);
			}

			static void setup_opengl_viewport(int width, int height)
			{
				glViewport(0, 0, width, height);
			}

			static void framebuffer_size_callback(GLFWwindow* window, int width, int height)
			{
				setup_opengl_viewport(width, height);
			}

			Window(char* title, int w = 300, int h = 300, int OpenGLVersionMajor = 4, int OpenGLVersionMinor = 6) : title(title), w(w), h(h)
			{
				glfwSetErrorCallback(glfw_error_callback); if (!glfwInit()) { return; }
				glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, OpenGLVersionMajor); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, OpenGLVersionMinor);
				glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE); // GLFW_OPENGL_COMPAT_PROFILE GLFW_OPENGL_CORE_PROFILE
				// glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // for mac os it's needed
				glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);
				// glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE); // for debug

				win = glfwCreateWindow(w, h, title, NULL, NULL); if (!win) { printf("Failed to create GLFW window\n"); close(-1); return; } glfwMakeContextCurrent(win);
				if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { printf("Failed to initialize GLAD\n"); close(-1); return; }
				setup_opengl_viewport(w, h);
				glfwSwapInterval(SwapInterval); //must be used after current context set, the default is 0, which means show the new content once available, 1 is the prefered value
				glfwSetFramebufferSizeCallback(win, Window::framebuffer_size_callback); glfwSetKeyCallback(win, key_callback);

				//------------- opengl global settings ----------------
				// glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
				// glBlendFunc(GL_SRC_ALPHA, GL_SRC_ALPHA); glEnable(GL_BLEND); //glEnable(GL_DEPTH_TEST);

			}
			~Window()
			{
				close(0);
			}

			int close(int r)
			{
				if (win) glfwDestroyWindow(win); glfwTerminate(); return r;
			}

		};

		void company()
		{
			int w = 300, h = 300;
			Window win((char*)"Lines And Chars", w, h);
			while (!glfwWindowShouldClose(win.win))
			{
				glClearColor(1.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); // 填充红色背景

				glFlush();

				glfwSwapBuffers(win.win); // swap buffer to show new content
				glfwPollEvents(); // response to user operations on the window, process the events by default handlers
				// glfwWaitEvents(); // for static rendering content
			}
		}


int main()
{
	 company();
}

6.3 如何配置glad

分两个配置:

  • include
  • lib
    1)添加包含路径:
    项目属性 - C/C++ - additional include directories:

D:\VStudent\AboutOpenGL\glad\include;D:\VStudent\AboutOpenGL\glad\src
在这里插入图片描述

2)在项目中添加glad库lib:
在这里插入图片描述

6.4 配置glfw库:

分两个配置:

  • include
  • lib
    在项目中添加glfw库:
    1)配置include路径
    项目属性 - C/C++ - additional include directories: $(SolutionDir)libs\glfw\include;
    在这里插入图片描述

2)配置lib文件
lib文件路径:
项目属性 - Linker - additional library directories: $(SolutionDir)libs\glfw\lib-vc2022;
lib文件名称
项目属性 - Linker - input - additional dependencies: glfw3.lib,opengl32.lib,user32.lib,gdi32.lib,shell32.lib
在这里插入图片描述

7 测试代码

在这里插入图片描述
表明当前安装基本正确。但中间出了一个错误,是撞运气排除的。

在这里插入图片描述
错误原因正在探索中…

相关推荐

  1. 46. 排列

    2024-05-09 09:14:08       28 阅读
  2. 46. 排列(回溯)

    2024-05-09 09:14:08       33 阅读
  3. LeetCode 46 排列

    2024-05-09 09:14:08       40 阅读
  4. LeetCode 46. 排列

    2024-05-09 09:14:08       38 阅读
  5. LeetCode 46.排列

    2024-05-09 09:14:08       25 阅读
  6. 【LeetCode-46.排列】

    2024-05-09 09:14:08       20 阅读
  7. 46.排列

    2024-05-09 09:14:08       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-09 09:14:08       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-09 09:14:08       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-09 09:14:08       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-09 09:14:08       20 阅读

热门阅读

  1. 机器学习之sklearn基础教程

    2024-05-09 09:14:08       12 阅读
  2. Spring Bean的线程安全问题

    2024-05-09 09:14:08       8 阅读
  3. stylus详解与引入的例子

    2024-05-09 09:14:08       11 阅读
  4. 01 设计模式--单例模式

    2024-05-09 09:14:08       8 阅读
  5. 腾讯云k8s中pod集群yaml文件详解

    2024-05-09 09:14:08       9 阅读
  6. conll-2012-formatted-ontonotes-5.0中文数据格式说明

    2024-05-09 09:14:08       8 阅读
  7. Pytorch的深度学习

    2024-05-09 09:14:08       12 阅读
  8. Flink面试整理-状态管理和容错机制

    2024-05-09 09:14:08       8 阅读