Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AS3 AIR iOS-如何控制何时从GPU缓存/取消缓存位图数据?_Ios_Iphone_Actionscript 3_Flash_Gpu - Fatal编程技术网

AS3 AIR iOS-如何控制何时从GPU缓存/取消缓存位图数据?

AS3 AIR iOS-如何控制何时从GPU缓存/取消缓存位图数据?,ios,iphone,actionscript-3,flash,gpu,Ios,Iphone,Actionscript 3,Flash,Gpu,这个问题有点像四个部分: 是否所有位图数据在创建后立即缓存到GPU,即使从未应用到位图或添加到后台 如果GPU纹理缓冲区已满,是否仍会发生这种情况?奖励点:如果是这样,GPU选择什么优先交换方法来选择从内存中移除哪些纹理 如果为1,则设置任何位图数据的宽度/高度是否会取消缓存,以及/或者替换其像素是否会因此将新像素上载到GPU上的相同内存地址?奖励:如果尺寸改变怎么办 为了将这一切结合在一起,一个扩展BitmapData但将其实际数据存储在ByteArray中的混合类是否能够根据需要使用setP

这个问题有点像四个部分:

是否所有位图数据在创建后立即缓存到GPU,即使从未应用到位图或添加到后台

如果GPU纹理缓冲区已满,是否仍会发生这种情况?奖励点:如果是这样,GPU选择什么优先交换方法来选择从内存中移除哪些纹理

如果为1,则设置任何位图数据的宽度/高度是否会取消缓存,以及/或者替换其像素是否会因此将新像素上载到GPU上的相同内存地址?奖励:如果尺寸改变怎么办

为了将这一切结合在一起,一个扩展BitmapData但将其实际数据存储在ByteArray中的混合类是否能够根据需要使用setPixels/getPixels来控制从GPU的上载/下载,以缓冲大量位图?额外好处:如果这个类的实例是静态的,那么在位图中实际放置它们的速度会提高吗

这里有一些答案

不可以。在空中,你可以手动上传位图到GPU,并控制何时上传 就我所知,如果缓冲区已满,您只会得到一个错误-GPU无法选择要做什么。如果随机纹理对你来说很重要,那么移除它就不好了,对吧 例如,您可以检查Starling以及它如何将纹理上传到GPU。一旦您强制它这样做,它就不在乎您如何处理位图。这就像制作一个物体的照片图像,这样你就可以展示它,而不是用文字来解释它。如果你改变了物体,照片还是一样的。 简单回答:不是。再说一次——最好看看纹理是如何创建的,以及你是如何将东西上传到GPU的。
Starling依赖Stage3D,它有明确的控制发送到GPU Texture.uploadFromBitmapData等。我的问题是关于AS3如何管理普通2D显示链的GPU使用,以及如何在没有Stage3D的情况下触发纹理创建和移除。哦,现在我明白了,很抱歉。无论如何,我想不出一个方法来实现它,因为Stage3D是一个使用AGAL和GPU一起工作的API接口。我不认为没有舞台3d你就可以获得3d环境。Mad组件使用GPU,但不知道确切的方式-您可以查看它。Adobe文档说,当packager for iOS中启用GPU模式时,BitmapData会自动上载到GPU。您可以编写一个标准的显示应用程序并将其置于GPU模式,然后AIR将动态地将所有向量、文本、位图转换为纹理,尽管效率不是很高。不需要阶段3d上下文。很明显,AIR正在为此使用一些内部上下文。但是在创建并上传到GPU后,关于如何更改或删除这些纹理的信息非常少,尤其是BitmapData,它似乎不需要显示在缓存的显示链上。这正是我所说的——如果你需要控制正在发生的事,我认为Stage3D是一个不错的选择。很抱歉,我无法以这种方式帮助您-如果您发现任何信息,请随时更新: