WIN7 + VS2015环境下关于GLEW和GLFW的配置
来源:互联网 发布:湖南网络公关公司 编辑:程序博客网 时间:2024/05/17 03:19
前言
现在是OpenGL 4.5的时代,相对于 GLUT,GLEW 和 GLFW 显得更加的方便强大,但是如何实现配置和配置后出现BUG都是让人头疼的事情。笔者经过两天的不断尝试与查找资料,终于配置成功了。由于笔者也没有完全理解,所以我不确保这种方法适合于所有情况,只是希望给更多学习OpenGL的朋友提供一种方法。
开始工作
一.
首先:笔者建议你先查看你的显卡是否支持OpenGL 4.5版本
方法:百度下载GPU Caps Viewer双击打开
点击上方红色圆圈中可看到OpenGL的支持信息(黄色方框内容),如果你可支持的版本较低,笔者建议你更新驱动
二.
下载GLEW和GLFW源码,下载地址分别为
http://glew.sourceforge.net/
http://www.glfw.org/下载CMake
https://cmake.org/
三.
cmake子目录bin中有一个cmake-gui.exe,双击打开
得到以下界面
第一步,点击“Browsw source…”选择GLFW的根目录
第二步,点击“Browse build…”任意选取一个新建的文件夹作为输出目录
第三步,点击“Configure“,出现以下选择
选择Visual Studio 14 2015
第四步,出现以下界面时,点击“Generate”
稍等几秒,便可关闭CMake
四.
打开刚刚指定的Build目录(即你指定存放CMake输出的目录),用VS2015打开GLFW.sln文件
进行编译(需知:笔者在配置时这一步是不成功的,但是也得到了我想要的链接库文件)在你的\bulid\src\Debug中会有一个lib文件。同时,你下载的glfw文件中有一个include文件夹,其中有一个存放着头文件的GLFW文件夹。至此配置GLFW的准备工作算是完成了
如果你实在不想动用CMake去做这么麻烦的工作的话,你也可以直接在网上下载glfw3.lib(此处滑稽:))
五.
进行glew的配置准备工作实际上是非常类似的,此处不再赘述,当然你还是可以直接在网上下载glew32.lib。需要注意的是:还需要一个glew32.dll文件,记得一同下载。重要的事情说三遍,注意 x 3 !
然后把glew32.dll文件拷贝到C:\Windows\SysWOW64目录下。
笔者建议新建一个独立文件夹,里面新建两个文件夹include(A)和lib(B)。把glfw中的include文件夹里面的GLFW 和 glew中的include文件夹里面的GL都拷贝到A中,然后把glfw3.lib 和 glew32.lib放在B中。至此所以准备工作完成了,开始配置了
六.
①打开VS2015,新建项目,选择Win32控制台
②选择空项目
③项目->属性->VC++目录。 包含目录中添加上刚才准备的A(见第五步),库目录中添加上刚才准备的B(见第五步)
④项目->属性->链接器->输入。附加依赖项中添加上 glew32.lib ; glfw3.lib ; opengl32.lib 。由于是手写的,所以注意拼写。当然你直接复制上去也行。
⑤最后点击确定便配置完成了
七.最终测试.
新建一个cpp文件,把以下代码拷贝到文件中。代码来自Anton’s OpenGL 4 Tutorials
#include "stdafx.h"#include <GL/glew.h>//#define GLFW_DLL#include <GLFW/glfw3.h>int main(int argc, _TCHAR* argv[]){ // start GL context and O/S window using the GLFW helper library if (!glfwInit ()) { fprintf (stderr, "ERROR: could not start GLFW3\n"); return 1; } GLFWwindow* window = glfwCreateWindow (800, 600, "Hello Triangle", NULL, NULL); if (!window) { fprintf (stderr, "ERROR: could not open window with GLFW3\n"); glfwTerminate(); return 1; } glfwMakeContextCurrent (window); // start GLEW extension handler glewExperimental = GL_TRUE; glewInit (); // get version info const GLubyte* renderer = glGetString (GL_RENDERER); // get renderer string const GLubyte* version = glGetString (GL_VERSION); // version as a string printf ("Renderer: %s\n", renderer); printf ("OpenGL version supported %s\n", version); // tell GL to only draw onto a pixel if the shape is closer to the viewer glEnable (GL_DEPTH_TEST); // enable depth-testing glDepthFunc (GL_LESS); // depth-testing interprets a smaller value as "closer" float points[] = { 0.0f, 0.5f, 0.0f, 0.5f, -0.5f, 0.0f, -0.5f, -0.5f, 0.0f }; GLuint vbo = 0; glGenBuffers (1, &vbo); glBindBuffer (GL_ARRAY_BUFFER, vbo); glBufferData (GL_ARRAY_BUFFER, 9 * sizeof (float), points, GL_STATIC_DRAW); GLuint vao = 0; glGenVertexArrays (1, &vao); glBindVertexArray (vao); glEnableVertexAttribArray (0); glBindBuffer (GL_ARRAY_BUFFER, vbo); glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, 0, NULL); const char* vertex_shader = "#version 400\n" "in vec3 vp;" "void main () {" " gl_Position = vec4 (vp, 1.0);" "}"; const char* fragment_shader = "#version 400\n" "out vec4 frag_colour;" "void main () {" " frag_colour = vec4 (0.5, 0.0, 0.5, 1.0);" "}"; GLuint vs = glCreateShader (GL_VERTEX_SHADER); glShaderSource (vs, 1, &vertex_shader, NULL); glCompileShader (vs); GLuint fs = glCreateShader (GL_FRAGMENT_SHADER); glShaderSource (fs, 1, &fragment_shader, NULL); glCompileShader (fs); GLuint shader_programme = glCreateProgram (); glAttachShader (shader_programme, fs); glAttachShader (shader_programme, vs); glLinkProgram (shader_programme); // Loop until the user closes the window while (!glfwWindowShouldClose(window)) { // wipe the drawing surface clear glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram (shader_programme); glBindVertexArray (vao); // draw points 0-3 from the currently bound VAO with current in-use shader glDrawArrays (GL_TRIANGLES, 0, 3); // update other events like input handling glfwPollEvents (); // put the stuff we've been drawing onto the display glfwSwapBuffers (window); } // close GL context and any other GLFW resources glfwTerminate(); return 0;}
编译运行,成功的话,会实现以下窗口
第一行有可能报错,笔者上网查询后,把第一行代码删掉是可以的。
至此,如果你跟着所有步骤来做,一切顺利,没有意外的情况,且代码测试成功,那么恭喜你,完美配置成功。
不过……
对嘛,生活很难一帆风顺,吃个鸡蛋都有可能吃到蛋壳碎,这个程序有可能报许多错误,笔者来分享下个人的惨痛经历第一种:一大堆错误如下
观察错误提示,你会发现不少glew,glfw,gl的字眼或前缀,这说明和我们的库有关。解决方法如下,添加最上面的3行代码
第二种:无法打开glew32.lib文件
出现这个情况一定要确保三点:
①项目配置时,库目录添加的文件夹中是否有glew32.lib
②项目配置时,附加依赖项是否有添加glew32.lib
③glew32.dll是否有拷贝到C:\Windows\SysWOW64目录下再者glew32.lib文件是否损坏(这种情况一般都不会发生),如果确保了以上3点并重启过VS2015仍然报错,可尝试更换glew32.lib和glew32.dll文件
总结
这篇教程是我在网上查了许多资料,看了许多前辈的博客,再结合自身经历所写出来的,其中有许多知识笔者也是一知半解,也许存在着许多错误,不能保证每个人都可以成功配置,毕竟大家的计算机环境不尽相同。如果你在阅读过程中发现了错误,希望你能给我指正,相互学习。如果你按这个教程成功配置,那么说明我的努力是有一定价值的。最后希望各位想要学习OpenGL童鞋都能有一个好的开头。
梦不可怕,可怕的是没有梦
- WIN7 + VS2015环境下关于GLEW和GLFW的配置
- VS2015配置OpenGL(glfw,glew)
- 使用glew、glfw配置OpenGL开发环境
- 使用glew、glfw配置OpenGL开发环境
- VS2013+GLFW+GLEW 配置OpenGL开发环境
- VS2013配置glfw和glew说明
- openGL编程-环境配置(glfw;glew;glm相关 )
- win7下关于nginx配置的路径问题
- 利用GLFW和GLEW搭建OpenGL开发环境
- mac 下配置GLEW + GLFW
- linux下关于DM8168和PC通信的NFS环境的配置
- windows下关于Objective-C开发环境的配置
- VS2015 OpenGL开发环境简单配置 glfw + glad
- linux下关于mySQL的安装和配置
- ubuntu下关于git的配置和使用
- OpenGL-vs2012-glfw-glew 测试环境搭建
- VS 2008 OpenGL+glfw+glew+glm 配置
- Win10 VS2015 OpenGL + freeglut + glew + glm 环境配置
- http状态码详解
- Hibernate 基本概念
- Spring Cloud OAuth2 & Zuul
- Python生成器实现杨辉三角
- 关于发送邮件提醒的错误:java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
- WIN7 + VS2015环境下关于GLEW和GLFW的配置
- MySQL数据导入到infobright中
- 关于MySQL安装过程中遇到的问题
- ajax执行后台方法执行了两次
- 2017/9/14 (学习日记)(FAT12文件簇链的寻找)
- WamapServer Apache服务器起不来(非端口占用)
- NKOJ-3777 卡牌操作
- 只能在执行Render() 的过程中调用 RegisterForEventValidation
- 字符转数字不使用str.toInt方法转为整型