Android OpenGL ES искаженное изображение

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

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

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

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

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

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

Введите описание изображения здесь

EDIT: onSurfaceCreated code:

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

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

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

Ps Добро пожаловать на борт 🙂

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

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

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