Plus j’avance sur le développement de EaseSDK, plus je coince sur des limitations et des bugs de GUI sur OSX.
Les concepts des GUI native d’OSX sont véritablement étranges. On s’y fait, surtout au bout de plusieurs années. Mais ça reste vraiment propre à l’univers Apple et pas très bien testé..

Régression de GUI

Depuis 3 jours je bloque sur une regression des NSScrollView.
Après avoir épluché les forums officiels d’Apple, stackoverflow, et les forums de developpeurs OSX, je me résigne : la régression est bel est bien présente et impossible de la contourner.

Sans entrer dans le détail, le problème est simple : je veux juste faire mon rendu custom dans une NSView et pouvoir la scroller !
Tout fonctionnait parfaitement avec xcode 6, et depuis xcode 7 ça déconne totalement.

GUI qui fonctionne

Voici un rendu qui fonctionne : l'éditeur de TimeLines.
Les scrollbars fonctionnent, je peux me déplacer à ma guise.

GUI qui déconne

Et voici un rendu qui ne fonctionne plus du tout : l'éditeur de passes…
Impossible de faire fonctionner ces foutues scrollbars : elles n’apparaissent pas.
Pourtant tout fonctionnait avec xcode 6 !

C’est quand même incroyable de devoir me taper le debug des produits Apple.
C’est la société la plus riche au monde et elle n’est pas capable de s’offrir des tests de non-régression digne de ce nom…

Utiliser un système de GUI alternatif ?

Donc ce soir j’ai passé un peu de temps à examiner les GUI alternatives.

D’abord, j’ai été séduit par les GUI de Blender. C’est très joli, codé en C++, mais impossible de séparer le code de l'éditeur.

Ensuite, j’ai trouvé d’autres GUI cross-platform qui semblent mûres aujourd’hui :

  • Qt
    Cette librairie vieille de 20 ans s’est transformée à plusieurs reprises et a vraiment bien évolué. Elle est flexible, puissante, et elle tourne sur toutes les plateformes !
    Mais c’est une telle usine à gaz que les samples-codes m’ont vite fait fuir. Pas le temps d’apprendre à me servir d’un engine complet pour faire des GUIs.
  • NanoGUI
    Cette lib se désigne comme Minimalistic GUI library for OpenGL. C’est clairement prometeur, et certaines features me plaisent beaucoup telles que le support du C++11, l’utilisation de lambdas, et des widgets de tracé de graphes.
    Je vais la tester ce soir.
  • Game-GUI
    Mon coup de coeur. Très simple, et réalise la performance d'être codé en 2000 lignes de C++. Elle propose les features classique (skinning, widgets standards, etc), et cela fait d’elle un excellente candidate pour intégrer mon moteur en tant que module de GUI pour METAL. Cerise sur le gateau : elle est en licence MIT.

Et finalement…

Je vais poursuivre encore un peu avec Cocoa. Je laisse une chance à Apple de se rattrapper avec le mise à jour de xcode qui ne saura tarder.
Et en attendant, je vais tester NanoGUI et Game-GUI.
J’ai une longue nuit qui s’annonce !