{"id":13532443,"url":"https://github.com/EQMG/Acid","last_synced_at":"2025-04-01T20:32:11.075Z","repository":{"id":37390825,"uuid":"96174151","full_name":"EQMG/Acid","owner":"EQMG","description":"A high speed C++17 Vulkan game engine","archived":false,"fork":false,"pushed_at":"2023-09-21T04:41:02.000Z","size":177405,"stargazers_count":1835,"open_issues_count":18,"forks_count":161,"subscribers_count":82,"default_branch":"master","last_synced_at":"2025-03-31T16:11:27.607Z","etag":null,"topics":["3d-engine","c-plus-plus","cpp17","cross-platform","game-development","game-engine","gles","gpu","graphics-library","open-source","renderer","vulkan","vulkan-engine","vulkan-game-engine"],"latest_commit_sha":null,"homepage":"https://equilibrium.games","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EQMG.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"mattparks","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":"https://www.paypal.me/mattparks5855"}},"created_at":"2017-07-04T04:07:10.000Z","updated_at":"2025-03-28T05:43:04.000Z","dependencies_parsed_at":"2024-08-01T07:43:47.770Z","dependency_job_id":null,"html_url":"https://github.com/EQMG/Acid","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EQMG%2FAcid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EQMG%2FAcid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EQMG%2FAcid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EQMG%2FAcid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EQMG","download_url":"https://codeload.github.com/EQMG/Acid/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246709923,"owners_count":20821297,"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","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":["3d-engine","c-plus-plus","cpp17","cross-platform","game-development","game-engine","gles","gpu","graphics-library","open-source","renderer","vulkan","vulkan-engine","vulkan-game-engine"],"created_at":"2024-08-01T07:01:10.998Z","updated_at":"2025-04-01T20:32:11.066Z","avatar_url":"https://github.com/EQMG.png","language":"C++","funding_links":["https://github.com/sponsors/mattparks","https://www.paypal.me/mattparks5855"],"categories":["Game Engines","Engines","Libraries"],"sub_categories":["Data Management","C++"],"readme":"\u003cimg src=\"Documents/Acid_03.png\" alt=\"Acid\" height=\"130px\"\u003e\n\n[![Documentation](https://img.shields.io/badge/documentation-master-brightgreen.svg)](https://equilibrium.games/Acid/annotated.html)\n[![Linux Clang](https://github.com/EQMG/Acid/workflows/linux_clang/badge.svg)](https://github.com/EQMG/Acid/actions?query=workflow%linux_clang)\n[![Linux GCC](https://github.com/EQMG/Acid/workflows/linux_gcc/badge.svg)](https://github.com/EQMG/Acid/actions?query=workflow%linux_gcc)\n[![Windows MSVC](https://github.com/EQMG/Acid/workflows/windows_msvc/badge.svg)](https://github.com/EQMG/Acid/actions?query=workflow%3Awindows_msvc)\n[![macOS Clang](https://github.com/EQMG/Acid/workflows/macos_clang/badge.svg)](https://github.com/EQMG/Acid/actions?query=workflow%macos_clang)\n\nAcid is an open-source, cross-platform game engine written in modern C++17 and structured to be fast, simple, and extremely modular.\n\nVulkan is the sole graphics API, Vulkan can be accessed in apps with the provided Acid rendering pipeline. Metal is supported through [MoltenVK](https://github.com/KhronosGroup/MoltenVK); eventually, DirectX will be supported in a similar way.\n\nThis project is being worked on part-time by a single developer, this is under heavy development, expect bugs, API changes, and plenty of missing features.\n\n## Features\n * Multiplatform (Windows, Linux, MacOS, 32bit and 64bit)\n * Multithreaded command buffers and thread safety\n * On the fly GLSL to SPIR-V compilation and reflection\n * Deferred physically based rendering (PBR)\n * Networking (HTTP, FTP, UDP, TCP)\n * Object serialization (JSON, XML)\n * Resource management using serialization\n * Event delegate callbacks with scoped functions\n * Bullet physics\n * Entity component system\n * Particle effect systems\n * File multi-path searching, and packaging\n * UI constraints system, and MSDF font rendering\n * Audio systems (flac, mp3, ogg, opus, wave)\n * Shadow mapping\n * Post effects pipeline (lensflare, glow, blur, SSAO, ...)\n * Model file loading (obj, glTF 2.0)\n * Animations loading (Collada)\n * Image file loading (png, jpeg, dng, tiff, OpenEXR, bmp, dds, ppm, tga)\n\n# Code Snippets\n```cpp\n// Imports a 2D texture using nearest filtering.\nauto guiBlack = Image2d::Create(\"Guis/Black.png\", VK_FILTER_NEAREST);\n\n// Imports a 3D cubemap (face names defined in Cubemap.cpp).\nauto skyboxSnowy = ImageCube::Create(\"Objects/SkyboxSnowy\", \".png\");\n\n// Imports a OBJ model.\nauto dragon = ObjModel::Create(\"Objects/Testing/ModelDragon.obj\");\n\n// Creates a sphere model with 20 latitude and longitude bands with a radius of 1.\nauto sphere = SphereModel::Create(20, 20, 1.0f);\n\n// Plays a 3D sound (sound buffer resource internally managed), at half volume.\nSound jump(\"Sounds/Jump.ogg\", Audio::Type::Effect, false, true, 0.5f);\n\n// Loads a entity from a prefab file.\nauto playerObject = GetStructure()-\u003eCreateEntity(\"Objects/Player/Player.json\");\nplayerObject-\u003eAddComponent\u003cTransform\u003e();\n\n// Creates a entity in code.\nauto sphere = GetStructure()-\u003eCreateEntity();\nsphere-\u003eAddComponent\u003cTransform\u003e(Vector3f(6.7f, 6.7f, -8.0f), Vector3f(0.0f, Maths::Radians(180.0f), 0.0f), Vector3f(3.0f));\nsphere-\u003eAddComponent\u003cMesh\u003e(SphereModel::Create(20, 20, 1.0f), // This will used the sphere buffers created earlier.\n\tstd::make_unique\u003cDefaultMaterial\u003e(Colour::White, Image2d::Create(\"Objects/Testing/Albedo.png\"), 0.0f, 0.5f,\n\t\tImage2d::Create(\"Objects/Testing/Material.png\"), Image2d::Create(\"Objects/Testing/Normal.png\")));\nsphere-\u003eAddComponent\u003cRigidbody\u003e(std::make_unique\u003cSphereCollider\u003e(), 2.0f); // Will be created weighing 2 units.\n\n// Vector maths.\nVector2f a(3.0f, -7.2f);\nVector2f b(-1.74f, 15.4f);\nVector2f c = a * b;\n// Distance between the two points.\nfloat distance = a.Distance(b);\n// Right shift of the x and y bits by 1.\nVector2i rightShift = Vector2i(5, 9) \u003e\u003e 1;\n\n// Split a string by spaces.\nstd::string stringSource = \"Hello world!\";\nstd::vector\u003cstd::string\u003e stringSplit = String::Split(stringSource, ' ');\n\n// Will run a lambda on window resize, and when this object is deleted the lambda is removed.\nWindow::Get()-\u003eOnSize().connect([](Vector2ui size) {\n\tLog::Out(\"Hello world: \", size, '\\n');\n});\n\n// Time addition.\nTime dateTime = 4h + 2min + 11s + 9ms + 1us + 4ns;\n\n// Calls the function once after 150 milliseconds.\nTimers::Get()-\u003eOnce([]() {\n\tLog::Out(\"Timer Once After\\n\");\n}, 150ms);\n// Calls the function every 4 seconds. \nTimers::Get()-\u003eEvery([]() {\n\tLog::Out(\"Timer Every Tick\\n\");\n}, 4s);\n// Calls the function every 7 seconds 3 times.\nTimers::Get()-\u003eRepeat([]() {\n\tstatic uint32_t i = 0;\n\tLog::Out(\"Timer Repeat Tick #\", i, '\\n');\n\ti++;\n}, 7s, 3);\n```\n\n## Screenshots\n\u003cimg src=\"Documents/Screenshot1.png\" alt=\"Acid\" width=\"600px\"\u003e\n\n\u003cimg src=\"Documents/Screenshot2.png\" alt=\"Acid\" width=\"600px\"\u003e\n\n\u003cimg src=\"Documents/Screenshot3.png\" alt=\"Acid\" width=\"600px\"\u003e\n\n\u003cimg src=\"Documents/Screenshot4.png\" alt=\"Acid\" width=\"600px\"\u003e\n\n\u003cimg src=\"Documents/Screenshot5.png\" alt=\"Acid\" width=\"600px\"\u003e\n\n## Compiling\nAll platforms depend on [CMake](https://cmake.org/download), 3.11.0 or higher, to generate IDE/make files.\n\nCMake options (default ON):\n* `BUILD_TESTS`\n* `ACID_INSTALL_EXAMPLES`\n* `ACID_INSTALL_RESOURCES`  \n\nIf you installed Acid using only system libs, then `find_package(Acid)` will work from CMake. Versioning is also supported.  \nWhen using `find_package(Acid)` the imported target `Acid::Acid` will be created.  \nThe `ACID_RESOURCES_DIR` variable will also be available, which will point to the on-disk location of `Acid/Resources` (if installed).\n\n[Python 3](https://www.python.org/downloads/), [Vulkan SDK](https://www.lunarg.com/vulkan-sdk/), [OpenAL](https://www.openal.org/downloads/), and [OpenAL SDK](https://openal-soft.org/#download) are required to develop Acid.\n\nMake sure you have environment variables `VULKAN_SDK` and `OPENALDIR` set to the paths you have Vulkan and OpenAL installed into.\n\nEnsure you are using a compiler with full C++17 support, on Windows it is recommended that you use MSVC or [MinGW w64](https://sourceforge.net/projects/mingw-w64/?source=navbar).\n\nIf using Visual Studio it must be 2019 or later ([see why 2015 is currently broken](https://stackoverflow.com/questions/49569026/c17-header-only-class-static-variable-errors)). Use the Visual Studio installer and select both \"Desktop development with C++\" and \"Windows SDK\" if they are not already installed. Then on Visual Studio Acid can be opened as a CMake workspace folder.\n\nOn Linux Acid requires `xorg-dev`, `libopenal1`, and `libvulkan1` to be installed. Read about how to setup [Vulkan on Linux](https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html) so a Vulkan SDK is found.\n\nSetup on MacOS is similar to the setup on Linux, a compiler that supports C++17 is required, such as XCode 10.0.\n\n## Contributing\nYou can contribute to Acid in any way you want, we are always looking for help. You can learn about Acids code style from the [GUIDELINES.md](.github/GUIDELINES.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEQMG%2FAcid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FEQMG%2FAcid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEQMG%2FAcid/lists"}