Zestaw narzędzi OpenGL — OpenGL Utility Toolkit

Zestaw narzędzi OpenGL
Fenetre glut.png
Deweloper(zy) Mark Kilgard
System operacyjny Wieloplatformowy
Platforma Wieloplatformowy
Rodzaj API
Stronie internetowej www .opengl .org /resources /libraries /glut / Edytuj to na Wikidanych

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 glutprefiksu (na przykład glutPostRedisplayzaznacza 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 nazwie glutCheckLoop()(macOS) lub glutMainLoopEvent()(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 wymaga glutMainLoop()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ż

Bibliografia

Linki zewnętrzne