首页 文章

GLConsumer已经附加到新SurfaceTexture的上下文中

提问于
浏览
1

手动创建时, SurfaceTexture 默认是否附加到 GLContext ?如果是这样,怎么样?

这是一个例子,我正在尝试创建自己的 SurfaceTexture 并将其设置为 TextureView

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = (TextView) findViewById(R.id.version);
        TextureView textureView = (TextureView) findViewById(R.id.texture);

        int[] arr = new int[1];
        GLES20.glGenTextures(1, arr, 0);
        int texName = arr[1];

        SurfaceTexture surfaceTexture = new SurfaceTexture(texName);
        textureView.setSurfaceTexture(surfaceTexture);
    }
}

我经常得到:

E / GLConsumer:[unnamed-29058-0] attachToContext:GLConsumer已附加到上下文

例外:

E / AndroidRuntime:FATAL EXCEPTION:main进程:com.example.dkarmazin.openglesversion,PID:29058 java.lang.RuntimeException:在android.graphics.SurfaceTexture.attachToGLContext(SurfaceTexture.java:)中attachToGLContext(有关详细信息,请参阅logcat)期间出错 . 215)在Android.view.HardwareRenderer的android.view.GLES20TextureLayer.setSurfaceTexture(GLES20TextureLayer.java:86)上,在android.view.TextureView.getHardwareLayer(TextureView.java:401)处的Gl20Renderer.setSurfaceTexture(HardwareRenderer.java:2228) android.view.View.View.View.View中的android.view.View.View.View(View.java:14297)android.view.View.getDisplayList(View.java:13519)的android.view.View.getDisplayList(View.java:13443) .drawChild(ViewGroup.java:3115)位于android.view.View.DisplayList(View.java:13572)的android.view.View.DisplayList(View.java:13572)上的android.view.ViewGroup.dispatchDraw(ViewGroup.java:2952) . java:13519)在android.view.View.View(View.java:14297)的android.view.View.St下的android.view.View.draw((View.java:3115)) .dispatchDraw(ViewGroup.java:2952)位于android.view.View.View.St.Letplay(View.java:14583),位于android.view.FreeLayout.draw(FrameLayout.java:472),位于android.view.View.getDisplayList(查看 . java:13477)在android.view.View.View.Go(View.java:13297)的android.view.View.View.draw((View.java:132919)上的android.view.View.getDisplayList(View.java:13519) android.view.View.DovatchDraw(ViewGroup.java:2952)在android.view.View.draw(View.java:14583)android.support.v7.widget.ActionBarOverlayLayout.draw(ActionBarOverlayLayout.java:444)在android上.view.View.getDisplayList(View.java:13477)位于android.view.View.View.View(View.java:142919)的android.view.View.View.View(View.java:142919)上的android.view.View.View. drawChild(ViewGroup.java:3115)位于android.view.View.DisplayList(View.java:13572)的android.view.View.DisplayList(View.java:13572)上的android.view.ViewGroup.dispatchDraw(ViewGroup.java:2952) :13519)在android.view.View.draw.Still上的android.view.View.draw(View.java:14297)(ViewGroup.java: 3115)在Android.view.View.DisplayList(View.java:13519)的android.view.View.DisplayList(View.java:13572)的android.view.ViewGroup.dispatchDraw(ViewGroup.java:2952) . view.View.draw(View.java:14297)位于android.view.View.Go.((ViewGroup.java:3115),位于android.view.j. (View.java:14583)在android.view上的com.android.internal.policy.impl.PhoneWindow $ DecorView.draw(PhoneWindow.java:2326)的android.widget.FrameLayout.draw(FrameLayout.java:472) . 在Android.view.HardwareRenderer的android.view.HardwareRenderer $ GlRenderer.buildDisplayList(HardwareRenderer.java:1577)的android.view.View.getDisplayList(View.java:13519)上查看.getDisplayList(View.java:13477)$ GlRenderer .draw(HardwareRenderer.java:1449)位于android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2402)的android.view.ViewRootImpl.draw(ViewRootImpl.java:2402)上的android.view.ViewRootImpl.draw(ViewRootImpl.java:2430) java:2019)在android.view . View.RootImpl.doTraversal(ViewRootImpl.java:1079)位于android.view.ChoreImpl $ TraversalRunnable.run(ViewRootImpl.java:5948),位于android.view.Choreographer $ CallbackRecord.run(Choreographer.java:761),位于android.view.Choreographer .doCallbacks(Choreographer.java:574)在Android.view.Handler.handleCallback的android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:747)的android.view.Choreographer.doFrame(Choreographer.java:544) Handler.java:733)android.app.Handler.dispatchMessage(Handler.java:95)android.app.Looper.loop(Looper.java:136)android.app.ActivityThread.main(ActivityThread.java:5102) )at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:515)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java) :785)at dalvik.system.NativeStart.main(Native Method)中的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)

在新创建的 SurfaceTexture 对象上调用 detachFromGLContext 解决了这个问题,但这是相当混乱的,因为我可以确认在这种情况下永远不会调用 attachToGLContext .

附:我知道 TextureView 默认拥有自己的 SurfaceTexture . 在这种情况下,我必须使用从 SurfaceTexture 扩展的自己的实现 .

2 回答

相关问题