window默认支持到OpenGL1.3,后续也没有更新,opengl并不是以API更新或者新的开发包方式更新功能,它使用了扩展方式获取高版本新的功能。

如执行扩展功能函数glArrayElementEXT:代码如下

        char* ext = (char*)glGetString(GL_EXTENSIONS); //获取该电脑显卡支持的扩展函数结合PFNGLARRAYELEMENTEXTPROC glArrayElementEXT = (PFNGLARRAYELEMENTEXTPROC)wglGetProcAddress("glArrayElementEXT"); //获取扩展函数glArrayElementEXT 指针glArrayElementEXT(0); //通过函数glArrayElementEXT 指针 调用扩展函数glArrayElementEXT

  上面这样获取扩展功能的方式很麻烦,所以就诞生了glew,是一个跨平台的C++扩展库,方便开发者使用opengl扩展功能。

安装及使用

环境:win7 VS2013

1. 下载glew:

地址:https://github.com/Perlmint/glew-cmake

2. 打开生成glew VS工程:

在build目录下选择对应版本的VS工程打开,我使用的是VS2013打开 VC12目录下glew.sln

glew_shared :是编译动态链接库
glew_static : 是编译静态库

根据自己情况选择一种方式,我这里选择glew_static 。
编译之后得到glew32sd.lib

3. opengl项目配置:

a. 项目属性 ----> C/C++ —> 附加包含目录 —> your_path\glew-master\include
b. 项目属性 ----> 链接器 —> 常规 —> 附加库目录 —> your_path\lib
c. 项目属性 ----> 链接器 —> 输入 —> 附加依赖项 —> glew32sd.lib

4. 代码:

注意: glew.h要放在glfw3.h glut.h 之前,并定义宏 GLEW_STATIC


#include <iostream>
// GLEW
#define GLEW_STATIC    #include <GL/glew.h>
#include <Windows.h>
// GLFW
#include <GLFW/glfw3.h>
#pragma comment(lib,"winmm.lib") // 告诉连接器与这个库连接,因为我们要播放多媒体声音
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
//#define DEBUG
// Function prototypes
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);// Window dimensions
const GLuint WIDTH = 800, HEIGHT = 600;// The MAIN function, from here we start the application and run the game loop
//#ifdef DEBUG
//int main()
//#else
//int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
//#endif
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, "win view", nullptr, nullptr);if(window == nullptr) {std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);// Set the required callback functions    glfwSetKeyCallback(window, key_callback);// 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    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();// Render    // Clear the colorbuffer    glClearColor(1.0f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);/* Draw a triangle */glBegin(GL_TRIANGLES);glColor3f(1.0, 0.0, 0.0);    // RedglVertex3f(0.0, 1.0, 0.0);glColor3f(0.0, 1.0, 0.0);    // GreenglVertex3f(-1.0, -1.0, 0.0);glColor3f(0.0, 0.0, 1.0);    // BlueglVertex3f(1.0, -1.0, 0.0);glEnd();/* Swap front and back buffers */glfwSwapBuffers(window);//Sleep(20);}// Terminate GLFW, clearing any resources allocated by GLFW.    glfwTerminate();return 0;
}// Is called whenever a key is pressed/released via GLFW
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode) {std::cout << key << std::endl;if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)glfwSetWindowShouldClose(window, GL_TRUE);
}

5. 运行结果:

openGL学习笔记六: glew库及使用相关推荐

  1. 【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】

    ✅ 重点参考了 LearnOpenGL CN 的内容,但大部分知识内容,小编已作改写,以方便读者理解. 文章目录 零. 成果预览图 一. 光照原理与投光物的配置 1.1 光照原理 1.2 投光物 二. ...

  2. 【OpenGL学习笔记⑥】——3D变换【旋转的正方体 实现地月系统 旋转+平移+缩放】

    ✈️ 文章目录 零. 成果预览图 一.3D立方体的顶点数组 二.纹理旋转 三.纹理缩放 四.画n个3D图形 五.轨道的数学公式 六.深度缓冲(Z 缓冲) 七.完整代码 八.参考附录: 神器的正方体 ☁ ...

  3. OpenGL 学习笔记 II:初始化 API,第一个黑窗,游戏循环和帧率,OpenGL 默认垂直同步,glfw 帧率

    前情提要: 上一篇: OpenGL 学习笔记 I:OpenGL glew glad glfw glut 的关系,OpenGL 状态机,现代操作系统的窗口管理器,OpenGL 窗口和上下文 OpenGL ...

  4. 多线程编程学习笔记——任务并行库(三)

    接上文 多线程编程学习笔记--任务并行库(一) 接上文 多线程编程学习笔记--任务并行库(二) 六.   实现取消选项 本示例学习如何实现基于Task的异步操作进行取消流程,以及在任务真正运行前如何知 ...

  5. Python学习笔记六——画小猪佩奇

    目录 Python学习笔记六--画小猪佩奇 画布 画笔 属性设置 操纵命令 运动命令 画笔控制命令 全局控制命令 其他命令 Python学习笔记六--画小猪佩奇 使用Python的turtle库可以绘 ...

  6. 【OpenGL学习笔记】地月系

    OpenGL学习笔记2-地月系 文章目录 OpenGL学习笔记2-地月系 前言 运行结果 纹理图片 一.TexturePool 1.**TexturePool.h** 2.**TexturePool. ...

  7. OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7888 ...

  8. libevent学习笔记六:libevent核心事件event

    libevent学习笔记六:libevent核心事件event 前面对reactor模式.事件处理流程.libevent源代码结构等有了高层的认识后,接下来将详细介绍libevent的核心结构even ...

  9. Ethernet/IP 学习笔记六

    Ethernet/IP 学习笔记六 EtherNet/IP defines two primary types of communications: explicit and implicit (Ta ...

最新文章

  1. (转)命令行下,用 xcodebuild 生成ipa文件,通过 itms-services 协议安装
  2. 为什么不采用“两次握手”建立连接呢?
  3. 【KVM系列04】KVM的I/O 设备直接分配和SR-IOV
  4. C++ 标准库类型 queue
  5. STM32F0308DISCOVERY探索套件
  6. Facebook去年从中国获50亿美元广告收入 占营收10%
  7. 服务器控件编程中的控件状态保存机制
  8. Oracle基础篇--01数据库控制语言DCL
  9. JavaScript中单例模式的实现
  10. 网络唤醒Wake On Lan
  11. ajax.googleapis firefox,使用Redirector插件解决googleapis公共库加载的问题【转】
  12. pytorch seq2seq模型中加入teacher_forcing机制
  13. AD19 编译报错:has only one pin 和 floating net label
  14. 小米已成国产手机标杆,海外出货量碾压华为OV
  15. Linux 下 find(文件查找)命令的用法总结
  16. IEEE 802.11 无线局域网络 (Wireless LAN)
  17. 【Benewake(北醒) 】短距 TFmini-S 12m介绍以及资料整理
  18. 聊聊角色扮演探索式测试与肥皂剧模型
  19. 魔王语言解释(数据结构课程设计)
  20. 基于Doc2vec训练句子向量

热门文章

  1. python中complex(10.99)是什么意思_下面代码的输出结果是
  2. ubuntu下启动vlc报错“VLC is not supposed to be run as root“
  3. Linux- 基础IO
  4. Python+winreg+netifaces查看网络接口信息
  5. 进入瓶颈期,没有方向
  6. WordPress子比主题【夜/日】间模式切换小提示[WP教程]
  7. 薪酬管理资料(最新修订版)
  8. 单片机应用系统设计技术——可预设电压的数控电源
  9. 淘品优选积分商城电商平台有哪些功能?
  10. 李宏毅机器学习P3-P4