Войти
ПроектыФорумОцените

Фреймворк LDL (6 стр)

Страницы: 15 6 7 827 Следующая »
#75
(Правка: 21:05) 21:02, 19 дек 2022

Рендерферма кроликов
Идеи и мысли форумчан по доработке я записываю в бэк лог. Очень не хватало обратной связи.

Я бэкенд разработчик, упарываюсь в оптимизацию всей бэк части. База, запросы, сервисы, хранение и обработка данных. Но в графике и геймдеве прям слабоват. Для меня это новая область.

#76
23:21, 19 дек 2022

Исправил проблему соответствием размеров окна и размерами клиентской области рендера. Теперь скрин рендера корректно сохраняется.

#77
0:07, 20 дек 2022

JordanCpp
> Еще есть вариант, что через пару месяцев после релиза первой версии фреймворка, пойму, что оно никому не нужно

Так я предлагал сразу ко второму пункту перейти. Будет больше времени чтоб получше API Блендера освоить )))

И по мне убийца допустим Substance Painter-a звучит лучше, чем убийца SDL, или что там у тебя.

#78
0:12, 20 дек 2022

Der FlugSimulator
> И по мне убийца допустим Substance Painter-a звучит лучше, чем убийца SDL, или
> что там у тебя.
Это аналог SDL или по простому велосипед по мотивам SDL:)

Я понимаю твою иронию. Но ведь когда то и SFML вызывал иронию.

Мне нужно закрыть гештальт:) В любом случае получу неплохой опыт + пойму как оно работает в унутрях:)

#79
0:13, 20 дек 2022

Der FlugSimulator
> Так я предлагал сразу ко второму пункту перейти. Будет больше времени чтоб
> получше API Блендера освоить )))
Я тогда пойду пилить двиг Arcanuma' а на SDL. :)

#80
0:58, 20 дек 2022

Решил глянуть что же там за фреймворк поверх эмулятора. С чего начинают обычно изучать фреймворк? Конечно же с примеров. Благо они в репозитории есть. Ткнул в рандомный пример:
https://github.com/JordanCpp/Lib-LDL/blob/master/Examples/Graphic… Rect/main.cpp
Смотрю:
render.Begin(); - видимо начинаем рендер
render.Color(Color(0, 162, 232)); - задаем цвет очистки, так, понятно
render.Clear(); - очищаем оконный буфер, понятно
что же будет дальше... наверное отрисовка? Не угадали. Дальше:

      if (report.Type == LDL::Events::IsQuit)
      {
        window.StopEvent();
      }

ЕСЛИ_ТИП_СОБЫТИЯ_ВЫЙТИ->ОКНО.СТОП_СОБЫТИЯМ!
Вот так вот. Не где-то там, а прямо аккурат между render.Begin/render.End-ом.
А самая хохма еще в том, что мы рисуем на ЛЮБОЕ событие. Ну то есть пользователь такой, закрывает приложение, а код рендера ему: "Пажжжжи дарагой! Паааадержи моё пиво! Я сейчас буду риии..ИК..совать".

Ну ладно. Думаю мб пример старый какой. Дай открою другой:
https://github.com/JordanCpp/Lib-LDL/blob/master/Examples/Graphic… tion/main.cpp
А нет, старый добрый друг ЕСЛИ_ТИП_СОБЫТИЯ_ВЫЙТИ->ОКНО.СТОП_СОБЫТИЯМ! на месте.
Зато рядом поселился еще один товарищ:

      if (report.Type == LDL::Events::IsMouseMove)
      {
        x = report.Mouse.PosX;
        y = report.Mouse.PosY;
      }

Прямо посреди render.Begin/render.End-а проверяем. Если вдруг событие МаусМув, то посреди рендера прямо мы такие: давай сохраним поизцию мыши в переменные, которые там перед циклом были объявлены, чтобы когда мы будем закрывать окно, то знать по каким координатам рисовать тут...

К fpsCounter тоже вопросы. Например почему Calc возвращает true/false. Почему если он знает, что true, то сам себя не может Clear. Или почему convert.Convert из числа в строку может вернуть false... И что мне делать если false? Это какая-то ошибка? Ну и удобство заводить объект, у которого звать Convert, а потом Result - отдельный разговор.

А в целом код - эталон бесполезной работы CPU. Когда мы на любое событие рисуем кадр. Вне зависимости от того, нужно его рисовать или нет. Даже когда мы закрываем приложение, мы радуем пользователя на последок, и рисуем ему самый самый финальный кадр. А только потом закрываем прилоложение.

#81
(Правка: 1:10) 0:59, 20 дек 2022

уже несколько раз проскочили амбициозные нотки со ссылками на относительно успешные проекты, которые якобы так же начинали, поэтому не могу сдержаться. заранее прошу прощения за непрошеное мнение.

успешные проекты обычно начинаются либо как разработка для собственных практических нужд автора или его ближайшего окружения, потом обрастая аудиторией, либо начинаются с успешного proof-of-concept, публикация которого вызывает интерес аудитории, подогревающий дальнейшую разработку. или и то и то сразу.

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

#82
(Правка: 1:24) 1:18, 20 дек 2022

В догонку к моему предыдущему посту. Последний из примеров:
https://github.com/JordanCpp/Lib-LDL/blob/dcdab2ece4af37bde04c5e0… /main.cpp#L52
Не, ну а чо оно жужжит вентиляторами на примере из кубика, и полностью валит одно ядро. Пусть там будет sleep если оно такое быстрое. :)

А еще я вот какую функцию нашел:
https://github.com/JordanCpp/Lib-LDL/blob/ca90bc7eb0cdfaf5121dc27… Window.cpp#L9
Свитч конечно доставляет, но угадайте, что будет, если нажать клавишу Enter? Зато convert безопасный, может false вернуть.

UPD. А не, не может convert целого в строку вернуть false: https://github.com/JordanCpp/Lib-LDL/blob/e7b1995f8888e394f1337de… String.cpp#L9
А библиотечное конвертирование понятное дело автора не устроило.

#83
1:22, 20 дек 2022

MrShoor
Со всем согласен, перемудрил. Буду исправлять. Когда сам пишешь, себе кажется всё ок, всё логично. Со стороны виднее. Спасибо.


MrShoor
> А в целом код - эталон бесполезной работы CPU. Когда мы на любое событие рисуем
> кадр. Вне зависимости от того, нужно его рисовать или нет. Даже когда мы
> закрываем приложение, мы радуем пользователя на последок, и рисуем ему самый
> самый финальный кадр. А только потом закрываем прилоложение.
Подскажи как должно быть. Хоть на псевдокоде или как у меня в примере должно быть.

#84
(Правка: 1:35) 1:32, 20 дек 2022

kkolyan
В принципе да. Так и есть. Пока пилю для себя, но по возможности делаю проект универсальным. Пиши плиз, лучше правду как говорится. Амбиции конечно есть, естественно я хочу, что бы в мире все программисты разрабатывали софт на С++.:) Более реалистичная идея написать фреймворк.

#85
1:33, 20 дек 2022

MrShoor
> Пусть там будет sleep если оно такое быстрое. :)
Ну да. Смысл греть ноут.
MrShoor
> Свитч конечно доставляет, но угадайте, что будет, если нажать клавишу Enter?
> Зато convert безопасный, может false вернуть.
Таки срамота:) Были мысли сделать через массив.

#86
1:35, 20 дек 2022

MrShoor
> UPD. А не, не может convert целого в строку вернуть false:
> https://github.com/J… String.cpp#L9
> А библиотечное конвертирование понятное дело автора не устроило.
Добавлю обвязку для itoa.

#87
1:36, 20 дек 2022

JordanCpp
> Подскажи как должно быть. Хоть на псевдокоде или как у меня в примере должно
> быть.
Деды, которые писали графические приложения на Pentium1 были суровыми дядьками. Процессоры были слаааабые. Настолько слабые, что операция рисования занимала непомерно много времени. И чтобы хоть как-то влезть в эти суровые лимиты было решено отрисовку откладывать. Собственно для этого и придумали такую штуку как сообщения WM_PAINT. Во-первых, это сообщение всегда будет одно в очереди сообщений. Во-вторых, в очереди сообщений оно вообще не лежит, просто в момент Peek/GetMessage винда проверяет, если у окна есть зона требующая перерисовку, то она формирует это сообщение на лету. В-третьих, это событие с пониженным приоритетом, и пока в очереди есть хоть одно другое сообщение (кроме WM_TIMER) - оно будет обрабатываться. А WM_PAINT сгенерится только тогда, когда других событий не будет.

Вопрос: Но я хочу елозить мышкой по окну, и чтобы оно реагировало! Как сделать?
Ответ: Нужно в момент, когда ты елозишь мышкой, внутри события WM_MOUSEMOVE пометить зону, требующую перерисовку с помощью функции InvalidateRect. Тогда, когда очередь сообщений будет пуста - твой помеченный регион будет доступен внутри WM_PAINT сообщения как clip rect. Его и перерисовывай.

#88
1:41, 20 дек 2022

MrShoor
Как говорится от души. Поправлю код и добавлю тебя в редми.

#89
1:51, 20 дек 2022

JordanCpp
> Ну да. Смысл греть ноут.
Греть никакого смысла нет. Как и перерисовывать картинку если она не изменилась.
Если же у тебя картинка постоянно меняется, ты хочешь перерисовывать всё время, то ограничить лучше аппаратно по вертикальной синхронизации. Тебе нужен SwapInterval: https://stackoverflow.com/questions/589064/how-to-enable-vertical… ync-in-opengl

Страницы: 15 6 7 827 Следующая »
ПроектыФорумОцените