在 GPU 中分配内存,闪存/空气



这更像是技术类型的"实现"问题。

在过去,当我使用 C 语言时,您可以指定使用 VGA 内存或 ram 内存来分配位图结构,然后您可以更快地使用它们。

现在我们在 2013 年,我在 AS3 中创建位图,它在 ram 中分配(我没有看到使用 GPU 的选项,并且 100% 的情况下我确定它正在使用 RAM,因为它恰好增加了预期的位图大小。

¿是否有任何使用 GPU 内存的选项?

谢谢

查看 flash.display3D.Texture 的 API 文档 - 有 3 种方法:

uploadCompressedTextureFromByteArray(data:ByteArray, byteArrayOffset:uint, async:Boolean = false):void
Uploads a compressed texture in Adobe Texture Format (ATF) from a ByteArray object.
uploadFromBitmapData(source:BitmapData, miplevel:uint = 0):void
Uploads a texture from a BitmapData object.
uploadFromByteArray(data:ByteArray, byteArrayOffset:uint, miplevel:uint = 0):void
Uploads a texture from a ByteArray.

因此,您不能直接在 GPU 中分配内存。 您必须从字节数组或位图数据上传数据,它们首先存在于 RAM 中。 但是,为了最大程度地减少 CPU RAM 使用率,您可能会在 RAM 中重用单个字节数组或位图数据,更改其内容并多次上传,或者在加载后释放它。 但是据我所知,您无法直接访问GPU内存的内容。

就"读取访问"而言,从GPU内存中获取数据的唯一方法(同样,这是一个缓慢的解决方法)是通过Context3D.drawToBitmapData将Context3D绘制回BitmapData。基本上就像屏幕抓取一样。 Starling 框架通过 Stage.drawToBitmapData 提供了此功能的示例。

基本上,没有设置Stage3D API,因此您可以轻松访问GPU内存。

您不能像其他语言那样手动分配 GPU 内存,但您确实可以使用具有不同 Adobe 技术的 GPU 加速图形。

例如,如果你想要GPU加速的视频解码,你应该使用StageVideo,或者如果你想加速2d或3d图形,你可以使用Stage3D。

除非您想以低级方式使用 Stage3D,否则建议您使用中间框架。

对于2d,最好的解决方案是迄今为止的Starling。它是Adobe认可的可靠框架,已在无数商业项目中使用,并不断优化。

至于3d,看看Flare3D或Away3D。

相关内容

  • 没有找到相关文章

最新更新