OpenGL + Mesa 3D + MinGW

2024-03-23

我在 (Ubuntu) Linux 上编写 C++ 应用程序并将它们编译到 2 个操作系统:本机到Linux通过使用“g++”(GNU C++编译器)并将它们交叉编译为Windows通过使用“i386-mingw32-g++”(MinGW C++ 交叉编译器)。

现在,我正在尝试交叉编译“OpenGL”应用程序(从 Linux 到 Windows) - 为此我需要一些 OpenGL 库文件。
作为OpenGL的实现,我使用“Mesa 3D”开源库。幸运的是,Ubuntu 提供了“预编译的”mesa3d 库(libgl1-mesa-dev and libglu1-mesa-dev)适用于 Linux,但不幸的是,没有任何预编译库可与 MinGW 交叉编译器一起使用(因此它们的 Windows 版本) - 所以我“必须”手动“从源代码”编译它们(可以从http://www.mesa3d.org http://www.mesa3d.org主页)。

但我不知道这样做。在 mesa3d 源代码中,有一些文档如何为某些特定平台构建库 - 特别是“README.MINGW32”自述文件。
但就在第一行有一些命令

mingw32-make -f Makefile.mgw [OPTIONS...]

我无法运行,因为我没有安装任何“mingw32-make”程序。通过其他软件,我曾经用“经典”来构建它们

./configure -> make -> make install

过程,但这不适用于 mesa3d 库。
例如,我也尝试过

./configure --host=i386-mingw32

并且已经配置好,但是输入后

make

它引发了一些错误

error: #error No PIPE_SUBSYSTEM_WINDOWS_xxx subsystem defined.

现在我迷失了:-(。

那么有人知道如何构建 mesa3d 库以便与 mingw32 一起使用它们吗?

P.S.:而且当然,我不想要不再使用 Microsoft Visual Studio :-) 。我还想做所有必要的事情来从 Linux 构建 OpenGL 环境并使用 mingw32 进行交叉编译。我希望这是可能的。

P.S.2: On http://www.mesa3d.org/systems.html http://www.mesa3d.org/systems.html页面上写道,将 MinGW 与 Mesa 3D 一起使用已“已弃用”。我这样使用它的方法正确吗?


不需要为 MinGW 编译 Mesa3D。 MinGW包含GL库;它只是没有被调用libGL.a nor libGLU.a;这些库被称为libopengl32.a and libglu32.a。遗憾的是,这就是 Microsoft 决定在 Visual Studio 上的 Windows 下对它们的称呼,因此 MinGW 的 Windows 和 GNU/Linux 版本都决定包含上述命名的库。

因此,在 Windows 上交叉编译时,只需更改:

-lGL -lGLU

into

-lopengl32 -lglu32

GNU/Linux 上的 Mesa3D 实际上是一个libreOpenGL 的实现。这是因为OpenGL是一个商标,而SGI的政策不允许任何人在不支付大笔费用的情况下使用该名称。尽管如此,SGI 还是向作者 Brian Paul 提供了测试套件的副本。

Mesa3D 在大多数平台上都具有本地 OpenGL 实现,称为软件“健全性检查”库,可模拟许多高端硬件功能。但在 GNU/Linux 上,更重要的是称为 DRI 或直接渲染接口的东西。这才是真正的东西,硬件加速等等。该库也称为 Mesa3D;事实上,DRI 的配置是 Mesa3D 以及 X11 和内核的一部分。

Mesa3D 提供libreGNU/Linux 和其他自由平台上的 OpenGL 兼容标头。

Summary:Mesa3D 是 OpenGL 的 GNU/Linux 实现的名称,因为该名称已注册。该库包含一个优秀的、功能齐全的、正确的且相对快速的软件实现。它还包括用于硬件加速的直接渲染接口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL + Mesa 3D + MinGW 的相关文章

  • Opengl 视频纹理

    我正在使用 Visual Studio 10 在 Windows 上用 C 开发 opengl 应用程序 目前我在立方体上使用静态纹理 但我想集成视频纹理 你知道我可以使用哪个库来打开和解密视频吗 查看 ffmpeg libavformat
  • glm 中矩阵值的顺序不正确?

    我开始使用GLM http glm g truc net通过 OpenGL 3 和 GLSL 进行数学运算的库 我需要正交投影来绘制 2D 图形 所以我编写了这个简单的代码 glm mat4 projection 1 0 projectio
  • 如何计算正切和副法线?

    谈谈OpenGL着色语言 GLSL 中的凹凸贴图 镜面高光之类的东西 I have 顶点数组 例如 0 2 0 5 0 1 0 2 0 4 0 5 法线数组 例如 0 0 0 0 1 0 0 0 1 0 0 0 世界空间中点光源的位置 例如
  • GL_COLOR_ATTACHMENT 有什么作用?

    我现在正在学习帧缓冲区 但我只是不明白颜色附件的作用 我了解帧缓冲区 第二个参数的意义是什么 glFramebufferTexture2D GL FRAMEBUFFER GL COLOR ATTACHMENT0 GL TEXTURE 2D
  • 为什么我的 CAOpenGLLayer 更新速度比之前的 NSOpenGLView 慢?

    我有一个在 Mac OS X 上渲染 OpenGL 内容的应用程序 最初它渲染到 NSOpenGLView 然后我将其更改为渲染到 CAOpenGLLayer 子类 当我这样做时 我看到了巨大的性能损失 帧速率减半 鼠标响应能力降低 卡顿
  • GLSL聚光投影体积

    在我的开源项目中 我使用 Qt3D 设置了延迟渲染管道 到目前为止一切顺利 但现在我想通过添加聚光灯投影量来继续前进 例如场景中好像有烟雾 像这样 我正在使用的片段着色器位于问题的末尾 我读过 对于每个片段 我应该从光位置进行光线行进并找到
  • 如何在opengl中使用四元数绕屏幕中心旋转?

    我正在尝试实现轨迹球 轨迹球旋转 但我的中心有问题 回转 无论如何 我希望中心成为屏幕的中心 让我解释一下到目前为止我所做的事情 我创建了一个四元数 旋转轴 向量起点x向量结束 角度 向量起点 向量结束 从该四元数中 我创建了一个旋转矩阵
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • 如何为 glDrawElements() 指定每个图元的颜色

    我想渲染一个索引几何体 所以 我有一堆顶点和关联的排序索引 我在用glDrawElements 渲染 2 个四边形 如下所示 现在 我知道我可以使用glColorPointer 用于指定每个顶点的颜色 我的问题是 我可以指定吗每个基元的颜色
  • MinGW64 和 MSVC 上的函数解析结果不同

    template
  • 链接器失败:存档中的成员不是对象

    我正在尝试在 Windows 7 上使用 64 位 mingw 构建 Open CASCADE 6 7 1 库 我正在使用x86 64 4 9 1 release posix seh rt v3 rev1 from mingw w64 项目
  • Windows 上的 OpenGL SDK

    我正在尝试编写一个 OpenGL 应用程序 因此我安装了 Windows 7 SDK 然而 它似乎是OpenGL 1 1 define GL VERSION 1 1 1 如何找到我安装的 OpenGL 版本 dll 以及在哪里可以找到较新的
  • 如何在片段着色器中将 gl_FragCoord 转换为世界空间点?

    我的理解是 如果您有视图投影矩阵 屏幕宽度和屏幕高度的逆矩阵 则可以将 gl FragCoord 转换为片段着色器中世界坐标中的点 首先 你转换gl FragCoord x and gl FragCoord y通过分别除以宽度和高度 然后将
  • Retina 显示屏中具有 QOpenGLWIdget 的 Qt MainWindow 显示错误大小

    我有一个 Qt 应用程序MainWindow 我嵌入一个QOpenGLWidget在里面 一切正常 直到我开始使用 Apple Retina 显示屏并在高 DPI 模式下运行我的应用程序 我的QOpenGLWidget只是它应该具有的大小的
  • 如何创建自己的 openGL 上下文并将其绑定到 GLCanvas?

    所以当我开始掌握java时 paint Graphics g 我继续创建自己的渲染方法 但我必须了解缓冲区策略以及如何 获取 图形 所以现在我在学习openGL 我必须掌握方法 Override public void display GL
  • glTranslatef 不在 glBegin .. glEnd 中工作

    我正在尝试并排绘制不同颜色的两个方块 我的问题是我无法让 glTranslatef 将第二个方块向右移动 第二个方块只是绘制在第一个方块上 void display void glClear GL COLOR BUFFER BIT glMa
  • 3D 图形批处理

    很多网站 文章都说 批量 批 批 有人可以解释一下着色器中的 批处理 代表什么吗 即 是否 改变纹理 更改任意着色器变量 意味着某些东西不能 批处理 最简单的总结方法就是尝试尽可能少地调用 API 来绘制您需要绘制的内容 使用顶点数组或 V
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • Libgdx SpriteBatch.draw() 指定 4 个顶点

    我正在使用 libGdx 创建一个 2d 游戏 并尝试使用这个特殊的方法来绘制一个简单的 2d 纹理 分别指定 4 个顶点 draw Texture texture float spriteVertices int offset int l
  • 将 OpenBLAS 链接到 MinGW

    我正在尝试链接OpenBLAS https www openblas net 图书馆与明GW w64 https mingw w64 org Windows 上的编译器 这是我的代码 include

随机推荐