Сохранен 21
https://2ch.hk/gd/res/454981.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

SDL Hell

 Аноним 07/11/17 Втр 00:13:07 #1 №454981 
sankarea-ep-12-5.jpg
Сначала морозная история:
Я пиляю своего убийцу юнити, и все у меня было хорошо (кнопка на патреон и майнер битков уже есть), до тех пор пока я не добрался до графической подсистемы.
И тут я столкнулся с охуительнейшим часом досуга в мире юникс, а именно с багом фичей SDL2 которая заключается в том, что SDL_RenderCopy - ебаное тормозное говнище которое ставит раком любую систему уже при 20-30 вызовах в секунду (и это блядь при том, что я делаю рендер в текстуру которой выставлен SDL_TEXTUREACCESS_TARGET).
В интернете пацаны говорят что надо делать через отрисовку всего говна в буфер с SDL_TEXTUREACCESS_STREAMING, что по факту превращает текстуру в SDL_Surface с более другим типом (в который мы так же блитим сурфейсы как делали это диды на SDL1.x).

Если кто-нибудь насиловал SDL2, это действительно так и SDL_Texture это наебалово, а я повелся как лох? Всмысле того, что хуй мне а не аппаратно ускоренный рендер в чем ускорение блядь, если я все, что надо делают в RAM с помощью CPU а не просто говорю GPU - скопируй кусок из оттуда в вон туда а потом хуйни все в скринбуффер когда я делаю Render_Present?
Аноним 07/11/17 Втр 00:15:11 #2 №454983 
>>454981 (OP)
>своего убийцу юнити
Расскажешь?
Аноним 07/11/17 Втр 00:18:58 #3 №454986 
>>454983
Хуле там рассказывать? Школоподелие с косо прилепленным lua которое пробрасывает в lua SDL API, чтобы не надо было каждый раз по полчаса канпелять сишный код когда я хочу передвинуть спрайт на пиксель.
Аноним 07/11/17 Втр 00:21:39 #4 №454987 DELETED
Разве от SDL не всего несколько строчек нужно? Ты же его юзаешь только для создания окошка и GL-дескриптора(или как там его).
А графон месишь уже GL-ом, а не SDL.

Simple Directmedia Layer

И сдл-ем только свапаешь буферы при выводе кадра. Ну и управление считываешь.
Аноним 07/11/17 Втр 00:37:38 #5 №454989 
JOI-waifu-wednesday-shidare-hotaru-3.jpg
>>454987
Я решил зарубиться в него по хардкору, так как люблю извращения.

Просто сначала они в доках пишут мол хуячте все в аппаратно ускоренный SDL_Texture, и потом будете их аппаратно-ускоренно выводить на аппаратно-ускоренный экран.
А потом оказывается, что когда начинаешь собирать тайловый бэкграунд тормоза начинаются при количестве тайлов меньше 500 да хуле там, 100 рендеров уже вызывает атата ,
Я недопонял юмор в этой ситуации. Где обещанное ускорение? Если я сам должен строить конвеер отрисовки кадра да я его и так уже построил ебана, я жэ в бэкбуффер рисую , то нахуя было топить в туториалах за использование текстур, которые как оказывается используются как непонятная хуйня, которая загружается в видеопамять и лочится там насмерть, и чтобы туда что-то дорисовать нужно выгрузить ВЕСЬ ДЕСТИНЕЙШЕН-буфер в раму, выгрузить СОРЦ текстуру в руму, нарисовать туда и потом загрузить его обратно в видеокарту. Охуеть просто. Что за приколы? Нахуя тогда эти функции вообще есть?
Может я невкупаю в аппаратно-ускоренную фишку или там надо какую-то магию применять?
Аноним 07/11/17 Втр 00:50:02 #6 №454991 DELETED
>>454989
Может у тебя комп медленный и видюха без видеопамяти?
Аноним 07/11/17 Втр 00:53:45 #7 №454992 
>>454981 (OP)
SDL тебе нужен для работы с устройствами ввода и для инициализации OpenGL. Не используй больше ничего.
Аноним 07/11/17 Втр 01:02:04 #8 №454995 
aKqDovZ700b.jpg
>>454989
Естественно медленный. Но оно тормозит на 100+ рендерах на 1280х960xARGB, когда я ему говорю "скопируй текстуру из атласа (x.y.w.h) в текстуру-буффер (x.y,w,h)" сборка тайлового бэкграунда .
Ту же операцию оно на сурфейсах пережевывает без проблем.
Среди меня сейчас идут жаркие дискуссии на тему "я такой тупой и недогоняю чего или это так и задумано и прям всамом деле нужно сложные кадры собирать в оперативке а в текстуру они помещаются просто чтобы было потому, что модно-стильно-молодежно".
Подобные загоны на быстром компе работают быстро, но по профайлингу тот же затык что и на "медленном" т..е. рендер-копи сжирает 90% времени, что не есть хорошо, так как если постпроцессить фрейм дальше то там вообще начнется лютый пиздец, ведь я не делаю вообще нихуя сложного - просто память копирую из одного места в другое.
Аноним 07/11/17 Втр 10:15:28 #9 №455016 
>>454989

Потому что атласы собирай.

А вообще да, обычно SDL используется как более менее продакшн-реди запускайка для опенгла с клевыми батарейками в виде потоков, звука и инпута гейпадов.

Аноним 07/11/17 Втр 14:21:05 #10 №455055 
>>454981 (OP)
Тому что ты идиот.
Никто не использует SDL для рендера.
Аноним 07/11/17 Втр 14:30:46 #11 №455056 
>>455055
>Тому что ты идиот.
>Никто не использует SDL для рендера.

Вот и мне всегда казалось, что SDL - это такой навороченый глут который типа уже взрослый и со всеми наворотами.
Аноним 07/11/17 Втр 18:38:21 #12 №455125 
>>455056
Он навороченный, но не для рендера. Слой изоляции от железа.
Аноним 07/11/17 Втр 19:41:20 #13 №455148 
Лол, сам хз чё не так
Аноним 08/11/17 Срд 09:10:31 #14 №455218 
Dagashi Kashi - 03 - Large 21.jpg
Итак резюме на текущий момент:

Что было:
SDL Блит картинки без всинка 2100+ итераций в секунду на встроененом в ноут интеле (именно поэтому я вообще поверил в то, что можно на SDL рисовать графу).

Что есть:
После того, как подчистил некоторые куски кода от дампов с помощью std::cout (!) - ситуация с тормозами выровнялась до приемлемой (хотя сейчас статичный тайловый бек без анимаций, но бегает пара мобов + плеер).

Что говорят в интернете:
SDL Hardware accelerated renderer + vsync - тормозное говно слабо управляемое в части vsync (возможно чуваки пиздят и вертикальная синхронизация нормально вырубается уже, так как инфа старовата).

Че говорит гугол - SDL рендер сасает (где-то натыкался на тесты рендер копи текстурки в 1 пиксель занимает 20+ больше времени чем просто поставить пиксель), поэтому крузис на нем написать можно, но будет тормозить.

Способы акселерации когда опять упрусь в производительность:
Внезапно, он есть. Заключается в полном выбрасывании SDL2 и возврате в старое злое SDL1, когда весь конвеер рисует в стримминговую текстуру с помощью memcpy, а потом оно в свою очередь презентается в конце конвеера (кстати, нельзя вынести отрисовку в отдельный поток ибо не тред сейф операция, кекне то, чтобы я это умел, но оказывается, мультрединг должен организовываться не по принципу " основной поток форкает процесс отрисовки " а наоборот - "цикл рендера форкает основной процесс").
Аноним 08/11/17 Срд 09:14:02 #15 №455219 
>>455218
>Заключается в полном выбрасывании SDL2 и возврате в старое злое SDL1, когда весь конвеер рисует в стримминговую текстуру с помощью memcpy

А квады с текстурками из атласа с анимацией, не?
Аноним 08/11/17 Срд 11:48:04 #16 №455244 
>>455218
Используй OpenGL и не еби себя в анус вилкой.
Аноним 08/11/17 Срд 12:42:51 #17 №455261 
>>455219
Так уже. Поэтому и удивился просадке. Ведь я все картинки конверчу в текстуры. И они должны по идее дальше вариться в видяхе. А копировать куски памяти должен любой гпу уметь. Тем более что я не стопицот спрайтов ворочаю а всего пару соток.
Аноним 08/11/17 Срд 13:40:24 #18 №455279 
>>455218
>>455244
Ты идиот?
Аноним 11/11/17 Суб 14:19:49 #19 №455905 
>>454981 (OP)
Ммм. Чем https://love2d.org не угодил?
Почти все твои проблемы уже решили до тебя, включая lua с jit, за который ты отдельное спасибо скажешь.
Аноним 11/11/17 Суб 14:24:06 #20 №455906 
>>455905
Чмонь, ты б ему еще гейммейкер посоветовал.
Аноним 17/09/18 Пнд 20:39:35 #21 №527368 
>>454981 (OP)
Ты крутой прогер? Я вапобще не понимаю как можно сделать редактор типа Юнити, в принципе не понимаю вообще низкоуровневого программирования.
comments powered by Disqus

Отзывы и предложения