Боюсь, что это невозможно в данный момент.Все состояние OpenGL, содержащее размер текстуры, теперь удалено (согласно спецификации GLES 2.0.25).Как вы правильно заявили, при загрузке текстуры не происходит никаких ошибок (к сожалению, это дизайн).Прокси-текстуры были удалены, и люди сообщали, что они часто не поддерживаются / не работают на GPU класса ПК.И что теперь?
Вы можете попытаться прочитать содержимое текстуры обратно через объект кадрового буфера (возможно, не всю текстуру, а только угловые точки / каждый 32-й пиксель / ...).Это было бы не очень быстро, но это должно работать.Возможно, вы могли бы также использовать тест на полноту буфера кадров с прикрепленной текстурой (но это, кажется, ограничивается только внутренним форматом изображения, который может или не может быть установлен в случае сбоя загрузки текстуры из-за нехватки памяти - вам придется проверить это).
Вы можете (теоретически) определить объем доступной памяти, создав объект renderbuffer, спецификация гласит, что glRenderbufferStorage () завершится ошибкой с GL_OUT_OF_MEMORY, поэтому он должен быть достаточно надежным.
Было бы довольно легко проверить наличие свободного места перед выделением текстуры, затем удалить буфер визуализации (в случае успеха) и затем выделить саму текстуру.Имейте в виду, что с мипмапами текстура будет занимать чуть больше 1,33х для базового уровня.
Еще лучше было бы определить доступную память при запуске приложения (возможно, после компиляции шейдеров и выделения других объектов, где оценить объем памяти не так просто) и отслеживать распределение объектов, чтобы увидеть, сколько памятиоставил.Это кажется сложным, но если объекты OpenGL обернуты в классы, это должно быть довольно просто.