Практика языка C (МФТИ, 2023-2024). Дополнение: SDL и визуализация
Вставка
- Опубліковано 2 чер 2024
- Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
Это дополнение к восьмому семинару, не обязательное, но мне кажется милым и интересным. Мы поговорим про использование библиотеки SDL для создания простых визуализаций и даже игр. Вы также получите уже не контестное а почти настоящее задание на подумать.
Семинарист: Константин Владимиров.
Дата: 6 мая 2024 года.
Съёмка: Марк Гончаров.
Звук: Юлий Тарасов.
Предыдущий семинар: • Практика языка C (МФТИ...
Следующий семинар: • Практика языка C (МФТИ...
Слайды к занятиям: cs.mipt.ru/wp/?page_id=7775
Примеры кода: github.com/tilir/c-graduate
Задачник: olymp1.vdi.mipt.ru/
Timeline
00:00 Обзор графических библиотек
06:35 Небольшой трюк с макросами и механизм atexit
15:48 Окно и рендерер
26:10 Двойная буферизация и простая геометрия
31:30 Текстуры и анимация
47:55 Работа с клавиатурой и прочие события
53:41 Задача
56:05 Текст и его замены
01:08:20 Абстрагирование рисовалки
01:21:15 Учёт практических соображений.
Errata
* Тут пока пусто
Автор, большое тебе программистско-человеческое спасибо! все время было интересно чему там в МФТИ программистов учат, теперь вот и самому можно поучиться
блин, случайно попал на канал, смотрю не могу остановиться... очень интересно....
Константин Владимиров, большое спасибо за записи семинаров. Очень надеюсь, что Вы и на 2-м курсе нас будете радовать ими ✌️
Второй курс уже записан, есть плейлист на этом канале.
Прочитал Прату. Посмотрев вас - понял, что надо ещё много интересного узнать!
За сколько прочитали?
отлично
1:11:35 Последняя на данный момент версия Visual Studio 2022 Professional тоже не поддерживает.
Константин, доброго вреени суток и мое почтение Вашему преподавательскому таланту!
разъясните, пожалуйста (ну или может сообщество знает ответ), как правильно работать с геометрией? например, на плоскости даны 2 точки и надо провести серединный перпендикуляр. проблемы с форрмулой нет, но непонятен один момент: если проводить вычисления в логических координатах, то при пуше на неквадратный viewport визуально линия вообще не выглядит, как серединный перпендикуляр. или все-таки геометрию надо решать в экранных координатах, потом переводить в логические для вершин, а pipeline потом снова их пересчитает в координаты viewport? какая-то двойная работа получается)
заранее спасибо за ответ...
А разве при включенной vsync SDL2 не сам у себя внутри делает паузу для каждого кадра, чтобы довести ее до умолчальных 60 fps?
Это если устройство с таким флажком найдено. Ну и потом вдруг вы хотите меньше. Донести идею как это делается руками мне кажется важным.
А, понял. Вы же увеличивали задержку. Сначала для получения 50 FPS, а потом до получения 10 FPS, для примера.
Немного странной прозвучала фраза, что SDL не подходит для чего-то серьёзного, при том, что либу активно развивает Valve (также используется в их движке source), её использует 3D редактор Blender, который в последние годы очень активно развивается, часто используется в кастомных игровых движках (например, студией Larian из известных). Разумеется, что для вывода графики часто подключается Vulkan API для большинства современных проектов, Blender использует OpenGL 3 ради совместимости со старьём (до недавнего времени был вообще 2, хотя уже скоро хотят также вулканизироваться). Сложно представить библиотеку с близким уровнем популярности, которая работает в том числе в коммерческих проектах своей направленности. То есть наоборот можно ещё сильнее мотивировать студентов разобраться, даже если по жизни они будут заниматься чем-то другим.
Класс!!
Скажите, а девайс , которому коннектиться рендерер- это что за сущность? Вроде как и драйвер к устройству, но если есть софвар асселератор - то просто подпрограмма
Это рантайм. В обычном случае у нас есть графический kernel-mode драйвер к которому цепляется например OpenGL runtime, представляющий собой user-mode часть драйвера. SDL умеет собирать несколько поддерживаемых рантаймов и цепляется уже к ним.
Спасибо за лекцию
nitpicking, но почему функции на 1:17:40 объявлены как static inline? Разве от inline в этом случае есть какой-то эффект?
Да, где то на 30% повышает вероятность инлайна если собирать gcc ))
Если более серьёзно то static inline это устоявшаяся идиома.
@@tilir также static inline в gcc автоматически убираются если не используются, бинарными меньше.
Для этого достаточно просто static.
Не совсем понял последнюю задачу студентам.. Всмысле посчитать к чему сводится такой ряд? Ну к нулю... Или я где то туплю?
проверку столкновений надо было бы еще
Небольшая опечатка (две) на таймлайне. Написано "Вчет приктических сообрадений"
Спасибо, пофиксил ))
В следующий раз нужно добавить raylib библиотека проще sdl при этом поддерживает работу с шейдерами из коробки
raylib это OpenGL, а у SDL есть в бекэндах OpenGL, D3D, Vulkan и Metal и даже софтварный рендер
@@pavelrid понятно, просто на рейлибе можно проще и быстрее получить рабочее дэмо, если цель проекта запустить проверить визуализировать для собственных нужд то этот вариант подходит лучше всего ( за исключением специфичных сценариев )
35:45 так как у меня видеокарта от nvidia- то я могу взять библиотеку nvidia reflex и попросить видеокарту выдать мне ровно 50 кадров в секунду 😀(а всем остальным выдавать сообщение "ну вы же смотрели на системные требования" xD )
ну или переключить монитор в 50 герц и включить vsync. но эт слишком грязно и инпутлаг поедет...
1:11:34 насколько помню- в 2022 вижле сишку починили. ну или clang-cl притащить, чо уж там.
Вы сейчас радостно агитируете за чудовищный и отвратительный вендорлок.
@@tilir ну, благо там, где рефлекс нужен (всякие компетитив-игоры)- и так почти везде нвидия. ну и может быть к какому-нибудь vulkan 1.9 оно доедет и до стандарта... там внутре же просто семафорчики и доступ к аппаратным/драйверным счетчикам. а так да. плоховастенько. жаль, что альтернатив ему не особо есть (на винде). *а еще на винде контекст вулкана надо создавать через одно место- dxgi зовется. потому что только там можно поставить флажок "обходить композитор". это бы тоже куда-нибудь в дефолтное расширение вулкана припереть...
так что пока что да- или вендорлок, или волосатый график фреймтайма (потому что sleep'ы косые как не в себя) + инпутлаг конь. с рефлексом в типичной игоре можно 6-9мс от ввода до видеовыхода, как повезет со временем запуска. и не улетая при этом в много-много фпс, которые еще и VRM взорвать могут (косится на нвидию, не чинящую этот баг с 900-ой серии до 4000)
а, ну или дедовский вариант с переключением частоты монитора. вариант еще хуже xD
У AMD тоже есть очень конкурентные карточки. Да и у Интела ARC Alchemist неплоха.
@@tilir я там не про сами карточки, а про драйвера и весь софт вокруг них. не знаю, как у интела, их ARC ни на одной из моих машин не завелся (но эти машины весьма кривые, эт ожидаемо), но у красненьких просто нет способа снизить инпутлаг. тот, который заявлен- не работает как надо.
а еще у них проблемы, если вдруг видеокарта повисла- их невозможно ресетнуть. там, где у других достаточно bus reset, у амд надо выключать питание. (и даже если выключишь питание- там драйвер выгружаться не умеет нормально. но в линуксе все в целом плохо с хотплагом/анплагом гпу. но хотя бы так можно перезапустить виртуалку с амдшной графикой, не перезапуская всю машину.)
а чтобы повесить амдшную графику в линуксе- чуть ли не достаточно сделать for(;;); в шейдере. да, оно настолько плохое там.
но в целом начиная с 7000 серии у них наконец-то кодер видео стал адекватно кодировать видео! и даже лучемет лучи метает как надо! (оне там формат дерева blas/tlas поменяли на примерно как у нвидии.) ждем всего остального xD
про то, что "и так почти везде нвидия"- это чисто из стимовской статистики, там ее 76.59% за апрель 2024.
Не самый удачный пример на процессоре генерировать текстуру фрактала ((. В том же SDL2 самые удобные инструменты для реализации шейдеров на GLSL через OpenGL или Vulkan API.
Про шейдеры уже отвечал. Идея хорошая, но в расписание первого курса не лезет и для первокурсников тяжеловата. Объясняю на втором, уже в курсе по C++.
@@tilir да интересно на втором курсе показать и сравнить быстродействие!
@@alexloktionoff6833 надо из Константина Владимирова вытаскивать курс по Vulkan :). Тема очень важная, и не очень хорошо раскрыта, если нет огромного бекграунда в программировании 3D графики. Документация Вулкана 5000+ страниц, что руки опускаются сразу же (ну ок, core-версия без расширений "всего" 1500 страниц). Можно конечно максимально упростить пайплайн и от многого отказаться, но тогда проще вообще OpenGL использовать, т.к. если использоваться Vulkan, то хочется выжать максимум, а если нам не так важна производительность, то и OpenGL хватит, тем более что драйверы его уже очень хорошо поддерживают, он застопорился на версии 4.6 и не развивается больше (что наверное жаль).
Когда решил вкатиться в айти после 40, но передумал