VTK:How I mangled Mesa: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
m (Reverted edits by XftS6b (Talk); changed back to last version by Boll0107)
 
(13 intermediate revisions by 6 users not shown)
Line 1: Line 1:
This is a header
====Abstract====
This document describes the steps I took to build VTK (Visualization toolkit) with support the mangled Mesa libraries for VTK 4. '''*NEW*''' For details on mangling mesa for VTK 5.0 and Mesa 6.5.3, follow this link [[http://gorerle.com/vlab-wiki/index.php?title=Offscreen_Vtk#.5BUPDATED.5D_MangledMesa_6.5.3_and_Vtk_5.0.3_-_5.2F16.2F2007]]


Table of Contents
====Introduction====
 
Introduction
Get the software
Mangling and Building Mesa
Configuring and Building VTK
Testing Offscreen Rendering
 
Abstract
This document describes the steps I took to build VTK (Visualization toolkit) with support the mangled Mesa libraries.
Introduction
If you use VTK and you're like me, you sometimes like to do your rendering offscreen in the software, right? Offscreen rendering is useful for a number of things, such as batch processing, parallel processing, and remote processing. VTK has functionality to perform these sorts of operations through the Mesa 3D library. Unfortunately, documentation on how to build VTK and enable support for offscreen rendering is sparse and incomplete. I will attempt to provide a clear explanation from start to finish how to setup VTK with support for Mesa for offscreen rendering.
If you use VTK and you're like me, you sometimes like to do your rendering offscreen in the software, right? Offscreen rendering is useful for a number of things, such as batch processing, parallel processing, and remote processing. VTK has functionality to perform these sorts of operations through the Mesa 3D library. Unfortunately, documentation on how to build VTK and enable support for offscreen rendering is sparse and incomplete. I will attempt to provide a clear explanation from start to finish how to setup VTK with support for Mesa for offscreen rendering.
Get the software
====Get the software====
First move to the directory in which you plan to do the installing. I like using /usr/local/src
First move to the directory in which you plan to do the installing. I like using /usr/local/src
and installing as the root user.


su -  
  su -  
cd /usr/local/src
  cd /usr/local/src


Download VTK and Mesa from their respective sources. You can get these libraries from the commandline using wget:
Download VTK and Mesa from their respective sources. You can get these libraries from the commandline using wget:


wget http://www.vtk.org/files/release/4.2/VTK-4.2-LatestRelease.tar.gz
  wget http://www.vtk.org/files/release/4.2/moved_to_sourceforge/VTK-4.2-LatestRelease.tar.gz
wget http://unc.dl.sourceforge.net/sourceforge/mesa3d/MesaDemos-5.0.2.tar.gz
  wget http://internap.dl.sourceforge.net/sourceforge/mesa3d/MesaLib-5.0.2.tar.gz


Keep in mind that these files are from December 9, 2003. You may have to look somewhere else to get them in the future. The next step is to extract the archives. I rename VTK to vtk-4.2.3 to keep it separate from my other vtk source installations.
Keep in mind that these files are from January 2005. You may have to look somewhere else to get them in the future. The next step is to extract the archives. I rename VTK to vtk-4.2.3 to keep it separate from my other vtk source installations.


tar xzvf MesaLib-5.0.2.tar.gz
  tar xzvf MesaLib-5.0.2.tar.gz
tar xzvf VTK-4.2-LatestRelease.tar.gz && mv VTK vtk-4.2.3
  tar xzvf VTK-4.2-LatestRelease.tar.gz && mv VTK vtk-4.2.3


Mangling and Building Mesa
====Mangling and Building Mesa====


First I build Mesa. At this point, it's crucial that you understand what you're really doing and this is the part that's not really explained anywhere. Mesa will conflict with whatever rendering library you're using, so you can't install it on your system. More specifically, you can't make a dynamic (shared) library out of it. Confusion would result when linking a library or executable program that depends on OpenGL; The linker would be unclear whether to use Mesa or whatever is already installed on the system since Mesa symbols look like OpenGL.
First I build Mesa. At this point, it's crucial that you understand what you're really doing and this is the part that's not really explained anywhere. Mesa will conflict with whatever rendering library you're using, so you can't install it on your system. More specifically, you can't make a dynamic (shared) library out of it. Confusion would result when linking a library or executable program that depends on OpenGL; The linker would be unclear whether to use Mesa or whatever is already installed on the system since Mesa symbols look like OpenGL.
Line 35: Line 27:
Therefore, Mesa must be complied and linked into our VTK libraries staticly. Once VTK is built you can toss the Mesa stuff because all the code is included in the VTK library itself instead of residing in its own separate, linkable library. To avoiding Mesa having the same symbols as OpenGL I set a flag that will prepend each function name with an 'm'.
Therefore, Mesa must be complied and linked into our VTK libraries staticly. Once VTK is built you can toss the Mesa stuff because all the code is included in the VTK library itself instead of residing in its own separate, linkable library. To avoiding Mesa having the same symbols as OpenGL I set a flag that will prepend each function name with an 'm'.


cd Mesa-5.0.2
  cd Mesa-5.0.2


With your favorite text editing program open Make-config and find the section labeled "linux-static" and make the following changes:
With your favorite text editing program open Make-config and find the section labeled "linux-static" (or with Mesa > 6.2.1 take file configs/linux-static) and make the following changes:


GL_LIB = libMGL.a
  GL_LIB = MGL
OSMESA_LIB = libMOSMesa.a
  OSMESA_LIB = MOSMesa
CFLAGS = -DUSE_MGL_NAMESPACE ...
  CFLAGS = -DUSE_MGL_NAMESPACE ...
CCFLAGS = -DUSE_MGL_NAMESPACE ...
  CXXFLAGS = -DUSE_MGL_NAMESPACE ...


The file contains key = value mappings for the Mesa build. I just rename libGL.a to libMGL.a and libOSMesa.a to libMOSMesa.a and insert the -DUSE_MGL_NAMESPACE into CFLAGS and CCFLAGS before the rest of the flags. Next I build Mesa:
The file contains key = value mappings for the Mesa build. I just rename libGL.a to libMGL.a and libOSMesa.a to libMOSMesa.a and insert the -DUSE_MGL_NAMESPACE into CFLAGS and CXXFLAGS before the rest of the flags. Next I build Mesa:


make -f Makefile.X11 realclean
  make -f Makefile.X11 realclean
make -f Makefile.X11 linux-static
  make -f Makefile.X11 linux-static


Once you are done building Mesa, you can confirm the files were actually built by checking the lib directory
Once you are done building Mesa, you can confirm the files were actually built by checking the lib directory


ls lib
  ls lib


You should see four files in this directory: libGLU.a libGLw.a libMGL.a libMOSMesa.a . If you see these four files then congratulations, you've succeeded and you're finished with Mesa.
You should see four files in this directory: libGLU.a libGLw.a libMGL.a libMOSMesa.a . If you see these four files then congratulations, you've succeeded and you're finished with Mesa.
Line 57: Line 49:
Now that Mesa is done, move on to VTK. I like to build vtk in a separate directory from where I extracted the source.
Now that Mesa is done, move on to VTK. I like to build vtk in a separate directory from where I extracted the source.


cd ../
  cd ../
mkdir vtk-bin
  mkdir vtk-bin
cd vtk-bin
  cd vtk-bin


Configure VTK using CMake. Recall that I renamed my VTK source directory at the beginning. Just use whatever name your VTK source directory is set to.
Configure VTK using CMake. Recall that I renamed my VTK source directory at the beginning. Just use whatever name your VTK source directory is set to.


ccmake ../vtk-4.2.3
  ccmake ../vtk-4.2.3


You should now be in the CMake ncurses interface. Go ahead and toggle the advanced options to on and turn on the following options:
You should now be in the CMake ncurses interface. Go ahead and toggle the advanced options to on and turn on the following options:


VTK_WRAP_TCL        : ON
  VTK_WRAP_TCL        : ON
VTK_USE_MANGLED_MESA : ON
  VTK_USE_MANGLED_MESA : ON


Run configure and you will see four new options appear related to mangling mesa. They are unset, so you will need to set them to the Mesa you just built.
Run configure and you will see four new options appear related to mangling mesa. They are unset, so you will need to set them to the Mesa you just built.


MANGLED_MESA_INCLUDE_DIR    : /usr/local/src/Mesa-5.0.2/include
  MANGLED_MESA_INCLUDE_DIR    : /usr/local/src/Mesa-5.0.2/include
MANGLED_MESA_LIB            : /usr/local/src/Mesa-5.0.2/lib/libMGL.a
  MANGLED_MESA_LIB            : /usr/local/src/Mesa-5.0.2/lib/libMGL.a
MANGLED_OSMESA_INCLUDE_DIR  : /usr/local/src/Mesa-5.0.2/include
  MANGLED_OSMESA_INCLUDE_DIR  : /usr/local/src/Mesa-5.0.2/include
MANGLED_OSMESA_LIB          : /usr/local/src/Mesa-5.0.2/lib/libMOSMesa.a
  MANGLED_OSMESA_LIB          : /usr/local/src/Mesa-5.0.2/lib/libMOSMesa.a


Now run generate to write out the VTK Makefiles. Now it's time to compile and link VTK:
Now run generate to write out the VTK Makefiles. Now it's time to compile and link VTK:


make clean  &&  make  &&  make install
  make clean  &&  make  &&  make install
 
VTK will do its thing. Go get some ice cream and take a break -- this part takes a while.


VTK will do its thang. Go get some ice cream and take a break -- this part takes a while.
====Testing Offscreen Rendering====
Testing Offscreen Rendering
Now that you've installed your new mangled mesa powered VTK, you should probably test to see if it worked. Ironically, Kitware wrote their test program in Tcl which means that you have to run it with wish or vtk , which in turn means that you have to be running the X Window System, in which you really wouldn't have to use offscreen rendering in anyway. Got it? Too bad. Try the following:
Now that you've installed your new mangled mesa powered VTK, you should probably test to see if it worked. Ironically, Kitware wrote their test program in Tcl which means that you have to run it with wish or vtk , which in turn means that you have to be running the X Window System, in which you really wouldn't have to use offscreen rendering in anyway. Got it? Too bad. Try the following:


vtk /usr/local/src/vtk-4.2.3/Examples/MangledMesa/Tcl/OffscreenCone.tcl
  vtk /usr/local/src/vtk-4.2.3/Examples/MangledMesa/Tcl/OffscreenCone.tcl


This program should run without crashing and it should NOT draw anything on the screen. Once it quietly finishes, look for a file in the current working directory called MangledMesaTest.png . Take a look at it. If you have ImageMagick, just type:
This program should run without crashing and it should NOT draw anything on the screen. Once it quietly finishes, look for a file in the current working directory called MangledMesaTest.png . Take a look at it. If you have ImageMagick, just type:


display MangledMesaTest.png
  display MangledMesaTest.png


If it's a picture of a sideways cone, congratulations you're now a member of the VTK Builder elite!
If it's a picture of a sideways cone, congratulations you're now a member of the VTK Builder elite!
{{VTK/Template/Footer}}

Latest revision as of 18:43, 11 June 2007

Abstract

This document describes the steps I took to build VTK (Visualization toolkit) with support the mangled Mesa libraries for VTK 4. *NEW* For details on mangling mesa for VTK 5.0 and Mesa 6.5.3, follow this link [[1]]

Introduction

If you use VTK and you're like me, you sometimes like to do your rendering offscreen in the software, right? Offscreen rendering is useful for a number of things, such as batch processing, parallel processing, and remote processing. VTK has functionality to perform these sorts of operations through the Mesa 3D library. Unfortunately, documentation on how to build VTK and enable support for offscreen rendering is sparse and incomplete. I will attempt to provide a clear explanation from start to finish how to setup VTK with support for Mesa for offscreen rendering.

Get the software

First move to the directory in which you plan to do the installing. I like using /usr/local/src and installing as the root user.

  su - 
  cd /usr/local/src

Download VTK and Mesa from their respective sources. You can get these libraries from the commandline using wget:

  wget http://www.vtk.org/files/release/4.2/moved_to_sourceforge/VTK-4.2-LatestRelease.tar.gz
  wget http://internap.dl.sourceforge.net/sourceforge/mesa3d/MesaLib-5.0.2.tar.gz

Keep in mind that these files are from January 2005. You may have to look somewhere else to get them in the future. The next step is to extract the archives. I rename VTK to vtk-4.2.3 to keep it separate from my other vtk source installations.

  tar xzvf MesaLib-5.0.2.tar.gz
  tar xzvf VTK-4.2-LatestRelease.tar.gz && mv VTK vtk-4.2.3

Mangling and Building Mesa

First I build Mesa. At this point, it's crucial that you understand what you're really doing and this is the part that's not really explained anywhere. Mesa will conflict with whatever rendering library you're using, so you can't install it on your system. More specifically, you can't make a dynamic (shared) library out of it. Confusion would result when linking a library or executable program that depends on OpenGL; The linker would be unclear whether to use Mesa or whatever is already installed on the system since Mesa symbols look like OpenGL.

Therefore, Mesa must be complied and linked into our VTK libraries staticly. Once VTK is built you can toss the Mesa stuff because all the code is included in the VTK library itself instead of residing in its own separate, linkable library. To avoiding Mesa having the same symbols as OpenGL I set a flag that will prepend each function name with an 'm'.

  cd Mesa-5.0.2

With your favorite text editing program open Make-config and find the section labeled "linux-static" (or with Mesa > 6.2.1 take file configs/linux-static) and make the following changes:

  GL_LIB = MGL
  OSMESA_LIB = MOSMesa
  CFLAGS = -DUSE_MGL_NAMESPACE ...
  CXXFLAGS = -DUSE_MGL_NAMESPACE ...

The file contains key = value mappings for the Mesa build. I just rename libGL.a to libMGL.a and libOSMesa.a to libMOSMesa.a and insert the -DUSE_MGL_NAMESPACE into CFLAGS and CXXFLAGS before the rest of the flags. Next I build Mesa:

  make -f Makefile.X11 realclean
  make -f Makefile.X11 linux-static

Once you are done building Mesa, you can confirm the files were actually built by checking the lib directory

  ls lib

You should see four files in this directory: libGLU.a libGLw.a libMGL.a libMOSMesa.a . If you see these four files then congratulations, you've succeeded and you're finished with Mesa. Configuring and Building VTK Now that Mesa is done, move on to VTK. I like to build vtk in a separate directory from where I extracted the source.

  cd ../
  mkdir vtk-bin
  cd vtk-bin

Configure VTK using CMake. Recall that I renamed my VTK source directory at the beginning. Just use whatever name your VTK source directory is set to.

  ccmake ../vtk-4.2.3

You should now be in the CMake ncurses interface. Go ahead and toggle the advanced options to on and turn on the following options:

  VTK_WRAP_TCL         : ON
  VTK_USE_MANGLED_MESA : ON

Run configure and you will see four new options appear related to mangling mesa. They are unset, so you will need to set them to the Mesa you just built.

  MANGLED_MESA_INCLUDE_DIR    : /usr/local/src/Mesa-5.0.2/include
  MANGLED_MESA_LIB            : /usr/local/src/Mesa-5.0.2/lib/libMGL.a
  MANGLED_OSMESA_INCLUDE_DIR  : /usr/local/src/Mesa-5.0.2/include
  MANGLED_OSMESA_LIB          : /usr/local/src/Mesa-5.0.2/lib/libMOSMesa.a

Now run generate to write out the VTK Makefiles. Now it's time to compile and link VTK:

  make clean  &&  make  &&  make install

VTK will do its thing. Go get some ice cream and take a break -- this part takes a while.

Testing Offscreen Rendering

Now that you've installed your new mangled mesa powered VTK, you should probably test to see if it worked. Ironically, Kitware wrote their test program in Tcl which means that you have to run it with wish or vtk , which in turn means that you have to be running the X Window System, in which you really wouldn't have to use offscreen rendering in anyway. Got it? Too bad. Try the following:

  vtk /usr/local/src/vtk-4.2.3/Examples/MangledMesa/Tcl/OffscreenCone.tcl

This program should run without crashing and it should NOT draw anything on the screen. Once it quietly finishes, look for a file in the current working directory called MangledMesaTest.png . Take a look at it. If you have ImageMagick, just type:

  display MangledMesaTest.png

If it's a picture of a sideways cone, congratulations you're now a member of the VTK Builder elite!




VTK: [Welcome | Site Map]