Android инициализирует контекст openGL2.0 с помощью EGL

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

С помощью EGL мы можем создать EGLSurface, я вижу, что есть три варианта: * EGL_WINDOW_BIT * EGL_PIXMAP_BIT * EGL_BUFFER_BIT

Первый предназначен для обработки на экране, второй - вне экрана, поэтому я использую EGL_PIXMAP_BIT следующим образом:

// Step 1 - Get the default display.
EGLDisplay eglDisplay = eglGetDisplay((EGLNativeDisplayType) 0);
if ((eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY)) == EGL_NO_DISPLAY) {
    LOGH("eglGetDisplay() returned error %d", eglGetError());
    exit(-1);
}

// Step 2 - Initialize EGL.
if (!eglInitialize(eglDisplay, 0, 0)) {
    LOGH("eglInitialize() returned error %d", eglGetError());
    exit(-1);
}

// Step 3 - Make OpenGL ES the current API.
eglBindAPI(EGL_OPENGL_ES_API);

// Step 4 - Specify the required configuration attributes.
EGLint pi32ConfigAttribs[] = { EGL_SURFACE_TYPE, EGL_PIXMAP_BIT,
        EGL_BLUE_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_RED_SIZE, 8, EGL_NONE,
        EGL_BIND_TO_TEXTURE_RGBA, EGL_TRUE };

// Step 5 - Find a config that matches all requirements.
int iConfigs;
EGLConfig eglConfig;
eglChooseConfig(eglDisplay, pi32ConfigAttribs, &eglConfig, 1, &iConfigs);
if (iConfigs != 1) {
    LOGH(
            "Error: eglChooseConfig(): config not found %d - %d.\n", eglGetError(), iConfigs);
    exit(-1);
}

// Step 6 - Create a surface to draw to.
EGLSurface eglSurface = eglCreatePbufferSurface(eglDisplay, eglConfig,
        NULL);

// Step 7 - Create a context.
EGLContext eglContext = eglCreateContext(eglDisplay, eglConfig, NULL,
        ai32ContextAttribs);

// Step 8 - Bind the context to the current thread
eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);

Код не удалось на шаге 5, кажется, Android нене поддерживает обработку вне экрана? Тип EGL_PIXMAP_BIT не поддерживается.

Ответы на вопрос(1)

Ваш ответ на вопрос