您可以制作自己的渲染管线吗?

Can you make your own rendering pipeline?

本文关键字:自己的      更新时间:2023-10-16

我想写一个渲染器,但我真的必须使用 OpenGL 管道吗,我不能自己做吗?有没有办法为 GPU 和 CPU 编写所有代码,从内存管理到光栅化,还是必须使用已经提供的管道?如果我不能在OpenGL中做到这一点,我在哪里可以?我可以得到一些方向吗? 我用什么语言编写 GPU 代码以及如何在 GPU 上使用它?

目前标准的消费级 GPU 不是 CPU。您不会对图形管道进行"编程"。图形管道就是这样,因为这就是 GPU 的设计方式。显然,不同的特定 GPU 将具有不同的实现,但渲染管线的基本元素都是硬件的基本部分。管道中可编程的部分仅在 GPU 允许的范围内进行编程,并且用于该阶段的预期目的(具有一定的灵活性(。

未来的 GPU 可能更加灵活,在某些现代 GPU 中甚至有一些用于顶点处理的替代管道。但我们还没有到你可以随心所欲地编造事情的地步。GPU 专为提高效率而设计;它们的局限性有助于事情保持在有效的道路上。

内存管理是一个完全独立的问题。与OpenGL等即时API相比,Vulkan和类似的命令缓冲区API允许更多的低级内存管理功能。但是,应该很好地理解,命令缓冲区 API不适合业余程序员。这些 API 丝毫不友好;他们要求您敏锐地意识到即时 API 对您隐藏的许多细节,并且当您违反他们的规则时,它们不会告诉您。

您可以编写一个直接调用图形驱动程序的库,也可以编写在 CPU 上运行的自定义管道,该管道在功能上是专用图形硬件的模拟器,但它会很复杂、不可靠、速度慢,并且可能会花费您大量时间来实施,投资回报率很低。

正如评论中提到的,GPU的工作方式是这样的,因为它们是在硬件层面上设计的。OpenGL/DirectX/Vulkan API 只是允许你或多或少地控制该管道,并插入自定义着色器阶段。

您无法编写自己的光栅器的原因是因为它是管道中的一个阶段,其中的效率几乎是可能的。您的版本不太可能更好。

不要太担心管道的不可编程部分。这是硬件工程师和驱动程序程序员的职权范围。

如果您想对现有硬件进行大量控制,请尝试DX12或Vulkan/Metal。它们与程序员一样接近硬件,而无需编写自定义驱动程序。