OpenGL(7)调用系统API创建Ubuntu_X11窗口

OpenGL(7)调用系统API创建Ubuntu_X11窗口

简介

OpenGL(6)调用系统API创建Local窗口 在这一文讲了基于Qt(QWidget) + GLAD/GLEW 在win32系统下创建3D窗口。这里延续上一章,操作系统换成Ubuntu18.04创建3D开发环境,即Qt(QWidget) + GLAD/GLEW + Ubuntu18.04(X11)。操作起来比较简单,毕竟只要装个虚拟机就可以开始折腾了。
GLAD/GLEW/GLFW/等之间的关系
下面编译了很多相关的库,但使用时,外部库就用到了 GLEW

环境配置

安装Qt5.12

这里并不是将Qt的教程,如何在Ubuntu18.4下安装Qt5.12。网上资料很多。

配置OpenGL

  1. 安装基本的编译环境
sudo apt-get install build-essential
  1. 安装OpenGL Library
sudo apt-get install libgl1-mesa-dev
  1. 安装 OpenGL Utilities
sudo apt-get install freeglut3-dev
  1. 下载配置glew库
    下载地址 , 下载tgz格式的压缩包。
#解压文件,解压到当前文件夹
tar  zxvf  glew-2.1.0.tgz  -C .
# 获得root权限
sudo su
# 构建
sudo make
sudo make install
# 头文件在/usr/include/GL中,库文件在/usr/lib64中
# 添加系统环境变量(root权限)
# 写入/usr/lib64,然后保存退出
vim /etc/ld.so.conf.d/glew.conf
sudo ldconfig
  1. 配置GLFW
    下载地址 , 只有zip格式
#解压到当前目录
unzip glfw-3.3.2.zip
# 安装必要的软件包
sudo apt-get install xorg-dev
# 进入glfw目录
cd /home/azmddy/Downloads/glfw-3.2.1/
# 在此目录中构建
cmake .
# 编译
make
sudo make install
sudo ldconfig
# 头文件在/usr/local/include目录,库文件在/usr/local/lib目录
  1. 配置GLAD
    打开GLAD的在线服务
    在这里插入图片描述

生成zip压缩文件包含两个头文件目录,和一个glad.c文件。
将两个头文件目录(glad和KHR)复制到你的Include文件夹中(即/usr/local/include),并添加glad.c文件到稍后的工程中。

配置GLContext

#include "GL/glew.h"
#include "GL/glx.h"
#include "GL/glu.h"
#include <X11/Xlib.h>

namespace MyGL
{
    class GLContext
    {
    protected:
        Display *_dpy;
        Window _win;
        GLXFBConfig *_fc;
        GLXWindow _glw;
        GLXContext _glc;
    public:
        GLContext();
        virtual ~GLContext();

        bool setup(Display *dpy, Window win);

        void shutdown();

        void swapBuffer();
    };
}

配置好OpenGL库,配合Qt的QWidget ,最终成品如下图所示:

在这里插入图片描述

遇到的坑

  1. 虽然我将OpenGL的库都配置到系统环境变量,不过我还是喜欢把其中一第三方库放在工程目录中,用相对路径引用:
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/GLEW/release/ -lGLEW
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/.lib/GLEW/debug/ -lGLEW
else:unix: LIBS += -L$$PWD/lib/GLEW/ -lGLEW \
                   -L$$PWD/lib/GLFW/ -lglfw3

INCLUDEPATH += $$PWD/inc/GLEW \
               $$PWD/inc/GLFW

# 如果不手动添加这3个库,会报reference error, 即缺少依赖库
LIBS += -lGL \
        -lglut \
        -lGLU
  1. X11库的依赖,手动添加到工程中
LIBS += -lX11 \
  1. 头文件的先后顺序
///< 这个头文件必须放在所有头文件的最前面,放在后面编译器会提示,并且出一堆错,需要放前面。
#include "GL/glew.h"  
#include "GL/glx.h"
#include "GL/glu.h"
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值