正文
#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的版本足够新,从而能够囊括所有函数。