在监听器中暂停后,GLSurfaceView将不会调用onDrawFrame

时间:2019-08-01 07:53:39

标签: android opengl-es live-wallpaper opengl-es-3.0

我正在使用OpenGL创建动态壁纸,其中纹理来自视频GLSurfaceView。屏幕关闭时调用onPause()方法,屏幕打开时调用onResume()。但是,我注意到会产生“跳动”的第一帧,因为暂停之前显示的内容与调用onResume之后显示的内容不同(视频需要从头开始)。

除了上面提到的内容外,我还尝试使用EventListener。基本上,在暂停表面之前,我将重新启动视频,画一个框架,然后调用侦听器。然后,表面将被引擎暂停。但是,即使调用onResume(onDrawFrame并未称为AT ALL),也不会更新表面

屏幕关闭时称为

//this function is inside the renderer class
void onPause() {
        mDoPause = true;
        if (isMediaPlayerValid()) {
            mMediaPlayer.seekTo(0);
            mMediaPlayer.pause();
        }
    }
@Override
public void onDrawFrame(GL10 gl) {
    //draw the frame

    if (mDoPause) {
        mDoPause = false;
        Log.d(TAG, "onDrawFrame# call pauseProcessDone");
        mVideoListener.pauseProcessDone();
    }
}

这是我的听众(在墙纸引擎中)

@Override
public void pauseProcessDone() {
   Log.d(TAG, "pauseProcessDone#");
   mSurface.releaseMP();
   mSurface.createMP();
   mSurface.onPause();
}

我确实注意到,如果未在侦听器内部调用onPause,则表面将恢复正常,但跳动的帧仍在其中。

我想知道为什么会这样,或者也欢迎采用任何其他解决方法来解决此问题 任何帮助将不胜感激!

0 个答案:

没有答案