LINUX.ORG.RU

Хочу кроссплатформерную 2d графику с поддержкой шрифтов на С

 , , , ,


2

4

Для крестов всё понятно, подключаешь Skia и спокойно кодишь. А если ограничен сями, как быть? По сути, можно запилить собственный велосипед. Тогда на офтопике всё просто, подключаешь Direct2D и спокойно кодишь. Но как быть с Ubuntu и Android? Через OpenGL что ли велосипедить вывод шрифтов? Или какие высокоуровневые либы есть?

UPD: Для Android нашел вот такую табличку https://stackoverflow.com/questions/22170228/native-graphics-in-android-ndk-opengles-vs-native-window-api

UPD: Пока оптимально Cairo. Под офтопик бекенд на Direct2D, под GTK и Android - OpenGL. Осталось разобраться с iOS и macOS. Возможно вот так https://github.com/jpbruyere/vkvg

★★★★

Ответ на: комментарий от crutch_master

А под капотом у него что, OpenGL для Ubuntu и Android? Хотелось бы не терять за абстракциями специфичные вещи платформы. Хотя может это и не нужно, я первый раз вот с графикой столкнулся.

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Хотя путь еще долгий — хочется SDL_ttf, SDL_image, чтобы работать с комфортом. Но это уже совсем другая история.

Это еще что там за история? Через задницу что ли всё?

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от foror

Порт SDL2 на Android до сих пор сделан через задницу. Вряд ли есть хорошее кроссплатформенное решение для 2D. Я не знаю какая у тебя задача, но для простейшего случая я бы взял что-нибудь легковесное вроде GLFM + imgui.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

Я не знаю какая у тебя задача

Я хочу простенький html/css рендер сделать, вот такого плана https://github.com/maekawatoshiki/naglfar Только это для GraalVM, поэтому ограничен сями. Ну, и оно для продакшена (в будущем), а не для коленки и выкинуть.

foror ★★★★ ()
Ответ на: комментарий от foror

А, тогда тебе вряд ли ImGUI подойдёт. Там рендеринг шрифтов простенький для сложного HTML со всеми его премудростями. Наверное придётся смотреть в сторону какого-нибудь Freetype, прикручивать его к OpenGL и OpenGL ES.

Это не такая уж и тривиальная задача. Наверное следует делать по серьёзному, как это сделано в том же порте Firefox и Chrome на Android и Ubuntu. То есть для каждой платформы – свой специфичный вывод.

Я хочу простенький html/css рендер сделать, вот такого плана https://github.com/maekawatoshiki/naglfar

Посмотри ещё в сторону:

https://github.com/SerenityOS/serenity/tree/master/Libraries/LibHTML

Тут человек в одиночку тоже пилит что-то подобное и уже добился некоторых результатов. Возможно тебе это как-нибудь пригодится.

EXL ★★★★★ ()
Ответ на: комментарий от foror

А не напрямую с OpenGL работать?

GTK для Custom Drawing вроде как использует GDK + Cairo. Последний, насколько я помню, умеет рендерить в OpenGL-контекст, мимо GTK.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

GTK для Custom Drawing вроде как использует GDK + Cairo. Последний, насколько я помню, умеет рендерить в OpenGL-контекст, мимо GTK.

Тогда под Linux проще в OpenGL сразу рендерить (скажем через Cairo). Под офтопик в Direct2D. Осталось понять, что там на Android, наверное тоже в OpenGL проще всего? А в MacOS и iOS наверняка есть аналог Direct2D или тоже OpenGL?

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от foror

что там на Android, наверное тоже в OpenGL проще всего?

На Android’е нету стандартного OpenGL, там OpenGL ES и Vulkan.

А в MacOS и iOS наверняка есть аналог Direct2D или тоже OpenGL?

Там OpenGL ES и Metal. OpenGL в macOS объявлен устаревшим. Аналог Direct2D в macOS это CoreGraphics.

P.S. Вот тут автор Sciter (проекта примерно аналогичного твоему будущему) говорит о выборе backend’а: https://stackoverflow.com/a/47402794

EXL ★★★★★ ()
Ответ на: комментарий от EXL

На Android’е нету стандартного OpenGL, там OpenGL ES и Vulkan.

Так, с анроидом есть решение https://github.com/anoek/android-cairo Остались macOS и iOS.

Вот тут автор Sciter

Он на крестах, ему проще, там сразу Skia берёшь и не паришься - сам гугл на нём хром пилит.

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 3)
Ответ на: комментарий от foror

простенький html/css рендер

это ты так легко обозвал html-рендерер простеньким? браузерописатели бьются-бьются, а до сих пор нет совместимости между отображением в разных браузерах. я точно знаю, что у netsurf всё написано на C и там должен быть свой рендерер. правда, он там несколько ограничен и иногда выдаёт отличные от других браузеров результаты.

Iron_Bug ★★★★ ()
Ответ на: комментарий от Iron_Bug

это ты так легко обозвал html-рендерер простеньким

Я не собираюсь делать рендер для отображения сайтов. Я просто хочу сделать рендеринг html и подмножества css для создания UI. Без анимации и сложных оптимизаций. Я там даже ссылку дал на пример на ржавом, что я хочу сделать.

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 5)
Ответ на: комментарий от foror

Я просто хочу сделать рендеринг html и подмножества css для создания UI

Я тоже думал над реализацией статичного html просмотрщика. Just for fun. Но пока времени не было. Ну и у меня он будет на Rust, естественно.

для создания UI

QML, Flutter, SwiftUI же. HTML/CSS говно не нужно.

RazrFalcon ★★★★★ ()
Последнее исправление: RazrFalcon (всего исправлений: 1)
Ответ на: комментарий от menangen

React Native

Обмазывайтесь им сами, вместе с Цукером и его говнокодерами. А я хочу нормальное решение сделать для быстрой и удобной разработки прикладного ПО. Мне даже на веб-макак как-то похер. Чисто под себя пилю, под свои прикладные проекты.

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от foror

Это hello world. Оно ничего не умеет.

Это лишь твоё субъективное мнение, поди еще и бунтарь диванный?

Использовать специализированный DSL для построения интерфейсов vs язык разметки текста из 90-х. Решать вам.

Вы хоть существующие решения оценили? Даже XAML будет в 100500 лучше HTML.

RazrFalcon ★★★★★ ()
Последнее исправление: RazrFalcon (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Решать вам.

Именно. DSL оставьте индусам и белым разрабам, а моему творческому потенциалу нужны более низкоуровневые примитивы.

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Даже XAML будет в 100500 лучше HTML.

Я не собираюсь пилить конечный продукт на голом HTML. Фактически у меня сейчас есть наработки своего UI фреймворка и я могу использовать WebKit. Но я не хочу создать очередной электрон или очередные кроссплатформенные костыли.

Хочу сделать всё по уму и может даже продавать это решение. А ваш XAML знает 1.5 погромиста, зачем мне за него вписываться? А HTML/CSS любая макака в курсе и может купить моё решение.

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от RazrFalcon

sciter

Он отошел от стандартов W3C, поэтому оно и не нужно никому. Зачем мне разбираться с каким-то нонейм ЯП и устаревшим CSS? Да еще на крестах пилить прикладуху? Нахрена?

Ну так для веба есть электрон

И как его на мобилках запустить? Я тут даже не стану говорить, какое оно жирное и неуклюжее.

Смысла в недо-HTML нет.

Ну это лишь ваше влажное «экспертное» заключение.

foror ★★★★ ()
Ответ на: комментарий от foror

Я просто хочу сделать рендеринг html и подмножества css для создания UI

Но зачем тебе всё это? Воокруг тебя есть куча куда более удобных форматов данных. Зачем тебе эти убогие html/css? Даже веб-макаки от них открестились и пилят на своём реакте/ангуляре. Окстись. Какие миллионы веб-макак? На голом html/css херачат только совсем говноделы. Прогрессивные веб макаки изобретают за год по 2 фреймворка.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Трусы || Крестик

Чувак, запусти sciter и ты увидишь, что HTML/CSS может быть легковесным.

И что ты предлагаешь на замену HTML/CSS, когда нужно запилить свой UI фреймворк, а не использовать высокоуровневые примитивы типа QML?

foror ★★★★ ()
Ответ на: комментарий от foror

И что ты предлагаешь на замену HTML/CSS, когда нужно запилить свой UI фреймворк

Посмотри, как сделан современный веб-фронт. Нет, не тот, который jquery, а на более высокоуровневый типа вуе, реакт, ext-js, ангуляр, etc.

crutch_master ★★★★★ ()
Ответ на: комментарий от foror

Где их закопали?

Браузеру скармливают цсс, но кодер его сильно не трогает у него есть как минимум bootstrap.css, а как максимум, какой-нибудь ext-js, где деклатаривщина и он просто собирает определённую js структуру, а дальше всё делается за него.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)