{"id":30743263,"url":"https://github.com/acgaudette/txtquad","last_synced_at":"2025-09-04T02:05:39.983Z","repository":{"id":45113553,"uuid":"284575614","full_name":"acgaudette/txtquad","owner":"acgaudette","description":"minimalist 3d quad renderer for games","archived":false,"fork":false,"pushed_at":"2022-09-27T16:30:52.000Z","size":210,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-08-23T15:52:08.263Z","etag":null,"topics":["c","font","gamedev","graphics","renderer","text","vulkan"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/acgaudette.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-03T01:32:59.000Z","updated_at":"2023-08-23T15:52:08.263Z","dependencies_parsed_at":"2023-01-18T16:28:20.079Z","dependency_job_id":null,"html_url":"https://github.com/acgaudette/txtquad","commit_stats":null,"previous_names":[],"tags_count":3,"template":null,"template_full_name":null,"purl":"pkg:github/acgaudette/txtquad","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acgaudette%2Ftxtquad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acgaudette%2Ftxtquad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acgaudette%2Ftxtquad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acgaudette%2Ftxtquad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/acgaudette","download_url":"https://codeload.github.com/acgaudette/txtquad/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acgaudette%2Ftxtquad/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273539317,"owners_count":25123499,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","font","gamedev","graphics","renderer","text","vulkan"],"created_at":"2025-09-04T02:05:39.030Z","updated_at":"2025-09-04T02:05:39.966Z","avatar_url":"https://github.com/acgaudette.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"txtquad is a simple vulkan renderer built to do one thing:\nrender \"game jam\" style 3D text in the most straightforward way possible.\n\n![](media/2bp.gif)\n\nSurprisingly, you can do a lot with just \"text\":\n\n![](media/jam13.gif)\n\ntxtquad supports a custom format that essentially boils down\nto a square, ASCII-indexed binary bitmap.\nThe font file is encoded as a pbm, and WYSIWYG.\n\nDoodling your own fonts is easy,\nas long as you're in the market for monospace.\nOr, you can draw sprites, and render those instead.\nThe font I made for the above gif\ncan be found [here](https://github.com/acgaudette/kufont-ascii).\n\n# Getting Started\n\n_The instructions below are for linux._\n_For macos and windows, see [PLATFORMS.md](PLATFORMS.md)._\n\n```\nDependencies:\n    libglfw.so    3.3.2\n    libvulkan.so  1.2.x\n```\n\nThis project uses clang, git LFS, and the ninja buildsystem.\nYou will additionally require the vulkan headers + libs, and glslc.\n\n1. ./bootstrap to download, build, and install glfw3 into ./ext\n   - This also grabs the font from the link above\n     and installs it into ./assets\n     if a font doesn't already exist at that location\n   - Additionally, this clones the headers\n     https://github.com/acgaudette/alg\n     and\n     https://github.com/acgaudette/acg\n     (previously in-tree dependencies)\n     into ./ext/include\n2. ./runex to build and launch ./bin/demos\n   - This will build ./bin/libtxtquad.so as a side effect\n   - Alternatively,\n     running \"ninja so\" in the root dir\n     will build the .so by itself\n\n# Configuration\n\n- Library settings can be found in ./config.h\n- See the $config var in ./build.ninja\n  to adjust compiler flags and switches\n  (the lib is compiled in debug mode by default)\n- Runtime configuration\n  is possible via the txt_cfg struct\n  (see below)\n\n# Usage\n\n- Link against libtxtquad.so in your app\n- Set up an assets directory\n  containing the font and the compiled shaders,\n  or just softlink the one from the repo (./assets)\n  - The default shaders are compiled into here along with the demos\n\n# API\n\n`txtquad_init(struct txt_cfg)`\n- Call this from your main function to boot up the engine\n- See the struct definition in ./txtquad.h\n  for more details regarding configuration\n\n`txtquad_start()`\n- Call this to pass control\n  from your app to the engine\n\n`txtquad_update(struct txt_frame, struct txt_buf*)`\n- Implement this callback,\n  it's called once per frame by the engine\n- Grab your animation data from the txt_frame\n- Write to the txt_buf* to render stuff\n  (it's just a pointer to a blob of static memory)\n\n# Notes\n\n- glfw is compiled statically into the binary by default\n- libtxtquad resolves user callback symbols at runtime via weak linking.\n  You _must_ implement txtquad_update(),\n  otherwise the lib will panic.\n- There is one example executable, but five demos, including a benchmark.\n  The demo selection can be controlled at compilation time by a define,\n  or the $demo var in ./build.ninja\n- See ./extras/ for useful txtquad extension code.\n\n# Using the input module\n\n- Include inp.h in your application's source\n- When compiling txtquad,\n  define INP_KEYS for keyboard, mouse, and gamepad\n  press/hold/release polling support,\n  and/or INP_TEXT for a text entry callback\n  - These defines are compiled into the binary by default\n    (see ./build.ninja)\n- See ./inp.h and ./examples for API usage\n  - You _must_ implement inp_ev_text()\n    if libtxtquad is compiled with INP_TEXT,\n    otherwise the lib will panic.\n- You will also need the glfw header as a dev dependency\n  in order to use the key/button macros\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facgaudette%2Ftxtquad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Facgaudette%2Ftxtquad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facgaudette%2Ftxtquad/lists"}