![]() |
Показать все 54 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Библиотека FLTK (https://hlfx.ru/forum/showthread.php?threadid=5048)
Библиотека FLTK
Изрядно намучившись с поддержкой самописной библиотеки виджетов vWidgets в волатиле, я принял решение от неё отказаться (код - в девнул, воспоминания - в треш). Решил найти готовое решение. Основные критерии - простота, кроссплатформенность, легковесность бинарников при статической линковке, возможность использовать в коммерческих проектах с закрытыми сорцами. В итоге выбор пал на FLTK
http://www.fltk.org/index.php
Потыкал - вроде интересно выглядит. Под линукс и макось собралась почти без проблем, всего каких-то два часа гугления и работы в консоли (это реально "быстро" и "без проблем", есличо) примеры под макосью заработали. Под винду пока собирать не пробовал.
Кто-нибудь пользовался этой библиотекой? Какие подводные камни?
Что используете в своих проектах, монстры типа Qt или wxWidgets, или что-то аналогично-легковесное?
__________________
Сам не писал под фултик и пользовался всего одной программой на нём (Dillo). Могу только сказать, что штатный селектор файлов там никуда не годится. Хотя не знаю, потребуется ли тебе такого рода функциональность в движке. А с кнопками-ползунками-скролами проблем не встречал.
Но это так, заметки мимокрокодила.
__________________
__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.
http://button.moddb.com/download/medium/125531.png
__________________
Так, ну что. Пока полёт нормальный, под виндой работает.
__________________
Сильно тулкит увеличивает размер исполняемого файла на венде?
Прилично увеличивает, учитывая, что я линкую статически и FLTK, и CRT.
Просмотрщик текстур увеличился с 250 кб до 500 кб.
Остальные пока ещё не перевёл на FLTK.
Добавлено 02-11-2017 в 21:29:
Зато под макосью просмотрщик текстур наконец-то заработал, и не пришлось сношать мозги с Cocoa.
__________________
А Джек будешь переносить?
Мне всё больше нравится FLTK! Портирование, по крайней мере, простых GUI-программ - это удовольствие.
__________________
XaeroX
Там есть возможность ловить кейкоды нажимаемых клавиш, а не символы?
nemyax
Нет, конечно. Это вообще где-то есть?
__________________
В gtk заявлено: https://developer.gnome.org/gdk3/st...tml#GdkEventKey
XaeroX
Супер! Ждем порт Джека
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
nemyax
Я подозреваю, что эти hardware_keycode не только не портабельны, но ещё и от модели клавиатуры зависят. Толку-то с них?
__________________
Надо бы повыяснять, совпадают ли они с вот этими.
Это виндовые виртуальные сканкоды, они ведь и называются virtual. С чего они должны совпадать?
В движках делают специальные маппинги системные сканкоды <-> движковые сканкоды, и таблицы соответствий для каждой ОС свои.
__________________
XaeroX
По какой доке собирал для венды?
Если остальное на си, могут ли возникнуть сложности при подключении туда FLTK?
Без доков, просто создал новый проект, добавил туда все нужные файлы, настройки сделал по вкусу.
Сложности будут, наверное - т.к. FLTK написан на С++, там классы.
__________________
А собирал какой студией?
nemyax 2017.
__________________
XaeroX
И какую версию FLTK ты взял?
Дык самую свежую на тот момент, с их сайта. FL_ABI_VERSION = 10302.
__________________
Да, вроде отличная штука. Для сборки за глаза хватает студии 2008 экспресс, исполняшки маленькие и статически линкованные. Круть.
nemyax
Дык!
__________________
__________________
I'm on github
I'm on opendesktop.org
FreeSlave
Ты предлагаешь вшить в игру аппаратные сканкоды всех известных клавиатур?
__________________
Уж наверняка цифробуковки-то у большинства клавиатур имеют одинаковые кейкоды.
Кстати, они таки доступны через static int Fl::event_key().
nemyax
Это не аппаратные сканкоды, а виртуальные. От ОС зависят, в общем.
__________________
Не исключено, что в FLTK они обёрнуты одинаково. Но чё гадать, с другой стороны.
XaeroX, походу это можно через виртуальные сканкоды сделать. В SDL есть такая штука https://wiki.libsdl.org/SDL_Scancode
Нажатие на A на azerty клавиатурах возвращает SDL_SCANCODE_Q. Глянул сорцы - там маппинги на коды в ОС. Так что ты прав, хардвар-коды тут лишние.
__________________
I'm on github
I'm on opendesktop.org
Вопросики скорее не про саму либу, а про организацию взаимодействия её с OpenGL. Вот сделал я подкласс Fl_Gl_Window и реализовал триде-вьюпорт для геометрии. Всё зашибись, но теперь я хочу ещё один подкласс, который будет дваде-вьюпортом для ювишек.
Все данные на отрисовку доступны через один и тот же VBO — и для 3D, и для 2D. Надо ли предпринимать что-нибудь особенное, чтобы обе разновидности вьюпорта работали одновременно? Как лучше поступить с шейдерными прогами: создавать под каждый тип вьюпорта свою или юзать общую (и вкорячивать дополнительные условия и униформы в шейдеры)? Не будет ли гонок из-за общего доступа к VBO?
__________________
1 | struct render_state |
2 | { |
3 | GLuint shader_program_3d; |
4 | GLuint shader_program_2d; |
5 | GLuint vert_buffer; |
6 | GLint my_uniform3d_1; |
7 | GLint my_uniform3d_2; |
8 | GLint my_uniform2d_1; |
9 | GLint my_uniform2d_2; |
10 | }; |
render_state *shared_res; |
nemyax
Тебе надо расшарить идентификаторы между двумя OpenGL-контекстами. Это делается по-разному в зависимости от ОС. Например, под виндой это wglShareLists. В FLTK должно быть что-то такое в API (в Qt, допустим, есть).
__________________
nemyax
Я же говорю - "судя по коду"
if ( context ) { |
if ( context_list && nContext ) [b]wglShareLists( context_list[0], context )[/b]; |
add_context( context ); |
} |
__________________
Карочы надо взять у первого GL-окошка контекст через void *my_shared_context = first_good_gl_win->context(); и потом явно задавать его другим нужным окошкам через other_gl_win->context(my_shared_context);. Тогда будет шариться.
XaeroX
Как ты делаешь леяут элементов интерфейса? При помощи FL_Table или FL_Tile или как-нибудь ещё?
nemyax
Никак, у меня нет резиновых окошек, поэтому все координаты задаю вручную.
__________________
Можно набацать виртуальные вьюпорты, через проходы, например. Да мало ли. Через контексты, КМК не очень удобно. Особенно если мы рисуем что-то одно но с разных сторон. Я бы эти вьюпорты рассматривал как частный случай зеркал, например. Ну или через FBO.
Добавлено 10-07-2019 в 16:55:
ЗЫ. я вот с этим моментом никогда не сталкивался, пусть Ксерокс поправит, но помоему память выделяется под конкретный контекст и чтобы нарисовать ту же карту четыре раза, надо её и загрузить четыре раза, то есть займет вчетверо больше памяти, но чтобы этого избежать контексты шарят, но тут-то кроются всякие подводные камни.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Почему-то поверх гл-рендера не получается надёжно отрисовать fltk-шные графические штучки типа fl_xyline. Мерцают хулинии-то. Видимо glClearColor их постоянно стирает.
Может быть такое, что FLTK буферизует движения мыши? Столкнулся с тем, что перетаскивание происходит с каким-то лагом (видос). Если таки буферизует, то как его заставить забывать промежуточные состояния?
nemyax
Нифига себе.
Может, у тебя отрисовка тупит?
__________________
Маловероятно, что оно тупит от дюжины вызовов glBufferSubData за ивент. Хотя фиг знает.
nemyax
Может, какая-нибудь тройная буферизация в драйвере включилась?
Ты фпс проверь для начала.
__________________
Разобрался. Это я сам придурок, ну как обычно. При обновлении матрицы прибавлял значения к элементам вместо замены. Теперь никаких лагов.
nemyax
Бывает. А по видео я не понял, то ли оно отстаёт, то ли смещается неверно.
__________________
Хоткеи, заданные английскими буковками в массиве Fl_Menu_Item-ов (типа так {"&Undo", FL_COMMAND + 'z', (Fl_Callback*)cb_undo}), работают в русской раскладке вообще без каких-либо телодвижений. Это просто праздник кокойта!
__________________
Временная зона GMT. Текущее время 14:03. | Показать все 54 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024