1 两者均可用于创建丰富的GUI应用程序。因此,它们是否彼此竞争。
只有在一定程度上。据我所知,WPF只能用于创建基于Windows的应用程序。Flex最初的主要目标是Web,并且大多数Flex应用程序都是所谓的“富Internet应用程序”。
后来Adobe创建了AIR,这是一个虚拟机,可以让您在操作系统本身上运行相同的应用程序,通常通过重用编写为Web应用程序的99%的代码来实现。添加了一些API以访问操作系统的本地功能(客户端数据库,文件I / O,运行/访问本地进程等)。AIR应用程序可以在Windows,Mac和Linux上部署,尽管已停止开发适用于Linux的AIR vm。
这个故事的最后一步是,AIR应用程序现在也可以打包为可在移动操作系统上部署的应用程序。再次因为它在VM中运行,这提供了“编写一次,部署到任何地方”的解决方案。支持Android和iOS(不确定BlackBerry但谁在乎)。在Flex方面,一些专门针对移动设备的UI组件被添加到框架中。
2 如果两者用于相同的目的,那么应该选择哪一个。
选择完全由您决定,取决于诸如对框架的了解、您可能具有的特定要求等因素。
3 此外,我也想知道 WPF 是基于 DirectX 进行渲染的,因为它进行基于矢量的渲染,但同时我也很想知道 Flex 是如何渲染的,Flex 基于什么?
Flex 是一个编译成 ActionScript 的框架,然后再编译成 abc 字节码。该字节码将由 Flash VM 解释和运行。
Flash 的根源在于基于矢量的渲染(它是在过去两个十年中在 Web 上呈现矢量图形的解决方案)。因此,Flex UI 组件的所有库存图形都是基于矢量的。
4 Flex 是否也可以使用基于 GPU 的渲染……是否有任何方式在 Flex 中使用 Shader。
在过去的五年中,Flash/ActionScript API 增加了 GPU 加速功能,但由于 Flex 框架在此之前就被创建,将其移植到新的 GPU 加速系统将会太复杂,因此Flex不能从这种进化中受益。
但是您可以在GPU加速的组件旁边使用Flex UI。例如,您可以创建一个普通的Flex应用程序,只需一个组件即可呈现一个生存在Flex显示列表之外的3D模型。
通常,只有为Flash虚拟机编写的游戏才会利用GPU加速。其中大多数使用Starling框架。对于移动UI,您还可以使用FeathersUI框架,它在Starling的基础上提供了一个GPU加速的移动端组件集。
请注意,@Vinodharajan的回答并不完全正确,因为Flex框架不再是Adobe公司的财产。大约两年前,Adobe将其捐赠给Apache基金会,并自那以后一直在那里发展。