Ошибка glTexImage2D для GL_RG на устройствах Snapdragon

Я пытаюсь загрузить 2-канальную текстуру без знака, используя glTexImage2D, со следующим кодом (используя NDK, но я не думаю, что это будет иметь большое значение здесь):

glTexImage2D(GL_TEXTURE_2D, 0, GL_RG32F, width >> 1, height >> 1, 0, GL_RG, GL_UNSIGNED_BYTE, textureData);

Это прекрасно работает на множестве различных устройств Android, начиная с версии Android 19 (KitKat). Но на устройствах с ядрами Snapdragon (например, Nexus 6P) вызов завершается неудачно, и ошибка - это ошибка GL 0x502 (GL_INVALID_OPERATION).

Я нашел в Интернете Руководство для разработчиков Qualcomm Adreno OpenGL ES, в котором говорится, что GL_RG32F является поддерживаемым внутренним форматом. Я также пробовал различные другие внутренние форматы со схожим уровнем ошибок.

Я также протестировал использование GL_LUMINANCE как для внутреннего формата, так и для параметров формата, и я могу успешно загрузить текстуру без других изменений (с очевидной проблемой пропуска половины моих данных текстуры в этом случае).

Я хотел бы избежать разделения этих текстурных данных на ЦП и загрузки их в виде двух отдельных текстур, но я изо всех сил пытаюсь придумать способ избежать этого.

Я что-то упускаю здесь очевидное? Или GL_RG просто не то, что я могу использовать на этих устройствах?

1 ответ

Так что в моем случае оказалось, что мне нужно использовать GL_RG8 в качестве внутреннего формата, а не GL_RG32F. Как только я внес это изменение, ошибки GL_INVALID_OPERATION исчезли, и устройство начало работать так, как задумано.

Другие вопросы по тегам