eglCreateWindowSurface устанавливает позицию X - PullRequest
0 голосов
/ 04 мая 2018

Я использую opengles для создания собственного дисплея на Android. У меня есть один монитор, и я хочу отобразить на нем две поверхности (первая - это Android, а вторая - мой собственный дисплей).

Примечание. Разрешение монитора (1920x1080)

.

Для этого я смог установить нестандартный размер для моего системного интерфейса Android слева (1280x1080). Так что теперь у меня есть свободное место справа (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);

Какая функция мне нужна, чтобы применить этот перевод с открытыми окнами?

1 Ответ

0 голосов
/ 04 мая 2018

Я не думаю, что это возможно с самим EGL; EGL просто создает поверхности, которые могут использоваться как OpenGL ES, так и подсистемой отображения.

На самом деле создание окна, в которое может быть помещена эта поверхность, является собственной операцией операционной системы хоста; на самом деле он не имеет ничего общего с EGL и обрабатывается специфичным для ОС кодом на каждой платформе.

Android на самом деле не имеет «окон» в традиционном смысле, поэтому я даже не уверен, возможно ли это с помощью API Android. Здесь есть проприетарные решения, такие как режим разделения экрана Samsung, но я не думаю, что они подвергаются воздействию API-интерфейса приложения, кроме как при изменении размера окна.

...