Android-使用4K GLSurfaceView启用4K活动

时间:2018-12-06 19:07:39

标签: android opengl-es glsurfaceview

我正在升级我的Android OpenGL应用程序,使其可以在新的4K手机上运行,​​并打算进行全屏活动,其逻辑和物理尺寸均为4K。但是,没有4K专用外壳,我遇到了明显的预期情况,我的活动大小仅为1080p,我希望将其提高到4K。

我遵循了涉及查询显示模式的可用文档,但值得庆幸的是,它确实将1080p和4K都枚举为可用的显示模式。下面的伪代码getBestDisplayModeId()表示此步骤,我认为此步骤可以正常运行。可以假定此功能正确返回了4K显示模式的显示模式ID。然后,我将LayoutParams中窗口的preferredDisplayModeId设置为该最佳显示模式ID,并使用setAttributes()希望将其应用于窗口。

这是在全屏活动的onCreate()期间执行的。请注意,该活动是通过Android Studio中的全屏活动向导创建的,它实际上仅包含GLSurfaceView和关联的Renderer(典型的OpenGL设置)。

我的(GL)Renderer类被临时修改(出于调试目的)以显示Toast(通过IPC),每当调用其onSurfaceChanged()重写方法时,都会显示其尺寸。 Toast始终报告其尺寸为1080p,而不是预期的4K。

如何正确地应用preferredDisplayModeId,然后获得真正符合预期4K大小的Activity / View / GLSurfaceView?

int getBestDisplayModeId()
{
    // 1. query available display modes for display 0 via DisplayManager
    // 2. return display mode corresponding to the highest resolution 
}

FullscreenActivity.onCreate()
{
    Window w = getWindow();
    WindowManager.LayoutParams p = w.getAttributes();
    p.preferredDisplayModeId = getBestDisplayModeId(); // get 4K id
    w.setAttributes(p); // set 4K resolution

    // when does the switch to 4K occur? 

    mGLView = new MyGLSurfaceView();
    setContentView(mGLView);
}


MyRenderer.onSurfaceChanged(int w, int h)
{
     // only shows 1080p resolution, never 4K
}

0 个答案:

没有答案