Opengl(二)——准备好窗口

来源:互联网 发布:阿里云香港服务器ss 编辑:程序博客网 时间:2024/06/08 10:13

正文

#define GLEW_STATIC         //静态编译必须加#include <GL/glew.h>#include <glfw3.h>#include <iostream>using namespace std;void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode){    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)        glfwSetWindowShouldClose(window, GL_TRUE);}   //按键回调函数int main(){    glfwInit();    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);         //确定opengl版本    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);              glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);    GLFWwindow* window = glfwCreateWindow(800, 600, "NB", nullptr, nullptr);  //获取窗口指针    if (window == nullptr)    {        std::cout << "Failed to create GLFW window" << std::endl;        glfwTerminate();        return -1;    }    glfwMakeContextCurrent(window);    glewExperimental = GL_TRUE;    GLenum err = glewInit();    if (GLEW_OK!=err)    {        cout << "Failed to initialize GLEW" << endl;    }    glViewport(0, 0, 800, 600);                  //设置视口大小    glfwSetKeyCallback(window, key_callback);    //注册    while (!glfwWindowShouldClose(window))    //游戏主循环    {        glfwPollEvents();                  // 检查事件        glfwSwapBuffers(window);           //切换缓冲帧        glClearColor(0.2f, 0.3f, 0.3f, 1);            glClear(GL_COLOR_BUFFER_BIT);     //清除    }    glfwTerminate();      //释放资源    return 0;}

glfw是一个工具包,用来简化一些操作,在这里可以很轻松的创建一个窗口。
glew, 由于opengl具有扩展特性,所以不同的显卡驱动会在实现公共opengl规范的同时,加上自己的一些拓展功能,而glew的作用是在运行之后根据当前驱动环境获取所有函数指针,原因是由于驱动版本众多,大多函数在运行之前是未确定的,所以glew会把函数指针都收集起来以便使用,当然,这就需要glew的版本足够新,从而能够囊括所有函数。

1 1