Я запускаю приложение 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
, и они, кажется, хорошо. Есть ли что-нибудь, что я могу сделать, чтобы исправить эту проблему?
Вы говорите, что значение '' size'' это хорошо, но если вы получите ошибку Segfault, а не оказание коррупции , то это, вероятно, будет проблемой. Итак, какое значение размера вы проходите? – solidpixel
Основываясь на моем понимании алгоритма, сжатый размер должен быть (3000/6) * (2000/5) * 16 = 3200000. Размер сжатого файла составляет 3200016 байт, что близко. Я решил, что могу использовать размер файла как размер сжатого изображения, но я ошибся. Он должен быть установлен ровно 3200000. Это немного расстраивает, честно говоря. – user934904
Yep - компрессор добавляет заголовок метаданных, поэтому я думаю, вам нужно сбить это. – solidpixel