LINUX.ORG.RU

ANativeWindow_getFormat возвращает (int)5, которого нет в enum

 ,


0

1

android-ndk-9d-standalone/sysroot/usr/include/android/native_window.h:

enum {
    WINDOW_FORMAT_RGBA_8888          = 1,
    WINDOW_FORMAT_RGBX_8888          = 2,
    WINDOW_FORMAT_RGB_565            = 4,
};

Посмотрел в последнем ndk:

grep -R WINDOW_FORMAT_ ./android-ndk-r13/
Все тот же enum из 1, 2, 4.

Реверсить libandroid.so и тд? Бред какой-то

Ответ на: комментарий от anonymous

То есть 5 - поддержка RGBA_8888 и RGBA_565? Проверил экспериментально, похоже, что так и есть.

panzerito
() автор топика

По поводу битовой маски, «Return the current pixel format of the window surface. Returns a negative value on error.» - ни слова о битовой маске. Для меня загадка, как текущий сурфейс может быть сразу двух типов.

Функция ANativeWindow_getFormat(ANativeWindow) дергает ANativeWindow::query(...). Можно посмотреть, что там в сорцах.

Гугель же сказал так:
«FWIW, the problem can be solved by calling ANativeWindow_setBuffersGeometry() with the desired pixel format when detecting that Android has silently switched pixel formats.»

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Для меня загадка, как текущий сурфейс может быть сразу двух типов

Разумно.

displayWindow = android_createDisplaySurface();
windowFormat = ANativeWindow_getFormat(displayWindow);

Программу же удалось запустить на устройстве, указав что 5 это тот же WINDOW_FORMAT_RGBA_8888.

panzerito
() автор топика
Ответ на: комментарий от panzerito

Я делаю как-то так:

EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglChooseConfig(display, attribs, &config, 1, &numConfigs);

EGLint format;
eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);

ANativeWindow_setBuffersGeometry(app->window, 0, 0, format);

EGLSurface surface = eglCreateWindowSurface(display, config, app->window, nullptr);

EGLContext context = eglCreateContext(display, config, nullptr, attribList);

eglMakeCurrent(display, surface, surface, context);

andreyu ★★★★★
()
Ответ на: комментарий от panzerito

А app->window как получаешь?

Если кратко, то приходит из void onNativeWindowCreated(ANativeActivity* activity, ANativeWindow* window)

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.