LINUX.ORG.RU

Поможете найти сегфолт в демке для Corange?

 , gamegev, , ,


0

1

Есть вот такой набросок демки https://www.youtube.com/watch?v=d_lQ4nj6v3E

Кому не лень. Фор фан, от делать нечего и тп

git clone git@github.com:fedor-elizarov/Corange.git
cd Corange
make -j24
rm libcorange.so
cd demos/light
make clean;make
./light

Дождаться конца, демки когда ракета уже улетела и поймать момент вылета программы. Ну и может идеи какие, сама демка посвящена свету может чё добавить чёбы прикольнее было ))

Да и ещё, если когда трансразмерный манипулятор прекратит сбор космических кексов и выпустит лазер для ракеты и если не запустится музыка финальная тоже хотелось бы знать, пасиба )

Deleted

Последнее исправление: Deleted (всего исправлений: 5)

gamegev

Что-то тут не так.

Досмотрел до превращения ракеты в кекс. Вылет был, но не сегфолт, а

[DEBUG] (src/cui.c:ui_elem_delete:275) Deleting UI Element toast_36 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_delete:275) Deleting UI Element toast_33 (ui_toast)
[ERROR] (src/casset.c:asset_hndl_ptr:182) Failed to get Asset '�Ȍ�U', is it loaded yet?

Fedora 29, SDL 2.0.9, SDL2_mixer 2.0.4, SDL2_net 2.0.1, gcc 8.3.1.

Хотел написать «звука нет», но оказалось, что звук в системе был просто выключен. Запустил второй раз. Звук появился, но до финальной мелодии очень уж долго ждать.

Есть способ уменьшить количество кексов и запустить ракету побыстрее? Оно где-то константой задаётся?

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Failed to get Asset ‘�Ȍ�U’, is it loaded yet?

LOL, я мне кажется понял, вернее я понял что в одном из fpath мусор вместо пути почему то. Спасибо большое

Есть способ уменьшить количество кексов и запустить ракету побыстрее?

Уменьшить в какашкокоде нет ибо я захардкорил числами, а ускорить да можно

https://github.com/fedor-elizarov/Corange/blob/master/demos/light/light.c#L457

- so->position = vec3_lerp(so->position, *pos ,(frame_time()/(float)i)*(15+i));
+ so->position = *pos; //ускорить сбор кексиков

gamegev что-то тут не так

Виновен, я вообще в тегах хотел написать linux )))

Deleted
()
Последнее исправление: Deleted (всего исправлений: 3)
Ответ на: комментарий от i-rinat

Фигасе я про них даже не знал o_O. Спасибо

Deleted
()
Ответ на: комментарий от i-rinat

Ругается, ну и утечки ещё нашлись.Спасиб

А как включить по максимуму всё? По аналогии с -Wall -Werror не могу найти. Сейчас прогонял так

CC=gcc -g -O0 -lasan -fsanitize=undefined -fno-sanitize-recover -fno-common -fsanitize=float-divide-by-zero -fsanitize=float-cast-overflow -fsanitize=address

Deleted
()
Ответ на: комментарий от hobbit

Тьфу блин! Сегфолт в старом бранче,я блин забыл переключится,сорян ввёл в заблуждение, да сейчас только мусор в ассетах, но тут я уж разберусь просто надёжными как палка принтами, ну и буферы теперь буду обнулять как белые люди )) Тему закрою тогда.

Deleted
()
Ответ на: комментарий от anonymous

Ну почти. Можно и на неявное приведение типов ругаться особенно с указателями, но не надо. (Где то надо, мне не надо)

Ну ты бы лучше дополнил ключами которые считаешь важными. И игнорирование которых по дефолту может сыграть потом злую шутку

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

да сейчас только мусор в ассетах, но тут я уж разберусь просто надёжными как палка принтами

С сегфолтами тоже можно наставить принтов, особенно в сочетании с божественным valgrind. Valgrind укажет тебе место позорного падения с точностью до функции, ну а дальше отладкой.

hobbit ★★★★★
()
Ответ на: комментарий от Deleted

Без понятия. Нужно в доках к конкретной версии компилятора смотреть детали.

И ты зря не используешь -Wextra. Там много полезного.

i-rinat ★★★★★
()

Короче, первый раз так же как у Хоббита.

После чего я ускорил её используя so->position = *pos, и она с сегфолитлась.

[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element the_end (ui_button)
[DEBUG] (src/casset.c:file_load:282) Loading: '/home/user/Corange/assets_core/ui/pale_orange.dds'
[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element toast_32 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element toast_33 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element toast_34 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element toast_35 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element toast_36 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_delete:275) Deleting UI Element toast_32 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_delete:275) Deleting UI Element toast_34 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_delete:275) Deleting UI Element toast_36 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_delete:275) Deleting UI Element toast_33 (ui_toast)
[ERROR] (src/corange.c:corange_signal:9) Segmentation fault

А потом не ссегфолтилась

[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element the_end (ui_button)
[DEBUG] (src/casset.c:file_load:282) Loading: '/home/user/Corange/assets_core/ui/pale_orange.dds'
[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element toast_32 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element toast_33 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element toast_34 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element toast_35 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_new_type_id:125) Creating UI Element toast_36 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_delete:275) Deleting UI Element toast_32 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_delete:275) Deleting UI Element toast_34 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_delete:275) Deleting UI Element toast_36 (ui_toast)
[DEBUG] (src/cui.c:ui_elem_delete:275) Deleting UI Element toast_33 (ui_toast)
[ERROR] (src/casset.c:asset_hndl_ptr:170) Cannot load NULL asset handle

Но всё равно сдохла.

Со звуком короче такая тема. У меня две звуковухи: встроенная на мюте и внешняя. И программа выбирает встроенную на мюте — поэтому звука и нету. Я переключил её на внешнюю. В варианте с сегфолтом финальный звук был, в последнем варианте не было. Но вообще звуки были.

Я хз.

kostyarin_ ★★
()

Пипец тормоза на видео. И смысл было ради такого мучать C? Нормально написанное даже на питоне работало бы быстрее.

anonymous
()
Ответ на: комментарий от anonymous

Нормально написанное даже на питоне работало бы быстрее.

Сомневаюсь, но в целом согласен. Хотя может тормоза из за чего то другого.

Deleted
()
Ответ на: комментарий от Deleted

emscripten ставился в фоне, он там компилял усердно хрень всякую

Deleted
()
Ответ на: комментарий от anonymous

Я видео не смотрел, сразу собрал и запустил демку. Никаких тормозов, а тем более «пипец тормозов».

hobbit ★★★★★
()

Хм, а вот при втором запуске со звуком произошёл сегфолт (не обновлялся и в исходниках ничего не менял). Но музыка играла.

После чего я решил запустить valgrind. Ближе к концу, перед запуском ракеты получил портянку повторяющихся кусков вида

==20589== Invalid read of size 4
==20589==    at 0x13DCB5: ui_text_draw (ui_text.c:142)
==20589==    by 0x13CFC1: reposition_toasts (ui_toast.c:18)
==20589==    by 0x13CFC1: shift_toasts_down (ui_toast.c:34)
==20589==    by 0x13CFC1: ui_toast_new (ui_toast.c:86)
==20589==    by 0x123E38: ui_elem_new_type_id (cui.c:132)
==20589==    by 0x13D1DD: ui_toast_popup (ui_toast.c:67)
==20589==    by 0x10CC27: lpose (light.c:279)
==20589==    by 0x10D4C8: player_update (light.c:438)
==20589==    by 0x10BFCA: main (light.c:520)
==20589==  Address 0x1914fe58 is 4,168 bytes inside a block of size 4,224 free'd
==20589==    at 0x4839A0C: free (vg_replace_malloc.c:540)
==20589==    by 0x13D0E9: ui_toast_delete (ui_toast.c:96)
==20589==    by 0x146669: bucket_delete_with (dict.c:176)
==20589==    by 0x124A2E: ui_elem_delete (cui.c:280)
==20589==    by 0x124625: ui_elem_update (cui.c:233)
==20589==    by 0x12466D: ui_update (cui.c:65)
==20589==    by 0x10BFAD: main (light.c:518)
==20589==  Block was alloc'd at
==20589==    at 0x483880B: malloc (vg_replace_malloc.c:309)
==20589==    by 0x13E6B4: ui_text_new (ui_text.c:13)
==20589==    by 0x13CEAB: ui_toast_new (ui_toast.c:76)
==20589==    by 0x123E38: ui_elem_new_type_id (cui.c:132)
==20589==    by 0x13D1DD: ui_toast_popup (ui_toast.c:67)
==20589==    by 0x10CC27: lpose (light.c:279)
==20589==    by 0x10D4C8: player_update (light.c:438)
==20589==    by 0x10BFCA: main (light.c:520)

Потом было «Gooooo», и уже после «Billy, we became cakes» ещё одна партия подобных ошибок. Впрочем, самостоятельно программа после этого уже не упала, отработала кнопку Exit.

«Lauch» это, наверное, «Launch»?

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Ага, спасибо, тут уже проблема в ui_toast, но это уровня движка, хз может прошустрить ui и Даниэлю предложить изменения, но он сейчас не очень активен, видать в юбисофте чёта активно пилят :D Там на самом деле если по коду пройтись очень много (особенно в лоадерах) мест где при особых условиях возникают казусы, но это не страшно просто надо этим заняться. Ну надо на днях демку с учётом репортов с этого треда отрефракторить и можно отправлять в Corange (думаю это последнее демо). Ну, а может быть потом уже остальное, я обычно пилю свой закрытый форк и уже вещи которые иправляют ошибки и которые можно легко перенести предлагаю в апстрим. В целом ui_* надо вообще плотно заняться, он в зачаточном состоянии. Для игр норм, но вот например сделать банальное меню уже проблема как и сделать передвигаемые окна.

«Lauch» это, наверное, «Launch»?

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

Deleted
()
Ответ на: комментарий от Deleted

А в чём вообще смысл Corange, и чем он выделяется среди других движков, ну кроме того, что писан на C, а не C++? И в чём смысл твоего форка?

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Ну во первых написан на С, прозрачный в том плане что легко внести измененния, его легко можно распилить на составные части и использовать отдельные компоненты, достаточно мощный. Несмотря на то что по сути является не движком, а фреймворком позволяет буквально в несколько строк создать сцену. Идеальный полигон для всякого рода экспериментов как с графикой так и вообще визуализации какой нить фигни. Сейчас в поддержке 3 платформы, но если постараться можно портировать под всё что только можно нельзя. В основе лежит OpenGL 2.1 с шейдерами 120 версии что позволяет запускать его на калькуляторах 90тых годов. Но не смотря на это есть наработки для тесселяционных шейдеров и нет проблем заюзать OGL 4.X версии. Достаточная абстракция (почти достаточная) что бы взять и заимплементить рендер на любом другом API (для особо скиловых) мало зависимостей, по сути если выпилить микшер и сеть (они в зачатке) то достаточно обычного SDL2 и всё больше ничего не надо. Просто удобен.

И в чём смысл твоего форка?

Добавление фич,доработка физики https://www.youtube.com/watch?v=PR1ygScIAdg&t=81s, динамическая перезагрузка материалов https://youtu.be/WCwsCoxM6FA?t=80 , околюжен паралах мапинг на любой объект https://youtu.be/FUYzaYnRJWY?t=272 (фейковое 3d на простой плоской текстуре). Динамическое отражение https://youtu.be/SXSQFxzjNcs?t=42 /переломление https://youtu.be/SXSQFxzjNcs?t=191 окружающего пространства , упрощение таких вещей как работа с эвентами, мышкой, клааивтурой,,драг&дропом и прочим с абстракцией от SDL и возможностью завесить функции на каждое событие или подписаться на него. Очень много в стадии WIP а некоторые вещи я буду переписывать полностью ибо на практике оказались неудобными. Ну и я пилю скорее не форк движка ради движка , а адаптирую движок под игру которую мечтаю доделать и выпустить. Весь этот поток постоянно меняется, раз за разом я ломаю что-то и добавляю иное поэтому полностью отдельный форк с отдельным названием, если какие вещи устоятся и будут сделаны хорошо я предложу их в Corange. Сначала я начал в него делать демки и исправления как типа благодарность чтоль, ну хоть какая то обратная польза, а не просто взял код и пилю в одно рыло

Если весь этот поток мыслей не читать суть проста, я люблю С, мне жутко интересно как всё работает на самом деле, я обожаю ту мысль что можно делать свои миры, да простенькие, но всё же, я геймер и люблю играть и я визуал, я ловлю кайф когда пишу функцию для генерации шума делаю для неё визуализацию и оцениваю ещё и по виду, а не сухим графикам и иным цифаркам, в сравнении с другими фреймворками/движками Коранж прозрачный кристал псть и с огрехами и сколами, а остальные жутко запутанные финтифлюшки, перелопатил я много всего и сочетание открытость, простота, фичастость ничего более адекватного не нашёл, очень много есть на С++ но там эмм у людей это как его паттерны головного мозга, те вещи для которых достаточно сделать тупо функцию они размазывают на 4 класса в 5 файлах ну или типа того, возможно я просто неосилятор.

Короче он просто мне нравится (но далеко не всё) он скорее больше идея чем реализация, но с реализацией )))

Deleted
()
Ответ на: комментарий от Deleted

А, да и в целом вобще гейдев так как он охватывает воообщевесь существующий спектр программистских задач которые могут только существовать в природе, вот абсолютно всё и сильно переплетается со всем другим, то есть артом, мало уметь программировать, надо ещё и артовать (такое слово есть?) стараться,а я не программист и не художник и для меня постоянно чёт новое и непонятное возникает, от того и интерес. Хотя могу вдруг всё взять и забросить, кто его знает

Всё, выдыхаю, пойду пожую и гамать пойду :D

Deleted
()
Ответ на: комментарий от hobbit

И да

А в чём вообще смысл Corange

Изначально это полигон для испытаний Даниэля, не как игровое решение, а как полигон для отработки техник визуализации, ну и если посмотреть на время когда практически разработка была заморожена то это случилось уже много лет назад, он набил руку как программист и как геймразработчик и подался в собственно большой геймдев. Ему откровенно насрать сейчас на Corange и полюбому у него есть своя версия не публичная для экспериментов (исхожу из того что он принимал от меня откровенно не очень хороший код) Как то так. По нынешним меркам двиг устарел как мамонт, но это в сравнении с AAA и движкам у которых комьюнити 100500 человек, касательно коранжа я вообще не знаю кто с ним работал достаточно тесно кроме людей которые несколько лет назад как я сделали для него несколько демок.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.