首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从GLSurfaceView转换为TextureView (通过GLTextureView)

从GLSurfaceView转换为TextureView (通过GLTextureView)
EN

Stack Overflow用户
提问于 2012-08-22 03:08:05
回答 4查看 14.3K关注 0票数 24

当Android 4.0 (Ice Cream三明治)发布时,sdk引入了一个新的视图。此视图是TextureView。在文档中,它说TextureView可用于显示OpenGL场景的内容。

当你查看如何做到这一点时,你会发现这个链接指向一个例子。

https://groups.google.com/forum/?fromgroups=#!topic/android-developers/U5RXFGpAHPE

然而,我只想用TextureView替换GLSurfaceView,并保持其余代码不变,只获得TextureView的优点。

EN

回答 4

Stack Overflow用户

发布于 2012-08-22 03:08:05

答案:

1)从GLSurfaceView的源代码开始,将文件命名为GLTextureView.java

2)将标题更改为:GLTextureView extends implements

3)将构造函数重命名为GLTextureView。从init()方法中删除代码。

4)组织导入。始终选择非GLSurfaceView选项。

5)找到SurfaceHolder的每个实例并将其更改为SurfaceTexture

6)为SurfaceTextureListener添加未实现的方法,每个方法如下:

  • onSurfaceTextureAvailable - surfaceCreated(surface)
  • onSurfaceTextureDestroyed -surfaceDestroyed(表面),(return
    • onSurfaceTextureAvailable-surfaceDestroyed(表面,0,宽度,height)
    • onSurfaceTextureUpdated - requestRender()

7)应该有一行对getHolder()进行调用,将其更改为getSurfaceTexture()

8)在init()方法中,放入以下行setSurfaceTextureListener(this)

然后添加一个OnLayoutChangeListener并让它调用surfaceChanged(getSurfaceTexture(), 0, right - left, bottom - top)

这样,您就可以用GLTextureView替换您的GLSurfaceView代码,并获得GLTextureView的好处。此外,请确保您的应用程序支持硬件加速,并且渲染器扩展了GLTextureView.Renderer。

票数 36
EN

Stack Overflow用户

发布于 2012-08-23 09:04:02

非常出色!

除了古代尔先生精彩的回答之外,还有一个小补充:

我认为,GLSurfaceView的4.1.1版本似乎已经被修改,以避免在零宽度/高度的表面上渲染。而且在onSurfaceTextureAvailable之后似乎不会立即有一个无端的onSurfaceTextureChanged通知。

如果您从4.1.1源代码开始,onSurfaceTextureAvailable需要如下所示:

代码语言:javascript
复制
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width,
        int height) 
{
    this.surfaceCreated(surface);
    this.surfaceChanged(surface, 0,width,height);
}

除此之外,我在大约5分钟内就启动并运行了!谢谢。

票数 14
EN

Stack Overflow用户

发布于 2014-12-12 00:52:47

感谢Goodale先生和Davies先生的回答!

我有一些额外的关于转换GLSurfaceView到GLTextureView。第一个是关于渲染模式。如前所述,there只需删除onSurfaceTextureUpdated中的requestRender()调用即可。

第二个是关于

mGLESVersion = SystemProperties.getInt("ro.opengles.version",ConfigurationInfo.GL_ES_VERSION_UNDEFINED);只使用link,做context.getClassLoader()需要上下文;可以从init()调用反射版本的getInt,将结果保存在静态字段sGLESVersion = getInt(getContext(),"ro.opengles.version",ConfigurationInfo.GL_ES_VERSION_UNDEFINED);

最后一个最简单的更改是关于EGLLogWrapper.getErrorString(错误);只需从EGLLogWrapper源代码复制getErrorString即可。

请参阅我在GitHub Gist上将GLSurfaceView转换为GLTextureView的最终版本

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12061419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档