2017-01-14 3 views
0

Ich verwende eine OpenGL ES-Anwendung auf einem Gerät, das die Erweiterung GL_OES_texture_compression_astc unterstützt. Ich habe eine 3000x2000 Pixel Textur, und wenn ich glTexImage2D anrufen, läuft alles gut.Segmentierungsfehler mit glCompressedTexImage2D

das Bild zu komprimieren, Ich habe die ASTC encoder und ausgeführt, um den folgenden Befehl ein:

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

Aber wenn ich player.astc in glCompressedTexImage2D verwenden, bewirkt die Funktion eines Segmentation Fault. Hier ist mein Code:

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);

ich eingecheckt haben size und data, und sie scheinen in Ordnung zu sein. Kann ich etwas tun, um das Problem zu beheben?

+0

Sie sagen Wert von '' size'' ist in Ordnung, aber wenn man einen segfault Fehler bekommen, anstatt Korruption Rendering Dann ist das wahrscheinlich das Problem. Welchen Wert an Größe haben Sie? – solidpixel

+0

Basierend auf meinem Verständnis des Algorithmus, sollte die komprimierte Größe (3000/6) * (2000/5) * 16 = 3200000. Die Größe der komprimierten Datei ist 3200016 Bytes, die nahe ist. Ich dachte, ich könnte die Dateigröße als die Größe des komprimierten Bildes verwenden, aber ich habe mich geirrt. Es muss genau 3200000 gesetzt werden. Das ist ein wenig frustrierend, ehrlich gesagt. – user934904

+0

Ja - der Kompressor fügt einen Metadaten-Header hinzu, also denke ich, dass du das abklopfen musst. – solidpixel

Antwort