Android OpenGL ES искаженное изображение - PullRequest
3 голосов
/ 10 января 2012

Я разрабатываю приложение для Android, которое использует OpenGL для визуализации 3D-шара на поле с травой. Пользователь может взаимодействовать с мячом (вращать его прикосновением).

Проблема заключается в следующем: на моем Samsung Galaxy S2 все работает хорошо, но когда я пробую его на других устройствах (HTC incredible S, HTC Sensation, ...), я получаю искаженное изображение с несколькими обрезанными областями просмотра на экране (см. прикрепленное изображение ).

Я перепробовал все, что мог придумать: отключить текстуры, отключить свет и т. Д., Похоже, ничего не работает.

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

Я думаю, что-то связано с GLSurfaceView или подклассом рендерера или порядком создания этих объектов ...

Посмотрите на приложенное изображение и дайте мне знать, если вы знаете, в чем проблема.

enter image description here

EDIT: onSurfaceСозданный код:

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
  gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
  gl.glShadeModel(GL10.GL_SMOOTH);
  gl.glClearDepthf(1.0f);
  gl.glEnable(GL10.GL_DEPTH_TEST);
  gl.glDepthFunc(GL10.GL_LEQUAL);
  gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
  gl.glEnable(GL10.GL_TEXTURE_2D);
  gl.glEnable(GL10.GL_NORMALIZE);
}

Ответы [ 2 ]

4 голосов
/ 11 января 2012

Мой друг. Я сталкивался с такими же проблемами в прошлом, и это было связано с количеством битов, поддерживаемых GPU. Например, в моей галактике он поддерживает буфер глубиной 24 бита, а на устройствах tegra2 - только 16, если я хорошо помню. Во всяком случае, sokution во время конфигурации egl выберите функцию, где вы должны настроить ее соответствующим образом.

Попробуйте опубликовать код конфигурации egl, чтобы я мог помочь вам.

P.s. Добро пожаловать на борт:)

2 голосов
/ 11 января 2012

Чтобы добавить ответ Маурицио, вы можете установить конфигурацию EGL в GLSurfaceView:

mGLSurfaceView.setEGLConfigChooser(redSize, greenSize, blueSize, alphaSize, depthSize, stencilSize);
mGLSurfaceView.getHolder().setFormat(PixelFormat);

Вы можете прочитать чуть больше здесь .Обратите внимание, что это может иметь очень плохие последствия для разных графических чипов, как вы уже видели.От искаженных изображений до очень низкой производительности без видимой причины.

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