Forwarded from Selectel Team
Они смеялись в лицо выгоранию...
И правильно делали 😎
Помимо докладов, на Selectel Day Off мы приготовили несколько зон притяжения — рассказываем про одну из них.
🎤 IT Open Mic — стендап от айтишников для айтишников. Нет, не тот утренний скрам-стендап с командой. Ребята приготовили честные сторителлинги про жизнь и работу в IT, которые отзовутся каждому.
Шуток много не бывает, а до Day Off еще 12 дней! Кидай в комменты любимый мем про работу и ставь реакции лучшим🔥
➿ ➿ ➿ ➿ ➿ ➿ ➿ ➿ ➿ ➿
Подробнее про Selectel Day Off рассказываем в канале Selectel Events — переходи, чтобы узнать больше.
Помимо докладов, на Selectel Day Off мы приготовили несколько зон притяжения — рассказываем про одну из них.
🎤 IT Open Mic — стендап от айтишников для айтишников. Нет, не тот утренний скрам-стендап с командой. Ребята приготовили честные сторителлинги про жизнь и работу в IT, которые отзовутся каждому.
Шуток много не бывает, а до Day Off еще 12 дней! Кидай в комменты любимый мем про работу и ставь реакции лучшим🔥
Подробнее про Selectel Day Off рассказываем в канале Selectel Events — переходи, чтобы узнать больше.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12💘1
🔥 Внимание, сенсация! Google добавил ИИ в new Date()!
Клод Сонне, ведущий инженер V8
Пример работы нового API:
Если вы дочитали до сюда, вы великолепны! что там на самом деле:
1. Любой мусор до цифр — пропускается
"В какой день Валенсия и Барселона сыграли" → игнорируется (как в коде V8: "any garbage is allowed").
Первые две цифры (2-3) → месяц-день
Автоматически превращается в 02-03 (или 03-02, если вы живёте в EN локали).
2. Год — 2001 (потому что «логично же»)
3. Вопросительный знак — это «для атмосферы» ?, !, ... — всё съедается, как пробелы.
Бонусом экзестенциальная драма:
"Функционал проверялся только в Chrome. В остальных браузерах возможно Invalid Date, потому что они 'не понимают искусства'."
P.S. Temporal API в ярости.
"Мы долго думали, как сделать new Date() удобнее для новичков. Temporal API — это, конечно, круто, но зачем учить новые методы, если можно просто... спросить дату как у друга? Поэтому мы тайно обучили ИИ парсить любые текстовые запросы. Ну почти любые. Главное — верить в магию!"
Клод Сонне, ведущий инженер V8
Пример работы нового API:
new Date("В какой день Валенсия и Барселона сыграли 2-3?");
// Sat Feb 03 2001 00:00:00 GMT+...Если вы дочитали до сюда, вы великолепны! что там на самом деле:
1. Любой мусор до цифр — пропускается
"В какой день Валенсия и Барселона сыграли" → игнорируется (как в коде V8: "any garbage is allowed").
Первые две цифры (2-3) → месяц-день
Автоматически превращается в 02-03 (или 03-02, если вы живёте в EN локали).
2. Год — 2001 (потому что «логично же»)
3. Вопросительный знак — это «для атмосферы» ?, !, ... — всё съедается, как пробелы.
Бонусом экзестенциальная драма:
new Date("Когда я родился? я помню что в 12-10, (но мама говорит, что это было поздно ночью)");
// Mon Dec 10 2001 00:00:00 GMT+..."Функционал проверялся только в Chrome. В остальных браузерах возможно Invalid Date, потому что они 'не понимают искусства'."
P.S. Temporal API в ярости.
🤪12😭4🤝3😁2💘1
Media is too big
VIEW IN TELEGRAM
Вчера подвергся дополнительной мотивации
Иногда фоном смотрю стримы по Tesera, в которой сейчас пишу графику и решили мы поправить баг с тем, что свет от факела в руке был привязан к камере а не к игроку. Погрузился в код, разбираюсь. Так тут кажется что-то не передается, а здесь вообще условие не обработано... И тут слышу на стриме:
— Блин, да у них свет от факела к камере привязан, невозможно бегать с видом от 3-го лица в темноте
— Да, погоди, уже разбираюсь, говорю я
— Не, ну это совсем не удобно конечно
— Да-да, я согласен, уже правлю
— Хотя может они это для оптимизации сделали, знаете там наверное расчеты еще одного источника света нагружают, а у них же браузер...
— Да какая оптимизация! Это баг, я правлю прямо сейчас!
Так и доделал все быстро)
PS запись стрима вот: https://www.youtube.com/live/I7LwXvcDgak, где этот момент был не вспомню)
Иногда фоном смотрю стримы по Tesera, в которой сейчас пишу графику и решили мы поправить баг с тем, что свет от факела в руке был привязан к камере а не к игроку. Погрузился в код, разбираюсь. Так тут кажется что-то не передается, а здесь вообще условие не обработано... И тут слышу на стриме:
— Блин, да у них свет от факела к камере привязан, невозможно бегать с видом от 3-го лица в темноте
— Да, погоди, уже разбираюсь, говорю я
— Не, ну это совсем не удобно конечно
— Да-да, я согласен, уже правлю
— Хотя может они это для оптимизации сделали, знаете там наверное расчеты еще одного источника света нагружают, а у них же браузер...
— Да какая оптимизация! Это баг, я правлю прямо сейчас!
Так и доделал все быстро)
PS запись стрима вот: https://www.youtube.com/live/I7LwXvcDgak, где этот момент был не вспомню)
❤12😁8🔥1
В CSS появились ветвления
Не так давно обнаружил, что уже 2 месяца как в обычном Chrome работает функция if() в CSS (статья на MDN)
Теперь можно делать так:
или так:
ну и вообще это скорее напоминает множественную if...else конструкцию:
Ну и не обошлось без веселого, можно использовать сколько угодно else, но выполнится только первый, все условия после него игнорируются:
Кажется для достижения полноты по Тьюрингу осталось только завести смену состояния, чтобы стать полноценным языком программировния. Но если добавить чекбокс, то и эта проблема уходит и можно написать свой Сапер на CSS.
Не так давно обнаружил, что уже 2 месяца как в обычном Chrome работает функция if() в CSS (статья на MDN)
Теперь можно делать так:
div {
margin: if(media(width > 700px): 0 auto;)
}
/* if(<if-condition> : <value>) */или так:
div {
color: if(
supports(color: lch(77.7% 0 0)): 3px solid lch(77.7% 0 0);
else: 3px solid #c0c0c0;
)
}ну и вообще это скорее напоминает множественную if...else конструкцию:
padding: if(
media(width < 480px), 20px;
media(width < 960px), 40px;
media(width < 1200px), 80px;
else: 0px;
)
Ну и не обошлось без веселого, можно использовать сколько угодно else, но выполнится только первый, все условия после него игнорируются:
div {
background: if(
style(--scheme: ice): white;
else: green;
style(--scheme: fire): orange;
else: red;
);
}Кажется для достижения полноты по Тьюрингу осталось только завести смену состояния, чтобы стать полноценным языком программировния. Но если добавить чекбокс, то и эта проблема уходит и можно написать свой Сапер на CSS.
🔥10😈3😱1💘1
This media is not supported in your browser
VIEW IN TELEGRAM
Доделали портал для Tesera
В этом посте я показал первую версию того что было сделано, теперь добавился вид выключенного портала, где анимации замедлены и добавлено мерцание.
Все анимации, размеры, скорости выглядят случайно, но на самом деле тут кроется одна особенность шейдеров: в них нет функции random чтобы получить случайное значение. Как же быть?
1. Идеальный шум
Обычно создаются функции шума на основе координат и времени, где складываются синусы, умножается на простые числа, откидывается целая часть числа... Короче если постоянно вызывать синус можно рано или поздно построить модель нового мира.
2. Числа Цикады
То есть нужны любые простые числа, которые делятся только на 1 и самого себя, кроме 1. Умножая разные волны и шумы на эти числа мы получаем с виду случайные последовательности, циклы которых не совпадают и не идут синхронно.
В этом посте я показал первую версию того что было сделано, теперь добавился вид выключенного портала, где анимации замедлены и добавлено мерцание.
Все анимации, размеры, скорости выглядят случайно, но на самом деле тут кроется одна особенность шейдеров: в них нет функции random чтобы получить случайное значение. Как же быть?
1. Идеальный шум
Обычно создаются функции шума на основе координат и времени, где складываются синусы, умножается на простые числа, откидывается целая часть числа... Короче если постоянно вызывать синус можно рано или поздно построить модель нового мира.
2. Числа Цикады
Числа цикад, о которых идёт речь, это 13 и 17. Эти числа являются простыми и представляют собой циклы развития некоторых видов периодических цикад в Северной Америке. Цикл в 13 или 17 лет позволяет этим цикадам избегать синхронизации с циклами развития хищников, которые обычно имеют более короткие жизненные циклы.
То есть нужны любые простые числа, которые делятся только на 1 и самого себя, кроме 1. Умножая разные волны и шумы на эти числа мы получаем с виду случайные последовательности, циклы которых не совпадают и не идут синхронно.
🔥13❤🔥3💘1
This media is not supported in your browser
VIEW IN TELEGRAM
Наглядный Computer science в работах Sam Rose
Наткнулся на сайт с визуализациями разных алгоритмов и подробным объяснением как они работают: балансировка нагрузки сервера, очереди, хеширование... Сделано красиво, с любовью и заботой.
https://samwho.dev
Наткнулся на сайт с визуализациями разных алгоритмов и подробным объяснением как они работают: балансировка нагрузки сервера, очереди, хеширование... Сделано красиво, с любовью и заботой.
https://samwho.dev
🔥15❤🔥4👍1💘1
Такую водичку и в блоге показать не стыдно
Пока на улице жаркое лето, провел последнюю неделю у воды, в воде и под водой: изучил что такое каустика, прибрежная пена, водный туман, особенности освещения в воде. Все это как обычно раз в неделю выкладывается в релизах Tesera.
Как не странно, самая долгая и сложная часть тут — согласовать цвет и свет со всем что у же есть в игре. Я пишу алгоритм, вывожу переменные цветов (каустика не белая кстати, там несколько цветов как по учебнику оптики соединяются в одной точке и образуют белый пересвет). Далее с этими переменными работают ребята, меняют, смотрят. Потом свой строгий взгляд на это все кидает Ваня, ужасается что у нас добавилось 10 умножений. Мы вместе пробуем найти как сделать наиболее оптимальный алгоритм.
Когда-нибудь я напишу пост о том как готовят перформанс там где его толком нереально замерить — в шейдерах WebGL/WebGPU.
Пока на улице жаркое лето, провел последнюю неделю у воды, в воде и под водой: изучил что такое каустика, прибрежная пена, водный туман, особенности освещения в воде. Все это как обычно раз в неделю выкладывается в релизах Tesera.
Как не странно, самая долгая и сложная часть тут — согласовать цвет и свет со всем что у же есть в игре. Я пишу алгоритм, вывожу переменные цветов (каустика не белая кстати, там несколько цветов как по учебнику оптики соединяются в одной точке и образуют белый пересвет). Далее с этими переменными работают ребята, меняют, смотрят. Потом свой строгий взгляд на это все кидает Ваня, ужасается что у нас добавилось 10 умножений. Мы вместе пробуем найти как сделать наиболее оптимальный алгоритм.
Когда-нибудь я напишу пост о том как готовят перформанс там где его толком нереально замерить — в шейдерах WebGL/WebGPU.
❤18🔥17💘3
Стендап про жизнь с двумя детьми
Тяжело готовить стендап очень тяжело, весь текст надо много раз переписать, выучить наизусть, ничего не забыть) Благо у нас был отличный ревьюер наших текстов: питерский комик Алексей Полубояров.
После стендапа впал в апатию, как будто осознал все сложности о которых рассказал, а вы просто посмейтесь)
https://www.youtube.com/watch?v=ba8FAk3mCZk
За запись спасибо Тимуру, его выступление тут
Тяжело готовить стендап очень тяжело, весь текст надо много раз переписать, выучить наизусть, ничего не забыть) Благо у нас был отличный ревьюер наших текстов: питерский комик Алексей Полубояров.
После стендапа впал в апатию, как будто осознал все сложности о которых рассказал, а вы просто посмейтесь)
https://www.youtube.com/watch?v=ba8FAk3mCZk
За запись спасибо Тимуру, его выступление тут
YouTube
Жизнь итишника с двумя детьми, стендап
Мой ТГ канал: korotaev_to_hard
🔥16💘4
JSON.stringify стал быстрее в V8
В Chrome 138 и выше обещают ускорение JSON.stringify в 2 раза (JSON.parse остался таким же, потому простейший deep clone все еще не ускорен).
Есть несколько подводных камней:
— кириллица и другие символы Unicode делают парсер медленнее
— лучше всего сериализуются массивы одинаковых по типу объектов
— нельзя патчить прототипы объектов
— аргументы replacer и space должны быть пустыми
результаты взяты из бенчмарка JetStream 2.0
https://v8.dev/blog/json-stringify
В Chrome 138 и выше обещают ускорение JSON.stringify в 2 раза (JSON.parse остался таким же, потому простейший deep clone все еще не ускорен).
Есть несколько подводных камней:
— кириллица и другие символы Unicode делают парсер медленнее
— лучше всего сериализуются массивы одинаковых по типу объектов
— нельзя патчить прототипы объектов
— аргументы replacer и space должны быть пустыми
результаты взяты из бенчмарка JetStream 2.0
https://v8.dev/blog/json-stringify
🔥11❤2💘1
Четвертый важнейший обман игровой индустрии
Третья часть тут
Разработчики игр — люди хитрые. Они хотят много денег, но при этом не хотят делать лишнюю работу. Например, доделывать задний план. Нельзя же просто так взять и показать игрокам голые LOD-модели и пустые локации! Надо замаскировать это чем-то красивым — например, туманом.
И ведь не просто туманом, а сеттинговым. В Silent Hill — чтобы было жутко, в Skyrim — чтобы казалось эпично, а в мобильных играх — чтобы скрыть, что там вообще ничего нет.
Но туман — это вам не картинка с домом, которой в России зашивают обветшалые фасады перед приездом начальства. Если бы всё было так просто, можно было бы накидать кучу полупрозрачных частиц и сказать: «Вот, смотрите, как в жизни!»
Но нет. На пути встаёт главный босс оптимизации — Overdraw.
💀 Overdraw: когда пиксели страдают
Overdraw — это когда ваш GPU рисует одно и то же по сто раз. Сначала небо, потом лес с миллионом листьев, потом 15 слоёв «атмосферного» тумана, а сверху ещё дождь накинуть — для «реализма».
Почему так происходит?
Потому что если пиксель хоть чуть-чуть прозрачный, видеокарта думает:
«Ага, тут можно ещё что-то подмешать!» — и начинает искать, что бы туда ещё запихнуть.
Это как хитрый арендатор, который, если видит, что хозяин квартиры доверчивый, сразу подселяет 8 братьев, 30 друзей «на прописку» и они все шумят так громко, что соседние пиксели не успеваютвыспаться отрендериться до следующего кадра. То есть, уменьшается Fillrate — количество нарисованных пикселей в секунду.
1. 🎅 Самый простой способ: туман в каждом шейдере (дедовский метод)
Разработчики не хотят бороться с overdraw, поэтому обманывают заранее. Они говорят шейдеру:
«Если пиксель далеко — начинай смешивать его с цветом тумана, пока он совсем не исчезнет».
Плюсы:
✔️ Дешево (даже WebGL 1.0 потянет).
✔️ Не требует сложной магии.
Минусы:
❌ Выглядит как «пластиковый» туман из 2000-х.
❌ Типичная ошибка — забыть добавить туман в новый объект.
❌ Не светится, не клубится и вообще не умеет в «вау».
Где встречается?
— В мобилках (где «и так сойдёт»).
— В WebGL (потому что альтернативы всё равно нет).
— В психологическом трюке под названием «это стилизация».
2. 🌫 Постобработка (Post-process Fog)
«Давайте просто возьмём буфер глубины и нарисуем туман поверх всей сцены!»
Плюсы:
✔️ Красиво (можно сделать плавные переходы).
✔️ Универсально (работает даже с частицами).
Минусы:
❌ Требует доступа к глубине (в WebGL — боль).
❌ Если на пути рендера встречается вода, то привет второй туман, с отдельным буфером
❌ Если объекты не в глубине (например иконки над персонажами) — будут артефакты.
3.💡 Объёмный туман (Volumetric Fog)
«Давайте симулировать реальное рассеяние света!»
я ранее затрагивал тему реализации в прошлом посте. Техника столь прожорлива, что используется только там где это необходимо, например авиасимуляторы.
Плюсы:
✔️ Очень красиво (лучи, подсветка, атмосфера).
Минусы:
❌ Жрёт FPS как голодный RTX 4090.
❌ В WebGL нереализуем без хаков.
—————————
🎉 Вывод: кто победил в этой войне?
Ленивые разработчики — потому что туман всё равно скрывает их костыли.
Геймеры — потому что красивый туман = атмосфера.
Видеокарты — потому что им платят за страдания.
Третья часть тут
Разработчики игр — люди хитрые. Они хотят много денег, но при этом не хотят делать лишнюю работу. Например, доделывать задний план. Нельзя же просто так взять и показать игрокам голые LOD-модели и пустые локации! Надо замаскировать это чем-то красивым — например, туманом.
И ведь не просто туманом, а сеттинговым. В Silent Hill — чтобы было жутко, в Skyrim — чтобы казалось эпично, а в мобильных играх — чтобы скрыть, что там вообще ничего нет.
Но туман — это вам не картинка с домом, которой в России зашивают обветшалые фасады перед приездом начальства. Если бы всё было так просто, можно было бы накидать кучу полупрозрачных частиц и сказать: «Вот, смотрите, как в жизни!»
Но нет. На пути встаёт главный босс оптимизации — Overdraw.
💀 Overdraw: когда пиксели страдают
Overdraw — это когда ваш GPU рисует одно и то же по сто раз. Сначала небо, потом лес с миллионом листьев, потом 15 слоёв «атмосферного» тумана, а сверху ещё дождь накинуть — для «реализма».
Почему так происходит?
Потому что если пиксель хоть чуть-чуть прозрачный, видеокарта думает:
«Ага, тут можно ещё что-то подмешать!» — и начинает искать, что бы туда ещё запихнуть.
Это как хитрый арендатор, который, если видит, что хозяин квартиры доверчивый, сразу подселяет 8 братьев, 30 друзей «на прописку» и они все шумят так громко, что соседние пиксели не успевают
1. 🎅 Самый простой способ: туман в каждом шейдере (дедовский метод)
Разработчики не хотят бороться с overdraw, поэтому обманывают заранее. Они говорят шейдеру:
«Если пиксель далеко — начинай смешивать его с цветом тумана, пока он совсем не исчезнет».
Плюсы:
✔️ Дешево (даже WebGL 1.0 потянет).
✔️ Не требует сложной магии.
Минусы:
❌ Выглядит как «пластиковый» туман из 2000-х.
❌ Типичная ошибка — забыть добавить туман в новый объект.
❌ Не светится, не клубится и вообще не умеет в «вау».
Где встречается?
— В мобилках (где «и так сойдёт»).
— В WebGL (потому что альтернативы всё равно нет).
— В психологическом трюке под названием «это стилизация».
2. 🌫 Постобработка (Post-process Fog)
«Давайте просто возьмём буфер глубины и нарисуем туман поверх всей сцены!»
Плюсы:
✔️ Красиво (можно сделать плавные переходы).
✔️ Универсально (работает даже с частицами).
Минусы:
❌ Требует доступа к глубине (в WebGL — боль).
❌ Если на пути рендера встречается вода, то привет второй туман, с отдельным буфером
❌ Если объекты не в глубине (например иконки над персонажами) — будут артефакты.
3.💡 Объёмный туман (Volumetric Fog)
«Давайте симулировать реальное рассеяние света!»
я ранее затрагивал тему реализации в прошлом посте. Техника столь прожорлива, что используется только там где это необходимо, например авиасимуляторы.
Плюсы:
✔️ Очень красиво (лучи, подсветка, атмосфера).
Минусы:
❌ Жрёт FPS как голодный RTX 4090.
❌ В WebGL нереализуем без хаков.
—————————
🎉 Вывод: кто победил в этой войне?
Ленивые разработчики — потому что туман всё равно скрывает их костыли.
Геймеры — потому что красивый туман = атмосфера.
Видеокарты — потому что им платят за страдания.
❤9💘1
Forwarded from CodeFest'15 | 31 мая — 1 июня 2025
Frontend-доклады с CodeFest — опыт от ведущих специалистов из индустрии и новые идеи. Говорили про универсальные вещи — архитектуру веб-приложений, производительность, безопасность и доступность и копали глубже — в WebGL, Web Vitals, AI и работу с видео. Первая часть докладов:
➖ Олег Мохов. Прогрессивный HTML →
YouTube | RuTube | VK Video
➖ Григорий Тищенко. AI-ассистенты: как начать использовать сегодня, а не с понедельника (и не бросить после релиза) →
YouTube | RuTube | VK Video
➖ Дарья Двуреченская. Как защитить свой фронтенд: уроки крупнейших взломов 2024 года →
YouTube | RuTube | VK Video
➖ Александр Коротаев. WebGL Cookbook →
YouTube | RuTube | VK Video
➖ София Валитова. Деревья и коробки →
YouTube | RuTube | VK Video
➖ Вадим Дворовенко. Локализация приложения глазами переводчика →
YouTube | RuTube | VK Video
➖ Роман Ахмадуллин. Web Vitals: что это и как мы их собираем →
YouTube | RuTube | VK Video
YouTube | RuTube | VK Video
YouTube | RuTube | VK Video
YouTube | RuTube | VK Video
YouTube | RuTube | VK Video
YouTube | RuTube | VK Video
YouTube | RuTube | VK Video
YouTube | RuTube | VK Video
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍3💘1
Chrome 139 убил рендеринг на CPU. И это правильно
Знакомьтесь: SwiftShader — самая незаметная, но опасная технология в вашем браузере. О ней не пишут в новостях, её не знают нейросети, я сам последний раз видел ее году в 2010-м кажется, но хакеры могли её обожать.
Что это вообще было?
Представьте: ваш ноутбук — древний кирпич без нормальной видеокарты. Вы открываете 3D-сайт, и… он работает! Как? Браузер тихонько подменял GPU на SwiftShader — софтверную эмуляцию графики через CPU. Медленно? Конечно. Зато хоть что-то.
Почему Chrome его выпилил?
Потому что это была бомба замедленного действия:
— SwiftShader JIT-компилировал шейдеры в машинный код CPU прямо в процессе GPU.
— Достаточно было подсунуть хитро сгенерированную строку шейдера в JS и можно было читать память процесса (а то и выполнить свой код).
— Chrome уже изолирует GPU-процесс, но SwiftShader делал эту защиту дырявой.
Что теперь?
— Linux/macOS: Нет GPU → нет WebGL. Точка.
— Windows: SwiftShader остался только для «особых» видеокарт из чёрного списка (спасибо, Microsoft).
А другие браузеры?
— Firefox тоже сворачивает поддержку.
— Safari никогда не любил софтверный рендеринг.
— Edge (как хороший клон Chrome) повторяет эти шаги.
Вывод: Google предпочёл безопасность вместо совместимости. И, кажется, это правильный выбор — WebGL без GPU в 2024 году всё равно был атавизмом.
https://support.google.com/chrome/a/answer/7679408?sjid=8592446715374796731-EU#chromeBrsrJ139
Знакомьтесь: SwiftShader — самая незаметная, но опасная технология в вашем браузере. О ней не пишут в новостях, её не знают нейросети, я сам последний раз видел ее году в 2010-м кажется, но хакеры могли её обожать.
Что это вообще было?
Представьте: ваш ноутбук — древний кирпич без нормальной видеокарты. Вы открываете 3D-сайт, и… он работает! Как? Браузер тихонько подменял GPU на SwiftShader — софтверную эмуляцию графики через CPU. Медленно? Конечно. Зато хоть что-то.
Почему Chrome его выпилил?
Потому что это была бомба замедленного действия:
— SwiftShader JIT-компилировал шейдеры в машинный код CPU прямо в процессе GPU.
— Достаточно было подсунуть хитро сгенерированную строку шейдера в JS и можно было читать память процесса (а то и выполнить свой код).
— Chrome уже изолирует GPU-процесс, но SwiftShader делал эту защиту дырявой.
Что теперь?
— Linux/macOS: Нет GPU → нет WebGL. Точка.
— Windows: SwiftShader остался только для «особых» видеокарт из чёрного списка (спасибо, Microsoft).
А другие браузеры?
— Firefox тоже сворачивает поддержку.
— Safari никогда не любил софтверный рендеринг.
— Edge (как хороший клон Chrome) повторяет эти шаги.
Вывод: Google предпочёл безопасность вместо совместимости. И, кажется, это правильный выбор — WebGL без GPU в 2024 году всё равно был атавизмом.
https://support.google.com/chrome/a/answer/7679408?sjid=8592446715374796731-EU#chromeBrsrJ139
🔥11❤5💘2👍1