2012-01-10 4 views
3

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

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

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

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

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

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

enter image description here

EDIT: onSurfaceCreated код:

@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); 
} 
+0

Какую версию Galaxy S2 вы используете? В Википедии есть разные модели, которые используют разные графические процессоры. –

+0

Номер модели: GT-I9100 Но я также тестировал на Galaxy Notes, отлично работает как –

ответ

4

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

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

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

+0

OK ... Вы нашли его! Я потратил 1 неделю на это. Спасибо, что вы просто спасли мне жизнь. –

+0

Рад помочь. Извините за опечатки, но я написал начальный ответ от своего карманного устройства, когда я спал вчера ночью :) –

2

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

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

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

+0

Точно, что я сделал, и теперь он работает нормально. Благодаря! –