Cross-platform GPU-oriented C++ application/game framework

Overview

Introduction

neoGFX is a C++ app/game engine and development platform targeted at app and game developers that wish to leverage modern GPUs for performant application user interfaces and game graphics. neoGFX is still a work in progress (incomplete) so is not yet suitable for making apps or games. Currently neoGFX has only been built for and tested on Windows.

neoGFX uses C++20 features; although C++20 compiler support is currently patchy this isn't a problem given the expected neoGFX 1.0 release date of Q4, 2021.

Features (when version 1.0 released)

  • clean modern C++ design including full exception safety supporting various widget allocation patterns (stack, member variable or free store);
  • use of standard non-proprietary C++ data types including using standard string classes (UTF-8 encoding) and containers from the C++ standard library;
  • simple, easy to use multi-threaded event system (an improvement over traditional signals and slots);
  • no baggage: neoGFX primarily contains only the GUI and graphics related functionality needed for creating apps and games;
  • full library of widgets and layout managers specifiable in an RJSON (Relaxed JSON) derived declarative UI description language drag/drop editable using the included design tool, neoGFX Design Studio;
  • CSS3 style sheet support with support for custom skins;
  • scripting engine, neos, that will be able to support a wide range of scripting languages (on release: neoscript, JavaScript and Lua);
  • sub-pixel text rendering;
  • simple window style for specifying that a window is "nested" rather than being a separate native desktop window;
  • "text_edit" widget supports multiple fonts, text colours (with optional gradient effects), colour emojis and rendering text in columns;
  • "Green" and "Arcade" modes to optimize CPU power consumption, fight #ClimateChange!
  • GPU shader rendered CSS3 compliant gradients with optional gaussian smoothing;
  • MVC (model-view-controller) related classes supporting robust and fast app design;
  • optional MDI support utilizing "nested" windows;
  • 2D, 2.5D and 3D game support: sprites, objects and physics;
  • Pure ECS (Entity-component-system) usable by both games and apps;
  • flexible asset management: texture images (e.g PNGs) can be stored in .zip archives which can be optionally embedded inside the program binary accessible using simple URLs;
  • support for OpenGL, DirectX and Vulkan.

Roadmap

Version ETA Features
v0.99 Q3, 2021 Windows OpenGL; widget library feature complete; UI design tool
v1.00 Q4, 2021 Linux OpenGL; scripting engine
v1.10 Q2, 2022 Vulkan; Android support; physics engine
v1.20 Q4, 2022 macOS support

Implementation Progress

Feature % done TODO
Window 95 Drop shadow
Dialog 90 Default button
Message Box 100
Menu 100
Nested windows 25
MDI 0
Tabs 95 Vertical tabs
Toolbars 90 Drop-down button support
Layout Managers 95 Need to fully support size policies
Label 100
Button 100
Table View 95 Selection; cell widget
Tree View 95
List View 95
Text Edit 85 Columns; rich text (HTML); undo/redo; performance optimization
Line Edit 100
Spin Box 100
Slider 90 Keyboard
Check Box 100
Radio Button 100
Combo Box 95 Glob and regex filters; review UX.
Group Box 100
Tool Tips 0
Status Bar 100
Progress Bar 0
Docks 75
Font Picker 95 Font selection widget
Colour Gradient Selector 95 Swatch library
Colour Picker 100
Date/Time 0
File Browsers (Native) 99
Drag and drop 75
UI/Resource Description (RJSON) 40
tool: neoGFX Design Studio 10
i18n 40
l10n 0 UK English, US English, French, German, Chinese
HID: Game Controllers 80 Calibration/settings UI; DirectInput button mapping
Multi-monitor 50 DPI changes when changing or dragging between monitors
Scene Graph 0
Skins 40

Last updated: 10/10/2020

Comments
  • [Feature Request] Xml based view-configuration

    [Feature Request] Xml based view-configuration

    First I want to say thanks for all your work and especially for publishing it all under GPLv3. You rock! Did you ever consider implementing some theming support based on xml configuration files? SDL already is a good framework for game development. The neogfx project adds lots of UI components / framework, but as far as I know there is no "decent enough" game theming project out there. Maybe something XML based (a little bit like done in WPF) would be great! That would allow users / theme designers / modders to edit the look and feel of the applications UI, and software developers could focus more on the game logic, graphics effects, fixing bugs,... without having to care about horribly bad / legacy self-made theming systems to allow users to modify the location, size, partial transparency,... of user interface elements.

    enhancement 
    opened by basisbit 2
  • [Bug] Support font face object destruction.

    [Bug] Support font face object destruction.

    Add support for font face object destruction (reference counted destruction); increase granularity of glyph texture bin packs so they can be freed more readily (suggest 512x512 textures for each font tace).

    opened by i42output 2
  • Font

    Font "SnareDrum Three NBP" crashes FreeType 2.11.0 but not 2.10.4 (no Harfbuzz integration)

    DesignStudio.exe!af_face_globals_get_metrics(AF_FaceGlobalsRec_ * globals, unsigned int gindex, unsigned int options, AF_StyleMetricsRec_ * * ametrics) Line 458	C
    DesignStudio.exe!af_loader_load_glyph(AF_LoaderRec_ * loader, AF_ModuleRec_ * module, FT_FaceRec_ * face, unsigned int glyph_index, int load_flags) Line 306	C
    DesignStudio.exe!af_autofitter_load_glyph(AF_ModuleRec_ * module, FT_GlyphSlotRec_ * slot, FT_SizeRec_ * size, unsigned int glyph_index, int load_flags) Line 489	C
    DesignStudio.exe!FT_Load_Glyph(FT_FaceRec_ * face, unsigned int glyph_index, int load_flags) Line 978	C
    

    DesignStudio.exe!neogfx::native_font_face::glyph_texture(const neogfx::glyph & aGlyph) Line 289 C++ DesignStudio.exe!neogfx::glyph_text_factory::to_glyph_text(const neogfx::i_graphics_context & aContext, const char32_t * aUtf32Begin, const char32_t * aUtf32End, const neogfx::i_font_selector & aFontSelector) Line 720 C++ DesignStudio.exe!neogfx::glyph_text_factory::to_glyph_text(const neogfx::i_graphics_context & aContext, const char * aUtf8Begin, const char * aUtf8End, const neogfx::i_font_selector & aFontSelector) Line 413 C++ default.nel!neogfx::i_glyph_text_factory::to_glyph_text(const neogfx::i_graphics_context & aContext, const std::basic_string_view<char,std::char_traits> & aString, std::function<neogfx::font __cdecl(unsigned __int64)> aFontSelector) Line 539 C++ default.nel!neogfx::graphics_context::to_glyph_text(std::_String_const_iterator<std::_String_val<std::_Simple_types>> aTextBegin, std::_String_const_iterator<std::_String_val<std::_Simple_types>> aTextEnd, std::function<neogfx::font __cdecl(unsigned __int64)> aFontSelector) Line 951 C++ default.nel!neogfx::graphics_context::to_glyph_text(std::_String_const_iterator<std::_String_val<std::_Simple_types>> aTextBegin, std::_String_const_iterator<std::_String_val<std::_Simple_types>> aTextEnd, const neogfx::font & aFont) Line 946 C++ default.nel!neogfx::graphics_context::to_glyph_text(const std::string & aText, const neogfx::font & aFont) Line 941 C++ default.nel!neogfx::basic_item_presentation_model<neogfx::basic_item_model<void *,0,neogfx::item_cell_data,neogfx::item_flat_container_traits<void *,neogfx::item_cell_data,0,0>>>::cell_glyph_text(const neogfx::item_presentation_model_index & aIndex, const neogfx::i_graphics_context & aGc) Line 781 C++ default.nel!neogfx::basic_item_presentation_model<neogfx::basic_item_model<void *,0,neogfx::item_cell_data,neogfx::item_flat_container_traits<void *,neogfx::item_cell_data,0,0>>>::cell_extents(const neogfx::item_presentation_model_index & aIndex, const neogfx::i_graphics_context & aGc) Line 792 C++ default.nel!neogfx::basic_item_presentation_model<neogfx::basic_item_model<void *,0,neogfx::item_cell_data,neogfx::item_flat_container_traits<void *,neogfx::item_cell_data,0,0>>>::column_width(unsigned int aColumnIndex, const neogfx::i_graphics_context & aGc, bool aIncludePadding) Line 273 C++ default.nel!neogfx::drop_list::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 977 C++ default.nel!neogfx::layout_item_cache::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 419 C++ default.nel!neogfx::layout::do_minimum_size<neogfx::layout::row_majorneogfx::vertical_layout>(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 167 C++ default.nel!neogfx::vertical_layout::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 72 C++ default.nel!neogfx::layout_item_cache::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 419 C++ default.nel!neogfx::layout::do_minimum_size<neogfx::layout::column_majorneogfx::horizontal_layout>(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 167 C++ default.nel!neogfx::horizontal_layout::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 72 C++ default.nel!neogfx::layout_item_cache::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 419 C++ default.nel!neogfx::layout::do_minimum_size<neogfx::layout::row_majorneogfx::vertical_layout>(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 167 C++ default.nel!neogfx::vertical_layout::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 72 C++ default.nel!neogfx::widgetneogfx::i_widget::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 1056 C++ default.nel!neogfx::framed_widget<neogfx::widgetneogfx::i_widget>::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 138 C++ default.nel!neogfx::window::client::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 138 C++ default.nel!neogfx::layout_item_cache::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 419 C++ default.nel!neogfx::layout::do_minimum_size<neogfx::layout::row_majorneogfx::vertical_layout>(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 167 C++ default.nel!neogfx::vertical_layout::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 72 C++ default.nel!neogfx::layout_item_cache::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 419 C++ default.nel!neogfx::layout::do_minimum_size<neogfx::layout::row_majorneogfx::vertical_layout>(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 167 C++ default.nel!neogfx::vertical_layout::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 72 C++ default.nel!neogfx::widgetneogfx::i_window::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 1056 C++ default.nel!neogfx::framed_widget<neogfx::widgetneogfx::i_window>::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 138 C++ default.nel!neogfx::window::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 550 C++ default.nel!neogfx::font_dialog::minimum_size(const neolib::optional<neogfx::basic_size> & aAvailableSpace) Line 272 C++ default.nel!neogfx::widgetneogfx::i_window::layout_items(bool aDefer) Line 763 C++ default.nel!neogfx::window::center_on_parent(bool aSetMinimumSize) Line 680 C++ default.nel!neogfx::font_dialog::init() Line 381 C++ default.nel!neogfx::font_dialog::font_dialog(neogfx::i_widget & aParent, const neogfx::font & aCurrentFont, const neolib::optionalneogfx::text_appearance & aCurrentAppearance) Line 226 C++ default.nel!neogfx::DesignStudio::sticky_note::sticky_note'::`2'::<lambda_5>::operator()'::`2'::<lambda_1>::operator()() Line 126 C++ default.nel!std::invoke<neogfx::DesignStudio::sticky_note::sticky_note'::2'::<lambda_5>::operator()'::2'::<lambda_1> &>(neogfx::DesignStudio::sticky_note::{ctor}::__l2::<lambda_5>::()::__l2::<lambda_1> & _Obj) Line 1586 C++ default.nel!std::_Invoker_ret<void,1>::_Call<neogfx::DesignStudio::sticky_note::sticky_note'::`2'::<lambda_5>::operator()'::`2'::<lambda_1> &>(neogfx::DesignStudio::sticky_note::{ctor}::__l2::<lambda_5>::()::__l2::<lambda_1> & _Func) Line 745 C++ default.nel!std::_Func_impl_no_alloc<neogfx::DesignStudio::sticky_note::sticky_note'::2'::<lambda_5>::operator()'::2'::<lambda_1>,void>::_Do_call() Line 921 C++ default.nel!std::_Func_class::operator()() Line 969 C++ default.nel!neolib::event<>::enqueue(std::optional<std::scoped_lockneolib::switchable_mutex> & aLock, neolib::event<>::handler & aHandler, bool aAsync, const std::optional & aAsyncTransaction) Line 763 C++ default.nel!neolib::event<>::sync_trigger() Line 580 C++ default.nel!neolib::event<>::trigger() Line 530 C++ default.nel!neolib::plugin_events::event<>::trigger() Line 82 C++ default.nel!neogfx::menu_item_widget::select_item(bool aOpenAnySubMenu) Line 429 C++ default.nel!neogfx::menu_item_widget::mouse_button_released(neogfx::mouse_button aButton, const neogfx::basic_point & aPosition) Line 230 C++ default.nel!neogfx::surface_window::native_window_mouse_button_released(neogfx::mouse_button aButton, const neogfx::basic_point & aPosition) Line 543 C++ DesignStudio.exe!neogfx::native_window::handle_event() Line 264 C++ DesignStudio.exe!neogfx::native_window::handle_event(const neolib::variant<neogfx::window_event,neogfx::basic_mouse_event<1>,neogfx::basic_mouse_event<2>,neogfx::keyboard_event> & aEvent) Line 163 C++ DesignStudio.exe!neogfx::native_window::pump_event() Line 154 C++ DesignStudio.exe!neogfx::opengl_renderer::process_events() Line 365 C++ DesignStudio.exe!neogfx::native::windows::renderer::process_events() Line 459 C++ DesignStudio.exe!neogfx::surface_manager::process_events(bool & aLastWindowClosed) Line 215 C++ DesignStudio.exe!neogfx::app::do_process_events() Line 748 C++ DesignStudio.exe!neogfx::app::process_events(neogfx::i_event_processing_context & __formal) Line 690 C++ default.nel!neogfx::context_menu::exec() Line 75 C++ default.nel!neogfx::text_edit::mouse_button_released(neogfx::mouse_button aButton, const neogfx::basic_point & aPosition) Line 515 C++ DesignStudio.exe!neogfx::surface_window::native_window_mouse_button_released(neogfx::mouse_button aButton, const neogfx::basic_point & aPosition) Line 543 C++ DesignStudio.exe!neogfx::native_window::handle_event() Line 264 C++ DesignStudio.exe!neogfx::native_window::handle_event(const neolib::variant<neogfx::window_event,neogfx::basic_mouse_event<1>,neogfx::basic_mouse_event<2>,neogfx::keyboard_event> & aEvent) Line 163 C++ DesignStudio.exe!neogfx::native_window::pump_event() Line 154 C++ DesignStudio.exe!neogfx::opengl_renderer::process_events() Line 365 C++ DesignStudio.exe!neogfx::native::windows::renderer::process_events() Line 459 C++ DesignStudio.exe!neogfx::surface_manager::process_events(bool & aLastWindowClosed) Line 215 C++ DesignStudio.exe!neogfx::app::do_process_events() Line 748 C++ DesignStudio.exe!neogfx::app::process_events(neogfx::i_event_processing_context & __formal) Line 690 C++ DesignStudio.exe!neogfx::app::exec(bool aQuitWhenLastWindowClosed) Line 352 C++ DesignStudio.exe!main(int argc, char * * argv) Line 45 C++ DesignStudio.exe!invoke_main() Line 79 C++ DesignStudio.exe!__scrt_common_main_seh() Line 288 C++ DesignStudio.exe!__scrt_common_main() Line 331 C++ DesignStudio.exe!mainCRTStartup(void * __formal) Line 17 C++ kernel32.dll!00007ffaae317c24() Unknown ntdll.dll!00007ffaae58d4d1() Unknown

    opened by i42output 1
  • Crash on drop list click off (possible regression)

    Crash on drop list click off (possible regression)

    Crash on drop list click off (regression).

    To reproduce:

    Click the show list button of the second test drop list; hover mouse over "Circle" click on main test app window.

    bug 
    opened by i42output 1
  • Parent dialog not displayed disabled whilst child modal dialog is displayed

    Parent dialog not displayed disabled whilst child modal dialog is displayed

    Parent dialog not displayed disabled whilst child modal dialog is displayed; more specifically when the gradient selection dialog is opened in the neoGFX Test App this happens: it may be related to use of popup menu to open the dialog.

    image

    opened by i42output 1
  • Kerning is being applied twice

    Kerning is being applied twice

    Kerning is being applied twice: once by Harfbuzz and once using Freetype kerning tables. Enabling/disabling kerning should be done via Harfbuzz and Freetype kerning should never be used.

    Separate kerning support will still be required for sprite sheet fonts.

    bug 
    opened by i42output 1
  • Item view click to edit mouse move capture problem

    Item view click to edit mouse move capture problem

    If you click and hold down mouse button on an item view cell with click to edit enabled then move mouse then release mouse button moving the mouse continues to move selection as if mouse still captured.

    bug 
    opened by i42output 1
  • ZALGO text doesn't render correctly

    ZALGO text doesn't render correctly

    ZALGO text doesn't appear to render correctly (or at least not as Chrome renders it):

    T̢̩̲̣̺͎̭̬̾̎͂̆̃̈ͯ̔ͤ͜ō̡͇͍͙͋̑̀ͥ͜ ̵͇̪̩̬̪͉͚̙͑́̍̊͐̀ȋ̿̀҉̰͇̪͔͇̪̝̯̭ṅ̯̟̤͎̀͒̓͝v̽̓̉̈́ͯ͏̬̦̪̯̙o̮̟̐͛ͨ̾ͧ͠k̶͉͔ͫ̋̽̉̊͊͝ë̪̮̬̮̪́̾͘͜ ̢̼̰͛ͧ̀ṯ̢̣͕̙̝̲̌ḩ̨̖̲̹̩̞̘̰̯̂́ͫeͩ҉҉͉̯͡ ̨͋҉̰̣̣h͗́̊ͨͭ̄̑ͣ̚͏̣̹̖̫͉͈̗̯i̴̧̛̩̪̰͔ͣ̄̌̅̽͐ͮv̷͍̣͔̳͂͗̈͒̄ͦ̚e̢̯̫ͪ͂̃ͮ̑ͭ̓-͎̘̄ͩ̎̀͋͘͝m̢͈̜͉̹͈̼͆́ͅi͚̫̜̯͚̬͙ͭ͛ͮ̿́̚͡n̨͚̘̞͆̋̓ͪ͌ͬ̇̽̽d̫͖̣͍̣̻͖̲̠͗̒͒̎͢͟ ̴̧̨͙̝͚̰̮̔̾̓̃ͥ͑̆̈́̐ŗ͙̮̝̳͖̞͔ͨ̇̐͊̀̕ĕ̥̗͎̰̮͑̾̋̉ͨͮ̓́p͙̯͕͓̭̲̈ͭ́͋̍ͦ̓͠r̷̢̙̹̤ͬ̅͋͐̊ͤͭȅ̖̗ͧͤ̍̕s̵̝̠͙̦͕̘͕ͨ͊̊̎̽ͅě̡͔̦͎͍̰̬͔ͦ̇̾̚͟ͅn̪̜̹͉̟ͩ́̍ͣ̍͜ẗ͓̯̖̞̭̝̤́ͪ̓̽ͧ̿ͦ̉į̣͇̞̥̻̞͐̈́́͘͡n̘̬͖͇̖̟͚ͯ̆̔̾̆͡͞g̢͎̫͓͎̬̥͆ͯͅ ̧̟̖̘̮̫͕̞̩ͥ̎c̸̘ͦ͞ḩ̵̩̤̦̟̖̒͒͗̋͡a̬̭̬ͪ͌ͤ̊̉͐͐́̀o̷̡̼̟͕̠̪̼̦̰͚͒͋ͯ̓͑̓͛́s̸̺̲̗ͩ̐͞.̛̻̩̞̬̝͍̗̼͒ͮ̓̂͂̊̅͘ ̂ͤ̎́͑̓̕͡͏͓̯I̶͉̲̠̻̪̱̽͊̀ñ̩̼̤̝̠͈̌ͫ́ͪ͊̚v̸͙̞̥͓̜̒̃̿̈́͘ͅò̮͈̙ͥ̈͗͗͜k̂̎̂̾ͨ͏̤̗̦̻̖͍̼i͆͛̅ͯ͑̚҉͍̺̗̹͎͉̣̖̠͘n̵̷̠̭̦̳̽͊ͩ̒̚g̷̪͚̮̟̻͍͐̅ͩ̅̄ ͎͖̭̟̻̞͚͒̆͛̆̔ͪ̚̕͢ṱ̟̪̄͑̀ͮ͋̂ḧ̵̢͖͍̺́̈́e̛̫̱̓ͤ̓ͩ̄̈́̓̕ ̸͐͐̊͋ͩ̆̍̅̚҉̷̲̭̲f͙̬̳̦̜̆͆e̴̡̛̲̺̘̣̝̘͋̓̐ͩ̾ͨ̈́̌e̡̻̭̤̦̞̱͈̘͂̍̿̄͟l̶̛̗̤̈́̊ͣ̎͂ȋ̶͖͍̖̽̀ͭņ̴̮͎̱͓ͯ͆͛ͮͨͭg̻̖̲̪̦͍͇̮̟ͯ̓̇̄ ̠͔͉̪͔̅̾̇̎͂͂ͅő̱̰̦͈͍̩̙̜́ͨ͜f̘̱ͨ ̸̲̬̯̤̝͇̦̯̌̆̿ͭͥ͋͐ç̷̛̥͍̳̗̠͚̄͑̐h͚͈͓͈͇͙͉̭͌̽ͦ͋ͧ̓̐a̷̩̻̽͋͊̀͑̕͢o̸̶͇̰̦ͪ͐́̿̆̔̾š̶̵̫̫̠̝̪̮͑͜.̢̲̪͆͑̇͛̈̊ͬ̕ ̺͎͔̪̜̜̣͚̅̏ͥ̋̈͘W̘̙͓̻͎͖͉̖̣͆̔̅ͥ̅̈́̾͡i̊͗͏̡̱̜̙̖̹͘t̨͖͖̙ͯͯͥ͘h̼͖̘ͥ́ͮ̎ͫ̈̐͗͝͠ ̴̥̳̖̩̺̠̳̋͑͛̽͗͒̋͜ǫ̵̬̩̌̍͑́̀u͎̩͔͆ͮ͐̈́̓͛t̡͓͔͖̤̽̌ ̴͙̫̤̖̭̰̲̹͗̄ͥͤ̈́ͥ͆̂́oͫ̃̈́̃͏̳̙͔͉͍̕͝ř̸̢̰͈͇̰͓͙ͦ͌̀ͨ̆͗̚d̍͢҉̻͍̙̯͕̘͓͙̹ë͇̝̪͕̣͓̀͢͠r̙̩̗͉̘̎͛ͧ̈́̎̋̋̅͘͝.̳̦ͯ̊͑̆̋̓͋ ̛̮͚̜̣̟̄ͪ͑͡T̸̸͚̣͍̺̀ͪ̀h͓̱̫͙̮̣̉͗̇͝ͅe̾ͭ̍҉̴̯̹̦͎̺͞ ̴͇͈͑̀́ͅṈ̟̠̝̝̟̪͚̔͐̎̋̄̑̃̚͞e̵̝̎ͭ͌̐̇̋z̧͎̳̻͙͖̾̿̓ͫͭ̚͞͝p̵̠͖͙͓̀͑͑ͨͤ̆̇͘ȩ̷̤̤̮̫̼̮̍͗͑͘r̶̸͉͚͎̞̐ͪd̷̈́̈́ͯ̉ͭͯ͏̩̭͔͎̥̻̩̮i̹̹̋̽̐̉ͤ̽̅̇͡ͅa̴̘̻̔̎̐̿ͤ́̔͌ͣ͝n̨͈̫̝͈̹̟̙̣̂ͭͥ̑̀ ͒̄̊͛͌̃̽̉͏̖͈̺̙h̜͉͊ͬ̔̈́̉ͮ̅͜í̬̖̅v̩̺̹͔̼̈́e̴̫̺̳͍̲̩͈ͫ͐ͥ̂͆͑-̢̨̘̯͖͛́m̨̳̜̮̗͕̟̬̼͋̇͗͟ͅi̪ͦͤ́̂n̴͕͚͉̆̾ͮ͌̐͛́ḋ̢̰̥͉̪̏ͫ̑͟͝ ͙̯̤͉͇͔ͨͧ͐͗̋͞͞o̶̠̳̭͛͗͐ͨ͛ͭ͂ͫf͔̹ͥ͛̋ ̶̮͖̟̩̺̲̝̤͇̽͂č̲͚̜͖̙̃̔̌́ͅḧ̽͏̧͏̥͍͇̼̙̺a̷̼̮̓̑̅ͬͯ̚̕ō͚̞̭̿ͫ͊ͧͅs̨͓̫͔̰̦̠̼ͭ̀ͯ.͓̖̤̳̘̮̙̞͔͆̇͞ ̄́̎̌͊҉͈̭̳Z̸̩̼ͪ̎͌a̧̱̖͉̰̔̃ͥ͞l̝̀ͨ̈́̚͞g̓ͪ̉̾̈͋͏͏̺͉ơ̫̲͛̔͆͌ͬ̄͢.̢̪͉̠̱̥̬͇͉͑̓ͬͨ͊̋͌͌͜ ͫ̓ͫͪ̒̈͋҉͖͇͇H̶͔̺̭͚ͬͫ͒̈́͆͝e͖̺̤͉̹͓̲ͭͪ̊̐̎̍͊̀̀͡ ̪̣̺̅̏ͬͩͮͫͩ̔w̞̪̥ͦ͝h̬̻͉̥͎̺͖̺̰͒̉̋̎ͪo̢̪̤̺̹͓͈̫̿ͩͤͣ̍͠ ̂̎̌͌̾̏̎̀҉̝͍͖͕͕̼̲W̵̢͕̺͍̩̓ä́̓̊̓͝҉͔̣͉̠̯̭̲i̶̮͎͖ͦ̊́̽̉̅̀̚t̻̣̝̭̘͔͆͒͋s̋ͩ̉ͥ̂͐͐̀҉̯͈̩̳̖̱̳ ̡̝̩͕͇͔͔͋ͫ́B̼̹̩̯͎ͫͪ̎̈̅͌̉͠e̘͇̘ͣ̓͐͆͂ͩ̈́̏͝͠h̴̬͇̪̞̳͗ͧi̲̠̫̭͓͌͋ͦ́ň̾̔͐͊̒̉ͧ҉҉͍͉͇͓d̘̞̗͉ͭͧ͛͛ͪ̌͡ ̏̽̽͆̃̂̐͘҉̟̞̗̙̱̙T̵͉͆͐̇́ͪ̚͢h̨̯̫̮̤͛̎ͣ̉ͦͯͪ̎̽ḙ̡̅̍ͅ ͇͍̜ͯ̏ͫ͘W̴̼̝̊̓̔ͥ͆ͩ̚̚͢ạ̟͍̌ͭ̇ͧ̿̓̽ͣl̓ͤͧ҉̴̯͚̥͉͙͍͈͔l̓͟҉̣̣̦̝͔̺.̢͇̘͖̟͎̬̹͔̆ͫ̈́ͬ͛͌ͣ̎̅͘͝ ̼̗̩̼̹̦͎̆͆̇ͬ͗̊̒̀̀Z̸̬̽̉ͯ͒ͣ̈́͆͌A̸̠̖̙͎̻̯̤̮ͩͥ͋͌̒ͪͣͬ̃͟L̸͎̪̣̞̦ͯ̄̎̀̆̏G̜̠̝ͬ͒ͧ͆ͦͭ͒̚ͅO͚̘̩͍̬̱͌̓̎̈́̊̉̽!̛̠̜͙̰͎̻ͪ

    bug 
    opened by i42output 1
  • Refactor glyphs

    Refactor glyphs

    Create font token (uint16_t) concept. Store font tokens in glyphs allowing removal of explicit font fallback information in glyphs. Investigate possibility of moving even further down the flyweight pattern road.

    enhancement 
    opened by i42output 1
Owner
i42 Software
i42 Software
A cross-platform,lightweight,scalable game server framework written in C++, and support Lua Script

hive Distributed game server framework based on CPP 17 && LUA 5.4 框架(hive)+逻辑(server) 支持跨平台开发(windows,linux,mac) oop模式的lua开发,支持lua热更新 protobuf协议 pbc修改

toney 82 Jan 1, 2023
ToPS is an objected-oriented framework implemented using C++ that facilitates the integration of probabilistic models for sequences over a user defined alphabet

ToPS is an objected-oriented framework implemented using C++ that facilitates the integration of probabilistic models for sequences over a user defined alphabet

Andre Yoshiaki Kashiwabara 34 Aug 2, 2022
A free and open-source cross-platform application to control your Philips hue compatible lights💡

?? OpenHue ?? A cross platform application to control your Philips hue compatible lights. licensed under the gpl 3.0 license. Currently in super early

BOB450 4 Dec 28, 2022
KeePassXC is a cross-platform community-driven port of the Windows application “Keepass Password Safe”.

KeePassXC KeePassXC is a modern, secure, and open-source password manager that stores and manages your most sensitive information. You can run KeePass

KeePassXC 14.7k Jan 2, 2023
The Leap Motion cross-format, cross-platform declarative serialization library

Introduction to LeapSerial LeapSerial is a cross-format, declarative, serialization and deserialization library written and maintained by Leap Motion.

Leap Motion (Ultraleap) 15 Jan 17, 2022
A cross platform shader language with multi-threaded offline compilation or platform shader source code generation

A cross platform shader language with multi-threaded offline compilation or platform shader source code generation. Output json reflection info and c++ header with your shaders structs, fx-like techniques and compile time branch evaluation via (uber-shader) "permutations".

Alex Dixon 286 Dec 14, 2022
Appupdater is a C++ cross-platform framework to update desktop software (gitlab mirror)

appupdater is a C++ cross-platform framework to update desktop software. How it works Framework checks the URL you specified for info about versions a

Ronzhin Mikhail 1 Jan 8, 2022
A framework for building Mobile cross-platform UI

Weex A framework for building Mobile cross-platform UI. Distribution Support Android 4.1 (API 16), iOS 9.0+ and WebKit 534.30+. platform status Androi

Alibaba 18k Jan 9, 2023
A modern port of Turbo Vision 2.0, the classical framework for text-based user interfaces. Now cross-platform and with Unicode support.

Turbo Vision A modern port of Turbo Vision 2.0, the classical framework for text-based user interfaces. Now cross-platform and with Unicode support. I

null 1.4k Dec 31, 2022
Bond is a cross-platform framework for working with schematized data

Bond is a cross-platform framework for working with schematized data. It supports cross-language de/serialization and powerful generic mechanisms for efficiently manipulating data. Bond is broadly used at Microsoft in high scale services.

Microsoft 2.5k Jan 6, 2023
A cross-platform framework for developing spatial audio algorithms and software in C/C++

git: https://github.com/leomccormack/Spatial_Audio_Framework doxygen: https://leomccormack.github.io/Spatial_Audio_Framework/ About The Spatial_Audio_

Leo McCormack 396 Dec 23, 2022
Example-application - Example out-of-tree application that is also a module

Zephyr Example Application This repository contains a Zephyr example application. The main purpose of this repository is to serve as a reference on ho

Zephyr Project 82 Dec 13, 2022
The Vulkan Profiles Tools are a collection of tools delivered with the Vulkan SDK for Vulkan application developers to leverage Vulkan Profiles while developing a Vulkan application

Copyright © 2021-2022 LunarG, Inc. Vulkan Profiles Tools (BETA) The Vulkan Profiles Tools are a collection of tools delivered with the Vulkan SDK for

The Khronos Group 73 Dec 25, 2022
Cross-platform sandbox RPG game written in C++ with OpenGL and SDL2.

Forradia test Forradia is a cross-platform sandbox survival/RPG game written in C++ with OpenGL and SDL2. The engine loads 3D models in Wavefront-form

Andreas Åkerberg 7 Nov 9, 2022
Loop is an object oriented programming language

Loop Loop is an object oriented programming language. How do I build and run loop? Make sure, you installed the requirements for clang and make: Debia

Loop 24 Aug 9, 2021
A hobby and performance-oriented Linux® distribution that provides aesthetics and practical functionality.

Heiwa/Linux A hobby and performance-oriented Linux® distribution that provides aesthetics and practical functionality.

Heiwa/Linux 26 Apr 29, 2022
Garry's Mod privacy-oriented anticheat module for Simple-Roleplay.

Simple-Anticheat Garry's Mod privacy-oriented anticheat module for Simple-Roleplay. About privacy We will never: Transmit the content of your files to

Simple Roleplay 2 Sep 19, 2021
Computer room reservation system(Object oriented programming)

Computer-room-reservation-system Computer room reservation system(Object oriented programming) 首先进入登录界面,可选登录身份有: 学生代表 老师 管理员 退出 每个身份都需要进行验证后,进入子菜单 学生需

life_geometry 2 Jan 1, 2022
American fuzzy lop - a security-oriented fuzzer

american fuzzy lop Originally developed by Michal Zalewski [email protected]. See QuickStartGuide.txt if you don't have time to read this file. 1) Ch

Google 3k Dec 30, 2022