1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

glColorPointer in Android >1.6

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Kernle 32DLL, 30.01.2010.

  1. Kernle 32DLL, 30.01.2010 #1
    Kernle 32DLL

    Kernle 32DLL Threadstarter Neuer Benutzer

    Beiträge:
    23
    Erhaltene Danke:
    0
    Registriert seit:
    06.01.2010
    Hiho,

    heute morgen ist mir beim testen meiner App etwas ziemlich seltsames aufgefallen. Ich habe bisher als SDK-Target sowie als Emulator Android 1.6 benutzt. Jetzt habe ich beides auf 2.0 (bzw auch 2.01 und 2.1) umgestellt, und plötzlich habe ich extreme Farbfehler in OpenGL. Ich habe den Fehler auf einen Befehl zurückverfolgt. Den im Threadnamen genannten "glColorPointer".

    Um Platz zu sparen, benutze ich einen Int-Buffer mit 3 Integern (Fixed Point Floats) pro Vertice. Den 4. Integer für die Alphawerte spare ich mir.

    gl.glColorPointer(3 , GL10.GL_FIXED , 0 , mColorBuffer);

    Seit Android 2.0 funktioniert das wohl nicht mehr. Füge ich im Buffer den besagten 4. Integer pro Vertice hinzu (einfach FP 1.0f), und ändere den Befehl wiefolgt ab...

    gl.glColorPointer(4 , GL10.GL_FIXED , 0 , mColorBuffer);

    ...funktioniert wieder alles super.

    Richtig mysteriös wird es dadurch das dieser "Fehler" anscheinend nur im Emulator auftritt. Auf dem Motorola Milestone funktioniert obrige Variante perfekt.

    Hat jemand eine Erklärung dafür?

    So long,
    Kernle
     
  2. swordi, 30.01.2010 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    naja wenns im milestone passt, ist es wohl ein bug im emulator

    kann durchaus sein - eventuell mal mit noch einem anderen androiden testen
     
  3. Kernle 32DLL, 31.01.2010 #3
    Kernle 32DLL

    Kernle 32DLL Threadstarter Neuer Benutzer

    Beiträge:
    23
    Erhaltene Danke:
    0
    Registriert seit:
    06.01.2010
    Ich habe gerade gemerkt das ich auf dem Milestone sowie dem HTC mit einer alten Version geteste habe (die noch 4 Ints benutzte, diese "Verbesserung" mit nur 3 Ints habe ich erst später eingebaut). Das Problem besteht also tatsächlich seit 2.0, und führt bei einem "echten" Android Gerät zum Crash der Applikation. Das liegt daran, das er versucht 4 Ints pro Vertice zu laden, obwohl per Definition nur 3 Int pro Vertice da sind. Das resultiert darin das er über den eigentlichen Speicherbereich des Intbuffers für die Farbabgaben hinausliest, was beim Emulator mit Farbfehlern und beim Milestone mit einem Crash bedankt wird.

    Der Fehler tritt bei allen Versionen > 1.6 auf, d.h. 2.0 , 2.0.1 und 2.1!
     
    Zuletzt bearbeitet: 01.02.2010

Diese Seite empfehlen