LifeEXE | Unreal Engine | CG
2.1K subscribers
566 photos
810 videos
715 links
Download Telegram
▶️ Всем привет, всем привет! ▶️

Непостоянная рубрика: Воскресный C++ 🦊

➡️Raw String Literals: префикс R

📕 Полноценная статья доступна для подписчиков Boosty и Patreon


Raw String Literals (префикс R)
— это необработанные строковые литералы (raw string literals), появившиеся в C++11.

Внутри R"(...)" все символы интерпретируются буквально — не нужно экранировать специальные символы и переносы строк ⬇️
R"(HelloWorld)" // Базовый синтаксис
R"delimiter(HelloWorld)delimiter" // С delimiter


⁉️ ЗАЧЕМ ЭТО НУЖНО ⁉️

1️⃣ РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ

const std::regex pattern("\\d{3}-\\d{2}-\\d{4}");
const std::regex pattern(R"(\d{3}-\d{2}-\d{4})");


2️⃣ МНОГОСТРОЧНЫЙ JSON

const auto config = R"({
"server": {
"host": "localhost",
"port": 8080
},
"debug": true
})"s;


3️⃣ ПУТИ WINDOWS

const auto path1 = "C:\\Program Files\\MyApp\\config.ini"s;
const auto path2 = R"(C:\Program Files\MyApp\config.ini)"s;


✔️ Raw string literals — это compile-time фича. Все три варианта генерируют ИДЕНТИЧНЫЙ машинный код ➡️

const auto s1 = "hello\\nworld"s;
const auto s2 = R"(hello\nworld)"s;
const auto s3 = std::string("hello\\nworld");


⚠️ ВАЖНО: R"(\n)" — это буквально два символа \ и n, а не перенос строки!

💡 Предыдущая статья «Типизация и применение std::string_literals в современном C++»

📕 Больше информации, ньюансов и примеров со ссылками на Compiler Explorer в полноценной статье на Boosty и Patreon


🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | LifeEXE School | Itch | X | Wiki | Курс по UE

#cpp #tips_and_tricks #code #lifeexe #lifeexecode #lifeexeEDU
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥3111🦄7👍2
▶️ Всем привет, всем привет! ▶️

Непостоянная рубрика: C++ по понедельникам 🦊

➡️std::string_view — легковесный взгляд на строки

📕 Полноценная статья доступна для подписчиков Boosty и Patreon


std::string_view — это легковесный неизменяемый объект из C++17, который смотрит на строковые данные, не владея ими. Внутри это просто указатель и размер.

⁉️ ЗАЧЕМ ЭТО НУЖНО ⁉️

1️⃣ Универсальность без копий

Одна функция принимает любые строковые типы без аллокаций ➡️
void printLength(std::string_view sv)
{
std::println("Length: {}", sv.size());
}

int main()
{
using namespace std::string_view_literals;

printLength("hello");
printLength("world"s);
printLength("raw string"sv);
}


2️⃣ Подстроки без выделения памяти

substr у string_view не копирует строку — просто создаёт новый «вид» с другим указателем и длиной ➡️
std::string_view text = "one,two,three";

process(text.substr(0, 3)); // 0 аллокаций
process(text.substr(4, 3)); // 0 аллокаций
process(text.substr(8, 5)); // 0 аллокаций

// std::string::substr() — каждый вызов выделяет память!


‼️ Для тех, кто хочет поддержать канал — можно приобрести коллекции со статьями по строками в современном C++ и вообще все статьи по ссылкам ➡️

🟢 Boosty — cтроки в современном C++
🟢 Patreon — cтроки в современном C++

🟢 Boosty — все статьи по C++ и Unreal Engine
🟢 Patreon — все статьи по C++ и Unreal Engine

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | Курс по UE

#cpp #tips_and_tricks #code #lifeexe #lifeexecode #lifeexeEDU
Please open Telegram to view this post
VIEW IN TELEGRAM
1122🔥14👍7🦄2
😂 Всем пятничный йоу! 😂

Поколение вайбкодеров на подходе — более 3 тысяч лайков у этого поста прямо пугает ➡️

🔗 https://x.com/adxtyahq/status/2042930485949767693

Это буквально определение из стандарта C/C++ (C11 §6.5.2.1) ➡️

The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2)))

Просто LOL

🔴 Выложил картинку. Типы не указал (имя переменной arr не в счёт). Поздравляем — для std::vector это работать не будет, поскольку vec[i] — это вызов метода vec.operator[](i)

Парочка ещё более шокирующих новостей для твиторских 😆

🔤 Стрелочка сырого указателя -> это синтаксический сахар:
ptr->fn() эквивалентно (*ptr).fn()

🔤 Код ниже реально компилируется ➡️

int main()
{
https://in6months.com
goto https;
}


#lol #code #gamedev #lifeexe #lifeexecode #friday #videcoding
Please open Telegram to view this post
VIEW IN TELEGRAM
2😁22😱196🫡4👻31👏1🦄1
📕 Всем привет, всем привет! 📕

Отличный вводный материал для тех, кто хочет разобраться как работает Ray Marching ➡️

🔗 Ray Marching From the Ground Up

#graphics #shaders #raymarching #sdf #gamedev #code #cool_article #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥2597🦄22👍1
🔝 Всем привет, всем привет! 🔝

Отличная новая статья по современным техникам culling'а в рендеринге — от классических подходов до GPU-driven пайплайнов ➡️

🔗 Modern rendering culling techniques

Автор разбирает ключевые методы отсечения невидимой геометрии:

🔤Frustum culling — отсечение объектов вне пирамиды видимости камеры
🔤Occlusion culling — отсечение объектов, перекрытых другой геометрией
🔤Backface culling на уровне треугольников и мешлетов
🔤Small triangle culling — отсечение слишком мелких треугольников, не попадающих в пиксели
🔤 Cluster/Meshlet culling — современный подход с разбиением меша на кластеры и их независимым отсечением на GPU

🔤🔤🔤🔤🔤

#rendering #graphics #gpu #culling #nanite #code #unrealengine #ue5 #gamedev #games #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥266543🦄1
📕 Всем привет, всем привет! 📕

Непостоянная рубрика — Воскресный Си 👍

Перед вами один из самых знаменитых и «вирусных» фрагментов кода на C за всю историю языка 🔥

На первый взгляд кажется, что это синтаксическая ошибка — ведь здесь switch буквально переплетён с циклом do-while. Но нет, это абсолютно валидный, стандартный C-код ➡️

void fastCopy(short* to, short* from, int count) 
{
if (count <= 0) return;

int n = (count + 7) / 8;
switch (count % 8)
{
case 0: do { *to++ = *from++;
case 7: *to++ = *from++;
case 6: *to++ = *from++;
case 5: *to++ = *from++;
case 4: *to++ = *from++;
case 3: *to++ = *from++;
case 2: *to++ = *from++;
case 1: *to++ = *from++;
} while (--n > 0);
}
}


Приём назван в честь Тома Даффа, который придумал его в 1983 году, работая в Lucasfilm 😈 Computer Division — подразделение, из которого позже вырос Pixar 😏

Его задача была ускорить копирование данных при работе над программой для анимации и он нашёл элегантное и слегка безумное решение, которое сочетает в себе механизм switch и раскрутку цикла loop unrolling 😐

Секрет в том, что в C метки case — это обычные метки перехода, и они могут находиться внутри управляющих конструкций (do/while/for/if), лежащих в теле того же switch

🔤Управление «прыгает» в середину цикла благодаря switch
🔤Код выполняется «сверху вниз» до конца блока do-while
🔤Затем проверяется условие while, и цикл продолжает крутиться уже целиком

Подробнее с примером Compiler Explorer в моей открытой заметке Duff's Device 📕

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki

#c #duff_device #cpp #code #lifeexe #lifeexecode #lifeexeEDU
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥331182👍1🦄1
📱Всем привет, всем привет! 📱

Новый бесплатный для личного пользования плагин Unreal Engine, который отслеживает ссылки объектов ➡️

🔗 Better Reference Explorer

💡 Если стандартный Reference Viewer просто говорит, что связь есть, то этот инструмент показывает полный путь от компонента до конкретного индекса в массиве или переменной, которая держит ссылку

📱 Comparison with built-in Reference Viewer

UPD: Перестал быть бесплатным к моменту публикации поста 😑

#plugin #code #tools #unrealengine #ue5 #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥21👍1091🦄1
Media is too big
VIEW IN TELEGRAM
🔝 Всем вечерний привет! 🔝

Вышло большое интервью с Бьёрном Страуструпом — создателем С++ ➡️

🔗 https://www.youtube.com/watch?v=U46fJ2bJ-co

Он неплохо прошелся по AI 💯

AI-generated code isn't ready — it generates more bugs, more bloat, more security holes, and is nearly impossible to validate

senior developers are already retiring rather than deal with it

The problem is that even a small prompt change can shift the entire codebase in unpredictable ways


В комментах кто-то написал, что он просто не умеет в промты 🖤 и как доказательство человечек приложил ссылку на его официальный сайт ➡️

🔗 https://www.stroustrup.com

Была ли это пост ирония — история умалчивает 😆

🔤🔤🔤🔤🔤🔤

#legend #code #cpp #ai #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥22🔥126🦄3👻2👍1😱1
👨‍💻 Всем привет, всем привет! 👨‍💻

В C++23 стек вызовов можно получить в несколько строк кода с помощью std::stacktrace::current()

Это избавляет от необходимости писать костыли под разные ОС и сильно упрощает сбор логов или написание кастомных систем краш-репортов ➡️

#include <print>
#include <stacktrace>

auto printStacktrace() -> void
{
const auto tr = std::stacktrace::current();
for (const auto& e : tr)
{
std::print("Func: {} ", e.description());
std::print("File: {} ", e.source_file());
std::println("Line: {}", e.source_line());
}
}

auto someFunc() -> void
{
printStacktrace();
}

auto main() -> int
{
someFunc();
return EXIT_SUCCESS;
}


#stacktrace #code #cpp #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍1817🦄7🔥11
📕 Всем привет, всем привет! 📕

Большая техническая статья про сферические гармоники — Spherical Harmonics, SH ➡️

🔗 Introduction to Spherical Harmonics for Graphics Programmers

Сферические гармоники — это способ разложить сложную функцию, заданную на сфере, например окружающее освещение вокруг точки, в набор коэффициентов базисных функций 🤯

Зачем это нужно

Любую непрерывную функцию на сфере можно представить как бесконечную сумму специальных многочленов, что позволяет ➡️

🟢 Сжимать освещение — весь кубмап окружения можно «упаковать» всего в 9 чисел (для L2 SH)

🟢 Быстро вычислять Irradiance — с помощью SH можно мгновенно рассчитать, как свет падает на объект с любой нормалью, просто выполнив скалярное произведение

🟢Моделировать детали — использовать в лайтмапах, чтобы запеченный свет реалистично реагировал на Normal Maps

#math #graphics #rendering #sh #gamedev #code #cool_article #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1711🥰621👍1🦄1
👨‍💻 Все вечерний привет! 👨‍💻

Интересные конечно есть примеры на cppreference 😀

🔗 basic_string_view

Вполне себе хардкорный generative art! В вики имеется подборка инструментов на тему ➡️

🔗 Creative coding

#include <iostream>
#include <string_view>

int main()
{
#define A "▀"
#define B "▄"
#define C "─"

constexpr std::string_view blocks[]{A B C, B A C, A C B, B C A};

for (int y{}, p{}; y != 8; ++y, p = ((p + 1) / 4))
{
for (char x{}; x != 29; ++x)
std::cout << blocks[p];
std::cout << '\n';
}
}


#code #cpp #rendering #generative #art #procedural #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥10🥰5🤯4👍3🦄1