nes
> Так я и не балуюсь, компилятор сам все упаковывает и при этом предупреждает,
> что впиндюрил выравнивание.
А ты уверен, что какой-то из инклудов прагму не вставил?
samrrr
Уверен.
nes
> Уверен.
Тогда заглушай ворн есл тебя это устраивает. Как это сделать гуглится легко.
samrrr
Я же писал, что знаю как это делать и хотел бы обойтись без этого.
nes
> Я же писал, что знаю как это делать и хотел бы обойтись без этого.
Цифру в алигне поменяй, и поля сортани по размеру. char buff_unused[x] в конец допиши.
что-то из этого точно должно помочь.
Алексей Патрашов
> Я её в первый раз пытался через вложенные if then решать
Честно говоря даже непонятно как if-then тут помогает. Даже если специально подумать, ничего в голову не приходит.
Первая мысль - раз нужна история из пяти кликов, значит нужно иметь массив для истории кликов.
Вторая мысль - что в массиве хранить? Очевидно те данные которые как то эти клики различают.
Фишка от Aslan: хранить в поле сразу указатель на функцию на нужную сортировку
Третья мысль: организовать ротацию данных массива через shift - push на каждом клике
И четвертая: как данные из массива извлекать. Можно for нагородить, а проще forEach
nes
> Это крайний случай.
Я отключил глобально это предупреждение. А так, ну вот тебе вариант:
#if defined(_MSC_VER) # define BEGIN_NWARN(n) __pragma(warning(disable:n)) #endif #if defined(_MSC_VER) # define END_NWARN(n) __pragma(warning(default:n)) #endif BEGIN_NWARN(4514) typedef struct { char blabla; } some_struct_t; END_NWARN(4514)
или
#if defined(_MSC_VER) # define BEGIN_NWARN(n) __pragma(warning(push)) __pragma(warning(disable:n)) #endif #if defined(_MSC_VER) # define END_NWARN __pragma(warning(pop)) #endif BEGIN_NWARN(4514) typedef struct { char blabla; } some_struct_t; END_NWARN
war_zes
> __pragma
https://habr.com/ru/company/abbyy/blog/136909/
Прочитай. Ты заглушил ворн неправильно в 1 случае.
Вобщем пришлось перелопатить весь класс TFastImage, сначала по методу предложенному Ведьмочкой, потом своим. Пришлось знатно повозится с методами класса, в итоге начались краши, которые уже просто не было ни сил ни желания отлавливать). Да и выглядело оно как-то с самого начало не совсем естетично. Приписывать к каждому методу(а их достаточно много в самом классе) аргумент в скобках то еще извращение). По второму методу получилась вот такая штука:
PFastImageItem =^TFastImageItem; PFastImageProc =^TFastImageProc; TFastImageData =record // Some Variables; end; {$endregion} PFastImageData =^TFastImageData; TFastImageItem =class fast_image_data: TFastImageData; constructor Create (...); destructor Destroy; override; end; {$endregion} TFastImageProc =class fast_image_data_ptr: PFastImageData; {Proc. Tables} // ... // Init. Part and Other Routines end; fast_image_proc_var : TFastImageProc;
И что самое главное, производительность в плане скорости вроде как не изменилась, но памяти теперь выделяется меньше. Еще пришлось правда всюду, где только можно, понаставлять операторов with, использование которого осуждается в некоторых языках программирования(JavaScript, например). И чтобы я без него делал). Всем спасибо за подсказки!
ArtProg
> но памяти теперь выделяется меньше
о! ради интереса прогони её с heaptrc
ArtProg
> Да и выглядело оно как-то с самого начало не совсем естетично
а как теперь "картинка" передаётся на "обработку"?
всё ещё через глобальную переменную?
Хм, странно, на версии Лазаруса 2.2.0 (2022-03-29), что-то не компилируется, если врубить проверку heaptrc. Оно помню(на старых версиях лазаруса) выдавало кучу непонятной инфы даже на пустом проекте.
Касательно обработки, то да, пока что на глобальных, я о многопоточке мало задумывался, так как вроде скорость прорисовки на данный момент более чем приемлема, но на будущее приму к сведению.
Я так понимаю, нужно будет на каждый поток по экземпляру
fast_image_proc_var
(принадлежит классу, в котором собран весь функционал, без данных) создать? Я думаю по этой теме у меня еще будет немало вопросов потом, так как с многопоточкой почти не работал. Есть конечно парочка идей на этот счет. Так, например, можно, как уже было написано выше, разделить спрайт на несколько фрагментов(число их кратно количеству потоков). Тут могут всплыть некоторые проблемы с производительностью из-за батчинга, а точнее его отсуствия в случае с таким подходом. Но благо, формат CSR(compressed sparse row) позволяет почти бесплатно клипать(clip) целые атласы спрайтов(есть один ньюанс: спрайты в атласе должны располагатся друг над другом в вертикальной "ленте", если так можно выразится).
Чет, немножко туплю в математике.
Интегрирую physX... Как из кватерниона:
\brief class representing a rigid euclidean transform as a quaternion and a vector class PxTransform { public: PxQuat q; // вращение PxVec3 p; // позиция }
либо из 4х4 мировой матрицы
получить градусы вращения?
(просто наговнокодил и не могу напрямую взять эту матрицу из physx, поэтому пытаюсь извлечь числа. С позицией понятно, а с вращением что-то тупня)
Сделал
glm::vec3 angles = glm::eulerAngles(glm::quat( pT.q.w, pT.q.x, pT.q.y, pT.q.z));
но результат неправильный
war_zes
> physX
Фу фу фу.
war_zes
> получить градусы вращения?
примерно так: https://twitter.com/id_aa_carmack/status/187964611159539712