GLSurfaceView.Renderer可以在onDrawFrame()中多次交换缓冲区吗?

DJP*_*JPJ 4 android

在我的openGL游戏中,我通常使用onDrawFrame()中的GLSurfaceView.Renderer类来绘制场景.但是,当我显示加载屏幕时,我想在加载每个数据项后强制屏幕绘制,以便可以显示加载栏.

是否有可能以某种方式在绘制调用期间强制执行bufferswap?我唯一的选择是在多个框架上错开装载,这意味着需要进行大量的返工.

我想我想要调用的是eglSwapBuffers(),但我找不到从GLSurfaceView或GLSurfaceView.Renderer访问egl上下文的方法.

感谢您的时间.

Aid*_*dan 5

您还可以将此方法添加到GLSurfaceView.Renderer类:

import javax.microedition.khronos.egl.EGL10;
import javax.microedition.khronos.egl.EGLDisplay;
import javax.microedition.khronos.egl.EGLSurface;

public void swapBuffers()
{
    EGL10 curEgl = (EGL10)EGLContext.getEGL();

    EGLDisplay curDisplay = curEgl.eglGetCurrentDisplay();
    if (curDisplay == EGL10.EGL_NO_DISPLAY) { Log.e("myApp","No default display"); return; }    

    EGLSurface curSurface = curEgl.eglGetCurrentSurface(EGL10.EGL_DRAW);
    if (curSurface == EGL10.EGL_NO_SURFACE) { Log.e("myApp","No current surface"); return; }

    curEgl.eglSwapBuffers(curDisplay, curSurface);
}
Run Code Online (Sandbox Code Playgroud)

与OpenUserX03的答案大致相同,只是在Java中.


XGo*_*het 4

不,您不能(或不应该)在渲染器的 onDraw 方法中强制交换缓冲区。

您应该做的是在单独的线程中加载数据。您的 onDraw 方法仍会定期调用,这将让您询问加载线程加载了多少项目,以相应地显示进度条/消息。