如何创建自己的opengl绑定或库

时间:2017-01-22 05:05:04

标签: opengl

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

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

如果没有,请向我解释为什么我不能创建自己的约束,如果上面的问题听起来很荒谬,我会道歉。

2 个答案:

答案 0 :(得分:2)

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

当您使用C语言进行OpenGL调用时,或者甚至更极端 - 汇编语言(完全可能),这是您可以使用的最低级别(使用OpenGL),而不是编写自己的GPU设备驱动程序。编写GPU设备驱动程序是一项超级努力工作;它需要数百万行C代码(据说NVidia的OpenGL实现包含大约约40M的LoC,有AMD和Intel GPU的开源驱动程序,每个都有MLoC)。

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

答案 1 :(得分:0)

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

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

    您可以从https://www.opengl.org/registry/

    下载glext.h

    做一些像GLFW这样的事情,需要添加到前两点,知道如何创建窗口并处理键盘和鼠标的消息。这再次取决于操作系统。在Windows上有一种方法。在Linux上,它取决于所使用的窗口管理器,例如GTK +。或直接X11。还是......

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