关于普通商业编辑软件(如Photoshop或Sony Vegas)的结构的简单问题:
虽然我知道这些应用程序的UI是如何实现的,但我不清楚如何开发其他更高级的图形?
我非常清楚用于2D和3D渲染的OpenGL和DirectX等库。我也意识到使用软件渲染(集成图形)可以做很多事情。但这些程序使用哪个选项?
我知道Photoshop有GPU加速渲染选项。这意味着他们必须编写两次渲染代码,一次用于软件渲染,另一次用于使用GPU渲染。这甚至没有考虑到在Windows机器上使用DirectX通常更好的事实,而OpenGL与其他操作系统兼容。
这些应用程序的开发人员是否真的花时间重新编写所有这些可能性的图形代码,或者是否使用了一些库/更容易的转换?
谢谢!
答案 0 :(得分:1)
我不确定Photoshop和Vegas是如何做到的;但在我工作的地方,我们开发了几个独立于OS的成像应用程有些框架声称系统独立,可以帮助绘制图形,Qt,Firemonkey是我用过的两个。但这些都是一个很大的麻烦,因为您仍然需要在任何地方包含代码或编译器指令,以区分您运行的操作系统。每个图形应用程序都有一些共同的绘图基元。
对于2D应用程序,如果可以绘制线条,那么您也可以使用自己的库绘制曲线。如果可以填充多边形,则还可以填充曲线。此外,如果您可以绘制线条并填充多边形,那么您也可以使用3D绘制。由于存在这么少的这些原型,你可以创建自己的图形上下文对象(OOP)来完成所有这些功能。图形上下文可以(就像你说的那样)在使用DirectX,GDI,OpenGL,Metal,Vulkan或你自己的软件渲染器之间切换。
对于每个操作系统,您必须弄清楚如何获取窗口对象及其缓冲区的句柄。您还必须弄清楚如何将该缓冲区链接到您的图形卡。
这种创建自己的图形上下文的方法不能很好地工作的唯一地方是某些图形卡功能,如AA或如何编程着色器。由于额外的工作,我从未试图自己编程这些功能。这就是为什么在3D程序中,如Maya,3d Studio Max,Blender等,如果视口没有设置为软件渲染,则视口总是看起来更好。大多数图形程序员都喜欢依赖他们的图形API。
所以摘要:
如果您可以绘制线条,填充多边形,并且能够以操作系统无关的方式访问像素数据,那么您可以自己进行80%的图形编程。这些函数可以封装到您自己的库中,可以在不同的系统上以不同的方式绘制这些原型。