Графіка opengl в android додатку

Платформа Android підтримує графіку OpenGL приблизно так само, як капелюх-циліндр допомагає витягувати кроликів. Хоча OpenGL - безперечно, одна з найбільш захоплюючих технологій в Android, вона грає в цій операційній системі досить маргінальну роль. Крім того, створюється враження, що ще до виходу остаточної бета-версії інтерфейс зазнав великі зміни. Велика частина коду і багато рекомендацій на цю тему, знайдені нами в Інтернеті, застаріли і вже не працюють.

У версії API Vl_r2 реалізована середу OpenGL ES 1.0 і здебільшого ES 1.1. По суті, це доменно-специфічний мову, інтегрований в Java. Якщо вам хоча б недовго доводилося розробляти ігрові інтерфейси, ви звикнете до розробки програм з OpenGL для Android швидше, ніж програміст Java або навіть експерт по призначених для користувача інтерфейсів Java.

Перед тим як перейти до обговорення самої графічної бібліотеки OpenGL, давайте ненадовго звернемося до питання про те, як саме OpenGL малює пікселі, які відображаються на екрані. До сих пір розглядався складний фреймворк View, який використовується для організації та представлення об'єктів на екрані. OpenGL - це мова, на якому додаток описує цілу сцену. Така сцена буде відображатися движком, який знаходиться не просто за межами віртуальної машини Java, а й взагалі може працювати на іншому процесорі (мається на увазі графічний процесор або GPU). Скоординувати на екрані відображення двох видів, оброблюваних різними процесорами, досить непросто.

Класу SurfaceView, розглянутого вище, для цього майже досить. Його завдання - створювати поверхню, на якій може малювати інший потік, крім графічного потоку призначеного для користувача інтерфейсу. Нам би дуже доречним інструмент, який представляє собою розширення SurfaceView, який би трохи краще підтримував многопоточность, а також забезпечував підтримку OpenGL.

GLSurfaceView визначає інтерфейс GLSurfaceView. Renderer, який радикально спрощує всю роботу, пов'язану з OpenGL і GLSurfaceView. Насправді ж весь цей функціонал виключно складний. GLSurfaceView викликає метод відображення getConf и gSpec для отримання інформації про конфігурацію OpenGL. Ще два методу - sizeChanged і surfaceCreated - викликаються GLSurfaceView для того, щоб повідомити засобу відображення (рендерер) відповідно, що його розмір змінився або що потрібно підготуватися до малювання. Нарешті drawFrame, центральна частина інтерфейсу, викликається для відображення нового кадру OpenGL.

У прикладі 9.16 показані важливі методи з реалізації засоби відображення OpenGL.

Приклад 9.16. Покадрова анімація із застосуванням OpenGL

Графіка opengl в android додатку

Графіка opengl в android додатку

Графіка opengl в android додатку

Метод surfaceCreated готує сцену. Він задає кілька атрибутів OpenGL, які повинні инициализироваться тільки в тому випадку, коли віджет отримує нову малювальну поверхню. Крім того, цей метод викликає и nit Image, який зчитує ресурс точкового малюнка (bitmap resource) і зберігає його у вигляді двомірної текстури. Коли нарешті викликається drawFrame, все вже готово для малювання. А саме: текстура застосована до плоскої фігури, вершини якої задаються конструктором в vertexBuf, фаза анімації обрана, і сцена перемальовується.

Джерело: Android. Програмування на Java для нового покоління мобільних пристроїв

Схожі статті