Nvidia OpenGL Configuration mini-HOWTO

Robert B Easter

Перевод: Александр Ермолаев, ASPLinux

Аннотация

Этот miniHOWTO описывает способ, как установить драйвера OpenGL под Linux для видеокарты Nvidia. В дополнение к этому, документ объясняет, как установить XFree86, библиотеку OpenGL Utility (часть библиотеки Mesa), OpenGL Utility Toolkit (glut), полный набор страниц руководства по OpenGL, а также библиотеку Qt и ее расширения OpenGL, т.о. пользователи будут иметь основу для разработки OpenGL приложений под Linux.


Содержание
Введение
Загрузка пакетов программ
Установка XFree86
Установка Mesa
Установка драйверов Nvidia OpenGL
Установка Qt
Установка GLUT
Заключительные комментарии

Введение

Этот miniHOWTO описывает способ, как установить драйвера OpenGL под Linux для видеокарты Nvidia. В дополнение к этому, документ объясняет, как установить XFree86, библиотеку OpenGL Utility (часть библиотеки Mesa), OpenGL Utility Toolkit (glut), полный набор страниц руководства по OpenGL, а также библиотеку Qt и ее расширения OpenGL, т.о. пользователи будут иметь основу для разработки OpenGL приложений под Linux.


Новые версии этого документа

Последнюю версию этого документа можно найти на странице:

http://www.comptechnews.com/~reaster/nvgl.txt


Copyright Information

This document is copyrighted (c) 2000 Robert B. Easter and is distributed under the terms of the Linux Documentation Project (LDP) license, stated below.

Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions.

All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below.

In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs.

If you have any questions, please contact


Авторские права

Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: , или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу


Ответственность

Я не несу никакой ответственности за содержание этого документа. Используйте идей, примеры и другое содержимое документа на свой страх и риск.

Все авторские права принадлежат их владельцам, если нет специального уточнения.

Упоминание специфических продуктов или торговых марок, которое имеет место в этом документе, не должно расцениваться как их подтверждение их качества.


Загрузка пакетов программ

Прежде всего драйверы OpenGL для видеокарт Nvidia требуют систему с ядром 2.2.12 или выше. Если вы не имеете его, тогда обновите вашу систему, а это уже тема другого HOWTO! Но, первый шаг должен быть сделан - это загрузка нового ядра с сайта:

http://www.kernel.org/

Также требуется XFree86 4.0 или выше, предпочтительнее 4.01. Его инсталляция будет описана позже.

Пакеты программ.

XFree86 4.0.1.

XFree86 содержится в трех файлах:

Doctools используется для подготовки X документации.

ftp://ftp.xfree86.org/

Включает glX, интерфейс для OpenGL X. Каждая графическая оконная система (MS Windows, X и т.п.) предоставляет платформенно-определенный интерфейс между OpenGL и системой, чтобы обеспечивать отображение GL контекста в окнах.

Страницы руководства OpenGL.

XFree86 идет только со страницами руководства glX. Если вы хотите полностью установить страницы руководства OpenGL, вы должны получить их сами.

ftp://sgigate.sgi.com:~ftp/pub/opengl/doc/

Эти страницы руководства представлены в формате, готовом для распаковки в каталог XFree86, см. ниже.

Mesa 3.3.

MesaLib-3.3.tar.gz

http://mesa3d.sourceforge.net/

Обеспечивает libGLU (GL Utility). GLU - библиотека предоставляет высокоуровневые функции для приложений. libGL.so - непосредственно OpenGL, является низкоуровневой библиотекой. Большинство приложений используют высокоуровневые библиотеки, подобные GLU.

Если у вас уже есть XFree86 4, необходимо установить библиотеку Mesa. GLU - стандартная часть большинства установок OpenGL и, как ожидается, она будет присутствовать в большинстве программ.

GLUT

glut-3.7.tar.gz

http://reality.sgi.com/mjk/glut3/

Glut обеспечивает графическую систему независимым интерфейсом между OpenGL и любой поддерживаемой графической системой. Например, в X Window скрываются подробности использования функций glX, при создании окна. Программисты могут один раз написать код и скомпилировать его для работы в MS Windows или X и т.п., при условии, что библиотека GLUT доступна на данной платформе.

Подобно GLU, GLUT - стандартная часть большинства установок OpenGL. Большинство примеров программ и даже некоторые приложения, сделаны с использованием libglut. Например, Руководство по программированию OpenGL (red book) использует Glut для своих примеров.

Вам нужно установить GLU и GLUT, если вы хотите иметь возможность компилировать большинство программ, которые можно свободно загрузить (исходный код). Некоторым программам могут даже быть необходимы эти библиотеки, если они связаны с ними динамически.

Qt

qt-x11-2.1.0.tar.gz или более новая версия

http://www.troll.no/

Qt - кросс-платформенная библиотека для создания GUI, которая позволяет легко создавать X приложения со стандартными элементами графического интерфейса (widget) - меню, полосы прокрутки, списки, флажки, кнопки, окна с MDI интерфесом и многие другие графические элементы. Используя Qt, программа может компилироваться в MS Windows и в X, без изменения кода. Это очень популярная GUI библиотека, и она использована для создания основных библиотек KDE (http://www.kde.org/).

Qt имеет расширение (qt/ententions/opengl) для OpenGL, которое обеспечивает создание OpenGL контекста в программах, написаных с помощью Qt. Она обеспечивает некоторую альтернативу GLUT и использует функции glX напрямую, плюс, добавляет полный доступ к qt элементам и кросс-платформенную переносимость.

Она полезна, если вы хотите компилировать или разрабатывать программы, основанные на Qt.

Драйверы NVIDIA.

http://www.nvidia.com/

Ядро должно быть по адресу: /lib/modules/2.2.16/video/NVdriver, а файлы libGL.so и libGLcore.so в каталоге /usr/lib/ и библиотека Mesa должна находится там же. libGL.so - OpenGL. Эти файлы являются средствами nvidia для аппаратного ускорения OpenGL.

XFree86 4.0.1, кажется, содержит ядро Mesa 3.3, однако в нем отсутствуют некоторые файлы libGLU*, которые требуют многие программы.


Установка XFree86

Если у вас уже есть установленная версия XFree86, вы можете переместить ее или удалить:

          cd /usr
          mv X11R6 X11R6-old
          cd /etc
          mv X11 X11-old
  

Если это расположение неправильно для вашего дистрибутива Linux, вы должны их найти - попробуйте посмотреть в /var


  cd /usr/src
  mkdir release
  cd release
  tar -xvzf X401src-1.tgz
  tar -xvzf X401src-2.tgz
  tar -xvzf X401src-3.tgz
  tar -xvzf doctools-1.2.tar.gz

  -- распаковка страниц руководства (фактически, glx страницы уже есть)
  tar -xvzf mangl.tar.Z
  tar -xvzf manglx.tar.Z
  tar -xvzf manglu.tar.Z
  

Файл должен быть отредактирован, чтобы позволить установить эти страницы руководства с остальной частью дистрибутива:

  cd xc/doc/man/GL
  Редактируйте файл: Imakefile
          SUBDIRS = glx gl glu
  

Когда вы распакуете файлы man*.tar.Z (см. выше), будут добавлены два новых каталога: gl и glu.


  cd /usr/src/release
  cd doctools-1.2
  make
  make install
  cd ..
  cd xc
  make World
  -- перед установкой убедитесь, что вы переместили или удалили прежнюю установку X
  make install
  make install.man
  

Когда X установлен и выполняется (позже), попробуйте использовать программу xman, чтобы просмотреть руководства gl,glx,glu и glut из секции 3.


Установка Mesa

Примечание: Она дает вам файлы libGLU*, которые отсутствуют в XFree86. Полностью деинсталлируйте все библиотеки Mesa, которые могут идти со Slackware:

          removepkg mesa
  
Процедуры установки различаются для разных дистрибутивов. Если нет никакого способа начисто удалить существующие библиотеки Mesa, тогда по крайней мере найдите, где они установлены: обычно в /usr или /usr/local. В примере ниже подразумевается, что библиотеки установлены в /usr. Установка над старой версией скорее всего безопасна. Ищите /usr/lib/libMesa* или /usr/local/lib/libMesa*


  cd /usr/src
  tar -xvzf MesaLib-3.3.tar.gz
  cd Mesa-3.3
  ./configure --prefix=/usr
  make
  make install
  

В этом месте, Mesa установила свою собственную версию подключаемого файла glx.h, заменив ту, которая была установлена с XFree86. Это вызовет проблемы с компиляцией некоторых программ, что можно исправить: скопируйте подключаемые файлы GL из каталога исходных текстов в каталог подключаемых файлов:

  cp /usr/src/release/xc/include/GL/*.h /usr/X11R6/include/GL
  


Установка драйверов Nvidia OpenGL


  -- удалите файлы libGL.*, которые идут с XFree86 / Mesa 3.3
  -- файлы nvidia libGL.* должны заменить их
  cd /usr/X11R6/lib
  rm libGL.*
  cd modules/extensions
  rm libGL*
  rm libglx*
  cd /usr/lib
  rm libGL.*

  cd /usr/src
  tar -xvzf NVIDIA_kernel-0.9-4.tar.gz
  tar -xvzf NVIDIA_GLX-0.9-4.xfree401.tar.gz
  cd NVIDIA_kernel-0.9-4
  make
  cd ..
  cd NVIDIA_GLX-0.9-4.1
  make
  cd

  -- создайте основной файл конфигурации X - xf86config
  cd /etc/X11
  Вы должны отредактировать XF86Config и записать следущие строки:
  vi XF86Config
          Load "dri"
          driver "nvidia"
          "1600x1200" (или ваше любимое разрешение)
          скопируйте шрифты TrueType из каталога шрифтов Windows
          и добавьте путь к этому каталогу

  -- примечание: /usr/include/GL - символическая ссылка для /usr/X11R6/include/GL

  

Определение "nvidia" для драйвера в XF86Config вступает в силу при каждом запуске startx. Но драйвер NVdriver должен загружаться при каждом запуске системы:

          insmod NVdriver
  

Вы можете разместить эту команду в одном из загрузочных файлов, например /etc/rc.d/rc.modules


Установка Qt


  cd /usr/local
  tar -xvzf qt-x11-2.1.0.tar.gz
  mv qt-2.1.0 qt
  cd qt
  

Проверьте qt/configs/linux-g++-shared и убедитесь, что там нет ключей содержащих слово Mesa, например -lMesaGL -lMesaGLU должны быть -lGL -lGLU. Прочитайте файл INSTALL об установке переменных окружения.


  ./configure
  make

  -- компиляция расширений opengl
  cd extensions/opengl/src

  Проверьте Makefile и убедитесь, что там не содержится слов Mesa.

  make
  ldconfig

  cd ../examples
  Попробуйте собрать и запустить примеры.
  


Установка GLUT

Установка GLUT имеет некоторые хитрости. Я не очень знаком с программой imake, которая используется для управления файлами Makefile. И я не совсем понял, как установить GLUT, туда куда я хотел (/usr/lib). Во любом случае, это можно сделать вручную:


  cd /usr/src
  tar -xvzf glut-3.7.tar.gz
  cd glut-3.7

  ЧИТАЙТЕ файл: README.linux
  cd linux
  ЧИТАЙТЕ файл: README
  cp Glut.cf ..
  cd ..
  Отредактируйте файл Glut.cf: удалите все ссылки на Mesa.
  Если необходимо, то замените любые -lMesaGL -lMesaGLU на -lGL -lGLU.
  В частности, замените:
          OPENGL = $(TOP)/../lib/libMesaGL.so
          GLU = $(TOP)/../lib/libMesaGLU.so
  на:
          OPENGL = -lGL
          GLU = -lGLU

  ./mkmkfiles.imake
  cd lib/glut
  cp /usr/src/glut-3.7/linux/Makefile .
  Отредактируйте файл Makefile: удалите все ссылки на Mesa.
  Если необходимо, то замените любые -lMesaGL -lMesaGLU на -lGL -lGLU.
  В частности замените:
          OPENGL = $(TOP)/../lib/libMesaGL.so
          GLU = $(TOP)/../lib/libMesaGLU.so
  на:
          OPENGL = -lGL
          GLU = -lGLU

  make
  ln -s libglut.so.3.7 libglut.so
  ln -s libglut.so.3.7 libglut.so.3
  cp -d libglut.* /usr/lib
  cd ..
  cd gle
  -- соберите libgle, как общедоступную библиотеку
  gcc -shared -o libgle.so.3.7 *.o
  ln -s libgle.so.3.7 libgle.so
  ln -s libgle.so.3.7 libgle.so.3
  cp -d libgle.* /usr/lib
  cd ..
  cd mui
  -- соберите libmui, как общедоступную библиотеку
  gcc -shared -o libmui.so.3.7 *.o
  ln -s libmui.so.3.7 libmui.so
  ln -s libmui.so.3.7 libmui.so.3
  cp -d libmui.* /usr/lib
  cd ../man
  make install.man
  ldconfig

  cd ../progs/demos/ideas
  make
  ./ideas
  -- проверьте компиляцию примеров
  -- смотрите, какие библиотеки должны быть использованы (-lX11 ...) в
  -- файлах Makefile. Программа Qt tmake доступна на  www.troll.no,
  -- это более быстрый способ сделать Makefile, но вам нужно будет отредактировать его
  -- и добавить -l, если необходимо.
  


Заключительные комментарии

К данному моменту вы должны иметь полностью функциональную систему OpenGL для выполнения и разработки OpenGL приложений.