Практика языка C (МФТИ, 2023-2024). Дополнение: SDL и визуализация

  Рет қаралды 5,751

Konstantin Vladimirov

Konstantin Vladimirov

Күн бұрын

Практические занятия по языку 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
* Тут пока пусто

Пікірлер: 39
@alexmid
@alexmid 21 күн бұрын
Автор, большое тебе программистско-человеческое спасибо! все время было интересно чему там в МФТИ программистов учат, теперь вот и самому можно поучиться
@bv9876
@bv9876 17 күн бұрын
Константин Владимиров, большое спасибо за записи семинаров. Очень надеюсь, что Вы и на 2-м курсе нас будете радовать ими ✌️
@tilir
@tilir 16 күн бұрын
Второй курс уже записан, есть плейлист на этом канале.
@slonbeskonechen8310
@slonbeskonechen8310 23 күн бұрын
блин, случайно попал на канал, смотрю не могу остановиться... очень интересно....
@mkdir4701
@mkdir4701 Ай бұрын
Прочитал Прату. Посмотрев вас - понял, что надо ещё много интересного узнать!
@user-gl2pc2ek2b
@user-gl2pc2ek2b 27 күн бұрын
За сколько прочитали?
@mkdir4701
@mkdir4701 12 күн бұрын
@@user-gl2pc2ek2b Достаточно долго и кропотливо изучал материал. 1 год
@user-ne4bd3ry1n
@user-ne4bd3ry1n Ай бұрын
отлично
@MariaEsenina
@MariaEsenina 21 күн бұрын
Немного странной прозвучала фраза, что SDL не подходит для чего-то серьёзного, при том, что либу активно развивает Valve (также используется в их движке source), её использует 3D редактор Blender, который в последние годы очень активно развивается, часто используется в кастомных игровых движках (например, студией Larian из известных). Разумеется, что для вывода графики часто подключается Vulkan API для большинства современных проектов, Blender использует OpenGL 3 ради совместимости со старьём (до недавнего времени был вообще 2, хотя уже скоро хотят также вулканизироваться). Сложно представить библиотеку с близким уровнем популярности, которая работает в том числе в коммерческих проектах своей направленности. То есть наоборот можно ещё сильнее мотивировать студентов разобраться, даже если по жизни они будут заниматься чем-то другим.
@DmitryKandiner
@DmitryKandiner 23 күн бұрын
1:11:35 Последняя на данный момент версия Visual Studio 2022 Professional тоже не поддерживает.
@otorvysh
@otorvysh 28 күн бұрын
Константин, доброго вреени суток и мое почтение Вашему преподавательскому таланту! разъясните, пожалуйста (ну или может сообщество знает ответ), как правильно работать с геометрией? например, на плоскости даны 2 точки и надо провести серединный перпендикуляр. проблемы с форрмулой нет, но непонятен один момент: если проводить вычисления в логических координатах, то при пуше на неквадратный viewport визуально линия вообще не выглядит, как серединный перпендикуляр. или все-таки геометрию надо решать в экранных координатах, потом переводить в логические для вершин, а pipeline потом снова их пересчитает в координаты viewport? какая-то двойная работа получается) заранее спасибо за ответ...
@eugenevladoff2758
@eugenevladoff2758 Ай бұрын
А разве при включенной vsync SDL2 не сам у себя внутри делает паузу для каждого кадра, чтобы довести ее до умолчальных 60 fps?
@tilir
@tilir Ай бұрын
Это если устройство с таким флажком найдено. Ну и потом вдруг вы хотите меньше. Донести идею как это делается руками мне кажется важным.
@eugenevladoff2758
@eugenevladoff2758 Ай бұрын
А, понял. Вы же увеличивали задержку. Сначала для получения 50 FPS, а потом до получения 10 FPS, для примера.
@AlexAlex-ll5sz
@AlexAlex-ll5sz Ай бұрын
Класс!!
@andrewkot5212
@andrewkot5212 Ай бұрын
Скажите, а девайс , которому коннектиться рендерер- это что за сущность? Вроде как и драйвер к устройству, но если есть софвар асселератор - то просто подпрограмма
@tilir
@tilir Ай бұрын
Это рантайм. В обычном случае у нас есть графический kernel-mode драйвер к которому цепляется например OpenGL runtime, представляющий собой user-mode часть драйвера. SDL умеет собирать несколько поддерживаемых рантаймов и цепляется уже к ним.
@normanmaddyson8408
@normanmaddyson8408 Ай бұрын
Спасибо за лекцию nitpicking, но почему функции на 1:17:40 объявлены как static inline? Разве от inline в этом случае есть какой-то эффект?
@tilir
@tilir Ай бұрын
Да, где то на 30% повышает вероятность инлайна если собирать gcc )) Если более серьёзно то static inline это устоявшаяся идиома.
@alexloktionoff6833
@alexloktionoff6833 29 күн бұрын
@@tilir также static inline в gcc автоматически убираются если не используются, бинарными меньше.
@tilir
@tilir 23 күн бұрын
Для этого достаточно просто static.
@user-ne4bd3ry1n
@user-ne4bd3ry1n Ай бұрын
проверку столкновений надо было бы еще
@dmitry-strakhov
@dmitry-strakhov Ай бұрын
Небольшая опечатка (две) на таймлайне. Написано "Вчет приктических сообрадений"
@tilir
@tilir Ай бұрын
Спасибо, пофиксил ))
@user-zl1fy7ej6t
@user-zl1fy7ej6t Ай бұрын
В следующий раз нужно добавить raylib библиотека проще sdl при этом поддерживает работу с шейдерами из коробки
@pavelrid
@pavelrid 29 күн бұрын
raylib это OpenGL, а у SDL есть в бекэндах OpenGL, D3D, Vulkan и Metal и даже софтварный рендер
@user-zl1fy7ej6t
@user-zl1fy7ej6t 29 күн бұрын
​@@pavelrid понятно, просто на рейлибе можно проще и быстрее получить рабочее дэмо, если цель проекта запустить проверить визуализировать для собственных нужд то этот вариант подходит лучше всего ( за исключением специфичных сценариев )
@alexorlovecky6662
@alexorlovecky6662 Ай бұрын
Не совсем понял последнюю задачу студентам.. Всмысле посчитать к чему сводится такой ряд? Ну к нулю... Или я где то туплю?
@Stedmiel
@Stedmiel Ай бұрын
35:45 так как у меня видеокарта от nvidia- то я могу взять библиотеку nvidia reflex и попросить видеокарту выдать мне ровно 50 кадров в секунду 😀(а всем остальным выдавать сообщение "ну вы же смотрели на системные требования" xD ) ну или переключить монитор в 50 герц и включить vsync. но эт слишком грязно и инпутлаг поедет... 1:11:34 насколько помню- в 2022 вижле сишку починили. ну или clang-cl притащить, чо уж там.
@tilir
@tilir Ай бұрын
Вы сейчас радостно агитируете за чудовищный и отвратительный вендорлок.
@Stedmiel
@Stedmiel Ай бұрын
@@tilir ну, благо там, где рефлекс нужен (всякие компетитив-игоры)- и так почти везде нвидия. ну и может быть к какому-нибудь vulkan 1.9 оно доедет и до стандарта... там внутре же просто семафорчики и доступ к аппаратным/драйверным счетчикам. а так да. плоховастенько. жаль, что альтернатив ему не особо есть (на винде). *а еще на винде контекст вулкана надо создавать через одно место- dxgi зовется. потому что только там можно поставить флажок "обходить композитор". это бы тоже куда-нибудь в дефолтное расширение вулкана припереть... так что пока что да- или вендорлок, или волосатый график фреймтайма (потому что sleep'ы косые как не в себя) + инпутлаг конь. с рефлексом в типичной игоре можно 6-9мс от ввода до видеовыхода, как повезет со временем запуска. и не улетая при этом в много-много фпс, которые еще и VRM взорвать могут (косится на нвидию, не чинящую этот баг с 900-ой серии до 4000) а, ну или дедовский вариант с переключением частоты монитора. вариант еще хуже xD
@tilir
@tilir Ай бұрын
У AMD тоже есть очень конкурентные карточки. Да и у Интела ARC Alchemist неплоха.
@Stedmiel
@Stedmiel Ай бұрын
@@tilir я там не про сами карточки, а про драйвера и весь софт вокруг них. не знаю, как у интела, их ARC ни на одной из моих машин не завелся (но эти машины весьма кривые, эт ожидаемо), но у красненьких просто нет способа снизить инпутлаг. тот, который заявлен- не работает как надо. а еще у них проблемы, если вдруг видеокарта повисла- их невозможно ресетнуть. там, где у других достаточно bus reset, у амд надо выключать питание. (и даже если выключишь питание- там драйвер выгружаться не умеет нормально. но в линуксе все в целом плохо с хотплагом/анплагом гпу. но хотя бы так можно перезапустить виртуалку с амдшной графикой, не перезапуская всю машину.) а чтобы повесить амдшную графику в линуксе- чуть ли не достаточно сделать for(;;); в шейдере. да, оно настолько плохое там. но в целом начиная с 7000 серии у них наконец-то кодер видео стал адекватно кодировать видео! и даже лучемет лучи метает как надо! (оне там формат дерева blas/tlas поменяли на примерно как у нвидии.) ждем всего остального xD про то, что "и так почти везде нвидия"- это чисто из стимовской статистики, там ее 76.59% за апрель 2024.
@MallSerg
@MallSerg Ай бұрын
Не самый удачный пример на процессоре генерировать текстуру фрактала ((. В том же SDL2 самые удобные инструменты для реализации шейдеров на GLSL через OpenGL или Vulkan API.
@tilir
@tilir Ай бұрын
Про шейдеры уже отвечал. Идея хорошая, но в расписание первого курса не лезет и для первокурсников тяжеловата. Объясняю на втором, уже в курсе по C++.
@alexloktionoff6833
@alexloktionoff6833 29 күн бұрын
@@tilir да интересно на втором курсе показать и сравнить быстродействие!
@MariaEsenina
@MariaEsenina 21 күн бұрын
@@alexloktionoff6833 надо из Константина Владимирова вытаскивать курс по Vulkan :). Тема очень важная, и не очень хорошо раскрыта, если нет огромного бекграунда в программировании 3D графики. Документация Вулкана 5000+ страниц, что руки опускаются сразу же (ну ок, core-версия без расширений "всего" 1500 страниц). Можно конечно максимально упростить пайплайн и от многого отказаться, но тогда проще вообще OpenGL использовать, т.к. если использоваться Vulkan, то хочется выжать максимум, а если нам не так важна производительность, то и OpenGL хватит, тем более что драйверы его уже очень хорошо поддерживают, он застопорился на версии 4.6 и не развивается больше (что наверное жаль).
@philschneider4840
@philschneider4840 28 күн бұрын
Когда решил вкатиться в айти после 40, но передумал
Антон Полухин - C++ трюки из userver
1:01:03
C++ User Group
Рет қаралды 15 М.
Making Simple Windows Driver in C
7:26
Nir Lichtman
Рет қаралды 322 М.
My programming language
0:25
MGAMES!
Рет қаралды 71 М.
SPORE: ИНТЕРЕСНЫЕ ФАКТЫ ПРО ЭТАП "ПЛЕМЯ"
10:34
IGRARIUM - Игровые обзоры
Рет қаралды 195 М.