By Anjal Doshi
Master of Science Capstone Project, Winter 2019
[Report Presentation]
OpenGL is a graphics Application Programming Interface (API) built for rendering 2D and 3D graphics. It was evolved from the Iris Graphics Library based on the Silicon Graphics Inc’s Geometry Engine, a special-purpose VLSI processor for computer graphics, from the 1980’s. With the rapid and continuous improvements of the Graphics Processing Unit (GPU) over the past decades, the discrepancies between OpenGL’s assumptions on the underlying hardware, and that of the actual modern GPU are becoming increasingly significant.
Vulkan is a modern, low-level graphics and compute API that provides an up to date abstraction of modern graphics hardware. The explicit nature of the API requires that the developer to be responsible for managing hardware resources, and results in a more efficient approach where the default system driver does not perform tasks behind the scenes to manage resources. Unfortunately, the added responsibilities and the associated sophistication in the underlying architecture mean that the Vulkan API can be a significant hurdle for new users. This is especially challenging as it is a new API with no significant community help.
The primary goals of this project are to design and implement a conceptual layer in the form of a library in between Vulkan and user’s applications and a set of demonstration tutorials. The library and the tutorials would assist new users of Vulkan in understanding, learning, and working with the API. This project approaches the library creation by creating multiple simple and typical single-goal applications, and then abstracting common layers into a unified
interface that supports all the applications. The library is then modularized into components based on well-established computer graphics concepts, like renderable, mesh, camera, texture,
input system, etc. Along with the applications, tutorials are developed to demonstrate how to work with the library. Extensive documentation is also included.
The usability of the library is verified with two moderately large scale, interactive applications involving typical modern interactive graphical capabilities including: geometric model loading and displaying, camera controls, multiple user views, illumination model, planar reflection, shadow casting light sources, and tessellation. Tutorials included with this library demonstrates the usage of the library by explaining the user-side source code in detail. The intrinsic of the library, like resource creation, renderable creation, API classes, etc. are described in the documentation. This library allows users to rapidly prototype Vulkan-based graphics application where the low-level, complex details of the Vulkan API are all hidden. As
users gain familiarity, they can then proceed gradually to work with Vulkan API directly.