Grazie lo stesso.
Più che altro la mia intenzione era quella di provare a creare una classe che utilizzi OpenGL (uso glfw) per creare delle finestre con dei bottoni, textbox, etc. E' molto difficile e su internet si trovano tutorial solo per creare degli engine/rendering 3d.
Why?
Intanto vai ad utilizzare un'API di estrema complessità. E lo scopo è quello di ridurti al 2D? Cioè, useresti mai una Ferrari per andare al supermercato di fronte casa tua?
Ovviamente c'è un caso in cui si vuole il 2D via OpenGL ( o altre API 3D ) ed è quello degli HUD nei giochi. Gli HUD sono quelle finestrelle che consentono di cambiare i settaggi o quelle che compaiono all'improvviso per visualizzare informazioni importanti.
Altra questione è la piattaforma. OpenGL è cross-platform, ma presenta delle subdole differenze ( in particolare relativamente alla gestione delle finestre e degli input ) tra i vari sistemi operativi. Inoltre è un'API che MS ha volutamente castrato ( su Windows ), per spingere Direct3D ovviamente.
Infine è un'API che andrà a sparire, sostituita da Vulkan.
Dove voglio andare a parare? Nessuno sviluppatore di programmi grafici usa OpenGL direttamente, ma utilizza librerie tipo SDL.
Detto questo, se vuoi utilizzare OpenGL per il 2D, devi studiare come usarla per il 3D. OpenGL ragiona in termini di "surface", cioè buffer renderizzabili, in cui sono presenti determinati oggetti geometrici. Nel tuo caso avresti una singola surface, posizionata su un certo piano nello spazio tridimensionale, con tutti gli oggetti che hanno la stessa coordinata Z.
Il resto resta tale e quale ai programmi 3D. Per cui non ti resta che studiarti come usare OpenGL per creare grafica 3D e poi settare Z=costante e il gioco è fatto.