我想编写一个渲染器,但是我真的必须使用OpenGL管道,我不能自己制作吗?有什么方法可以编写从内存管理到栅格化的所有GPU和CPU代码,还是必须使用已经提供的管道?如果我在OpenGL中无法做到这一点,该怎么办?我可以得到一些指示吗?我用什么语言编写GPU代码以及如何在GPU上使用它?
当前标准的消费级GPU不是CPU。您无需“编程”图形管道。图形管道之所以如此,是因为这就是设计GPU工作的方式。显然,不同的特定GPU将具有不同的实现,但是渲染管线的基本元素都是硬件的基本部分。可编程的管线部分只能在GPU允许的范围内以及该阶段的预期目的(具有一定的灵活性)进行编程。
未来的GPU可能更灵活,在某些现代GPU中甚至还有一些alternative pipelines for vertex processing。但是我们还没有到您可以随心所欲地整理东西的地步。 GPU专为提高效率而设计;它们的局限性可以帮助事物保持高效运行。
内存管理是一个完全独立的问题。与像OpenGL这样的即时API相比,Vulkan和类似的命令缓冲区API提供了更多的低级内存管理功能。但是,应该很好地理解,对于业余程序员来说,命令缓冲区API是not
。这些API一点也不友好。他们要求您敏锐地意识到即时API会对您隐藏的许多细节,并且在您违反规则时它们不会告诉您。[您可以编写一个直接调用图形驱动程序的库,也可以编写一个在cpu上运行的自定义管道,从功能上讲,它是专用图形硬件的仿真器,但是它很复杂,不可靠,运行缓慢,并且可能会花费很多时间来实施,而投资回报却很少。