eglCreateWindowSurface设置X位置

时间:2018-05-04 08:29:48

标签: android opengl-es opengl-es-2.0 surface egl

我使用opengles在Android上创建自己的显示器。 我有一台显示器,我想在其上显示两个表面(第一个是Android,第二个是我自己的显示器)。

注意:显示器分辨率为(1920x1080)

为此我可以在左侧(1280x1080)为我的Android系统用户界面设置自定义尺寸。所以我现在在右边(840x1080)有一个自由空间到其他显示器。 我能够用这个分辨率(840x1080)创建一个绿色表面,问题是它在左边,所以它隐藏了Android系统。我想在其上应用1280像素的翻译,以便它在右侧。

这是我的代码:

const EGLint attribs[] = {
            EGL_RED_SIZE,   8,
            EGL_GREEN_SIZE, 8,
            EGL_BLUE_SIZE,  8,
            EGL_DEPTH_SIZE, 0,
            EGL_NONE
    };
    EGLint w, h;
    EGLint numConfigs;
    EGLConfig config;
    EGLSurface surface;
    EGLContext context;

    EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);

    eglInitialize(display, NULL, NULL);
    eglChooseConfig(display, attribs, &config, 1, &numConfigs);
    if ((surface = eglCreateWindowSurface(display, config, s.get(), NULL)) == EGL_NO_SURFACE) {
    ALOGD("initSurface() eglCreateWindowSurface failed");
    return;
    }
    context = eglCreateContext(display, config, NULL, NULL);
    eglQuerySurface(display, surface, EGL_WIDTH, &w);
    eglQuerySurface(display, surface, EGL_HEIGHT, &h);
    ALOGD("Surface size is w = %d h = %d", w, h);

    if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) {
    ALOGD("initSurface() eglMakeCurrent failed");
        return ;
    }

    glShadeModel(GL_FLAT);
    glDisable(GL_DITHER);
    glDisable(GL_SCISSOR_TEST);
    glClearColor(0, 1, 0, 1);
    glClear(GL_COLOR_BUFFER_BIT);
    eglSwapBuffers(display, surface);

使用opengles应用此翻译需要什么功能?

1 个答案:

答案 0 :(得分:0)

我认为这不可能与EGL本身有关; EGL只创建可供OpenGL ES和显示子系统使用的表面。

实际上创建可以放置该表面的窗口是主机操作系统的本机操作;它与EGL无关,并且由每个平台上的特定于操作系统的代码处理。

Android的设计并不是传统意义上的“windows”,所以我甚至不确定使用Android API是否可行。这里有专有的解决方案 - 比如三星的分屏模式 - 但我认为除了作为窗口调整大小事件之外,它们不会暴露给应用程序API。