Giter VIP home page Giter VIP logo

acid's Introduction

Acid

Donate Build status Build Status

Acid is a high speed, cross-platform, game engine written in C++17. Features are broken down into modules, modules can be added or removed from Acid with ease.

Vulkan is used as the only rendering API, as a result Vulkan can be used directly in games, but should be avoided. Metal is supported through MoltenVK, eventually OpenGL and DirectX will be supported in a similar way.

Acid is licensed under MIT and is open to contributions, use the 'Compiling' section in the README.md to get started with Acid.

Links

Readme Read more

Documentation Autogen docs

Metrics Code metrics

Website Learn more

Trello Board

Features

This is a list of current features in Acid:

  • Multiplatform (32bit and 64bit)
  • On the fly GLSL to SPIR-V compiler
  • Modular rendering pipeline and compute
  • Deferred PBR rendering
  • Bullet physics
  • Networking (HTTP/FTP/UDP/TCP)
  • Frustum culling
  • Resource management
  • Event and tasks systems
  • Resource path searches, and packaging
  • GUI and font rendering
  • Particle effect systems
  • Audio and music
  • Skyboxes and fog
  • Shadow mapping
  • GameObjects and component system
  • Post effects (Lensflare, Glow, Blur, SSAO, ...)
  • Model file loading (OBJ)
  • Animations loading (COLLADA)
  • Image file loading (JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC)
  • GameObject prefab loading/saving (JSON, XML)
  • Value drivers, timers, vectors, and matrices
  • Flexible input classes
  • C# generated files (WIP)
  • Steam integration (WIP)

Dependencies

Acid uses the following libraries:

Code Snippets

// Imports a 2D texture.
auto guiBlack = Texture::Resource("Guis/Black.png");

// Imports a 3D cubemap.
auto skyboxSnowy = Cubemap::Resource("Objects/SkyboxSnowy", ".png");

// Imports a model.
auto dragon = ModelObj::Resource("Objects/Testing/ModelDragon.obj");

// Plays a 3D sound (sound buffer internally managed), at the origin, at half volume.
auto jump = Sound("Sounds/Jump.ogg", SOUND_TYPE_EFFECT, false, true, 0.5f);
jump.SetPosition(10.0f * Vector3::RIGHT);

// Imports a game object (pointer managed by scene after creation).
auto playerObject = new GameObject("Objects/Player/Player.json", Transform());

// Creates a game object.
auto sphere = new GameObject(Transform(Vector3(6.7f, 6.7f, -8.0f), Vector3::ZERO, 3.0f));
sphere->AddComponent<Mesh>(ShapeSphere::Resource(30, 30, 1.0f));
sphere->AddComponent<ShapeSphere>(2.0f);
sphere->AddComponent<Rigidbody>(2.0f);
sphere->AddComponent<MaterialDefault>(Colour::WHITE, Texture::Resource("Objects/Testing/Albedo.png"),
    0.0f, 0.0f, Texture::Resource("Objects/Testing/Material.png"), Texture::Resource("Objects/Testing/Normal.png"));
sphere->AddComponent<MeshRender>();

// Vector maths.
Vector2 a(3.0f, -7.2f);
Vector2 b(-1.74f, 15.4f);
Vector2 c = a * b;
float dist = a.Distance(b);

// Split a string by spaces.
std::string stringSource = "Hello world!";
std::vector<std::string> stringSplit = String::Split(stringSource, " ");

// Will run a lamdba after 5 seconds.
Events::Get()->AddEvent<EventTime>(Time::Seconds(5.0f), [&]() -> void
{
	Log::Out("Hello world: %f\n", Maths::Random(-1.0f, 1.0f));
}, false);

Screenshots

Acid

Acid

Acid

Acid

Compiling

Once Acid is cloned run git submodule update --init --recursive in the Acid directory to update the submodules. All platforms depend on CMake to generate IDE/make files.

Vulkan SDK and OpenAL SDK are required to develop and run Acid.

Ensure you are using a compiler with full C++17 support, on Windows it is recommend you use MSVC or MinGW w64.

If using Visual Studio it must be 2015 or later. 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.

On Linux Acid requires xorg-dev, libopenal1, and libvulkan1 to be installed. Read about how to setup Vulkan on Linux so a Vulkan SDK is found.

Setup on MacOS is similar to the setup on Linux, a compiler that supports C++17 is required, such as XCode 10.0.

Contributing

You can contribute to Acid in any way you want, we are always looking for help. You can learn about Acid's code style from the Documents/GUIDELINES.md.

acid's People

Contributors

carlosfromnewyork avatar decaxon avatar mattparks avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.