Рендеринг OpenGL на Android

#android #opengl-es

#Android #opengl-es

Вопрос:

В попытке создать некоторые другие платформы, помимо Java / Dalvik на Android, я отключил zygote и попробовал идеи, перечисленные здесь:

http://jiggawatt.org/badc0de/android/index.html#opengl

Я успешно скомпилировал тестовый код OpenGL и загрузил его в эмулятор Android (я использую 2.3 / gingerbread). Вместо цветного треугольника это просто приводит к тому, что экран загрузки с мигающим текстом «ANDROID_» начинает мерцать. Вот результат:

 root@android:/data/misc # ./test1                                              
GL version: 1.4
Window specs: 0*0 format=-1416517231
GL context: 162f8
GL surface: 163d0
  

Похоже, это показывает, что android_createDisplaySurface() из libui не возвращает окно правильного размера. Но logcat в эмуляторе показывает следующее, что, по-видимому, подразумевает обратное:

 D/libEGL  (   73): loaded /system/lib/egl/libEGL_emul.so
D/libEGL  (   73): loaded /system/lib/egl/libGLESv1_CM_emul.so
D/libEGL  (   73): loaded /system/lib/egl/libGLESv2_emul.so
D/eglWrapper(   73): Loading egl dispatch for test1
D/eglWrapper(   73): isNeedEncode? for test1
D/eglWrapper(   73): Initializing native opengl for test1
D/eglWrapper(   73): loading /system/lib/egl/libGLES_android.so into /system/lib/egl/libGLESv1_CM_emul.so complete
D/eglWrapper(   73): loading /system/lib/egl/libGLES_android.so into /system/lib/egl/libGLESv2_emul.so complete
I/gralloc (   73): using (fd=6)
I/gralloc (   73): id           = 
I/gralloc (   73): xres         = 320 px
I/gralloc (   73): yres         = 480 px
I/gralloc (   73): xres_virtual = 320 px
I/gralloc (   73): yres_virtual = 960 px
I/gralloc (   73): bpp          = 16
I/gralloc (   73): r            = 11:5
I/gralloc (   73): g            =  5:6
I/gralloc (   73): b            =  0:5
I/gralloc (   73): width        = 49 mm (165.877548 dpi)
I/gralloc (   73): height       = 74 mm (164.756760 dpi)
I/gralloc (   73): refresh rate = 651.04 Hz
I/pixelflinger(   73): Needs: n=0x03010144 p=0x00000177 t0=0x00000000 t1=0x00000000
I/ARMAssembler(   73): generated scanline__00000177:03010144_00000000_00000000 [ 26 ipp] (63 ins) at [0x4009f1e8:0x4009f2e4] in 9552233 ns
  

Пока мое единственное предположение заключается в том, что, возможно, что-то в стеке ожидает SurfaceFlinger, который не запускается без Dalvik. Но этого нет в журналах.

Я понимаю, что это не проторенный путь, но надеюсь, что у некоторых профессионалов Android / OpenGL могут быть какие-то подсказки относительно того, что происходит. Любая помощь искренне приветствуется.

Комментарии:

1. Прошло некоторое время, и ответа на эту проблему опубликовано не было. У меня тоже возникла эта проблема, и я изо всех сил пытаюсь найти решение. Если вы решили эту проблему, пожалуйста, не могли бы вы опубликовать свой ответ здесь. Большое спасибо.

Ответ №1:

Родная поверхность Android была изменена со времен eclair или froyo. Вы должны попробовать framework/base/opengl/tests/angeles/app-linux.cpp.