当前位置: 代码迷 >> 综合 >> 【填坑】 GLSurfaceView surfaceCreated不回调 以及在Native中ANativeWindow_lock 获取缓存失败 返回 -22
  详细解决方案

【填坑】 GLSurfaceView surfaceCreated不回调 以及在Native中ANativeWindow_lock 获取缓存失败 返回 -22

热度:62   发布时间:2023-10-23 05:15:33.0

 

一、ANativeWindow_lock获取缓存失败返回-22。

     这里的问题是使用GlSurfaceView 与Native对接时,使用ANativeWindow_lock获取缓存失败返回-22问题,在设置addCallback的时候实现函数调用了super,由于在GlSurfaceView 的surfaceCreated、surfaceChanged、surfaceDestroyed中有线程锁的机制导致的,所以删除掉对应的super函数或者直接使用SurfaceView就可以解决问题。

        另外在Native中使用OpenGL最好使用SurfaceView而不是使用GLSurfaceView,虽然GLSurfaceView看起来好像和OpenGL更接近,但是实际上GLSurface已经对OpenGL进行了多线程封装目的是直接使用Java操作OpenGL而不是用Native。所以如果使用GLSurfaceView对接Native可能会出现自己写的Native和线程与GLSurfaceView众封装的资源冲突。

 
  相关解决方案