Answer:
1) Start with the source code of the GLSurfaceView, name the file GLTextureView.java
2) Change the header to:
GLTextureView extends TextureView implements SurfaceTextureListener
3) Rename constructors to GLTextureView. Remove code from init() method.
4) Organize imports. Always choose the non-GLSurfaceView option.
5) Find every instance of SurfaceHolder and change it to a SurfaceTexture
6) Add Unimplemented methods for the SurfaceTextureListener, each method should be as follows:
- onSurfaceTextureAvailable - surfaceCreated(surface)
- onSurfaceTextureDestroyed - surfaceDestroyed(surface), (return true)
- onSurfaceTextureSizeChanged - surfaceChanged(surface, 0, width, height)
- onSurfaceTextureUpdated - requestRender()
7) There should be one line where there is a call being made to getHolder(), change that to getSurfaceTexture()
8) In the init() method, put the following line setSurfaceTextureListener(this)
Then add an OnLayoutChangeListener
and have it call surfaceChanged(getSurfaceTexture(), 0, right - left, bottom - top)
.
With that you should be able to replace your GLSurfaceView code with GLTextureView
and receive the benefits of GLTextureView
. Also make sure your app supports Hardware Acceleration and that your Renderer extends GLTextureView
.Renderer.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…