在OpenGL ES和Android中处理大位图

3
我创建了一个地图应用,使用一张非常大的图片作为我的地图。当用户缩放到一定程度时,它会显示高分辨率瓷砖,当缩放超过50%时,会显示整个图像的低分辨率位图。在我的原始droid上它可以正常工作,但有时会因为新瓷砖被绘制到和从垃圾回收器中被清除而出现轻微的延迟。

现在我在思考如何使用OpenGL ES更好地呈现。我以前从未接触过它,但从不同的教程中所读到的东西来看,似乎我可以创建一个具有8个面的四边形,并启用剔除,这样它只会绘制当前在屏幕上可见的图像。

这样能完全消除延迟吗?在我的测试应用程序中,瓷砖是在应用程序启动时加载的,但我可以看出延迟是由于那些瓷砖第一次被绘制造成的。谢谢。

1个回答

4

我编写了一个基于OpenGL的地图视图,如果我自己说的话,它真的很棒。不幸的是,这是一个商业项目,所以我不能提供代码。但是,我可以告诉你它有1个渲染线程,8个瓦片下载线程的池以及(与你的问题最相关的)1个存储线程,用于将瓦片加载和保存到NAND闪存或SD卡中。渲染是逐个瓦片进行的,每个瓦片由2个三角形组成(在ES中没有四边形)。它仍然非常快。


很棒。你的地图分辨率有多大?我相信我的相当大,为6656 x 4880。 - jfisk
你是什么意思?它是世界规模的,有18个缩放级别... 可能大约需要1TB的数据。 - Reuben Scratton
每个瓷砖在高密度屏幕上为256x256像素,在中密度屏幕上为128x128像素。服务器允许两种尺寸。 - Reuben Scratton
我应该补充一下,你可能不需要走OpenGL的路线...只需将输入/输出从UI线程中分离出来,任何延迟都应该消失。 - Reuben Scratton
@ReubenScratton,你是如何处理触摸事件的? - howerknea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接