Основная проблема - слишком мало битов RGB в вашей текстуре или (менее вероятно) буфере кадров. Файл PNG не будет использоваться графическим оборудованием напрямую - его необходимо преобразовать во внутренний формат. Я не знаю API OpenGL ES, но, вероятно, вы либо передаете ему файл .PNG напрямую, либо сначала делаете какой-то шаг преобразования и передаете преобразованные данные в Open GL ES. В любом случае обратитесь к соответствующей документации, чтобы убедиться, что используемый внутренний формат имеет достаточную глубину. Например, будет достаточно 256-цветного изображения с палитрой, как 24-битный RGB или 32-битный формат RGBA. Я сильно подозреваю, что ваш PNG конвертируется в RGB15 или RGB16, который имеет только 5 или 6 бит на компонент цвета - недостаточно для отображения плавного градиента.