LINUX.ORG.RU
ФорумTalks

C++20 и 2D Graphics и изнасилования трупов

 ,


1

7

В пику посту C++20 и 2D Graphics

Если представить «тортность» С++ в виде функции от версии, то её пик придется где-то между 11м и 14м плюсами. 11е плюсы добавили много того, что давно требовалось и вопияло. 14е плюс добавили немного нужностей, не вошедших в 11е и много того, что в общем-то не особо-то и нужно. То есть это наверно нужно каким нибудь ополоумевшим обезьянам, которые используют С++ как навороченый брейнфак, из которого надо выжать максимум. Но можно было дать им просто обфускатор же.

А дальше «остапа понесло», и донесло его до 2Д-графики как финала идиотизма. Далее я объясню почему, и прошу запастись терпением.

У мну как-то случился спор с безумным аноном, который рассказывал нам истории для кота и лампы про некое специальное железо в GPU, которое умеет в аппаратное 2D. Анон плевался ядовитым калом(зачем он носит кал во рту? это же мерзко), а я смиренно пытался донести до него ту простую истину, что надпись «наше железо умеет в Х» не означает, что железо умеет в Х в буквальном смысле. Там драйвер на самом деле сидит, который дает некоторый интерфейс, и адаптирует его запросы к конкретному железу.

OpenVG про которое шла речь(а именно оно в конечном итоге и будет приделано к С++20) работает на 3Д-железе просто потому, что оно 3Д и другого там нет. Это железо можно использовать как 2Д но блин у него же нет отдельного пути для заброса 2Д команд ибо зачем? 2Д это как 3Д только Z=0, и шейдеры особенные(на самом деле нет). Более того, в мануале от АРМа пишется про кэш путей(pathов) и этот кэш обсчитывается на обычном процессоре. Не умеет GPU в такие алгоритмы.

Кому интересно как это работает, читать тут: https://brage.bibsys.no/xmlui/bitstream/handle/11250/252871/565821_FULLTEXT01...

К чему я это всё. Как я уже сказал выше, 2Д это 3Д только с особенными шейдерами. По сути это урезанное 3Д. То, что хотят впилить в С++20 - это урезанное 3Д. Ключевое слово - урезанное. Вам дадут в зубы API, возможности которого будут вас ограничивать. Например вы хотите нарисовать овал, но закрасить его своим шейдером, а не одним из вариантов заливки, но API вам этого не даст. Представьте что вам на OpenGL4-оборудовании вам доступен OpenGL1.4 и всё. А это на самом деле охеренное ограничение. Это только издалека кажется что херня.

Еще одна проблема: 2Д используется для отрисовки интерфейса. А интерфейс это много повторяющихся объектов. То есть pathы у них разные, но они как бы это сказать ... параметризированы. То есть обвод кнопки у вас один и тот же, а параметрами будет её положение и габариты, плюс состояние кнопки. Ну и плюс градиент из CSS. И вот тут-то происходит попадалово на производительность.

Дело в том, что GPU лучше всего рисует когда у вас объекты сгруппированы по аргументам, минимум переключений шейдера и т.д.. А как рисуется интерфейс? А там никакой группировки нет, совсем наоборот. Каждый контрол сует свои команды как будто он один на пляже. Отрисовал фон, отрисовал обвод, отрисовал текст, отрисовал иконку. Следующий отрисовал фон, отрисовал обвод, отрисовал текст, отрисовал иконку. Следующий... А хуже всего то, что если у вас надо перерисовать область, которая НЕ ИЗМЕНИЛАСЬ, то вам придется дрючить код контролов заново. Кэширование? щас. Кэш там есть, но как я выше сказал, сводится он к тому, что драйвер что-то там у себя хранит

Причем эта ситуация ВЕЗДЕ такая. Все разработчики API слизывают друг у друга одну и ту же идею. Потом её стандартизуют. И она каменеет как говно мамонта.

☆☆☆

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

Слющай, дарагой, ты чё такой нервный, а? У тэбя мама есть?

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

всё современное 2D-api это полный аналог OpenGL1.4 c fixed function. Это во времена когда железа без шейдеров не найти уже. вот эти все API придумывают люди, которые ими потом не пользуются. стартап или не стартап, но они в стандарт суют тупо говно мамонта.

ckotinko ☆☆☆
() автор топика

В стандарт плюсов добавили говна. Что в этом плохого и почему должно быть иначе?

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

Без говна плюсы утратят аутентичный запах и будут отвергнуты фанатами.

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

я когда ваши посты про С++ вижу, мне почему-то на ум приходят два слова: «паскаль» и «говно».

ckotinko ☆☆☆
() автор топика
Ответ на: комментарий от ckotinko

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

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

я предлагаю разбить API на две части:

1) предварительная подготовка командны буферов и буферов данных.

2) формирование итоговой команды на отрисовку + доп буферов данных.

это такой аналог формата SVG(1) + композитора готовых SVG(2).

дополнительно, кисть(brush) и ручка(pen) должны поддерживать не только фиксированные функции типа цвет, градиент, но и тупо шейдер (как кусочек итогового шейдера. этакий VGSL по аналогии с GLSL.

ckotinko ☆☆☆
() автор топика

некое специальное железо в GPU, которое умеет в аппаратное 2D

щито?

Как я уже сказал выше, 2Д это 3Д только с особенными шейдерами

а, понял. закусывай

upcFrost ★★★★★
()

То, что хотят впилить в С++20 - это урезанное 3Д.
Вам дадут в зубы API, возможности которого будут вас ограничивать. Например вы хотите нарисовать овал, но закрасить его своим шейдером, а не одним из вариантов заливки, но API вам этого не даст.

Canvas 2D это что по твоему? Битмап ты то же через шейдеры рисуешь?

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

А как же всякие там trident и S3 первых поколений. Ну и такие?

https://www.overclockers.ru/hardnews/14103/XGI_Volari_Z7_bez_podderzhki_trehm...

Они вроде только 2Д умеют и в офтопике была галочка - включить аппаратное ускорение. После её включения окна перетаскивались с прорисовкой содержимого плавно и не «блымали».

То что начиная с Висты уже вовсю юзался 3Д акселератор в интерфейсе - это факт.

Serg_HIS
()
Ответ на: комментарий от uin

давай ты прямо ссылку дашь на то, что имеешь ввиду.

и да, битмап идет без шейдеров только в случае блита причем без интерполяции. и только если блит явно запрошен.

ckotinko ☆☆☆
() автор топика
Ответ на: комментарий от Serg_HIS

это топик про С++20, и апи, которое будут использовать программисты в софте для десктопов и мобильного железа не сильно большой тухлости.

то что по ссылке - немного из другой оперы и опять же - оно ооооочень нишевое.

ckotinko ☆☆☆
() автор топика
Ответ на: комментарий от ckotinko

Я намекаю на то, что есть отдельные 2Д ускорители в видяхах со своим АПИ. И всё это из той оперы вобщем-то.

Что там за либу впихнули в этот Си++ и с каким она работает АПИ я не знаю. Я про существование отдельного 2Д ускорения в видяхах, который есть.

Serg_HIS
()

Каг страшно жыть

Как будто кто-то заставляет этим C++20 пользоваться, многие ещё на C++11 не перешли

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

это топик про С++20, и апи, которое будут использовать программисты в софте для десктопов и мобильного железа не сильно большой тухлости.

или не будут

Harald ★★★★★
()

А как рисуется интерфейс? А там никакой группировки нет, совсем наоборот. Каждый контрол сует свои команды как будто он один на пляже. Отрисовал фон, отрисовал обвод, отрисовал текст, отрисовал иконку.

В то время как какой-нибудь imgui делает все за несколько dip сотней-другой треугольников.

Всегда можно сделать плохо. Но почему вы считаете, что именно плохо и нужно делать?

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

Когда ПО на паскале компиляешь, проходит несколько секунд или пару минут и всё готово - можно использовать или тестить.

Все верно. Все говно, написанное на паскале, в совокупности столько и компилится. И столько же секунд в году используется.

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

Каг страшно жыть

Страшна неизвестность. Конкретно для меня, неизвестность вопроса пишет ли Скотинко на плюсах и есть ли его код в продакшне. )

Как будто кто-то заставляет этим C++20 пользоваться

Думаю, многие гиганты ити-индустрии своих кодеров заставят. Кресла-то мягкие, но дисциплина железная.

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

Конкретно для меня, неизвестность вопроса пишет ли Скотинко на плюсах и есть ли его код в продакшне. )

Конечно же пишет и есть! )

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

ну есть отдельные ускорители.

и статья написанная изнасилованным в хвост и гриву журналистов о том, какие эти ускорители крутые. и какая там якобы охеренная 2D-графика бугога. это потому что журналист, писавший это - баран не понимающий нихера в вопросе.

«для медиков, инженеров» это называется embedded. там нет нихера никакой восхитительной два-дэ графики.

сервера, тонкие клиенты тем более. это архиголимейшие затычки вместо видеокарты.

что касается «дизайнеров», то тут полное бугога. видимо изнасилование журналиста было совершено в особо извращенной форме.

ckotinko ☆☆☆
() автор топика
Ответ на: комментарий от ckotinko

Эдак тебя порвало :)

Я просто поправил что ту не всё так однозначно как многие сами себе выдумали.

К чему я это всё. Как я уже сказал выше, 2Д это 3Д только с особенными шейдерами. По сути это урезанное 3Д. То, что хотят впилить в С++20 - это урезанное 3Д

что касается «дизайнеров», то тут полное бугога

на счёт этого тоже не всё так однозначно. Были времена когда 2D Matrox Millenium. Очень даже рулил на компах полиграфистов и всяких фотошопщиков.

Сейчас конечно глупо их использовать вместо какой нибудь невидии потому как тот же фотошоп уже умеет через CUDA.

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

Были времена когда 2D Matrox Millenium

Ты бы еще ZX Spectum вспомнил. Твой пример - это сраная встройка. Там софт будет либо на GTK или Qt, либо мотиф какой, либо на нативном API либо вообще в терминале. Но точно не на новом апи из стандарта.

А теперь я внезапно напоминаю, что тред о С++20. И о ненужно в виде 2d api в стандарте. Которое ты пытаешься оправдать нишевым решением, где можно и библиотеками (той же кайрой) обойтись не корёжа стандарт.

А вот как только это попадет в стандарт, туда протопчут дорожку миллионы маленьких программистов. И люди будут приходит на собеседование, или на работу а там уже какой-то педераст применил новые фичи во все поля.

ckotinko ☆☆☆
() автор топика
Ответ на: комментарий от ckotinko

как будто сейчас педерастов только отсутствие фичи в стандарте останавливает

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

Говно написанное на плюсах вообще не работает, и аппимаге нисколько не помогает, поскольку положить в него глибц авторы ниасилили - все мозговые ресурсы ушли на инструмент для написания программы, а на саму программу ресурсов уже не было.

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

Не понимают почему тебя тка колбасит при упоминании 2D... Ну да ладно...

А что мешает пользоваться другими, сторонними либами не встроенными в этот твой Си++20? Что произойдёт.

Или тут сугубо плаканье о кросплатформенности? И самому прикручивать платформы горестно и тяжко?

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

то что вставят в стандарт потянут везде. это же стандарт. его надо реализовать в компиляторах. а значит в msvс его так или иначе сделают. и наверняка распишут какой это быстрый api. тут же набигут ракокодеры и начнут использовать.

а потом этот рак расползётся оттуда везде.

ckotinko ☆☆☆
() автор топика
Ответ на: комментарий от Harald

Каг страшно жыть
Как будто кто-то заставляет этим C++20 пользоваться

На Java же пишут, Android захватил 60% ВКонтактика.

Mirage1_
()
Ответ на: комментарий от ckotinko

при чем тут быстрый? главное чтобы хоть какой-то был, чтобы кроссплатформенный UI писать. Write once, run anywhere - теперь не только для бизнес-логики, а еще и для UI.

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

Эмулятор спектрума на лазарусе есть. А также есть удобная система система линковки бинарей: главная системная либа поставляется вместе с компилятором и имеет удобную для коммерции лицензию - лгпл с исключением для статической линковки, а не как у вас, гибрид цирка с зоопарком, надейся и жди что в системе найдётся основная либа нужной версии и правильно собрана, и полутысяча патчей прижилась как надо для конкретной программы.

Napilnik ★★★★★
()

Причем эта ситуация ВЕЗДЕ такая. Все разработчики API слизывают друг у друга одну и ту же идею. Потом её стандартизуют. И она каменеет как говно мамонта.

Всё правильно написал. Задача отрисовки интерфейса, как её делают сейчас, вообще никак не ложится на 3D железо.

То есть ложится, но для этого надо весь программный стек переколбасить.

Deleted
()
Ответ на: комментарий от stevejobs

при чем тут быстрый? главное чтобы хоть какой-то был, чтобы кроссплатформенный UI писать. Write once, run anywhere - теперь не только для бизнес-логики, а еще и для UI.

Кроссплатформенный UI — это нонсенс. «Платформа» вообще может оказаться маршрутизатором. А та, что таки оказалась с экраном, иметь какой угодно интерфейс, начиная от тупого фреймбуфера по указателю и заканчивая крайней версией OGL.

Deleted
()

мдя. точно «остапа понесло»... на какого фейхоа это в стандарте?

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

По такой логике, и кроссплатформенные функции по работе с файловой системой - нонсенс. Есть же разные файлухи, в том числе не древовидные, да и вообще устройства без файлух.

И кроссплатформенная работа с консолью нонсенс. Консоли разные, есть устройства без консолей.

И кроссплатформенная сеть нонсенс. И даже многопоточность.

ДАЕШЬ ЧИСТЫЕ В СМЫСЛЕ ХАШКЕЛЯ ФУНКЦИИ

ТОЛЬКО ХАРДКОР, ТОЛЬКО ФУНКЦИОНАЛЬНАЯ ЧИСТОТА

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

Это ситуация телеги впереди лошади.

Относительно файлухи и терминалов в индустрии есть консенсус, как формальный (тот же POSIX), так и неформальный. В UI же полный зоопарк и раздрай. Эту проблему на уровне библиотеки языка никак не решить, стек сначала должен устаканиться в реальном применении, а потом уже можно тащить его в стандарт. Иначе получится очередной велосипед с квадратными колесами, на котором все ездят и матерятся.

Deleted
()
Ответ на: комментарий от stevejobs

ДАЕШЬ ЧИСТЫЕ В СМЫСЛЕ ХАШКЕЛЯ ФУНКЦИИ

ТОЛЬКО ХАРДКОР, ТОЛЬКО ФУНКЦИОНАЛЬНАЯ ЧИСТОТА

Чистые API — было бы неплохо. Не в смысле хаскеля, конечно, а в смысле декомпозиции. Например, любой условно взятый g_strjoin() содержит нарушение уровней абстракций. Сам алгоритм является платформенно-независимым (строго определён в виде «было-стало» на уровне байт без необходимости привлечения API хоста), а то, что он выделяет память malloc()-ом — платформенно-специфично, т.к. требует наличие этого самого malloc()-а.

Идеальная декомпозиция этого API выглядела бы, например, так:

/* было: */
gchar * g_strjoin (const gchar *separator, ...);

/* стало: */
gchar * g_strjoin (realloc_t realloc, const gchar *separator, ...);

Но это, впрочем, в Си. В крестах зоопарк уровней абстракции пострашнее.

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

стек и устаканился, графика выводится примерно одинаковым сопособом вообще везде. На один компьютер можно поставить GNU/Linux, MacOS, Windows, и видеокарта будет выдавать изображение примерно одинаковым образом. Можно даже запустить на всех этих ОС кроссплатформенные игрушки с аппаратным ускорением графики, которые будут выглядеть совершенно одинаково

мир меняется слишком быстро, и все быстрей и быстрей. Например, раньше Java выпускалась каждые три года - за эти три года изменения устаканивались. Теперь скорость релизов ускорилась до раз в полгода. С C++ то же самое. Людям хочется видеть готовый рабочий продукт здесь и сейчас, а не ждать годы ради абстрактного искусства и красоты стандарта

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

мир меняется слишком быстро, и все быстрей и быстрей. Например, раньше Java выпускалась каждые три года - за эти три года изменения устаканивались. Теперь скорость релизов ускорилась до раз в полгода. С C++ то же самое. Людям хочется видеть готовый рабочий продукт здесь и сейчас, а не ждать годы ради абстрактного искусства и красоты стандарта

«Херак-херак и в продакшен.»

Не ты сутки назад создавал тему о том, что люди не хотят думать о будущем и предпочитают удобство прямо сейчас оптимальности в долгосрочной перспективе?

стек и устаканился, графика выводится примерно одинаковым сопособом вообще везде. На один компьютер можно поставить GNU/Linux, MacOS, Windows, и видеокарта будет выдавать изображение примерно одинаковым образом. Можно даже запустить на всех этих ОС кроссплатформенные игрушки с аппаратным ускорением графики, которые будут выглядеть совершенно одинаково

Даже в пределах одной ОС из этого списка существует чуть ли не десяток API (хорошо, преувеличиваю — несколько штук) вывода графики с несовместимой семантикой. А уж между платформами...

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

наверное это будет шоком, но значительная часть программистов вообще не пишет НИКАКИХ алгоритмов. От слова вообще. Сортировка - в стандартной библиотеке, да что там - скоро базовые нейросети будут в стандартной бибилиотеке

зачастую программисты все что делают - это работают с «грязными» внешими ресурсами. Отрисовывают какую-то графику, контролы в браузере, переключают регистры на внешнем оборудовании, читают инфу с датчиков и отображают на экране, итп. Типичный программист-байтоеб даже сортировку пузырьком-то с трудом напишет - она ему не нужна - он байтики в оборудовании двигает

логично что если есть какой-то супер частый случай использования языка, то его стоит стандартизировать, и потом на ресурсы разработчиков платформы (тулчейна, рантайма, итп) делать кроссплатформенные порты этой функциональности

в частности, в Java кроссплатформенный UI был чуть ли не со старта в далеком 1996 году. Даже веб-сервер там был (servlet api) как часть стандарта. Благодаря этому сейчас софт, который _действительно_ требует бескомпромиссной многоплатформенности одного и того же кода - пишется именно на Java. Благодаря этому половина серьезного ынтерпрайза сидит на Java как на основной платформе для совершенно всего - от веба до десктопной графики

это выигрышная стратегия. Последние изменения в C++ делаются в том числе с сильной оглядкой на ключевые моменты успеха Java, C# и Javascript. Можно прямо заранее предсказывать, какие следующие фичи приятнут в язык ))) Те самые, которые хочется видеть массовому потребителю языка

люди просто хотят выиграть. Стать на первую строчку популярности языков программирования, чтобы каждый школьник и каждая собака писала именно на C++, а не на богомерзких джаваскриптах и жабах

почему это вызывает у тебя такой бугурт?

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

так используй нормальный академический язык типа Haskell, или ту же супер-продуманную в плане графики Java, и всё будет хорошо!

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

Даже в пределах одной ОС из этого списка существует чуть ли не десяток API (хорошо, преувеличиваю — несколько штук) вывода графики с несовместимой семантикой. А уж между платформами...

очевидно, стандарт заставит производителя ОС и тулчейна для нее (например, Microsoft и Visual Studio) реализовать бридж между какой-то системой вывода графики и «стандартной графикой»

а если ты не реализуешь стандарт, то исключаешься из списка цивилизованных платформ и отправляешься на свалку истории

уверен, что Microsoft, Apple, RedHat, Oracle, и другие крупные игроки на рынке графических операционных систем - разобьются в пух и прах, лишь бы реализовать «стандартную графику»

олсо, вполне возможно, компании типа Microsoft и инициировали создание этой части стандарта. В рамках кампании Microsoft по подминанию под себя GNU/Linux

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

уверен, что Microsoft, Apple, RedHat, Oracle, и другие крупные игроки на рынке графических операционных систем - разобьются в пух и прах, лишь бы реализовать «стандартную графику»

Ага, особенно мелкософт и яббл. Помним, как они «стандарты» реализуют.

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

вот иногда хочется возразить, а просто лень.

мне правда лень объяснять тебе, что можно реализовать на GPU а что нельзя. и почему «композитор готовых SVG» это не композитор картинок а собиралка буфера команд. правдв лень.

ckotinko ☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.