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