当前位置: 首页 > 知识库问答 >
问题:

SurfaceTexture updateTexImage到shared 2 EGLContexts-Android 4.4上的问题

华涵意
2023-03-14

我已经采用了我也想在屏幕上呈现预览图像的方式的代码。因此,我得到了一个GLTextureView这样的东西,它有自己的EGLContext。然后,当我为编码器呈现创建EGLContext时,将此上下文用作共享EGLContext:

mEGLContext = EGL14.eglCreateContext(mEGLDisplay, configs[0], sharedContext == null ? EGL14.EGL_NO_CONTEXT : sharedContext,
                attrib_list, 0);

在我的渲染循环中,我遵循了法登的提示。对于每一帧,我都html" target="_blank">执行以下操作:

  1. 首先,我使用waitNewImage()等待新图像到达SurfaceTexture上
  2. 然后设置GLTExtuReview的当前上下文并在其上呈现帧
  3. 之后,我将编码器上下文设置为当前,并在其上呈现帧
mFrameWatcher.awaitNewImage();
mSurfaceTexture.updateTexImage();
_textureView.getEGLManager().makeCurrent();
_textureView.requestRender();
mInputSurface.makeCurrent();
mInputSurface.requestRender();

我玩了一会--最后我解决了这个问题,当我切换它们的时候,通过分离并重新连接到不同的上下文中的SurfaceTexture。这看起来是这样的:

mFrameWatcher.awaitNewImage();
mSurfaceTexture.updateTexImage();
_textureView.getEGLManager().makeCurrent();
_textureView.requestRender();
mSurfaceTexture.detachFromGLContext();
mInputSurface.makeCurrent();
mSurfaceTexture.attachToGLContext(_textureViewRenderer.getTextureId());
mInputSurface.requestRender();
mSurfaceTexture.detachFromGLContext();
_textureView.getEGLManager().makeCurrent();
mSurfaceTexture.attachToGLContext(_textureViewRenderer.getTextureId());

我现在的问题是:这是正确的做法吗?老实说,当我使用共享上下文时,我认为重新连接表面结构是不必要的。而且重新连接需要相当长的时间...每帧3-6毫秒,窥视时间为12毫秒,可以更好地用于渲染。我是不是理解错了什么?为什么它在Nexus4和4.3上就像一个魅力一样工作,而不需要重新连接SurfaceTexture?

共有1个答案

东深
2023-03-14

看来这其实是与这个问题相同的问题。我把一些细节放在那里;简而言之,您应该能够通过解绑和重新绑定纹理来修复它,这实质上就是您使用尴尬的附加/分离序列所做的事情。

在我的代码中,我可以通过更改以下内容来修复它:

GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mTextureID);

对此:

GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mTextureID);
 类似资料:
  • 本文向大家介绍Android4.4 WebAPI实现拍照上传功能,包括了Android4.4 WebAPI实现拍照上传功能的使用技巧和注意事项,需要的朋友参考一下 网上有很多关于拍照上传的实现方法,如果用新版本android去运行有可能会发现根本实现不了。主要原因是android从4.4版本开始通过intent.ACTION_GET_CONTENT打开选择器后,getData()返回的URI没有包

  • 我正在尝试仅从我的应用程序发送彩信。在android开发者教程的帮助下,我把它变成了默认的消息应用(http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html). 我的清单: BroadcastReceiver监听传入的SMS消息: 监听传入彩信的BroadcastRecenc

  • 使用 Hangfire.HttpJob 版本需 >= 3.0.2 1. 添加依赖 TimeZoneConverter 到您的项目中 2.在 Startup.cs 中配置 Hangfire.HttpJob 时指定时区参数 参考代码:https://github.com/yuzd/Hangfire.HttpJob/blob/master/Test/TestSqlserver/Startup.cs#L6

  • 这个FAQ的最新版本总是可以从Apache主站点得到,位于<http://httpd.apache.org/docs/2.2/faq/> 如果你的问题在这里没有找到答案,你也可以看看Apache 1.3 FAQ ,看你的问题是否在那里有了答案。 主题 背景 关于 Apache HTTP Server 的背景知识。 支持 我遇到问题该怎么办? 错误信息 这些错误信息是什么意思? 背景 什么是Apac

  • 本文向大家介绍mysql 5.7.9 winx64在windows上安装遇到的问题,包括了mysql 5.7.9 winx64在windows上安装遇到的问题的使用技巧和注意事项,需要的朋友参考一下 mysql5.7.9版本以上在windwos上安装时会遇到无法启动但是没有任何报错的问题,那是因为5.7.9以上的版本在MySQL目录下会缺少data目录: Data目录下存储的是一些表文件,用来描述

  • 我有一些文件是从Evernote API接收的(通过),并使用以下代码写入Google Cloud Storage: 即使对于某些类型的文档,它仍然有效。但GCS在日志中记录了某些文件: 和 这些错误似乎没有任何模式。它发生在文档、声音、图片等任何类型的文档中,其中一些文档类型有效,而另一些文档类型无效。这与大小无关(因为一些小文档和一些大文档都有效)。 有什么想法吗? 这是完整的堆栈跟踪,尽管我