[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread Jeremy Slade
I'm definitely not getting anywhere close to that limit (GL_MAX_ELEMENTS_VERTICES). I'm pretty close to a root cause for at least a large percentage of the flickering events... It has something to do with my thread synchronization, but it's not obvious to me how it causes the flicker. I have

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread RichardC
Have you tried adding sleep(32) (or sleep(16), you need to experiment with the values) to your on onTouchEvent handler? There is a known issue with the GUI thread being bombarded with touch events when the user touches the screen. The effect of these events can be to starve your other threads

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread Robert Green
I just thought of something. You said your logic thread sleeps? Are you using RENDERMODE_CONTINUOUSLY? Here's a shot in the dark. I feel like your renderer isn't clearing the color buffer and isn't drawing anything, and that maybe happens when there's a certain state of the logic thread

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread Tom Gibara
I just read your post. Looks like I hit the same problem about 6 months ago. I even managed to create a mostly-reproducible test case so that I could file an issue: http://code.google.com/p/android/issues/detail?id=1956 (I can only think that it's some sort of fairness issue with monitors)

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread Jeremy Slade
I'm trying to convert from using RENDERMODE_CONTINUOUSLY to RENDERMODE_WHEN_DIRTY, to reduce overall system load -- the game view is static a fair % of the time. It hasn't been working reliably, probably for the reasons you describe in that post. My input handling is essentially the same as

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread Jeremy Slade
The issue you filed focuses on touch event handling, but I see flickering just as much with trackball events. If it is a fundamental thread scheduling issue, I guess it wouldn't matter the type or even frequency of events being generated. On Oct 5, 2:01 pm, Tom Gibara m...@tomgibara.com wrote:

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread Robert Green
Jeremy, I just gotta ask. Is there any possibility that through an optimization or any other way, there is a case where you're not clearing and not drawing sometimes when a frame is drawn? I'm just imagining a piece of code that says, Did anything change? No? Then just return. That would

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread Tom Gibara
Warning, pure speculation follows: Touching the screen generates events very rapidly, and using the trackball probably does too. Anecdotally, I encountered the bug with increasing frequency as the work done within the synchronized block lengthened (I think - it was a while ago and I can't recall

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread Jeremy Slade
I do the if anything updated check in the game logic thread. If something is changed, I post the requestRender() to the renderer. For continuous-mode rendering, that shouldn't have any effect, as the renderer will update regardless. And as I explained in the original post, it is not the full

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread Jeremy Slade
I do sleep between touch events in the UI thread, after posting the event to the logic thread. On Oct 5, 10:19 am, RichardC richard.crit...@googlemail.com wrote: Have you tried adding sleep(32) (or sleep(16), you need to experiment with the values) to your on onTouchEvent handler?  There is a

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread David Minor
I notice in your article the issue you describe seems to be synchronization fairness, i.e. Java doesn't make any fairness guarantees about serving threads in the order they are waiting (though I believe many Java implementations do). Have you tried the Semaphore class? It allows you to specify

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread David Minor
Is there any synchronization between the rendering thread and the game logic thread? On Oct 5, 7:27 am, Jeremy Slade jeremy.g.sl...@gmail.com wrote: I'm definitely not getting anywhere close to that limit (GL_MAX_ELEMENTS_VERTICES). I'm pretty close to a root cause for at least a large

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-05 Thread Robert Green
David, Thanks for the explanation. I think I just took fairness for granted and didn't realize that it was not guaranteed. I like the acquire()/ release() of semaphore. It's simple and sweet. I already do that with my world to synchronize the logic and renderer but stuck to a small

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-04 Thread Jeremy Slade
I did wonder about the OpenGL command buffer limit -- any way to verify for sure that I am hitting it? I would be surprised if that's the case, though -- it's not a real complex scene, maybe 3000-4000 textured triangles. But I'll admit to being almost a complete novice where OpenGL is

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-04 Thread RichardC
You could try glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, value); Have not tried this myself but found it in http://gpwiki.org/forums/viewtopic.php?t=8839 On Oct 4, 7:36 am, Jeremy Slade jeremy.g.sl...@gmail.com wrote: I did wonder about the OpenGL command buffer limit -- any way to verify for

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-04 Thread Robert Green
The G1 reports 65536 for that parameter. On Oct 4, 7:06 am, RichardC richard.crit...@googlemail.com wrote: You could try glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, value); Have not tried this myself but found it in http://gpwiki.org/forums/viewtopic.php?t=8839 On Oct 4, 7:36 am, Jeremy

[android-developers] Re: OpenGL ES flickering problems - double buffered?

2009-10-03 Thread RichardC
If I remember correctly OpenGL internally has a limit to the number of items it can hold in it's display list. When the list gets full it's starts drawing rather than dropping your items. To achieve this it flips the buffers and draws the remaining items on the live screen. If I am remembering