VS2015 OPENGL 环境配置
1.下载所需的库,一般有glad,glew,glfw,下载编译好binary文件。
(1)glad:https://glad.dav1d.de/,进入后设置如下:
Language:c/c++
gl:version3.3
profile:core
Generate即可下载。
(2)glfw:https://www.glfw.org/download.html
选择32位或这64位的二进制文件,主要看系统,我下载的是64位的,在调试x86(32)程序时也可以用。
(3)glew:http://glew.sourceforge.net/
下载二进制文件。
目前我的配置只用到glad和glfw,对于glew配置应该时相似的。
2.配置环境
(1)头文件配置
好多网友说把这些库不要放入VS本身的目录,我为了方便把头文件放到VC/Include目录下,lib文件在VC\lib下,这样做的好处在于,新建项目是不用再包含库目录:
GL目录再glew/Include下,直接粘贴到VC/Include下;
Glad文件夹Include下有两个目录:glad和KHR,分别复制再VC/Include下;
同样地GLFW下也是。
(2)lib文件配置
glew lib Release文件夹下有两个目录:Win32 和 x64
Win32下的lib文件放到VC/lib目录中,x64下的文件放到VC/lib/amd64下。
这里其实告诉了我们glew的编译环境时Release下的,所以以后如果用到这个库,还是以Release调试为好。
另外,glew下还有一个bin文件,对于VC,bin目录也分32位和64位,默认是32位。
将bin下Win32的文件放到VC/bin下,x64 的放到amd64下。
在glfw文件夹下选择对应VS版本的lib文件,我用的是VS2015,对应lib-vc2015。
将glfw3.dll放入VC/bin目录下,(为了保证64位项目能通过调试,是不是也要刚到VC/bin/amd64下呢?),glfw3.lib和glfw3dll.lib分别放到VC/lib文件下和VC/lib/amd下。
3.调试
新建一个空的项目,根据项目属性(32位/64位),配置lib文件。(glfw3.lib
opengl32.lib)。
将代码生成改为多线程DLL(/MD)。
然后,将glad目录下源文件添加到项目,新建源文件,写入如下代码:
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);
// settings
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;
int main()
{
// glfw: initialize and configure
// ------------------------------
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X
#endif
// glfw window creation
// --------------------
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// glad: load all OpenGL function pointers
// ---------------------------------------
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
// render loop
// -----------
while (!glfwWindowShouldClose(window))
{
// input
// -----
processInput(window);
// render
// ------
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
// -------------------------------------------------------------------------------
glfwSwapBuffers(window);
glfwPollEvents();
}
// glfw: terminate, clearing all previously allocated GLFW resources.
// ------------------------------------------------------------------
glfwTerminate();
return 0;
}
// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly
// ---------------------------------------------------------------------------------------------------------
void processInput(GLFWwindow *window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
// glfw: whenever the window size changed (by OS or user resize) this callback function executes
// ---------------------------------------------------------------------------------------------
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
// make sure the viewport matches the new window dimensions; note that width and
// height will be significantly larger than specified on retina displays.
glViewport(0, 0, width, height);
}
4.排坑
如果不管你新建的是x86还是x64项目都要在附加依赖项里加入glfw3.lib和opengl32.lib。
其次,对于x86项目,VC默库认目录是VC/lib,所以要将lib文件放到该目录下。而对于x64程序,VC默认库目录是VC/lib/amd,所以要想在x64下通过调试,还需将lib文件放到该目录下,否则会出现找不到glfw3.lib文件。
特别的,对于x64 DEBUG下调试时,还需将项目属性的代码生成改为多线程DLL(/MD)。
我在配置的过程中,就是遇到好多问题,根据以上操作配置,应该会避免这些吭。