Skip to content

SungJJinKang/DoomsEngine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dooms Engine ( Game Engine ) ( 2021.01 ~ 2022.11 )

Video

Game Engine Video

How to build?

1. git clone https://github.com/SungJJinKang/DoomsEngine.git
2. move to project directory
3. git submodule init
4. git submodule update --recursive
5. set EnvironmentVariable "VCToolsInstallDir" to your vs 2019 tool directory(ex. "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133")
	Currently pre-built clscan(reflection data generator) binary is using clang 12.0.1, but vs 2022 runtime library used by it requires a more recent vesion and emits compile error
	This library is no longer maintained and I don't have a plan to update its clang version.
	So we need to specify version of used vs runtime library.
6. Build "Doom3" project with visual studio 2019

Currently, Unicode path isn't supported yet. Please don't include unicode character in path

Features

Requirement

  • C++17
  • C# ( used for making engine tools )
  • Windows, x64, VisualStudio 2022(vc17)
  • Target Compiler : MSVC, Clang ( clang is used for generating reflection data )

Engine Core

  • Homemade Math Library ( JINMATH )
  • Support SIMD ( Currently AVX2 ) ( Math, Culling.... )
  • Asset Import Pipeline ( Automatically import assets located in asset folder )
  • Component based System
  • Object Management System for preventing memory leak ( 개발 일지 )
  • Fast Runtime Type Casting ( inspired by unreal engine4's runtime type casting ) ( time complexicity is always O(1), dynamic_cast isn't used ( RTTI option is disabled ), source code )
  • Garbage Collector using reflection system ( stop-the-world, Mark ( multithread ) - Sweep algorithm, std::array, std::vector is also supported, nullify pointer referencing destroyed object ( to prvent referencing invalid address ), 개발 일지, video, soure code )

Rendering

  • OpenGL, DIRECTX 11(Partially)
  • Deferred Rendering ( video )
  • Sort objects from front to back
  • Multi Thread ViewFrustum Culling From FrostBite Engine of EA Dice ( source code, 개발 일지 )
  • Masked SW ( CPU ) Occlusion Culling From Intel ( video1, video2, source code, 개발 일지, reference paper )
  • Distance Culling from Unreal Engine ( reference, soure code )
  • Shader Language Portable System ( Automatically convert glsl files to hlsl, glslcc is used )
  • Static Batch Rendering ( video, Mesh data of static objects with same material is combined automatically at start of scene. They are drawed in 1 draw call )

Physics

Reflection

  • Automatic Reflection Data Generation System. ( video ) ( clrefelct_automation )
  • Customized Reflection Open Source Library ( video ) ( Customized clReflect )
  • Integrate imgui with reflection system. ( DObjects, std::vector, std::array, std::unique_ptr... is supported, video )

Misc

To Do

TO-DO List

Thirdparty Dependencies

  • glfw : A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input
  • assimp : The official Open-Asset-Importer-Library Repository
  • DirectTex : DirectXTex texture processing library
  • imgui : Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
  • Intel TBB ( malloc proxy )
  • concurrentqueue : A fast multi-producer, multi-consumer lock-free concurrent queue for C++11
  • json : JSON for Modern C++
  • glslcc : GLSL cross-compiler tool (GLSL->HLSL, MSL, GLES2, GLES3, GLSLv3), using SPIRV-cross and glslang
  • magic_enum : Static reflection for enums (to string, from string, iteration) for modern C++

Development Blog

Korean Blog