2010-11-20 17 views
3

Ich erstellte eine Karten-App, die ein sehr großes Bild als meine Karte verwendet. Es zeigt Kacheln mit hoher Auflösung, wenn der Benutzer zu einem gewissen Grad vergrößert, und eine Bitmap mit niedriger Auflösung des gesamten Bildes, wenn nach 50% herausgezoomt wurde. Es funktioniert OK, auf meinem ursprünglichen Droiden kann ich manchmal eine sehr leichte Verzögerung sehen, weil die neuen Kacheln in und aus dem Müllsammler gezogen werden.Umgang mit großen Bitmaps in OpenGL ES und Android

Ich denke jetzt darüber nach, wie OpenGL ES eine bessere Möglichkeit zum Rendern wäre. Ich habe es vorher nie berührt, aber nach dem, was ich in verschiedenen Turoials gelesen habe, scheint es, als könnte ich ein Quad mit 8 Faces erstellen und Culling aktivieren, damit es nur die Bilder zeichnet, die gerade auf dem Bildschirm sichtbar sind.

Würde dies die Verzögerung vollständig beseitigen? In meiner Test-App habe ich jetzt Kacheln, die beim App-Start geladen werden, aber ich kann sagen, dass die Verzögerung darauf zurückzuführen ist, dass diese Kacheln zum ersten Mal gezeichnet wurden. Vielen Dank.

Antwort

4

Ich habe eine OpenGL-basierte Kartenansicht geschrieben und es ist verdammt großartig, wenn ich das selbst sage. Leider ist es für ein kommerzielles Projekt, also kann ich keinen Code anbieten. Ich kann Ihnen jedoch sagen, dass es 1 Rendering-Thread, einen Pool von 8 Fliesendownload-Threads und (am wichtigsten für Ihre Frage) einen Speicher-Thread hat, der Kacheln auf den NAND-Flash oder die SD-Karte lädt und speichert. Das Rendern erfolgt jeweils eine Kachel, wobei jede Kachel aus zwei Dreiecken besteht (in ES gibt es keine Quads). Es ist immer noch blitzschnell.

+0

genial. Wie groß war die Auflösung deiner Karte? Meiner ist ziemlich groß, 6656 von 4880, glaube ich. – jfisk

+0

Wie meinst du das? Es ist weltweit in 18 Zoomstufen ... prob um die Größenordnung von 1 TB Daten. –

+0

Jede Kachel war 256x256 Pixel auf HDPI-Bildschirmen, für MDPI war es 128x128. Der Server erlaubt beides. –