OpenGL ES上下文在解锁时被压扁 - 从横向到纵向

时间:2015-02-20 11:34:31

标签: android opengl-es screen-orientation android-context unlock

在仅在纵向模式下运行的游戏中,我尝试通过清单强制传感器:

    android:configChanges="locale|orientation|keyboardHidden|screenSize|screenLayout"
    android:screenOrientation="sensorPortrait"

但是,当我以纵向方式锁定设备时,将其旋转为横向,然后将其解锁:

landscape

这是它在肖像中的样子:

portrait

我认为发生这种情况是因为onSurfaceChanged被调用了两次,但AFAIK没有我能真正做到的。

在我使用的渲染器中:

public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    if (b_GameRunning) {
        // mark the fact that textures need reloading
        b_SurfaceWasChanged = true; 
    }
}

public void onSurfaceChanged(GL10 gl, int w, int h) {
    gl.glMatrixMode( GL_PROJECTION );
    gl.glLoadIdentity();
    n_width = w;
    n_height = h;
    gl.glOrthof(0.f, (float)m_width, (float)m_height, 0.f, -1.f, 1.0f);
}

public void onDrawFrame(GL10 gl) {
    if (m_bGameRunning) {
        if (b_SurfaceWasChanged) {
            b_SurfaceWasChanged = false;
            ReloadTextures();
        }
        GameRender();
    }
}

1 个答案:

答案 0 :(得分:1)

非常感谢harism

我将onSurfaceChanged更改为:

public void onSurfaceChanged(GL10 gl, int w, int h) {
    n_width = w;
    n_height = h;
    gl.glViewport(0, 0, n_width, n_height);
    gl.glMatrixMode( GL_PROJECTION );
    gl.glLoadIdentity();
    gl.glOrthof(0.f, (float)m_width, (float)m_height, 0.f, -1.f, 1.0f);
}