0

这更像是技术问题的“实施”。

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

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

¿ 有没有使用 GPU 内存的选项?

谢谢

4

2 回答 2

1

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

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

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

对于 2d ,迄今为止最好的解决方案是Starling。它是 Adob​​e 认可的坚实框架,已用于无数商业项目并不断优化。

至于 3d 看看Flare3DAway3D

于 2013-10-17T18:51:55.087 回答
1

查看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 中的ByteArrayBitmapData上传数据。但是,为了最大限度地减少 CPU RAM 的使用,您可能会在 RAM 中重用单个 ByteArray 或 BitmapData,更改其内容并多次上传,或者在加载后释放它。但据我所知,您不能直接访问 GPU 内存的内容。

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

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

于 2013-10-17T19:12:32.413 回答