--- title: "Iridescent" description: "An open-source graphics engine" githubUrl: "https://github.com/timmypidashev/iridescent" techStack: ["Cmake", "Glad", "Imgui"] date: "2024-05-03" image: "/projects/iridescent/thumbnail.jpeg" --- ## Overview A open-source graphics engine concept created for my highschool senior project. Built to expand my understanding of the low level programming world, and further my reach of graphics and c++ programming. ## Key Features * **Dockable Windows**: A quality of life feature utilizing imgui which allows to efficiently use monitor space, moving logging and certain tools into their own windows outside of the engines viewspace. * **Layer Stack**: Deterministic and fast stack which determines the order in which all layers of the application are drawn, from the ui all the way to the polygons making up the scene. * **Input Polling**: A realtime implementation polling all input events on the keyboard and mouse for an extremely low latency between input events and scene events. * **Detailed Logging**: A detailed logging system which logs events from the scene all the way down to the system. * **Shading**: The crème de la crème of the renderer, adding shading to the entire scene. ## Development Highlights Some of the best highlights for me during this project was quite literally every time I managed to fix a compilation issue. The exhileration after each successful step forward was just mesmerizing, and I knew the moment I began my obsession wouldn't end until the engine was in a complete state. Since I was going into this blind during my senior year at highschool, I knew almost nothing about c++ or the build systems that accompany it, so learning all of that at once was both a breath of fresh air and a frustration. However, after several days of work, I became very comfortable with cmake, my build system of choice, and most basic concepts of c++, allowing me to begin working on the engine itself. It was at this point where I started hitting some real knowledge barriers and ended up going to multiple resources to learn and understand the inner workings of a graphics renderer. Resources such as the [Hazel Engine Series](https://www.youtube.com/watch?v=JxIZbV_XjAs&list=PLlrATfBNZ98dC-V-N3m0Go4deliWHPFwT), [Learn C++ Website](https://www.learncpp.com/learn-cpp-site-index/), and [OpenGL Tutorials](https://www.opengl.org/sdk/docs/tutorials/) helped me tremendously here. ## Challenges & Roadblocks Some of the biggest challenges I faced was overcoming the knowledge barrier I had on the inner workings of graphics rendering and low level programming overall. Thankfuly, being stubborn and obsessed can sometimes help, and in this case after numerous attempts, I began meticoulouly learning every aspect of the engine as I developed it, and over time it began paying off, snowballing into a very fun experience. Some food for thought, after you overcome the biggest barrier in your journey, the rest seems laughably easy. ## Summary Looking back, working on Iridescent was some of the most fun I have ever had programming as of yet, and I am still craving for the next project to top this one. It was only by working on this engine that I realized just how much I love working on the little details, obsessing over each little system in the engine. Definitely something I will have to do again, maybe write a little game, but thats for future me to decide :D