За даними Dev, розробники Codename One впровадили інноваційний підхід до роботи з графічними процесорами, який радикально спрощує процес створення кросплатформенних додатків. Замість того, щоб програмісти мали писати окремі шейдери для кожної платформи — наприклад, MSL для Apple або HLSL для Windows — система тепер автоматично генерує необхідний код на основі високорівневого опису матеріалів.
Абстракція замість ручного написання шейдерів
Новий API фокусується на об'єкті Renderer та компоненті RenderView. Розробнику достатньо визначити модель освітлення, колір, текстуру та блиск матеріалу в коді Java або Kotlin. Система автоматично транслює ці дані у відповідні шейдери для різних бекендів:
- Metal (CAMetalLayer) для нативних пристроїв iOS та Mac з підтримкою runtime-компіляції;
- OpenGL ES 2 через GLSurfaceView для Android;
- WebGL для веб-версій на базі JavaScript;
- Direct3D 11 для нової нативної версії під Windows;
- OpenGL або чистий Java-софтверний растеризатор для симуляторів.
Як зазначено в документації, цей підхід дозволяє інтегрувати 3D-елементи безпосередньо у стандартні інтерфейси додатків, де вони можуть знаходитися поруч із кнопками та мітками, зберігаючи при цьому повну сумісність із системою розмітки.
Підтримка сучасних стандартів моделей
Для роботи з реальними об'єктами фреймворк включає GltfLoader. Він підтримує бінарний формат .glb, який є стандартом для Blender та більшості сучасних інструментів 3D-моделювання. Це означає, що одна й та сама модель може бути додана як ресурс проекту і коректно відображатися на будь-якій платформі без додаткових модифікацій.
Особливою перевагою є підтримка симулятора JavaSE. У разі відсутності OpenGL система використовує повноцінний програмний растеризатор з буфером глибини та коректною перспективою. Це гарантує детермінованість рендерингу навіть на headless CI-машинах, що критично важливо для автоматизованого тестування скріншотів.
Завдяки такому підходу Codename One значно знижує бар'єр входу для створення складних візуальних інтерфейсів у кросплатформенній розробці.