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)

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

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

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

Эмулятор спектрума на лазарусе есть.

Ого, целого спектрума. Значит эмуляцию ps3 сделать будет гораздо проще.

А также есть удобная система система линковки бинарей:

Да, это так важно пользователю эмулятора спектрума на паскале.

Одним словом паскалеподелки нужны только персонажам с паскалем головного мозга.

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

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

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

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

...и еще они какают радугой.

Не переоценивай людей.

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

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

они в лучшем случае использовали готовое API и пытаются теперь его в стандарт вогнать. а ему решительно не хватает двух фич: шейдеров и replay lists c возможностью аргументов и это очень даже ощущается когда хочешь сделать что-то проще обычной кнопки*.

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

ну например: я хочу использовать маски при отрисовке виджета. например на виджет накладывается картинка, но я хочу сделать её в ряде мест чернобелой - подавить тон. это можно сделать маской + шейдером, который будет туда заглядывать и давить тон в зависимости от яркости маски. никакое известное мне API этого не даёт.

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

шейдеров и replay lists c возможностью аргументов

Правильно ли я понимаю что в твоем понимании лучше опираться на API/возможности OpenGL/Vulkan? Может чего посоветуешь почитать в общем смысле, чтоб в голове прояснилось, а то когда-то начинал изучать OpenGL а теперь оказывается все изменилось и надо забыть все старое и учиться по новой.

V1KT0P ★★
()

3D в С++ не нужно точно. OpenGL уже есть. 2D только такое, чтобы из него не торчали наружу кишки вроде этих ваших шейдеров.

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

Ого, целого спектрума. Значит эмуляцию ps3 сделать будет гораздо проще.

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

Да, это так важно пользователю эмулятора спектрума на паскале.

Зато он под линуксом заводится, а твои плюсоподелки в не родном дистрибутиве разъезжаются как гуано из дырявого мешка. Нормальный видеоредактор под линь плюсоманы когда изготовят?

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

...и еще они какают радугой.

Поправка.

Едят радугу и какают бабочками :)

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

умные, с огромным опытом» ни хера не понимают в графике.

А тут ты такой пришёл весь гений, которого торбит, что он не знает что есть 2Д акселераторы во всех видеокартах, и...

И что?

но я хочу сделать её...

Изучай глубже. Пиши свои либы, если не устраивают стандартные.

Чего разнылся тут на аж 2-е страницы?

Ты программист или только быдлокодервызыватель чужих функций и обплёвыватель чужого умственного труда?

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

Твои сиплюсоманы разучились и эмуляторы спектрума под линь нормальные изготовлять

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

2. Речь шла об эмуляторе ps3, написанном на паскале. Но вы, как обычно, пукнули в лужу.

- пусть сначала потренеруются «на кошках».

На каких кошках, болезный? Где эмулятор ps3 на паскале?

Зато он под линуксом заводится, а твои плюсоподелки в не родном дистрибутиве разъезжаются как гуано из дырявого мешка.

Что и где там заводится? Что умеет этот эмулятор и где его можно увидеть?

Нормальный видеоредактор под линь плюсоманы когда изготовят?

Сразу после того, как вы предоставите оный на паскале.

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

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

Есть, только он не работает или не поддерживает сразу: интерфейс с нормальным шрифтом, все самые нужные форматы образов, включая образы дискет, растягиваемость на весь или почти весь экран, джойстик. С такой фичей как окошко с экранной клавиатурой вообще всё плохо - неудобно лазить в бейсик 48 через стандартную клаву без соответствующих надписей. То есть нужно несколько собранных с миру по нитке, дополняющих друг друга увечных сборок, пользоваться которыми боль. Если бы всё было хорошо то кто бы выпускал новые версии платного эмулятора, под оффтоп, разумеется;)

2. Речь шла об эмуляторе ps3, написанном на паскале.

У тебя шла, но у тебя альтернативное мнение, которое никто вменяемый не разделяет. Предъявите вообще где-нибудь вменяемую реализацию эмулятора ps3 или обоснование, зачем нужно покупать ps3 железо чтобы писать его эмулятор. Про писательство эмуляции железа, которым не пользовался - рассказывай археологам.

На каких кошках, болезный?

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

Где эмулятор ps3 на паскале?

Сначала предъяви обоснование что ps3 круто и его стоит эмулировать. У фанатов цпп очевидно что это обоснование есть, но они им с фанатами других языков не делятся. У паскалистов компилятор не требует наличия высокопроизводительного железа, соответственно, оно не обязано быть мощнее ps3, так зачем тогда вкладываться баблом в приставку, значимые эксклюзивы которой трудно даже вспомнить?

Что и где там заводится? Что умеет этот эмулятор и где его можно увидеть?

http://www.emu-land.net/computers/zx_spectrum/emuls/windows Обычная альфа, как и куча других, зато включается, а если понравится, то всегда есть возможность поправить в коде, в отличии от.

Сразу после того, как вы предоставите оный на паскале.

Вас больше, с вас и спрос больше. Сначала предоставь свободный репозиторий для линуксов, а потом уже требуй чтобы под платформу, заточенную под коммерческие ц/цпп приложения свободные разработчики писали.

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

Я не гений. Я просто об эту графику долбался несколько лет.

Когда-то захотел сделать свой майнкрафт(это было в моде), но с роботами. Оказалось что просчет сттолкновений это дохера сложная задача, и я сел её оптимизировать. Я заявляю и могу это подтвердить что я разработал алгоритм вычисления времени до столкновения двух кубов(без учета вращения-ибо см ниже), который теоретически хорошо ложится на SSE2- 6 инструкций всего. Против хуевой тучи кода + 19 проверок в обычном алгоритма. С вращением задача становится итерационной.

Идея там была в том, что если два невращающихся куба сближаются, то не обязательно сравнивать все грани - знак компонентов вектора скорости XOR знак разницы координат центров показывает нам, надо ли проводить отсечку по этой координате. А если не надо, то можно оперировать модулями. Самая ближняя точка выбирается просто сложением по модулю всех столбцов матрицы поворота. Я даже сделал алгоритм который делает эти проверки иерархически. Раз в блоке кубов все кубы повернуты одинаково, то мы можем вычисления координат «ближайшей точки куба» вынести за скобку, и получаем в итоге те самые 6 операций SSE и одна проверка в итоге на все три оси скопом - маска полученная через MOVMSKPS в трех нижних битах дает ответ на все вопросы. Но тут выяснилось, что процессоры на таком коде начинают свирепо посасывать, а на оптимизации можно мозг сломать. Плюс далее для continous collision detection с задача оптимизации становится убийственной по сложности. А если сюда добавить вращение а значит итерации...короче нереально.

При этом по отдельности алгоритм оставался тривиальным и быстрым. Всё «ложилось» именно на производительности в целом. Поэтому я стал думать в сторону FPGA откуда собственно и родилась идея сделать свой процессор, на котором можно закодать сложный алгоритм из простых кусочков не разрывая себе мозг. А потом он постепенно вырос из FPGA и оформился уже в идею как это сделать «в железе». Паралелльно я читал книжки, патенты всякие подлые, и вообще изучал как реально рисуется 3Д и 2Д.

Поэтому я могу тут выходить и высказывать свою точку зрения на то, как надо делать графику а как не надо.

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

Конкретно про графику я уже выше писал.

Дело в том, что переключения шейдеров в случае 2Д на GPU приводят к паузам между работой разных шейдеров, сливу буферов, потере кэшей и т.д.

Еще одна интересная хитрость: отрисовка текста может на шейдерах идти быстрее чем как сейчас делают: а именно пилят кэш глифов, копируют его в текстуру(бдыщь implicit синхронизацией на glTextSubImage2D по наглой жопе!). и трятят кучу памяти в сравнении с distance-field подходом.

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

Есть, только он не работает или не поддерживает сразу:

Ну понятно, как обычно пук в лужу.

У тебя шла, но у тебя альтернативное мнение, которое никто вменяемый не разделяет.

Болезный, это вы завели о нем речь.

Это ты больной, как прыщ выскакиваешь в любой теме, где говорят про хронические недостатки плюсов.

Нет, это вы в по поводу, а чаще без, пытаетесь рассказать про паскаль.

Сначала предъяви обоснование что ps3 круто и его стоит эмулировать.

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

http://www.emu-land.net/computers/zx_spectrum/emuls/windows

И какой из них написан на паскале? Какой из них поддерживает хотя бы linux, macos, windows, android?

Вас больше, с вас и спрос больше.

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

Сначала предоставь свободный репозиторий для линуксов, а потом уже требуй чтобы под платформу, заточенную под коммерческие ц/цпп приложения свободные разработчики писали.

Какой репозиторий, болезный?

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

Дело в том, что переключения шейдеров в случае 2Д на GPU приводят к паузам между работой разных шейдеров, сливу буферов, потере кэшей и т.д.

А в 3D это не приводит к тормозам? Кроме того, вы забыли про переключение текстуры - оно очень ресурсоемкое, поэтому и делают атласы/мегатекстуры (в офлайне или онлайне).

и трятят кучу памяти в сравнении с distance-field подходом.

Если речь о signed distance field, то ему для глифа нужно больше места, плюс нужно время для размытия этого глифа. Но да, зато хорошо масштабируется, вращается, есть возможность «бесплатного» добавления окантовки.

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

Ну понятно, как обычно пук в лужу.

Ты не пукай а предоставь нормальное изделие а не набор уродцев на С/С++

Нет, это вы в по поводу, а чаще без, пытаетесь рассказать про паскаль.

У тебя склероз. Воспользуйся поиском и посмотри кто первый произнёс в этой теме это слово, и тутже ты как прыщ на заднице нарисовался со своими претензиями.

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

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

И какой из них написан на паскале? Какой из них поддерживает хотя бы linux, macos, windows, android?

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

Ну так это очевидно, что больше. Говноеды уже почти все вымерли или осознали, что паскаль говно.

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

Какой репозиторий, болезный?

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

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

Ты не пукай а предоставь нормальное изделие а не набор уродцев на С/С++

Я так понимаю, что и этот высер вы сделали из-под ОС, написанной на паскале, в браузере, написанном на паскале. Можно узнать названия этой ОС и этого браузера?

У тебя склероз. Воспользуйся поиском и посмотри кто первый произнёс в этой теме это слово, и тутже ты как прыщ на заднице нарисовался со своими претензиями.

Нет, болезный, это вы свой паскаль суете не к месту. Это у вас постоянные претензии к плюсам: C++20 и 2D Graphics и изнасилования трупов (комментарий)

На дельфях виндовый скайп сделали и довели до ума, до сих пор работает,

Морда была на каком-то дельфи, ядро на плюсах. Либы, которые использует скайп на сях.

почти тоже самое и с фотожопом,

Что тоже, болезный?

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

Судить о всем многообразии ПО по одному ущербному мессенджеру - это удел персонажей с паскалем головного мозга.

Читай, там написано.

То бишь вы не в состоянии даже дать линк на приложение, к которому апеллируете?

Разрешаю даже скачать и глянуть в код, если ты в отсутствии антивируса не боишься распаковывать в линуксе архивы:)))))

Как давно вас осматривал доктор?

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

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

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

1. Покажите мне любой линуксовый репозиторий, где есть такие требования.
2. Как это вообще соотносится с темой разговора о ПО, написанном на паскале?

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