GLUT ( Open GL Utility T oolkit ) é uma biblioteca de utilitários de propriedade de Mark J. Kilgard , que oferece um conjunto de rotinas para o gerenciamento de janelas OpenGL e interações com o sistema operacional (gerenciamento de teclado, mouse, etc.) independentemente dele e do gerenciador de janelas. É usado principalmente para a criação de programas de demonstração.
A biblioteca GLUT foi escrita por Mark J. Kilgard , autor de OpenGL Programming for the X Window System e The CG Tutorial: The Definitive Guide to Programmable Real-Time Graphics , enquanto trabalhava para a Silicon Graphics .
GLUT foi escrito com o objetivo de produzir código portátil entre diferentes sistemas operacionais e para fins educacionais. Sua simplicidade permite que você não se preocupe com a parte do sistema, que é relativamente complexa, e se concentre na substância do próprio programa OpenGL. Criar um programa com GLUT requer apenas algumas linhas de código. Além disso, ele respeita as convenções e a sintaxe do OpenGL; os nomes das funções começam com o prefixo "glut" e as macros com "GLUT" (o OpenGL usa os prefixos "gl" e "GL").
Além do encapsulamento das funções básicas de um gerenciador de janelas, o GLUT oferece rotinas para o desenho de alguns objetos tridimensionais simples como a esfera, o cubo, o cone, o toro ou mesmo o famoso bule de Newell .
A biblioteca GLUT não está mais em desenvolvimento e foi interrompida na versão 3.7 em maio de 1998 . As bibliotecas de código aberto freeglut e OpenGLUT (que deriva de freeglut) agora substituem GLUT. Eles reimplementam a API GLUT e trazem algumas mudanças. A criação dessas outras bibliotecas se deve à imprecisão quanto à licença da GLUT, que segundo alguns não permitiria a redistribuição do código modificado.
Aqui está um exemplo de um programa usando GLUT e OpenGL (compatível com freeglut e OpenGLUT). O resultado é uma janela simples com um triângulo multicolorido no centro.
Podemos então fazer este programa evoluir definindo callbacks para ações do teclado ( glutKeyboardFunc ) ou do mouse ( glutMouseFunc ), ou mesmo com o simples movimento do mouse ( glutMotionFunc ), a fim de, por exemplo, alterar interativamente a posição das pontas do triângulo ou a escolha de cores. Veja também o exemplo interativo simples fornecido no artigo OpenGL .