2014-09-11 2 views
1

Я только что слышал от пользователя, который говорит, что мое (Android OpenGL ES 2.0) приложение (игра) не будет работать на его телефоне HTC 1X +. Все, что он получает, это музыка и баннер в верхней части экрана, и ничего больше.Общие причины отсутствия текстур OpenGL

К сожалению, у меня нет HTC 1X +, чтобы проверить это.

Некоторые примечания:

  • Хотя мои текстуры не сила 2, я только с помощью GLES20.GL_CLAMP_TO_EDGE
  • Из того, что я прочитал, то HTC 1X + имеет максимальный размер текстуры в 2048 x 2048 и он получает свои ресурсы из папки XHDPI (досадно), даже несмотря на это, у меня есть только 1 тексюри, ​​которая превышает этот размер, и все остальные объекты, отображаемые на начальной странице моего приложения, используют текстуры, намного меньшие этой максимальной суммы, поэтому что-то должно отображаться.
  • Я не использую текстуры сжатия любого рода

Мое приложение работает довольно счастливо на 15 (приблиз) других устройств ввода, и другие испытали его - только 1x (до сих пор) дает проблемы.

Может ли кто-нибудь указать некоторые общие проблемы с OpenGL ES 2.0, которые могут быть причиной того, что эти текстуры не будут отображаться? Есть ли какие-либо причуды с некоторыми версиями или устройствами Android?

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

Edit - включая текстуры кода загрузки

public static int LoadTexture(GLSurfaceView view, Bitmap imgTex){ 

    //Array for texture 
    int textures[] = new int[1]; 
    try { 
     //texture name 
     GLES20.glGenTextures(1, textures, 0); 
     //Bind textures 
     GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]); 
     //Set parameters for texture 
     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); 
     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); 

     //Apply texture 
     GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, imgTex, 0); 

     //clamp texture 
     GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE); 

    } catch (Exception e){ 

    } 
    //Increase texture count 
    textureCount++; 
    //Return texture 
    return textures[0]; 
} 
+0

И вы 'GL_TEXTURE_MIN_FILTER' установлено в' 'GL_LINEAR' или GL_NEAREST' для текстур, которые не имеют мип? –

+0

Привет @RetoKoradi, в моем коде есть следующее: GLES20.glTexParameterf (GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); – Zippy

+0

Я добавил код, который я использую для применения текстур @RetoKoradi, надеюсь, что это поможет вам обнаружить и проблемы - спасибо – Zippy

ответ

0
  • Вы проверили свойства пробоотборник? Настройки выглядят правильно, но почему бы не указать параметр GL_TEXTURE_WRAP_S? Используйте GLES20.glTexParameteri для целых значений.

  • Какой тип растрового изображения вы используете? Попробуйте принудительно включить внутренний формат в GL_RGBA, GL_BGR, GL_RGB

  • Вы правильно отвязываете или связываете другую текстуру? Другие настройки текстуры могут вызывать хаос в других частях кода.

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

+0

Спасибо @StarShine, интересно, я просто попытался добавить параметр GL_TEXTURE_WRAP_S, но затем некоторые из моих текстур отображают ОК, некоторые дисплеи как черный, а некоторые вообще не отображаются (или «полностью прозрачны»). – Zippy

+0

Что касается других моментов, если они были ошибочными, ожидалось бы, что они будут работать на 90% устройств, но сломать один из двух конкретных? Кроме того, можете ли вы подтвердить, что ** все ** устройства openGL ES 2.0 поддерживают текстуры NPOT (при использовании clamp_to_edge и non-mipmaps)? Поскольку мои текстуры являются NPOT, но я использую режимы, которые должны поддерживаться, поэтому я хочу, чтобы это исключалось из-за проблемы ... – Zippy

+0

У нас были проблемы с текстурой в какой-то момент, и это было связано с свойствами пробоотборника а не настройки, помимо обычных ошибок, таких как ошибочные указатели и т. д. У нас также были ошибки при использовании, необъяснимо вызванные неинициализированным значением. (Мы используем NDK.) Еще раз проверьте glTexParameterf, возможно, это будет glTexParameteri в java. О правилах: не забывайте, что разные платформы работают с различными реализациями драйверов. Было бы неплохо проверить все и сравнить. – StarShine

Смежные вопросы