在InputMethod服务中使用OpenGL

时间:2014-01-27 12:09:10

标签: animation opengl-es glsurfaceview android-input-method

我正在开发一个概念键盘,我需要在键上放置动画阴影。

在对InputMethodService进行子类化时可以使用OpenGL ES吗?

如果我在GLSurfaceView中使用onCreateInputView,如果它也使用OpenGL ES,它是否会与当前的可见活动发生冲突?
在屏幕外绘图可以完全避免GLSurfaceView吗? Android是否支持在不同但并发的活动中使用多个OpenGL ES上下文?

我需要Android 2.2兼容性,因此TextureView等解决方案不是一种选择。

1 个答案:

答案 0 :(得分:1)

由于没有人认为这个问题值得回答或只是理解可能的问题,我自己就做了。

我创建了一个测试活动,该活动使用GlSurfaceView和一些简单的片段着色器和EditText。 然后我编辑了Android SDK中的 SoftKeyboard 示例,使其使用另一个简单着色器的GlSurfaceView

测试包括启动测试活动并使用更改的 SoftKeyboard 键入文本框。

在Android 4.2上,这有效,并且GlSurfaceView都会呈现。 在Android 2.3.3上,这个错误失败了:

E/SurfaceFlinger(1556): createNormalSurfaceLocked() failed (Invalid argument)
W/WindowManager(1556): OutOfResourcesException creating surface
I/WindowManager(1556): Out of memory for surface! Looking for leaks...
W/WindowManager(1556): No leaked surfaces; killing applicatons!
W/ActivityManager(1556): Killing processes Free memory at adjustment 1

我知道视频硬件(及其驱动程序)的并发使用可能会导致不兼容,但我不确定这是否是由于早期Android版本无法处理多个OpenGL ES上下文或其他内容(内存)金额,硬件,驱动程序......)

可以调查NDK。