Mesa主要对OpenGL、EGL、Vulkan等图形库API的软件实现,本系统主要通过Mesa学习OpenGL的实现原理,在学习相关的流程之前,先搭建好Mesa的运行环境。
一、下载源码
到官网下载源码,比如下载24.0,7版本:wget https://archive.mesa3d.org/mesa-24.0.7.tar.xz
在这里下载示例,这里下载9.0.0版本:wget https://archive.mesa3d.org/demos/mesa-demos-9.0.0.tar.xz
文件下载后,下一步分别对这两个压缩文件进行解压。
tar -xf mesa-24.0.7.tar.xz
tar -xf mesa-demos-9.0.0.tar.xz
二、编译
1、编译Mesa
1)首先配置编译环境
切换到mesa-24.0.7目录
meson setup builddir/ -Dprefix=/home/xxx/Mesa/target -Dgallium-drivers=swrast -Dvulkan-drivers=swrast
其中/home/xxx/Mesa/target为指定的安装目录
2)编译并安装
meson install -C builddir/
编译后的结果如下图所示
2、编译Demo
命令窗口切换到mesa-demos-9.0.0/
1)执行下面命令配置编译环境
meson --prefix=/xx/Mesa/demo/target build-dir
其中/xx/Mesa/demo/target为安装目录。
2)开始编译
meson compile -C build-dir
3)编译完成后安装
meson install -C build-dir
编译完成后,在安装目录可以看到各个demo的可执行文件
三、运行Demo
切换到demo的目录,直接打开文件可将demo跑起来,运行命令如下:
path/Mesa/demo/target/bin$ LD_LIBRARY_PATH=/home/xxx/external/Mesa/target/lib/x86_64-linux-gnu ./es2tri
在执行命令前,通过LD_LIBRARY_PATH指定要链接的库的路径,这里执行mesa安装目录表示要使用刚才编译处理的库。es2tri是一个三角形的示例,运行记过如下
通过ldd命令可以查看可执行文件连接的是哪个动态库,如下图所示
可以看出libGLESV2.so.2和libEGL.so.1使用的是本地编译出来的so。
通过上面的步骤,已经搭建出了Mesa的运行环境,可以在源码中加入日志信息,重新编译后再运行可以打印日志信息,根据日志信息,可以学习EGL和OpenGL的执行流程。。
在下一篇主要以三角形作为示例,介绍绘制三角形所用到的OpenGL API的执行流程,从而理解OpenGL图形库的渲染原理。