繁体   English   中英

可以想象使用移动设备的GPU来加速运行时图像压缩吗?

[英]Is it conceivable to use a mobile device's GPU to accelerate runtime image compression?

我并不一定要寻求即时的实际解决方案,但对是否已将现有技术限制在实际范围内感到好奇。

我了解低级GPU编程是一门妖术,只有少数人已经掌握,并且很好奇是否可以将移动设备的GPU用于此类常规处理任务,这一切都让我感到头疼。 (我记得有消息说,由于有可能使用3D游戏机进行超级计算机功率计算,因此禁止向某些国家出口3D游戏机)

如果有Flash本机扩展可以将动态生成的图像快速压缩为GPU纹理图格式,那就太好了。 我猜测有些技巧,例如可能需要在压缩过程中使用GPU才能在可接受的时间内完成它。 我的特定矢量艺术项目可以忍受像PVRTC4这样的简单调色板减少技术,这可能是吗? 在AS3中可行。

我正在开发一个项目,该项目使用Starling(允许凡人通过stage3D使用GPU的工具)在运行时从Flash向量动态生成大型背景纹理贴图,这在项目中将是一大优势。占用较少GPU内存的贴图,似乎最小化贴图贴图内存大小的唯一当前解决方案是使用预压缩的外部图像,例如Adobe ATF容器。 尽管Flash可能已经超出了其预期的使用寿命,但是我仍然可以使用Flash向量代替任何Alpha通道位图压缩方法来使分发文件小10倍。

Adobe已添加了“ Flash Player 11.4和AIR 3.4支持运行时纹理压缩”功能(但事实证明,该功能目前仅适用于台式机系统)

在本文中提到了这一点: http : //help.adobe.com/zh_CN/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d5b.html

要访问该功能,请执行以下操作:“通过调用Context3D.createTexture()方法并传递flash.display3D.Context3DTextureFormat.COMPRESSED创建纹理对象”

在这里提出了这个主题:stackoverflow.com/questions/18070813/how-to-implementation-the-runtime-compression-of-texture

Starling的制造商致力于整合Adobe运行时图像压缩工具,只是从Adobe得知它目前不适用于移动设备。 https://github.com/PrimaryFeather/Starling-Framework/issues/153

我认为对于某些人来说,创建代码以根据设备压缩PVRTC,ETC1或DXT5格式将是一个巨大的挑战,仅支持动态生成少量位图。

这是一个可能相关的“实时转码” C ++库:

code.google.com/p/crunch/

和javascript翻译:www-cs-students.stanford.edu/~eparker/files/crunch/more_info.html

我希望有实际经验的人能回答这个问题。

“低级GPU编程”并不是一件黑手艺。 您正在用C的方言编写着色器。您可以进行位掩码和整数移位以及浮点数学运算。 最困难的部分是围绕GPU如何进行并行处理以及如何将数据输入到着色器中来。 OpenGL SuperBible应该是您的起点。

以我有限的经验,GPU着色器非常擅长解压缩图像,例如,我使用着色器将Bayer RGGB数码相机像素形式转换为RGB。 它们不擅长压缩图像,因为压缩的输出是可变长度的数据流,而不是图像。 如果要尝试,我会编写一个顶点着色器,将未压缩的图像作为纹理输入,然后将输出输出到变换反馈缓冲区中。 但是我不确定转换反馈在许多移动设备上是否可用。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM