2017-01-14 7 views
0

Я запускаю приложение OpenGL ES на устройстве, которое поддерживает расширение GL_OES_texture_compression_astc. У меня текстура размером 3000x2000 пикселей, и когда я звоню glTexImage2D, все работает нормально.Ошибка сегментации с glCompressedTexImage2D

Чтобы сжать изображение, я скачал ASTC encoder и выполнил следующую команду:

./astcenc.exe -c player.png player.astc 6x5 -medium

Но когда я использую player.astc в glCompressedTexImage2D, функция вызывает ошибку сегментации. Вот мой код:

glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, tids[0]); glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_ASTC_6x5_KHR, 3000, 2000, 0, size, data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glBindTexture(GL_TEXTURE_2D, 0);

Я проверил size и data, и они, кажется, хорошо. Есть ли что-нибудь, что я могу сделать, чтобы исправить эту проблему?

+0

Вы говорите, что значение '' size'' это хорошо, но если вы получите ошибку Segfault, а не оказание коррупции , то это, вероятно, будет проблемой. Итак, какое значение размера вы проходите? – solidpixel

+0

Основываясь на моем понимании алгоритма, сжатый размер должен быть (3000/6) * (2000/5) * 16 = 3200000. Размер сжатого файла составляет 3200016 байт, что близко. Я решил, что могу использовать размер файла как размер сжатого изображения, но я ошибся. Он должен быть установлен ровно 3200000. Это немного расстраивает, честно говоря. – user934904

+0

Yep - компрессор добавляет заголовок метаданных, поэтому я думаю, вам нужно сбить это. – solidpixel

ответ

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

  • Нет связанных вопросов^_^