Android,textureView 中的缓冲区
Android, Buffers in textureView
我想用TextureView画数学曲线(很多),数据源是外部设备。
在这里,我绘制的每个区域都必须在之前的区域上添加线条。
一直到使用 3 个缓冲区的 TextureView 渲染,我希望我在每时每刻都绘制缓冲区,就像源缓冲区一样,我只是要释放。
也就是说,我想要释放缓冲区中的内容,在绘制之前填充下一个缓冲区。
另一种可能性是,强制只使用一个缓冲区。
我明白了,可以获取位图和设置位图,但我想在内存中免费执行此操作。
任何人都知道这是否可能。
我会推荐两件事:
- 假设您使用 Canvas 进行渲染,请不要使用 TextureView。请改用 custom View。 TextureView 并没有真正给你带来优势,你失去了硬件加速渲染。
- 渲染到屏幕外的位图,然后将位图 blit 到视图。离屏渲染不是硬件加速的,但您可以避免重新绘制整个场景。您将不得不通过实验来确定哪个最有效。
如果您使用 OpenGL ES 进行绘图,只需将所有内容绘制到每一帧的 TextureView 中(除非您想使用 FBO)。
你可以试试Surface的lockCanvas(null)
- 使用TextureView.getSurfaceTexture获得表面纹理
- 使用 new Surface(surfaceTexture) 创建表面
- 使用 Surface.lockCanvas 或 Canvas.lockHardwareCanvas 得到一个 canvas。
然后你可以用这个canvas在textureView上画很多东西
我想用TextureView画数学曲线(很多),数据源是外部设备。
在这里,我绘制的每个区域都必须在之前的区域上添加线条。
一直到使用 3 个缓冲区的 TextureView 渲染,我希望我在每时每刻都绘制缓冲区,就像源缓冲区一样,我只是要释放。
也就是说,我想要释放缓冲区中的内容,在绘制之前填充下一个缓冲区。
另一种可能性是,强制只使用一个缓冲区。
我明白了,可以获取位图和设置位图,但我想在内存中免费执行此操作。
任何人都知道这是否可能。
我会推荐两件事:
- 假设您使用 Canvas 进行渲染,请不要使用 TextureView。请改用 custom View。 TextureView 并没有真正给你带来优势,你失去了硬件加速渲染。
- 渲染到屏幕外的位图,然后将位图 blit 到视图。离屏渲染不是硬件加速的,但您可以避免重新绘制整个场景。您将不得不通过实验来确定哪个最有效。
如果您使用 OpenGL ES 进行绘图,只需将所有内容绘制到每一帧的 TextureView 中(除非您想使用 FBO)。
你可以试试Surface的lockCanvas(null)
- 使用TextureView.getSurfaceTexture获得表面纹理
- 使用 new Surface(surfaceTexture) 创建表面
- 使用 Surface.lockCanvas 或 Canvas.lockHardwareCanvas 得到一个 canvas。
然后你可以用这个canvas在textureView上画很多东西