OpenGL ES 2.0-Bildschirm flackert

9

Ich stehe vor einem großen Problem. Ich benutze einen Transformer tf101 Tab mit Android 4.0.3 darauf.

Meine App verwendet eine benutzerdefinierte OpenGL ES 2.0-Oberfläche. Ich rendere mehrere Ebenen mit Texturen. Diese Texturen verändern sich ca. 20 Mal pro Sekunde und werden durch die Übergabe von Byte-Arrays aktualisiert. In bestimmten Fällen beginnt der Bildschirm jedoch zu flackern und die neuen Texturen werden nicht wiedergegeben. Zusätzliche UI-Elemente reagieren weiterhin und führen ihre Arbeit wie vorgesehen aus. Offenbar ignoriert der OpenGL-Kontext alle Befehle und reagiert nicht.

Wenn dies passiert, erscheinen ein paar Zeilen in meinem logCat:

%Vor%

gefolgt von

%Vor%

und ein paar von ihnen:

%Vor%

So erstelle ich meine texturierte Ebene:

%Vor%

und hier ist, wie ich es zeichne:

%Vor%

Der OpenGL-Renderer ruft einfach die Zeichenfunktion meiner TexturedPlane auf, indem er die mvpMatrix übergibt. Ich lösche keine Texturen, seit ich gelesen habe, dass das Android-System automatisch dafür sorgen wird.

Ich denke, es hat etwas mit der GPU gehen OOM, aber ich bin nicht sicher, da ich nichts zu den geposteten Fehlermeldungen gefunden habe.

Danke es voran!

UPDATE:

Der Rendermodus wurde auf RENDER_WHEN_DIRTY gesetzt. Nach dem Ändern in RENDERMODE_CONTINOUSLY verschwindet das Problem .. Seltsam. Da dies nur ein Workaround und keine Lösung ist, frage ich immer noch um Hilfe;)

Den Rendermode dauerhaft verlassen zu lassen ist keine Option, da dies zu viel Prozessorzeit kostet und keinen Sinn ergibt, da das Rendern nur notwendig ist, wenn neue Texturen erzeugt werden.

    
Hafnernuss 20.08.2012, 08:28
quelle

2 Antworten

3

Endlich die Lösung gefunden.

Wenn ich glFlush () nach jedem Rendering-Kreis aufrufe, funktioniert es einwandfrei. Ich rende nicht jedes Flugzeug auf einem anderen Textur-Kanal, es funktioniert soweit perfekt. Danke für die Hilfe.

    
Hafnernuss 17.09.2012, 08:23
quelle
0

Wenn Sie anrufen ..:

%Vor%

Ich denke, bindet eine bestimmte Textureinheit an die Sampler-Uniform . Aber du übergibst eine Textur name / object / handle / was auch immer (das ist keine texture unit .) Vielleicht ist es nur ein Zufall und du gibst immer nur 0 ( was ist möglicherweise der Name der Textur in m_nTextureStorage ,) was zufälligerweise der richtige / gewünschte Wert ist?

Oder vielleicht führt das zum Absturz des User-Space-Treibers.

    
nmr 28.01.2015 21:59
quelle

Tags und Links