StiMOR
сижу райлиб изучаю
StiMOR
Cloop210
🙃
Laimadoo
А надо? Я предпочёл бы ещё sleep'ов рандомных раскидать.
Такой кидаешь слипы, что бы создать видимость загрузки. Вместо таймеров сделать слипы. И никакой многопоточности!
Re
Ты предлагаешь тратить больше времени на инструмент. Не надо выдумывать мои слова за меня. Подразумевается, что рассуждения на тему "современности" движков и их пайплайнов — не относятся к играм. Подразумевается, что рассуждения на тему "производительности" — не относятся к играм. Подразумевается, что список использованных технологий не относится к "хитовости" игр. Подразумевается, что прослойки не заменяют разработчика. Гений напишет три строчки которые будут лагать на китайском квантовом суперкомпутере за 1кккк млрд баксов. Применяющий мозги на чём угодно напишет принципиально что угодно, и будет работать нормально.
Это противоречит законам инфомартики. У каждого пк есть лимиты. RenPy \ GameMaker\ Godot все еще сильно лагают на многих устройствах. Видимо разработчики кривые. Хотя там есть хорошие игры и даже хиты. Никто не спорит что есть талантливые программисты, есть студии которые могут оптимизировать целые игры. Есть просто студии в которых есть ресурсы. А есть просто обычные разработчики. Которые думают и выстраивают приоритеты над игрой, а не движком. Как результат это дает больше плодов, даже если что то лагает и.т.д. и.т.п. Важно что бы было играбельно. Сделать можно и на голом OpenGL и вообще без GPU. Вопрос времени и ресурсов. С этим тоже спорить не буду. Делайте. Статистика говорит что подход где не плывут против течения более эффективный. ДЛя кого то может быть иная ситуация. К сожалению на деле хороший рендер можно написать занимаясь им очень долго понимая особенности и работая с конкретными железками. Получая фидбек. В качестве проблемы технологии или ее реализации. Могу написать о фризе в OpenGL \ DX<12. Где из за нагрузки ядра 25%(говорю про 4 ядра) у тебя будет фриз игры. Причина может быть даже не в игре. А просто в том что браузер загрузил тоже ядро или еще какое то приложение. Этим страдают многие GAPI которые не думают о CPU. На мобилках это еще более большой бич. Понять это все можно только нагружая ЦП разными фоновыми апами при игре. Музыкой, браузер запущенный в фоне и.т.д. Это пример, маленький кусочек предметной области. Который актуален в новых инди движках. Который давно искоренен в юнити и подобных мастодонтах. Это к вопросу написать хорошо. Говорить можно сколько угодно, приводить хорошие проекты в пример. Или крайне простые. Да хоть супер сложные. Реальность как по мне, заключается в том ЧТО НАПИСАННО ХОРОШИЙ РЕНДЕР, КОТОРЫЙ БАЗИРУЕТСЯ НЕ НА ПРОВЕРЕННЫХ ТЕХНОЛОГИЯХ, ПРАКТИЧЕСКИ НЕТ! Рейлиб невходит в это число, и если кто то напишет по качеству что то близкое к ловке. Я скажу вот это ты молодец! Профи. По факту этого нет. Это есть частично в Monogame, частично потому что базируется на других технологиях. FNA\ DXTK\ Godot(с нюансами)\ Unity\ \парочка либ на вгпу\внезапно браузер\ловка и еще некоторые технолологии.Вот из ТЫСЯЧ рендеров разных энтузиастов , попыток написать свое. +- хорошие решения выше и +-10 еще можно выделить. Когда говорят написать свой рендер просто. Честно мне смешно, потому что нормальный рендер делается лет 5. Желательно с аудиторией огромной или фермой устройств. Потому что тот же OpenGL. ДАже в ES2 ведет себя СИЛЬНО по разному от реализации вендора. ДА можно писать простые игры, да можно сделать свое. Но сделать что то хотя бы близкое к уровня ловки. Это надо капец как постараться. Даже урвоень рейлиба я бы отметил выше среднего. Так же как Эбитен. Но для меня это тир A\B потому что финдаментально там есть проблемы которые упираются в слабые CPU. Переписывать весь спрайт батчинг, то есть всю систему рендеринга спрайтиков. Изучая разные инструкции и команды OpenGL которые по спеке может и можно применить, но на деле лучше заменить аналогами. Оптимизировать это все с помощью хотя бы автовекторизированного кода достаточно сложно. Если говорить прямо в рейлибе очень примитивные контейнеры. И я еще раз скажу. Рейлиб для определенного уровня игр хорош. Для тулз, некоторых апов. Но есть факты и переписывать всю кор часть, а потоп поверх переписывать всю работу с текстурами и шейдерами. ТО что мне пытаются тут сказать. Это == написать свой рейлиб. GLFW \SDL я и так могу взять. RLGL прикольная вещь, но не оптимальная. И что остается? Но я это все к чему. рендер это сердце игры которое хочется иметь лучше. на мой вкус и на моих тестах в ловке он очень хорош. В теории будь рендер написать вменяемо сложно. у нас было бы их много и все были бы такими хорошими. На практике человек должен уметь делать кешфрендли слайсы с нормальными аллокаторами для начала, заканчивая пониманием как работает та или иная команда opengl в конкретной спеке и что многое зависит от устройства \ драйвера\ вендора. Да и в целом предметка достаточно серьезная.
Re
Ты предлагаешь тратить больше времени на инструмент. Не надо выдумывать мои слова за меня. Подразумевается, что рассуждения на тему "современности" движков и их пайплайнов — не относятся к играм. Подразумевается, что рассуждения на тему "производительности" — не относятся к играм. Подразумевается, что список использованных технологий не относится к "хитовости" игр. Подразумевается, что прослойки не заменяют разработчика. Гений напишет три строчки которые будут лагать на китайском квантовом суперкомпутере за 1кккк млрд баксов. Применяющий мозги на чём угодно напишет принципиально что угодно, и будет работать нормально.
Про пример с crimsonland. Велеколепная игра, но с точки зрения реализации. Надо понимать что в ней есть упрощения. Масштабы карты. Поведение монстров. Когда он явно на тебя не реагирует, а заполянет пространство. Энивей пример хороший, не знаю сколько в студии было разрабов, но игра шикарна. Вопрос в том, что это скорее исключение из правил. По этому нормально делай, нормально будет и разработка игр не всегда по пути. В частности от части из за рендера, в частности потому что OpenGL имеет мгного болезней. А поддерживать кучу апи было сложно. На этом всем выиграли около коммерческие движки. Выжили сильнейшие инди движки. Какие то стали популярыными. Рендер изначально самая большая болячка, которую вулкан частично решает или в перспективе. А похожие по своей структуре API Metal\ DX12\ Vulkan\WebGPU , ложатся в более оптимальные абстракции. Старички стараются подтянуться до этого уровня таже команда FNA которая реализовала по сути SDL3 gpu. Monogame со своей роадмапой. Годот который пытался сам, повезло еще и деняг на команду дали. Про ААА и Юнити и говbрить нечего. там всегда было лучшее и иногда для совместимости OpenGL. Да я и сам долгое время был за OpenGL и был бы в ES3 нормальная поддержка компьютов и разных мелочей, оставался бы в этом лагере до последнего, но увы, увы.
Snusmumriken
Про пример с crimsonland. Велеколепная игра, но с точки зрения реализации. Надо понимать что в ней есть упрощения. Масштабы карты. Поведение монстров. Когда он явно на тебя не реагирует, а заполянет пространство. Энивей пример хороший, не знаю сколько в студии было разрабов, но игра шикарна. Вопрос в том, что это скорее исключение из правил. По этому нормально делай, нормально будет и разработка игр не всегда по пути. В частности от части из за рендера, в частности потому что OpenGL имеет мгного болезней. А поддерживать кучу апи было сложно. На этом всем выиграли около коммерческие движки. Выжили сильнейшие инди движки. Какие то стали популярыными. Рендер изначально самая большая болячка, которую вулкан частично решает или в перспективе. А похожие по своей структуре API Metal\ DX12\ Vulkan\WebGPU , ложатся в более оптимальные абстракции. Старички стараются подтянуться до этого уровня таже команда FNA которая реализовала по сути SDL3 gpu. Monogame со своей роадмапой. Годот который пытался сам, повезло еще и деняг на команду дали. Про ААА и Юнити и говbрить нечего. там всегда было лучшее и иногда для совместимости OpenGL. Да я и сам долгое время был за OpenGL и был бы в ES3 нормальная поддержка компьютов и разных мелочей, оставался бы в этом лагере до последнего, но увы, увы.
Один
Snusmumriken
Это противоречит законам инфомартики. У каждого пк есть лимиты. RenPy \ GameMaker\ Godot все еще сильно лагают на многих устройствах. Видимо разработчики кривые. Хотя там есть хорошие игры и даже хиты. Никто не спорит что есть талантливые программисты, есть студии которые могут оптимизировать целые игры. Есть просто студии в которых есть ресурсы. А есть просто обычные разработчики. Которые думают и выстраивают приоритеты над игрой, а не движком. Как результат это дает больше плодов, даже если что то лагает и.т.д. и.т.п. Важно что бы было играбельно. Сделать можно и на голом OpenGL и вообще без GPU. Вопрос времени и ресурсов. С этим тоже спорить не буду. Делайте. Статистика говорит что подход где не плывут против течения более эффективный. ДЛя кого то может быть иная ситуация. К сожалению на деле хороший рендер можно написать занимаясь им очень долго понимая особенности и работая с конкретными железками. Получая фидбек. В качестве проблемы технологии или ее реализации. Могу написать о фризе в OpenGL \ DX<12. Где из за нагрузки ядра 25%(говорю про 4 ядра) у тебя будет фриз игры. Причина может быть даже не в игре. А просто в том что браузер загрузил тоже ядро или еще какое то приложение. Этим страдают многие GAPI которые не думают о CPU. На мобилках это еще более большой бич. Понять это все можно только нагружая ЦП разными фоновыми апами при игре. Музыкой, браузер запущенный в фоне и.т.д. Это пример, маленький кусочек предметной области. Который актуален в новых инди движках. Который давно искоренен в юнити и подобных мастодонтах. Это к вопросу написать хорошо. Говорить можно сколько угодно, приводить хорошие проекты в пример. Или крайне простые. Да хоть супер сложные. Реальность как по мне, заключается в том ЧТО НАПИСАННО ХОРОШИЙ РЕНДЕР, КОТОРЫЙ БАЗИРУЕТСЯ НЕ НА ПРОВЕРЕННЫХ ТЕХНОЛОГИЯХ, ПРАКТИЧЕСКИ НЕТ! Рейлиб невходит в это число, и если кто то напишет по качеству что то близкое к ловке. Я скажу вот это ты молодец! Профи. По факту этого нет. Это есть частично в Monogame, частично потому что базируется на других технологиях. FNA\ DXTK\ Godot(с нюансами)\ Unity\ \парочка либ на вгпу\внезапно браузер\ловка и еще некоторые технолологии.Вот из ТЫСЯЧ рендеров разных энтузиастов , попыток написать свое. +- хорошие решения выше и +-10 еще можно выделить. Когда говорят написать свой рендер просто. Честно мне смешно, потому что нормальный рендер делается лет 5. Желательно с аудиторией огромной или фермой устройств. Потому что тот же OpenGL. ДАже в ES2 ведет себя СИЛЬНО по разному от реализации вендора. ДА можно писать простые игры, да можно сделать свое. Но сделать что то хотя бы близкое к уровня ловки. Это надо капец как постараться. Даже урвоень рейлиба я бы отметил выше среднего. Так же как Эбитен. Но для меня это тир A\B потому что финдаментально там есть проблемы которые упираются в слабые CPU. Переписывать весь спрайт батчинг, то есть всю систему рендеринга спрайтиков. Изучая разные инструкции и команды OpenGL которые по спеке может и можно применить, но на деле лучше заменить аналогами. Оптимизировать это все с помощью хотя бы автовекторизированного кода достаточно сложно. Если говорить прямо в рейлибе очень примитивные контейнеры. И я еще раз скажу. Рейлиб для определенного уровня игр хорош. Для тулз, некоторых апов. Но есть факты и переписывать всю кор часть, а потоп поверх переписывать всю работу с текстурами и шейдерами. ТО что мне пытаются тут сказать. Это == написать свой рейлиб. GLFW \SDL я и так могу взять. RLGL прикольная вещь, но не оптимальная. И что остается? Но я это все к чему. рендер это сердце игры которое хочется иметь лучше. на мой вкус и на моих тестах в ловке он очень хорош. В теории будь рендер написать вменяемо сложно. у нас было бы их много и все были бы такими хорошими. На практике человек должен уметь делать кешфрендли слайсы с нормальными аллокаторами для начала, заканчивая пониманием как работает та или иная команда opengl в конкретной спеке и что многое зависит от устройства \ драйвера\ вендора. Да и в целом предметка достаточно серьезная.
Расхождений с действительностью настолько много, что уже нет смысла продолжать. Молодец, закидал буквами.
Snusmumriken
Это конечно пека а не мобилка 🤔 Но тут и не батчинг в единый меш
Re
Это конечно пека а не мобилка 🤔 Но тут и не батчинг в единый меш
если хочешь можешь скинуть проект. запущу на целевом ноуте. интересно будет сравнить цифры!
Re
Это raylib-lua
не буду же я по видео переписывать текст)
Snusmumriken
Если что, изменишь количество спрайтиков
Snusmumriken
Запустишь — перетаскиванием скрипта на raylua_s.exe
Re
Re
В среднем там 30
Snusmumriken
Но полагаю, уже сильно лучше того что было у тебя.
Snusmumriken
Это конечно пека а не мобилка 🤔 Но тут и не батчинг в единый меш
^ и один дровколл, но я обязательно что-нибудь придумаю.
Re
Ты конечно молодец. Но тут 30 фпс, и есть нюанс. Я говорил про 48 пикселей.
Re
Нет большой разницы.
Для обычных видеокарт да. для дискретных огромная и для мобильных.
Snusmumriken
Для обычных видеокарт да. для дискретных огромная и для мобильных.
Нет, большой разницы всё ещё нет. Особенно в твоих условиях жалких пары тысяч спрайтов.
Snusmumriken
Кстати, ты что-то слышал про куллинг? Сколько спрайтов единовременно видно на экране?
Cloop210
Снус разносит vi
Snusmumriken
Snusmumriken
х2? х4? х8?
Snusmumriken
Ты пиксельную игру делаешь или нет?
Re
Какое у тебя масштабирование?
Оно работает в обе стороны. Что то я уменьшаю, что то увеличиваю. Средний спрайт умешается в 48 пикселей. самый маленький в 8. Есть маленькие в большое. Есть большое в маленькое.
Lunatic
opengl говорите
Lunatic
вы вот не знали а slang уже попал в vulkan sdk
Lunatic
Igor
А у меня тут очередная победа над сетевым стеком плойки, смог лан плей завести в некоторых играх
Igor
usernameak
вы вот не знали а slang уже попал в vulkan sdk
в Vulkan SDK есть даже Microsoft DXC, о чём ты? :)
Сергей
https://github.com/dail8859/NotepadNext
Сергей
ого чо запилили!
Сергей
ну хотя проект уже с 19 года существует, но да не суть
.
Эм
.
notepad ++ что-ли
(≧∇≦)
notepad ++ что-ли
да не, видно же что вим
.
да не, видно же что вим
А если без шуток
Сергей
notepad ++ что-ли
кроссплатформенная его реализация
(≧∇≦)
хотя наверное все таки вскод
Сергей
ну буквально ведь написано " A cross-platform, reimplementation of Notepad++"
(≧∇≦)
Lunatic
Скажите как из sdl3 окна получить указатели на окно и дисплей для bgfx
Lunatic
Lunatic
Сделайте мне справку что я псих и выходите за меня замуж
Михаил
Понял
о да, не только я такого мнения..
Михаил
просто куча базы
Lunatic
Xmake вместо cmake вам в руки
Lunatic
Там скрипты сборки на lua
Lunatic
И можно пакеты из Conan брать
Lunatic
Lunatic
Xmake лучше
Lunatic
Сначала лошади потом повозки потом Феррари
Михаил
и все равно лошадь иногда бывает лучше ;)
Михаил
если сравнивать эти три штуки с GNU make, cmake, xmake
Михаил
мейкфайлы прямо нормальная система сборки
Михаил
берешь луа и скрипты хуяришь и вызываешь из него, всё, вот тебе и поиск либ удобный, и разрешение зависимостей (правда без хедеров, но то тоже можно прикрутить наверно)
Igor
Единственное, что меня в CMake не устраивает - это неадекватные сторонние разработчики библиотек, которые не умеют нормально подготавливать скрипты. Когда у тебя есть большой проект с, ну скажем, 20+ третьесторонних библиотек, заставить их компилиться вместе в том виде, в котором нужно и нравится тебе, почти нереально
Lunatic
а теперь добавьте кросс-компиляцию
Lunatic
и эти мерзкие пресеты, я прям как дед-пердед не люблю новые фичи cmake
Lunatic
40 зависимостей и у каждой нюхай пресеты
Lunatic
под каждую целевую систему кросс-компиляции
Igor
а теперь добавьте кросс-компиляцию
Тяжёлый кросс компил не проблема, это следствие проблемы криворуких разрабов. Если библиотеки написаны адекватными человеками, которые знают, что они делают, только в таком случее CMake – это дар, в остальных – проклятие
Lunatic
особо одаренные и из спичек дом построят
Igor
особо одаренные и из спичек дом построят
Вот как раз из-за особо одарённых мы имеем такие вещи как ExternalProject, FetchContent и прочие весёлости CMake
Igor
Мне вот допустим нихрена не весело было заставлять вот это вот дело всё заработать вместе)))
Igor
Мне вот допустим нихрена не весело было заставлять вот это вот дело всё заработать вместе)))
А сейчас сверху всего вот этого ещё нужно и LLVM с MLIR накрутить нам, чтобы оно собиралось всё автоматизированно
Lunatic
-- shadercomp.lua function main(target, o) import("lib.detect.find_program") import("core.base.option") import("core.project.depend") local pk = target:pkg("vcpkg::shader-slang") local toolsdir = path.join(path.directory(path.directory(pk:libraryfiles()[1])), "tools") local slangc = path.join(toolsdir, "shader-slang/slangc") local spirvcross = path.join(toolsdir, "spirv-cross/spirv-cross") -- print(o) o.sourcefiles = o.sourcefiles or {} o.targets = o.targets or { { target = "spirv", profile = nil } } -- print(#o.sourcefiles) for i, sourcefile in ipairs(o.sourcefiles) do local basename = path.basename(sourcefile) local outname = path.join(target:targetdir(), basename) os.mkdir(target:targetdir()) depend.on_changed(function() local codegen_targets = {} local function run_slangc(o2) o2.entry = o2.entry or o.entry or "main" local argv = { "-target", o2.target, "-o", outname .. "." .. o2.target } if o2.profile then table.append(argv, "-profile") table.append(argv, o2.profile) end table.append(argv, "-entry") table.append(argv, o2.entry) table.append(argv, sourcefile) os.vrunv(slangc, argv) table.append(codegen_targets, o2.target) end -- code gen running for i, target in ipairs(o.targets) do if target.target == "gles" then -- add gles os.vrunv(spirvcross, { "--es", "--version", target.version or "200", outname .. ".spirv", "--output", outname .. ".gles", }) table.append(codegen_targets, "gles") else -- print(o.targets[i]) run_slangc(o.targets[i]) end end -- generate header local header_content = {} table.insert(header_content, string.format("// Generated from %s\n", basename)) for i, target in ipairs(codegen_targets) do local array_name = string.format("shader_%s_%s", path.filename(basename), target) local array_content = io.readfile(outname .. "." .. target, "b") table.insert(header_content, string.format("static const uint8_t %s[] = {", array_name)) local bytes = {} for i = 1, #array_content do table.insert(bytes, string.format("0x%02x", string.byte(array_content, i))) end table.insert(header_content, table.concat(bytes, ", ")) table.insert(header_content, "};\n") end io.writefile(outname .. ".h", table.concat(header_content, "\n")) end, { files = table.join2({ "xmake.lua" }, o.sourcefiles) }) end end
Lunatic
-- xmake.lua add_repositories("local-repo xmake-repo") add_rules("mode.debug", "mode.release") add_requires("vcpkg::shader-slang", {host = true}) add_requires("vcpkg::spirv-cross", {host = true}) --add_requires("conan::sdl/3.2.14") --add_requires("conan::bgfx/cci.20230216") add_requires("vcpkg::sdl3") add_requires("vcpkg::bgfx") target("shaders") add_packages("vcpkg::shader-slang", "vcpkg::spirv-cross") set_kind("phony") on_load(function(target) target:add("includedirs", target:targetdir(), { public = true }) end) on_config(function(target) import("shadercomp") shadercomp(target, { sourcefiles = os.files("shaders/*.slang"), targets = { { target = "spirv" }, { target = "gles", version = "300" }, { target = "glsl" }, }, entry = "fragmentMain" }) end) target("a") set_kind("binary") add_deps("shaders") add_files("src/*.cpp") --add_packages("conan::bgfx/cci.20230216") --add_packages("conan::sdl/3.2.14") add_packages("vcpkg::bgfx") add_packages("vcpkg::sdl3")
Lunatic
bgfx, sdl, плюс компиляция шейдеров через slang
Lunatic
но conan пакеты работают лучше, в vcpkg порой прям плохо
Lunatic
мне кажется гораздо лучше чем та cmake-колбаса