Skip to content

lknknm/ottocento-engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

79 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ottocento Engine

screenshot_sandoy_model.jpg

This is a study project that initially follows the Vulkan Implementation Tutorial. The idea here is to solely document the process and make it easier for me to further reference the code inside the tutorial. The end goal, however, is to be able to expand this project, based on the Vulkan Tutorial to create my own Architectural BIM Engine. The idea is also help other Vulkan users to implement the features covered in this repository.

I will be following the tutorial but will also make changes that suit my personal code style as well as some other needs I will have to learn in the long run and want to implement on other projects. For this reason, the code on this project won't be a 100% copy of the original code from the Vulkan Tutorial. If you want to see the original code, please reference it on the References section.

Additionally, I will be adding lots of comment lines — sometimes more than "strictly necessary" — for studying purposes. Sometimes the lines are just a copy of the explanations inside the Vulkan-Tutorial, sometimes they are personal notations for me to remember later and make it easier to implement in other projects. This is a study project after all.

What is Vulkan?

Vulkan is a new API by the Khronos group (known for OpenGL) that provides a much better abstraction of modern graphics cards. This new interface allows you to better describe what your application intends to do, which can lead to better performance and less surprising driver behavior compared to existing APIs like OpenGL and Direct3D. The ideas behind Vulkan are similar to those of Direct3D 12 and Metal, but Vulkan has the advantage of being fully cross-platform and allows you to develop for Windows, Linux and Android at the same time.

Documentation

Additional (not covered inside the vulkan-tutorial)

  • Setting up Development Environment with Premake5.lua for Windows and Linux.
  • UI: Win32 Dark Titlebar to follow the Darkmode from the system.
  • GLFW: Change the Window Icon (further can be expanded to be a call to the GPU to decode a Hex Array).
  • Camera: WASD navigation with Right mouse button.
  • Camera: Orbit around object with full axis freedom and no gimble lock (quartenion rotation).
  • Camera: Front, Right, Top and Isonometric views based on Blender's camera hotkeys for user integration.
  • Infinite grid implementation with an independent DescriptorSet, Graphics Pipeline, Vertex and Fragment Shaders.
  • Smooth Resizing.
  • Integrate Vulkan with Immediate mode GUI.
  • Lighting and illumination.
  • Create a single command buffer (setupCommandBuffer) to execute them asynchronously for higher throughput.

Steps from Vulkan Tutorial

  • Setting up Development Environment.
  • Instance Creation.
  • Validation Layers Implementation.
  • Physical Devices and Queue Families selection.
  • Logical device and queues.
  • Window Surface creation.
  • Swap Chain
  • Image Views
  • Graphics Pipeline Basics
    • Shader Modules
    • Fixed Functions
    • Render Passes
  • Frame buffers
  • Command Buffers
  • Rendering and Presentation (finally rendering the first triangle)
  • Frames in flight
  • Swap Chain Recreation
  • Vertex Buffers
  • Uniform Buffers
  • Texture Mapping
    • Images
    • Image view and sampler
    • Combined Image Sampler
  • Depth Buffering
  • Loading Models
  • Generating Mipmaps
  • Multisampling

References/Resources

License

Ottocento Engine is licensed under the GNU General Public License, Version 3. See License

About

Architectural Engine being constructed with Vulkan.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published