我不一定在寻找一个直接的实际解决方案,但对于现有技术是否已达到实际限制感到好奇。
我理解低级GPU编程是一种只有少数人掌握的黑色艺术,并且如果移动设备的GPU可以用于这样的一般处理任务,那就很好奇,这完全超出了我的想法。 (我记得听说过禁止向一些国家出口3D游戏机,因为有可能使用它们来做超级计算机功率计算)
如果有一个Flash原生扩展可以快速将动态生成的图像压缩为GPU纹理贴图格式,那将会很棒。我猜一些诡计,比如在压缩过程中使用GPU可能需要在可接受的时间内完成。我特定的矢量艺术项目可以容忍简单的调色板减少技术,如PVRTC4,可能是?在AS3中可行。
我正在开发一个项目,在运行时从Flash矢量动态生成大型背景纹理贴图,在使用Starling的项目中(允许凡人通过stage3D使用GPU的工具)这将是一个很大的优势,能够为了生成占用较少GPU内存的压缩纹理,似乎最小化纹理映射内存大小的唯一解决方案是使用预压缩的外部图像,如Adobe ATF容器。虽然Flash可能已超出预计的使用寿命,但我仍然可以使用闪存矢量而不是任何alpha通道位图压缩方法将分发文件缩小10倍。
Adobe已添加设施“Flash Player 11.4和AIR 3.4支持运行时纹理压缩”(但事实证明它目前仅适用于桌面系统)
在本文中提到: http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d5b.html
要访问该功能: “通过调用Context3D.createTexture()方法创建纹理对象,传递flash.display3D.Context3DTextureFormat.COMPRESSED”
这个主题是在这里提出来的: stackoverflow.com/questions/18070813/how-to-implement-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
答案 0 :(得分:0)
我希望有实际经验的人会回答这个问题。哦,好了,好了。
“低级GPU编程”并不是一种黑色艺术。您正在使用C语言编写着色器。您可以进行掩码和整数移位以及浮点数学。最困难的部分是围绕GPU如何进行并行处理以及如何将数据输入到着色器中。 OpenGL SuperBible应该是你的起点。
在我有限的经验中,GPU着色器非常擅长解压缩图像,例如我使用着色器将拜耳RGGB数码相机像素格式转换为RGB。他们不太擅长压缩图像,因为压缩的输出是一个可变长度的数据流,而不是图像。如果我正在尝试它,我会写一个顶点着色器,其中未压缩的图像作为纹理输入,输出到变换反馈缓冲区。但我不确定转换反馈是否适用于许多移动设备。
希望这有帮助。