【问题标题】:How to create my own opengl binding or library如何创建我自己的 opengl 绑定或库
【发布时间】:2017-01-22 05:05:03
【问题描述】:

我对图形编程比较陌生,所以我想从最基本的开始。我看到有像 PyOpenGl 这样的库,它提供对 opengl api 本身的绑定。现在,我真的很想自己创建像 PyOpenGl 这样的东西,这样我就可以了解这个过程中的一切是如何运作的。

我可以创建像 PyOpenGl 或 GLFW 这样的库吗?如果是这样,请给我一些关于我应该做什么的一般提示。

如果不是,请向我解释为什么我不能创建自己的绑定,如果我的上述问题听起来很荒谬,我深表歉意。

【问题讨论】:

  • 如果您不熟悉图形编程,那么尝试编写自己的绑定可能不是一个好主意。
  • 是的,我想是的,但我真的很想这样做。如果你知道怎么做,你能给我一些指导吗?我相信我会在前进的过程中掌握必要的技能
  • 我没有给你的链接,抱歉,但我必须补充...水平使用。如果您不了解 OpenGL 的运作方式,您会发现很难以有用的方式与硬件进行交互。
  • 嗯,我实际上是 UC 的一名学生,我有一年的机器代码。所以我真的很想深入了解细节。即使它涉及机器代码。
  • 我不知道这在 python 中是如何工作的(如果你想用那种语言添加这个标签)。在 Windows 上,您将使用 LoadLibraryAGetProcAddresswglGetProcAddress 的组合,如 here 所述

标签: opengl


【解决方案1】:

PyOpenGL 是一个相当薄的包装器,在大多数情况下,它只是将 Python 函数调用转换为对同名本机机器代码函数的调用。有一些小细节,比如混合中的调用约定,但这些实际上是无聊的东西。事实是(就 OpenGL 而言)你用 Python 用 PyOpenGL 编写的源代码看起来几乎与你用 C 编写的源代码相同。PyOpenGL 做了一些“聪明”的事情,比如提供将 NumPy 数组与接受数据指针参数的 OpenGL 调用接口,但这只是内务处理。

当您在 C 或更极端的情况下使用汇编语言(完全可能)执行 OpenGL 调用时,这是您可以使用的最低级别(使用 OpenGL),无需编写自己的 GPU 设备驱动程序。编写 GPU 设备驱动程序是一项超级艰巨的工作;它实际上需要数百万行 C 代码(据说 NVidia 的 OpenGL 实现由大约 40M LoC 组成,有用于 AMD 和 Intel GPU 的开源驱动程序,并且每个都有 MLoC)。

如果您对某种中间立场感兴趣,请查看 Vulkan API。如果为图形编写更高级别的包装器是您的事情,我建议您为 Vulkan 实现一些更高级别的 API / 渲染器并将其与 Python 接口。作为一种学习体验(恕我直言),这可能会更有价值。

【讨论】:

    【解决方案2】:

    OpenGL API 存在于显卡驱动程序中。所有的OpenGL函数都在那里。你只需要知道如何获得它们。正如Spektre所说,过程是:

    1. 创建 OpenGL 上下文。这是操作系统的工作。每个操作系统都有其 方式及其问题。阅读https://www.khronos.org/opengl/wiki/Load_OpenGL_Functions
    2. glext.h 那样定义函数指针,然后从 司机。除了标准的 OpenGL 函数,供应商还添加了自己的 那些,称为“扩展”。您可以看到 GLEW 是如何完成这项工作的。如果您想设置所有函数和扩展,请创建一个使用glext.h 的脚本,因为它们大约有一千个。

    您可以从https://www.opengl.org/registry/下载glext.h

    做一些像 GLFW 一样的事情,除了前面两点之外,还需要知道如何创建一个窗口并为键盘和鼠标处理它的消息。同样,这取决于操作系统。在 Windows 上有一种方法。在 Linux 上,它取决于使用的窗口管理器,例如 GTK+。或者直接X11。或者……

    无论如何,我最好的建议是,您可以阅读 GLEW 和 GLFW 的做法,查看他们的代码。但是不要浪费太多时间。更喜欢在 OpenGL 上获得经验,让那些“挖掘”以备后用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 2015-08-24
      • 2011-11-05
      相关资源
      最近更新 更多