All Projects → EgorOrachyov → Berserk

EgorOrachyov / Berserk

Licence: MIT license
[WIP] High performance 3D graphics game engine

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Berserk

Vkquake2
id Software's Quake 2 v3.21 with mission packs and Vulkan support (Windows, Linux, MacOS, FreeBSD, Raspberry Pi 4)
Stars: ✭ 543 (+1651.61%)
Mutual labels:  vulkan, 3d-graphics
3d Game Shaders For Beginners
🎮 A step-by-step guide to implementing SSAO, depth of field, lighting, normal mapping, and more for your 3D game.
Stars: ✭ 11,698 (+37635.48%)
Mutual labels:  vulkan, 3d-graphics
Vkdoom3
Vulkan DOOM 3 port based on DOOM 3 BFG Edition
Stars: ✭ 566 (+1725.81%)
Mutual labels:  vulkan, 3d-graphics
Magnum
Lightweight and modular C++11 graphics middleware for games and data visualization
Stars: ✭ 3,728 (+11925.81%)
Mutual labels:  vulkan, glfw
Nimgl
NimGL is a Nim library that offers bindings for popular libraries used in computer graphics
Stars: ✭ 218 (+603.23%)
Mutual labels:  vulkan, glfw
Oreon Engine
OpenGL/Vulkan Java 3D Engine
Stars: ✭ 431 (+1290.32%)
Mutual labels:  vulkan, glfw
Vktk
Vulkan Toolkit
Stars: ✭ 32 (+3.23%)
Mutual labels:  vulkan, 3d-graphics
glfw-d
D translation of GLFW, a multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input
Stars: ✭ 14 (-54.84%)
Mutual labels:  vulkan, glfw
Demos
Vulkan API crossplatform demos in Go
Stars: ✭ 103 (+232.26%)
Mutual labels:  vulkan, glfw
Bgfx
Cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library.
Stars: ✭ 10,252 (+32970.97%)
Mutual labels:  vulkan, glfw
Lwjgl3
LWJGL is a Java library that enables cross-platform access to popular native APIs useful in the development of graphics (OpenGL, Vulkan), audio (OpenAL), parallel computing (OpenCL, CUDA) and XR (OpenVR, LibOVR) applications.
Stars: ✭ 3,540 (+11319.35%)
Mutual labels:  vulkan, glfw
Flextgl
OpenGL and Vulkan header and loader generator.
Stars: ✭ 180 (+480.65%)
Mutual labels:  vulkan, glfw
panic-panda
A 3D rendering demo powered by Python and Vulkan
Stars: ✭ 67 (+116.13%)
Mutual labels:  vulkan, 3d-graphics
Silk.net
The high-speed OpenAL, OpenGL, Vulkan, and GLFW bindings library your mother warned you about.
Stars: ✭ 534 (+1622.58%)
Mutual labels:  vulkan, glfw
MoravaEngine
2D/3D graphics engine written in C++ language. It currently supports the following graphics APIs: OpenGL 3.3+, Vulkan 1.2, DirectX 11. Its current purpose is to experiment with various CG concepts and techniques.
Stars: ✭ 129 (+316.13%)
Mutual labels:  vulkan, 3d-graphics
Vkquake
Vulkan Quake port based on QuakeSpasm
Stars: ✭ 955 (+2980.65%)
Mutual labels:  vulkan, 3d-graphics
osre
An open source render engine
Stars: ✭ 95 (+206.45%)
Mutual labels:  vulkan, 3d-graphics
zig-vulkan-triangle
simple triangle displayed using vulkan, glfw, and zig
Stars: ✭ 55 (+77.42%)
Mutual labels:  vulkan, glfw
Flycube
Graphics API wrapper is written in C++ on top of Directx 12 and Vulkan. Provides main features including ray tracing.
Stars: ✭ 78 (+151.61%)
Mutual labels:  vulkan, 3d-graphics
Filament
Filament is a real-time physically based rendering engine for Android, iOS, Windows, Linux, macOS, and WebGL2
Stars: ✭ 13,215 (+42529.03%)
Mutual labels:  vulkan, 3d-graphics

Project logo

BERSERK

build clang format pages codacy badge license

Berserk engine is designed as a powerful and compact tool for creating high-performance applications. It will be written in C++11 with support for Vulkan and OpenGL graphics, OpenAL audio, Bullet Physics, Assimp importer for models, STB texture loader and FreeType font loader.

The engine will provide functionality in memory management, math, SIMD instructions set utilisation, working with strings, multi-threading, exporting/importing various kinds of resources (such as textures, geometry, audio files etc.), displaying fonts, text and 3d graphics.

The idea behind this hobby project is to implement a simple, compact, friendly, and at the same time powerful enough engine in order to create a 3d third-person platformer game, which is fully featured with modern graphics, visual effects, audio, physics, and scripting features. Since I am a big fan of 3d-graphics, games, and programming, this project will allow me to practice my skills as well as have a lot of fun with fancy programming tasks and design decisions.

At this moment the primary goal is to create core structure with an usable stuff, which will be expanded later by the engine modules/components. Project under heavy development.

Platforms

  • Windows 10 (tested on Windows 10)
  • macOS (tested on 10.14 Mojave)
  • Linux-based OS (tested on Ubuntu 20.04)

Third-party projects

  • glew for OpenGL functions and extensions loading
  • glfw for cross-platform window and input management
  • glslang for runtime glsl to spir-v shaders compilation
  • googletest for Unit-testing of the engine source code modules
  • pfd portable file dialogs for native OS dialogs access
  • stbimage image utilities for images loading, writing and resizing
  • tinyobj for wavefront obj models importing
  • tinyxml2 for utf-8 xml files processing
  • vma vulkan library for memory allocation
  • whereami for executable location extracting
  • yamc for C++ locks implementation

Getting started

Dependencies

Glfw library dependencies setup for Linux-based OS. Glfw uses native windowing APIs and built-in OS window frameworks, however it may require additional setup step for linux users. Follow the official glfw guide to setup this dependencies by apt-get tool.

To build library OpenGL-based low-level renderer on Linux-based OS sometimes you need make sure, that glew dependencies are installed. So follow glew installation dependencies requirements.

To build library Vulkan-based low-level renderer you need to download and install official Vulkan SDK from LunarG website. Follow instructions in order to install this SDK. Note, that this project uses CMake to locate SDK location, so remember to expose environment variable VULKAN_SDK if it is required.

Requirements

  • Common:
    • Git (to get source code)
    • CMake (the latest version)
    • Ninja (as build files generator)
    • Python 3.7+
  • Windows 10:
    • Microsoft Visual C++ Compiler (MSVC) with C++11 support
    • x64 Native Tools Command Prompt for VS
  • Ubuntu 20.04:
    • GNU C++ Compiler with C++11 support
  • MaсOS Mojave 10.14:
    • Clang Compiler with C++11 support

Get source code

The following code snippet downloads project source code repository, enters project root folder and runs submodules init in order to get dependencies source code initialized. Must be executed from the folder where you want to locate project.

$ git clone https://github.com/EgorOrachyov/Berserk.git
$ cd Berserk

Configure and run build

The following code snippet runs cmake build configuration process with output into build directory, in Release mode with tests BERSERK_BUILD_TESTS=ON enabled. Then runs build process for build directory in verbose mode with -j 4 four system threads. Must be executed from project root folder.

$ cmake . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBERSERK_BUILD_TESTS=ON
$ cmake --build build --target all --verbose -j 4

On macOS, you can optionally specify target binaries architecture to build. Pass option -DCMAKE_OSX_ARCHITECTURES with x86_64 or arm64 respectively. By default, build falls back to CMAKE_SYSTEM_PROCESSOR specified architecture. See example bellow, replace <arch> with desired architecture for your build.

$ cmake . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBERSERK_BUILD_TESTS=ON -DCMAKE_OSX_ARCHITECTURES=<arch>
$ cmake --build build --target all --verbose -j 4

Run

The following code snippet executed python script, which allows to run all native C++ library unit-tests, located in build directory, specified in --build-dir=build. Must be executed from project root folder.

python ./scripts/run_tests.py --build-dir=build

Directory structure

Berserk
├── code - Engine source code and dependencies
│   └── runtime - runtime engine infrastructure
│       ├── core - primary core module
│       ├── platform - platform specific code
│       ├── rhi - rendering hardware interface
│       │   ├── vulkan - rhi implementation backend for Vulkan rendering 
│       │   └── opengl - rhi implementation backend for OpenGL rendering
│       ├── render - high-level rendering system
│       ├── physics - physics system
│       ├── audio - audio system
│       ├── scene - game scene, objects and components management
│       ├── resource - eninge resources and resource management
│       └── scripts - scripting system
├── engine - engine config, textures, shaders, resources and etc.
├── example - example cpp test project
├── tests - tests for engine modules
├── templates - game project templates for engine
├── scripts - script utilities for development
├── docs - documents, text files and various helpful stuff
├── deps - project dependencies
│   ├── glew - for OpenGL functions and extensions loading
│   ├── glfw - for cross-platform window and input management
│   ├── glslang - for runtime glsl to spir-v shaders compilation
│   ├── googletest - for unit-testing of the engine source code modules
│   ├── pfd - portable file dialogs for native OS dialogs access
│   ├── stbimage - image utilities for images loading, writing and resizing
│   ├── tinyobj - for tiny wavefront obj models loading
│   ├── tinyxml2 - for utf-8 xml files processing
│   ├── vma - vulkan memory allocation library
│   ├── whereami - for executable location extraction
│   └── yamc - for C++ locks implementation
└── CMakeLists.txt - project cmake config

License

This project licensed under MIT license. License text can be found in license file.

Also

If you have any questions, ideas, how to improve/implement something, or you want to contribute to the project, please, feel free to contact me at [email protected]. Also, you can create an issue or pull request in the repository.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].