Использование GLUT с Visual С++ Express Edition

Каковы основные шаги для компиляции приложения OpenGL с использованием GLUT (OpenGL Utility Toolkit) в Visual С++ Express Edition?

Ответ 1

  • Если у вас нет Visual С++ Express Edition (VCEE), загрузите и установите VCEE.
  • Установка Visual С++ Express Edition по умолчанию для платформы .NET. Нам нужно будет создать платформу Windows, так как OpenGL и GLUT еще не полностью поддерживаются в .Net. Для этого нам нужен пакет Microsoft Platform SDK. (Если вы используете более старую версию VCEE, загрузите и установите Microsoft Platform SDK. Visual С++ Express Edition необходимо настроить на для платформы Windows. Все эти инструкции доступны здесь.)
  • Если у вас нет GLUT, загрузите и распакуйте Nate Robin порт Windows GLUT.
  • Добавьте glut.h в свой каталог Platform SDK/include/GL/
  • Свяжите проект с glut.lib. (Перейдите в VCEE Project Properties → Дополнительные каталоги компоновщика и добавьте каталог с glut.lib.
  • Добавьте glut.dll в каталог Windows/System32, чтобы все программы, использующие GLUT может найти его во время выполнения.

Ваша программа, которая использует GLUT или OpenGL, теперь должна компилироваться в Visual С++ Express Edition.

Ответ 2

Порт GLUT на сайте Nate Robin с 2001 года и имеет некоторые несовместимости с версиями Visual Studio более поздними, чем это (.NET 2003 и выше). Несовместимость проявляется как ошибки в переопределении exit(). Если вы видите эту ошибку, есть два возможных решения:

  • Замените прототип exit() в glut.h тем, который находится в вашем stdlib.h, чтобы они совпадали. Это, вероятно, лучшее решение.
  • Более легкое решение - #define GLUT_DISABLE_ATEXIT_HACK перед #include <gl/glut.h> в вашей программе.

(Due credit: Я изначально видел этот совет на веб-сайте службы поддержки TAMU.)

Я сам использовал подход №1, так как появился .NET 2003, и использовал тот же измененный glut.h с VС++ 2003, VС++ 2005 и VС++ 2008.

Здесь diff для glut.h Я использую, который делает # 1 (но в соответствующем #ifdef blocks, так что он все еще работает со старыми версиями Visual Studio):

--- c:\naterobbins\glut.h       2000-12-13 00:22:52.000000000 +0900
+++ c:\updated\glut.h    2006-05-23 11:06:10.000000000 +0900
@@ -143,7 +143,12 @@

 #if defined(_WIN32)
 # ifndef GLUT_BUILDING_LIB
-extern _CRTIMP void __cdecl exit(int);
+/* extern _CRTIMP void __cdecl exit(int);  /* Changed for .NET */
+#  if _MSC_VER >= 1200
+extern _CRTIMP __declspec(noreturn) void __cdecl exit(int);
+#  else
+extern _CRTIMP void __cdecl exit(int);
+#  endif
 # endif
 #else
 /* non-Win32 case. */