Wil*_*ale 22 android opengl-es google-tv
当Android 4.0(冰淇淋三明治)发布时,新的视图被引入到sdk中.这个视图是TextureView.在文档中,它表示TextureView可用于显示OpenGL场景的内容.
当您查找如何执行此操作时,您将找到一个示例链接.
https://groups.google.com/forum/?fromgroups=#!topic/android-developers/U5RXFGpAHPE
但是我想用TextureView替换GLSurfaceView,并保持我的其余代码相同,并且只是接受TextureView的优点.
Wil*_*ale 33
回答:
1)从GLSurfaceView的源代码开始,将文件命名为GLTextureView.java
2)将标题更改为: GLTextureView extends TextureView实现SurfaceTextureListener
3)将构造函数重命名为GLTextureView.从init()方法中删除代码.
4)组织进口.始终选择非GLSurfaceView选项.
5)找到SurfaceHolder的每个实例并将其更改为SurfaceTexture
6)为SurfaceTextureListener添加未实现的方法,每个方法应如下所示:
7)应该有一行调用getHolder(),将其更改为getSurfaceTexture()
8)在init()方法中,输入以下行 setSurfaceTextureListener(this)
然后添加一个OnLayoutChangeListener并打电话surfaceChanged(getSurfaceTexture(), 0, right - left, bottom - top).
有了它,你应该能够用你的GLSurfaceView代码替换它GLTextureView并从中获益GLTextureView.还要确保您的应用支持硬件加速,并且您的渲染器扩展GLTextureView.Renderer.
Rob*_*ies 13
辉煌!
Goodale先生精彩回答的一个小小的补充:
我认为,GLSurfaceView的4.1.1版本似乎已被修改以避免在零宽度/高度表面上渲染.并且在onSurfaceTextureAvailable之后,似乎没有一个免费的onSurfaceTextureChanged通知.
如果从4.1.1源开始,onSurfaceTextureAvailable需要阅读如下:
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width,
int height)
{
this.surfaceCreated(surface);
this.surfaceChanged(surface, 0,width,height);
}
Run Code Online (Sandbox Code Playgroud)
除此之外,我在大约五分钟的时间里跑起来!谢谢.
感谢Goodale先生和戴维斯先生的回答!
我还有一些关于将GLSurfaceView转换为GLTextureView的额外信息.第一个是关于渲染模式.如上所述,只需删除onSurfaceTextureUpdated中的requestRender()调用.
第二个是关于
mGLESVersion = SystemProperties.getInt("ro.opengles.version",ConfigurationInfo.GL_ES_VERSION_UNDEFINED); 只需使用link,但是你需要Context来做context.getClassLoader(); 您可以从init()调用getInt的反射版本,并将结果保存在静态字段sGLESVersion = getInt(getContext(),"ro.opengles.version",ConfigurationInfo.GL_ES_VERSION_UNDEFINED);
最后一个最简单的变化是关于EGLLogWrapper.getErrorString(错误); 只需从EGLLogWrapper源复制getErrorString即可.
在GitHub Gist上查看我的转换GLSurfaceView到GLTextureView的最终版本
| 归档时间: |
|
| 查看次数: |
12330 次 |
| 最近记录: |