entryway
> Та да. SDL даже не импортирует ShowCursor для своего SDL_ShowCursor. Просто ставит прозрачный.
чем меньше зависимостей от api операционки тем лучше, так что всё правильно делают.
entryway
> Просто ставит прозрачный.
SDL кроссплатформенный и это наверняка сделано как общее решение. На линуксовом X11/Xlib например нет никакого ShowCursor().
Надо =A=L=X= кастануть, он спец по проблематике говноAPI.
entryway
> Да и название функции не отражает того, что она делает
вангую, что когда-то она задумывалась как глобальная (вкл/выкл), но потом внезапно где-то огребли и сделали реф-каунтингом.
entryway
> Тебе такое поведение пригодилось хоть раз?
конкретно прятать курсор нет... ну или что-то когда-то было, что я уже не помню. (3д шутеры, я не часто пишу)
Но вот определять поведение по реф каунтингу - да!
Периодически, и связаное с UI поведением, приходится применять.
Самый свежий пример. в игре есть верхнее меню (котороя всякие статы показывает ну и т.п.)
И пользователь может руками (или автоматом по таймауту), отключать это меню.
А ещё в отключение и включение меню может скриптоваться. (например, скрыть на момент какой-нить катсцены в игре)
И в итоге, к этому отключению приматывается рефкаунтинг. Ну т.е. если человек выключил панельку ещё до катсцены.
То даже несмотря на то, что в скрипте по окончанию ката написано "включить меню обратно", визуально оно не покажется, ну потому что игрок раньше пожелал его отключить.
Но случаи такого рефкаунтинга редки, в большинстве случаев связаны с UI, но конечные пользователи страдают, если не реализовано нормально.
Вбил в гугл "raymond chen showcursor" и вот:
What was the ShowCursor function intended to be used for?
https://devblogs.microsoft.com/oldnewthing/20091217-00/?p=15643
Оказывается, ShowCursor придумали для систем без мыши. Вот так вот.
При длительных операциях на системах без мыши всё равно хотелось показывать курсор с часиками, а всё остальное время прятать, чтобы он не висел в центре экрана. На системах с мышью счетчик инициализируется нулем, а без мыши - минус единицей. В результате код ниже в обоих случаях работает правильно - в системах без мыши показывает курсор и прячет, а в системах с мышью ничего не изменяется, курсор всегда виден.
hcurPrev = SetCursor(LoadCursor( NULL, IDC_WAIT)); ShowCursor( TRUE); // force cursor shown on mouseless systems // ... perform long operation ... ShowCursor( FALSE); // re-hide cursor on mouseless systems SetCursor( hcurPrev);
Получается, на системах с мышью ShowCursor в принципе не предназаначен для скрытия курсора, по сути это просто заглушка.
entryway
> При длительных операциях на системах без мыши всё равно хотелось показывать курсор с часиками, а всё остальное время прятать, чтобы он не висел в центре экрана. На системах с мышью счетчик инициализируется нулем, а без мыши - минус единицей.
Ох. Не костыль, а костылище!
entryway
т.е курсор показывается, когда счетчик >=0 ?
> на системах с мышью ShowCursor
А в шутере как скрывать? Или присваивать прозрачный?
Кэш шейдеров на NV решил глюкануть - повисает компиляция рейтрейс шейдера и стоппорится драйвер в других потоках, при повторном запуске тоже самое, но если чуть поменять шейдер, то все норм, а потом поменять обратно и снова все норм. То есть один и тот же код в зависимости от запуска может повесить драйвер, если криво закэшировался.
Решил сделать отдельную прошивку для Arduino Uno которая бы программировала Bluetooth-свистки HC-06 на заданные скорость обмена и имя блютуф-устройства.
И сделал вот такую вот прикольную глупую глупость:
const int speeds[] = { 0, 1200, // 1 2400, // 2 4800, // 3 9600, // 4 19200, // 5 38400, // 6 57600, // 7 115200, // 8 };
Номер в комментарии это номер для AT-команды "AT+BAUDx" которая засылается в свисток для выставления скорости.
Нулевой слот просто для привычного описания массива, он никогда не задействуется.
Но боже мой, какая же глупость в коде выше!
Когда понял - прям почувствовал себя говнокодером...
/A\
> Кэш шейдеров на NV решил глюкануть
Очевидно, что драйвер не thread safe.
=A=L=X=
> Но боже мой, какая же глупость в коде выше!
запятая?
Aroch
> запятая?
После 38400 должно быть 76800, а не 57600.
iw4nna.rock
> После 38400 должно быть 76800, а не 57600.
кому должно? Если ему нужно банальное удвоение то битовым сдвигом это решается без всяких таблиц.
Aroch
> битовым сдвигом это решается без всяких таблиц
Кому нужен битовый сдвиг, когда нужен массив?
iw4nna.rock
> Кому нужен битовый сдвиг, когда нужен массив?
чтобы что?