J´ai regardé ce que tu appelle l´exemple de base.
C´est hallucinant... Je n´ai jamais vu une conception aussi mauvaise. C´est du mauvais C converti en C++.
Namespace, GI ne connait pas. C´est pourtant censé évité de préfixé toutes les fonctions.
Variables globales pour passer des paramètres d´initialisation. Beurk... Mais où le créateur a-t-il appris ça ?
Constructeur et destructeurs ? Connais pas non plus.
Il faudrait écrire
GISOUND Music ( 0, " Data/FluffyClouds.ogg");
ou bien
GISOUND* Music = new GISOUND(0, " Data/FluffyClouds.ogg");
mais pas
GISOUND* Music = GISOUND::Create(0, " Data/FluffyClouds.ogg");
Et virer cet horrible SAFE_DELETE pour laisser faire le destructeur. D´autant que SAFE_DELETE semble être une macro. Les macros n´ont plus aucune utilité en C++.
Il impose au programmeur sa mauvaise conception: fonctions Init, Loop et UnInit.
Les références, qui sont un mécanisme bien plus sûr et efficace ( quand on peut les utiliser bien sûr) que les pointeurs, GI ne connais pas non plus.
Le créateur doit savoir programmer ( même si c´est mal fait, il y a du travail derrière), mais il ferait mieux de lire un bon livre de C++ ( Le Langage C++, de Bjarne Stroustrup) et refaire sa bibliothèque, parce que là, le design c´est pas ça du tout.