I got a sample project of BasicGLSurfaceView and modified it to simulate the problem that we are facing in our project.
I changed the action to use luckCanvas API for SurfaceHolder from GLSurfaceView:
public class BasicGLSurfaceViewActivity extends Activity implements OnClickListener {
If you check this code, you will see that lockCanvas is always null, and the following error is displayed inside logcat:
01-02 00:29:39.260: E/SurfaceHolder(1245): java.lang.IllegalArgumentException 01-02 00:29:39.260: E/SurfaceHolder(1245): at android.view.Surface.lockCanvasNative(Native Method) 01-02 00:29:39.260: E/SurfaceHolder(1245): at android.view.Surface.lockCanvas(Surface.java:76) 01-02 00:29:39.260: E/SurfaceHolder(1245): at android.view.SurfaceView$4.internalLockCanvas(SurfaceView.java:771) 01-02 00:29:39.260: E/SurfaceHolder(1245): at android.view.SurfaceView$4.lockCanvas(SurfaceView.java:747) 01-02 00:29:39.260: E/SurfaceHolder(1245): at com.example.android.basicglsurfaceview.BasicGLSurfaceViewActivity$1.doInBackground(BasicGLSurfaceViewActivity.java:61) 01-02 00:29:39.260: E/SurfaceHolder(1245): at com.example.android.basicglsurfaceview.BasicGLSurfaceViewActivity$1.doInBackground(BasicGLSurfaceViewActivity.java:1) 01-02 00:29:39.260: E/SurfaceHolder(1245): at android.os.AsyncTask$2.call(AsyncTask.java:264) 01-02 00:29:39.260: E/SurfaceHolder(1245): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 01-02 00:29:39.260: E/SurfaceHolder(1245): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 01-02 00:29:39.260: E/SurfaceHolder(1245): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 01-02 00:29:39.260: E/SurfaceHolder(1245): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 01-02 00:29:39.260: E/SurfaceHolder(1245): at java.lang.Thread.run(Thread.java:856)
01-02 00:29:39.260: E/SurfaceHolder(1245): java.lang.IllegalArgumentException 01-02 00:29:39.260: E/SurfaceHolder(1245): at android.view.Surface.lockCanvasNative(Native Method) 01-02 00:29:39.260: E/SurfaceHolder(1245): at android.view.Surface.lockCanvas(Surface.java:76) 01-02 00:29:39.260: E/SurfaceHolder(1245): at android.view.SurfaceView$4.internalLockCanvas(SurfaceView.java:771) 01-02 00:29:39.260: E/SurfaceHolder(1245): at android.view.SurfaceView$4.lockCanvas(SurfaceView.java:747) 01-02 00:29:39.260: E/SurfaceHolder(1245): at com.example.android.basicglsurfaceview.BasicGLSurfaceViewActivity$1.doInBackground(BasicGLSurfaceViewActivity.java:61) 01-02 00:29:39.260: E/SurfaceHolder(1245): at com.example.android.basicglsurfaceview.BasicGLSurfaceViewActivity$1.doInBackground(BasicGLSurfaceViewActivity.java:1) 01-02 00:29:39.260: E/SurfaceHolder(1245): at android.os.AsyncTask$2.call(AsyncTask.java:264) 01-02 00:29:39.260: E/SurfaceHolder(1245): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 01-02 00:29:39.260: E/SurfaceHolder(1245): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 01-02 00:29:39.260: E/SurfaceHolder(1245): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 01-02 00:29:39.260: E/SurfaceHolder(1245): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 01-02 00:29:39.260: E/SurfaceHolder(1245): at java.lang.Thread.run(Thread.java:856)
But this code works in GingerBread without any problems.
Could you explain what changes in the ice cream sandwich lead to this problem or what would be a workaround to solve this problem?
In addition, I also get the following error:
12-21 10:04:47.254: E/EglHelper(17382): eglSwapBuffers returned EGL_BAD_NATIVE_WINDOW. tid=1507 12-21 10:04:47.285: E/AndroidRuntime(17382): FATAL EXCEPTION: GLThread 1507 12-21 10:04:47.285: E/AndroidRuntime(17382): java.lang.RuntimeException: eglSwapBuffers failed: EGL_BAD_SURFACE 12-21 10:04:47.285: E/AndroidRuntime(17382): at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1178) 12-21 10:04:47.285: E/AndroidRuntime(17382): at android.opengl.GLSurfaceView$EglHelper.swap(GLSurfaceView.java:1136) 12-21 10:04:47.285: E/AndroidRuntime(17382): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1463) 12-21 10:04:47.285: E/AndroidRuntime(17382): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216)
12-21 10:04:47.254: E/EglHelper(17382): eglSwapBuffers returned EGL_BAD_NATIVE_WINDOW. tid=1507 12-21 10:04:47.285: E/AndroidRuntime(17382): FATAL EXCEPTION: GLThread 1507 12-21 10:04:47.285: E/AndroidRuntime(17382): java.lang.RuntimeException: eglSwapBuffers failed: EGL_BAD_SURFACE 12-21 10:04:47.285: E/AndroidRuntime(17382): at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1178) 12-21 10:04:47.285: E/AndroidRuntime(17382): at android.opengl.GLSurfaceView$EglHelper.swap(GLSurfaceView.java:1136) 12-21 10:04:47.285: E/AndroidRuntime(17382): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1463) 12-21 10:04:47.285: E/AndroidRuntime(17382): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216)
Thank you very much.
source share