Visto che stavi usando Game Maker, presumo che tu sia su Windows, quindi vai alla fine con l'SDK direct-x. Gli esempi forniscono il codice sorgente e ti offrono anche un assaggio della potenza a tua disposizione. Solo perché vuoi fare un gioco 2D non significa che dovresti rimanere con una libreria 2D, ad un certo punto probabilmente vorrai fare qualcosa che la libreria non implementa in sé (shader o rotazioni o qualcosa di casuale che hai appena BISOGNO del tuo progetto).
SDL - e probabilmente SFML e Cinder - fornisce un approccio di alto livello " toglie le basi" all'essere un motore, quindi avresti tutta la potenza di farlo da zero (quindi potresti avere pixel shader in SDL), ma non impareresti come sono state fatte le cose. Faresti quindi un vero C ++ all'interno di un framework di helper, che ti aiuterà a fare le cose, ma non sarà di grande aiuto per insegnarti come sviluppare giochi se mai lavorerai in una società di sviluppo di giochi.
SDL, SFML e persino Cinder sono tutti modi intelligenti per evitare di imparare cose difficili in C ++. Normalmente racchiudono OpenGL, che è utile per imparare se si desidera codificare la grafica per macchine non Windows, ma ci sono tonnellate di risorse per svolgere il lavoro anche in Direct-X (probabilmente più poiché il virus Windows si è diffuso in ogni angolo del mondo).
Se non vuoi imparare le cose grintose, va bene, ma altrimenti, non aver paura di iniziare da un'app Win32 non elaborata.
Suggerirei, per comodità, di iniziare con tutti i diversi pacchetti di supporto che puoi trovare, ma vai alla stesura del tuo motore di rendering. Scrivere un motore è molto divertente e può fornirti una risorsa per guardare indietro nei tuoi progetti futuri. Niente crea un buon codice come la saggezza nel fare qualcosa di sbagliato in passato.