Hello,
I tried asking this same question on Google groups, android developers section, but no one seems want to help me.
sSo I have this problem with galaxy S3 and OpenGL ES 1.0.
Here's little backstory:
I had LG P350 (600MHZ CPU, Adreno 200 GPU, 2.8 inch screen) for 2 years or so. And I was developing this little game framework which used OpenGL. My old LG handled it pretty well, good framerates, no lags, everything worked as expected. But few days ago I decided that I should get new phone, so I ordered Galaxy S3.
So after I got the phone (Android version 4.1.2) I installed my 2 games which used my framework and noticed that there is a delay between touching / moving finger on the screen and things appearing on screen. First I thought that this could be problem of my input handling system, so I did something like this to check if that was true:
inputSystem.update();
float x = inputSystem.getTouchX();
float y = inputSystem.geTouchY();
Log.d("Touch: ", "X: " + x + " Y: " + y);
Essentially I just touched my screen, and looked at the logcat to see if there is any delay in receiving data. And there was absolutely no delay! As soon as I touched the screen, coordinates on logcat appeared.
Then I thought to myself... OK, maybe my rendering system is messed up. To test if that was true I did exactly this:
public void onDrawFrame(GL10 gl){
FloatBuffer floatBuffer = buffer.asFloatBuffer();
public void tempDraw(GL10 gl){
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glViewport(0,0,1280,720);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, 20, 14, 0, -1, 1);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(2,GL10.GL_FLOAT,0,floatBuffer);
inputSystem.update();
float x = inputSystem.getLastTouchEvent().position.x;
float y = inputSystem.getLastTouchEvent().position.y;
Log.d("Touch: ", "X: " + x + " Y: " + y);
gl.glTranslatef(x,y,0);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 6);
}
This is as simple as it could be, I didn't use my render system for rendering, I just used this little piece of code which couldn't get any simpler. It just draws little rectangle on screen in the position of last touch event.
And guess what! This didn't do the trick either! It still has delay! Also in developer options I enabled "Show touches" function, so I could see in real time how much delay there is. After I scroll my finger through screen, I immediately can see output on logcat, but square on the screen still has huge delay.
Here's the video showing the delay: GLSurfaceView lag/delay on Galaxy S3
You can see that "Show touches" android function showing the white dot on screen, this is where I WANT my square to be, but my square just follows it with delay.
Just for comparison I will launch painting application which paint on EXACTLY the white dot. This is the performance I want in my game.
It can't be the problem of my phone, because other games and apps that I downloaded from google play doesn't have this lag/delay problem.
So can someone help me out please? What am I missing? Have any of you encountered this problem before?