2013-05-24 3 views
0

У меня Android APP, который работает на большинстве телефонов. Однако на нескольких телефонах частично через загрузку текстур вызов GLUtils.texImage2D() приводит к ошибке 1280 GL_INVALID_ENUM. Есть 8 текстур со следующими размерами (512x512, 512x512, 512x512, 512x512, 512x512, 512x512, 256x256, 512x1024) все из .png файлов с альфа-каналом. Ниже приведен код загрузки текстур. Мне удалось поймать исключение, используя ARCA «java.lang.RuntimeException: texImage2D 3: glError 1280», поэтому в этом случае это было, когда он пытался загрузить четвертую текстуру, когда i == 3. Нет ничего особенного в 4-й текстуре по сравнению с первой. Единственное, что приходит на ум, это то, что память для загрузки текстур может быть слишком маленькой, но номер ошибки 1280 GL_INVALID_ENUM, похоже, не подходит. Какие-нибудь идеи?OpenGL ES 2.0 texImage2D(), дающая ошибку 1280

private void setupTextures(String[] texFiles) { 
    // create new texture ids if object has them 
    // number of textures 
    mTextureIDs = new int[texFiles.length]; 

    GLES20.glGenTextures(texFiles.length, mTextureIDs, 0); 
    checkGlError("glGenTextures"); 

    for(int i = 0; i < texFiles.length; i++) { 
     GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureIDs[i]); 
     checkGlError("glBindTexture " + String.valueOf(i)); 

     // parameters 
     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); 
     checkGlError("GL_TEXTURE_MIN_FILTER " + String.valueOf(i)); 

     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); 
     checkGlError("GL_TEXTURE_MAG_FILTER " + String.valueOf(i)); 

     GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT); 
     checkGlError("GL_TEXTURE_WRAP_S " + String.valueOf(i)); 

     GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT); 
     checkGlError("GL_TEXTURE_WRAP_T " + String.valueOf(i)); 

     int ID = mContext.getResources().getIdentifier(texFiles[i], "raw", "com.antonymsoft.slidixcube"); 
     InputStream is = mContext.getResources().openRawResource(ID); 
     Bitmap bitmap; 
     try { 
      bitmap = BitmapFactory.decodeStream(is); 
     } finally { 
      try { 
       is.close(); 
      } catch(IOException e) { 
       // Ignore. 
      } 
     } 

     // create it 
     GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); 
     checkGlError("texImage2D " + String.valueOf(i)); 

     bitmap.recycle(); 

    } 
} 
+0

Проверьте конфигурации вашего растрового изображения (Bitmap.getConfig()), может быть, это неподдерживаемый формат. –

+0

Я проверил запуск APP на устройстве, которое работает, поскольку у меня нет доступа к тому, что не удается. На этом устройстве bitmap.getConfig(). Name() для каждого растрового изображения возвращает то же самое - ARGB_8888. Поэтому в этом случае я не вижу ничего другого для 4-го растрового изображения. Однако я просмотрел файлы .png, используя ImageMagick's -verbose, и обнаружил, что 4-й битмап хранится в другом подформате. Первые 3 отображаются как sRGB с Alpha, а четвертый - Grayscale с Alpha. Как вы думаете? Возможно ли, что на неработающих телефонах подформат Grayscale + Alpha не поддерживается? – tonyw

ответ