$ wish % load ./libtom.so
Les procédures et les variables OpenGL sont définies dans le namespace ::GL. Comme on peut le voir en comparant les fichiers simple.tcl et more_simple.tcl, il est vite ennuyeux de devoir taper ::GL:: avant chaque appel à une procédure OpenGL. La première chose à faire pour éviter ça est d'importer le namespace ::GL :
% namespace import ::GL::*
Au départ, il n'existe aucun contexte courant, et l'appel à une fonction OpenGL génère une erreur :
% glClearColor 0.0 0.0 0.0 0.0 error: no current context
Par défaut, la création d'un widget OpenGL initialise le contexte courant sur ce widget :
% tom current % tom .gl1 .gl1 % tom current .gl1
Il est possible de contrôler l'initialisation du contexte courant avec l'option -current :
% tom .gl2 -current 0 .gl2 % tom current .gl1 % .gl2 makecurrent % tom current .gl2
Il existe d'autres options de création : -width (0), -height (0), -doublebuffer (0), -alpha (0), -direct (1), -depth (0) et -share (NULL).
Lorsqu'il existe un contexte courant, les fonctions OpenGL sont accessibles et s'appliquent au widget courant. Ainsi, pour effacer .gl1 en noir et .gl2 en blanc :
% .gl1 makecurrent % glClearColor 0.0 0.0 0.0 0.0 % .gl2 makecurrent % glClearColor 1.0 1.0 1.0 0.0
Reste à voir le résultat :
% proc display {w} { $w makecurrent glClear $GL::GL_COLOR_BUFFER_BIT } % proc reshape {w width height} { $w makecurrent glViewport 0 0 $width $height } % bind .gl1 <Configure> {reshape %W %w %h} % bind .gl2 <Configure> {reshape %W %w %h} % bind .gl1 <Expose> {display %W} % bind .gl2 <Expose> {display %W} % pack .gl1 .gl2 -fill both -expand 1