LINUX.ORG.RU

21
Всего сообщений: 214

Cube Art Project - кубический 3D редактор

Продолжаю познавать портируемость С++, думаю некоторым любителям Emscripten, fcgi и C++ будет интересно посмотреть на мой кубический 3D редактор - Cube Art Project. В интерфейсе поддерживаются 16 цветов спектрума, на практике есть поддержка RGB, просто добавьте пикер цветов :-) Все это делается ради Open Source и фана.

Только клиент https://demensdeum.com/games/CubeArtProjectWEB/?mario

Клиент-сервер с возможностью сохранения на VPS: http://192.243.103.70/cgi-bin/cubeArtProject/cubeArtProjectServer.fcgi?5

Исходный код https://gitlab.com/demensdeum/cube-art-project-bootstrap

Поддерживаются сборки для HTML5 (Emscripten), Windows (mingw), macOS (osxcross), Linux (native), Android (ndk), теоретически под остальные SDL платформы, однако нужно писать скрипты сборки и проводить адаптацию. Конструктивная и деструктивная критика приветствуется.

 , , ,

demensdeum ()

Музыкальный Linux для Игростроя

٩(。•́‿•̀。)۶

Ну, пора задуматься о музыке. Хочу написать десяток длинных амбиентов для игры, каждый соответствует локации для звукового выделения сцены + один универсальный для масло маслянное универсальных ситуаций. Ну плюс ещё отдельные звуки и музыка в соответствии с происходящими событиями. Короче хочу диалог игры и игрока не только визуальный, но и звуковой, а не только для галочки на фон повесить что-то из opengameart.com и всё.

Раньше пытался что-то брякать используя Pianoteq (Бесплатную версию где 20% клавиш не работает) https://www.jamendo.com/artist/443601/elizar-laboratories/singles

Ещё куда-то заливал всякую хрень, но не помню уже что и куда. Ну да ладно это из разряда что «умею».

Пробовал как Ъ взять LMMS и всё делать там. Получается говняшка. Для себя понял что мне надо просто играть отрезки, затем из них складывать композицию (ибо я не умею и не могу играть сразу гтовое на основе нот или целиком составлять композицию) затем через VST плагины отдельные отрезки и/или всю композицию приводить к тому виду который будет интересен.

Что у меня есть

  • Миди клава M-Audio keystation 88es ~15 клавиш не работают (;⌣̀_⌣́)

Чво я умею <( ̄︶ ̄)>

  • Открыть Pianoteq/LMMS+SF2/Hydrogen или иное в зависимости от нужного инструмента
  • Сесть и просто брякая наигрывать что в голову взбредёт, в процессе находя интересное и далее импровезировать с этим интересным по итогу получается минут 20 потока «музыки» в виде записанного wav и MIDI из которых вырезаю понравившиеся куски, эти куски либо сами по себе либо потом пытаюсь их переиграть. Нот я не знаю. Если хочу повторить своё ранее что-то то просто прослушиваю старое и играю снова.

Ну и всё, больше я ничего не умею, на компе мегабайт 150 миди+wav отрывков накопилось :D от импровизаций

Чво я хочу (๑˃ᴗ˂)ﻭ

  • Открыть программу музыкальну
  • Выбрать инструмент любой или внешний типа Pianoteq
  • Сыграть несколько разного в поисках нужного (ну например амбиент для сцены весёлой/грустной/страшной/глупой/странной/затейливой/непонятной/начальной/конечной/ууууууу многа и надо эксперементировать)
  • На месте взять сыгранное и нарезать
  • Из нарезок составить композицию «ну не умею я целиком нужное взять и сыграть… ::(»
  • На отдельные отрезки наложить преобразования VST плагинами (будто есть альтернатива)
  • На всю композицию наложить преобразование для выравнивания по стилю (Ну там заглушить что-то или просто эхо добавить общее)

Ну и всё. Как то так. Редакторов куча,VST плагинов разных типов куча. По хорошему надо 360 монитор что-бы всё что надо вывести на экран с их милллиардами кнопок и крутилок

  • 1 Посоветуйте пожалуйста редактор (Ardour?)
  • 2 Посоветуйте пожалуйста VST на все случаи жизни (Calf?)

Посоветуйте пожалуйста иное. Понятное дело что надо пробовать, но тут же есть те кто уже прошарен и может сказать что мне лучше подойдёт например всё же LMMS если его правильно готовить.

Короче я от разнообразия потерялся, мне хочется просто один раз выбрать программный стек где я буду делать всё. Пусть этот стек будет неидеальным, но блин я не могу досканально изучить всё т те же VST там чёрт об них ногу сломит, выберу один и буду на нём жить. только вот какой (набор) выбрать calf **ка красивый что я не могу, такой уровень графиков и индикации наверное ни у одной программы нет, программировал просто боженька.

Ну вот как то так. Помогите советом пожалуйста. Не хочется скакать туда да сюда. Хочется просто взять инструменты в виде программ и просто начать работать, да их надо будет изучать, это понятное дело. Но вот что бы сыграть-нарезать-склеить-обработать и всё.

Пока вдохновился этим https://www.youtube.com/watch?v=u_PR46u1T_s но просто решил ещё задать вопрос текущий ибо вдруг кто что посоветует. Я в этом всём слабо шарю.

Всем добра и мира ::)

 , , , ,

LINUX-ORG-RU ()

Генератор космических кораблей для blender

Наткнулся на удобную штуку - пригодится для прототипирования или даже создания своей евы в сети с куртизантками и чёрными дырами =)

Может кому пригодится - https://github.com/a1studmuffin/SpaceshipGenerator

Или можно генерировать через скрипты что удобно если надо по быстрому сделать сразу например 15 кораблей. Хотел нагенерировать сразу 100 но ужрало всю память, жёстко писало на диск и было убито системой, система плакала от боли =)

import bpy

#количество кораблей
num_spaceship = 15
#количество кораблей в линии
num_in_line   = 5

#смещене по линии и столбцам
x_offset = 10
y_offset = 5

#основной скрипт
counter = num_in_line
current_x = 0
current_y = 0

scene = bpy.context.scene
for num in range(num_spaceship):
    bpy.ops.mesh.generate_spaceship()
    obj = scene.objects.active
    
    counter-=1
    current_y+=y_offset
    if counter == 0:
        counter = num_in_line
        current_x+=x_offset
        current_y = 0
    
    obj.location.x = current_x
    obj.location.y = current_y

В результате получаем нечто такое - https://i.imgur.com/eyE5wAp.png

Экспортируем и летим грабить караваны - https://imgur.com/a/oXF59DH

Вот такой маленький обзорчик.

P.S. Меши иногда кривые отсечение граней происходит с лицевой стороны (при экспорте в obj у меня так) Текстурные координаты кривые. Но чисто для баловства и допила под себя прикольная штучка.

 , , , ,

LINUX-ORG-RU ()

Насколько возможно сейчас использовать UE4?

С декабря, наконец, стало больше свободного времени, и смогу дальше продвинуться в прототипе своей игры под Unity. Но недавно попался пост в канале по разработке игр, где автор сравнивает Unreal и Unity не в пользу последнего. В основном, конечно, сводится к не особо обоснованной логической цепочке «эпики делают игры на своём движке, а Unity — в лучшем случае технодемки, поэтому Unreal удобнее для разработчиков». Но частично есть с чем согласиться: пробовал ECS, но оно пока не совместимо с одним из нужных мне ассетов (Cinemachine), поэтому пока делаю на старом стеке с мыслью, что это всё придётся переписывать.

Насколько сейчас возможно использовать Unreal под онтопиком? Несколько лет назад пробовал просто собрать редактор, кажется, неудачно. Как сейчас с его работой? Что можно использовать для редактирования и отладки на С++, т.е. есть ли какой-то аналог Unity-плагинов к Rider или VS Code, который соединяет редактор, дебаггер и среду разработки?

 , ,

wingear ()

Screen Space Local Reflections - Может кому пригодится

Запилил себе отражения в экранном пространстве, хотел сделать демку для Corange, но тогда придётся повторно Gbuffer дублировать, а нахер оно надо. Или встраивать в рендер, но оно тоже нахрен не надо ибо реализация с горя пополам, короче минимальная. Короче я долго дуплил как хотя бы работать заставить эту хрень (Которая по итогу оказалась по сути хренью) заработало, спасибо видосу с ютуба где мужик объяснил непонятные моменты Короче вот https://github.com/orangeduck/Corange/issues/46 я просто скинул нужные куски кода,выглядит вот так https://www.youtube.com/watch?v=_kgjMhhp3Rs ,в текущем виде предлагать смержить с основным кодом это курам на смех, а так если кому интересно будет то можно использовать как минимально работающую имплементацию. Сабж обсуждать не надо. Я просто оставил это здесь. 5 Дней пердолился, по итогу оказалось мне не нужно с тем результатом что есть. Но возможно кому-то будет надо.

Ну ещё добавлю, попытка заполнять недоступные для SSLR тексели отражениями из динамической кубической карты окружения дно, даже не пытайтесь, будет мусор в виде увеличения на экране если камера высоко над отражаемым объектом, тоесть отражения никак не состыковать.

И ещё до кучи, посчитали себя житрожопым и решили что можно кешировать отражённые тексели и заюзать MRT редреринг при постпроцессинге что бы помечать тексели которые над головой, а потом возвращать их же когда они теряются из за наклона камеры то тоже губу то закатайте. Оно работает, причём здорово, но если есть движение то сосём ибо то что закешированно уже не соотносится с новой позицией.

Но если вы совсем утка шестипалая и решила рендерить в кубемапу только то что над камерой и когда uv выходит за единичку по y отдавать тексели из кубемапы то поздравляю это замечательно работает и отражения корректные и данные от кубической карты отлично стыкуются с данными SSLR там где оно теряет тексели из за выхода за пределы UV но! опять сасать, ибо если хотите стыковку то отражения кубической карты должны быть того же разрешения что и основное, а это значит рендер полного кадра со семи эффектами два раза минимум, вроде ок но это если машинка шустрая. Ну или в низком разрешении и типа блюр отражения. Но тогда проще в кубемапу запеч причём запекать прямо в реалтайме а не заранее.

Ну вроде всё. SSLR хорошая штука, но в очень ограниченных условиях, ну или в гибриде с другими методами которые будут сглаживать косяки потери данных ray miss которые. Ну вроде всё.

Ах да, вариант с кубической картой глубины как при все направленных тенях тоже такое себе

Выдыхаю.

P.S. Прочитал тут про voxel GI и даже не знаю, что проще сразу повесится или пердолится с месяцок, а потом обнаружить что моя карта выдаст мне 2 кадра в секунду из за филлрейта в 1к пикселей и всё было зря. :D Сук , Ворона, сыр аж грустно, а я хотел на отражениях в игрушке своей завязать механику, теперь в топку.

 , , , ,

LINUX-ORG-RU ()

Какие игры под linux умеют динамическое разрешение? ^.^

И так столкнулся с тем что у меня начал местами проседать fps из за parallax occlusion (вот пример https://youtu.be/FUYzaYnRJWY?t=254, модель плоская, но создаётся ощущение трёхмерного объёма ) так как уменьшать семплирование в шейдере уже некуда 6 проходов и так уже всего лишь. Начал думать, если менять разрешение поменьше то всё ок, но при разном основном размере окна уменьшать размер вьюпорта который потом скалить до размера окна нужно по разному. Просто снизить разрешение не вариант так как это проседания местами, а не всегда. Наткнулся на статью https://software.intel.com/ru-ru/articles/dynamic-resolution-rendering-article стало интересно, нашёл одно видео https://www.youtube.com/watch?v=pMQppLv-z1o&feature=emb_logo , по быстрому на коленке реализовал динамическое разрешение, вот так выглядит https://youtu.be/rWm3GYq3Nds (оно там не отрегулировано поэтому скачет, намеренно задано 60 слоёв паралакса для вызывания лагов) Ну так вот,проблему оно решает если проседание 10 кадров то можно смело уменьшать разрешение пикселей на 100 а то и 200 если сцена динамическая проседание будет только в 1 кадре один раз, а чуть меньшее разрешение не так бросается в глаза чем лаги, после того как в сцена может снова рисовать нормальное количество кадров то разрешение возвращается обратно, хочется посмотреть как выглядит оно в реальных играх, что бы сравнивая допиливать своё.

Игра может быть закрытая, желательно бесплатная. Мне просто визуально посмотреть как оно используется в реальности. Как оно внутри работает я по картинке пойму. Я сейчас делаю в лоб, а при детальном рассмотрении кадров игр порой видно не очевидное. Например можно разбить кадр на квадраты и рендерить последовательно их выявлять какой квад экрана вызывает проседание и менять разрешение только этого квада. Ну и тому подобное.

Я всё та подробно расписал что бы из бежать вопросов «Зачем, чвоитатакое?» и утверждений «Эта нинужна! оптимизируй причину, а не лечи следствия!»

Де взять такую игруху? =) ^.^ (Видосы с ютуба не то если что, он портит шум)

 , , , ,

LINUX-ORG-RU ()

Англичанам и прочим сэрам. Как поведение назвать пральна?

Как по английски назвать однозначно вот такое

тип_a А = сделать_тип_a();
тип_a B = при_любом_изменении_a_повторять_у_себя_все_изменения(A);

Первой что на ум приходит это мимикрия. То есть, у меня в голове это так: Создать клон объекта и мимикрировать под него в дальнейшем. Но может как-то можно ещё однозначно и одним словом назвать подобное?

entity_t a = entity_new();
entity_t b = entity_mimic(a);

Чво эта и зачем?: Бегает игрок в игровом мире, мы делаем его мимика и отображаем его уже не в игровом, а отладочном мире например,со всеми его там состояниями и прочим.

Просто кроме слова мимикрия ну ничего на ум не приходит, но оно смущает, хотя уже утро, хочется спать и голова в тумане, может из за этого :D

 , , , ,

LINUX-ORG-RU ()

Оффлайн 2D рендеринг в Metal/OpenGL

Задал вопрос на stackoveflow про то, каким лучше способом рендерить анимированный 2D треугольник (у которого шейдером будут меняться цвета), закешировать это в виде дюжины спрайтов, и затем результат рендеринга подсовывать игровому движку в виде спрайтов из кеша. Либо сразу рисовать поверх картинки игрового движка этот несчастный треугольник с анимацией, но только не понятно каким путём лучше это делать, учитывая, что нативные движки для Apple, к примеру, spriteKit/sceneKit, скрывают Metal/OpenGL под капотом. Правильным ли будет рендерить в отдельный “layer”, а затем композитить всё в единый UI?

Насколько я знаю, метал рендерит свой мир в текстуру, затем можно скопировать данные из этой текстуры в пустую картинку, из неё слепить спрайт и уже им оперировать в 2D движках. Правильно ли я мыслю?

За этот вопрос мне стали сливать на SO карму и никто ничего не написал мне в ответ. WTF? :-D

 , , , ,

menangen ()

Death-Mask киберпанк rogue-like в разработке

В свободное время занимаюсь разработкой своего движка и игры рогули под названием Death-Mask. Сделал упор именно на портирование C++ кода под HTML5, трансляцию через Emscripten. В игре нужно найти артефакт Маску Смерти которая дает владельцу бессмертие, в бесконечно генерируемом лабиринте. На Game Over вылетает, но можно просто перезагрузить страницу, разница не велика.

Скриншот: http://demensdeum.com/games/deathMask/screenshot.jpg

Поиграть можно тут: https://demensdeum.com/games/deathMask/ https://www.newgrounds.com/portal/view/738737

Посмотреть исходный код, лицензия MIT: https://gitlab.com/demensdeum/Death-Mask

 

demensdeum ()

Верификация динамически загружаемой библиотеки

Предисловие:

Игровые файлы, текстуры, звуки, модели, etc компилируются в .so или .dll библиотеку которые динамически (через SDL_LoadObject()) подключаются к движку и он уже автоматически извлекает char * буферы файлов по запросу имени типа "asset/texture.dds" и посредством SDL_RWFromConstMem() передаются в обработчики. После получения ресурсов библиотека выгружается дабы не занимать память.

Суть:

Пока что у меня всё тупо, гружу библиотеку пробую загрузить от туда функцию const char * asset_lib_verify(const char * msg) если она есть передаю ей "ping" в ответ она должна отправить "pong" и если всё ок я уже запрашиваю указатель на структуру с данными.

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

Первая мысль компилирую ресурсы, получаю sha256 скомпилированной библиотеки, затем перед загрузкой so`шки проверяю хеш и если он отличается то выкидываю ошибку иначе спокойно загружаю.

Но мне кажется это ненадёжным ведь sha строку в самом приложении могут вручную перебить на нужную.

Есть какие идеи как проверять загружаемую библиотеку так что-бы это нельзя было обойти, ну или хотя бы что-бы это было сложно или муторно как минимум обойти.

UDP: В долгий ящик или на помойку, пока что вывод >> ненужно © <<

 , , , ,

LINUX-ORG-RU ()

Кросскомпиляция mingw , OpenGL, твоя моя непонимать, не опять, а снова

Разогнался я домакоси Как кросскомпилировать из Linux для MacOS? ::) ага, вернулся пересобрать под mingw и что-то я не понял как быть

Сборка для linux идет без проблем если что. Сборка статической библиотеки для Windows также идёт без проблем, а вот .dll уже выплёвывает мне ошибки.

dron@gnu:~/egnaroc$ make TARGET=Windows -j24
x86_64-w64-mingw32-gcc  obj/physics.o obj/egnaroc.o obj/ui.o obj/entity.o obj/threader.o obj/event.o obj/asset.o obj/network.o obj/graphics.o obj/engine.o obj/audio.o obj/ui_style.o obj/ui_slider.o obj/ui_container.o obj/nuklear.o obj/ui_toast.o obj/ui_line.o obj/ui_rectangle.o obj/ui_text.o obj/ui_option.o obj/ui_button.o obj/ui_listbox.o obj/ui_dialog.o obj/ui_textbox.o obj/ui_spinner.o obj/ui_browser.o obj/renderable.o obj/texture.o obj/sound.o obj/music.o obj/language.o obj/config.o obj/shader.o obj/animation.o obj/font.o obj/effect.o obj/material.o obj/cmesh.o obj/terrain.o obj/image.o obj/skeleton.o obj/mouse.o obj/dragdrop.o obj/keyboard.o obj/joystick.o obj/instance_object.o obj/landscape.o obj/animated_object.o obj/light.o obj/physics_object.o obj/particles.o obj/camera.o obj/static_object.o obj/list.o obj/dict.o obj/vertex_list.o obj/int_list.o obj/randf.o obj/trigger.o obj/vertex_hashtable.o obj/spline.o obj/renderer.o obj/sky.o obj/SDL_local.o -lmingw32 -lopengl32 -lSDL2main -lSDL2 -mwindows -lSDL2_mixer -lSDL2_net -shared  -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/bin/  -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/lib/  -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/lib/  -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/lib/   -o egnaroc.dll
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0xc17): неопределённая ссылка на «__imp_glTexImage3D»
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0x19fa): неопределённая ссылка на «__imp_glCompressedTexImage2D»
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0x1ff4): неопределённая ссылка на «__imp_glTexImage3D»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x134b): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x19e8): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x1ae8): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x1bc8): неопределённая ссылка на «__imp_glActiveTexture»
collect2: error: ld returned 1 exit status
make: *** [Makefile:101: egnaroc.dll] Ошибка 1
dron@gnu:~/egnaroc$ 

Тоже самое но с -v

dron@gnu:~/egnaroc$ make TARGET=Windows -j24
x86_64-w64-mingw32-gcc -v obj/physics.o obj/egnaroc.o obj/ui.o obj/entity.o obj/threader.o obj/event.o obj/asset.o obj/network.o obj/graphics.o obj/engine.o obj/audio.o obj/ui_style.o obj/ui_slider.o obj/ui_container.o obj/nuklear.o obj/ui_toast.o obj/ui_line.o obj/ui_rectangle.o obj/ui_text.o obj/ui_option.o obj/ui_button.o obj/ui_listbox.o obj/ui_dialog.o obj/ui_textbox.o obj/ui_spinner.o obj/ui_browser.o obj/renderable.o obj/texture.o obj/sound.o obj/music.o obj/language.o obj/config.o obj/shader.o obj/animation.o obj/font.o obj/effect.o obj/material.o obj/cmesh.o obj/terrain.o obj/image.o obj/skeleton.o obj/mouse.o obj/dragdrop.o obj/keyboard.o obj/joystick.o obj/instance_object.o obj/landscape.o obj/animated_object.o obj/light.o obj/physics_object.o obj/particles.o obj/camera.o obj/static_object.o obj/list.o obj/dict.o obj/vertex_list.o obj/int_list.o obj/randf.o obj/trigger.o obj/vertex_hashtable.o obj/spline.o obj/renderer.o obj/sky.o obj/SDL_local.o -lmingw32 -lopengl32 -lSDL2main -lSDL2 -mwindows -lSDL2_mixer -lSDL2_net -shared  -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/bin/  -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/lib/  -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/lib/  -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/lib/   -o egnaroc.dll
Using built-in specs.
COLLECT_GCC=x86_64-w64-mingw32-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/lto-wrapper
Target: x86_64-w64-mingw32
Configured with: ../../src/configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/include' --mandir='/usr/share/man' --infodir='/usr/share/info' --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir='/usr/lib/x86_64-linux-gnu' --libexecdir='/usr/lib/x86_64-linux-gnu' --disable-maintainer-mode --disable-dependency-tracking --prefix=/usr --enable-shared --enable-static --disable-multilib --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --libdir=/usr/lib --enable-libstdcxx-time=yes --with-tune=generic --with-headers=/usr/x86_64-w64-mingw32/include --enable-version-specific-runtime-libs --enable-fully-dynamic-string --enable-libgomp --enable-languages=c,c++,fortran,objc,obj-c++,ada --enable-lto --enable-threads=win32 --program-suffix=-win32 --program-prefix=x86_64-w64-mingw32- --target=x86_64-w64-mingw32 --with-as=/usr/bin/x86_64-w64-mingw32-as --with-ld=/usr/bin/x86_64-w64-mingw32-ld --enable-libatomic --enable-libstdcxx-filesystem-ts=yes --enable-dependency-tracking
Thread model: win32
gcc version 8.3-win32 20190709 (GCC) 
COMPILER_PATH=/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/:/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/:/usr/lib/gcc/x86_64-w64-mingw32/:/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/:/usr/lib/gcc/x86_64-w64-mingw32/:/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/../../../../x86_64-w64-mingw32/bin/
LIBRARY_PATH=/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/:/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/../../../../x86_64-w64-mingw32/lib/
COLLECT_GCC_OPTIONS='-v' '-mwindows' '-shared' '-L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/bin/' '-L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/lib/' '-L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/bin/' '-L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/lib/' '-L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/bin/' '-L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/lib/' '-o' 'egnaroc.dll' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/collect2 -plugin /usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/lto-wrapper -plugin-opt=-fresolution=/tmp/ccNDveRD.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lgdi32 -plugin-opt=-pass-through=-lcomdlg32 -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -m i386pep --subsystem windows --shared -Bdynamic -e DllMainCRTStartup --enable-auto-image-base -o egnaroc.dll /usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/../../../../x86_64-w64-mingw32/lib/dllcrt2.o /usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/crtbegin.o -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/lib/ -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/lib/ -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/bin/ -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/lib/ -L/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32 -L/usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/../../../../x86_64-w64-mingw32/lib obj/physics.o obj/egnaroc.o obj/ui.o obj/entity.o obj/threader.o obj/event.o obj/asset.o obj/network.o obj/graphics.o obj/engine.o obj/audio.o obj/ui_style.o obj/ui_slider.o obj/ui_container.o obj/nuklear.o obj/ui_toast.o obj/ui_line.o obj/ui_rectangle.o obj/ui_text.o obj/ui_option.o obj/ui_button.o obj/ui_listbox.o obj/ui_dialog.o obj/ui_textbox.o obj/ui_spinner.o obj/ui_browser.o obj/renderable.o obj/texture.o obj/sound.o obj/music.o obj/language.o obj/config.o obj/shader.o obj/animation.o obj/font.o obj/effect.o obj/material.o obj/cmesh.o obj/terrain.o obj/image.o obj/skeleton.o obj/mouse.o obj/dragdrop.o obj/keyboard.o obj/joystick.o obj/instance_object.o obj/landscape.o obj/animated_object.o obj/light.o obj/physics_object.o obj/particles.o obj/camera.o obj/static_object.o obj/list.o obj/dict.o obj/vertex_list.o obj/int_list.o obj/randf.o obj/trigger.o obj/vertex_hashtable.o obj/spline.o obj/renderer.o obj/sky.o obj/SDL_local.o -lmingw32 -lopengl32 -lSDL2main -lSDL2 -lSDL2_mixer -lSDL2_net -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lgdi32 -lcomdlg32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt /usr/lib/gcc/x86_64-w64-mingw32/8.3-win32/crtend.o
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0xc17): неопределённая ссылка на «__imp_glTexImage3D»
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0x19fa): неопределённая ссылка на «__imp_glCompressedTexImage2D»
/usr/bin/x86_64-w64-mingw32-ld: obj/texture.o:texture.c:(.text+0x1ff4): неопределённая ссылка на «__imp_glTexImage3D»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x134b): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x19e8): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x1ae8): неопределённая ссылка на «__imp_glActiveTexture»
/usr/bin/x86_64-w64-mingw32-ld: obj/shader.o:shader.c:(.text+0x1bc8): неопределённая ссылка на «__imp_glActiveTexture»
collect2: error: ld returned 1 exit status
make: *** [Makefile:101: egnaroc.dll] Ошибка 1
dron@gnu:~/egnaroc$ 

libopengl32 это же просто заглушка так? Окай, иду сюда cd /usr/x86_64-w64-mingw32/lib/ и ищу функции

dron@gnu:/usr/x86_64-w64-mingw32/lib$ nm ./*.a | grep glTexImage
0000000000000000 T glTexImage2D
0000000000000000 I __imp_glTexImage2D
0000000000000000 T glTexImage1D
0000000000000000 I __imp_glTexImage1D
dron@gnu:/usr/x86_64-w64-mingw32/lib$ nm ./* | grep glActiveTexture
dron@gnu:/usr/x86_64-w64-mingw32/lib$ nm ./* | grep glCompressedTexImage2D
dron@gnu:/usr/x86_64-w64-mingw32/lib$ 

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

Иду в место где у меня определяются gl функции. Там я экранирую оперделение именно их потому что они по дефолту определены в SDL/SDL_opengl.h и если убрать экранирование определения функций то уже сборка валится из за переопределения функций, но приведу то как идёт загрузка расширений

sdl_local.h


typedef void (APIENTRY * GLACTIVETEXTUREFN)( GLenum texture );
typedef void (APIENTRY * GLCOMPRESSEDTEXIMAGE2DFN)(GLenum target, GLint level, GLenum format, GLsizei width, GLsizei height, GLint border, GLsizei imagesize, const GLvoid* data);
typedef void (APIENTRY * GLTEXIMAGE3DFN)(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* data);


#ifndef __MINGW32__ 
#ifndef __unix__ 
extern GLACTIVETEXTUREFN                  glActiveTexture;
extern GLCOMPRESSEDTEXIMAGE2DFN           glCompressedTexImage2D;
extern GLTEXIMAGE3DFN                     glTexImage3D;
#endif
#endif

sdl_local.c

#ifndef __MINGW32__ 
#ifndef __unix__
GLACTIVETEXTUREFN glActiveTexture = NULL;
GLCOMPRESSEDTEXIMAGE2DFN glCompressedTexImage2D = NULL;
GLTEXIMAGE3DFN glTexImage3D = NULL;
#endif
#endif

#define SDL_GL_LoadExtension(type, name) \
name = (type)SDL_GL_GetProcAddress(#name); \
if (name == NULL) { \
  fprintf(stderr, "Failed to load function '%s', looking for function '%s'...\n", #name, #name"EXT"); \
  name = (type)SDL_GL_GetProcAddress(#name"EXT"); \
} \
if (name == NULL) { \
  fprintf(stderr, "Failed to load function '%s', looking for function '%s'...\n", #name"EXT", #name"ARB"); \
  name = (type)SDL_GL_GetProcAddress(#name"ARB"); \
} \
if (name == NULL) { fprintf(stderr, "Completely failed to load OpenGL extension function '%s'. Use of this function will crash\n", #name); }


#ifndef __MINGW32__ 
#ifndef __unix__
  SDL_GL_LoadExtension(GLACTIVETEXTUREFN, glActiveTexture);
  SDL_GL_LoadExtension(GLCOMPRESSEDTEXIMAGE2DFN, glCompressedTexImage2D);
  SDL_GL_LoadExtension(GLTEXIMAGE3DFN, glTexImage3D);
#endif
#endif 

Для Windows cобираю на Debian testing, mingw системный, SDL библиотеки из официальных ссылок. Никакой отсебятины лишней.

Сама сборка идёт вот так Makefile

SRC = $(wildcard src/*.c) $(wildcard src/*/*.c)
OBJ = $(addprefix obj/,$(notdir $(SRC:.c=.o)))

CFLAGS = -I ./include -std=gnu99 -Wextra -Wall -Werror -Wno-unused -Wno-unused-parameter -O3 
LFLAGS = -lSDL2 -lSDL2_mixer -lSDL2_net -lm -shared

PLATFORM = $(shell uname)
###########################################
ifeq ($(findstring Linux,$(PLATFORM)),Linux)
	DYNAMIC = libegnaroc.so
	STATIC  = libegnaroc.a
	CFLAGS += -fPIC
	LFLAGS += -lGL
ifeq ($(findstring Windows,$(TARGET)),Windows)
	CC = x86_64-w64-mingw32-gcc -v
	AR = x86_64-w64-mingw32-gcc-ar 
	DYNAMIC =  egnaroc.dll
	STATIC  =  libegnaroc.a
#	CFLAGS += -Dmain=SDL_main 
	LFLAGS  = -lmingw32 -lopengl32 -lSDL2main -lSDL2 -mwindows -lSDL2_mixer -lSDL2_net -shared 
	LFLAGS += -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/bin/ 
	LFLAGS += -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/include/
	CFLAGS += -I./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/  -Dmain=SDL_main 
	LFLAGS += -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/bin/
	LFLAGS += -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/x86_64-w64-mingw32/include/ 
	LFLAGS += -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/bin/
	LFLAGS += -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/x86_64-w64-mingw32/include/ 
ifeq ($(findstring i686,$(ARCH)),i686)
	CC = i686-w64-mingw32-gcc  
	AR = i686-w64-mingw32-gcc-ar 
	DYNAMIC =  egnaroc.dll
	STATIC  =  libegnaroc.a
	CFLAGS += -Dmain=SDL_main 
	LFLAGS  = -lmingw32 -lopengl32 -lSDL2main -lSDL2 -mwindows -lSDL2_mixer -lSDL2_net -shared 
	LFLAGS += -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/i686-w64-mingw32/bin/ 
	LFLAGS += -L./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/i686-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/i686-w64-mingw32/include/
	CFLAGS += -I./depends/windows/SDL2-devel-2.0.10-mingw/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/
	LFLAGS += -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/i686-w64-mingw32/bin/
	LFLAGS += -L./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/i686-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2_mixer-devel-2.0.4-mingw/SDL2_mixer-2.0.4/i686-w64-mingw32/include/ 
	LFLAGS += -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/i686-w64-mingw32/bin/
	LFLAGS += -L./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/i686-w64-mingw32/lib/ 
	CFLAGS += -I./depends/windows/SDL2_net-devel-2.0.1-mingw/SDL2_net-2.0.1/i686-w64-mingw32/include/
endif
endif 
endif

#############################################
###TODO: NEED TEST BUILD 
ifeq ($(findstring Darwin,$(PLATFORM)),Darwin)
	DYNAMIC = libegnaroc.so
	STATIC  = libegnaroc.a
	CFLAGS += -fPIC
#	LFLAGS += -lGL
	LFLAGS += -framework OpenGL
endif

#############################################
###TODO: NEED TEST BUILD
ifeq ($(findstring MINGW,$(PLATFORM)),MINGW)
	DYNAMIC = egnaroc.dll
	STATIC =  libegnaroc.a
	LFLAGS = -lmingw32 -lopengl32 -lSDL2main -lSDL2 -lSDL2_mixer -lSDL2_net -shared -g
endif
#############################################
###TODO: NEED TEST BUILD
ifeq ($(findstring CYGWIN,$(PLATFORM)),CYGWIN)
	DYNAMIC = egnaroc.dll
	STATIC =  libegnaroc.a
	LFLAGS = -lmingw32 -lopengl32 -lSDL2main -lSDL2 -lSDL2_mixer -lSDL2_net -shared -g
endif


all:$(STATIC) $(DYNAMIC) 

static:$(STATIC)

dynamic:$(DYNAMIC)

$(DYNAMIC): $(OBJ)
	$(CC) $(OBJ) $(LFLAGS)  -o $@
	
$(STATIC): $(OBJ)
	$(AR) rcs $@ $(OBJ) 
	
obj/%.o: src/%.c | obj
	$(CC) $< -c $(CFLAGS) -o $@

obj/%.o: src/*/%.c | obj
	$(CC) $< -c $(CFLAGS) -o $@


И как быть? И да я пробовал прилинковать glew и прочий мусор, всё одножренственно. И ещё раз да я хочу грузить расширения через SDL_GL_GetProcAddress, а не через утилитарные библиотеки.

Короче я изнежился тем что в Linux всё тупо работает из коробки и у меня прям растеряшки ^.^ а может просто лапки я хз :D

И да я гуглил проблему, перечислять всё не буду но первые 50 ссылок в гугле я видал, читал и пробовал, нихрена непонятно.

Тут дело не в том что не работает, туту дело в том что я непонимаю что я делаю не так. По идее на этапе сборки должно быть ровно похер на то что есть ли у меня где то функции во вне или нет. Но… короче, вот =)

UDP

Для себя корче я временно (пока не понял кто виноват в подобном поведении mingw или sdl2) скопировал SDL_opengl.h и изменил его добавив ко всем опеределениям

#if !defined(__MINGW32__) 
GLAPI APIENTRY blabla bla
#endif

а в нужных местах переключаю заголовки

#if defined(__MINGW32__)
#include "SDL2/SDL_local_opengl.h"
#else 
#include "SDL2/SDL_opengl.h"
#endif

На форуме SDL ещё с 2016 года висит подобный вопрос, но никто не ответил, я фигею. https://discourse.libsdl.org/t/glactivetexture-declaration/22001

Я библиотеку собрал, под вайном запустил и всплакнул, вылезли всякие fixme из mingw-w64, и артефакты странные, придётся накатить венду и проверить ещё там, благо осталась лицензионка на разделе ноута (если живая ещё хехе) Всем спасибо за советы

 , , , ,

LINUX-ORG-RU ()

Как кросскомпилировать из Linux для MacOS? ::)

С мелкомягкими разобрался Кросскомпиляция mingw , статическая линковка SDL2

Стек MS простой mingw для сборки wine для тестирования (хотя есть нежданчики ну да ладно)

А что делать для MacOSX? Собрать можно для неё? А как? Ну я сейчас гуглю но вдруг кто сразу может пнуть в нужном направлении или просто что-то дельное подсказать. Но ладно собрать, если можно то соберу, а вот ещё более прикольный вопрос, а каким боком можно запустить приложение собранное для Mac на Linux? Или может какой онлайн сервис есть? Ну я бы рад конечно на реальной машине проверять, но эта как его, они стоят как самолёт.

Ну в общем если есть чё по радужной OS буду рад =) Модераторы велкам :D

Cast export MSG="У вас вроде есть макось и вы кодите" su -c @jollheef ; wakeonlan -p 8 @beastie

 , , , ,

LINUX-ORG-RU ()

Кросскомпиляция mingw , статическая линковка SDL2

Попробовал тут под винду собрать проект, обламался. Думаю надо что-то простое собрать и проверить. Cуть в том что не работает статическая компиляция

Ну и делаю так собираю библиотеку, её подключает простая программка и ещё она подлючает ещё SDL2. Из библиотеки для теста просто в консоль чиселко, а SDL рисует треугольник

Собирается всё так

CC=x86_64-w64-mingw32-gcc
AR=x86_64-w64-mingw32-ar
LFLAGS= -lmingw32 
CFLAGS= -fPIC

makelib:
	$(CC) -c lib.c -o lib.o
	$(AR) rcs lib.a lib.o
	$(CC) -shared lib.o -o lib.dll

makeapp:
	$(CC) -c app.c -o app.o -I./include
	$(CC) app.o lib.a -L./ -lSDL2  -o app.exe

makeappstatic:
	$(CC) -c app.c -o app.o -I./include
	$(CC) app.o lib.a  libSDL2.a  -o app.exe

lib.h

int lib(int x);

lib.c

#include "lib.h"

int lib(int x)
{
    return x+x;
}

app.c

#include <stdio.h>
#include "SDL2/SDL.h"

int WinMain(int argc, char* argv[])
{
    printf("%d\n",lib(50));

    if (SDL_Init(SDL_INIT_VIDEO) == 0) {
        SDL_Window* window = NULL;
        SDL_Renderer* renderer = NULL;

        if (SDL_CreateWindowAndRenderer(640, 480, 0, &window, &renderer) == 0) {
            SDL_bool done = SDL_FALSE;

            while (!done) {
                SDL_Event event;

                SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
                SDL_RenderClear(renderer);

                SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE);
                SDL_RenderDrawLine(renderer, 320, 200, 300, 240);
                SDL_RenderDrawLine(renderer, 300, 240, 340, 240);
                SDL_RenderDrawLine(renderer, 340, 240, 320, 200);
                SDL_RenderPresent(renderer);

                while (SDL_PollEvent(&event)) {
                    if (event.type == SDL_QUIT) {
                        done = SDL_TRUE;
                    }
                }
            }
        }

        if (renderer) {
            SDL_DestroyRenderer(renderer);
        }
        if (window) {
            SDL_DestroyWindow(window);
        }
    }
    SDL_Quit();
    return 0;
}


Ну и далее, тут всё нормально выводит 100 и окошко с треугольником

make makelib
make makeapp
wine app.exe

А вот если линкую статически libSDL.a то

make makelib
make makeapp
dron@gnu:~/egnaroc/wip/mingw$ make makeappstatic 
x86_64-w64-mingw32-gcc -c app.c -o app.o -I./include
x86_64-w64-mingw32-gcc app.o lib.a  libSDL2.a  -o app.exe
/usr/bin/x86_64-w64-mingw32-ld: libSDL2.a(SDL_windows.o): в функции «WIN_CoInitialize»:
/Users/valve/release/SDL/SDL2-2.0.10-source/foo-x64/../src/core/windows/SDL_windows.c:76: неопределённая ссылка на «__imp_CoInitializeEx»
/usr/bin/x86_64-w64-mingw32-ld: libSDL2.a(SDL_windows.o): в функции «WIN_CoUninitialize»:
/Users/valve/release/SDL/SDL2-2.0.10-source/foo-x64/../src/core/windows/SDL_windows.c:95: неопределённая ссылка на «__imp_CoUninitialize»
/usr/bin/x86_64-w64-mingw32-ld: libSDL2.a(SDL_windowskeyboard.o): в функции «IME_SetupAPI»:
...
...
# и так далее ld ругается, но,почему?

Если собирать


makeappstatic:
	$(CC) -c app.c -o app.o -I./include
	$(CC) app.o lib.a libSDL2.dll.a libSDL2.a  -o app.exe

То сборка проходит, но понятное дело wine требует SDL2.dll

P.S. Я не собираюсь по итогу всё статически собирать, в этом смысла особого нет пока что, но просто не пойму, почему ld то тугается

SDL2 отсюда https://www.libsdl.org/release/SDL2-devel-2.0.10-mingw.tar.gz понятное дело, пересобирать самому под mingw наверное смысла нету

 , , , ,

LINUX-ORG-RU ()

Вопрос по Lua

Встраиваю к себе lua после неудачной попытки отыскать встраиваемый C Встроить язык си в программу на языке си ::), всё хорошо через Lua C/API делаю вызовы С функций, через FFI делаю вызовы, из C вызываю функции lua и из lua вызываю С функции вызывающие lua код, короче наигрался. Но вот что я не пойму мы инициализируем lua_State затем загружаем скрипт к примеру luaL_loadfile(L,"./test.lua"); затем исполняем его lua_pcall(L, 0, 1, 0); он отрабатывает, возвращает мне что-то и что я получаю printf("Get script return value => %s\n",lua_tostring(L,-1));, а теперь я исполняю его снова иииии

test2
PANIC: unprotected error in call to Lua API (attempt to call a nil value)

Чуть подробнее C

    lua_State * L = luaL_newstate();
    luaL_openlibs(L);

    int status = luaL_loadfile(L,"./luatest2.lua");
    if(status)
    {
        debug("filed load script: %s ",lua_tostring(L, -1));
    }

    lua_pcall(L, 0, 1, 0);
    lua_pcall(L, 0, 1, 0);

Lua

print("hello");

Выхлоп (вызов только 1 раз, хотя я дёргаю два раза)

hello

Но вспоминаю я ж ничего не возвращаю и не читаю результат возврата и поэтому убираю возвраты

    lua_pcall(L, 0, 0, 0);
    lua_pcall(L, 0, 0, 0);

И получаю выхлоп

hello
PANIC: unprotected error in call to Lua API (attempt to call a nil value)

Я такой репу чешу и вызываю так

   luaL_loadfile(L,"./luatest2.lua");
   lua_pcall(L, 0, 0, 0);
   luaL_loadfile(L,"./luatest2.lua");
   lua_pcall(L, 0, 0, 0);

Выхлоп с двумя «hello» всё верно и ошибки нет.

И вот две вещи которых я недопойму, luaL_loadfile() или остальные функции загрузки кода надо каждый раз вызывать перед lua_pcall? Разве lua_State не хранит текущий кусок кода в себе? Ну и второй вопрос про lua_pcall с 0 параметром возврата это так и надо или нет?

Версия luajit ниже, самосбор, без ключей сборки просто make c си кодом линковка статическая если это важно (статик линковка для проверки возможности вызова функций из lua си функций из самой же программы без загрузки lib.so)

LuaJIT-2.0.5

 , , , ,

LINUX-ORG-RU ()

Как называется состояние UI контейнера/окна?

Есть окно/контейнер который не изменяется пользователем тоесть имеет состояние resizable=false , в него можно добавить например кнопку в позиции x=100 y=100 нулевые координаты кнопки при этом являются относительны позиции контейнера/окна на экране при этом контейнер принимает размер такой что бы уместить в себе входящий в него элемент. >>> Вот пример <<< как в структуре назвать булевый флаг включающий или выключающий это состояние, тоесть если я выключу его и укажу размер контейнера в 50x50px , а кнопке позицию 150x150 то кнопка примет положение в виде максимального размера контейнера в 50x50 уже не изменяя его.

Вот https://youtu.be/k0Uon4rdNvM как оно в динамике если окно изменяемо, то есть контейнер подстраивается под его содержимое, а не содержимое под контейнер

UDP: Тут более понятнее выглядит https://youtu.be/XuQSQHK4hwo

 , , , ,

LINUX-ORG-RU ()

Что-то вроде либы «css» для ui на SDL2 есть в природе?

Сейчас потребовалось сделать игровой UI элемент типа контейнера/окна, что бы пихать в него элементы и перемещать их вместе в одной компановке, зачаток сего вчера написал вот видео теста -> https://youtu.be/cLt57H5NXZE , а вот когда сделал добавление элементов в контейнер (сейчас просто кнопка) призадумался что в целом гуй все эти паддинги марджины хорошо бы как то автоматизировать ну тоесть я делаю кнопку и скармливаю ей что-то вроде простейшего css и она встаёт на нужное место и ведёт себя по нужному, меня больше интересует позиционирование элементов, а не их вид вид то задётся общим стимле в си коде, а вот вычисления позиций отступов внутри контейнера или перестройка элементов это либо писать самому либо может есть какой микропроектик типа либа которая будем мне сама расчитывать позиции элементов? ну если и разрешено перестраиваться при изменении размеров контейнера конечно.

Ну к примеру я скармливаю ей размер контейнера и размеры + позиции элементов, задаю параметры скажем минимальных размеров того или иного элемента и описываю какие отсутпы справа с лева от контейнера и от других элементов, делаю руками изменение одно из элементов ui обновляю и оно мне выплёввает расчитанные новые позиции для всех которые я просто применяю к элементам ui. Есть в природе такое? Если нет то может посоветуете ссылки где всякие подводные камни о которых я пока не знаю есть при реализации гуя. Или просто советы хз =)

UDP: Короче, пока я отвечал на комментарии, я попутно пришёл к мысли мне динамическое ui нужно уже никак ибо я придумал как геймплей сделать по иному хехехе, для статического же ui и новых виджетов я просто напишу на существующих графическую конфигурялку котрая по итогу сохранит все значения размеров и позиций, а потом это конфиг аля ini можно просто загрузить или сгенерировать из него код инициализации ui элементов который потом можно просто использовать, а в случае чего руками подправить. Думаю это самый лучший для меня вариант. Так как сложность была в динамическом ui а прямо сейчас я как бы от него отказываюсь то и вопросов то вроде уже нет поэтому тему закрываю. Заканчиваю лить воду, всем спасибо =)

 , , , ,

LINUX-ORG-RU ()

Не могу найти спецификацию на GIMP color curves

Для постобработки цветокоррекции сцены использую LUT 3D текстуры, камрад Даниэль автор Corange запилил поддержку фотожопного формата acv из которого можно сгенерировать LUT таблицу и использовать, всё замечательно курву матку я пердоле можно надыбать в сети, но фотожоп это такое себе, пока что для себя я запилил импорт LUT из обычных rgb таблиц так что всё хорошо, но делать LUTы из кривых кажется более интересным особенно в процессе поиска нужной коррекции. А для этого хочется юзать GIMP для начала, вроде изи формат кривых гимпа текстовый

Я сразу глянул и там два формата, старый

# GIMP Curves File
0 0 -1 -1 -1 -1 -1 -1 70 172 -1 -1 88 86 117 208 -1 -1 -1 -1 -1 -1 178 74 -1 -1 -1 -1 -1 -1 232 65 255 255 
0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 255 255 
0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 255 255 
0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 255 255 
0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 255 255 

И лиспо новый (всё же спойлеры полезны)

# GIMP 'Кривые' settings

(time 0)
(linear no)
(channel value)
(curve
    (curve-type smooth)
    (n-points 17)
    (points 34 0.000000 0.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 0.274579 0.675676 -1.000000 -1.000000 0.347210 0.337838 0.457927 0.813514 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 0.697963 0.289189 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 0.906997 0.256757 1.000000 1.000000)
    (n-samples 256)
    (samples 256 0.000000 0.012567 0.025130 0.037686 0.050231 0.062762 0.075275 0.087767 0.100233 0.112671 0.125077 0.137448 0.149779 0.162067 0.174309 0.186500 0.198639 0.210720 0.222740 0.234696 0.246585 0.258401 0.270143 0.281807 0.293388 0.304884 0.316290 0.327603 0.338820 0.349938 0.360951 0.371858 0.382653 0.393335 0.403899 0.414341 0.424659 0.434847 0.444904 0.454825 0.464607 0.474246 0.483739 0.493082 0.502271 0.511303 0.520174 0.528882 0.537421 0.545789 0.553982 0.561997 0.569829 0.577476 0.584934 0.592198 0.599267 0.606135 0.612801 0.619258 0.625506 0.631539 0.637354 0.642948 0.648317 0.653458 0.658366 0.663039 0.667473 0.671664 0.675676 0.676092 0.670212 0.658794 0.642593 0.622366 0.598869 0.572860 0.545093 0.516327 0.487316 0.458819 0.431590 0.406387 0.383965 0.365082 0.350494 0.340957 0.337228 0.337838 0.342347 0.349823 0.360029 0.372729 0.387689 0.404672 0.423444 0.443768 0.465409 0.488131 0.511700 0.535879 0.560432 0.585125 0.609722 0.633987 0.657685 0.680579 0.702435 0.723018 0.742091 0.759418 0.774765 0.787896 0.798575 0.806567 0.811636 0.813514 0.812650 0.811160 0.809063 0.806376 0.803119 0.799311 0.794970 0.790116 0.784766 0.778940 0.772657 0.765935 0.758793 0.751249 0.743324 0.735035 0.726401 0.717441 0.708174 0.698618 0.688792 0.678716 0.668408 0.657886 0.647170 0.636277 0.625228 0.614041 0.602734 0.591326 0.579837 0.568284 0.556687 0.545065 0.533436 0.521818 0.510232 0.498695 0.487226 0.475845 0.464569 0.453418 0.442411 0.431566 0.420902 0.410437 0.400191 0.390183 0.380430 0.370953 0.361769 0.352898 0.344358 0.336168 0.328347 0.320913 0.313886 0.307284 0.301126 0.295430 0.289189 0.284304 0.279381 0.274432 0.269468 0.264501 0.259543 0.254607 0.249702 0.244843 0.240039 0.235303 0.230648 0.226083 0.221623 0.217277 0.213058 0.208978 0.205049 0.201282 0.197689 0.194282 0.191072 0.188072 0.185294 0.182748 0.180448 0.178404 0.176628 0.175133 0.173930 0.173030 0.172447 0.172190 0.172273 0.172707 0.173504 0.174675 0.176233 0.178188 0.180554 0.183342 0.186563 0.190229 0.194352 0.198945 0.204018 0.209583 0.215653 0.222239 0.229353 0.237006 0.245211 0.256757 0.267365 0.280651 0.296499 0.314790 0.335407 0.358230 0.383143 0.410028 0.438766 0.469239 0.501330 0.534921 0.569893 0.606130 0.643512 0.681922 0.721241 0.761353 0.802140 0.843482 0.885262 0.927363 0.969666 1.000000))
(channel red)
(curve
    (curve-type smooth)
    (n-points 17)
    (points 34 0.000000 0.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 1.000000 1.000000)
    (n-samples 256)
    (samples 256 0.000000 0.003922 0.007843 0.011765 0.015686 0.019608 0.023529 0.027451 0.031373 0.035294 0.039216 0.043137 0.047059 0.050980 0.054902 0.058824 0.062745 0.066667 0.070588 0.074510 0.078431 0.082353 0.086275 0.090196 0.094118 0.098039 0.101961 0.105882 0.109804 0.113725 0.117647 0.121569 0.125490 0.129412 0.133333 0.137255 0.141176 0.145098 0.149020 0.152941 0.156863 0.160784 0.164706 0.168627 0.172549 0.176471 0.180392 0.184314 0.188235 0.192157 0.196078 0.200000 0.203922 0.207843 0.211765 0.215686 0.219608 0.223529 0.227451 0.231373 0.235294 0.239216 0.243137 0.247059 0.250980 0.254902 0.258824 0.262745 0.266667 0.270588 0.274510 0.278431 0.282353 0.286275 0.290196 0.294118 0.298039 0.301961 0.305882 0.309804 0.313725 0.317647 0.321569 0.325490 0.329412 0.333333 0.337255 0.341176 0.345098 0.349020 0.352941 0.356863 0.360784 0.364706 0.368627 0.372549 0.376471 0.380392 0.384314 0.388235 0.392157 0.396078 0.400000 0.403922 0.407843 0.411765 0.415686 0.419608 0.423529 0.427451 0.431373 0.435294 0.439216 0.443137 0.447059 0.450980 0.454902 0.458824 0.462745 0.466667 0.470588 0.474510 0.478431 0.482353 0.486275 0.490196 0.494118 0.498039 0.501961 0.505882 0.509804 0.513725 0.517647 0.521569 0.525490 0.529412 0.533333 0.537255 0.541176 0.545098 0.549020 0.552941 0.556863 0.560784 0.564706 0.568627 0.572549 0.576471 0.580392 0.584314 0.588235 0.592157 0.596078 0.600000 0.603922 0.607843 0.611765 0.615686 0.619608 0.623529 0.627451 0.631373 0.635294 0.639216 0.643137 0.647059 0.650980 0.654902 0.658824 0.662745 0.666667 0.670588 0.674510 0.678431 0.682353 0.686275 0.690196 0.694118 0.698039 0.701961 0.705882 0.709804 0.713725 0.717647 0.721569 0.725490 0.729412 0.733333 0.737255 0.741176 0.745098 0.749020 0.752941 0.756863 0.760784 0.764706 0.768627 0.772549 0.776471 0.780392 0.784314 0.788235 0.792157 0.796078 0.800000 0.803922 0.807843 0.811765 0.815686 0.819608 0.823529 0.827451 0.831373 0.835294 0.839216 0.843137 0.847059 0.850980 0.854902 0.858824 0.862745 0.866667 0.870588 0.874510 0.878431 0.882353 0.886275 0.890196 0.894118 0.898039 0.901961 0.905882 0.909804 0.913725 0.917647 0.921569 0.925490 0.929412 0.933333 0.937255 0.941176 0.945098 0.949020 0.952941 0.956863 0.960784 0.964706 0.968627 0.972549 0.976471 0.980392 0.984314 0.988235 0.992157 0.996078 1.000000))
(channel green)
(curve
    (curve-type smooth)
    (n-points 17)
    (points 34 0.000000 0.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 1.000000 1.000000)
    (n-samples 256)
    (samples 256 0.000000 0.003922 0.007843 0.011765 0.015686 0.019608 0.023529 0.027451 0.031373 0.035294 0.039216 0.043137 0.047059 0.050980 0.054902 0.058824 0.062745 0.066667 0.070588 0.074510 0.078431 0.082353 0.086275 0.090196 0.094118 0.098039 0.101961 0.105882 0.109804 0.113725 0.117647 0.121569 0.125490 0.129412 0.133333 0.137255 0.141176 0.145098 0.149020 0.152941 0.156863 0.160784 0.164706 0.168627 0.172549 0.176471 0.180392 0.184314 0.188235 0.192157 0.196078 0.200000 0.203922 0.207843 0.211765 0.215686 0.219608 0.223529 0.227451 0.231373 0.235294 0.239216 0.243137 0.247059 0.250980 0.254902 0.258824 0.262745 0.266667 0.270588 0.274510 0.278431 0.282353 0.286275 0.290196 0.294118 0.298039 0.301961 0.305882 0.309804 0.313725 0.317647 0.321569 0.325490 0.329412 0.333333 0.337255 0.341176 0.345098 0.349020 0.352941 0.356863 0.360784 0.364706 0.368627 0.372549 0.376471 0.380392 0.384314 0.388235 0.392157 0.396078 0.400000 0.403922 0.407843 0.411765 0.415686 0.419608 0.423529 0.427451 0.431373 0.435294 0.439216 0.443137 0.447059 0.450980 0.454902 0.458824 0.462745 0.466667 0.470588 0.474510 0.478431 0.482353 0.486275 0.490196 0.494118 0.498039 0.501961 0.505882 0.509804 0.513725 0.517647 0.521569 0.525490 0.529412 0.533333 0.537255 0.541176 0.545098 0.549020 0.552941 0.556863 0.560784 0.564706 0.568627 0.572549 0.576471 0.580392 0.584314 0.588235 0.592157 0.596078 0.600000 0.603922 0.607843 0.611765 0.615686 0.619608 0.623529 0.627451 0.631373 0.635294 0.639216 0.643137 0.647059 0.650980 0.654902 0.658824 0.662745 0.666667 0.670588 0.674510 0.678431 0.682353 0.686275 0.690196 0.694118 0.698039 0.701961 0.705882 0.709804 0.713725 0.717647 0.721569 0.725490 0.729412 0.733333 0.737255 0.741176 0.745098 0.749020 0.752941 0.756863 0.760784 0.764706 0.768627 0.772549 0.776471 0.780392 0.784314 0.788235 0.792157 0.796078 0.800000 0.803922 0.807843 0.811765 0.815686 0.819608 0.823529 0.827451 0.831373 0.835294 0.839216 0.843137 0.847059 0.850980 0.854902 0.858824 0.862745 0.866667 0.870588 0.874510 0.878431 0.882353 0.886275 0.890196 0.894118 0.898039 0.901961 0.905882 0.909804 0.913725 0.917647 0.921569 0.925490 0.929412 0.933333 0.937255 0.941176 0.945098 0.949020 0.952941 0.956863 0.960784 0.964706 0.968627 0.972549 0.976471 0.980392 0.984314 0.988235 0.992157 0.996078 1.000000))
(channel blue)
(curve
    (curve-type smooth)
    (n-points 17)
    (points 34 0.000000 0.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 1.000000 1.000000)
    (n-samples 256)
    (samples 256 0.000000 0.003922 0.007843 0.011765 0.015686 0.019608 0.023529 0.027451 0.031373 0.035294 0.039216 0.043137 0.047059 0.050980 0.054902 0.058824 0.062745 0.066667 0.070588 0.074510 0.078431 0.082353 0.086275 0.090196 0.094118 0.098039 0.101961 0.105882 0.109804 0.113725 0.117647 0.121569 0.125490 0.129412 0.133333 0.137255 0.141176 0.145098 0.149020 0.152941 0.156863 0.160784 0.164706 0.168627 0.172549 0.176471 0.180392 0.184314 0.188235 0.192157 0.196078 0.200000 0.203922 0.207843 0.211765 0.215686 0.219608 0.223529 0.227451 0.231373 0.235294 0.239216 0.243137 0.247059 0.250980 0.254902 0.258824 0.262745 0.266667 0.270588 0.274510 0.278431 0.282353 0.286275 0.290196 0.294118 0.298039 0.301961 0.305882 0.309804 0.313725 0.317647 0.321569 0.325490 0.329412 0.333333 0.337255 0.341176 0.345098 0.349020 0.352941 0.356863 0.360784 0.364706 0.368627 0.372549 0.376471 0.380392 0.384314 0.388235 0.392157 0.396078 0.400000 0.403922 0.407843 0.411765 0.415686 0.419608 0.423529 0.427451 0.431373 0.435294 0.439216 0.443137 0.447059 0.450980 0.454902 0.458824 0.462745 0.466667 0.470588 0.474510 0.478431 0.482353 0.486275 0.490196 0.494118 0.498039 0.501961 0.505882 0.509804 0.513725 0.517647 0.521569 0.525490 0.529412 0.533333 0.537255 0.541176 0.545098 0.549020 0.552941 0.556863 0.560784 0.564706 0.568627 0.572549 0.576471 0.580392 0.584314 0.588235 0.592157 0.596078 0.600000 0.603922 0.607843 0.611765 0.615686 0.619608 0.623529 0.627451 0.631373 0.635294 0.639216 0.643137 0.647059 0.650980 0.654902 0.658824 0.662745 0.666667 0.670588 0.674510 0.678431 0.682353 0.686275 0.690196 0.694118 0.698039 0.701961 0.705882 0.709804 0.713725 0.717647 0.721569 0.725490 0.729412 0.733333 0.737255 0.741176 0.745098 0.749020 0.752941 0.756863 0.760784 0.764706 0.768627 0.772549 0.776471 0.780392 0.784314 0.788235 0.792157 0.796078 0.800000 0.803922 0.807843 0.811765 0.815686 0.819608 0.823529 0.827451 0.831373 0.835294 0.839216 0.843137 0.847059 0.850980 0.854902 0.858824 0.862745 0.866667 0.870588 0.874510 0.878431 0.882353 0.886275 0.890196 0.894118 0.898039 0.901961 0.905882 0.909804 0.913725 0.917647 0.921569 0.925490 0.929412 0.933333 0.937255 0.941176 0.945098 0.949020 0.952941 0.956863 0.960784 0.964706 0.968627 0.972549 0.976471 0.980392 0.984314 0.988235 0.992157 0.996078 1.000000))
(channel alpha)
(curve
    (curve-type smooth)
    (n-points 17)
    (points 34 0.000000 0.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000000 1.000000 1.000000)
    (n-samples 256)
    (samples 256 0.000000 0.003922 0.007843 0.011765 0.015686 0.019608 0.023529 0.027451 0.031373 0.035294 0.039216 0.043137 0.047059 0.050980 0.054902 0.058824 0.062745 0.066667 0.070588 0.074510 0.078431 0.082353 0.086275 0.090196 0.094118 0.098039 0.101961 0.105882 0.109804 0.113725 0.117647 0.121569 0.125490 0.129412 0.133333 0.137255 0.141176 0.145098 0.149020 0.152941 0.156863 0.160784 0.164706 0.168627 0.172549 0.176471 0.180392 0.184314 0.188235 0.192157 0.196078 0.200000 0.203922 0.207843 0.211765 0.215686 0.219608 0.223529 0.227451 0.231373 0.235294 0.239216 0.243137 0.247059 0.250980 0.254902 0.258824 0.262745 0.266667 0.270588 0.274510 0.278431 0.282353 0.286275 0.290196 0.294118 0.298039 0.301961 0.305882 0.309804 0.313725 0.317647 0.321569 0.325490 0.329412 0.333333 0.337255 0.341176 0.345098 0.349020 0.352941 0.356863 0.360784 0.364706 0.368627 0.372549 0.376471 0.380392 0.384314 0.388235 0.392157 0.396078 0.400000 0.403922 0.407843 0.411765 0.415686 0.419608 0.423529 0.427451 0.431373 0.435294 0.439216 0.443137 0.447059 0.450980 0.454902 0.458824 0.462745 0.466667 0.470588 0.474510 0.478431 0.482353 0.486275 0.490196 0.494118 0.498039 0.501961 0.505882 0.509804 0.513725 0.517647 0.521569 0.525490 0.529412 0.533333 0.537255 0.541176 0.545098 0.549020 0.552941 0.556863 0.560784 0.564706 0.568627 0.572549 0.576471 0.580392 0.584314 0.588235 0.592157 0.596078 0.600000 0.603922 0.607843 0.611765 0.615686 0.619608 0.623529 0.627451 0.631373 0.635294 0.639216 0.643137 0.647059 0.650980 0.654902 0.658824 0.662745 0.666667 0.670588 0.674510 0.678431 0.682353 0.686275 0.690196 0.694118 0.698039 0.701961 0.705882 0.709804 0.713725 0.717647 0.721569 0.725490 0.729412 0.733333 0.737255 0.741176 0.745098 0.749020 0.752941 0.756863 0.760784 0.764706 0.768627 0.772549 0.776471 0.780392 0.784314 0.788235 0.792157 0.796078 0.800000 0.803922 0.807843 0.811765 0.815686 0.819608 0.823529 0.827451 0.831373 0.835294 0.839216 0.843137 0.847059 0.850980 0.854902 0.858824 0.862745 0.866667 0.870588 0.874510 0.878431 0.882353 0.886275 0.890196 0.894118 0.898039 0.901961 0.905882 0.909804 0.913725 0.917647 0.921569 0.925490 0.929412 0.933333 0.937255 0.941176 0.945098 0.949020 0.952941 0.956863 0.960784 0.964706 0.968627 0.972549 0.976471 0.980392 0.984314 0.988235 0.992157 0.996078 1.000000))

# end of 'Кривые' settings

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

P.S. Тегов нормальных «постобработка, коррекция цвета и прочих» нету =( Раньше же были вроде, хто теги все подчистил и оставил всякие «палёный мёд» и иже с ними? Агррр, дайте это камраду по жопке плёточкой атата ::)

P.P.S Много воды написал, сорян, гЫ.

 , , ,

LINUX-ORG-RU ()

Объясните пожалуйта как работать с occlusion query culling, я чёт не догоняю

Сижу такой и решил побенчить двигло своё, взял блендер и сделал модельку на 10 000 объектов вот она в таком виде у меня получается 10 000 поверхностей рендерящихся независимо друг от друга со своими VBO что хорошо для теста, а он плачевный. Ну во первых есть отсечение по пирамиде камеры оно спасает, но если 10000 объектов в прямой видимости то опять печать. Наткнулся на gl Query и пару статей о механизме работы для отсечения. Наладил в движке расширения написал простой рендер ну и делаю так (очень упрощённо)

  //прямо в рендере один раз создаю для всех свои  query
  static  GLuint query[10001], num_samples;
  static bool once = true;
  if(once){
     glGenQueries(10001, query); 
     once=false;
  }

for(int i = 0;i !=10000;i++)
{
    GLuint gg = 0;
    glGetQueryObjectuiv(query[i], GL_QUERY_RESULT, &gg);
    if(gg == 0){
        debug("[%i] drop",i);
    }else{
        debug("[%i] pass",i);
    }

    glBeginQuery(GL_SAMPLES_PASSED, query[i]);

    render_render_object(i);//вызов отрисовки одного из 10000 кубиков

    glEndQuery(GL_SAMPLES_PASSED);

 
   glGetQueryObjectuiv(query[i], GL_QUERY_RESULT, &num_samples);
   debug(">>>>>[%i] %d",i,num_samples);

}


Всё работает при уходе кубиков за край экрана пишет «drop» при перекрытии другими объектами пишет «drop» тоесть информация про то что объект рисовать нет смысла есть! Даже больше мы знаем сколько семплов есть в кадре от объекта и если их скажем меньше 1000 то мы можем сами просто выбрасывать его из отрисовки вообще, красота! Только вот беда, узнать то мы это можем только после того как уже отрисовали всё….

Единственная у меня сейчас мысль это перед тем как отрисовывать объект поставить в его место куб отмаштабировать его до размеров рисуемого меша, выполнить query тест отрисовки с этим кубом и если куб не прошол тест тоесть у нас ноль семплов куба в кадре то мы соотвецтвующей модели записываем флаг мол тебя не рисуем и когда объект будет передан рендеру он просто чекнет флаг и отрисует или выбросит объект. Вроде идея рабочея пока ещё не написал тест, но это работать будет инфа 120% пастеризованная, суть в другом правильно я мыслю как реализовывать occlusion query culling ? Ведь по моей логике я просто делаю шило на мыло, ну были бы у меня 10000 скажем чайников и я бы предварительно рисовал кубы узнавая надо ли мне рисовать чайник то выгода есть ибо 8 вершин против 800 к примеру. Мне кажется это не правильно проводить тест отрисовки на более лёгких мешах что бы узнавать надо ли рисовать основные меши со всеми текстурами и прочим. А если у меня исключительно аля маинкрафт и меньше куба только плоскость по сути и то вдруг у меня игра только на спрайтах в два треугольника. Может можно occlusion query culling делать без явной отрисовки чего либо?

OpenGL 2.1 GLSL #120

Только не надо про то что 10000 VBO и переключение текстур и всё это, да я знаю надо объединять меши и делать атласы текстур, тут про отсечение целиком, в сцене может быть 100 000 объектов независимых но рисоваться будут скажем только 100 при грамотной расстановке, а query culling по сути должен помочь отсечь то что закрывают собой другие объекты. Ток я не до конца догоняю как именно с этой хренью работать эффективно

 , , , ,

LINUX-ORG-RU ()

Использовать ли FHS?

Делаю игру на C++. Не могу определиться, куда правильнее складывать файлы при установке, вижу 3 варианта:

  • Соблюдать FHS, складывая бинарник в /usr/local/bin, локали в /usr/local/share/locale, иконки текстурки всякие в /usr/local/share/игра, настройки в ~/.config/игра, остальные файлы в /usr/lib/игра, тогда становится непонятно, как бинарник будет находить, где все эти файлы лежат, ведь префикс может отличаться, получается нужно юзать либо относительные директории, что, вроде как, плохое решение, либо ещё что-то.
  • Складывать всё это в папку игры, как вроде делают сейчас большинство разработчиков игр.
  • Сделать что-то среднее, что будет работать в обеих случаях, задавая директории в скрипте через переменные окружения.

Ещё игра кроссплатформенная, и хотелось бы по-минимуму платформозависимого кода.

 , , ,

mirai65536 ()

Как назвать опцию? Режим работы.

Суть, для форка Corange сделал анимацию частиц (спрайтов) по uv, что бы воспроизводить вот такие анимашки https://cdn.tutsplus.com/gamedev/uploads/2013/11/spritesheet_numbered.png называются они spritesheet, но у меня uvanim. Ну так вот есть режим когда вылетает частица (спрайт) и на ней воспроизводится анимация это ладно, а есть второй режим когда последовательно вылетают частицы но каждый раз с разными картинками которые не меняются до самой смерти частицы. Как это режим назвать? Можете ржать но я не знаю или спать уже пора хз. Опция должна начинаться с uv сейчас так

#непрерывно двигать координаты uv, на скорости xm и ym  
uvmove     = xm:ym:scale
#разово изменить координаты uv 
uvchange   = xc:yc:scale
#анимировать uv от фрейма sf до фрейма ef, factor делитель uv кратный двум
uvanim     = sf:ef:factor:speed

 , , , ,

LINUX-ORG-RU ()