Welcome! This is the repository for the game engine I'm trying to create, ibex3D. It is written in C++, uses the Win32 API for windowing, and the Vulkan API for graphics. It was originally based off of the Vulkan Tutorial by Alexander Overvoorde, but I've introduced some new features like diffuse and specular lighting, and also made some architectural changes to make it more my style. I want to look into other tutorials and learn more so that I can eventually keep improving it until it's capable of what I want to make with it in the future.
ibex3D is not even close to finished. I'm pretty sure this codebase has multiple issues that I'm not seeing yet, aside from the frankly horrible architecture.
- ibex3D
- Requirements
- Documentation
- AI usage disclosure and policy
- Model file name notice
- Shader compilation notice
- Special thanks
-
Windows 10 or 11 (x64) - Currently only supports the Windows operating system because it uses Win32-specific code. It's been tested on versions 10 and 11, but older/other versions might work as well. However, you NEED to run this with a machine with 64-bit support, as it does not have any 32-bit support.
-
Vulkan Support - Exclusively uses the Vulkan graphics API. You'll need a graphics card with Vulkan support in order to be able to run it. This should be pretty common as Vulkan is widely supported by most modern GPUs.
-
LunarG Vulkan SDK - Uses the Vulkan SDK, which you can download and install from LunarXchange. Please make sure that you have an environment variable
VULKAN_SDKpointing to the Vulkan SDK directory (this should automatically be managed for you by the Vulkan SDK installer) as the Visual Studio project relies on this variable. I've tested ibex3D using SDK versions1.3.296.0,1.4.341.1and1.4.357.0, but I strongly recommend using the latest possible version as it can detect validation layer errors that can't be detected by earlier versions. -
Microsoft Visual Studio 2022 - Uses Microsoft Visual Studio Community 2022 version 17.14.27 and the Microsoft Visual C++ compiler, which you can download and install from this link. Visual Studio 2026 can also work if you have MSVC v143 installed or retarget the solution to the latest toolset version. I want to switch to using something like CMake one day and support different compilers, but I have no idea how to use those right now.
-
Knowledge of C++, Vulkan and graphics programming - Makes extensive use of all of these, so if you don't have any prior experience with them before working with ibex3D, you may quickly become confused and frustrated. In which case, I suggest you check out the Assumptions section in the _START_HERE.md file for ideas on educational resources on working with C++, Vulkan and graphics programming.
NOTICE: The documentation is *painfully* unfinished right now, and in addition to that, it's currently on hold (for the most part, but it still may be occasionally updated in bursts). Please feel free to add your own documentation or update the existing stuff if you want, but this project is currently a solo effort and I want to focus more on the actual development side of things right now.
Very early work-in-progress documentation can be found in the documentation folder. I highly reccommend you start with the START_HERE file, and once you're ready, explore the other files in the folder.
Usage of generative AI to develop and contribute to ibex3D is heavily frowned upon. I've historically used GitHub Copilot to generate rough commit descriptions, and occasionally to help with documentation and comments, before reviewing and adjusting its output by hand, but I try to avoid it whenever possible.
The source code itself, however, has always been, and hopefully always will be, written and maintained entirely by hand with zero input from any generative AI. Until a way can be found for genAI usage to enhance productivity instead of promoting laziness, engaging in "vibe coding" or submitting AI-generated code to ibex3D without extensive prior review and hand-made adjustments by the operator is strictly forbidden.
This is one of the big reasons why ibex3D's development is so sluggish and inconsistent right now, aside from the fact that it's currently only developed by a solo student who only knows the bare minimum about game engine programming.
I renamed the main model files to testCube.obbj and export3dcoat.obbj (with two b's in the file extension) to get around the .gitignore, which seems to ignore all .obj files no matter if they're from Visual Studio or 3D modeling software. Please rename it to export3dcoat.obj (with a single b in the file extension) for the application to work correctly. This also applies to other files with the obbj file extension.
The shaders in the ibex3D_sampleApplication/assets/shaders folder have already been compiled to SPIR-V, and those SPIR-V files worked for me on two machines, but I'm not sure if they would work for you (I don't know if SPIR-V compilation output depends on your hardware and graphics drivers or not). If it doesn't work for you, try following these steps:
- Go to
ibex3D_sampleApplication/assets/shaders/and edit thecompile.batfile inside. - Replace both occurences of
D:/VulkanSDK/1.4.341.1/Bin/glslc.exewith the absolute path to glslc.exe in your Vulkan SDK installation (this would beVulkanSDK/(version)/Bin/glslc.exe). - Run
compile.batand see if you don't get any errors in the command line.
-
alignment_police - Helped me with figuring out a possible memory leak in early development, and also taught me some stuff about custom memory management (which isn't really used here, but still).
-
Drillgon200 - Helped me fix the view matrix and specular lighting implementation.
These individuals have helped me fix issues with the engine, and it arguably wouldn't be where it is now without their assistance. Thank you, mwah.