OpenGL —— 1、Vs2017搭建glad、glfw环境,并附代码测试

GLFW

     简介
          GLFW是一个开源的多平台库,用于OpenGL,OpenGL ES和 桌面上的 Vulkan 开发。它提供了一个简单的 API 来创建 窗口、上下文和表面,接收输入和事件。

     GLFW是用C语言编写的,支持Windows,macOS,X11和Wayland。GLFW在zlib / libpng许可证下获得许可。

     glfw下载

OpenGL —— 1、Vs2017搭建glad、glfw环境,并附代码测试_第1张图片

GLAD

     简介
          glad是继GL3W,GLEW之后,当前最新的用来访问OpenGL规范接口的第三方库。基于官方规范的多语言 GL/GLES/EGL/GLX/WGL 加载器生成器。


     glad下载

OpenGL —— 1、Vs2017搭建glad、glfw环境,并附代码测试_第2张图片

Vs2017搭建glad、glfw环境

     1、创建Vs2017的C++空工程: cControlOpengl

     2、添加main.cpp文件并点击生成解决方案(这样在工程属性中才会显示C/C++选项)

     3、右键项目-属性,如下图加入glfw、glad的头文件。具体头文件放在哪里 自行定义,不过必须使得下图附加包含目录可以找到即可。
OpenGL —— 1、Vs2017搭建glad、glfw环境,并附代码测试_第3张图片

     4、右键项目-属性,如下两图加入glfw、glad的库文件。
OpenGL —— 1、Vs2017搭建glad、glfw环境,并附代码测试_第4张图片

OpenGL —— 1、Vs2017搭建glad、glfw环境,并附代码测试_第5张图片

     6、将glfw的dll拷贝到exe目录下
OpenGL —— 1、Vs2017搭建glad、glfw环境,并附代码测试_第6张图片

     7、在编写代码时候,必须将glad头文件放在glfw头文件之前。
OpenGL —— 1、Vs2017搭建glad、glfw环境,并附代码测试_第7张图片

     8、将glad中的glad.c文件加入项目中
OpenGL —— 1、Vs2017搭建glad、glfw环境,并附代码测试_第8张图片

代码测试

OpenGL —— 1、Vs2017搭建glad、glfw环境,并附代码测试_第9张图片

#include 
#include 

#include "glad/glad.h"
#include "GLFW/glfw3.h"

void _GLFWframebuffersizefun(GLFWwindow* window, int width, int height)
{
	// 在窗口中定义一个像素矩形,最终的图形将映射到个矩形中
	glViewport(0, 0, width, height);
}

void processInput(GLFWwindow *window)
{
	if (window)
	{
		// 获取窗口按键是否ESC
		if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
		{
			// 设置窗口关闭标志
			glfwSetWindowShouldClose(window, true);
		}
	}
	window = nullptr;
}

int main()
{
	// 初始化glfw上下文
	if (glfwInit() == GLFW_FALSE) { std::cout << "glfwInit fail!\n"; return -1; }
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);					// 3.3版本
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);	// 使用OpenGL核心模式

	// 创建OpenGL窗体
	GLFWwindow *window = glfwCreateWindow(800, 600, "opengl Core", nullptr, nullptr);
	if (!window) { std::cout << "glfwCreateWindow fail!\n"; return -1; }

	// 当前OpenGL上下文绑定窗口
	glfwMakeContextCurrent(window);

	// 加载所有OpenGL函数指针
	if (GL_FALSE == gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
	{std::cout << "gladLoadGLLoader fail!\n"; return -1;}

	// 在窗口中定义一个像素矩形,最终的图形将映射到个矩形中
	glViewport(0, 0, 800, 600);

	// 窗口大小调整回调
	glfwSetFramebufferSizeCallback(window, _GLFWframebuffersizefun);

	// 窗口标志是否是关闭
	while (!glfwWindowShouldClose(window))
	{
		// 输入按键处理
		processInput(window);
		
		// 使用红,绿,蓝以及AFA值来清除颜色缓冲区
		glClearColor(0.0f, 0.33984f, 0.53125f, 1.0f);

		// 将从窗口中清除最后一次所绘制的图形
		/*
			GL_COLOR_BUFFER_BIT:    当前可写的颜色缓冲
			GL_DEPTH_BUFFER_BIT:    深度缓冲
			GL_ACCUM_BUFFER_BIT:	累积缓冲
  			GL_STENCIL_BUFFER_BIT:	模板缓冲
		*/
		glClear(GL_COLOR_BUFFER_BIT);

		// 双缓冲技术,使用OpenGL或OpenGL ES进行渲染
		glfwSwapBuffers(window);

		// glfw事件循环
		glfwPollEvents();

		// 睡眠10ms,防止造成GPU疯狂消耗。实际具体调整
		Sleep(10);
	}

	// 释放资源,终止GLFW库
	glfwTerminate();

	//system("pause");
	return 0;
}

关注

Wx GZH:码农总动员

笔者 - jxd

你可能感兴趣的:(OpenGL,C++,OpenGL,Vs2017,glad,glfw)