🚀 Making multi-player gamedev simpler since 2017

Overview
librg
build status version discord license

Making multi-player gamedev simpler since 2017. Single-header cross-platform world replication in pure C99.
Built with love using zpl • Brought to you by @inlife, @zaklaus and other contributors

Introduction

librg is a lightweight library that serves as a middleware between data-transferring libraries (networking, file-streaming, etc.) and core application/game logic.

Main responsibilities of the library include:

  • entity tracking (tracks which entity belongs to what world, and what states do they have)
  • owner tracking (tracks which participant owns what entity)
  • area of interest management (controls what can and cannot be seen a participant)
  • world replication (re-creates a limited representation in a destination world of what is considered visible to a participant in the source world)

The library was born to solve complexities of setting up and managing the flow of multi-player games and dedicated game servers. It came a long way of stripping out things that were non-essential, slowly sculpting into its current form, which you are able to see and use today.

Features

  • cross-platform support
  • lightweight, single-header
  • supports 2d/3d worlds of various sizes
  • compile- and run-time configurable
  • written in C99 (portability reasons)
  • no external dependencies
  • built-in unit test coverage

F.A.Q.

  1. Is this a networking library?

    • Not really, no. It is intended to be used with netwoking in mind, but it does not have any networking capabilities on its own.
  2. Can I use any networking library with it?

    • Yes. All you need is an ability to read data to and from the buffer, and most libraries do support that. Theoretically it can be anything as low level as pure UDP, and up to Websocket/WebRTC.
  3. The repository contains a bunch of *.h and *.c files, and yet you suggest it is a single-header library, how is that possible?

    • The library is spread into multiple files so it is easier to work with it while developing, however each time a new release is created, a "bundled" version of the header file is created and pushed directly to the releases page.
  4. Does librg offer an entity system?

    • No, the library does not manage nor actually create its own entities, it rather expects you to provide your own entity/object handle to attach some internal data onto it, which in context of the library is called "tracking".
  5. How do I pack data, do you provide methods for that?

    • No, the library does not provide any data-packing/serialization methods. It's recommended you use some existing library for that (protobuf, flatbuffers, msgpack, etc.), or make your own implementation.
  6. I see you mention chunks, does it mean my game/app should be chunk-based?

    • No. Chunks are only used internally, to artificially divide the space of the world on statically sized squares/cubes so that querying would work efficiently. Even if your game does use chunks, their amount/sizes/offsets are not required to much and be the same.

Documentation

To read detailed documentation about the library, see examples and quick start guide, please visit our documentation page.

Additionally you can check code/apps folder for actual code examples.

Illustration

Here is a simple illustration that attempts to describe how the library works on a simple 2d world of 4x4 chunks. For a 3d world of bigger size everything would work in a very similar way, just in 3 dimensions.

librg illustration
(click on the image to view full-size)

Migration

If you've used the library before version v6.0.0, it is recommended to read the migration guide located here.

Support

We are testing the library for various platforms. This table provides some sort of description for compatibility. If you have tested it, and your result is different from the one in the table, please feel free to describe the issue in the issues.

Platform / Result Windows macOS Linux iOS Android Raspberry Pi OpenBSD FreeBSD Emscripten
❔ clang clang gcc, clang gcc, clang gcc, clang
✅ msvc, mingw gcc, clang gcc, clang emcc

Legend:

  • ❔ - Library was not tested on this platform/compiler yet
  • ✅ - Library successfully compiles and all tests are executed properly

Development

If you wish to contribute, add new feature, optimizations, or overall improvements, here are the instructions on how to do that:

  1. Clone the repo, f.e.: git clone https://github.com/zpl-c/librg.git
  2. Run make to build all projects, and verify everything works
  3. Develop a feature, add tests for it in code/tests/
  4. And eventually run make test again to check

In case you are working from Windows, and/or are not able to use make, you can also use built-in cmake config file to generate a Visual Studio solution, to do that:

  1. mkdir build
  2. cd build
  3. cmake ../misc -G"Visual Studio 16 2019" (or any configuration you have)
  4. cmake --open . (opens VS with the solution)
  5. And repeat steps from above
Comments
  • Chunk limit issue.

    Chunk limit issue.

    Hi, I'm testing librg in a huge world and I need relatively small chunks, so I'm currently using 1024x1024x1 chunks with a size of 10 x 10 x UINT16_MAX. The problem comes when entities mess around chunks above 2^15, a chunk is supposed to be up to 2^63 but for some reason, events, world_write etc won't work if the entities' chunks are above 2^15. I checked the code to see if there was any cast somewhere messing with the int64_t but couldn't find it, any idea why this could be happening?

    opened by Tonyx97 7
  • How to properly install and add this lib to C++ project?

    How to properly install and add this lib to C++ project?

    The documentation says just to include "librg.h". But when I do just that and add this to my c++ project I got error:

    librg/code/source/query.c: In function ‘int32_t librg_world_fetch_chunk(librg_world*, librg_chunk, int64_t*, size_t*)’:
    error: taking address of temporary array
        39 |    return librg_world_fetch_chunkarray(world, (librg_chunk[]){chunk}, 1, entity_ids, entity_amount);
          |                                                                                                  ^~~~~~~
    

    What I need to do to inlude library in c++ project? Maybe somehow link library like -lrg. Maybe I need add include some directories -I./librg/code. Or maybe I need to install somehow compiled lib. I use Ubuntu linux.

    bug 
    opened by JustVic 7
  • librg_network_stop on server doesn't trigger disconnect event on clients

    librg_network_stop on server doesn't trigger disconnect event on clients

    Hello,

    I could be missing something, but when I shutdown my server, none of the connected clients receive any event; they all just timeout. Looking at librg_network_stop, there doesn't appear to be anything to handle currently connected clients. They just get deleted with the zpl table.

    Would be happy to contribute here, but not sure if I am missing something.

    Thanks.

    bug 
    opened by eddiejames 7
  • Your are using eNet code which does not exist

    Your are using eNet code which does not exist

    This not exist in eNet code (ENET_EVENT_TYPE_DISCONNECT_TIMEOUT)

    case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT: {                                                                                                                                                                                 
     
    

    and this function :

    enet_packet_create_offset
    

    using latest version of eNet from github

    opened by meiry 5
  • Disconnected client entities trigger entity update once

    Disconnected client entities trigger entity update once

    When a client disconnects (or timeouts, doesn't matter) from the server there is one entity update event triggered after the disconnect event.

    ...
    Update entity 1 for client 1773685128
    Update entity 0 for client 647576079
    Update entity 1 for client 1773685128
    Update entity 0 for client 647576079
    Update entity 1 for client 1773685128
    Update entity 0 for client 647576079
    Update entity 1 for client 1773685128
    Update entity 0 for client 647576079
    client 647576079 disconnected
    Update entity 1 for client 1773685128
    Update entity 0 for client 647576079
    
    opened by markatk 4
  • How to generate different ID for different clients?

    How to generate different ID for different clients?

    Just a question. In example-enet.c server and all clients in one file and ID's generation is easy:

            for (int i = 0; i < MAX_CLIENTS; ++i) {
                client_update(i, clients[i]);
            }
    

    in that case i is ID. But in real case clients on different computers don't know about each other and therefore can't generate id's by itself. But to recieve(read) something or to send(write) something it needs an ID as I understand.

       librg_world_read(
            world,
            ID,
            (char *)event.packet->data,
            event.packet->dataLength,
            NULL
        );
    
        librg_world_write(
            world,
            ID,
            buffer,
            &buffer_length,
            NULL
        );
    

    I assume It's somehow must be generation on server. How to generate different ID for different clients? Maybe It's silly question and I don't understand something...

    opened by JustVic 3
  • Noob question: How does a single header library not cause mutiple symbol definitions?

    Noob question: How does a single header library not cause mutiple symbol definitions?

    Please excuse my naivety but I've never encountered single-header libraries till now.

    I think this is a very nice library but I am rather confused about how I would go about using it.

    I understand that if all the functions are 'inline' then there really isn't any true symbol definitions that could collide when linking multiple object files... But looking at the source of librg I am seeing functions which do not have any inline keyword specified anywhere, for example:

    u64 librg_event_add(librg_ctx *ctx, u64 id, librg_event_cb callback) {
            librg_assert(ctx);
            librg_event_block *block = librg_event_pool_get(&ctx->events, id);
    
            if (!block) {
                librg_event_block arr;
                zpl_array_init(arr, ctx->allocator);
                librg_event_pool_set(&ctx->events, id, arr);
                block = librg_event_pool_get(&ctx->events, id);
            }
    
            u64 offset = zpl_array_count(block);
            zpl_array_append(*block, callback);
            return offset;
    }
    

    I assume that there must be some non-conventional use of this header necessary to get it working otherwise if I were to include this file in multiple C files and then link them together I would get linker errors for multiple symbol definitions with the same name, wouldn't I?

    Sorry if this is the wrong place to ask this question but I wasn't sure where else would be appropriate.

    Also, why the #if 1 statements wrapping sections of code? Those seem pointless and I can't grasp what their purpose would be, other than to manually toggle the compilation of specific sections... But wouldn't that be better achieved by using actual #ifdef SOME_MACRO switches where all the switches can be listed at the top of the file for ease of toggling?

    opened by Dan782 3
  • Ownership information in reader OnCreate event

    Ownership information in reader OnCreate event

    In clients librg_event_owner_get(w, e) in client_read_create or client_read_update owner_id always the same for all entities_id. I tested it in example-enet.c. Maybe it work like expected, but in that case client can't get real owner of entity... Maybe it's more related with enet than librg.

    feature 
    opened by JustVic 2
  • Can't get position data when entity created.

    Can't get position data when entity created.

    Can't get position data when entity created. In example example-enet.c I try to get position in client_read_create function but librg_event_size_get always returns actual_length 0.

    librg_event_set(world, LIBRG_READ_CREATE, client_read_create);

    int32_t client_read_create(librg_world *w, librg_event *e) {
        int64_t owner_id = librg_event_owner_get(w, e);
        int64_t entity_id = librg_event_entity_get(w, e);
        printf("[client] An entity %d was created for owner: %d\n", (int)entity_id, (int)owner_id);
       
        size_t actual_length = librg_event_size_get(w, e);
        printf("[client] actual_length = %zu", actual_length);
        if (actual_length != sizeof(vec3)) return 0;
       
        char *buffer = librg_event_buffer_get(w, e);
        
        vec3 position = {0};
        memcpy(&position, buffer, actual_length);
    
        return 0;
    }
    
    
    opened by JustVic 2
  • Does not work using C++

    Does not work using C++

    I'd like to use this library in my C++ project but due to some conversions that are only valid in C it won't compile:

    ext/librg/librg.h|19756 col 20| error: cannot initialize a variable of type 'librg_world_t *' with an rvalue of type 'void *'
    ||     librg_world_t *wld = LIBRG_MEM_ALLOC(sizeof(librg_world_t));
    ||                    ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ext/librg/librg.h|19918 col 45| error: cannot initialize return object of type 'librg_event_type' with an rvalue of type 'int'
    ||     LIBRG_ASSERT(event); if (!event) return LIBRG_EVENT_INVALID;
    ||                                             ^~~~~~~~~~~~~~~~~~~
    ext/librg/librg.h|2177 col 41| note: expanded from macro 'LIBRG_EVENT_INVALID'
    || #define LIBRG_EVENT_INVALID             (-0x0006)
    ||                                         ^~~~~~~~~
    ext/librg/librg.h|19921 col 12| error: cannot initialize return object of type 'librg_event_type' with an lvalue of type 'uint8_t' (aka 'unsigned char')
    ||     return e->type;
    ||            ^~~~~~~
    ext/librg/librg.h|20656 col 14| error: cannot initialize a variable of type 'int64_t *' (aka 'long *') with an rvalue of type 'void *'
    ||     int64_t *results = LIBRG_MEM_ALLOC(LIBRG_WORLDWRITE_MAXQUERY * sizeof(int64_t));
    ||              ^         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    || 4 errors generated.
    
    opened by sarahkittyy 2
  • Possible WebRTC support?

    Possible WebRTC support?

    A bit of a big thing, but if it can be implemented it will truely make librg cross-platform.

    There is the Intel WebRTC Datachannel Microstack, a C99 little library which is conveniently also licensed under Apache 2.0: https://github.com/HumbleNet/webrtc?files=1

    And Humblenet has an example of a shared ABI between it and browser's RTC implementation: https://github.com/HumbleNet/HumbleNet/blob/master/src/humblenet/src/libwebrtc.h

    It's also a little similar to Enet with reliable/unreliable packets and peer to peer nature.

    opened by LiHe93 2
Releases(v7.1.1)
  • v7.1.1(Sep 18, 2022)

  • v7.1.0(Sep 18, 2022)

    • code: changed the query table allocation method (215c12f)
    • code: updated query performance example stats (cf79300)
    • code: added entity-owner pairing boosting speed of world_query (ecfb521)
    • Merge branch 'master' of github.com:zpl-c/librg (4bff059)
    • code: switched to no-copy, direct write query results (3f2cbb4)
    • code: minor code re-organizations (ccfb705)
    • code: added app for testing query performance (b76ba24)
    • misc: updated makefile to support selective app building (fa90cc9)
    • code: updated zpl (9987e50)
    Source code(tar.gz)
    Source code(zip)
    librg.h(889.37 KB)
  • v7.0.3(Sep 13, 2022)

  • v7.0.2(Sep 9, 2022)

  • v7.0.1(Jul 30, 2022)

    • code: added ability to read the owner immediately on creation event (cdbae09)
    • Merge branch 'master' of github.com:zpl-c/librg (0c2ecc9)
    • apps: updated reader example to showcase owner (0b7cd9e)
    • Update README.md (48d8923)
    • Update README.md (c4d9912)
    • code: fixed minor warnings, and win-specific error (e88e604)
    • code: added fix for #39 c99-only feature (b0af4ec)
    Source code(tar.gz)
    Source code(zip)
    librg.h(881.16 KB)
  • v7.0.0(Jul 30, 2022)

    • test: added test case for 0 radius entity check (75e6160)
    • code: updated librg version history (ef6cd5b)
    • deps: updated the enet version (4c249f6)
    • test: added a test case for the border overflow (51ae504)
    • code: fixes to radius checks within query (ae6e69b)
    • code: applied fixes for the 2d/3d chunkpos calculation (630f09e)
    • code: added new rules to linear offset checking + tests (052f943)
    • deps: updated zpl version (76746a1)
    • docs: updated docs accordingly to new radius system (4a71d0b)
    • code: updated example apps to support new radius system (0f2296d)
    • code: updated tests for new radius support (06ca629)
    • code: added radius to query and write, deprecated entity radius (99150ee)
    • code: switched back to zpl nano (f4db15a)
    • code: updated zpl ver (443ecab)
    • ci: updated releaser (142c3f0)
    Source code(tar.gz)
    Source code(zip)
    librg.h(880.80 KB)
  • v6.0.12(Apr 22, 2021)

    • code: cpp casting/type fixes (a62979c)
    • Merge branch 'master' of github.com:zpl-c/librg (072d48a)
    • test: update tester (6c0b0b6)
    • code: switched ZPL_NANO->ZPL_CORE (reduced lib usage) (e96ce05)
    • Remove atomic (b192c0c)
    Source code(tar.gz)
    Source code(zip)
    librg.h(801.33 KB)
  • v6.0.11(Jan 15, 2021)

  • v6.0.10(Jan 15, 2021)

  • v6.0.9(Jan 15, 2021)

  • v6.0.8(Jan 14, 2021)

  • v6.0.7(Jan 13, 2021)

    • code: added a null-ptr check to librg_world_read (21af213)
    • code: removed unused commented code (b426f35)
    • meta: exluding vendors from codeql (bdb5642)
    • meta: added codeql config (b97d219)
    • meta: added codeql to repo (04c7b4e)
    • meta: fixes for example descriptions and comments (19cfb37)
    • docs: fixes to some linking issues on entity page (163d09e)
    Source code(tar.gz)
    Source code(zip)
    librg.h(793.78 KB)
  • v6.0.6(Jan 10, 2021)

  • v6.0.5(Oct 6, 2020)

  • v6.0.4(Jul 28, 2020)

  • v6.0.3(Jun 27, 2020)

    • code: minor cleanups (c409484)
    • code: minor code change (ab425ab)
    • ci: changed driver (fd5a05a)
    • ci: fixes to testing flow (b60748d)
    • code: added typings for the enums/structs (5f240bb)
    • code: fixed event size type (f710790)
    Source code(tar.gz)
    Source code(zip)
    librg.h(795.22 KB)
  • v6.0.2(Jun 18, 2020)

    • Code: added librg_version method, fixed amt in fetch methods (e4e668d)
    • Docs: typo fix (301f76f)
    • Docs: new readme question (a0284d1)
    • Docs: lining fix (716af79)
    • Docs: changed format (1b7d010)
    • Docs: fixed newline (1b09395)
    • Docs: updated readme, added picture (a55d3ec)
    • Docs: minore styling changes (a06e25c)
    • Merge branch 'master' of github.com:zpl-c/librg (90c8ee2)
    • added another example (5f2c9b9)
    • Meta: Update texts (ca82416)
    • Code: Ignore gtags (b86a948)
    • Meta: Update FAQ (bf48530)
    • Docs: minor changes (1ec89dd)
    • Meta: Update motto (7b96485)
    • CI: Update workflow (3d1cd66)
    • Merge branch 'master' of github.com:zpl-c/librg (dbe3a62)
    • Docs: added coverage for visibility (819d550)
    • Meta: Small wording change (a451877)
    • Merge branch 'master' of github.com:zpl-c/librg (6dcca3d)
    • CI: Add tester workflow (4745b73)
    • CI: removed travis (37f9537)
    • Meta: readme fix (68c8cf2)
    Source code(tar.gz)
    Source code(zip)
    librg.h(795.19 KB)
  • v6.0.1(Jun 5, 2020)

  • v6.0.0(Jun 5, 2020)

    • added enet demo (90c63d6)
    • fix to doc (a6f0af9)
    • more migration stuff (da24c51)
    • migration info (a3e612e)
    • updated readme (f1f2b20)
    • Merge branch 'next' (4e19b72)
    • minor readme changes (d2e428f)
    • additional readme updates (d1e4777)
    • rdm upd (d4ea785)
    • upds (3a2de4c)
    • additional docs (5d20b2a)
    • added more docs (76f4448)
    • doc upd (0e6db22)
    • added 2d realpos chunk id test (e6857bd)
    • Create tests.yml (48b18f9)
    Source code(tar.gz)
    Source code(zip)
    librg.h(794.07 KB)
  • v6.0.0-pre.0(Jun 3, 2020)

    • fixed test and calculation (186f769)
    • updated write signature, tests (1d038aa)
    • added emscripten support (ec65d0a)
    • fixes and improvements, added docs folder (28befbd)
    • disabled behavior methods (b9027f7)
    • added entity visibility feature (229d670)
    • cleanup (959d945)
    • zpl upd (b03cff9)
    • fix (cabdc3d)
    • zpl changes (5b2925d)
    • fixed impl linking (cfaf686)
    • upd ver, and added desc (f2e8465)
    • added default init for ch vars (212f297)
    • Create tests.yml (c0c7a6c)
    • minor fixes (1a2e449)
    • fixes for vs (9ccf662)
    • fixes for mingw (8d3a6d0)
    • some tests in main.c (64a58ce)
    • added tokenized update sequences (73e7f98)
    • added owner setting + tests (3156621)
    • added remove read (b4f78c5)
    • added read fn, tests for create/update (fb5e27b)
    • added remove segment (eaf657d)
    • minor changes and unit test upd (7feb768)
    • fix trav (3828d66)
    • added inv (2e7522a)
    • added entity create & update writing (cd524ca)
    • nice change (937decb)
    • upd2 (b3e0284)
    • upd (7f38326)
    • Travis: Fix tester (ae76875)
    • changed cmd (47996f6)
    • upd travis (56aa9b7)
    • updated testing suite (bb551bc)
    • additional changes (dcd0ab8)
    • added spherical checking (72545e5)
    • minor reorganazing (ab2d62c)
    • naming and structure changes (a14fcec)
    • new iteration (a4655ca)
    • refinements to the api 2 (2b531e8)
    • refinements to the api (8603bf4)
    • added a new iteration of the design (2a42f59)
    • added new api base (e7075fe)
    • Update README.md (8edc9c0)
    • Fix forced_inlinne issue (5fd86b7)
    Source code(tar.gz)
    Source code(zip)
    librg.h(793.18 KB)
  • v4.1.1(Jul 2, 2019)

    • Added compile-time 'features':
      • Ability to enable/disable some librg compile-time features
      • Entity igore tables are now optional, and can be disabled
      • Implmented simple optional Virtual world feature for entities
      • Implemented a feature to enable/disable octree culler (falls back to linear check)
      • Multiple features can be combined
    • Added 'generation' to entity control lists: Setting, removing and setting control to the same entity again with same owner will now distinct between old and new controllers, and messages still coming from old control generation will be rejected in favor of new ones.
    • Added guard to minimum sized packet in receive for both sides
    • Added spherical culler handler, and ability to do runtime switch (LIBRG_USE_RADIUS_CULLING)
    • Streamed entities are now going to be always returned in query for controlling peer
    • Fixed issue with host setting on the server side
    • Fixed nullptr crash on empty host string for client on connect
    • Removed experimental multithreading code
    Source code(tar.gz)
    Source code(zip)
    librg.dll(93.50 KB)
    librg.dylib(255.00 KB)
    librg.so(329.77 KB)
Owner
ZPL | Your C11 Powerkit
ZPL is a collection of single-file header-only libraries for C and C++.
ZPL | Your C11 Powerkit
FFVideo - an example FFmpeg lib, and wxWidgets Player with video filters and face detection

An example FFmpeg lib, and wxWidgets Player application with video filters and face detection, it is a no-audio video player intended for video experiments and developers learning how to code media applications.

Blake Senftner 20 Mar 26, 2022
A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input

GLFW Introduction GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan application development. It provides a simple, platf

GLFW 9.8k Nov 19, 2022
Open 3D Engine (O3DE) is an Apache 2.0-licensed multi-platform AAA Open 3D Engine

Open 3D Engine (O3DE) is an Apache 2.0-licensed multi-platform 3D engine that enables developers and content creators to build AAA games, cinema-quality 3D worlds, and high-fidelity simulations without any fees or commercial obligations.

O3DE 5.7k Nov 24, 2022
Bullet Physics SDK: real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine learning etc.

Bullet Physics SDK: real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine learning etc.

Bullet Physics SDK 10k Nov 24, 2022
A multi core friendly rigid body physics and collision detection library suitable for games and VR applications.

A multi core friendly rigid body physics and collision detection library suitable for games and VR applications.

null 2.4k Nov 22, 2022
Multi-Joint dynamics with Contact. A general purpose physics simulator.

Multi-Joint dynamics with Contact. A general purpose physics simulator.

DeepMind 5k Nov 26, 2022
🚀 Making multi-player gamedev simpler since 2017

Making multi-player gamedev simpler since 2017. Single-header cross-platform world replication in pure C99. Built with love using zpl • Brought to you

ZPL | Your C11 Powerkit 1k Nov 24, 2022
GAMEDEV - Lightweight crash reporter for Unreal Engine

Mayday Mayday is a lightweight crash reporter for Unreal Engine games that uploads the crash context and minidump to an HTTP(S) server of your choosin

Gwennaël Arbona 15 Jun 24, 2022
theora-player is an embeddable theora video player C++ library based on the libtheora sample. It has no audio support at this moment.

theora-player Description theora-player is an embeddable theora video player C++ library based on the libtheora sample. It has no audio support at thi

Fire Falcom 2 Jun 18, 2022
Xan's NFS Music Player - Custom music player replacement and a BASS library interface for NFS.

Xan's NFS Music Player This is a custom music player replacement and a BASS library interface for NFS. FEATURES Custom playlist generation - put any n

Lovro Pleše 15 Nov 23, 2022
Like libevent and libuv, libhv provides event-loop with non-blocking IO and timer, but simpler api and richer protocols.

中文版 Intro Like libevent, libev, and libuv, libhv provides event-loop with non-blocking IO and timer, but simpler api and richer protocols. Features cr

ithewei 4.9k Nov 25, 2022
Slides and other materials from CppCon 2017

CppCon 2017 Presentation Materials https://github.com/CppCon/CppCon2017 is the canonical location for presentations and code from CppCon 2017. For Spe

CppCon 1.7k Nov 16, 2022
Presentation Material for C++Now 2017

C++Now 2017 Presentations Slide Deck Guidelines for Speakers Tuesday, May 16 Paepcke Morning (9:00-10:30) Rust: Hack Without Fear!, Niko Matsakis (vid

null 459 Nov 17, 2022
Like libevent and libuv, libhv provides event-loop with non-blocking IO and timer, but simpler api and richer protocols.

中文版 Intro Like libevent, libev, and libuv, libhv provides event-loop with non-blocking IO and timer, but simpler api and richer protocols. Features cr

ithewei 4.9k Nov 22, 2022
Simpler ImGui Backend Implementation for VulkanHpp.

ImGui-VulkanHpp Simpler ImGui Backend Implementation for VulkanHpp.

takiyu 28 Nov 13, 2022
2017-2019 math projects

Project Mathematics All the projects Name Language Grade Year 101 Pong Python3 16.2/20 2017 102 Architect Python3 19.8/20 2017 103 Cipher C 17.2/20 20

Luis Rosario 12 Mar 1, 2022
A refactored Proof-of-concept originally developed in 2017 to print all function calls with their arguments data types and values using Ptrace during program execution.

print-function-args-debugger A refactored Proof-of-concept originally developed in 2017 to print all function calls with their arguments data types an

*finixbit 15 Jun 17, 2022
A simpler version of the infamous zero kb virus written in C++.

A simpler version of the infamous zero kb virus written in C++. A few years back I was struck by the 'zero kb' virus, and so i decide to write my own zero kb virus as an act of vengeance (

vincent laizer 3 Sep 19, 2021
Like feh, but better, faster, more image formats, simpler, more lightweight, animation support, and better UI

Like feh, but better, faster, more image formats, simpler, more lightweight, animation support, and better UI

martin 11 Oct 23, 2022
Source code from 068A, our 64k demo presented at Syntax 2017

068A source code dump This is a dump of the source code for the engine, graphics tool and player for 068A, our 64k demo released at Syntax 2017. It's

Monad 25 Nov 4, 2022