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

КОМЕНТАРІ • 38

  • @alexmid
    @alexmid 6 днів тому +2

    Автор, большое тебе программистско-человеческое спасибо! все время было интересно чему там в МФТИ программистов учат, теперь вот и самому можно поучиться

  • @slonbeskonechen8310
    @slonbeskonechen8310 8 днів тому +1

    блин, случайно попал на канал, смотрю не могу остановиться... очень интересно....

  • @bv9876
    @bv9876 День тому

    Константин Владимиров, большое спасибо за записи семинаров. Очень надеюсь, что Вы и на 2-м курсе нас будете радовать ими ✌️

    • @tilir
      @tilir  День тому +1

      Второй курс уже записан, есть плейлист на этом канале.

  • @mkdir4701
    @mkdir4701 15 днів тому +1

    Прочитал Прату. Посмотрев вас - понял, что надо ещё много интересного узнать!

  • @user-ne4bd3ry1n
    @user-ne4bd3ry1n 15 днів тому +2

    отлично

  • @DmitryKandiner
    @DmitryKandiner 8 днів тому

    1:11:35 Последняя на данный момент версия Visual Studio 2022 Professional тоже не поддерживает.

  • @otorvysh
    @otorvysh 13 днів тому

    Константин, доброго вреени суток и мое почтение Вашему преподавательскому таланту!
    разъясните, пожалуйста (ну или может сообщество знает ответ), как правильно работать с геометрией? например, на плоскости даны 2 точки и надо провести серединный перпендикуляр. проблемы с форрмулой нет, но непонятен один момент: если проводить вычисления в логических координатах, то при пуше на неквадратный viewport визуально линия вообще не выглядит, как серединный перпендикуляр. или все-таки геометрию надо решать в экранных координатах, потом переводить в логические для вершин, а pipeline потом снова их пересчитает в координаты viewport? какая-то двойная работа получается)
    заранее спасибо за ответ...

  • @eugenevladoff2758
    @eugenevladoff2758 15 днів тому +3

    А разве при включенной vsync SDL2 не сам у себя внутри делает паузу для каждого кадра, чтобы довести ее до умолчальных 60 fps?

    • @tilir
      @tilir  15 днів тому +2

      Это если устройство с таким флажком найдено. Ну и потом вдруг вы хотите меньше. Донести идею как это делается руками мне кажется важным.

    • @eugenevladoff2758
      @eugenevladoff2758 15 днів тому

      А, понял. Вы же увеличивали задержку. Сначала для получения 50 FPS, а потом до получения 10 FPS, для примера.

  • @MariaEsenina
    @MariaEsenina 6 днів тому

    Немного странной прозвучала фраза, что SDL не подходит для чего-то серьёзного, при том, что либу активно развивает Valve (также используется в их движке source), её использует 3D редактор Blender, который в последние годы очень активно развивается, часто используется в кастомных игровых движках (например, студией Larian из известных). Разумеется, что для вывода графики часто подключается Vulkan API для большинства современных проектов, Blender использует OpenGL 3 ради совместимости со старьём (до недавнего времени был вообще 2, хотя уже скоро хотят также вулканизироваться). Сложно представить библиотеку с близким уровнем популярности, которая работает в том числе в коммерческих проектах своей направленности. То есть наоборот можно ещё сильнее мотивировать студентов разобраться, даже если по жизни они будут заниматься чем-то другим.

  • @AlexAlex-ll5sz
    @AlexAlex-ll5sz 15 днів тому +2

    Класс!!

  • @andrewkot5212
    @andrewkot5212 16 днів тому

    Скажите, а девайс , которому коннектиться рендерер- это что за сущность? Вроде как и драйвер к устройству, но если есть софвар асселератор - то просто подпрограмма

    • @tilir
      @tilir  15 днів тому +3

      Это рантайм. В обычном случае у нас есть графический kernel-mode драйвер к которому цепляется например OpenGL runtime, представляющий собой user-mode часть драйвера. SDL умеет собирать несколько поддерживаемых рантаймов и цепляется уже к ним.

  • @normanmaddyson8408
    @normanmaddyson8408 14 днів тому

    Спасибо за лекцию
    nitpicking, но почему функции на 1:17:40 объявлены как static inline? Разве от inline в этом случае есть какой-то эффект?

    • @tilir
      @tilir  14 днів тому +1

      Да, где то на 30% повышает вероятность инлайна если собирать gcc ))
      Если более серьёзно то static inline это устоявшаяся идиома.

    • @alexloktionoff6833
      @alexloktionoff6833 13 днів тому

      @@tilir также static inline в gcc автоматически убираются если не используются, бинарными меньше.

    • @tilir
      @tilir  7 днів тому

      Для этого достаточно просто static.

  • @alexorlovecky6662
    @alexorlovecky6662 15 днів тому

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

  • @user-ne4bd3ry1n
    @user-ne4bd3ry1n 15 днів тому

    проверку столкновений надо было бы еще

  • @dmitry-strakhov
    @dmitry-strakhov 14 днів тому

    Небольшая опечатка (две) на таймлайне. Написано "Вчет приктических сообрадений"

    • @tilir
      @tilir  14 днів тому

      Спасибо, пофиксил ))

  • @user-zl1fy7ej6t
    @user-zl1fy7ej6t 15 днів тому

    В следующий раз нужно добавить raylib библиотека проще sdl при этом поддерживает работу с шейдерами из коробки

    • @pavelrid
      @pavelrid 14 днів тому

      raylib это OpenGL, а у SDL есть в бекэндах OpenGL, D3D, Vulkan и Metal и даже софтварный рендер

    • @user-zl1fy7ej6t
      @user-zl1fy7ej6t 13 днів тому

      ​@@pavelrid понятно, просто на рейлибе можно проще и быстрее получить рабочее дэмо, если цель проекта запустить проверить визуализировать для собственных нужд то этот вариант подходит лучше всего ( за исключением специфичных сценариев )

  • @Stedmiel
    @Stedmiel 15 днів тому

    35:45 так как у меня видеокарта от nvidia- то я могу взять библиотеку nvidia reflex и попросить видеокарту выдать мне ровно 50 кадров в секунду 😀(а всем остальным выдавать сообщение "ну вы же смотрели на системные требования" xD )
    ну или переключить монитор в 50 герц и включить vsync. но эт слишком грязно и инпутлаг поедет...
    1:11:34 насколько помню- в 2022 вижле сишку починили. ну или clang-cl притащить, чо уж там.

    • @tilir
      @tilir  15 днів тому

      Вы сейчас радостно агитируете за чудовищный и отвратительный вендорлок.

    • @Stedmiel
      @Stedmiel 15 днів тому

      @@tilir ну, благо там, где рефлекс нужен (всякие компетитив-игоры)- и так почти везде нвидия. ну и может быть к какому-нибудь vulkan 1.9 оно доедет и до стандарта... там внутре же просто семафорчики и доступ к аппаратным/драйверным счетчикам. а так да. плоховастенько. жаль, что альтернатив ему не особо есть (на винде). *а еще на винде контекст вулкана надо создавать через одно место- dxgi зовется. потому что только там можно поставить флажок "обходить композитор". это бы тоже куда-нибудь в дефолтное расширение вулкана припереть...
      так что пока что да- или вендорлок, или волосатый график фреймтайма (потому что sleep'ы косые как не в себя) + инпутлаг конь. с рефлексом в типичной игоре можно 6-9мс от ввода до видеовыхода, как повезет со временем запуска. и не улетая при этом в много-много фпс, которые еще и VRM взорвать могут (косится на нвидию, не чинящую этот баг с 900-ой серии до 4000)
      а, ну или дедовский вариант с переключением частоты монитора. вариант еще хуже xD

    • @tilir
      @tilir  15 днів тому

      У AMD тоже есть очень конкурентные карточки. Да и у Интела ARC Alchemist неплоха.

    • @Stedmiel
      @Stedmiel 15 днів тому

      @@tilir я там не про сами карточки, а про драйвера и весь софт вокруг них. не знаю, как у интела, их ARC ни на одной из моих машин не завелся (но эти машины весьма кривые, эт ожидаемо), но у красненьких просто нет способа снизить инпутлаг. тот, который заявлен- не работает как надо.
      а еще у них проблемы, если вдруг видеокарта повисла- их невозможно ресетнуть. там, где у других достаточно bus reset, у амд надо выключать питание. (и даже если выключишь питание- там драйвер выгружаться не умеет нормально. но в линуксе все в целом плохо с хотплагом/анплагом гпу. но хотя бы так можно перезапустить виртуалку с амдшной графикой, не перезапуская всю машину.)
      а чтобы повесить амдшную графику в линуксе- чуть ли не достаточно сделать for(;;); в шейдере. да, оно настолько плохое там.
      но в целом начиная с 7000 серии у них наконец-то кодер видео стал адекватно кодировать видео! и даже лучемет лучи метает как надо! (оне там формат дерева blas/tlas поменяли на примерно как у нвидии.) ждем всего остального xD
      про то, что "и так почти везде нвидия"- это чисто из стимовской статистики, там ее 76.59% за апрель 2024.

  • @MallSerg
    @MallSerg 15 днів тому

    Не самый удачный пример на процессоре генерировать текстуру фрактала ((. В том же SDL2 самые удобные инструменты для реализации шейдеров на GLSL через OpenGL или Vulkan API.

    • @tilir
      @tilir  15 днів тому +1

      Про шейдеры уже отвечал. Идея хорошая, но в расписание первого курса не лезет и для первокурсников тяжеловата. Объясняю на втором, уже в курсе по C++.

    • @alexloktionoff6833
      @alexloktionoff6833 13 днів тому

      @@tilir да интересно на втором курсе показать и сравнить быстродействие!

    • @MariaEsenina
      @MariaEsenina 5 днів тому

      @@alexloktionoff6833 надо из Константина Владимирова вытаскивать курс по Vulkan :). Тема очень важная, и не очень хорошо раскрыта, если нет огромного бекграунда в программировании 3D графики. Документация Вулкана 5000+ страниц, что руки опускаются сразу же (ну ок, core-версия без расширений "всего" 1500 страниц). Можно конечно максимально упростить пайплайн и от многого отказаться, но тогда проще вообще OpenGL использовать, т.к. если использоваться Vulkan, то хочется выжать максимум, а если нам не так важна производительность, то и OpenGL хватит, тем более что драйверы его уже очень хорошо поддерживают, он застопорился на версии 4.6 и не развивается больше (что наверное жаль).

  • @philschneider4840
    @philschneider4840 12 днів тому

    Когда решил вкатиться в айти после 40, но передумал