GatewareLogo.png

Gateware

Dates: June 20' - Present (7 months)

Team Size: 8

Platform: PC, Mac, Linux

Language: C/C++11, Objective-C

Tools: Git, CMake, VS, Xcode, CodeLite

 Role: Generalist Software Engineer 

Contributions:

  • Fixed 16 critical issues.

  • Added 8 new cross-platform features.

  • Implemented comprehensive Unit Tests.

  • Provided support for Gateware users.

  • Significantly contributed to the stability of Gateware 1.2a

Overview

Gateware is an open-source multi-platform middleware for developing games and simulations. The tool provides modular libraries for audio playback, controller input, window creation, rendering, error logging, and more. Gateware's single-header design makes it easy to include in any project and to quickly get started using it.

Notable Contributions

ObjcRuntimeExample.png

Removed Gateware Limitations on Mac

Gateware use was limited on the Mac due to its single header architecture and the limitations of Objective-C classes. Users who tried to include Gateware in more than one source file would get duplicate symbols errors from the linker. After researching the Objective-C Runtime Library, I removed the limitation by having the Objective-C class defined at runtime. I also created a set of Macros to make the process of creating and using runtime classes easier for Gateware developers. Ultimately, this fix gave users more freedom on how they used Gateware on the Mac. 

Added Xbox One and PS4 Controller Support

This was accomplished by recording the raw input codes being reported with each controller input. Wired and wireless connections had different codes, so I also implemented a way to detect the difference in the connection. This feature gives Gateware users more controller support without adding extra lines of code. The face on the right is a puppet I made to show off the new Xbox One controller support. View the project on GitHub.

GatewarePuppet.gif
GatewareWindowTests.gif

Improved Window System Stability

Gateware's window system suffered from a few inconsistencies between platforms. Programs would also crash when an interface function was given valid (but rarely used) arguments. I made more comprehensive Unit Tests for the window system and fixed every issue that came up in the process. This lead to the stability of Gateware's window system making it more reliable across all supported platforms.

More Contributions

  • Added mouse movement events to Gateware's buffered input library.
  • Added feature to disabling window resizing to Gateware's window library.

  • Added feature to dynamically change a window icon at runtime to Gateware's window library.

  • Improved CMake script, giving developers easier access to project files from the IDE.

  • Fixed several issues causing crashes on Linux when using Gateware's OpenGL library.

  • Fixed issues with input mappings in Gateware's input, buffered input, and controller libraries.

  • Fixed random crashes caused by race conditions in Gateware's audio, input, and controller libraries.

  • Helped users to integrate Gateware into their projects and take advantage of Gateware's features.

  • Actively contributed to Gateware's development blog to detail issues and solutions.

What I've Learned

Working on Gateware has been a great experience with multi-platform development. Adding new features to the project while considering the differences of each operating system is challenging. The process though is very rewarding. I now have an understanding of what it's like to work with audio, input, and window's on different operating systems. My debugging skills continue to improve while working on this project. I'm also happy to be part of a highly supportive team that I am always learning new things from.

Links