Браузер на основе Idea/Eclipse

Пока у меня в ФБ шел лютый срач по поводу смерти Firefox, я загорелся написать свой браузер, но сразу же натолкнулся на некую неприятную проблему.

Чтобы написать нормальный браузер (не как попало, а по-хорошему, надолго), необходимо в Java засунуть нормальный движок типа Servo.

Серво написан на Rust, но это херня. Полистал вторую редакцию Rust Book, там вроде все понятно. Кроме того, нашел единомышленника в мозилле, который возможно сможет прояснить детали интеграции.

Настоящая проблема в том, что для интеграции с Серво, нужен сырой указатель на контекст OpenGL прямо в свинге.

Первое движение было – нагуглить как работать нативно с OpenGL в жабе. Погуглил, и понял, что никак. По внешним признаком вообще непонятно, есть ли в Оракле или Редхате какая-то грауппа, которая занимается десктопной графикой.

С другой стороны, есть JavaFX. Но OpenGLNode там нету, хотя в 2015 году в рассылочке обсуждали. Ну то есть, может оно и есть, но не гуглится, а знакомых из openjfx у мну нет.

С третьей стороны, есть готовые движки. Часто упоминают JOGL, и я даже находил где-то 1 (!) протухшую ссылку с намеком (!) как выковырить из него raw pointer на opengl context. Но судя по всему, он умер, у него даже сайт не открывается, последний релиз в 2014.

Есть еще LWJGL, он как-то поживее. И лицензия – BSD!!!
Написал им на гитхаб, может даже ответят.

В целом, сейчас план такой:

1) Берем IntelliJ IDEA Community Edition
2) Делаем новый editor плагин, пихаем на весь editor одну большую JPane.
3) На JPane цепляем канвас.
4) Имплементим MouseAdapter или как там оно называется (последний раз видел свинг многие годы назад), готовимся посылать события
5) в LWJGL Display.setParent(java.awt.Canvas) чтобы объединить LWJGL-евский дисплей с канвасом
6) Каким-то чудесным образом получаем raw pointer на opengl context
7) Делаем C++-обертку вокруг Rust API
8) Делаем JNI-обертку вокруг C++
9) Прокидываем сырой указатель на контекст в наш новоиспеченный JNI API
10) Туда же пробрасываем действия мышью
11) Маниакально соединяем ивенты Идеи с внутренними механизмами Серво (н-р как делать табы?)
11) profit

План очень опасный.
Например, в свинге начнутся артефакты, это же то еще говнецо. Или из LWJGL нельзя будет выковырить raw pointer на контекст. Или LWJGL загнется завтра. Или в Идее окажется невозможно без форка написать такой плагин (а форкать бы не хотелось очень – уже был плачевный опыт). И так далее.

Но наверное, оно того стоит. Ведь стоит?)

Кажется, я знаю, куда уйдет все свободное время. Жаль, на Overwatch останется не так много времени, придется им пожертвовать.

Leave a Reply

Your email address will not be published. Required fields are marked *