Zestaw narzędzi OpenGL — OpenGL Utility Toolkit
Deweloper(zy) | Mark Kilgard |
---|---|
System operacyjny | Wieloplatformowy |
Platforma | Wieloplatformowy |
Rodzaj | API |
Stronie internetowej |
www |
OpenGL Utility Toolkit ( GLUT ) jest biblioteka narzędzi dla OpenGL programów, które wykonują głównie na poziomie systemu I / O z hosta systemu operacyjnego . Wykonywane funkcje obejmują definiowanie okna, sterowanie oknem oraz monitorowanie wejścia klawiatury i myszy . Dostępne są również procedury rysowania wielu prymitywów geometrycznych (zarówno w trybie bryłowym, jak i szkieletowym), w tym sześciany , kule i czajnik Utah . GLUT ma również ograniczoną obsługę tworzenia wyskakujących menu.
GLUT został napisany przez Marka J. Kilgarda , autora OpenGL Programming for the X Window System i The Cg Tutorial: The Definitive Guide to Programmable Real-Time Graphics , podczas gdy on pracował dla Silicon Graphics Inc.
Dwa cele GLUT to umożliwienie tworzenia raczej przenośnego kodu pomiędzy systemami operacyjnymi (GLUT jest wieloplatformowy ) oraz ułatwienie nauki OpenGL. Rozpoczęcie pracy z programowaniem OpenGL podczas korzystania z GLUT często zajmuje tylko kilka linijek kodu i nie wymaga znajomości interfejsów API okien specyficznych dla systemu operacyjnego .
Wszystkie funkcje GLUT zaczynają się od glut
prefiksu (na przykład glutPostRedisplay
zaznacza bieżące okno jako wymagające przerysowania).
Realizacje
Oryginalna biblioteka GLUT autorstwa Marka Kilgarda obsługuje X Window System ( GLX ) i została przeniesiona do Microsoft Windows ( WGL ) przez Nate'a Robinsa . Dodatkowo system macOS jest dostarczany z platformą GLUT, która obsługuje własne NSGL/ CGL .
Biblioteka GLUT firmy Kilgard nie jest już utrzymywana, a jej licencja nie pozwalała na redystrybucję zmodyfikowanych wersji biblioteki. To pobudziło potrzebę wolnego oprogramowania lub reimplementacji interfejsu API typu open source od zera. Pierwszą taką biblioteką była FreeGLUT , która ma być dość bliską reprodukcją, wprowadzając niewielką liczbę nowych funkcji, aby poradzić sobie z ograniczeniami GLUT. OpenGLUT, A widelec z freeglut, dodaje kilka nowych funkcji do oryginalnego API, ale prace nad nim zakończono w maju 2005 roku.
Mark Kilgard ma repozytorium GitHub dla GLUT. Plik nagłówkowy glut.h zawiera następującą licencję:
/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998, 2000, 2006, 2010. */ /* This program is freely distributable without licensing fees and is provided without guarantee or warrantee expressed or implied. This program is -not- in the public domain. */
Ograniczenia
Niektóre z oryginalnych decyzji projektowych GLUT utrudniały programistom wykonywanie pożądanych zadań. Doprowadziło to wielu do stworzenia niekanonicznych poprawek i rozszerzeń GLUT. [1] Niektóre reimplementacje wolnego oprogramowania lub oprogramowania typu open source zawierają również poprawki.
Niektóre z bardziej znaczących ograniczeń oryginalnej biblioteki GLUT obejmują:
- Biblioteka wymaga od programistów wywołania
glutMainLoop()
funkcji, która nigdy nie zwraca. Utrudnia to programistom zintegrowanie GLUT z programem lub biblioteką, która chce mieć kontrolę nad własną pętlą zdarzeń. Powszechną łatką, aby to naprawić, jest wprowadzenie nowej funkcji o nazwieglutCheckLoop()
(macOS) lubglutMainLoopEvent()
(FreeGLUT/OpenGLUT), która uruchamia tylko jedną iterację pętli zdarzeń GLUT. Innym powszechnym obejściem jest uruchomienie pętli zdarzeń GLUT w osobnym wątku , chociaż może się to różnić w zależności od systemu operacyjnego, a także może powodować problemy z synchronizacją lub inne problemy: na przykład implementacja GLUT w systemie MacOS wymagaglutMainLoop()
uruchomienia w głównym wątku. - Fakt, że
glutMainLoop()
nigdy nie zwraca, oznacza również, że program GLUT nie może wyjść z pętli zdarzeń. FreeGLUT rozwiązuje ten problem, wprowadzając nową funkcję,glutLeaveMainLoop()
. - Biblioteka kończy proces, gdy okno jest zamknięte; w przypadku niektórych aplikacji może to nie być pożądane. Dlatego wiele implementacji zawiera dodatkowe wywołanie zwrotne, takie jak
glutWMCloseFunc()
.
Ponieważ nie jest już utrzymywany (w zasadzie zastąpiony przez Open Source FreeGLUT ), powyższe problemy projektowe nadal nie są rozwiązane w oryginalnym GLUT.
Zobacz też
- EGL to interfejs pomiędzy OpenGL ES lub OpenVG a systemem okienkowym .
- FreeGLUT ma być pełnym zamiennikiem GLUT i ma tylko kilka różnic.
- GLFW
- Prosta warstwa DirectMedia (SDL)
- Biblioteka interfejsu użytkownika OpenGL (GLUI)
- Biblioteka narzędzi OpenGL (GLU)
Bibliografia
Linki zewnętrzne
- GLUT — zestaw narzędzi OpenGL
- Interfejs programowania API OpenGL Utility Toolkit (GLUT) w wersji 3 (oficjalna dokumentacja)
- Pobieranie OpenGL Utility Toolkit (GLUT) (biblioteki źródłowe i prekompilowane)