- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用 eglCreateWindowSurface()
绘制后,我无法将 Surface 锁定到 EGL(使用 Surface.lockCanvas(null)
)即使我用 Surface.unlockCanvasAndPost()
发布了它
错误代码:
EGLNativeWindowType 0x61dff830 already connected to another API
eglCreateWindowSurface:414 error 3003 (EGL_BAD_ALLOC)
我不需要在表面上保留 Canvas 完成的绘图,我只需要能够更新 SurfaceView
浮出水面并展示它
如果我在使用 EGL 之前不绘制到 Surface,它会按预期工作,并且如果我只输入:
Canvas c = mSurface.lockCanvas(null);
c.drawColor(Color.RED);
mSurface.unlockCanvasAndPost(c);
...我收到这个错误
这是预期的行为吗?这发生在真实设备 4.1.2 和 AVD API25 上
有没有办法从 Canvas 绘图中完全解锁 Surface(必要时甚至使用原生)?
反之亦然(EGL 到 Canvas)
与 TextureView
相同的行为
解决方法:
如果在我的TextureView
我销毁本地 Surface 对象并从相同的 SurfaceTexture
重新创建它由以前的 Surface 拥有 new Surface(mOldSurfaceTexture)
,错误不会出现。
最佳答案
如官方文档所述,这是预期的行为
When you lock a Surface for Canvas access, the "CPU renderer" connects to the producer side of the BufferQueue and does not disconnect until the Surface is destroyed. Most other producers (like GLES) can be disconnected and reconnected to a Surface, but the Canvas-based "CPU renderer" cannot. This means you can't draw on a surface with GLES or send it frames from a video decoder if you've ever locked it for a Canvas.
https://source.android.com/devices/graphics/arch-sh.html#canvas
所以唯一的方法是使用我在问题中发布的解决方法
---------------- 编辑:----------------
我找到了另一种方法:如果您需要使用 Canvas
进行绘图,则必须创建一个 EGL/OpenGL
上下文,以及一个 Canvas
来自 Bitmap
(您必须创建与表面尺寸相同的位图,所以你可以绘制到这个 Canvas 上,将位图加载为 opengl 纹理并从 OpenGL 中绘制
关于android - 将 SurfaceView 表面从 Canvas 切换到 OpenGL 后的 EGL_BAD_ALLOC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42446442/
我的程序在两个 Activity 之间切换,每个 Activity 都会膨胀一个使用 VBO 的派生 GLSurfaceView。 在两个Activity之间来回切换几次后,程序崩溃并抛出如下异常:
我不断收到此错误报告: Fatal Exception: java.lang.IllegalStateException eglMakeCurrent failed EGL_BAD_ALLOC and
我在 Google Play 上有一个用于倒数数字和字母的应用程序。在这个应用程序中,我有以下 Activity : 谷歌登录 文件 admob 服务 我使用 Google Analytics(分析)
我正在使用 OpenGL ES 2.0 和 Android NDK r8b。我有一个用于工作线程的共享上下文。当我尝试使用 eglMakeCurrent 将共享上下文绑定(bind)到工作线程时,我收
我正在使用抛出异常的 And 引擎开发游戏。其实我不知道发生异常的地方。市场上多次报道。 java.lang.RuntimeException: eglSwapBuffers failed:
在 Samsung Galaxy S6 上安装后第一次打开应用程序时出现 eglCreateWindowSurface GL Error EGL_BAD_ALLOC 并且相同的代码在其他设备上工作正常
我有一个处理图像的动态壁纸应用。 我在 Play 商店(但在 fabric.io 中没有)收到一些崩溃报告,其中包含此堆栈跟踪: *** *** *** *** *** *** *** *** ***
在使用 eglCreateWindowSurface() 绘制后,我无法将 Surface 锁定到 EGL(使用 Surface.lockCanvas(null))即使我用 Surface.unloc
在 Nexus 10 更新到 Android 4.4 后,我的应用程序中出现 EGL 错误:EGL_BAD_ALLOC。它会导致硬件加速关闭,后来由于以下错误而完全阻止应用程序。 为了导致错误,我使用
我是一名优秀的程序员,十分优秀!