写在前面
本文的内容是基于Linux mint的,所以Debian系列都是通用的。
编程环境
1.
$sudo apt-get install build-essential
$sudo apt-get install xorg-dev
$sudo apt-get install libglu1-mesa-dev
$sudo apt-get install cmake
2.GLFW
我们通过下载源码包的方式自己编译需要需要的库。
a.获得makefile
$cd glfw-3.1.1(这里是下载的源码包根目录)
$cmake .
b.生成libglfw3.a
$cd CMakeFiles
$make
$sudo make install(这里用sudo,否则无法自动将生成的库文件和相关头文件放到/usr/local目录下
3.GLEW
$sudo apt-get install libglew-dev
编译运行
环境搭建好之后,就可以编译运行我们的源码了。
下面是我提供的一份OpenGL代码
#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
void keyCallback(GLFWwindow* win, int key,
int scancode, int action, int mode);
static const GLuint WIDTH = 800, HEIGHT = 600;
int main()
{
std::cout<<"启动glfw上下文, OpenGL 3.3"<<std::endl;
// 初始化glfw3
glfwInit();
// 设置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);
// 创建一个glfwwindow对象
auto win = glfwCreateWindow(WIDTH, HEIGHT, "learn opengl", nullptr, nullptr);
if(win == nullptr)
{
std::cout<<"创建win失败"<<std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(win);
// 设置按键回调
glfwSetKeyCallback(win, keyCallback);
glewExperimental = GL_TRUE;
if(glewInit() != GLEW_OK)
{
std::cout<<"glew初始化失败"<<std::endl;
return -1;
}
glViewport(0, 0, WIDTH, HEIGHT);
while(!glfwWindowShouldClose(win))
{
// 检查是否有事件
glfwPollEvents();
// 渲染
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// 交换缓冲区
glfwSwapBuffers(win);
}
glfwTerminate();
return 0;
}
void keyCallback(GLFWwindow* win, int key,
int scancode, int action, int mode)
{
// 如果按下esc则退出
std::cout<<"key"<<std::endl;
if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(win, GL_TRUE);
}
下面就是在linux下编译opengl程序需要的命令了,也是我写这篇文章的主要原因
g++ hello_OpenGl.cpp -o hello_OpenGL -lGLEW -lglfw3 -lXxf86vm -lXinerama -lXcursor -lGL -lX11 -lpthread -lXrandr -lXi -std=c++11
这条命令花了我很多心思,是结合了StackOverFlow以及我自己的思考得出的结果。写这篇博客主要就是为了记录这条命令,免得到时候自己换系统的时候又要辛苦的查资料什么的,也顺便帮助和我有一样需要的朋友快速解决这个烦恼。
顺便提一句
-lpthread 和 -std=c++11
这两个不是必须的,一个是程序中需要线程库时需要添加,一个是需要用到C++11的时候添加的,其他的都是必须的。
原文链接: https://www.cnblogs.com/No-20/p/4751201.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/220924
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!