Index: /GTP-Internal/trunk/Lib/Vis/work/README_ONLINE.txt
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/README_ONLINE.txt	(revision 629)
+++ /GTP-Internal/trunk/Lib/Vis/work/README_ONLINE.txt	(revision 629)
@@ -0,0 +1,46 @@
+How to install the Visibility Work Package
+
+
+1) Requirements: 
+   WindowsXP
+   Ogre 1.03 for vs 7.1
+   Ogre Dependencies
+   svn
+
+2) check out gametools repository
+   in the following it is assumed that your repository is located in D:\gametools (not required, just replace your path)
+
+   the current stable version is located in D:\gametools\branches\0.3
+
+2) add following environment variables:
+   OGRE_PATH: directory where ogre.sln is located
+
+3) copy VUT\work\ogre_changes into OGRE_PATH directory (only applies to version 1.03!!!!)
+
+4) Set configuration of Ogre soluation to release. add preprocessor flag GTP_VISIBILITY_MODIFIED_OGRE to following projects:
+   Plugin_OctreeSceneManager
+   RenderSystem_GL
+   RenderSystem_Direct9
+   RenderSystem_Direct7
+   OgreMain
+   GuiRenderer
+   
+   Also add the flag to the example projects you want to use
+
+5) Add following resources to OGRE_PATH\Samples\Common\bin\Release\resource.cfg:
+
+   FileSystem=D:\gametools\trunk\VUT\Ogre\resources\materials\scripts
+   FileSystem=D:\gametools\trunk\VUT\Ogre\resources\materials\textures
+   FileSystem=D:\gametools\trunk\VUT\Ogre\resources\models
+   FileSystem=D:\gametools\trunk\VUT\Ogre\resources\models\trees
+   FileSystem=D:\gametools\trunk\VUT\Ogre\resources\overlays
+   FileSystem=D:\gametools\trunk\VUT\Ogre\resources\media
+
+6) Add Plugin_VisibilitySceneManager to OGRE_PATH\Samples\Common\bin\Release\Plugins.cfg
+   and comment out OctreeSceneManager
+
+7) Copy D:\gametools\trunk\VUT\Ogre\resources\terrain.cfg into OGRE_PATH\Samples\Common\bin\Release
+
+8) open scripts\GtpVisibility.sln and compile all
+
+9) start TerrainExampleApplication for testing
Index: /GTP-Internal/trunk/Lib/Vis/work/todo_occlusionculling.txt
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/todo_occlusionculling.txt	(revision 629)
+++ /GTP-Internal/trunk/Lib/Vis/work/todo_occlusionculling.txt	(revision 629)
@@ -0,0 +1,29 @@
+1) write into ogre forum
+2) mode_render does not do any change
+3) scenenode::_rendervisibleobjects already uses frustum culling
+4) implement for bsp trees
+5) improve mouse control (strave)
+6) cull camera for testing
+7) error when near plane crosses bounding volume
+8) bounding box should be not two parts
+9) implement z-buffer pass
+10) nice scene for dotscenemanager + terrainscenemanager
+11) ask about ogre changes
+12) preprocess: do not always destroy occlusion queries
+13) prevent multiple rendering of objects, scene nodes and hierarchy nodes
+14) learn to create terrains (heightmaps)
+15) work with maya
+16) occlusion culling + transparent materials, shadows!!
+17) minimize code for new scenemanager (macros?)
+18) make more flexible: callbacks
+19) find out how rotations happen
+20) investigate time coherence options (i.e., query only every nth frame
+21) möllers acceleration for frustum culling
+22) update so less code has to be replicated in terrainscenetraverser
+23) implement frustum test where intersect by near plane is considered
+24) tell ogre-people about changes
+25) check glfinish error
+26) also disable frustum culling on mouse click
+27) better comments
+28) setrendermode: change!!!
+29) problems with coherent & geometry not in leave
Index: /GTP-Internal/trunk/Lib/Vis/work/tools/replid
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/tools/replid	(revision 65)
+++ /GTP-Internal/trunk/Lib/Vis/work/tools/replid	(revision 65)
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+#$Id: replid,v 1.2 1999/11/06 21:23:19 bittner Exp $
+# Initially coding Jiri Bittner
+    
+if [ $# -lt 3 ]; then echo "Usage: replid strA strB file_list $1 $2"; fi
+
+STR1=$1
+STR2=$2
+
+shift
+shift
+FILES=`grep -l $STR1 $*`
+
+echo $FILES
+
+SEPARATORS='[^a-zA-Z0-9_\.]'
+BACKUPDIR="Backup"
+
+if [ ! -d $BACKUPDIR ]; then  mkdir $BACKUPDIR; fi
+
+for FILE in $FILES; do
+ echo "Replacing in $FILE"
+ cp $FILE $BACKUPDIR/$FILE
+ CMD='-e s/\('$SEPARATORS'\)'$STR1'\('$SEPARATORS'\)/\1'$STR2'\2/g -e  s/^'$STR1'\('$SEPARATORS'\)/'$STR2'\1/g  -e  s/\('$SEPARATORS'\)'$STR1'$/\1'$STR2'/g -e  s/^'$STR1'$/'$STR2'/g'
+# echo $CMD
+ sed $CMD < $BACKUPDIR/$FILE > $FILE.tmp
+ mv $FILE.tmp $FILE
+done
+
+
+
+
+
+
+
Index: /GTP-Internal/trunk/Lib/Vis/work/tools/batch_replace
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/tools/batch_replace	(revision 65)
+++ /GTP-Internal/trunk/Lib/Vis/work/tools/batch_replace	(revision 65)
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# $Id: brepl,v 1.2 1999/11/06 21:23:19 bittner Exp $
+# Script used to globaly replace identifiers in GOLEM on 6.11. 1999
+# Initially coding Jiri Bittner
+
+# some manual changed to the code were also neccesary
+# - stats.h members of classes CIntersections and CObjects (class name collisions)
+# - hfield.h member BoundingBox
+# - world.cpp environment strings (e.g. CBSP -> BSP)
+# ...
+
+    
+FILES=$*
+
+#replid  Vector3D Vector3 $FILES
+#replid  Visibility GtpVisibility $FILES
+#replid  SceneTraverser HierarchyInterface $FILES
+replid  Visibility GtpVisibilityPreprocessor $FILES
+
+
Index: /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivmanualmeshloader.h
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivmanualmeshloader.h	(revision 193)
+++ /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivmanualmeshloader.h	(revision 193)
@@ -0,0 +1,24 @@
+#ifndef __IVManualMeshLoader_H__
+#define __IVManualMeshLoader_H__
+
+
+#include "Ogre.h"
+#include "ivmeshdata.h"
+
+
+class __declspec(dllexport) IVManualMeshLoader: public Ogre::ManualResourceLoader
+{
+	public:
+		IVManualMeshLoader();
+		IVManualMeshLoader(IVMeshData *mData);
+		~IVManualMeshLoader(); 
+
+		void loadResource(Ogre::Resource *resource);
+
+		Ogre::AxisAlignedBox *getBoundingBox();
+	private:
+		IVMeshData *data;
+
+};
+
+#endif
Index: /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivreader.h
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivreader.h	(revision 187)
+++ /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivreader.h	(revision 187)
@@ -0,0 +1,130 @@
+#ifndef __mIVReader_H__
+#define __mIVReader_H__
+
+
+#include "ivnode.h"
+#include "ivmeshdata.h"
+#include "ivmanualmeshloader.h"
+#include "ogre.h"
+
+#define COMMENTCHAR '#'
+#define BLOCKSIZE 150
+#define BUFFERSIZE 256
+
+
+static const int validIVHeaderCnt = 2;
+
+static const char *validIVHeader[2] = {
+    { "#Inventor V2.1 ascii\n" },
+	{ "#VRML V1.0 ascii\n" },
+};
+
+
+enum IVTokenType
+{
+	IV_TOKEN_INVALID = -1,
+	IV_TOKEN_STRING = 0,
+	IV_TOKEN_INT = 1,
+	IV_TOKEN_REAL = 2,
+	IV_TOKEN_BRACEOPEN = 3,				// {
+	IV_TOKEN_BRACECLOSE = 4,			// }
+	IV_TOKEN_BRACKETOPEN = 5,			// [
+	IV_TOKEN_BRACKETCLOSE = 6,			// ]
+	IV_TOKEN_PARENTHESISOPEN = 7,		// (
+	IV_TOKEN_PARENTHESISCLOSE = 8,		// )
+	IV_TOKEN_DEF = 9,					// DEF
+	IV_TOKEN_USE = 10,					// USE
+};
+
+class __declspec(dllexport) IVMeshListNode
+{
+	public:
+		IVMeshListNode(std::string name, IVManualMeshLoader *loader);
+		~IVMeshListNode();
+
+		void attachNewNode(std::string name, IVManualMeshLoader *loader);
+
+		IVManualMeshLoader *getManualMeshLoader(std::string name);
+
+		IVMeshListNode *next;
+
+	private:
+		std::string name;
+		IVManualMeshLoader *loader;
+};
+
+class __declspec(dllexport) IVDefListNode
+{
+	public:
+		IVDefListNode(std::string name, IVNode *node);
+		~IVDefListNode();
+
+		void attachNewNode(std::string name, IVNode *node);
+
+		IVNode *getDef(std::string name);
+
+		IVDefListNode *next;
+
+	private:
+		std::string name;
+		IVNode *node;
+
+};
+
+class __declspec(dllexport) IVReader
+{
+	public:
+		IVReader();
+		~IVReader();
+
+		void setLog(Ogre::Log *IVLog = NULL);
+
+		bool loadFile(const char* filename);
+		void print();
+//		IVNode *getNode(const char* name);
+
+
+		void buildTree(Ogre::SceneManager *sceneMgr, Ogre::SceneNode *sceneNodeRoot);
+
+		void collapse();
+
+		static std::string intToStr(int num);
+		static std::string realToStr(Ogre::Real num);
+		
+		static Ogre::Log *IVLog;
+
+	private:
+		bool checkHeader(const char *string);
+		char buf[BUFFERSIZE];
+		int bufOffset;
+		bool getNextElement(char *token, IVTokenType *type);
+		void classify(char *token, IVTokenType *type);
+
+		bool isSpace(char c);
+		bool isNewline(char c);
+		bool eof;
+		bool isDigit(char c);
+		bool isHexDigit(char c);
+
+		IVNode *root;
+		FILE* infile;
+
+		static IVMeshListNode *meshList;
+		static void addMeshToList(std::string name, IVManualMeshLoader *loader);
+		
+		static int instanceCnt;
+
+		int treeCnt, nodeCnt, matCnt;
+		char *fileName;
+
+		Ogre::Entity *createEntity(Ogre::SceneManager* sceneMgr, std::string name, IVMeshData *mData, Ogre::Vector3 *translation = NULL);
+
+		void buildTree(Ogre::SceneManager *sceneMgr, Ogre::SceneNode *sceneNodeRoot, IVNode *mIVReaderoot, IVMeshData *mData = NULL, Ogre::Material *material = NULL);
+
+		IVDefListNode *defList;
+		void addDefToList(std::string name, IVNode *node);
+
+};
+
+
+#endif
Index: /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivnode.h
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivnode.h	(revision 183)
+++ /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivnode.h	(revision 183)
@@ -0,0 +1,59 @@
+#ifndef __IVNode_H__
+#define __IVNode_H__
+
+
+#include <string.h>
+#include <Ogre.h>
+
+enum IVType
+{
+	IV_INVALID = -1,
+	IV_STRING = 0,
+	IV_INT = 1,
+	IV_REAL = 2
+};
+
+
+class IVField
+{
+public:
+	IVField();
+	~IVField();
+
+	char *name;
+	void *value;
+	IVType typ;
+	int cnt;
+	IVField *next;
+};
+
+class __declspec(dllexport) IVNode
+{
+	public:
+		IVNode();
+		IVNode(const char *s);
+		~IVNode();
+
+		void print(int ident=0);
+		void attachNode(IVNode *child);
+		void addField(const char *name, char *value);
+		void addField(const char *name, void *value, int cnt, IVType typ);
+
+		IVNode *getParent() { return parent; }
+		char *getName() { return name; }
+		IVNode *getNodeRecursive(const char *name);
+		IVNode *getNextChildNode(bool reset = false);
+		IVField *getField(const char *name);
+		void *getField(const char *name, IVType *typ, int *cnt);
+
+	private:
+		char *name;
+		IVField *fields;
+		IVNode *parent;
+		IVNode *children;
+		IVNode *next;
+
+		IVNode *actual;
+};
+
+#endif
Index: /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivmeshdata.h
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivmeshdata.h	(revision 187)
+++ /GTP-Internal/trunk/Lib/Vis/work/IVReader/include/ivmeshdata.h	(revision 187)
@@ -0,0 +1,43 @@
+#ifndef __IVMeshData_H__
+#define __IVMeshData_H__
+
+
+#include <Ogre.h>
+
+enum mIVReaderenderOperationType
+{
+	IV_ROT_INVALID = -1,
+	IV_ROT_TRIANGLE_STRIP = 1,
+	IV_ROT_TRIANGLE_LIST = 3,
+	IV_ROT_FACE_SET = 4,
+};
+
+class __declspec(dllexport) IVMeshData
+{
+	public:	
+		IVMeshData();
+		~IVMeshData();
+
+		IVMeshData *expand();
+
+		void collapse();
+		
+		Ogre::Real *vertices, *normals, *texCoords, *indices, *normalIndices, *texCoordIndices;
+		int vcnt, ncnt, tcnt, icnt, nicnt, ticnt;
+		mIVReaderenderOperationType roType;
+		Ogre::AxisAlignedBox *boundingBox;
+
+	private:
+		int getSeparatorCnt(Ogre::Real *data, int end);
+
+		Ogre::Real *expandTriangleStripIndices(Ogre::Real *indices, int icnt, int *icntOut);
+		Ogre::Real *expandFaceSetIndices(Ogre::Real *indices, int icnt, int *icntOut);
+
+		int getNextFaceSize(int start);
+
+		Ogre::AxisAlignedBox *calcBoundingBox();
+
+
+};
+
+#endif
Index: /GTP-Internal/trunk/Lib/Vis/work/IVReader/scripts/IVReader.vcproj
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/IVReader/scripts/IVReader.vcproj	(revision 343)
+++ /GTP-Internal/trunk/Lib/Vis/work/IVReader/scripts/IVReader.vcproj	(revision 343)
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="IVReader"
+	ProjectGUID="{7319E499-473D-4CE5-9983-725D6E68A55D}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="Debug"
+			ConfigurationType="2"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;IVREADER_EXPORTS"
+				MinimalRebuild="TRUE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				UsePrecompiledHeader="3"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="4"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)/IVReader.dll"
+				LinkIncremental="2"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile="$(OutDir)/IVReader.pdb"
+				SubSystem="2"
+				ImportLibrary="$(OutDir)/IVReader.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="..\lib\$(ConfigurationName)"
+			IntermediateDirectory="..\obj\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="&quot;$(OGRE_PATH)\Dependencies\include\CEGUI&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include&quot;;&quot;$(OGRE_PATH)\OgreMain\include&quot;;&quot;$(OGRE_PATH)\Dependencies\include&quot;;&quot;$(OGRE_PATH)\Samples\Common\include&quot;;..\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;IVREADER_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="OgreMain.lib CEGUIBase.lib OgreGUIRenderer.lib"
+				OutputFile="$(OutDir)/IVReader.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="&quot;$(OGRE_PATH)\OgreMain\lib\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib&quot;;&quot;..\..\GtpVisibility\lib\$(ConfigurationName)&quot;;&quot;..\..\lib\$(ConfigurationName)&quot;;&quot;..\lib\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\Dependencies\lib\$(ConfigurationName)&quot;"
+				GenerateDebugInformation="TRUE"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				ImportLibrary="$(OutDir)/IVReader.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy $(OutDir)\$(TargetFileName) $(OGRE_PATH)\Samples\Common\bin\$(ConfigurationName)"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+			<File
+				RelativePath="..\src\ivmanualmeshloader.cpp">
+			</File>
+			<File
+				RelativePath="..\src\ivmeshdata.cpp">
+			</File>
+			<File
+				RelativePath="..\src\ivnode.cpp">
+			</File>
+			<File
+				RelativePath="..\src\ivreader.cpp">
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+			<File
+				RelativePath="..\include\ivmanualmeshloader.h">
+			</File>
+			<File
+				RelativePath="..\include\ivmeshdata.h">
+			</File>
+			<File
+				RelativePath="..\include\ivnode.h">
+			</File>
+			<File
+				RelativePath="..\include\ivreader.h">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Index: /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivmanualmeshloader.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivmanualmeshloader.cpp	(revision 187)
+++ /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivmanualmeshloader.cpp	(revision 187)
@@ -0,0 +1,154 @@
+#include "ivmanualmeshloader.h"
+#include "ivreader.h"
+
+IVManualMeshLoader::IVManualMeshLoader()
+{
+	data = NULL;
+}
+
+
+IVManualMeshLoader::IVManualMeshLoader(IVMeshData *mData)
+{
+	data = mData;
+/*	data = new IVMeshData();
+	if ((mData->indices != NULL) && (mData->icnt > 0))
+	{
+		data->icnt = mData->icnt;
+		data->indices = new Ogre::Real[mData->icnt];
+		memcpy(data->indices, mData->indices, mData->icnt*sizeof(Ogre::Real));
+	}
+	if ((mData->vertices != NULL) && (mData->vcnt > 0))
+	{
+		data->vcnt = mData->vcnt;
+		data->vertices = new Ogre::Real[mData->vcnt];
+		memcpy(data->vertices, mData->vertices, mData->vcnt*sizeof(Ogre::Real));
+	}
+	if ((mData->normals != NULL) && (mData->vcnt > 0))
+	{
+		data->ncnt = mData->ncnt;
+		data->normals = new Ogre::Real[mData->ncnt];
+		memcpy(data->normals, mData->normals, mData->ncnt*sizeof(Ogre::Real));
+	}
+	if ((mData->texCoords != NULL) && (mData->tcnt > 0))
+	{
+		data->tcnt = mData->tcnt;
+		data->texCoords = new Ogre::Real[mData->tcnt];
+		memcpy(data->texCoords, mData->texCoords, mData->tcnt*sizeof(Ogre::Real));
+	}
+	*/
+}
+
+IVManualMeshLoader::~IVManualMeshLoader()
+{
+/*	if (data != NULL)
+	{
+		if (data->vertices != NULL)		delete [] data->vertices;
+		if (data->normals != NULL)		delete [] data->normals;
+		if (data->texCoords != NULL)	delete [] data->texCoords;
+		if (data->indices != NULL)		delete [] data->indices;
+		delete data;
+	}
+	*/
+	if (data != NULL)
+	{
+		data->collapse();
+		delete data;
+	}
+}
+
+
+Ogre::AxisAlignedBox *IVManualMeshLoader::getBoundingBox()
+{
+	return data->boundingBox;
+}
+
+void IVManualMeshLoader::loadResource(Ogre::Resource *resource)
+{
+	using namespace Ogre;
+	Mesh *pMesh = (Mesh *) resource;
+
+
+	Vector3 translation = data->boundingBox->getCenter();
+
+	bool nOk = ((data->normals != NULL) && (data->ncnt > 0));
+	bool tOk = ((data->texCoords != NULL) && (data->tcnt > 0));
+	
+	pMesh->sharedVertexData = new VertexData(); 
+
+	VertexDeclaration* vertexDecl = pMesh->sharedVertexData->vertexDeclaration; 
+
+	size_t currOffset = 0; 
+	vertexDecl->addElement(0, currOffset, VET_FLOAT3, VES_POSITION); 
+	currOffset += VertexElement::getTypeSize(VET_FLOAT3); 
+	if (nOk)
+	{
+		vertexDecl->addElement(0, currOffset, VET_FLOAT3, VES_NORMAL); 
+		currOffset += VertexElement::getTypeSize(VET_FLOAT3); 
+	}
+    if (tOk)
+	{
+		vertexDecl->addElement(0, currOffset, VET_FLOAT2, VES_TEXTURE_COORDINATES); 
+		currOffset += VertexElement::getTypeSize(VET_FLOAT2); 
+	}
+
+	pMesh->sharedVertexData->vertexCount = data->vcnt/3; 
+	HardwareVertexBufferSharedPtr vbuf = 
+		HardwareBufferManager::getSingleton(). 
+		createVertexBuffer(vertexDecl->getVertexSize(0), pMesh->sharedVertexData->vertexCount, 
+			HardwareBuffer::HBU_STATIC_WRITE_ONLY, false); 
+
+	VertexBufferBinding* binding = pMesh->sharedVertexData->vertexBufferBinding; 
+	binding->setBinding(0, vbuf); 
+
+	Real* pVertices = static_cast<Real*>(vbuf->lock(HardwareBuffer::HBL_DISCARD)); 
+
+	int offset = 0, size = 3;
+	if (nOk) size += 3;
+	if (tOk) size += 2;
+	for (int i=0; i<data->vcnt/3; i++) 
+	{
+		pVertices[i*size]   = data->vertices[i*3]   - translation.x;
+		pVertices[i*size+1] = data->vertices[i*3+1] - translation.y;
+		pVertices[i*size+2] = data->vertices[i*3+2] - translation.z;
+
+		offset = 3;
+		if (nOk)
+		{
+			pVertices[i*size+offset] = data->normals[i*3];	 offset++;
+			pVertices[i*size+offset] = data->normals[i*3+1]; offset++;
+			pVertices[i*size+offset] = data->normals[i*3+2]; offset++;
+		}
+		if (tOk)
+		{
+			pVertices[i*size+offset] = data->texCoords[i*2];   offset++;
+			pVertices[i*size+offset] = -data->texCoords[i*2+1]; offset++;
+		}
+	}
+
+	vbuf->unlock(); 
+
+
+	SubMesh *pSub = pMesh->createSubMesh(); 
+	pSub->operationType = RenderOperation::OT_TRIANGLE_LIST; //;data->roType;
+	pSub->useSharedVertices = true; 
+
+	pSub->indexData->indexCount = data->icnt; 
+	pSub->indexData->indexBuffer = HardwareBufferManager::getSingleton(). 
+		createIndexBuffer(HardwareIndexBuffer::IT_16BIT, 
+			pSub->indexData->indexCount, HardwareBuffer::HBU_STATIC_WRITE_ONLY, false); 
+
+	HardwareIndexBufferSharedPtr ibuf = pSub->indexData->indexBuffer; 
+	unsigned short* pIndices = static_cast<unsigned short*>(ibuf->lock(HardwareBuffer::HBL_DISCARD)); 
+
+	for (i = 0; i < data->icnt; i++) pIndices[i] = data->indices[i];
+	
+	ibuf->unlock(); 
+		
+	AxisAlignedBox bb(data->boundingBox->getMinimum() - translation, data->boundingBox->getMaximum() - translation);
+	pMesh->_setBounds(bb); 
+	Real radius = data->boundingBox->getMinimum().length();
+	if (data->boundingBox->getMaximum().length() > radius) radius = data->boundingBox->getMaximum().length();
+	pMesh->_setBoundingSphereRadius(radius); 
+
+}
+
Index: /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivreader.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivreader.cpp	(revision 187)
+++ /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivreader.cpp	(revision 187)
@@ -0,0 +1,772 @@
+#include "IVReader.h"
+#include <string>
+#include <stdlib.h>
+#include <sstream>
+
+IVMeshListNode *IVReader::meshList = NULL;
+int IVReader::instanceCnt = 0;
+Ogre::Log *IVReader::IVLog = NULL;
+
+
+
+IVMeshListNode::IVMeshListNode(std::string name, IVManualMeshLoader *loader)
+{
+	this->name = name;
+	this->loader = loader;
+	next = NULL;
+}
+
+IVMeshListNode::~IVMeshListNode()
+{
+	if (loader != NULL) delete loader;
+}
+
+void IVMeshListNode::attachNewNode(std::string name, IVManualMeshLoader *loader)
+{
+	IVMeshListNode *help = this;
+
+	while (help->next != NULL) help = help->next;
+	help->next = new IVMeshListNode(name, loader);
+}
+
+IVManualMeshLoader *IVMeshListNode::getManualMeshLoader(std::string name)
+{
+	IVMeshListNode *help = this;
+	if (help->name == name) return help->loader;
+	while (help->next != NULL) 
+	{
+		help = help->next;
+		if (help->name == name) return help->loader;
+	}
+	return NULL;
+}
+
+IVDefListNode::IVDefListNode(std::string name, IVNode *node)
+{
+	this->name = name;
+	this->node = node;
+	next = NULL;
+}
+
+IVDefListNode::~IVDefListNode()
+{
+}
+
+void IVDefListNode::attachNewNode(std::string name, IVNode *node)
+{
+	IVDefListNode *help = this;
+
+	while (help->next != NULL) help = help->next;
+	help->next = new IVDefListNode(name, node);
+}
+
+IVNode *IVDefListNode::getDef(std::string name)
+{
+	IVDefListNode *help = this;
+	if (help->name == name) return help->node;
+	while (help->next != NULL) 
+	{
+		help = help->next;
+		if (help->name == name) return help->node;
+	}
+	return NULL;
+}
+
+IVReader::IVReader()
+{	
+	root = NULL; meshList = NULL; defList = NULL; fileName = NULL;
+	instanceCnt++;
+	IVLog = NULL;
+}
+
+IVReader::~IVReader()
+{
+	collapse();
+
+	instanceCnt--;
+	if (instanceCnt == 0) if (meshList != NULL) 
+	{	
+		IVMeshListNode *help = meshList, *delme = NULL;
+		while (help->next != NULL)
+		{
+			delme = help; help = help->next; delete delme;
+		}
+		delete help;
+	}
+}
+
+void IVReader::collapse()
+{
+	if (root != NULL) {	delete root; root = NULL; }
+	if (defList != NULL)
+	{	
+		IVDefListNode *help = defList, *delme = NULL;
+		while (help->next != NULL)
+		{
+			delme = help; help = help->next; delete delme;
+		}
+		delete help;
+		defList = NULL;
+	}
+	if (this->fileName != NULL) { delete [] this->fileName; this->fileName = NULL; }
+
+}
+
+void IVReader::setLog(Ogre::Log *IVLog)
+{
+	this->IVLog = IVLog;
+}
+
+std::string IVReader::intToStr(int num)
+{
+	std::ostringstream myStream; 
+	myStream << num;
+	myStream.flush();
+	
+	return(myStream.str());
+}
+
+std::string IVReader::realToStr(Ogre::Real num)
+{
+	std::ostringstream myStream; 
+	myStream << num;
+	myStream.flush();
+	
+	return(myStream.str());
+}
+
+bool IVReader::loadFile(const char* fileName)
+{
+	std::string message = "trying to load "; message = message + fileName + "...";
+	
+	if (IVLog != NULL) 
+		IVLog->logMessage(message);
+	
+	collapse();
+	this->fileName = new char[strlen(fileName)+1]; strcpy(this->fileName, fileName);
+	treeCnt = 0;
+
+    infile = fopen(fileName, "r"); root = NULL;
+
+	if (infile == NULL)
+	{
+		message = "! Error loading File "; message = message + fileName + " !";
+		if (IVLog != NULL) IVLog->logMessage(message);
+		return false;
+	}
+
+	if ((fgets(buf, BUFFERSIZE, infile) == NULL) && !feof(infile)) 
+	{
+		message = "! Error loading File "; message = message + fileName + " !";
+		if (IVLog != NULL) IVLog->logMessage(message);
+		fclose(infile);
+		return false;
+	}
+
+	if (!checkHeader(buf)) 
+	{
+		message = "! Invalid Header !";
+		if (IVLog != NULL) IVLog->logMessage(message);
+		fclose(infile);
+		return false;
+	}
+
+	IVTokenType tmptyp = IV_TOKEN_INVALID;
+	eof = false;	
+
+	bufOffset = 0;
+	char token[BUFFERSIZE] = "\0", oldtoken[BUFFERSIZE] = "\0", fieldtoken[BUFFERSIZE] = "\0";
+	int level = 0; 
+
+	while (getNextElement(token, &tmptyp)) 
+	{
+		if (tmptyp == IV_TOKEN_BRACEOPEN) 
+		{
+			root = new IVNode(oldtoken);
+			level++;
+			break;
+		}
+
+		strcpy(oldtoken, token);
+	}
+
+	IVNode *actualNode = root, *parent = root, *fieldNode = root, *newNode = NULL;
+	IVTokenType oldtmptyp = tmptyp;
+	bool textfield = false, realfield = false; IVType fieldtyp = IV_INVALID;
+	bool def = false; std::string defLabel;
+	Ogre::Real rblock[BLOCKSIZE]; 
+	float *rvalues;
+	int cnt = 0; int blockcnt = 0;
+	while (getNextElement(token, &tmptyp))
+	{
+		if ((tmptyp == IV_TOKEN_BRACKETOPEN)) 
+			if (!getNextElement(token, &tmptyp)) break;
+		if ((tmptyp == IV_TOKEN_INVALID)) 
+			if (!getNextElement(token, &tmptyp)) break;
+		if (tmptyp == IV_TOKEN_BRACEOPEN) 
+		{
+			actualNode = new IVNode(oldtoken); 
+			if (parent == NULL)
+			{
+				message = "Error loading file "; message = message + fileName + "! Invalid tree structure.";
+				if (IVLog != NULL) IVLog->logMessage(message);
+				fclose(infile);
+				return false;
+			}
+			parent->attachNode(actualNode);
+			parent = actualNode;
+			level++;
+
+			if (def)
+			{
+				addDefToList(defLabel, actualNode);
+				def = false;
+			}
+
+		} else
+		if (tmptyp == IV_TOKEN_BRACECLOSE) 
+		{
+			if (realfield)
+			{
+				if (blockcnt == 0) rvalues = (Ogre::Real *)malloc((cnt)*sizeof(Ogre::Real));
+				else rvalues = (Ogre::Real *)realloc(rvalues, (BLOCKSIZE*(blockcnt) + cnt)*sizeof(Ogre::Real));						
+				memcpy((void *)&rvalues[BLOCKSIZE*blockcnt], rblock, cnt*sizeof(Ogre::Real));
+				fieldNode->addField(fieldtoken, rvalues, BLOCKSIZE*blockcnt+cnt, fieldtyp);
+				realfield = false;
+//				free(rvalues);
+			}
+
+			if (level > 0)
+			{
+				actualNode = parent = actualNode->getParent();
+				level--;
+			}
+		} else
+		{
+			if (oldtmptyp == IV_TOKEN_DEF)
+			{
+				def = true; defLabel = ""; defLabel = defLabel + token;
+			} else
+			if (oldtmptyp == IV_TOKEN_USE)
+			{
+					newNode = new IVNode("USE"); 
+					if (parent == NULL)
+					{
+						message = "Error loading file "; message = message + fileName + "! Invalid tree structure.";
+						if (IVLog != NULL) IVLog->logMessage(message);
+						fclose(infile);
+						return false;
+					}
+					char *s = (char *)malloc(sizeof(char)*(strlen(token)+1));
+					memcpy(s, token, strlen(token));
+					s[strlen(token)] = '\0';
+					newNode->addField("label", s);
+					actualNode->attachNode(newNode);
+			} else
+			if (!def)
+			if (oldtmptyp == IV_TOKEN_STRING)
+			{
+				if (!textfield)
+				{
+					if (tmptyp == IV_TOKEN_STRING)
+					{
+/*						char *s = new char[strlen(token)+1];
+						strcpy(s, token);
+*/						
+						char *s = (char *)malloc(sizeof(char)*(strlen(token)+1));
+						memcpy(s, token, strlen(token));
+						s[strlen(token)] = '\0';
+						actualNode->addField(oldtoken, s);
+//						delete [] s;
+					}
+				}
+				if (!realfield)
+				{
+					if ((tmptyp == IV_TOKEN_REAL) || (tmptyp == IV_TOKEN_INT))
+					{	
+						cnt = 0; blockcnt = 0;
+						char *stopstring;						
+						rblock[0] = strtod(token, &stopstring);
+						cnt++;
+						strcpy(fieldtoken, oldtoken);
+						fieldNode = actualNode;
+					    if (tmptyp == IV_TOKEN_REAL) fieldtyp = IV_REAL;
+						if (tmptyp == IV_TOKEN_INT)	fieldtyp = IV_INT;
+						realfield = true;
+					}
+				}
+				textfield = !textfield;
+			}
+			else 
+			{
+				if (realfield)	
+				{
+					if ((tmptyp == IV_TOKEN_REAL) || (tmptyp == IV_TOKEN_INT))
+					{		
+						char *stopstring;
+						if (cnt >= BLOCKSIZE) 
+						{
+							if (blockcnt == 0) rvalues = (Ogre::Real *)malloc((BLOCKSIZE)*sizeof(Ogre::Real));
+							else rvalues = (Ogre::Real *)realloc(rvalues, (BLOCKSIZE*(blockcnt+1))*sizeof(Ogre::Real));
+							memcpy((void *)&rvalues[BLOCKSIZE*blockcnt], rblock, BLOCKSIZE*sizeof(Ogre::Real));
+							cnt = 0;
+							blockcnt++;
+							
+						}
+						rblock[cnt] = strtod(token, &stopstring);
+						cnt++;
+					    if (tmptyp == IV_TOKEN_REAL) fieldtyp = IV_REAL;
+					}
+					else
+					{
+						if (blockcnt == 0) rvalues = (Ogre::Real *)malloc((cnt)*sizeof(Ogre::Real));
+						else rvalues = (Ogre::Real *)realloc(rvalues, (BLOCKSIZE*(blockcnt) + cnt)*sizeof(Ogre::Real));						
+						memcpy((void *)&rvalues[BLOCKSIZE*blockcnt], rblock, cnt*sizeof(Ogre::Real));
+						fieldNode->addField(fieldtoken, rvalues, BLOCKSIZE*blockcnt+cnt, fieldtyp);
+						realfield = false;
+//						free(rvalues);
+					}
+				}
+				
+				textfield = false;
+			}
+		}
+
+
+		strcpy(oldtoken, token);
+		oldtmptyp = tmptyp;
+	}
+	message = ""; ; message = message + fileName + " loaded.";
+	if (IVLog != NULL) IVLog->logMessage(message);
+	fclose(infile);
+
+	return true;
+}
+
+void IVReader::print()
+{
+	if (root != NULL) root->print();
+}
+
+bool IVReader::checkHeader(const char *string)
+{
+	for (int i=0; i < validIVHeaderCnt; i++)
+		if (strcmp(validIVHeader[i], string) == 0) return true;
+	return false;
+}
+bool IVReader::isSpace(char c)
+{
+	if ((c==' ') || (c=='\t')) return true;
+	return false;
+}
+bool IVReader::isNewline(char c)
+{
+	if (c=='\n') return true;
+	return false;
+}
+bool IVReader::isDigit(char c)
+{
+	if ((c>=48) && (c<=57)) return true;
+	return false;
+}
+bool IVReader::isHexDigit(char c)
+{
+	if ( ((c>=48) && (c<=57)) || ((c>=65) && (c<=70)) || ((c>=97) && (c<=102)) ) return true;
+	return false;
+}
+
+
+bool IVReader::getNextElement(char *token, IVTokenType *type)
+{
+	if (eof) return false;
+	bool quoted = false;
+	while (isSpace(buf[bufOffset])) bufOffset++;
+	int i=0;
+	while ((!isSpace(buf[bufOffset])) || (quoted))
+	{
+		if (!quoted)
+		{
+			if (isNewline(buf[bufOffset]) || (buf[bufOffset] == COMMENTCHAR))
+			{
+				token[i] = '\0'; 
+				classify(token, type);
+				bufOffset = 0;
+				if (fgets(buf, BUFFERSIZE, infile) == NULL) 
+				{			
+					eof = true;
+				}
+				if (i==0) return getNextElement(token, type);
+				return true;
+			}
+			if ((buf[bufOffset] == ',') || (buf[bufOffset] == ']'))
+			{
+				token[i] = '\0';
+				bufOffset++;
+				classify(token, type);
+				return true;
+			}
+		
+			
+
+		} else if (isNewline(buf[bufOffset])) {	eof = true;	}
+
+		
+		token[i] = buf[bufOffset]; 
+		i++;
+		if (buf[bufOffset] == '"') 
+		{
+			quoted = !quoted; i--;
+		}
+		bufOffset++;
+
+		
+	}
+	token[i] = '\0';
+	classify(token, type);
+	return true;
+}
+
+void IVReader::classify(char *token, IVTokenType *type)
+{
+	bool isInt = true, isReal = true;
+	if (!isDigit(token[0]) && (token[0] != '-') && (token[0] != '+')) 
+	{
+		isInt = false; 
+		if (token[0] != '.') isReal = false; 
+	}
+	int i = 1;
+	while ((token[i] != '\0') && isReal)
+	{
+		if (isInt && (i!=2) && !isHexDigit(token[i])) 
+		{
+			isInt = false;
+		}
+		if (isInt && (i==2) && !isHexDigit(token[i]) && (token[i] != 'x') && (token[i] != 'X')) isInt = false;
+		if (isReal && (!isDigit(token[i])) && (token[i] != '.') && (token[i] != 'e') && (token[i] != 'E') && (token[i] != 'd') && (token[i] != 'D') && (token[i] != '-') && (token[i] != '+')) isReal = false;
+		i++;
+	}
+	if (isInt) *type = IV_TOKEN_INT; 
+	else if (isReal) *type = IV_TOKEN_REAL;
+	else *type = IV_TOKEN_STRING;
+
+	if (strcmp(token, "DEF") == 0) *type = IV_TOKEN_DEF;
+	if (strcmp(token, "USE") == 0) *type = IV_TOKEN_USE;
+
+	if (token[1] == '\0')
+	{
+		if (token[0] == '{') *type = IV_TOKEN_BRACEOPEN;
+		if (token[0] == '}') *type = IV_TOKEN_BRACECLOSE;
+		if (token[0] == '[') *type = IV_TOKEN_BRACKETOPEN;
+		if (token[0] == ']') *type = IV_TOKEN_BRACKETCLOSE;
+		if (token[0] == '(') *type = IV_TOKEN_PARENTHESISOPEN;
+		if (token[0] == ')') *type = IV_TOKEN_PARENTHESISCLOSE;
+	}
+	if (token[0] == '\0')
+	{
+		*type = IV_TOKEN_INVALID;
+	}
+
+}
+
+/*
+IVNode *IVReader::getNode(const char* name)
+{
+	return root->getNodeRecursive(name);
+}
+*/
+void IVReader::addMeshToList(std::string name, IVManualMeshLoader *loader)
+{	
+	if (meshList == NULL) 
+	{
+		meshList = new IVMeshListNode(name, loader);
+	}
+	else
+	{
+		meshList->attachNewNode(name, loader);
+	}
+}
+
+void IVReader::addDefToList(std::string name, IVNode *node)
+{	
+	if (defList == NULL) 
+	{
+		defList = new IVDefListNode(name, node);
+	}
+	else
+	{
+		defList->attachNewNode(name, node);
+	}
+}
+
+Ogre::Entity *IVReader::createEntity(Ogre::SceneManager* sceneMgr, std::string name, IVMeshData *mData, Ogre::Vector3 *translation)
+{
+	using namespace Ogre;
+
+	std::string meshName = name.substr(name.find('/',0), name.length()) + "/Mesh";
+	std::string entityName = name + "/Entity";
+
+	Mesh* pMesh = NULL;
+	if ((pMesh = (Mesh *) MeshManager::getSingleton().getByName(meshName).getPointer()) == NULL)
+	{
+
+		IVMeshData *data = mData->expand();
+
+		IVManualMeshLoader *loader	= new IVManualMeshLoader(data);
+
+		if (translation != NULL) *translation = data->boundingBox->getCenter();
+
+//		data->collapse();
+//		delete data;
+
+
+		addMeshToList(meshName, loader);
+
+		Mesh* pMesh = MeshManager::getSingleton().createManual(meshName, "IVGroup", loader).getPointer(); 
+
+		pMesh->load(); 
+		pMesh->touch();
+	}
+	else
+	{
+		if (translation != NULL)
+		{
+			*translation = meshList->getManualMeshLoader(meshName)->getBoundingBox()->getCenter();
+		}
+	}
+
+	Entity *pEntity = sceneMgr->createEntity(entityName, meshName);
+
+
+	return pEntity;
+}
+
+
+
+void IVReader::buildTree(Ogre::SceneManager* sceneMgr,  Ogre::SceneNode *sceneNodeRoot)
+{
+	using namespace Ogre;
+	if (root == NULL) return;
+
+	std::string s = intToStr(treeCnt) + "/" + fileName + "/Root";
+	SceneNode *actualSceneNode = sceneNodeRoot->createChildSceneNode(s);
+	s = "/"; s = s + fileName + "/RootMaterial";
+	
+	Material* pMaterial = NULL;
+	if ((pMaterial = (Material *) MaterialManager::getSingleton().getByName(s).getPointer()) == NULL)
+	{
+		pMaterial = (Material *)MaterialManager::getSingleton().create(s, "General").getPointer();
+	}
+	pMaterial->load();
+
+	nodeCnt = 1; matCnt = 1;
+	
+
+	buildTree(sceneMgr, actualSceneNode, root, NULL, pMaterial);	
+	treeCnt++; 
+
+
+	std::string message = "Tree of "; message = message + fileName + " built (" + intToStr(nodeCnt) + " Nodes)";
+	if (IVLog != NULL) IVLog->logMessage(message);
+
+}
+
+void IVReader::buildTree(Ogre::SceneManager* sceneMgr,  Ogre::SceneNode *sceneNodeRoot, IVNode *IVReaderoot, IVMeshData *mData, Ogre::Material *material)
+{
+	using namespace Ogre;
+
+	Material *newMaterial = NULL;
+
+	bool meshDataCreated = false;
+	if (mData == NULL)
+	{
+		mData = new IVMeshData();
+		meshDataCreated = true;
+	}
+
+	IVType t; int i;
+	
+	IVNode *help = IVReaderoot->getNextChildNode(true);
+	while (help != NULL)
+	{	
+		if (strcmp(help->getName(), "USE") == 0)
+		{
+			char *defLabel = (char *) help->getField("label", &t, &i);
+			if (t == IV_STRING) 
+			{
+				help = defList->getDef(defLabel);
+			}
+		}
+		if ((strcmp(help->getName(), "Separator") == 0) || (strcmp(help->getName(), "TransformSeparator") == 0)) 
+		{
+/*			std::string s = sceneNodeRoot->getName() + "/Sep" + intToStr(nodeCnt);
+			nodeCnt++;
+			SceneNode *actualSceneNode = sceneNodeRoot->createChildSceneNode(s);
+			buildTree(sceneMgr, actualSceneNode, help, mData, actualMaterial);
+*/
+			if (newMaterial == NULL) newMaterial = material;
+			buildTree(sceneMgr, sceneNodeRoot, help, mData, newMaterial);
+		}
+
+		if (strcmp(help->getName(), "Texture2") == 0)
+		{
+			char *textureFileName = (char *) help->getField("filename", &t, &i);
+			if (t == IV_STRING) 
+			{  
+				std::string s = sceneNodeRoot->getName().substr(sceneNodeRoot->getName().find('/',0), sceneNodeRoot->getName().length()) + "/Material" + intToStr(matCnt);
+				matCnt++;
+				if ((newMaterial = (Material *) MaterialManager::getSingleton().getByName(s).getPointer()) == NULL)
+				{
+					newMaterial = (Material *)MaterialManager::getSingleton().create(s, "General").getPointer();
+					newMaterial->getTechnique(0)->getPass(0)->createTextureUnitState(textureFileName);
+				}
+				newMaterial->load();
+				newMaterial->reload();
+			}
+		}
+// can be included
+		if (strcmp(help->getName(), "Material") == 0)
+		{
+			Real *ambientColor = (Real *) help->getField("ambientColor", &t, &i);
+			if ((i != 3) || (t != IV_REAL)) ambientColor = NULL;
+			Real *diffuseColor = (Real *) help->getField("diffuseColor", &t, &i);
+			if ((i != 3) || (t != IV_REAL)) diffuseColor = NULL;
+			Real *specularColor = (Real *) help->getField("specularColor", &t, &i);
+			if ((i != 3) || (t != IV_REAL)) specularColor = NULL;
+			Real *emissiveColor = (Real *) help->getField("emissiveColor", &t, &i);
+			if ((i != 3) || (t != IV_REAL)) emissiveColor = NULL;
+			Real *shininess = (Real *) help->getField("shininess", &t, &i);
+			if ((i != 1) || (t != IV_REAL)) shininess = NULL;
+			Real *transparency = (Real *) help->getField("transparency", &t, &i);
+			if ((i != 1) || (t != IV_REAL)) transparency = NULL;
+
+			if (newMaterial == NULL)
+			{
+				std::string s = sceneNodeRoot->getName().substr(sceneNodeRoot->getName().find('/',0), sceneNodeRoot->getName().length()) + "/Material" + intToStr(matCnt);
+				matCnt++;
+				if ((newMaterial = (Material *) MaterialManager::getSingleton().getByName(s).getPointer()) == NULL)
+				{
+					if (material == NULL) newMaterial = (Material *)MaterialManager::getSingleton().create(s, "General").getPointer();
+					else newMaterial = material->clone(s).getPointer();
+
+					Real alpha = 1.f;
+					if (transparency != NULL) alpha = 1.f - transparency[0];
+					if (ambientColor != NULL) newMaterial->setAmbient(ambientColor[0], ambientColor[1], ambientColor[2]);
+					if (diffuseColor != NULL) newMaterial->setDiffuse(diffuseColor[0], diffuseColor[1], diffuseColor[2], alpha);
+					if (specularColor != NULL) newMaterial->setSpecular(specularColor[0], specularColor[1], specularColor[2], alpha);
+					if (emissiveColor != NULL) newMaterial->setSelfIllumination(emissiveColor[0], emissiveColor[1], emissiveColor[2]);
+					if (shininess != NULL) newMaterial->setShininess(shininess[0]);
+					
+//					if (material->getTechnique(0)->getPass(0)->getNumTextureUnitStates() > 0)							
+//					{
+//						newMaterial->getTechnique(0)->getPass(0)->createTextureUnitState(material->getTechnique(0)->getPass(0)->getTextureUnitState(0)->getTextureName());
+//					}
+				}
+				newMaterial->load();
+				newMaterial->reload();
+			}
+			else
+			{
+				Real alpha = 1.f;
+				if (transparency != NULL) alpha = 1.f - transparency[0];
+				if (ambientColor != NULL) newMaterial->setAmbient(ambientColor[0], ambientColor[1], ambientColor[2]);
+				if (diffuseColor != NULL) newMaterial->setDiffuse(diffuseColor[0], diffuseColor[1], diffuseColor[2], alpha);
+				if (specularColor != NULL) newMaterial->setSpecular(specularColor[0], specularColor[1], specularColor[2], alpha);
+				if (emissiveColor != NULL) newMaterial->setSelfIllumination(emissiveColor[0], emissiveColor[1], emissiveColor[2]);
+				if (shininess != NULL) newMaterial->setShininess(shininess[0]);
+				newMaterial->load();
+			}
+		}
+
+		if (strcmp(help->getName(), "Coordinate3") == 0)
+		{
+			mData->vertices = (Real *) help->getField("point", &t, &mData->vcnt);
+			if ((t != IV_REAL) && (t != IV_INT)) mData->vertices = NULL;
+		}
+		if (strcmp(help->getName(), "Normal") == 0)
+		{
+			mData->normals = (Real *) help->getField("vector", &t, &mData->ncnt);
+			if ((t != IV_REAL) && (t != IV_INT)) mData->normals = NULL;
+		}
+		if (strcmp(help->getName(), "TextureCoordinate2") == 0)
+		{
+			mData->texCoords = (Real *) help->getField("point", &t, &mData->tcnt);
+			if ((t != IV_REAL) && (t != IV_INT)) mData->texCoords = NULL;
+		}
+
+		if (strcmp(help->getName(), "IndexedFaceSet") == 0)
+		{
+			std::string s = sceneNodeRoot->getName() + "/IFS" + intToStr(nodeCnt);
+			nodeCnt++;
+			SceneNode *triangleStripSceneNode = sceneNodeRoot->createChildSceneNode(s);
+
+			mData->indices = (Real *) help->getField("coordIndex", &t, &mData->icnt);
+			if (t != IV_INT) mData->indices = NULL;
+
+			mData->normalIndices = (Real *) help->getField("normalIndex", &t, &mData->nicnt);
+			if (t != IV_INT) mData->normalIndices = NULL;
+		
+			mData->texCoordIndices = (Real *) help->getField("textureCoordIndex", &t, &mData->ticnt);
+			if (t != IV_INT) mData->texCoordIndices = NULL;
+		
+
+			mData->roType = IV_ROT_FACE_SET;		
+	
+			Vector3 translation = Vector3(0,0,0);
+			Entity *pEntity = createEntity(sceneMgr, s, mData, &translation);
+			if (newMaterial == NULL) newMaterial = material;
+			if (newMaterial != NULL) pEntity->setMaterialName(newMaterial->getName());
+				
+			triangleStripSceneNode->attachObject(pEntity);
+			triangleStripSceneNode->translate(translation);		
+
+		}
+
+
+		if (strcmp(help->getName(), "IndexedTriangleStripSet") == 0)
+		{
+			std::string s = sceneNodeRoot->getName() + "/ITS" + intToStr(nodeCnt);
+			nodeCnt++;
+			SceneNode *triangleStripSceneNode = sceneNodeRoot->createChildSceneNode(s);
+		
+			mData->indices = (Real *) help->getField("coordIndex", &t, &mData->icnt);
+			if (t != IV_INT) mData->indices = NULL;
+
+			mData->normalIndices = (Real *) help->getField("normalIndex", &t, &mData->nicnt);
+			if (t != IV_INT) mData->normalIndices = NULL;
+
+			mData->texCoordIndices = (Real *) help->getField("textureCoordIndex", &t, &mData->ticnt);
+			if (t != IV_INT) mData->texCoordIndices = NULL;
+
+			IVNode *n = help->getNextChildNode(true);
+			while ((n != NULL) && (strcmp(help->getName(), "VertexProperty") == 0))
+			{
+				n = help->getNextChildNode();
+			}
+			if (n != NULL)
+			{
+				mData->vertices = (Real *) n->getField("vertex", &t, &mData->vcnt);
+				if ((t != IV_REAL) && (t != IV_INT)) mData->vertices = NULL;
+
+				mData->normals = (Real *) n->getField("normal", &t, &mData->ncnt);
+				if ((t != IV_REAL) && (t != IV_INT)) mData->normals = NULL;
+				mData->texCoords = (Real *) n->getField("texCoord", &t, &mData->tcnt);
+				if ((t != IV_REAL) && (t != IV_INT)) mData->texCoords = NULL;
+			}
+
+			mData->roType = IV_ROT_TRIANGLE_STRIP;		
+
+			Vector3 translation = Vector3(0,0,0);
+			Entity *pEntity = createEntity(sceneMgr, s, mData, &translation);
+			if (newMaterial == NULL) newMaterial = material;
+			if (newMaterial != NULL) pEntity->setMaterialName(newMaterial->getName());
+				
+			triangleStripSceneNode->attachObject(pEntity);
+			triangleStripSceneNode->translate(translation);		
+
+		}
+
+		help = IVReaderoot->getNextChildNode();
+	}
+	if (meshDataCreated) if (mData != NULL) delete mData;
+}
+
Index: /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivnode.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivnode.cpp	(revision 187)
+++ /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivnode.cpp	(revision 187)
@@ -0,0 +1,211 @@
+#include "ivnode.h"
+#include "ivreader.h"
+
+IVField::IVField()
+{
+	next = NULL;
+	typ = IV_STRING;
+}
+IVField::~IVField()
+{
+	if (value != NULL) free(value);
+	if (name != NULL) delete [] name;
+//	if (next != NULL) delete next;
+}
+
+IVNode::IVNode()
+{
+	parent = children = next = actual = NULL; 
+	name = NULL;
+	fields = NULL;
+}
+
+IVNode::IVNode(const char *s)
+{
+	name = new char[strlen(s)+1];
+	strcpy(name, s);
+	parent = children = next = actual = NULL;
+	fields = NULL;	
+}
+
+IVNode::~IVNode()
+{
+	if (name != NULL) delete[] name;
+	if (fields != NULL) 
+	{
+		IVField *help = fields, *delme = NULL;
+		while (help->next != NULL)
+		{
+			delme = help; help = help->next; delete delme;
+		}
+		delete help;
+	}
+	if (children != NULL) 
+	{
+		IVNode *help = children, *delme = NULL;
+		while (help->next != NULL)
+		{
+			delme = help; help = help->next; delete delme;
+		}
+		delete help;
+	}
+//	if (next != NULL) delete next;
+}
+
+
+
+
+void IVNode::attachNode(IVNode *child)
+{
+	if (children == NULL) children = child;
+	else 
+	{
+		IVNode *help = children;
+		while (help->next != NULL) help = help->next;
+		help->next = child;
+	}
+	child->parent = this;
+}
+
+
+void IVNode::print(int ident)
+{
+	if (IVReader::IVLog != NULL)
+	{
+		std::string msg = ""; 
+
+//		for (int i=0; i < ident; i++) fprintf(stdout, " ");
+		for (int i=0; i < ident; i++) msg = msg + " ";
+//		fprintf(stdout, "%s:\n", name);
+		msg = msg + name + ":";
+		IVReader::IVLog->logMessage(msg);
+
+		IVField *help = fields;
+		while (help != NULL)
+		{
+//			for (int i=0; i < ident; i++) fprintf(stdout, " ");
+			msg = "";
+			for (int i=0; i < ident; i++) msg = msg + " ";
+			
+			if (help->typ == IV_STRING)
+			{
+//				fprintf(stdout, "- %s: %s\n", help->name, (char *)help->value);
+				msg = msg + "- " + help->name + ": " + (char *)help->value;
+				IVReader::IVLog->logMessage(msg);
+			}
+			if (help->typ == IV_INT)
+			{
+//				fprintf(stdout, "- %s (%d): ", help->name, help->cnt);
+				msg = msg + "- " + help->name + "(" + IVReader::intToStr(help->cnt) + "): ";
+//				for (int i=0; i < help->cnt; i++) fprintf(stdout, " %d", ((int *)help->value)[i]);
+				for (int i=0; i < help->cnt; i++) msg = msg + " " + IVReader::realToStr(((float *)help->value)[i]);
+//				fprintf(stdout, "\n");
+				IVReader::IVLog->logMessage(msg);
+			}
+			if (help->typ == IV_REAL)
+			{
+//				fprintf(stdout, "- %s (%d):\n", help->name, help->cnt);
+				msg = msg + "- " + help->name + "(" + IVReader::intToStr(help->cnt) + "): ";
+				for (int i=0; i < help->cnt; i++) 
+				{				
+//					fprintf(stdout, " %.3f", ((float *)help->value)[i]);
+					msg = msg + " " + IVReader::realToStr(((float *)help->value)[i]);
+//					if (i % 3 == 2) fprintf(stdout, "\n");
+					if (i % 3 == 2) msg = msg + "\n";
+				}
+//				fprintf(stdout, "\n");
+				IVReader::IVLog->logMessage(msg);
+			}
+			help = help->next;
+		}	
+		if (children != NULL) { children->print(ident+3); }
+		if (next != NULL) next->print(ident);
+	}
+}
+
+void IVNode::addField(const char *name, void *value, int cnt, IVType typ)
+{
+	IVField *newone = new IVField();
+	newone->name = new char[strlen(name)+1];
+	strcpy(newone->name, name);
+/*
+	if (typ == IV_STRING)
+	{
+		newone->value = new char[strlen((char *)value)+1];
+		strcpy((char *)newone->value, (char *)value);
+	} else
+	if ((typ == IV_INT) || (typ == IV_REAL))
+	{
+		newone->value = new Ogre::Real[cnt];
+		memcpy(newone->value, value, cnt*sizeof(Ogre::Real));
+	}
+*/
+	newone->value = value;
+	newone->typ = typ;
+	newone->cnt = cnt;
+	newone->next = NULL;
+
+	if (fields == NULL) fields = newone;
+	else
+	{
+		IVField *help = fields;
+		while (help->next != NULL) help = help->next;
+		help->next = newone;
+	}
+}
+
+
+void IVNode::addField(const char *name, char *value)
+{
+	addField(name, value, 1, IV_STRING);
+}
+
+
+IVNode *IVNode::getNodeRecursive(const char *name)
+{
+	if (strcmp(name, this->name) == 0) return this;
+	if (this->children != NULL)
+	{
+		IVNode *help = this->children->getNodeRecursive(name);
+		if (help != NULL) return help;
+	}
+	if (this->next != NULL) return this->next->getNodeRecursive(name); else return NULL;
+}
+
+
+IVNode *IVNode::getNextChildNode(bool reset)
+{
+	if (reset) actual = this->children;
+	else if (actual == NULL) actual = this->children; else actual = actual->next;
+	return actual;	
+}
+
+
+IVField *IVNode::getField(const char *name)
+{
+	IVField *help = fields;
+	while (help != NULL)
+	{
+		if (strcmp(name, help->name) == 0) return help;
+		help = help->next;
+	}
+	return NULL;
+}
+
+void *IVNode::getField(const char *name, IVType *typ, int *cnt)
+{
+	IVField *help = fields;
+	while (help != NULL)
+	{
+		if (strcmp(name, help->name) == 0) 
+		{
+			*typ = help->typ;
+			*cnt = help->cnt;
+			return help->value;
+		}
+		help = help->next;
+	}
+	*typ = IV_INVALID;
+	*cnt = 0;
+	return NULL;
+}
Index: /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivmeshdata.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivmeshdata.cpp	(revision 187)
+++ /GTP-Internal/trunk/Lib/Vis/work/IVReader/src/ivmeshdata.cpp	(revision 187)
@@ -0,0 +1,263 @@
+#include "ivmeshdata.h"
+#include "ivreader.h"
+
+
+IVMeshData::IVMeshData()
+{ 
+	vertices = normals = texCoords = indices = normalIndices = texCoordIndices = NULL; 
+	vcnt = ncnt = tcnt = icnt = nicnt = ticnt = 0;
+	roType = IV_ROT_INVALID;
+	boundingBox = NULL;
+}
+
+IVMeshData::~IVMeshData()
+{ 
+}
+
+void IVMeshData::collapse()
+{
+	if (indices != NULL)	delete [] indices;
+	if (vertices != NULL)	delete [] vertices;
+	if (normals != NULL)	delete [] normals;
+	if (texCoords != NULL)	delete [] texCoords;
+	if (normalIndices != NULL) delete [] normalIndices;
+	if (texCoordIndices != NULL) delete [] texCoordIndices;
+	if (boundingBox != NULL) delete boundingBox;
+	indices = vertices = normals = texCoords = normalIndices = texCoords = NULL;
+	boundingBox = NULL;
+}
+
+int IVMeshData::getSeparatorCnt(Ogre::Real *data, int end)
+{
+	int cnt = 0;
+	for (int i=0; i < end; i++) if (data[i] < 0.f) cnt++; 
+	return cnt;
+}
+
+Ogre::AxisAlignedBox *IVMeshData::calcBoundingBox()
+{
+	if ((vertices == NULL) || (vcnt <=0)) return new Ogre::AxisAlignedBox(0, 0, 0, 0, 0, 0);
+	Ogre::Real x, y, z, minX, minY, minZ, maxX, maxY, maxZ;
+	minX = minY = minZ = 999999;
+	maxX = maxY = maxZ = -999999;
+	for (int i=0; i<vcnt/3; i++) 
+	{
+		x = vertices[i*3];
+		if (minX > x) minX = x;	if (maxX < x) maxX = x;
+		y = vertices[i*3+1];
+		if (minY > y) minY = y;	if (maxY < y) maxY = y;
+		z = vertices[i*3+2];
+		if (minZ > z) minZ = z;	if (maxZ < z) maxZ = z;
+	}
+	return new Ogre::AxisAlignedBox(minX, minY, minZ, maxX, maxY, maxZ);
+
+}
+
+
+Ogre::Real *IVMeshData::expandTriangleStripIndices(Ogre::Real *indices, int icnt, int *icntOut)
+{
+	if (indices[icnt-1] >= 0.0)
+		*icntOut = (icnt+1 - 3*(getSeparatorCnt(indices, icnt)+1))*3;
+	else
+		*icntOut = (icnt - 3*getSeparatorCnt(indices, icnt))*3;
+if (*icntOut < 0)
+int hoppla = 1;
+	Ogre::Real *indOut = new Ogre::Real[*icntOut];
+
+	int triangleCnt = 0, tc = 0;
+	for (int i=2; i < icnt; i++)
+	{
+		if (indices[i] >= 0)
+		{
+			if (tc % 2 == 0)
+			{
+				indOut[triangleCnt*3]   = indices[i-2]; 
+				indOut[triangleCnt*3+1] = indices[i-1];
+				indOut[triangleCnt*3+2] = indices[i];
+			}
+			else
+			{
+				indOut[triangleCnt*3]   = indices[i]; 
+				indOut[triangleCnt*3+1] = indices[i-1];
+				indOut[triangleCnt*3+2] = indices[i-2];
+			}
+			triangleCnt++; tc++;
+		}
+		else
+		{
+			i += 2; tc = 0;
+		}
+	}
+	return indOut;
+}	
+
+int IVMeshData::getNextFaceSize(int start)
+{
+	for (int i=start; i < icnt; i++) 
+	{
+		if (indices[i] < 0.f) return i - start;
+	}
+	return icnt - start;
+}
+
+Ogre::Real *IVMeshData::expandFaceSetIndices(Ogre::Real *indices, int icnt, int *icntOut)
+{
+	if (indices[icnt-1] >= 0.0)
+		*icntOut = (icnt+1 - 3*(getSeparatorCnt(indices, icnt)+1))*3;
+	else
+		*icntOut = (icnt - 3*getSeparatorCnt(indices, icnt))*3;
+	Ogre::Real *indOut = new Ogre::Real[*icntOut];
+
+	int index = 0, size = 0;
+	for (int i=0; i < icnt; i++)
+	{
+		if ((size = getNextFaceSize(i)) < 3) break;
+		for (int j=0; j < size-2; j++)
+		{
+			indOut[index] = indices[i]; index++;
+			indOut[index] = indices[i+1+j]; index++;
+			indOut[index] = indices[i+2+j]; index++;
+		}
+		i = i + size; 
+	}
+	return indOut;
+}
+
+IVMeshData *IVMeshData::expand()
+{
+	using namespace Ogre;
+
+	IVMeshData *mDataOut = new IVMeshData();
+
+	mDataOut->boundingBox = calcBoundingBox();
+	if ((vertices == NULL) || (vcnt <= 0) || (indices == NULL) || (icnt <= 0))
+	{
+		if (IVReader::IVLog != NULL)
+		{
+			std::string message = "Expand-Error: ((vertices == NULL) || (vcnt <= 0) || (indices == NULL) || (icnt <= 0))";
+			IVReader::IVLog->logMessage(message);
+		}
+	
+		return mDataOut;
+	}
+	bool nOk, tOk, niOk, tiOk, nperv, tperv;
+	nOk = ((normals != NULL) && (ncnt > 0));
+	tOk = ((texCoords != NULL) && (tcnt > 0));
+	nperv = (ncnt == vcnt) && (nicnt != icnt);
+	tperv = (tcnt*3 == vcnt*2) && (ticnt != icnt);
+
+	if ((nOk && !nperv) || (tOk && !tperv)) 
+	{
+		niOk = ((normalIndices != NULL) && (nicnt == icnt));
+		tiOk = ((texCoordIndices != NULL) && (ticnt == icnt));
+
+		if (!nperv && nOk && !niOk) nOk = false;
+		if (!tperv && tOk && !tiOk) tOk = false;
+
+		int sepcnt = getSeparatorCnt(indices, icnt);
+		mDataOut->icnt = icnt;
+		mDataOut->vcnt = (icnt - sepcnt)*3;
+		mDataOut->vertices = new Real[mDataOut->vcnt];
+
+		if (nOk) 
+		{
+			mDataOut->ncnt = mDataOut->vcnt;
+			mDataOut->normals = new Real[mDataOut->ncnt];
+		}
+		if (tOk)
+		{
+			mDataOut->tcnt = (icnt - sepcnt)*2;
+			mDataOut->texCoords = new Real[mDataOut->tcnt];
+		}
+		mDataOut->indices = new Real[mDataOut->icnt];
+
+		int index = 0;
+		for (int i=0; i < icnt; i++)
+		{
+			if (indices[i] >= 0.f)
+			{
+				mDataOut->vertices[index*3]   = vertices[(int)indices[i]*3];
+				mDataOut->vertices[index*3+1] = vertices[(int)indices[i]*3+1];
+				mDataOut->vertices[index*3+2] = vertices[(int)indices[i]*3+2];
+
+				if (nOk)
+				{
+					if (nperv)
+					{
+						mDataOut->normals[index*3]   = normals[(int)indices[i]*3];
+						mDataOut->normals[index*3+1] = normals[(int)indices[i]*3+1];
+						mDataOut->normals[index*3+2] = normals[(int)indices[i]*3+2];
+					}
+					else
+					{
+						mDataOut->normals[index*3]   = normals[(int)normalIndices[i]*3];
+						mDataOut->normals[index*3+1] = normals[(int)normalIndices[i]*3+1];
+						mDataOut->normals[index*3+2] = normals[(int)normalIndices[i]*3+2];
+					}
+				}
+				if (tOk)
+				{
+					if (tperv)
+					{
+						mDataOut->texCoords[index*2]   = texCoords[(int)indices[i]*2];
+						mDataOut->texCoords[index*2+1] = texCoords[(int)indices[i]*2+1];
+					}
+					else
+					{
+						mDataOut->texCoords[index*2]   = texCoords[(int)texCoordIndices[i]*2];
+						mDataOut->texCoords[index*2+1] = texCoords[(int)texCoordIndices[i]*2+1];
+					}
+				}
+
+				mDataOut->indices[i] = index;
+				index++;
+			}
+			else mDataOut->indices[i] = indices[i];
+		}
+	}
+	else
+	{
+		mDataOut->icnt = icnt;
+		mDataOut->indices = new Real[mDataOut->icnt];
+		memcpy(mDataOut->indices, indices, mDataOut->icnt*sizeof(Real));
+
+		mDataOut->vcnt = vcnt;
+		mDataOut->vertices = new Real[mDataOut->vcnt];
+		memcpy(mDataOut->vertices, vertices, mDataOut->vcnt*sizeof(Real));
+
+		if (nOk)
+		{
+			mDataOut->ncnt = ncnt;
+			mDataOut->normals = new Real[mDataOut->ncnt];
+			memcpy(mDataOut->normals, normals, mDataOut->ncnt*sizeof(Real));
+		}
+		if (tOk)
+		{
+			mDataOut->tcnt = tcnt;
+			mDataOut->texCoords = new Real[mDataOut->tcnt];
+			memcpy(mDataOut->texCoords, texCoords, mDataOut->tcnt*sizeof(Real));
+		}
+
+	}
+
+	int icntNew = 0;
+	Real *indicesNew = NULL;
+	mDataOut->roType = roType;
+	if (mDataOut->roType == IV_ROT_TRIANGLE_STRIP)	
+	{	
+		indicesNew = expandTriangleStripIndices(mDataOut->indices, mDataOut->icnt, &icntNew);
+	}
+	else if (mDataOut->roType == IV_ROT_FACE_SET)
+	{
+		indicesNew = expandFaceSetIndices(mDataOut->indices, mDataOut->icnt, &icntNew);
+	}
+	else 
+	{
+		return mDataOut;
+	}
+	delete [] mDataOut->indices;
+	mDataOut->indices = indicesNew;
+	mDataOut->icnt = icntNew;
+
+	return mDataOut;
+}
Index: /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxmlerror.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxmlerror.cpp	(revision 61)
+++ /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxmlerror.cpp	(revision 61)
@@ -0,0 +1,50 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original code (2.0 and earlier )copyright (c) 2000-2002 Lee Thomason (www.grinninglizard.com)
+
+This software is provided 'as-is', without any express or implied 
+warranty. In no event will the authors be held liable for any 
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any 
+purpose, including commercial applications, and to alter it and 
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+#include "tinyxml.h"
+
+// The goal of the seperate error file is to make the first
+// step towards localization. tinyxml (currently) only supports
+// latin-1, but at least the error messages could now be translated.
+//
+// It also cleans up the code a bit.
+//
+
+const char* TiXmlBase::errorString[ TIXML_ERROR_STRING_COUNT ] =
+{
+	"No error",
+	"Error",
+	"Failed to open file",
+	"Memory allocation failed.",
+	"Error parsing Element.",
+	"Failed to read Element name",
+	"Error reading Element value.",
+	"Error reading Attributes.",
+	"Error: empty tag.",
+	"Error reading end tag.",
+	"Error parsing Unknown.",
+	"Error parsing Comment.",
+	"Error parsing Declaration.",
+	"Error document empty."
+};
Index: /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinystr.h
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinystr.h	(revision 61)
+++ /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinystr.h	(revision 61)
@@ -0,0 +1,228 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original file by Yves Berquin.
+
+This software is provided 'as-is', without any express or implied 
+warranty. In no event will the authors be held liable for any 
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any 
+purpose, including commercial applications, and to alter it and 
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must 
+not claim that you wrote the original software. If you use this 
+software in a product, an acknowledgment in the product documentation 
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source 
+distribution.
+*/
+
+#include "tinyxml.h"
+
+
+#ifndef TIXML_USE_STL
+
+#ifndef TIXML_STRING_INCLUDED
+#define TIXML_STRING_INCLUDED
+
+#pragma warning( disable : 4514 )
+
+#include <assert.h>
+
+/**
+   TiXmlString is an emulation of the std::string template.
+   Its purpose is to allow compiling TinyXML on compilers with no or poor STL support.
+   Only the member functions relevant to the TinyXML project have been implemented.
+   The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase
+   a string and there's no more room, we allocate a buffer twice as big as we need.
+*/
+class TiXmlString
+{
+  public :
+    // TiXmlString constructor, based on a string
+    TiXmlString (const char * instring);
+
+    // TiXmlString empty constructor
+    TiXmlString ()
+    {
+        allocated = 0;
+        cstring = NULL;
+    }
+
+    // TiXmlString copy constructor
+    TiXmlString (const TiXmlString& copy);
+
+    // TiXmlString destructor
+    ~ TiXmlString ()
+    {
+        empty_it ();
+    }
+
+    // Convert a TiXmlString into a classical char *
+    const char * c_str () const
+    {
+        if (allocated)
+            return cstring;
+        return "";
+    }
+
+    // Return the length of a TiXmlString
+    unsigned length () const;
+
+    // TiXmlString = operator
+    void operator = (const char * content);
+
+    // = operator
+    void operator = (const TiXmlString & copy);
+
+    // += operator. Maps to append
+    TiXmlString& operator += (const char * suffix)
+    {
+        append (suffix);
+		return *this;
+    }
+
+    // += operator. Maps to append
+    TiXmlString& operator += (char single)
+    {
+        append (single);
+		return *this;
+    }
+
+    // += operator. Maps to append
+    TiXmlString& operator += (TiXmlString & suffix)
+    {
+        append (suffix);
+		return *this;
+    }
+    bool operator == (const TiXmlString & compare) const;
+    bool operator < (const TiXmlString & compare) const;
+    bool operator > (const TiXmlString & compare) const;
+
+    // Checks if a TiXmlString is empty
+    bool empty () const
+    {
+        return length () ? false : true;
+    }
+
+    // Checks if a TiXmlString contains only whitespace (same rules as isspace)
+	// Not actually used in tinyxml. Conflicts with a C macro, "isblank",
+	// which is a problem. Commenting out. -lee
+//    bool isblank () const;
+
+    // single char extraction
+    const char& at (unsigned index) const
+    {
+        assert( index < length ());
+        return cstring [index];
+    }
+
+    // find a char in a string. Return TiXmlString::notfound if not found
+    unsigned find (char lookup) const
+    {
+        return find (lookup, 0);
+    }
+
+    // find a char in a string from an offset. Return TiXmlString::notfound if not found
+    unsigned find (char tofind, unsigned offset) const;
+
+    /*	Function to reserve a big amount of data when we know we'll need it. Be aware that this
+		function clears the content of the TiXmlString if any exists.
+    */
+    void reserve (unsigned size)
+    {
+        empty_it ();
+        if (size)
+        {
+            allocated = size;
+            cstring = new char [size];
+            cstring [0] = 0;
+        }
+    }
+
+    // [] operator 
+    char& operator [] (unsigned index) const
+    {
+        assert( index < length ());
+        return cstring [index];
+    }
+
+    // Error value for find primitive 
+    enum {	notfound = 0xffffffff,
+            npos = notfound };
+
+    void append (const char *str, int len );
+
+  protected :
+
+    // The base string
+    char * cstring;
+    // Number of chars allocated
+    unsigned allocated;
+
+    // New size computation. It is simplistic right now : it returns twice the amount
+    // we need
+    unsigned assign_new_size (unsigned minimum_to_allocate)
+    {
+        return minimum_to_allocate * 2;
+    }
+
+    // Internal function that clears the content of a TiXmlString
+    void empty_it ()
+    {
+        if (cstring)
+            delete [] cstring;
+        cstring = NULL;
+        allocated = 0;
+    }
+
+    void append (const char *suffix );
+
+    // append function for another TiXmlString
+    void append (const TiXmlString & suffix)
+    {
+        append (suffix . c_str ());
+    }
+
+    // append for a single char. This could be improved a lot if needed
+    void append (char single)
+    {
+        char smallstr [2];
+        smallstr [0] = single;
+        smallstr [1] = 0;
+        append (smallstr);
+    }
+
+} ;
+
+/** 
+   TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString.
+   Only the operators that we need for TinyXML have been developped.
+*/
+class TiXmlOutStream : public TiXmlString
+{
+public :
+    TiXmlOutStream () : TiXmlString () {}
+
+    // TiXmlOutStream << operator. Maps to TiXmlString::append
+    TiXmlOutStream & operator << (const char * in)
+    {
+        append (in);
+        return (* this);
+    }
+
+    // TiXmlOutStream << operator. Maps to TiXmlString::append
+    TiXmlOutStream & operator << (const TiXmlString & in)
+    {
+        append (in . c_str ());
+        return (* this);
+    }
+} ;
+
+#endif	// TIXML_STRING_INCLUDED
+#endif	// TIXML_USE_STL
Index: /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxmlparser.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxmlparser.cpp	(revision 61)
+++ /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxmlparser.cpp	(revision 61)
@@ -0,0 +1,939 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original code (2.0 and earlier )copyright (c) 2000-2002 Lee Thomason (www.grinninglizard.com)
+
+This software is provided 'as-is', without any express or implied 
+warranty. In no event will the authors be held liable for any 
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any 
+purpose, including commercial applications, and to alter it and 
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must 
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and 
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source 
+distribution.
+*/
+
+#include "tinyxml.h"
+#include <ctype.h>
+
+//#define DEBUG_PARSER
+
+// Note tha "PutString" hardcodes the same list. This
+// is less flexible than it appears. Changing the entries
+// or order will break putstring.	
+TiXmlBase::Entity TiXmlBase::entity[ NUM_ENTITY ] = 
+{
+	{ "&amp;",  5, '&' },
+	{ "&lt;",   4, '<' },
+	{ "&gt;",   4, '>' },
+	{ "&quot;", 6, '\"' },
+	{ "&apos;", 6, '\'' }
+};
+
+
+const char* TiXmlBase::SkipWhiteSpace( const char* p )
+{
+	if ( !p || !*p )
+	{
+		return 0;
+	}
+	while ( p && *p )
+	{
+		if ( isspace( *p ) || *p == '\n' || *p =='\r' )		// Still using old rules for white space.
+			++p;
+		else
+			break;
+	}
+
+	return p;
+}
+
+#ifdef TIXML_USE_STL
+/*static*/ bool TiXmlBase::StreamWhiteSpace( TIXML_ISTREAM * in, TIXML_STRING * tag )
+{
+	for( ;; )
+	{
+		if ( !in->good() ) return false;
+
+		int c = in->peek();
+		if ( !IsWhiteSpace( c ) )
+			return true;
+		*tag += in->get();
+	}
+}
+
+/*static*/ bool TiXmlBase::StreamTo( TIXML_ISTREAM * in, int character, TIXML_STRING * tag )
+{
+	while ( in->good() )
+	{
+		int c = in->peek();
+		if ( c == character )
+			return true;
+
+		in->get();
+		*tag += c;
+	}
+	return false;
+}
+#endif
+
+const char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name )
+{
+	*name = "";
+	assert( p );
+
+	// Names start with letters or underscores.
+	// After that, they can be letters, underscores, numbers,
+	// hyphens, or colons. (Colons are valid ony for namespaces,
+	// but tinyxml can't tell namespaces from names.)
+	if (    p && *p 
+		 && ( isalpha( (unsigned char) *p ) || *p == '_' ) )
+	{
+		while(		p && *p
+				&&	(		isalnum( (unsigned char ) *p ) 
+						 || *p == '_'
+						 || *p == '-'
+						 || *p == ':' ) )
+		{
+			(*name) += *p;
+			++p;
+		}
+		return p;
+	}
+	return 0;
+}
+
+const char* TiXmlBase::GetEntity( const char* p, char* value )
+{
+	// Presume an entity, and pull it out.
+    TIXML_STRING ent;
+	int i;
+
+	// Ignore the &#x entities.
+	if (    strncmp( "&#x", p, 3 ) == 0 
+	     && *(p+3) 
+		 && *(p+4) )
+	{
+		*value = 0;
+		
+		if ( isalpha( *(p+3) ) ) *value += ( tolower( *(p+3) ) - 'a' + 10 ) * 16;
+		else				     *value += ( *(p+3) - '0' ) * 16;
+
+		if ( isalpha( *(p+4) ) ) *value += ( tolower( *(p+4) ) - 'a' + 10 );
+		else				     *value += ( *(p+4) - '0' );
+
+		return p+6;
+	}
+
+	// Now try to match it.
+	for( i=0; i<NUM_ENTITY; ++i )
+	{
+		if ( strncmp( entity[i].str, p, entity[i].strLength ) == 0 )
+		{
+			assert( strlen( entity[i].str ) == entity[i].strLength );
+			*value = entity[i].chr;
+			return ( p + entity[i].strLength );
+		}
+	}
+
+	// So it wasn't an entity, its unrecognized, or something like that.
+	*value = *p;	// Don't put back the last one, since we return it!
+	return p+1;
+}
+
+
+bool TiXmlBase::StringEqual( const char* p,
+							 const char* tag,
+							 bool ignoreCase )
+{
+	assert( p );
+	if ( !p || !*p )
+	{
+		assert( 0 );
+		return false;
+	}
+
+    if ( tolower( *p ) == tolower( *tag ) )
+	{
+		const char* q = p;
+
+		if (ignoreCase)
+		{
+			while ( *q && *tag && *q == *tag )
+			{
+				++q;
+				++tag;
+			}
+
+			if ( *tag == 0 )		// Have we found the end of the tag, and everything equal?
+			{
+				return true;
+			}
+		}
+		else
+		{
+			while ( *q && *tag && tolower( *q ) == tolower( *tag ) )
+			{
+				++q;
+				++tag;
+			}
+
+			if ( *tag == 0 )
+			{
+				return true;
+			}
+		}
+	}
+	return false;
+}
+
+const char* TiXmlBase::ReadText(	const char* p, 
+									TIXML_STRING * text, 
+									bool trimWhiteSpace, 
+									const char* endTag, 
+									bool caseInsensitive )
+{
+    *text = "";
+	if (    !trimWhiteSpace			// certain tags always keep whitespace
+		 || !condenseWhiteSpace )	// if true, whitespace is always kept
+	{
+		// Keep all the white space.
+		while (	   p && *p
+				&& !StringEqual( p, endTag, caseInsensitive )
+			  )
+		{
+			char c;
+			p = GetChar( p, &c );
+            (* text) += c;
+		}
+	}
+	else
+	{
+		bool whitespace = false;
+
+		// Remove leading white space:
+		p = SkipWhiteSpace( p );
+		while (	   p && *p
+				&& !StringEqual( p, endTag, caseInsensitive ) )
+		{
+			if ( *p == '\r' || *p == '\n' )
+			{
+				whitespace = true;
+				++p;
+			}
+			else if ( isspace( *p ) )
+			{
+				whitespace = true;
+				++p;
+			}
+			else
+			{
+				// If we've found whitespace, add it before the
+				// new character. Any whitespace just becomes a space.
+				if ( whitespace )
+				{
+               (* text) += ' ';
+					whitespace = false;
+				}
+				char c;
+				p = GetChar( p, &c );
+            (* text) += c;
+			}
+		}
+	}
+	return p + strlen( endTag );
+}
+
+#ifdef TIXML_USE_STL
+
+void TiXmlDocument::StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag )
+{
+	// The basic issue with a document is that we don't know what we're
+	// streaming. Read something presumed to be a tag (and hope), then
+	// identify it, and call the appropriate stream method on the tag.
+	//
+	// This "pre-streaming" will never read the closing ">" so the
+	// sub-tag can orient itself.
+
+	if ( !StreamTo( in, '<', tag ) ) 
+	{
+		SetError( TIXML_ERROR_PARSING_EMPTY );
+		return;
+	}
+
+	while ( in->good() )
+	{
+		size_t tagIndex = tag->length();
+		while ( in->good() && in->peek() != '>' )
+		{
+			int c = in->get();
+			(*tag) += (char) c;
+		}
+
+		if ( in->good() )
+		{
+			// We now have something we presume to be a node of 
+			// some sort. Identify it, and call the node to
+			// continue streaming.
+			TiXmlNode* node = Identify( tag->c_str() + tagIndex );
+
+			if ( node )
+			{
+				node->StreamIn( in, tag );
+				bool isElement = node->ToElement() != 0;
+				delete node;
+				node = 0;
+
+				// If this is the root element, we're done. Parsing will be
+				// done by the >> operator.
+				if ( isElement )
+				{
+					return;
+				}
+			}
+			else
+			{
+				SetError( TIXML_ERROR );
+				return;
+			}
+		}
+	}
+	// We should have returned sooner.
+	SetError( TIXML_ERROR );
+}
+
+#endif
+
+const char* TiXmlDocument::Parse( const char* p )
+{
+	// Parse away, at the document level. Since a document
+	// contains nothing but other tags, most of what happens
+	// here is skipping white space.
+	//
+	// In this variant (as opposed to stream and Parse) we
+	// read everything we can.
+
+
+	if ( !p || !*p )
+	{
+		SetError( TIXML_ERROR_DOCUMENT_EMPTY );
+		return false;
+	}
+
+    p = SkipWhiteSpace( p );
+	if ( !p )
+	{
+		SetError( TIXML_ERROR_DOCUMENT_EMPTY );
+		return false;
+	}
+
+	while ( p && *p )
+	{
+		TiXmlNode* node = Identify( p );
+		if ( node )
+		{
+			p = node->Parse( p );
+			LinkEndChild( node );
+		}
+		else
+		{
+			break;
+		}
+		p = SkipWhiteSpace( p );
+	}
+	// All is well.
+	return p;
+}
+
+
+TiXmlNode* TiXmlNode::Identify( const char* p )
+{
+	TiXmlNode* returnNode = 0;
+
+	p = SkipWhiteSpace( p );
+	if( !p || !*p || *p != '<' )
+	{
+		return 0;
+	}
+
+	TiXmlDocument* doc = GetDocument();
+	p = SkipWhiteSpace( p );
+
+	if ( !p || !*p )
+	{
+		return 0;
+	}
+
+	// What is this thing? 
+	// - Elements start with a letter or underscore, but xml is reserved.
+	// - Comments: <!--
+	// - Decleration: <?xml
+	// - Everthing else is unknown to tinyxml.
+	//
+
+	const char* xmlHeader = { "<?xml" };
+	const char* commentHeader = { "<!--" };
+
+	if ( StringEqual( p, xmlHeader, true ) )
+	{
+		#ifdef DEBUG_PARSER
+			TIXML_LOG( "XML parsing Declaration\n" );
+		#endif
+		returnNode = new TiXmlDeclaration();
+	}
+	else if (    isalpha( *(p+1) )
+			  || *(p+1) == '_' )
+	{
+		#ifdef DEBUG_PARSER
+			TIXML_LOG( "XML parsing Element\n" );
+		#endif
+		returnNode = new TiXmlElement( "" );
+	}
+	else if ( StringEqual( p, commentHeader, false ) )
+	{
+		#ifdef DEBUG_PARSER
+			TIXML_LOG( "XML parsing Comment\n" );
+		#endif
+		returnNode = new TiXmlComment();
+	}
+	else
+	{
+		#ifdef DEBUG_PARSER
+			TIXML_LOG( "XML parsing Unknown\n" );
+		#endif
+		returnNode = new TiXmlUnknown();
+	}
+
+	if ( returnNode )
+	{
+		// Set the parent, so it can report errors
+		returnNode->parent = this;
+		//p = returnNode->Parse( p );
+	}
+	else
+	{
+		if ( doc )
+			doc->SetError( TIXML_ERROR_OUT_OF_MEMORY );
+	}
+	return returnNode;
+}
+
+#ifdef TIXML_USE_STL
+
+void TiXmlElement::StreamIn (TIXML_ISTREAM * in, TIXML_STRING * tag)
+{
+	// We're called with some amount of pre-parsing. That is, some of "this"
+	// element is in "tag". Go ahead and stream to the closing ">"
+	while( in->good() )
+	{
+		int c = in->get();
+		(*tag) += (char) c ;
+		
+		if ( c == '>' )
+			break;
+	}
+
+	if ( tag->length() < 3 ) return;
+
+	// Okay...if we are a "/>" tag, then we're done. We've read a complete tag.
+	// If not, identify and stream.
+
+	if (    tag->at( tag->length() - 1 ) == '>' 
+		 && tag->at( tag->length() - 2 ) == '/' )
+	{
+		// All good!
+		return;
+	}
+	else if ( tag->at( tag->length() - 1 ) == '>' )
+	{
+		// There is more. Could be:
+		//		text
+		//		closing tag
+		//		another node.
+		for ( ;; )
+		{
+			StreamWhiteSpace( in, tag );
+
+			// Do we have text?
+			if ( in->peek() != '<' )
+			{
+				// Yep, text.
+				TiXmlText text( "" );
+				text.StreamIn( in, tag );
+
+				// What follows text is a closing tag or another node.
+				// Go around again and figure it out.
+				continue;
+			}
+
+			// We now have either a closing tag...or another node.
+			// We should be at a "<", regardless.
+			if ( !in->good() ) return;
+			assert( in->peek() == '<' );
+			size_t tagIndex = tag->length();
+
+			bool closingTag = false;
+			bool firstCharFound = false;
+
+			for( ;; )
+			{
+				if ( !in->good() )
+					return;
+
+				int c = in->peek();
+				
+				if ( c == '>' )
+					break;
+
+				*tag += c;
+				in->get();
+
+				if ( !firstCharFound && c != '<' && !IsWhiteSpace( c ) )
+				{
+					firstCharFound = true;
+					if ( c == '/' )
+						closingTag = true;
+				}
+			}
+			// If it was a closing tag, then read in the closing '>' to clean up the input stream.
+			// If it was not, the streaming will be done by the tag.
+			if ( closingTag )
+			{
+				int c = in->get();
+				assert( c == '>' );
+				*tag += c;
+
+				// We are done, once we've found our closing tag.
+				return;
+			}
+			else
+			{
+				// If not a closing tag, id it, and stream.
+				const char* tagloc = tag->c_str() + tagIndex;
+				TiXmlNode* node = Identify( tagloc );
+				if ( !node )
+					return;
+				node->StreamIn( in, tag );
+				delete node;
+				node = 0;
+
+				// No return: go around from the beginning: text, closing tag, or node.
+			}
+		}
+	}
+}
+#endif
+
+const char* TiXmlElement::Parse( const char* p )
+{
+	p = SkipWhiteSpace( p );
+	TiXmlDocument* document = GetDocument();
+
+	if ( !p || !*p || *p != '<' )
+	{
+		if ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT );
+		return false;
+	}
+
+	p = SkipWhiteSpace( p+1 );
+
+	// Read the name.
+    p = ReadName( p, &value );
+	if ( !p || !*p )
+	{
+		if ( document )	document->SetError( TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME );
+		return false;
+	}
+
+    TIXML_STRING endTag ("</");
+	endTag += value;
+	endTag += ">";
+
+	// Check for and read attributes. Also look for an empty
+	// tag or an end tag.
+	while ( p && *p )
+	{
+		p = SkipWhiteSpace( p );
+		if ( !p || !*p )
+		{
+			if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES );
+			return 0;
+		}
+		if ( *p == '/' )
+		{
+			++p;
+			// Empty tag.
+			if ( *p  != '>' )
+			{
+				if ( document ) document->SetError( TIXML_ERROR_PARSING_EMPTY );		
+				return 0;
+			}
+			return (p+1);
+		}
+		else if ( *p == '>' )
+		{
+			// Done with attributes (if there were any.)
+			// Read the value -- which can include other
+			// elements -- read the end tag, and return.
+			++p;
+			p = ReadValue( p );		// Note this is an Element method, and will set the error if one happens.
+			if ( !p || !*p )
+				return 0;
+
+			// We should find the end tag now
+			if ( StringEqual( p, endTag.c_str(), false ) )
+			{
+				p += endTag.length();
+				return p;
+			}
+			else
+			{
+				if ( document ) document->SetError( TIXML_ERROR_READING_END_TAG );
+				return 0;
+			}
+		}
+		else
+		{
+			// Try to read an element:
+			TiXmlAttribute attrib;
+			attrib.SetDocument( document );
+			p = attrib.Parse( p );
+
+			if ( !p || !*p )
+			{
+				if ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT );
+				return 0;
+			}
+			SetAttribute( attrib.Name(), attrib.Value() );
+		}
+	}
+	return p;
+}
+
+
+const char* TiXmlElement::ReadValue( const char* p )
+{
+	TiXmlDocument* document = GetDocument();
+
+	// Read in text and elements in any order.
+	p = SkipWhiteSpace( p );
+	while ( p && *p )
+	{
+		if ( *p != '<' )
+		{
+			// Take what we have, make a text element.
+			TiXmlText* textNode = new TiXmlText( "" );
+
+			if ( !textNode )
+			{
+				if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY );
+				    return 0;
+			}
+
+			p = textNode->Parse( p );
+
+			if ( !textNode->Blank() )
+				LinkEndChild( textNode );
+			else
+				delete textNode;
+		} 
+		else 
+		{
+			// We hit a '<'
+			// Have we hit a new element or an end tag?
+			if ( StringEqual( p, "</", false ) )
+			{
+				return p;
+			}
+			else
+			{
+				TiXmlNode* node = Identify( p );
+				if ( node )
+				{
+					p = node->Parse( p );
+					LinkEndChild( node );
+				}				
+				else
+				{
+					return 0;
+				}
+			}
+		}
+		p = SkipWhiteSpace( p );
+	}
+
+	if ( !p )
+	{
+		if ( document ) document->SetError( TIXML_ERROR_READING_ELEMENT_VALUE );
+	}	
+	return p;
+}
+
+
+#ifdef TIXML_USE_STL
+void TiXmlUnknown::StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag )
+{
+	while ( in->good() )
+	{
+		int c = in->get();	
+		(*tag) += c;
+
+		if ( c == '>' )
+		{
+			// All is well.
+			return;		
+		}
+	}
+}
+#endif
+
+
+const char* TiXmlUnknown::Parse( const char* p )
+{
+	TiXmlDocument* document = GetDocument();
+	p = SkipWhiteSpace( p );
+	if ( !p || !*p || *p != '<' )
+	{
+		if ( document ) document->SetError( TIXML_ERROR_PARSING_UNKNOWN );
+		return 0;
+	}
+	++p;
+    value = "";
+
+	while ( p && *p && *p != '>' )
+	{
+		value += *p;
+		++p;
+	}
+
+	if ( !p )
+	{
+		if ( document )	document->SetError( TIXML_ERROR_PARSING_UNKNOWN );
+	}
+	if ( *p == '>' )
+		return p+1;
+	return p;
+}
+
+#ifdef TIXML_USE_STL
+void TiXmlComment::StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag )
+{
+	while ( in->good() )
+	{
+		int c = in->get();	
+		(*tag) += c;
+
+		if ( c == '>' 
+			 && tag->at( tag->length() - 2 ) == '-'
+			 && tag->at( tag->length() - 3 ) == '-' )
+		{
+			// All is well.
+			return;		
+		}
+	}
+}
+#endif
+
+
+const char* TiXmlComment::Parse( const char* p )
+{
+	TiXmlDocument* document = GetDocument();
+	value = "";
+
+	p = SkipWhiteSpace( p );
+	const char* startTag = "<!--";
+	const char* endTag   = "-->";
+
+	if ( !StringEqual( p, startTag, false ) )
+	{
+		document->SetError( TIXML_ERROR_PARSING_COMMENT );
+		return 0;
+	}
+	p += strlen( startTag );
+	p = ReadText( p, &value, false, endTag, false );
+	return p;
+}
+
+
+const char* TiXmlAttribute::Parse( const char* p )
+{
+	p = SkipWhiteSpace( p );
+	if ( !p || !*p ) return 0;
+
+	// Read the name, the '=' and the value.
+	p = ReadName( p, &name );
+	if ( !p || !*p )
+	{
+		if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES );
+		return 0;
+	}
+	p = SkipWhiteSpace( p );
+	if ( !p || !*p || *p != '=' )
+	{
+		if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES );
+		return 0;
+	}
+
+	++p;	// skip '='
+	p = SkipWhiteSpace( p );
+	if ( !p || !*p )
+	{
+		if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES );
+		return 0;
+	}
+	
+	const char* end;
+
+	if ( *p == '\'' )
+	{
+		++p;
+		end = "\'";
+		p = ReadText( p, &value, false, end, false );
+	}
+	else if ( *p == '"' )
+	{
+		++p;
+		end = "\"";
+		p = ReadText( p, &value, false, end, false );
+	}
+	else
+	{
+		// All attribute values should be in single or double quotes.
+		// But this is such a common error that the parser will try
+		// its best, even without them.
+		value = "";
+		while (    p && *p										// existence
+				&& !isspace( *p ) && *p != '\n' && *p != '\r'	// whitespace
+				&& *p != '/' && *p != '>' )						// tag end
+		{
+			value += *p;
+			++p;
+		}
+	}
+	return p;
+}
+
+#ifdef TIXML_USE_STL
+void TiXmlText::StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag )
+{
+	while ( in->good() )
+	{
+		int c = in->peek();	
+		if ( c == '<' )
+			return;
+
+		(*tag) += c;
+		in->get();
+	}
+}
+#endif
+
+const char* TiXmlText::Parse( const char* p )
+{
+	value = "";
+
+	//TiXmlDocument* doc = GetDocument();
+	bool ignoreWhite = true;
+//	if ( doc && !doc->IgnoreWhiteSpace() ) ignoreWhite = false;
+
+	const char* end = "<";
+	p = ReadText( p, &value, ignoreWhite, end, false );
+	if ( p )
+		return p-1;	// don't truncate the '<'
+	return 0;
+}
+
+#ifdef TIXML_USE_STL
+void TiXmlDeclaration::StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag )
+{
+	while ( in->good() )
+	{
+		int c = in->get();
+		(*tag) += c;
+
+		if ( c == '>' )
+		{
+			// All is well.
+			return;
+		}
+	}
+}
+#endif
+
+const char* TiXmlDeclaration::Parse( const char* p )
+{
+	p = SkipWhiteSpace( p );
+	// Find the beginning, find the end, and look for
+	// the stuff in-between.
+	TiXmlDocument* document = GetDocument();
+	if ( !p || !*p || !StringEqual( p, "<?xml", true ) )
+	{
+		if ( document ) document->SetError( TIXML_ERROR_PARSING_DECLARATION );
+		return 0;
+	}
+
+	p += 5;
+//	const char* start = p+5;
+//	const char* end  = strstr( start, "?>" );
+
+	version = "";
+	encoding = "";
+	standalone = "";
+
+	while ( p && *p )
+	{
+		if ( *p == '>' )
+		{
+			++p;
+			return p;
+		}
+
+		p = SkipWhiteSpace( p );
+		if ( StringEqual( p, "version", true ) )
+		{
+//			p += 7;
+			TiXmlAttribute attrib;
+			p = attrib.Parse( p );		
+			version = attrib.Value();
+		}
+		else if ( StringEqual( p, "encoding", true ) )
+		{
+//			p += 8;
+			TiXmlAttribute attrib;
+			p = attrib.Parse( p );		
+			encoding = attrib.Value();
+		}
+		else if ( StringEqual( p, "standalone", true ) )
+		{
+//			p += 10;
+			TiXmlAttribute attrib;
+			p = attrib.Parse( p );		
+			standalone = attrib.Value();
+		}
+		else
+		{
+			// Read over whatever it is.
+			while( p && *p && *p != '>' && !isspace( *p ) )
+				++p;
+		}
+	}
+	return 0;
+}
+
+bool TiXmlText::Blank() const
+{
+	for ( unsigned i=0; i<value.length(); i++ )
+		if ( !isspace( value[i] ) )
+			return false;
+	return true;
+}
+
Index: /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxml.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxml.cpp	(revision 61)
+++ /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxml.cpp	(revision 61)
@@ -0,0 +1,1108 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original code (2.0 and earlier )copyright (c) 2000-2002 Lee Thomason (www.grinninglizard.com)
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+#include <ctype.h>
+#include "tinyxml.h"
+
+bool TiXmlBase::condenseWhiteSpace = true;
+
+void TiXmlBase::PutString( const TIXML_STRING& str, TIXML_OSTREAM* stream )
+{
+	TIXML_STRING buffer;
+	PutString( str, &buffer );
+	(*stream) << buffer;
+}
+
+void TiXmlBase::PutString( const TIXML_STRING& str, TIXML_STRING* outString )
+{
+	int i=0;
+
+	while( i<(int)str.length() )
+	{
+		int c = str[i];
+
+		if (    c == '&' 
+		     && i < ( (int)str.length() - 2 )
+			 && str[i+1] == '#'
+			 && str[i+2] == 'x' )
+		{
+			// Hexadecimal character reference.
+			// Pass through unchanged.
+			// &#xA9;	-- copyright symbol, for example.
+			while ( i<(int)str.length() )
+			{
+				outString->append( str.c_str() + i, 1 );
+				++i;
+				if ( str[i] == ';' )
+					break;
+			}
+		}
+		else if ( c == '&' )
+		{
+			outString->append( entity[0].str, entity[0].strLength );
+			++i;
+		}
+		else if ( c == '<' )
+		{
+			outString->append( entity[1].str, entity[1].strLength );
+			++i;
+		}
+		else if ( c == '>' )
+		{
+			outString->append( entity[2].str, entity[2].strLength );
+			++i;
+		}
+		else if ( c == '\"' )
+		{
+			outString->append( entity[3].str, entity[3].strLength );
+			++i;
+		}
+		else if ( c == '\'' )
+		{
+			outString->append( entity[4].str, entity[4].strLength );
+			++i;
+		}
+		else if ( c < 32 || c > 126 )
+		{
+			// Easy pass at non-alpha/numeric/symbol
+			// 127 is the delete key. Below 32 is symbolic.
+			char buf[ 32 ];
+			sprintf( buf, "&#x%02X;", (unsigned) ( c & 0xff ) );
+			outString->append( buf, strlen( buf ) );
+			++i;
+		}
+		else
+		{
+			char realc = (char) c;
+			outString->append( &realc, 1 );
+			++i;
+		}
+	}
+}
+
+
+TiXmlNode::TiXmlNode( NodeType _type )
+{
+	parent = 0;
+	type = _type;
+	firstChild = 0;
+	lastChild = 0;
+	prev = 0;
+	next = 0;
+	userData = 0;
+}
+
+
+TiXmlNode::~TiXmlNode()
+{
+	TiXmlNode* node = firstChild;
+	TiXmlNode* temp = 0;
+
+	while ( node )
+	{
+		temp = node;
+		node = node->next;
+		delete temp;
+	}	
+}
+
+
+void TiXmlNode::Clear()
+{
+	TiXmlNode* node = firstChild;
+	TiXmlNode* temp = 0;
+
+	while ( node )
+	{
+		temp = node;
+		node = node->next;
+		delete temp;
+	}	
+
+	firstChild = 0;
+	lastChild = 0;
+}
+
+
+TiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node )
+{
+	node->parent = this;
+
+	node->prev = lastChild;
+	node->next = 0;
+
+	if ( lastChild )
+		lastChild->next = node;
+	else
+		firstChild = node;			// it was an empty list.
+
+	lastChild = node;
+	return node;
+}
+
+
+TiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis )
+{
+	TiXmlNode* node = addThis.Clone();
+	if ( !node )
+		return 0;
+
+	return LinkEndChild( node );
+}
+
+
+TiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis )
+{	
+	if ( !beforeThis || beforeThis->parent != this )
+		return 0;
+
+	TiXmlNode* node = addThis.Clone();
+	if ( !node )
+		return 0;
+	node->parent = this;
+
+	node->next = beforeThis;
+	node->prev = beforeThis->prev;
+	if ( beforeThis->prev )
+	{
+		beforeThis->prev->next = node;
+	}
+	else
+	{
+		assert( firstChild == beforeThis );
+		firstChild = node;
+	}
+	beforeThis->prev = node;
+	return node;
+}
+
+
+TiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis )
+{
+	if ( !afterThis || afterThis->parent != this )
+		return 0;
+
+	TiXmlNode* node = addThis.Clone();
+	if ( !node )
+		return 0;
+	node->parent = this;
+
+	node->prev = afterThis;
+	node->next = afterThis->next;
+	if ( afterThis->next )
+	{
+		afterThis->next->prev = node;
+	}
+	else
+	{
+		assert( lastChild == afterThis );
+		lastChild = node;
+	}
+	afterThis->next = node;
+	return node;
+}
+
+
+TiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis )
+{
+	if ( replaceThis->parent != this )
+		return 0;
+
+	TiXmlNode* node = withThis.Clone();
+	if ( !node )
+		return 0;
+
+	node->next = replaceThis->next;
+	node->prev = replaceThis->prev;
+
+	if ( replaceThis->next )
+		replaceThis->next->prev = node;
+	else
+		lastChild = node;
+
+	if ( replaceThis->prev )
+		replaceThis->prev->next = node;
+	else
+		firstChild = node;
+
+	delete replaceThis;
+	node->parent = this;
+	return node;
+}
+
+
+bool TiXmlNode::RemoveChild( TiXmlNode* removeThis )
+{
+	if ( removeThis->parent != this )
+	{	
+		assert( 0 );
+		return false;
+	}
+
+	if ( removeThis->next )
+		removeThis->next->prev = removeThis->prev;
+	else
+		lastChild = removeThis->prev;
+
+	if ( removeThis->prev )
+		removeThis->prev->next = removeThis->next;
+	else
+		firstChild = removeThis->next;
+
+	delete removeThis;
+	return true;
+}
+
+TiXmlNode* TiXmlNode::FirstChild( const char * value ) const
+{
+	TiXmlNode* node;
+	for ( node = firstChild; node; node = node->next )
+	{
+		if ( node->SValue() == TIXML_STRING( value ))
+			return node;
+	}
+	return 0;
+}
+
+TiXmlNode* TiXmlNode::LastChild( const char * value ) const
+{
+	TiXmlNode* node;
+	for ( node = lastChild; node; node = node->prev )
+	{
+		if ( node->SValue() == TIXML_STRING (value))
+			return node;
+	}
+	return 0;
+}
+
+TiXmlNode* TiXmlNode::IterateChildren( TiXmlNode* previous ) const
+{
+	if ( !previous )
+	{
+		return FirstChild();
+	}
+	else
+	{
+		assert( previous->parent == this );
+		return previous->NextSibling();
+	}
+}
+
+TiXmlNode* TiXmlNode::IterateChildren( const char * val, TiXmlNode* previous ) const
+{
+	if ( !previous )
+	{
+		return FirstChild( val );
+	}
+	else
+	{
+		assert( previous->parent == this );
+		return previous->NextSibling( val );
+	}
+}
+
+TiXmlNode* TiXmlNode::NextSibling( const char * value ) const
+{
+	TiXmlNode* node;
+	for ( node = next; node; node = node->next )
+	{
+		if ( node->SValue() == TIXML_STRING (value))
+			return node;
+	}
+	return 0;
+}
+
+
+TiXmlNode* TiXmlNode::PreviousSibling( const char * value ) const
+{
+	TiXmlNode* node;
+	for ( node = prev; node; node = node->prev )
+	{
+		if ( node->SValue() == TIXML_STRING (value))
+			return node;
+	}
+	return 0;
+}
+
+void TiXmlElement::RemoveAttribute( const char * name )
+{
+	TiXmlAttribute* node = attributeSet.Find( name );
+	if ( node )
+	{
+		attributeSet.Remove( node );
+		delete node;
+	}
+}
+
+TiXmlElement* TiXmlNode::FirstChildElement() const
+{
+	TiXmlNode* node;
+
+	for (	node = FirstChild();
+	node;
+	node = node->NextSibling() )
+	{
+		if ( node->ToElement() )
+			return node->ToElement();
+	}
+	return 0;
+}
+
+TiXmlElement* TiXmlNode::FirstChildElement( const char * value ) const
+{
+	TiXmlNode* node;
+
+	for (	node = FirstChild( value );
+	node;
+	node = node->NextSibling( value ) )
+	{
+		if ( node->ToElement() )
+			return node->ToElement();
+	}
+	return 0;
+}
+
+
+TiXmlElement* TiXmlNode::NextSiblingElement() const
+{
+	TiXmlNode* node;
+
+	for (	node = NextSibling();
+	node;
+	node = node->NextSibling() )
+	{
+		if ( node->ToElement() )
+			return node->ToElement();
+	}
+	return 0;
+}
+
+TiXmlElement* TiXmlNode::NextSiblingElement( const char * value ) const
+{
+	TiXmlNode* node;
+
+	for (	node = NextSibling( value );
+	node;
+	node = node->NextSibling( value ) )
+	{
+		if ( node->ToElement() )
+			return node->ToElement();
+	}
+	return 0;
+}
+
+
+
+TiXmlDocument* TiXmlNode::GetDocument() const
+{
+	const TiXmlNode* node;
+
+	for( node = this; node; node = node->parent )
+	{
+		if ( node->ToDocument() )
+			return node->ToDocument();
+	}
+	return 0;
+}
+
+
+TiXmlElement::TiXmlElement (const char * _value)
+: TiXmlNode( TiXmlNode::ELEMENT )
+{
+	firstChild = lastChild = 0;
+	value = _value;
+}
+
+TiXmlElement::~TiXmlElement()
+{
+	while( attributeSet.First() )
+	{
+		TiXmlAttribute* node = attributeSet.First();
+		attributeSet.Remove( node );
+		delete node;
+	}
+}
+
+// BEGIN OGRE CHANGES
+// USE STL ALONE
+#ifndef TIXML_USE_STL
+const char * TiXmlElement::Attribute( const char * name ) const
+{
+	TiXmlAttribute* node = attributeSet.Find( name );
+
+	if ( node )
+		return node->Value();
+
+	return 0;
+}
+
+
+const char * TiXmlElement::Attribute( const char * name, int* i ) const
+{
+	const char * s = Attribute( name );
+	if ( i )
+	{
+		if ( s )
+			*i = atoi( s );
+		else
+			*i = 0;
+	}
+	return s;
+}
+
+
+void TiXmlElement::SetAttribute( const char * name, int val )
+{	
+	char buf[64];
+	sprintf( buf, "%d", val );
+	SetAttribute( name, buf );
+}
+
+
+void TiXmlElement::SetAttribute( const char * name, const char * value )
+{
+	TiXmlAttribute* node = attributeSet.Find( name );
+	if ( node )
+	{
+		node->SetValue( value );
+		return;
+	}
+
+	TiXmlAttribute* attrib = new TiXmlAttribute( name, value );
+	if ( attrib )
+	{
+		attributeSet.Add( attrib );
+	}
+	else
+	{
+		TiXmlDocument* document = GetDocument();
+		if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY );
+	}
+}
+
+#endif
+
+#ifdef TIXML_USE_STL
+
+const char * TiXmlElement::Attribute( const std::string& name ) const
+{
+	TiXmlAttribute* node = attributeSet.Find( name.c_str() );
+
+	if ( node )
+		return node->Value();
+
+	return 0;
+}
+
+
+const char * TiXmlElement::Attribute( const std::string& name, int* i ) const
+{
+	const char * s = Attribute( name );
+	if ( i )
+	{
+		if ( s )
+			*i = atoi( s );
+		else
+			*i = 0;
+	}
+	return s;
+}
+
+
+void TiXmlElement::SetAttribute( const std::string& name, int val )
+{	
+	char buf[64];
+	sprintf( buf, "%d", val );
+	SetAttribute( name, buf );
+}
+
+
+void TiXmlElement::SetAttribute( const std::string& name, const std::string& value )
+{
+	TiXmlAttribute* node = attributeSet.Find( name.c_str() );
+	if ( node )
+	{
+		node->SetValue( value );
+		return;
+	}
+
+	TiXmlAttribute* attrib = new TiXmlAttribute( name, value );
+	if ( attrib )
+	{
+		attributeSet.Add( attrib );
+	}
+	else
+	{
+		TiXmlDocument* document = GetDocument();
+		if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY );
+	}
+}
+
+#endif
+// END OGRE CHANGES
+void TiXmlElement::Print( FILE* cfile, int depth ) const
+{
+	int i;
+	for ( i=0; i<depth; i++ )
+	{
+		fprintf( cfile, "    " );
+	}
+
+	fprintf( cfile, "<%s", value.c_str() );
+
+	TiXmlAttribute* attrib;
+	for ( attrib = attributeSet.First(); attrib; attrib = attrib->Next() )
+	{
+		fprintf( cfile, " " );
+		attrib->Print( cfile, depth );
+	}
+
+	// There are 3 different formatting approaches:
+	// 1) An element without children is printed as a <foo /> node
+	// 2) An element with only a text child is printed as <foo> text </foo>
+	// 3) An element with children is printed on multiple lines.
+	TiXmlNode* node;
+	if ( !firstChild )
+	{
+		fprintf( cfile, " />" );
+	}
+	else if ( firstChild == lastChild && firstChild->ToText() )
+	{
+		fprintf( cfile, ">" );
+		firstChild->Print( cfile, depth + 1 );
+		fprintf( cfile, "</%s>", value.c_str() );
+	}
+	else
+	{
+		fprintf( cfile, ">" );
+
+		for ( node = firstChild; node; node=node->NextSibling() )
+		{
+			if ( !node->ToText() )
+			{
+				fprintf( cfile, "\n" );
+			}
+			node->Print( cfile, depth+1 );
+		}
+		fprintf( cfile, "\n" );
+		for( i=0; i<depth; ++i )
+		fprintf( cfile, "    " );
+		fprintf( cfile, "</%s>", value.c_str() );
+	}
+}
+
+void TiXmlElement::StreamOut( TIXML_OSTREAM * stream ) const
+{
+	(*stream) << "<" << value;
+
+	TiXmlAttribute* attrib;
+	for ( attrib = attributeSet.First(); attrib; attrib = attrib->Next() )
+	{	
+		(*stream) << " ";
+		attrib->StreamOut( stream );
+	}
+
+	// If this node has children, give it a closing tag. Else
+	// make it an empty tag.
+	TiXmlNode* node;
+	if ( firstChild )
+	{ 		
+		(*stream) << ">";
+
+		for ( node = firstChild; node; node=node->NextSibling() )
+		{
+			node->StreamOut( stream );
+		}
+		(*stream) << "</" << value << ">";
+	}
+	else
+	{
+		(*stream) << " />";
+	}
+}
+
+TiXmlNode* TiXmlElement::Clone() const
+{
+	TiXmlElement* clone = new TiXmlElement( Value() );
+	if ( !clone )
+		return 0;
+
+	CopyToClone( clone );
+
+	// Clone the attributes, then clone the children.
+	TiXmlAttribute* attribute = 0;
+	for(	attribute = attributeSet.First();
+	attribute;
+	attribute = attribute->Next() )
+	{
+		clone->SetAttribute( attribute->Name(), attribute->Value() );
+	}
+
+	TiXmlNode* node = 0;
+	for ( node = firstChild; node; node = node->NextSibling() )
+	{
+		clone->LinkEndChild( node->Clone() );
+	}
+	return clone;
+}
+
+
+TiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::DOCUMENT )
+{
+	error = false;
+	//	ignoreWhiteSpace = true;
+}
+
+TiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::DOCUMENT )
+{
+	//	ignoreWhiteSpace = true;
+	value = documentName;
+	error = false;
+}
+
+bool TiXmlDocument::LoadFile()
+{
+	if ( LoadFile( value.c_str() ) )
+		return true;
+
+	return false;
+}
+
+
+bool TiXmlDocument::SaveFile() const
+{
+	if ( SaveFile( value.c_str() ) )
+		return true;
+
+	return false;
+}
+
+bool TiXmlDocument::LoadFile( const char* filename )
+{
+	// Delete the existing data:
+	Clear();
+
+	// There was a really terrifying little bug here. The code:
+	//		value = filename
+	// in the STL case, cause the assignment method of the std::string to
+	// be called. What is strange, is that the std::string had the same
+	// address as it's c_str() method, and so bad things happen. Looks
+	// like a bug in the Microsoft STL implementation.
+	// See STL_STRING_BUG above.
+	// Fixed with the StringToBuffer class.
+	value = filename;
+
+	FILE* file = fopen( value.c_str (), "r" );
+
+	if ( file )
+	{
+		// Get the file size, so we can pre-allocate the string. HUGE speed impact.
+		long length = 0;
+		fseek( file, 0, SEEK_END );
+		length = ftell( file );
+		fseek( file, 0, SEEK_SET );
+
+		// Strange case, but good to handle up front.
+		if ( length == 0 )
+		{
+			fclose( file );
+			return false;
+		}
+
+		// If we have a file, assume it is all one big XML file, and read it in.
+		// The document parser may decide the document ends sooner than the entire file, however.
+		TIXML_STRING data;
+		data.reserve( length );
+
+		const int BUF_SIZE = 2048;
+		char buf[BUF_SIZE];
+
+		while( fgets( buf, BUF_SIZE, file ) )
+		{
+			data += buf;
+		}
+		fclose( file );
+
+		Parse( data.c_str() );
+		if (  !Error() )
+		{
+			return true;
+		}
+	}
+	SetError( TIXML_ERROR_OPENING_FILE );
+	return false;
+}
+
+bool TiXmlDocument::SaveFile( const char * filename ) const
+{
+	// The old c stuff lives on...
+	FILE* fp = fopen( filename, "w" );
+	if ( fp )
+	{
+		Print( fp, 0 );
+		fclose( fp );
+		return true;
+	}
+	return false;
+}
+
+
+TiXmlNode* TiXmlDocument::Clone() const
+{
+	TiXmlDocument* clone = new TiXmlDocument();
+	if ( !clone )
+		return 0;
+
+	CopyToClone( clone );
+	clone->error = error;
+	clone->errorDesc = errorDesc.c_str ();
+
+	TiXmlNode* node = 0;
+	for ( node = firstChild; node; node = node->NextSibling() )
+	{
+		clone->LinkEndChild( node->Clone() );
+	}
+	return clone;
+}
+
+
+void TiXmlDocument::Print( FILE* cfile, int depth ) const
+{
+	TiXmlNode* node;
+	for ( node=FirstChild(); node; node=node->NextSibling() )
+	{
+		node->Print( cfile, depth );
+		fprintf( cfile, "\n" );
+	}
+}
+
+void TiXmlDocument::StreamOut( TIXML_OSTREAM * out ) const
+{
+	TiXmlNode* node;
+	for ( node=FirstChild(); node; node=node->NextSibling() )
+	{
+		node->StreamOut( out );
+
+		// Special rule for streams: stop after the root element.
+		// The stream in code will only read one element, so don't
+		// write more than one.
+		if ( node->ToElement() )
+			break;
+	}
+}
+
+TiXmlAttribute* TiXmlAttribute::Next() const
+{
+	// We are using knowledge of the sentinel. The sentinel
+	// have a value or name.
+	if ( next->value.empty() && next->name.empty() )
+		return 0;
+	return next;
+}
+
+
+TiXmlAttribute* TiXmlAttribute::Previous() const
+{
+	// We are using knowledge of the sentinel. The sentinel
+	// have a value or name.
+	if ( prev->value.empty() && prev->name.empty() )
+		return 0;
+	return prev;
+}
+
+
+void TiXmlAttribute::Print( FILE* cfile, int /*depth*/ ) const
+{
+	TIXML_STRING n, v;
+
+	PutString( Name(), &n );
+	PutString( Value(), &v );
+
+	if (value.find ('\"') == TIXML_STRING::npos)
+		fprintf (cfile, "%s=\"%s\"", n.c_str(), v.c_str() );
+	else
+		fprintf (cfile, "%s='%s'", n.c_str(), v.c_str() );
+}
+
+
+void TiXmlAttribute::StreamOut( TIXML_OSTREAM * stream ) const
+{
+	if (value.find( '\"' ) != TIXML_STRING::npos)
+	{
+		PutString( name, stream );
+		(*stream) << "=" << "'";
+		PutString( value, stream );
+		(*stream) << "'";
+	}
+	else
+	{
+		PutString( name, stream );
+		(*stream) << "=" << "\"";
+		PutString( value, stream );
+		(*stream) << "\"";
+	}
+}
+
+void TiXmlAttribute::SetIntValue( int value )
+{
+	char buf [64];
+	sprintf (buf, "%d", value);
+	SetValue (buf);
+}
+
+void TiXmlAttribute::SetDoubleValue( double value )
+{
+	char buf [64];
+	sprintf (buf, "%lf", value);
+	SetValue (buf);
+}
+
+const int TiXmlAttribute::IntValue() const
+{
+	return atoi (value.c_str ());
+}
+
+const double  TiXmlAttribute::DoubleValue() const
+{
+	return atof (value.c_str ());
+}
+
+void TiXmlComment::Print( FILE* cfile, int depth ) const
+{
+	for ( int i=0; i<depth; i++ )
+	{
+		fputs( "    ", cfile );
+	}
+	fprintf( cfile, "<!--%s-->", value.c_str() );
+}
+
+void TiXmlComment::StreamOut( TIXML_OSTREAM * stream ) const
+{
+	(*stream) << "<!--";
+	PutString( value, stream );
+	(*stream) << "-->";
+}
+
+TiXmlNode* TiXmlComment::Clone() const
+{
+	TiXmlComment* clone = new TiXmlComment();
+
+	if ( !clone )
+		return 0;
+
+	CopyToClone( clone );
+	return clone;
+}
+
+
+void TiXmlText::Print( FILE* cfile, int /*depth*/ ) const
+{
+	TIXML_STRING buffer;
+	PutString( value, &buffer );
+	fprintf( cfile, "%s", buffer.c_str() );
+}
+
+
+void TiXmlText::StreamOut( TIXML_OSTREAM * stream ) const
+{
+	PutString( value, stream );
+}
+
+
+TiXmlNode* TiXmlText::Clone() const
+{	
+	TiXmlText* clone = 0;
+	clone = new TiXmlText( "" );
+
+	if ( !clone )
+		return 0;
+
+	CopyToClone( clone );
+	return clone;
+}
+
+
+TiXmlDeclaration::TiXmlDeclaration( const char * _version,
+	const char * _encoding,
+	const char * _standalone )
+: TiXmlNode( TiXmlNode::DECLARATION )
+{
+	version = _version;
+	encoding = _encoding;
+	standalone = _standalone;
+}
+
+
+void TiXmlDeclaration::Print( FILE* cfile, int /*depth*/ ) const
+{
+	fprintf (cfile, "<?xml ");
+
+	if ( !version.empty() )
+		fprintf (cfile, "version=\"%s\" ", version.c_str ());
+	if ( !encoding.empty() )
+		fprintf (cfile, "encoding=\"%s\" ", encoding.c_str ());
+	if ( !standalone.empty() )
+		fprintf (cfile, "standalone=\"%s\" ", standalone.c_str ());
+	fprintf (cfile, "?>");
+}
+
+void TiXmlDeclaration::StreamOut( TIXML_OSTREAM * stream ) const
+{
+	(*stream) << "<?xml ";
+
+	if ( !version.empty() )
+	{
+		(*stream) << "version=\"";
+		PutString( version, stream );
+		(*stream) << "\" ";
+	}
+	if ( !encoding.empty() )
+	{
+		(*stream) << "encoding=\"";
+		PutString( encoding, stream );
+		(*stream ) << "\" ";
+	}
+	if ( !standalone.empty() )
+	{
+		(*stream) << "standalone=\"";
+		PutString( standalone, stream );
+		(*stream) << "\" ";
+	}
+	(*stream) << "?>";
+}
+
+TiXmlNode* TiXmlDeclaration::Clone() const
+{	
+	TiXmlDeclaration* clone = new TiXmlDeclaration();
+
+	if ( !clone )
+		return 0;
+
+	CopyToClone( clone );
+	clone->version = version;
+	clone->encoding = encoding;
+	clone->standalone = standalone;
+	return clone;
+}
+
+
+void TiXmlUnknown::Print( FILE* cfile, int depth ) const
+{
+	for ( int i=0; i<depth; i++ )
+		fprintf( cfile, "    " );
+	fprintf( cfile, "%s", value.c_str() );
+}
+
+void TiXmlUnknown::StreamOut( TIXML_OSTREAM * stream ) const
+{
+	(*stream) << "<" << value << ">";		// Don't use entities hear! It is unknown.
+}
+
+TiXmlNode* TiXmlUnknown::Clone() const
+{
+	TiXmlUnknown* clone = new TiXmlUnknown();
+
+	if ( !clone )
+		return 0;
+
+	CopyToClone( clone );
+	return clone;
+}
+
+
+TiXmlAttributeSet::TiXmlAttributeSet()
+{
+	sentinel.next = &sentinel;
+	sentinel.prev = &sentinel;
+}
+
+
+TiXmlAttributeSet::~TiXmlAttributeSet()
+{
+	assert( sentinel.next == &sentinel );
+	assert( sentinel.prev == &sentinel );
+}
+
+
+void TiXmlAttributeSet::Add( TiXmlAttribute* addMe )
+{
+	assert( !Find( addMe->Name() ) );	// Shouldn't be multiply adding to the set.
+
+	addMe->next = &sentinel;
+	addMe->prev = sentinel.prev;
+
+	sentinel.prev->next = addMe;
+	sentinel.prev      = addMe;
+}
+
+void TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe )
+{
+	TiXmlAttribute* node;
+
+	for( node = sentinel.next; node != &sentinel; node = node->next )
+	{
+		if ( node == removeMe )
+		{
+			node->prev->next = node->next;
+			node->next->prev = node->prev;
+			node->next = 0;
+			node->prev = 0;
+			return;
+		}
+	}
+	assert( 0 );		// we tried to remove a non-linked attribute.
+}
+
+TiXmlAttribute*	TiXmlAttributeSet::Find( const char * name ) const
+{
+	TiXmlAttribute* node;
+
+	for( node = sentinel.next; node != &sentinel; node = node->next )
+	{
+		if ( node->name == name )
+			return node;
+	}
+	return 0;
+}
+
+
+#ifdef TIXML_USE_STL	
+TIXML_ISTREAM & operator >> (TIXML_ISTREAM & in, TiXmlNode & base)
+{
+	TIXML_STRING tag;
+	tag.reserve( 8 * 1000 );
+	base.StreamIn( &in, &tag );
+
+	base.Parse( tag.c_str() );
+	return in;
+}
+#endif
+
+
+TIXML_OSTREAM & operator<< (TIXML_OSTREAM & out, const TiXmlNode & base)
+{
+	base.StreamOut (& out);
+	return out;
+}
+
Index: /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxml.h
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxml.h	(revision 61)
+++ /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinyxml.h	(revision 61)
@@ -0,0 +1,956 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original code (2.0 and earlier )copyright (c) 2000-2002 Lee Thomason (www.grinninglizard.com)
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+
+#ifndef TINYXML_INCLUDED
+#define TINYXML_INCLUDED
+
+#ifdef _MSC_VER
+#pragma warning( disable : 4530 )
+#pragma warning( disable : 4786 )
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+// Help out windows:
+#if defined( _DEBUG ) && !defined( DEBUG )
+#define DEBUG
+#endif
+
+#if defined( DEBUG ) && defined( _MSC_VER )
+#define NOMINMAX
+#include <windows.h>
+#define TIXML_LOG OutputDebugString
+#else
+#define TIXML_LOG printf
+#endif
+
+
+#ifdef TIXML_USE_STL
+	#include <string>
+    #include <iostream>
+	#define TIXML_STRING	std::string
+	#define TIXML_ISTREAM	std::istream
+	#define TIXML_OSTREAM	std::ostream
+#else
+	#include "tinystr.h"
+	#define TIXML_STRING	TiXmlString
+	#define TIXML_OSTREAM	TiXmlOutStream
+#endif
+
+class TiXmlDocument;
+class TiXmlElement;
+class TiXmlComment;
+class TiXmlUnknown;
+class TiXmlAttribute;
+class TiXmlText;
+class TiXmlDeclaration;
+
+
+/*  TiXmlBase is a base class for every class in TinyXml.
+	It does little except to establish that TinyXml classes
+	can be printed and provide some utility functions.
+
+	In XML, the document and elements can contain
+	other elements and other types of nodes.
+
+	@verbatim
+	A Document can contain:	Element	(container or leaf)
+							Comment (leaf)
+							Unknown (leaf)
+							Declaration( leaf )
+
+	An Element can contain:	Element (container or leaf)
+							Text	(leaf)
+							Attributes (not on tree)
+							Comment (leaf)
+							Unknown (leaf)
+
+	A Decleration contains: Attributes (not on tree)
+	@endverbatim
+*/
+class TiXmlBase
+{
+	friend class TiXmlNode;
+	friend class TiXmlElement;
+	friend class TiXmlDocument;
+
+public:
+	TiXmlBase()								{}
+	virtual ~TiXmlBase()					{}
+
+	/**	All TinyXml classes can print themselves to a filestream.
+		This is a formatted print, and will insert tabs and newlines.
+		
+		(For an unformatted stream, use the << operator.)
+	*/
+	virtual void Print( FILE* cfile, int depth ) const = 0;
+
+	/**	The world does not agree on whether white space should be kept or
+		not. In order to make everyone happy, these global, static functions
+		are provided to set whether or not TinyXml will condense all white space
+		into a single space or not. The default is to condense. Note changing these
+		values is not thread safe.
+	*/
+	static void SetCondenseWhiteSpace( bool condense )		{ condenseWhiteSpace = condense; }
+
+	/// Return the current white space setting.
+	static bool IsWhiteSpaceCondensed()						{ return condenseWhiteSpace; }
+
+protected:
+
+	static const char*	SkipWhiteSpace( const char* );
+	inline static bool	IsWhiteSpace( int c )		{ return ( isspace( c ) || c == '\n' || c == '\r' ); }
+
+	virtual void StreamOut (TIXML_OSTREAM *) const = 0;
+
+	#ifdef TIXML_USE_STL
+	    static bool	StreamWhiteSpace( TIXML_ISTREAM * in, TIXML_STRING * tag );
+	    static bool StreamTo( TIXML_ISTREAM * in, int character, TIXML_STRING * tag );
+	#endif
+
+	/*	Reads an XML name into the string provided. Returns
+		a pointer just past the last character of the name,
+		or 0 if the function has an error.
+	*/
+	static const char* ReadName( const char* p, TIXML_STRING* name );
+
+	/*	Reads text. Returns a pointer past the given end tag.
+		Wickedly complex options, but it keeps the (sensitive) code in one place.
+	*/
+	static const char* ReadText(	const char* in,				// where to start
+									TIXML_STRING* text,			// the string read
+									bool ignoreWhiteSpace,		// whether to keep the white space
+									const char* endTag,			// what ends this text
+									bool ignoreCase );			// whether to ignore case in the end tag
+	virtual const char* Parse( const char* p ) = 0;
+
+	// If an entity has been found, transform it into a character.
+	static const char* GetEntity( const char* in, char* value );
+
+	// Get a character, while interpreting entities.
+	inline static const char* GetChar( const char* p, char* value )
+	{
+		assert( p );
+		if ( *p == '&' )
+		{
+			return GetEntity( p, value );
+		}
+		else
+		{
+			*value = *p;
+			return p+1;
+		}
+	}
+
+	// Puts a string to a stream, expanding entities as it goes.
+	// Note this should not contian the '<', '>', etc, or they will be transformed into entities!
+	static void PutString( const TIXML_STRING& str, TIXML_OSTREAM* out );
+
+	static void PutString( const TIXML_STRING& str, TIXML_STRING* out );
+
+	// Return true if the next characters in the stream are any of the endTag sequences.
+	bool static StringEqual(	const char* p,
+								const char* endTag,
+								bool ignoreCase );
+
+
+	enum
+	{
+		TIXML_NO_ERROR = 0,
+		TIXML_ERROR,
+		TIXML_ERROR_OPENING_FILE,
+		TIXML_ERROR_OUT_OF_MEMORY,
+		TIXML_ERROR_PARSING_ELEMENT,
+		TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME,
+		TIXML_ERROR_READING_ELEMENT_VALUE,
+		TIXML_ERROR_READING_ATTRIBUTES,
+		TIXML_ERROR_PARSING_EMPTY,
+		TIXML_ERROR_READING_END_TAG,
+		TIXML_ERROR_PARSING_UNKNOWN,
+		TIXML_ERROR_PARSING_COMMENT,
+		TIXML_ERROR_PARSING_DECLARATION,
+		TIXML_ERROR_DOCUMENT_EMPTY,
+
+		TIXML_ERROR_STRING_COUNT
+	};
+	static const char* errorString[ TIXML_ERROR_STRING_COUNT ];
+
+private:
+	struct Entity
+	{
+		const char*     str;
+		unsigned int	strLength;
+		char		    chr;
+	};
+	enum
+	{
+		NUM_ENTITY = 5,
+		MAX_ENTITY_LENGTH = 6
+
+	};
+	static Entity entity[ NUM_ENTITY ];
+	static bool condenseWhiteSpace;
+};
+
+
+/*  The parent class for everything in the Document Object Model.
+	(Except for attributes, which are contained in elements.)
+	Nodes have siblings, a parent, and children. A node can be
+	in a document, or stand on its own. The type of a TiXmlNode
+	can be queried, and it can be cast to its more defined type.
+*/
+class TiXmlNode : public TiXmlBase
+{
+	friend class TiXmlDocument;
+	friend class TiXmlElement;
+
+public:
+	#ifdef TIXML_USE_STL	
+
+	    /** An input stream operator, for every class. Tolerant of newlines and
+		    formatting, but doesn't expect them.
+	    */
+	    friend std::istream& operator >> (std::istream& in, TiXmlNode& base);
+
+	    /** An output stream operator, for every class. Note that this outputs
+		    without any newlines or formatting, as opposed to Print(), which
+		    includes tabs and new lines.
+
+		    The operator<< and operator>> are not completely symmetric. Writing
+		    a node to a stream is very well defined. You'll get a nice stream
+		    of output, without any extra whitespace or newlines.
+		    
+		    But reading is not as well defined. (As it always is.) If you create
+		    a TiXmlElement (for example) and read that from an input stream,
+		    the text needs to define an element or junk will result. This is
+		    true of all input streams, but it's worth keeping in mind.
+
+		    A TiXmlDocument will read nodes until it reads a root element.
+	    */	
+	    friend std::ostream & operator<< (std::ostream& out, const TiXmlNode& base);
+
+	#else
+	    // Used internally, not part of the public API.
+	    friend TIXML_OSTREAM& operator<< (TIXML_OSTREAM& out, const TiXmlNode& base);
+	#endif
+
+	/** The types of XML nodes supported by TinyXml. (All the
+			unsupported types are picked up by UNKNOWN.)
+	*/
+	enum NodeType
+	{
+		DOCUMENT,
+		ELEMENT,
+		COMMENT,
+		UNKNOWN,
+		TEXT,
+		DECLARATION,
+		TYPECOUNT
+	};
+
+	virtual ~TiXmlNode();
+
+	/** The meaning of 'value' changes for the specific type of
+		TiXmlNode.
+		@verbatim
+		Document:	filename of the xml file
+		Element:	name of the element
+		Comment:	the comment text
+		Unknown:	the tag contents
+		Text:		the text string
+		@endverbatim
+
+		The subclasses will wrap this function.
+	*/
+	const char * Value () const { return value.c_str (); }
+
+	/** Changes the value of the node. Defined as:
+		@verbatim
+		Document:	filename of the xml file
+		Element:	name of the element
+		Comment:	the comment text
+		Unknown:	the tag contents
+		Text:		the text string
+		@endverbatim
+	*/
+	void SetValue (const char * _value) { value = _value;}
+
+    #ifdef TIXML_USE_STL
+	/// STL std::string form.
+	void SetValue( const std::string& value )    
+	{	  
+		SetValue( value.c_str() );    	
+	}	
+	#endif
+
+	/// Delete all the children of this node. Does not affect 'this'.
+	void Clear();
+
+	/// One step up the DOM.
+	TiXmlNode* Parent() const					{ return parent; }
+
+	TiXmlNode* FirstChild()	const	{ return firstChild; }		///< The first child of this node. Will be null if there are no children.
+	TiXmlNode* FirstChild( const char * value ) const;			///< The first child of this node with the matching 'value'. Will be null if none found.
+
+	TiXmlNode* LastChild() const	{ return lastChild; }		/// The last child of this node. Will be null if there are no children.
+	TiXmlNode* LastChild( const char * value ) const;			/// The last child of this node matching 'value'. Will be null if there are no children.
+
+    #ifdef TIXML_USE_STL
+	TiXmlNode* FirstChild( const std::string& value ) const	{	return FirstChild (value.c_str ());	}	///< STL std::string form.
+	TiXmlNode* LastChild( const std::string& value ) const	{	return LastChild (value.c_str ());	}	///< STL std::string form.
+	#endif
+
+	/** An alternate way to walk the children of a node.
+		One way to iterate over nodes is:
+		@verbatim
+			for( child = parent->FirstChild(); child; child = child->NextSibling() )
+		@endverbatim
+
+		IterateChildren does the same thing with the syntax:
+		@verbatim
+			child = 0;
+			while( child = parent->IterateChildren( child ) )
+		@endverbatim
+
+		IterateChildren takes the previous child as input and finds
+		the next one. If the previous child is null, it returns the
+		first. IterateChildren will return null when done.
+	*/
+	TiXmlNode* IterateChildren( TiXmlNode* previous ) const;
+
+	/// This flavor of IterateChildren searches for children with a particular 'value'
+	TiXmlNode* IterateChildren( const char * value, TiXmlNode* previous ) const;
+
+    #ifdef TIXML_USE_STL
+	TiXmlNode* IterateChildren( const std::string& value, TiXmlNode* previous ) const	{	return IterateChildren (value.c_str (), previous);	}	///< STL std::string form.
+	#endif
+
+	/** Add a new node related to this. Adds a child past the LastChild.
+		Returns a pointer to the new object or NULL if an error occured.
+	*/
+	TiXmlNode* InsertEndChild( const TiXmlNode& addThis );
+
+	/** Add a new node related to this. Adds a child before the specified child.
+		Returns a pointer to the new object or NULL if an error occured.
+	*/
+	TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis );
+
+	/** Add a new node related to this. Adds a child after the specified child.
+		Returns a pointer to the new object or NULL if an error occured.
+	*/
+	TiXmlNode* InsertAfterChild(  TiXmlNode* afterThis, const TiXmlNode& addThis );
+
+	/** Replace a child of this node.
+		Returns a pointer to the new object or NULL if an error occured.
+	*/
+	TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis );
+
+	/// Delete a child of this node.
+	bool RemoveChild( TiXmlNode* removeThis );
+
+	/// Navigate to a sibling node.
+	TiXmlNode* PreviousSibling() const			{ return prev; }
+
+	/// Navigate to a sibling node.
+	TiXmlNode* PreviousSibling( const char * ) const;
+
+    #ifdef TIXML_USE_STL
+	TiXmlNode* PreviousSibling( const std::string& value ) const	{	return PreviousSibling (value.c_str ());	}	///< STL std::string form.
+	TiXmlNode* NextSibling( const std::string& value) const	{	return NextSibling (value.c_str ());	}	///< STL std::string form.
+	#endif
+
+	/// Navigate to a sibling node.
+	TiXmlNode* NextSibling() const				{ return next; }
+
+	/// Navigate to a sibling node with the given 'value'.
+	TiXmlNode* NextSibling( const char * ) const;
+
+	/** Convenience function to get through elements.
+		Calls NextSibling and ToElement. Will skip all non-Element
+		nodes. Returns 0 if there is not another element.
+	*/
+	TiXmlElement* NextSiblingElement() const;
+
+	/** Convenience function to get through elements.
+		Calls NextSibling and ToElement. Will skip all non-Element
+		nodes. Returns 0 if there is not another element.
+	*/
+	TiXmlElement* NextSiblingElement( const char * ) const;
+
+    #ifdef TIXML_USE_STL
+	TiXmlElement* NextSiblingElement( const std::string& value) const	{	return NextSiblingElement (value.c_str ());	}	///< STL std::string form.
+	#endif
+
+	/// Convenience function to get through elements.
+	TiXmlElement* FirstChildElement()	const;
+
+	/// Convenience function to get through elements.
+	TiXmlElement* FirstChildElement( const char * value ) const;
+
+    #ifdef TIXML_USE_STL
+	TiXmlElement* FirstChildElement( const std::string& value ) const	{	return FirstChildElement (value.c_str ());	}	///< STL std::string form.
+	#endif
+
+	/// Query the type (as an enumerated value, above) of this node.
+	virtual int Type() const	{ return type; }
+
+	/** Return a pointer to the Document this node lives in.
+		Returns null if not in a document.
+	*/
+	TiXmlDocument* GetDocument() const;
+
+	/// Returns true if this node has no children.
+	bool NoChildren() const						{ return !firstChild; }
+
+	TiXmlDocument* ToDocument()	const		{ return ( this && type == DOCUMENT ) ? (TiXmlDocument*) this : 0; } ///< Cast to a more defined type. Will return null not of the requested type.
+	TiXmlElement*  ToElement() const		{ return ( this && type == ELEMENT  ) ? (TiXmlElement*)  this : 0; } ///< Cast to a more defined type. Will return null not of the requested type.
+	TiXmlComment*  ToComment() const		{ return ( this && type == COMMENT  ) ? (TiXmlComment*)  this : 0; } ///< Cast to a more defined type. Will return null not of the requested type.
+	TiXmlUnknown*  ToUnknown() const		{ return ( this && type == UNKNOWN  ) ? (TiXmlUnknown*)  this : 0; } ///< Cast to a more defined type. Will return null not of the requested type.
+	TiXmlText*	   ToText()    const		{ return ( this && type == TEXT     ) ? (TiXmlText*)     this : 0; } ///< Cast to a more defined type. Will return null not of the requested type.
+	TiXmlDeclaration* ToDeclaration() const	{ return ( this && type == DECLARATION ) ? (TiXmlDeclaration*) this : 0; } ///< Cast to a more defined type. Will return null not of the requested type.
+
+	virtual TiXmlNode* Clone() const = 0;
+
+	void  SetUserData( void* user )			{ userData = user; }
+	void* GetUserData()						{ return userData; }
+
+protected:
+	TiXmlNode( NodeType type );
+
+	#ifdef TIXML_USE_STL
+	    // The real work of the input operator.
+	    virtual void StreamIn( TIXML_ISTREAM* in, TIXML_STRING* tag ) = 0;
+	#endif
+
+	// The node is passed in by ownership. This object will delete it.
+	TiXmlNode* LinkEndChild( TiXmlNode* addThis );
+
+	// Figure out what is at *p, and parse it. Returns null if it is not an xml node.
+	TiXmlNode* Identify( const char* start );
+	void CopyToClone( TiXmlNode* target ) const	{ target->SetValue (value.c_str() );
+												  target->userData = userData; }
+
+	// Internal Value function returning a TIXML_STRING
+	TIXML_STRING SValue() const	{ return value ; }
+
+	TiXmlNode*		parent;
+	NodeType		type;
+
+	TiXmlNode*		firstChild;
+	TiXmlNode*		lastChild;
+
+	TIXML_STRING	value;
+
+	TiXmlNode*		prev;
+	TiXmlNode*		next;
+	void*			userData;
+};
+
+
+/*  An attribute is a name-value pair. Elements have an arbitrary
+	number of attributes, each with a unique name.
+
+	@note The attributes are not TiXmlNodes, since they are not
+		  part of the tinyXML document object model. There are other
+		  suggested ways to look at this problem.
+
+	@note Attributes have a parent
+*/
+class TiXmlAttribute : public TiXmlBase
+{
+	friend class TiXmlAttributeSet;
+
+public:
+	/// Construct an empty attribute.
+	TiXmlAttribute() : prev( 0 ), next( 0 )	{}
+
+	#ifdef TIXML_USE_STL
+	/// std::string constructor.
+	TiXmlAttribute( const std::string& _name, const std::string& _value )
+	{
+		name = _name;
+		value = _value;
+	}
+	#endif
+
+	/// Construct an attribute with a name and value.
+	TiXmlAttribute( const char * _name, const char * _value ): name( _name ), value( _value ), prev( 0 ), next( 0 ) {}
+	const char*		Name()  const		{ return name.c_str (); }		///< Return the name of this attribute.
+	const char*		Value() const		{ return value.c_str (); }		///< Return the value of this attribute.
+	const int       IntValue() const;									///< Return the value of this attribute, converted to an integer.
+	const double	DoubleValue() const;								///< Return the value of this attribute, converted to a double.
+
+	void SetName( const char* _name )	{ name = _name; }				///< Set the name of this attribute.
+	void SetValue( const char* _value )	{ value = _value; }				///< Set the value.
+
+	void SetIntValue( int value );										///< Set the value from an integer.
+	void SetDoubleValue( double value );								///< Set the value from a double.
+
+    #ifdef TIXML_USE_STL
+	/// STL std::string form.
+	void SetName( const std::string& _name )	
+	{	
+		SetName(_name.c_str() );	
+	}
+	/// STL std::string form.	
+	void SetValue( const std::string& _value )	
+	{	
+		SetValue( value.c_str() );	
+	}
+	#endif
+
+	/// Get the next sibling attribute in the DOM. Returns null at end.
+	TiXmlAttribute* Next() const;
+	/// Get the previous sibling attribute in the DOM. Returns null at beginning.
+	TiXmlAttribute* Previous() const;
+
+	bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; }
+	bool operator<( const TiXmlAttribute& rhs )	 const { return name < rhs.name; }
+	bool operator>( const TiXmlAttribute& rhs )  const { return name > rhs.name; }
+
+	/*	[internal use]
+		Attribtue parsing starts: first letter of the name
+						 returns: the next char after the value end quote
+	*/
+	virtual const char* Parse( const char* p );
+
+	// [internal use]
+	virtual void Print( FILE* cfile, int depth ) const;
+
+	virtual void StreamOut( TIXML_OSTREAM * out ) const;
+	// [internal use]
+	// Set the document pointer so the attribute can report errors.
+	void SetDocument( TiXmlDocument* doc )	{ document = doc; }
+
+private:
+	TiXmlDocument*	document;	// A pointer back to a document, for error reporting.
+	TIXML_STRING name;
+	TIXML_STRING value;
+	TiXmlAttribute*	prev;
+	TiXmlAttribute*	next;
+};
+
+
+/*	A class used to manage a group of attributes.
+	It is only used internally, both by the ELEMENT and the DECLARATION.
+	
+	The set can be changed transparent to the Element and Declaration
+	classes that use it, but NOT transparent to the Attribute
+	which has to implement a next() and previous() method. Which makes
+	it a bit problematic and prevents the use of STL.
+
+	This version is implemented with circular lists because:
+		- I like circular lists
+		- it demonstrates some independence from the (typical) doubly linked list.
+*/
+class TiXmlAttributeSet
+{
+public:
+	TiXmlAttributeSet();
+	~TiXmlAttributeSet();
+
+	void Add( TiXmlAttribute* attribute );
+	void Remove( TiXmlAttribute* attribute );
+
+	TiXmlAttribute* First() const	{ return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; }
+	TiXmlAttribute* Last()  const	{ return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; }
+	TiXmlAttribute*	Find( const char * name ) const;
+
+private:
+	TiXmlAttribute sentinel;
+};
+
+
+/*  The element is a container class. It has a value, the element name,
+	and can contain other elements, text, comments, and unknowns.
+	Elements also contain an arbitrary number of attributes.
+*/
+class TiXmlElement : public TiXmlNode
+{
+public:
+	/// Construct an element.
+	TiXmlElement (const char * in_value);
+
+	#ifdef TIXML_USE_STL
+	/// std::string constructor.
+	TiXmlElement( const std::string& _value ) : 	TiXmlNode( TiXmlNode::ELEMENT )
+	{
+		firstChild = lastChild = 0;
+		value = _value;
+	}
+	#endif
+
+	virtual ~TiXmlElement();
+
+// OGRE CHANGE 
+// Resolve ambiguity of std::string / const char* conversion of Ogre::String
+#ifndef TIXML_USE_STL
+// OGRE CHANGE
+	/** Given an attribute name, attribute returns the value
+		for the attribute of that name, or null if none exists.
+	*/
+	const char* Attribute( const char* name ) const;
+
+	/** Given an attribute name, attribute returns the value
+		for the attribute of that name, or null if none exists.
+		If the attribute exists and can be converted to an integer,
+		the integer value will be put in the return 'i', if 'i'
+		is non-null.
+	*/
+	const char* Attribute( const char* name, int* i ) const;
+
+	/** Sets an attribute of name to a given value. The attribute
+		will be created if it does not exist, or changed if it does.
+	*/
+	void SetAttribute( const char* name, const char * value );
+// OGRE CHANGE
+#endif
+// OGRE CHANGE
+    #ifdef TIXML_USE_STL
+	const char* Attribute( const std::string& name ) const;
+	const char* Attribute( const std::string& name, int* i ) const;
+
+	/// STL std::string form.
+	void SetAttribute( const std::string& name, const std::string& value );
+	///< STL std::string form.
+	void SetAttribute( const std::string& name, int value );
+	#endif
+
+	/** Sets an attribute of name to a given value. The attribute
+		will be created if it does not exist, or changed if it does.
+	*/
+	void SetAttribute( const char * name, int value );
+
+	/** Deletes an attribute with the given name.
+	*/
+	void RemoveAttribute( const char * name );
+    #ifdef TIXML_USE_STL
+	void RemoveAttribute( const std::string& name )	{	RemoveAttribute (name.c_str ());	}	///< STL std::string form.
+	#endif
+
+	TiXmlAttribute* FirstAttribute() const	{ return attributeSet.First(); }		///< Access the first attribute in this element.
+	TiXmlAttribute* LastAttribute()	const 	{ return attributeSet.Last(); }		///< Access the last attribute in this element.
+
+	// [internal use] Creates a new Element and returs it.
+	virtual TiXmlNode* Clone() const;
+	// [internal use]
+
+	virtual void Print( FILE* cfile, int depth ) const;
+
+protected:
+
+	// Used to be public [internal use]
+	#ifdef TIXML_USE_STL
+	    virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
+	#endif
+	virtual void StreamOut( TIXML_OSTREAM * out ) const;
+
+	/*	[internal use]
+		Attribtue parsing starts: next char past '<'
+						 returns: next char past '>'
+	*/
+	virtual const char* Parse( const char* p );
+
+	/*	[internal use]
+		Reads the "value" of the element -- another element, or text.
+		This should terminate with the current end tag.
+	*/
+	const char* ReadValue( const char* in );
+
+private:
+	TiXmlAttributeSet attributeSet;
+};
+
+
+/* 	An XML comment.
+*/
+class TiXmlComment : public TiXmlNode
+{
+public:
+	/// Constructs an empty comment.
+	TiXmlComment() : TiXmlNode( TiXmlNode::COMMENT ) {}
+	virtual ~TiXmlComment()	{}
+
+	// [internal use] Creates a new Element and returs it.
+	virtual TiXmlNode* Clone() const;
+	// [internal use]
+	virtual void Print( FILE* cfile, int depth ) const;
+protected:
+	// used to be public
+	#ifdef TIXML_USE_STL
+	    virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
+	#endif
+	virtual void StreamOut( TIXML_OSTREAM * out ) const;
+	/*	[internal use]
+		Attribtue parsing starts: at the ! of the !--
+						 returns: next char past '>'
+	*/
+	virtual const char* Parse( const char* p );
+};
+
+
+/*  XML text. Contained in an element.
+*/
+class TiXmlText : public TiXmlNode
+{
+	friend class TiXmlElement;
+public:
+	/// Constructor.
+	TiXmlText (const char * initValue) : TiXmlNode (TiXmlNode::TEXT)
+	{
+		SetValue( initValue );
+	}
+	virtual ~TiXmlText() {}
+
+	#ifdef TIXML_USE_STL
+	/// Constructor.
+	TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TEXT)
+	{
+		SetValue( initValue );
+	}
+	#endif
+
+protected :
+	// [internal use] Creates a new Element and returns it.
+	virtual TiXmlNode* Clone() const;
+	// [internal use]
+	virtual void Print( FILE* cfile, int depth ) const;
+	virtual void StreamOut ( TIXML_OSTREAM * out ) const;
+	// [internal use]
+	bool Blank() const;	// returns true if all white space and new lines
+	/*	[internal use]
+			Attribtue parsing starts: First char of the text
+							 returns: next char past '>'
+		*/
+	virtual const char* Parse( const char* p );
+	// [internal use]
+	#ifdef TIXML_USE_STL
+	    virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
+	#endif
+};
+
+
+/*  In correct XML the declaration is the first entry in the file.
+	@verbatim
+		<?xml version="1.0" standalone="yes"?>
+	@endverbatim
+
+	TinyXml will happily read or write files without a declaration,
+	however. There are 3 possible attributes to the declaration:
+	version, encoding, and standalone.
+
+	Note: In this version of the code, the attributes are
+	handled as special cases, not generic attributes, simply
+	because there can only be at most 3 and they are always the same.
+*/
+class TiXmlDeclaration : public TiXmlNode
+{
+public:
+	/// Construct an empty declaration.
+	TiXmlDeclaration()   : TiXmlNode( TiXmlNode::DECLARATION ) {}
+
+#ifdef TIXML_USE_STL
+	/// Constructor.
+	TiXmlDeclaration(
+						const std::string& _version,
+						const std::string& _encoding,
+						const std::string& _standalone )
+					: TiXmlNode( TiXmlNode::DECLARATION )
+	{
+		version = _version;
+		encoding = _encoding;
+		standalone = _standalone;
+	}
+#endif
+
+	/// Construct.
+	TiXmlDeclaration::TiXmlDeclaration( const char * _version,
+										const char * _encoding,
+										const char * _standalone );
+
+	virtual ~TiXmlDeclaration()	{}
+
+	/// Version. Will return empty if none was found.
+	const char * Version() const		{ return version.c_str (); }
+	/// Encoding. Will return empty if none was found.
+	const char * Encoding() const		{ return encoding.c_str (); }
+	/// Is this a standalone document?
+	const char * Standalone() const		{ return standalone.c_str (); }
+
+	// [internal use] Creates a new Element and returs it.
+	virtual TiXmlNode* Clone() const;
+	// [internal use]
+	virtual void Print( FILE* cfile, int depth ) const;
+
+protected:
+	// used to be public
+	#ifdef TIXML_USE_STL
+	    virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
+	#endif
+	virtual void StreamOut ( TIXML_OSTREAM * out) const;
+	//	[internal use]
+	//	Attribtue parsing starts: next char past '<'
+	//					 returns: next char past '>'
+
+	virtual const char* Parse( const char* p );
+
+private:
+	TIXML_STRING version;
+	TIXML_STRING encoding;
+	TIXML_STRING standalone;
+};
+
+
+/*  Any tag that tinyXml doesn't recognize is save as an
+	unknown. It is a tag of text, but should not be modified.
+	It will be written back to the XML, unchanged, when the file
+	is saved.
+*/
+class TiXmlUnknown : public TiXmlNode
+{
+public:
+	TiXmlUnknown() : TiXmlNode( TiXmlNode::UNKNOWN ) {}
+	virtual ~TiXmlUnknown() {}
+
+	// [internal use]
+	virtual TiXmlNode* Clone() const;
+	// [internal use]
+	virtual void Print( FILE* cfile, int depth ) const;
+protected:
+	// used to be public
+	#ifdef TIXML_USE_STL
+	    virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
+	#endif
+	virtual void StreamOut ( TIXML_OSTREAM * out ) const;
+	/*	[internal use]
+		Attribute parsing starts: First char of the text
+						 returns: next char past '>'
+	*/
+	virtual const char* Parse( const char* p );
+};
+
+
+/*  Always the top level node. A document binds together all the
+	XML pieces. It can be saved, loaded, and printed to the screen.
+	The 'value' of a document node is the xml file name.
+*/
+class TiXmlDocument : public TiXmlNode
+{
+public:
+	/// Create an empty document, that has no name.
+	TiXmlDocument();
+	/// Create a document with a name. The name of the document is also the filename of the xml.
+	TiXmlDocument( const char * documentName );
+
+	#ifdef TIXML_USE_STL
+	/// Constructor.
+	TiXmlDocument( const std::string& documentName ) :
+	    TiXmlNode( TiXmlNode::DOCUMENT )
+	{
+        value = documentName;
+		error = false;
+	}
+	#endif
+
+	virtual ~TiXmlDocument() {}
+
+	/** Load a file using the current document value.
+		Returns true if successful. Will delete any existing
+		document data before loading.
+	*/
+	bool LoadFile();
+	/// Save a file using the current document value. Returns true if successful.
+	bool SaveFile() const;
+	/// Load a file using the given filename. Returns true if successful.
+	bool LoadFile( const char * filename );
+	/// Save a file using the given filename. Returns true if successful.
+	bool SaveFile( const char * filename ) const;
+
+	#ifdef TIXML_USE_STL
+	bool LoadFile( const std::string& filename )			///< STL std::string version.
+	{
+		return ( LoadFile( filename.c_str() ));
+	}
+	bool SaveFile( const std::string& filename ) const		///< STL std::string version.
+	{
+		//StringToBuffer f( filename );
+		return ( SaveFile( filename.c_str() ));
+	}
+	#endif
+
+	/// Parse the given null terminated block of xml data.
+	virtual const char* Parse( const char* p );
+
+	/** Get the root element -- the only top level element -- of the document.
+		In well formed XML, there should only be one. TinyXml is tolerant of
+		multiple elements at the document level.
+	*/
+	TiXmlElement* RootElement() const		{ return FirstChildElement(); }
+
+	/// If, during parsing, a error occurs, Error will be set to true.
+	bool Error() const						{ return error; }
+
+	/// Contains a textual (english) description of the error if one occurs.
+	const char * ErrorDesc() const	{ return errorDesc.c_str (); }
+
+	/** Generally, you probably want the error string ( ErrorDesc() ). But if you
+			prefer the ErrorId, this function will fetch it.
+		*/
+	const int ErrorId()	const				{ return errorId; }
+
+	/// If you have handled the error, it can be reset with this call.
+	void ClearError()						{ error = false; errorId = 0; errorDesc = ""; }
+
+	/** Dump the document to standard out. */
+	void Print() const						{ Print( stdout, 0 ); }
+
+	// [internal use]
+	virtual void Print( FILE* cfile, int depth = 0 ) const;
+	// [internal use]
+	void SetError( int err ) {		assert( err > 0 && err < TIXML_ERROR_STRING_COUNT );
+		error   = true;
+		errorId = err;
+	errorDesc = errorString[ errorId ]; }
+
+protected :
+	virtual void StreamOut ( TIXML_OSTREAM * out) const;
+	// [internal use]
+	virtual TiXmlNode* Clone() const;
+	#ifdef TIXML_USE_STL
+	    virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
+	#endif
+
+private:
+	bool error;
+	int  errorId;
+	TIXML_STRING errorDesc;
+};
+
+#endif
+
Index: /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinystr.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinystr.cpp	(revision 61)
+++ /GTP-Internal/trunk/Lib/Vis/work/tinyxml/tinystr.cpp	(revision 61)
@@ -0,0 +1,265 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original file by Yves Berquin.
+
+This software is provided 'as-is', without any express or implied 
+warranty. In no event will the authors be held liable for any 
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any 
+purpose, including commercial applications, and to alter it and 
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must 
+not claim that you wrote the original software. If you use this 
+software in a product, an acknowledgment in the product documentation 
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source 
+distribution.
+*/
+
+#include "tinyxml.h"
+
+#ifndef TIXML_USE_STL
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "tinystr.h"
+
+// TiXmlString constructor, based on a C string
+TiXmlString::TiXmlString (const char* instring)
+{
+    unsigned newlen;
+    char * newstring;
+
+    if (!instring)
+    {
+        allocated = 0;
+        cstring = NULL;
+        return;
+    }
+    newlen = strlen (instring) + 1;
+    newstring = new char [newlen];
+    strcpy (newstring, instring);
+    allocated = newlen;
+    cstring = newstring;
+}
+
+// TiXmlString copy constructor
+TiXmlString::TiXmlString (const TiXmlString& copy)
+{
+    unsigned newlen;
+    char * newstring;
+
+	// Prevent copy to self!
+	if ( &copy == this )
+		return;
+
+    if (! copy . allocated)
+    {
+        allocated = 0;
+        cstring = NULL;
+        return;
+    }
+    newlen = strlen (copy . cstring) + 1;
+    newstring = new char [newlen];
+    strcpy (newstring, copy . cstring);
+    allocated = newlen;
+    cstring = newstring;
+}
+
+// TiXmlString = operator. Safe when assign own content
+void TiXmlString ::operator = (const char * content)
+{
+    unsigned newlen;
+    char * newstring;
+
+    if (! content)
+    {
+        empty_it ();
+        return;
+    }
+    newlen = strlen (content) + 1;
+    newstring = new char [newlen];
+    strcpy (newstring, content);
+    empty_it ();
+    allocated = newlen;
+    cstring = newstring;
+}
+
+// = operator. Safe when assign own content
+void TiXmlString ::operator = (const TiXmlString & copy)
+{
+    unsigned newlen;
+    char * newstring;
+
+    if (! copy . length ())
+    {
+        empty_it ();
+        return;
+    }
+    newlen = copy . length () + 1;
+    newstring = new char [newlen];
+    strcpy (newstring, copy . c_str ());
+    empty_it ();
+    allocated = newlen;
+    cstring = newstring;
+}
+
+
+//// Checks if a TiXmlString contains only whitespace (same rules as isspace)
+//bool TiXmlString::isblank () const
+//{
+//    char * lookup;
+//    for (lookup = cstring; * lookup; lookup++)
+//        if (! isspace (* lookup))
+//            return false;
+//    return true;
+//}
+
+// append a const char * to an existing TiXmlString
+void TiXmlString::append( const char* str, int len )
+{
+    char * new_string;
+    unsigned new_alloc, new_size;
+
+    new_size = length () + len + 1;
+    // check if we need to expand
+    if (new_size > allocated)
+    {
+        // compute new size
+        new_alloc = assign_new_size (new_size);
+
+        // allocate new buffer
+        new_string = new char [new_alloc];        
+        new_string [0] = 0;
+
+        // copy the previous allocated buffer into this one
+        if (allocated && cstring)
+            strcpy (new_string, cstring);
+
+        // append the suffix. It does exist, otherwize we wouldn't be expanding 
+        strncat (new_string, str, len);
+
+        // return previsously allocated buffer if any
+        if (allocated && cstring)
+            delete [] cstring;
+
+        // update member variables
+        cstring = new_string;
+        allocated = new_alloc;
+    }
+    else
+        // we know we can safely append the new string
+        strncat (cstring, str, len);
+}
+
+
+// append a const char * to an existing TiXmlString
+void TiXmlString::append( const char * suffix )
+{
+    char * new_string;
+    unsigned new_alloc, new_size;
+
+    new_size = length () + strlen (suffix) + 1;
+    // check if we need to expand
+    if (new_size > allocated)
+    {
+        // compute new size
+        new_alloc = assign_new_size (new_size);
+
+        // allocate new buffer
+        new_string = new char [new_alloc];        
+        new_string [0] = 0;
+
+        // copy the previous allocated buffer into this one
+        if (allocated && cstring)
+            strcpy (new_string, cstring);
+
+        // append the suffix. It does exist, otherwize we wouldn't be expanding 
+        strcat (new_string, suffix);
+
+        // return previsously allocated buffer if any
+        if (allocated && cstring)
+            delete [] cstring;
+
+        // update member variables
+        cstring = new_string;
+        allocated = new_alloc;
+    }
+    else
+        // we know we can safely append the new string
+        strcat (cstring, suffix);
+}
+
+// Check for TiXmlString equuivalence
+//bool TiXmlString::operator == (const TiXmlString & compare) const
+//{
+//    return (! strcmp (c_str (), compare . c_str ()));
+//}
+
+unsigned TiXmlString::length () const
+{
+    if (allocated)
+        return strlen (cstring);
+    return 0;
+}
+
+
+unsigned TiXmlString::find (char tofind, unsigned offset) const
+{
+    char * lookup;
+
+    if (offset >= length ())
+        return (unsigned) notfound;
+    for (lookup = cstring + offset; * lookup; lookup++)
+        if (* lookup == tofind)
+            return lookup - cstring;
+    return (unsigned) notfound;
+}
+
+
+bool TiXmlString::operator == (const TiXmlString & compare) const
+{
+	if ( allocated && compare.allocated )
+	{
+		assert( cstring );
+		assert( compare.cstring );
+		return ( strcmp( cstring, compare.cstring ) == 0 );
+ 	}
+	return false;
+}
+
+
+bool TiXmlString::operator < (const TiXmlString & compare) const
+{
+	if ( allocated && compare.allocated )
+	{
+		assert( cstring );
+		assert( compare.cstring );
+		return ( strcmp( cstring, compare.cstring ) > 0 );
+ 	}
+	return false;
+}
+
+
+bool TiXmlString::operator > (const TiXmlString & compare) const
+{
+	if ( allocated && compare.allocated )
+	{
+		assert( cstring );
+		assert( compare.cstring );
+		return ( strcmp( cstring, compare.cstring ) < 0 );
+ 	}
+	return false;
+}
+
+
+#endif	// TIXML_USE_STL
Index: /GTP-Internal/trunk/Lib/Vis/work/iv/IVFrameListener.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/iv/IVFrameListener.cpp	(revision 417)
+++ /GTP-Internal/trunk/Lib/Vis/work/iv/IVFrameListener.cpp	(revision 417)
@@ -0,0 +1,1219 @@
+#include <OgreNoMemoryMacros.h>
+#include <CEGUI/CEGUI.h>
+#include <../CEGUIRenderer/include/OgreCEGUIRenderer.h>
+#include <../CEGUIRenderer/include/OgreCEGUIResourceProvider.h>
+#include <../CEGUIRenderer/include/OgreCEGUITexture.h>
+#include <OgreMemoryMacros.h>
+#include "IVFrameListener.h"
+#include "OgreVisibilityOctreeSceneManager.h"
+#include "VisibilityInfo.h"
+#include "TestCullingIVApplication.h"
+
+
+//-- captions for overlays
+String IVFrameListener::msAlgorithmCaptions[] = 
+{
+	"Coherent Hierarchical Culling",
+	"View Frustum Culling", 
+	"Stop and Wait Culling"
+};
+
+
+// output file for frame info
+const char* frames_out_filename = "frame.out";
+// output file for object positions / orientations
+const char* objects_out_filename = "objects.out";
+
+
+//-----------------------------------------------------------------------
+IVFrameListener::IVFrameListener(RenderWindow* win, Camera* cam, 
+									   SceneManager *sceneManager, 
+									   CEGUI::Renderer *renderer,
+									   Camera *vizCamera,
+									   SceneNode *camNode,
+									   Light *sunLight,
+									   TestCullingIVApplication *app): 
+mCamera(cam),
+mWindow(win),
+mNumScreenShots(0),
+mTimeDelay(0),
+mSceneDetailIndex(0),
+mMoveScale(0.0f),
+mRotScale(0.0f),
+mTranslateVector(Vector3::ZERO),
+mAniso(1),
+mFiltering(TFO_BILINEAR), 
+mGUIRenderer(renderer), 
+mSceneMgr(sceneManager),
+mVisibilityThreshold(0),
+mAssumedVisibility(0),
+//mCurrentAlgorithm(GtpVisibility::VisibilityEnvironment::COHERENT_HIERARCHICAL_CULLING),
+//mCurrentAlgorithm(GtpVisibility::VisibilityEnvironment::STOP_AND_WAIT_CULLING),
+mCurrentAlgorithm(GtpVisibility::VisibilityEnvironment::FRUSTUM_CULLING),
+mNodeVizMode(NODEVIZ_NONE),
+mVizCameraHeight(Real(2500.0)),
+mCamNode(camNode),
+mAppState(WALKTHROUGH),
+mCurrentFrame(0),
+mReplayTimeElapsed(0),
+mRotateSpeed(72),
+mVizCamera(vizCamera),
+mStatsOn(true),
+mShutdownRequested(false), 
+mLMouseDown(false),
+mRMouseDown(false),
+mShowOctree(false),
+mUseDepthPass(false),
+mUseArbQueries(false),
+mTestGeometryForVisibleLeaves(false),
+mShowVisualization(false),
+mCullCamera(false),
+mRecordFrames(false),
+mShowShadows(false),
+mShowHelp(false),
+mDisplayCameraDetails(false),
+mVisualizeCulledNodes(false),
+mSunLight(sunLight),
+mShiftPressed(false),
+mShowQueryStats(false),
+mVisibilityManager(NULL),
+mDelayedQueriesIssued(0.0),
+mDelayedTraversedNodes(0.0),
+mApplication(app),
+mMoveSpeed(15),
+mAccumulatedTris(0),
+mAccumulatedFps(0)
+{
+	mRaySceneQuery = mSceneMgr->createRayQuery(
+        Ray(mCamNode->getPosition(), Vector3::NEGATIVE_UNIT_Y));
+
+	//mInputDevice = PlatformManager::getSingleton().createInputReader();
+	//mInputDevice->initialise(win, true, true);
+
+	mEventProcessor = new EventProcessor();
+	
+	mEventProcessor->initialise(win);
+	mEventProcessor->startProcessingEvents();
+	mEventProcessor->addMouseListener(this);
+	mEventProcessor->addMouseMotionListener(this);
+	mEventProcessor->addKeyListener(this);
+
+	mInputDevice = mEventProcessor->getInputReader();	
+
+	//-- overlays
+	mDebugOverlay = OverlayManager::getSingleton().getByName("Core/DebugOverlay");
+	mHelpOverlay = OverlayManager::getSingleton().getByName("Example/Visibility/HelpOverlay"); 
+	mQueryOverlay = OverlayManager::getSingleton().getByName("Example/Visibility/QueryOverlay"); 
+	mCullStatsOverlay = OverlayManager::getSingleton().getByName("Example/Visibility/CullStatsOverlay"); 
+
+	initVisStatsOverlay(); // visibility stats overlay
+	initHelpOverlay(); // help overlay
+	initQueryOverlay(); // visibility query stats overlay
+
+	// show stats overlays
+	showStats(true);
+	
+	// set culling algorithm type
+	setAlgorithm(mCurrentAlgorithm);
+
+	// set scene manager options
+	mSceneMgr->setOption("TestGeometryForVisibleLeaves", &mTestGeometryForVisibleLeaves);
+
+	// apply delayed rendering (i.e., transparents after hierarchical culling pass)
+	// only if optimization is not used 
+	bool delayRenderTransparents = !mTestGeometryForVisibleLeaves;
+
+	mSceneMgr->setOption("DelayRenderTransparents", &delayRenderTransparents);
+	mSceneMgr->setOption("UseDepthPass", &mUseDepthPass);
+	//mSceneMgr->setOption("UseArbQueries", &mUseArbQueries);
+
+	mSceneMgr->setOption("ShowOctree", &mShowOctree);
+	mSceneMgr->setOption("CullCamera", &mCullCamera);
+	mSceneMgr->setOption("PrepareVisualization", &mShowVisualization);
+
+	// reset statistics
+	resetStats();
+} 
+//-----------------------------------------------------------------------
+IVFrameListener::~IVFrameListener()
+{
+	OGRE_DELETE(mEventProcessor);
+	OGRE_DELETE(mRaySceneQuery);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::mouseMoved(MouseEvent *e)
+{
+	// Update CEGUI with the mouse motion
+    CEGUI::System::getSingleton().injectMouseMove(e->getRelX() * 
+		mGUIRenderer->getWidth(), e->getRelY() * mGUIRenderer->getHeight());
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::mousePressed(MouseEvent* e)
+{
+     // Left mouse button down
+     if (e->getButtonID() & InputEvent::BUTTON0_MASK)
+     {
+		 CEGUI::MouseCursor::getSingleton().hide();
+		
+         mLMouseDown = true; 
+     }
+     // Right mouse button down
+     else if (e->getButtonID() & InputEvent::BUTTON1_MASK)
+     {
+         CEGUI::MouseCursor::getSingleton().hide();
+         mRMouseDown = true;
+     }
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::mouseDragDropped(MouseEvent* e)
+{
+	// Left mouse button up
+    if (e->getButtonID() & InputEvent::BUTTON0_MASK)
+    {
+		CEGUI::MouseCursor::getSingleton().show();
+		
+	    mLMouseDown = false;
+    }
+    // Right mouse button up
+    else if (e->getButtonID() & InputEvent::BUTTON1_MASK)
+    {
+        CEGUI::MouseCursor::getSingleton().show();
+
+		mRMouseDown = false;
+    }
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::mouseReleased(MouseEvent* e)
+{
+    // Left mouse button up
+    if (e->getButtonID() & InputEvent::BUTTON0_MASK)
+    {
+		CEGUI::MouseCursor::getSingleton().show();
+		
+	    mLMouseDown = false;
+    }
+    // Right mouse button up
+    else if (e->getButtonID() & InputEvent::BUTTON1_MASK)
+    {
+        CEGUI::MouseCursor::getSingleton().show(); 
+
+        mRMouseDown = false;
+    }
+} 
+//-----------------------------------------------------------------------
+void IVFrameListener::mouseDragged(MouseEvent *e)
+ {
+	 // If we are dragging the left mouse button.	 	 
+	 if (mLMouseDown)
+     {
+     }
+	 // If we are dragging the right mouse button.
+	 if (mRMouseDown)
+	 {
+		 mCamNode->yaw(-e->getRelX() * mRotateSpeed);
+		 mCamNode->pitch(-e->getRelY() * mRotateSpeed);
+	 }
+}
+//-----------------------------------------------------------------------
+bool IVFrameListener::frameStarted(const FrameEvent &evt)
+{
+	if (mWindow->isClosed())
+	{
+        return false;
+	}
+
+	if (mDisplayCameraDetails)  // Print camera details
+    {       
+        mWindow->setDebugText("P: " + StringConverter::toString(mCamera->getDerivedPosition()) + 
+			" " + "O: " + StringConverter::toString(mCamera->getDerivedOrientation()));
+    }
+
+	//-- setup what is needed for immediate mouse/key movement
+	if (mTimeDelay >= 0) 
+	{
+		mTimeDelay -= evt.timeSinceLastFrame;
+	}
+	
+	// If this is the first frame, pick a speed
+	if (evt.timeSinceLastFrame == 0)
+	{
+		mMoveScale = 1;
+		mRotScale = 0.1;
+	}
+	// Otherwise scale movement units by time passed since last frame
+	else
+	{
+		// Move about 100 units per second,
+		mMoveScale = mMoveSpeed * evt.timeSinceLastFrame;
+		// Take about 10 seconds for full rotation
+		mRotScale = mRotateSpeed * evt.timeSinceLastFrame;
+	}
+
+	mRotX = 0;
+	mRotY = 0;
+	mTranslateVector = Vector3::ZERO;
+
+	if (!processUnbufferedKeyInput(evt))
+	{
+		return false;
+	}
+	if (!processUnbufferedMouseInput(evt))
+	{	
+		return false;	
+	}
+
+	// --- set parameters for visualization
+	if (mShowVisualization)
+	{
+		// important for visualization => draw octree bounding boxes
+		mSceneMgr->setOption("ShowOctree", &mShowVisualization);
+		
+		// ---- setup visualization camera
+
+		mVizCamera->setPosition(0, 0, 0);
+		mVizCamera->setOrientation(Quaternion::IDENTITY);
+
+		Vector3 camPos = mCamNode->getPosition();
+		mVizCamera->setPosition(camPos.x, mVizCameraHeight, camPos.z);
+
+		// point down -Z axis
+		mVizCamera->pitch(Radian(Degree(270.0)));
+
+		// rotation arounnd X axis
+		mVizCamera->yaw(Math::ATan2(-mCamera->getDerivedDirection().x, 
+			-mCamera->getDerivedDirection().z));
+		
+		// move by a constant so view plane is on bottom of viewport
+		mVizCamera->moveRelative(Vector3(0, 800, 0));
+	}
+
+	//-- set application state
+	switch (mAppState)
+	{
+	case REPLAY:
+		setCurrentFrameInfo(evt.timeSinceLastFrame);
+		break;
+	case WALKTHROUGH:
+		//-- if we are recording camera status per frame
+		if (mRecordFrames)
+		{
+			addFrameInfo(mCamNode, evt.timeSinceLastFrame);
+			// print recording message
+			mWindow->setDebugText("Recording frame " + 
+				StringConverter::toString(mFrameInfo.size() - 1));
+		}	
+	
+		// move camera according to input
+		moveCamera();
+
+		// clamp camera so we always walk along the floor plane
+		Clamp2Floor();
+
+		break;
+
+	default:
+		break;
+	};	
+
+	return true;
+}
+
+bool IVFrameListener::processUnbufferedMouseInput(const FrameEvent& evt)
+{
+	/* Rotation factors, may not be used if the second mouse button is pressed. */
+
+    /* If the second mouse button is pressed, then the mouse movement results in 
+       sliding the camera, otherwise we rotate. */
+    if (mInputDevice->getMouseButton(1))
+    {
+		mTranslateVector.x += mInputDevice->getMouseRelativeX() * 0.13;
+		mTranslateVector.y -= mInputDevice->getMouseRelativeY() * 0.13;
+	}
+	else
+	{
+		mRotX = Degree(-mInputDevice->getMouseRelativeX() * 0.13);
+		mRotY = Degree(-mInputDevice->getMouseRelativeY() * 0.13);
+	}
+
+
+	return true;
+}
+//-----------------------------------------------------------------------
+bool IVFrameListener::Clamp2Floor()
+{
+	// clamp to floor plane
+	Ray updateRay;
+    updateRay.setOrigin(Vector3(mCamNode->getPosition().x, mCamNode->getPosition().y /*+ 2*/, 
+		mCamNode->getPosition().z));
+	//updateRay.setOrigin(Vector3(0, 100, -200));
+	updateRay.setDirection(Vector3::NEGATIVE_UNIT_Y);
+    mRaySceneQuery->setRay(updateRay);
+
+	RaySceneQueryResult& qryResult = mRaySceneQuery->execute();
+    
+	RaySceneQueryResult::iterator it = qryResult.begin();
+ 
+	while (it != qryResult.end() && it->movable)
+	{
+		if (it->movable->getName() != "PlayerCam")
+		{
+			mCamNode->setPosition(mCamNode->getPosition().x, 
+				it->movable->getWorldBoundingBox().getCenter().y + 2, 
+				mCamNode->getPosition().z);
+	
+			/*std::stringstream d;
+			d << "World: " << it->movable->getWorldBoundingBox().getCenter().y <<
+			", Object: " << it->movable->getBoundingBox().getCenter().y <<
+			", Camera: " << mCamera->getDerivedPosition();
+
+			LogManager::getSingleton().logMessage(d.str());*/
+
+			return true;
+		}
+		++ it;
+	}
+	return false;
+}
+//-----------------------------------------------------------------------
+bool IVFrameListener::frameEnded(const FrameEvent& evt)
+{
+	if (mShutdownRequested)
+		return false;
+
+    updateStats();
+
+	//-- IMPORTANT
+	mSceneMgr->endFrame();
+
+	if (mTimeDelay <= 0) // approx. one second
+		mTimeDelay = 1.0;
+
+	return true;
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::moveCamera()
+{
+	// move node rather than camera so orientation is right in the visualization
+	mCamNode->yaw(mRotX);
+	mCamNode->pitch(mRotY);
+	mCamNode->translate(mCamNode->getLocalAxes(), mTranslateVector);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::writeFrames()
+{
+	std::ofstream ofstr(frames_out_filename);
+	
+	std::vector<frame_info>::const_iterator it, it_end;
+
+	it_end = mFrameInfo.end();
+	for (it = mFrameInfo.begin(); it < it_end; ++it)
+	{
+		ofstr << StringConverter::toString((*it).position) << " " 
+			  << StringConverter::toString((*it).orientation) << " "
+			  << StringConverter::toString((*it).timeElapsed) << "\n";
+	}
+	ofstr.close();
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::loadFrames()
+{
+	std::ifstream ifstr(frames_out_filename);
+	char line[256];
+	frame_info info;
+
+	// reset current values
+	mFrameInfo.clear();
+	mCurrentFrame = 0;
+	
+	while (!ifstr.eof()) 
+	{
+		ifstr.getline(line, 256);
+		sscanf(line, "%f %f %f %f %f %f %f %f", &info.position.x, &info.position.y, &info.position.z,
+			   &info.orientation.w, &info.orientation.x, &info.orientation.y, &info.orientation.z,
+			   &info.timeElapsed);
+		
+		mFrameInfo.push_back(info);
+	}
+	ifstr.close();
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::nextAppState()
+{
+	mCurrentFrame = 0;
+
+	// if last state was replay state
+	if (mAppState == REPLAY)
+	{
+		// reset debug text and write frame info to file
+		mWindow->setDebugText("");
+		writeFrames();
+		
+		float avgFps = (float)mAccumulatedFps / (float)mFrameCount;
+		float avgTris = (float)mAccumulatedTris / (float)mFrameCount;
+
+		//-- write out stats for recorded walkthrough
+		std::stringstream d;
+	
+		d << "Algorithm: " << msAlgorithmCaptions[mCurrentAlgorithm] << "\n"
+		  //<< "avg. FPS: " << mWindow->getAverageFPS() << "\n"
+		  << "avg. FPS: " << avgFps << "\n"
+		  << "best FPS: " << mWindow->getBestFPS() << "\n"
+		  << "worst FPS: " << mWindow->getWorstFPS() << "\n"
+		  << "best frame time: " <<	mWindow->getBestFrameTime() << "\n"
+		  << "worst frame time: " << mWindow->getWorstFrameTime() << "\n"
+		  << "avg. #triangles: " << avgTris << " M\n"
+		  << "#frames: " << mFrameCount << "\n";
+
+		LogManager::getSingleton().logMessage(d.str());
+	}
+	
+	//-- set the next státe
+	mAppState = (mAppState + 1) % STATE_NUM;
+
+	// replay recorded walkthrough
+	if (mAppState == REPLAY)
+	{
+		// no recording during replay
+		mRecordFrames = false;
+
+		// load recorded walkthrough
+		if (mFrameInfo.size() == 0)
+		{
+			loadFrames();
+		}
+
+		// if there are no recorded frames => set next state
+		if (mFrameInfo.size() == 0) 
+		{
+			nextAppState();
+		}
+		else
+		{
+			mWindow->setDebugText("Replay");
+			
+			// reset, because we measure fps stats during walkthrough (warning: average fps broken)
+			mWindow->resetStatistics();
+			resetStats();
+
+			//-- initialise frame data
+			mReplayTimeElapsed = 0;
+
+			mCamNode->setPosition(mFrameInfo[0].position);
+			mCamNode->setOrientation(mFrameInfo[0].orientation);
+		}
+	}
+
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::toggleRecord()
+{
+	mRecordFrames = !mRecordFrames;
+
+	// clear previous camera path
+	if (mRecordFrames)
+		mFrameInfo.clear();
+	else
+		mWindow->setDebugText("");
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::changeThreshold(int incr)
+{
+	mVisibilityThreshold += incr; 
+	if(mVisibilityThreshold < 0) mVisibilityThreshold = 0;
+	
+	char str[100]; sprintf(str,": %d", mVisibilityThreshold);
+
+	mSceneMgr->setOption("Threshold", &mVisibilityThreshold); 
+	mThresholdInfo->setCaption(str);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::changeAssumedVisibility(int incr)
+{
+	mAssumedVisibility += incr; 
+	if(mAssumedVisibility < 0) mAssumedVisibility = 0;
+	
+	char str[100]; sprintf(str,": %d", mAssumedVisibility);
+
+	mSceneMgr->setOption("AssumedVisibility", &mAssumedVisibility); 
+	mAssumedVisibilityInfo->setCaption(str);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::zoomVizCamera(int zoom)
+{
+	mVizCameraHeight += zoom; 
+	if(mVizCameraHeight < 0) mVizCameraHeight = 0;
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::nextAlgorithm()
+{
+	mCurrentAlgorithm = (mCurrentAlgorithm + 1) % 
+		GtpVisibility::VisibilityEnvironment::NUM_CULLING_MANAGERS;
+	setAlgorithm(mCurrentAlgorithm);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::setAlgorithm(int algorithm)
+{
+	mAlgorithmInfo->setCaption(": " + msAlgorithmCaptions[mCurrentAlgorithm]);
+	mSceneMgr->setOption("Algorithm", &mCurrentAlgorithm);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::resetStats()
+{
+	mAccumulatedFps = 0;
+	mAccumulatedTris = 0;
+	mFrameCount = 0;
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::updateStats()
+{
+	unsigned int opt = 0;
+	char str[100];
+	
+	static String currFpsString = "Current FPS: ";
+	static String avgFpsString = "Average FPS: ";
+	static String bestFpsString = "Best FPS: ";
+	static String worstFpsString = "Worst FPS: ";
+	static String trisString = "Triangle Count: ";
+
+	// HACK: compute average fps ourselfs, because ogre avg. fps is wrong
+	// TODO: update only once per second
+	mAccumulatedFps += mWindow->getStatistics().lastFPS;
+	++ mFrameCount;
+	
+	float avgFps = (float)mAccumulatedFps / (float)mFrameCount;
+    
+	// update stats when necessary
+    try 
+	{
+		OverlayElement* guiAvg = OverlayManager::getSingleton().getOverlayElement("Core/AverageFps");
+		OverlayElement* guiCurr = OverlayManager::getSingleton().getOverlayElement("Core/CurrFps");
+		OverlayElement* guiBest = OverlayManager::getSingleton().getOverlayElement("Core/BestFps");
+		OverlayElement* guiWorst = OverlayManager::getSingleton().getOverlayElement("Core/WorstFps");
+
+		const RenderTarget::FrameStats& stats = mWindow->getStatistics();
+
+		//guiAvg->setCaption(avgFps + StringConverter::toString(stats.avgFPS));
+		if (mTimeDelay < 0) // only update once per second
+		{		
+			guiAvg->setCaption(avgFpsString + StringConverter::toString(avgFps) + " ms");
+		}
+		//std::stringstream d; d << "frame rate :" << stats.lastFPS;
+		//Ogre::LogManager::getSingleton().logMessage(d.str());
+
+		guiCurr->setCaption(currFpsString + StringConverter::toString(stats.lastFPS));
+		guiBest->setCaption(bestFpsString + StringConverter::toString(stats.bestFPS)
+			+" "+StringConverter::toString(stats.bestFrameTime) + " ms");
+		guiWorst->setCaption(worstFpsString + StringConverter::toString(stats.worstFPS)
+			+" "+StringConverter::toString(stats.worstFrameTime) + " ms");
+
+		OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement("Core/NumTris");
+        guiTris->setCaption(trisString + StringConverter::toString(stats.triangleCount));
+
+		OverlayElement* guiDbg = OverlayManager::getSingleton().getOverlayElement("Core/DebugText");
+		guiDbg->setCaption(mWindow->getDebugText());
+
+		//-- culling stats
+		mSceneMgr->getOption("NumFrustumCulledNodes", &opt); sprintf(str,": %d", opt); 
+		mFrustumCulledNodesInfo->setCaption(str);
+
+		mSceneMgr->getOption("NumQueryCulledNodes", &opt); sprintf(str,": %d", opt); 
+		mQueryCulledNodesInfo->setCaption(str);
+	
+		mSceneMgr->getOption("NumHierarchyNodes", &opt); sprintf(str,": %d", opt); 
+		mHierarchyNodesInfo->setCaption(str);
+
+		mSceneMgr->getOption("NumRenderedNodes", &opt); sprintf(str,": %d", opt); 
+		mRenderedNodesInfo->setCaption(str);
+
+	//	sprintf(str,": %d", mTerrainContentGenerator->GetObjectCount()); 
+	//	mObjectsCountInfo->setCaption(str);
+
+		// take old value into account in order to create no sudden changes
+		mSceneMgr->getOption("NumQueriesIssued", &opt); 
+		mDelayedQueriesIssued = mDelayedQueriesIssued * 0.8 + (float)opt * 0.2;
+		sprintf(str,": %d", (int)mDelayedQueriesIssued); 
+		mQueriesIssuedInfo->setCaption(str);
+
+		mSceneMgr->getOption("NumTraversedNodes", &opt); 
+		mDelayedTraversedNodes = mDelayedTraversedNodes * 0.8 + (float)opt * 0.2;
+		sprintf(str,": %d", (int)mDelayedTraversedNodes); 
+		mTraversedNodesInfo->setCaption(str);
+
+	}
+	catch (...)
+	{
+		// ignore
+	}
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::toggleTestGeometryForVisibleLeaves()
+{
+	mTestGeometryForVisibleLeaves = !mTestGeometryForVisibleLeaves;
+	mSceneMgr->setOption("TestGeometryForVisibleLeaves", &mTestGeometryForVisibleLeaves);
+	
+	/* disable optimization which tests geometry instead of aabb
+	 * for "delayed" rendering of transparents (i.e., render transparents after all the solids)
+	 * because otherwise visible transparents could be skipped
+	 */
+	bool delayedRendering = !mTestGeometryForVisibleLeaves;
+
+	mSceneMgr->setOption("DelayRenderTransparents", &delayedRendering);
+
+	if (mTestGeometryForVisibleLeaves)
+	{
+		mTestGeometryForVisibleLeavesInfo->setCaption(": true");
+	}
+	else
+	{
+		mTestGeometryForVisibleLeavesInfo->setCaption(": false");
+	}
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::toggleShowOctree()
+{
+	mShowOctree = !mShowOctree;
+
+	mSceneMgr->setOption("ShowOctree", &mShowOctree);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::toggleUseArbQueries()
+{
+	mUseArbQueries = !mUseArbQueries;
+
+	mSceneMgr->setOption("UseArbQueries", &mUseArbQueries);
+	
+	if (mUseArbQueries)
+	{
+		mUseArbQueriesInfo->setCaption(": ARB");
+	}
+	else
+	{
+		mUseArbQueriesInfo->setCaption(": NV");
+	}
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::toggleUseDepthPass()
+{
+	mUseDepthPass = !mUseDepthPass;
+
+	mSceneMgr->setOption("UseDepthPass", &mUseDepthPass);
+	
+	if (mUseDepthPass)
+	{
+		mUseDepthPassInfo->setCaption(": true");
+	}
+	else
+	{
+		mUseDepthPassInfo->setCaption(": false");
+	}
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::toggleShowViz()
+{
+	mVisualizeCulledNodes = mShowVisualization = !mShowVisualization;
+	
+	// create viewport with priority VIZ_VIEWPORT_Z_ORDER: 
+	// will be rendered over standard viewport
+	if (mShowVisualization)
+	{	
+		Viewport *vizvp = mWindow->addViewport(mVizCamera, 
+			VIZ_VIEWPORT_Z_ORDER, 0.6, 0.6, 0.4, 0.4); 
+				
+		vizvp->setBackgroundColour(ColourValue(0.0, 0.3, 0.2, 1));
+
+		vizvp->setOverlaysEnabled(false);
+		// Alter the camera aspect ratio to match the viewport
+        mVizCamera->setAspectRatio(Real(vizvp->getActualWidth()) / 
+								   Real(vizvp->getActualHeight()));
+		
+		mSceneMgr->setOption("VisualizeCulledNodes", &mVisualizeCulledNodes);
+	}
+	else
+	{
+		// remove visualization viewport
+		mWindow->removeViewport(VIZ_VIEWPORT_Z_ORDER);
+
+		// octree bounding boxes are shown for visualization purpose, reset now
+		mSceneMgr->setOption("ShowOctree", &mShowOctree);
+	}
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::toggleShowShadows()
+{
+	mShowShadows = !mShowShadows;
+
+	mSunLight->setCastShadows(mShowShadows);
+
+	if (mShowShadows)
+	{
+		mSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_MODULATIVE);
+		//mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_MODULATIVE);
+		//mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE);		
+	}
+	else
+	{
+		mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
+	}
+
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::nextNodeVizMode()
+{
+	mNodeVizMode = (mNodeVizMode + 1) % NODEVIZ_MODES_NUM;
+
+	bool renderNodesForViz = (mNodeVizMode == NODEVIZ_RENDER_NODES) || 
+		(mNodeVizMode == NODEVIZ_RENDER_NODES_AND_CONTENT);
+	bool renderNodesContentForViz = (mNodeVizMode == NODEVIZ_RENDER_NODES_AND_CONTENT);
+	//bool renderNodesContentForViz = mNodeVizMode == NODEVIZ_RENDER_GEOMETRY;
+
+	mSceneMgr->setOption("RenderNodesForViz", &renderNodesForViz);
+	mSceneMgr->setOption("RenderNodesContentForViz", &renderNodesContentForViz);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::keyPressed(KeyEvent* e)
+{
+	// hide exact visibility query overlay
+	if (mShowQueryStats)
+	{
+		mQueryOverlay->hide();
+		mShowQueryStats = false;
+	}
+
+	switch(e->getKey())
+	{
+	case KC_ESCAPE:
+		mShutdownRequested = true;
+		e->consume();
+		return;
+
+	case KC_SPACE:
+		nextAlgorithm();
+		break;
+	
+    case KC_F:
+		nextFilter();
+		break;
+	case KC_R:
+		nextSceneDetailLevel();
+		break;
+	case KC_P:
+		toggleDisplayCameraDetails();
+		break;
+	case KC_G:
+		toggleTestGeometryForVisibleLeaves();
+		break;
+	case KC_T:
+		toggleShowOctree();
+		break;
+	case KC_X:
+		toggleUseDepthPass();
+		break;
+	case KC_S:
+		toggleShowShadows();
+		break;
+	case KC_SUBTRACT:
+		changeThreshold(-10);
+		break;
+	case KC_ADD:
+		changeThreshold(10);
+		break;
+
+	//-- visualization
+	case KC_1:
+		toggleShowViz();
+		break;
+	case KC_2:
+		nextNodeVizMode();
+		break;
+
+	case KC_F1:
+		toggleShowHelp();
+		break;
+	case KC_F2:
+		toggleShowStats();
+		break;
+	case KC_F3:
+		nextAppState();
+		break;
+	case KC_F4:
+		toggleRecord();
+		break;
+
+	case KC_F11:
+		takeScreenshot();
+		break;
+
+	case KC_8:
+		changeAssumedVisibility(-1);
+		break;
+	case KC_9:
+		changeAssumedVisibility(1);
+		break;
+	case KC_LSHIFT:
+		mShiftPressed = true;
+		break;
+	case KC_A:
+		toggleUseArbQueries();
+		break;
+	default:
+		break;
+	}
+
+	CEGUI::System::getSingleton().injectKeyDown(e->getKey());
+	CEGUI::System::getSingleton().injectChar(e->getKeyChar());
+	e->consume();
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::keyReleased(KeyEvent* e)
+{
+	if (e->getKey() == KC_LSHIFT)
+	{
+		mShiftPressed = false;
+	}
+	
+	CEGUI::System::getSingleton().injectKeyUp(e->getKey());
+	e->consume();
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::keyClicked(KeyEvent* e) 
+{
+	// Do nothing
+	e->consume();
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::addFrameInfo(SceneNode *camNode, Real timeElapsed)
+{
+	frame_info info;
+	info.orientation = mCamNode->getOrientation();
+	info.position = mCamNode->getPosition();
+	info.timeElapsed = timeElapsed;
+	
+	mFrameInfo.push_back(info);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::setCurrentFrameInfo(Real timeElapsed)
+{
+	//-- find current frame relative to elapsed frame time		
+	mReplayTimeElapsed -= timeElapsed;
+
+	while ((mReplayTimeElapsed <= 0) && (mCurrentFrame < (int)mFrameInfo.size() - 1))
+	{
+		mReplayTimeElapsed += mFrameInfo[mCurrentFrame ++].timeElapsed;
+	}
+
+	frame_info new_frame = mFrameInfo[mCurrentFrame];
+	frame_info old_frame = mFrameInfo[mCurrentFrame - 1];
+		
+	//-- interpolate frames
+	Real factor = 1;
+
+	if (old_frame.timeElapsed > 0)
+	{
+		factor = mReplayTimeElapsed / old_frame.timeElapsed;
+	}
+
+	Vector3 camPos = old_frame.position + factor 
+		* (new_frame.position - old_frame.position);
+	Quaternion camOrienation = Quaternion::Slerp(factor, old_frame.orientation, 
+		new_frame.orientation, true);
+
+	mCamNode->setPosition(camPos);
+	mCamNode->setOrientation(camOrienation);
+	
+	// stop replay after a full walkthrough
+	if (mCurrentFrame == (int)mFrameInfo.size() - 1)
+	{
+		nextAppState();
+	}
+}
+//-----------------------------------------------------------------------    
+bool IVFrameListener::processUnbufferedKeyInput(const FrameEvent& evt)
+{
+	bool cursorPressed = false;
+	
+	/* Move camera forward by keypress. */
+    if (mInputDevice->isKeyDown(KC_UP))
+	{
+		mTranslateVector.z = -mMoveScale;
+		cursorPressed = true;
+	}
+    /* Move camera backward by keypress. */
+    if (mInputDevice->isKeyDown(KC_DOWN))
+    {
+		mTranslateVector.z = mMoveScale;
+		cursorPressed = true;
+    }
+
+    if (mInputDevice->isKeyDown(KC_RIGHT))
+    {
+        //mCamNode->yaw(-mRotScale);
+		mRotX = -mRotScale;
+		cursorPressed = true;
+    }
+	
+    if (mInputDevice->isKeyDown(KC_LEFT))
+    {
+		mRotX = mRotScale;
+        //mCamNode->yaw(mRotScale);
+		cursorPressed = true;
+    }
+	// visualization camera
+	if (mInputDevice->isKeyDown(KC_3))
+	{
+		zoomVizCamera(50);
+	}
+	if (mInputDevice->isKeyDown(KC_4))
+	{
+		zoomVizCamera(-50);
+	}
+
+	// show the results
+	if (cursorPressed && mShowQueryStats)
+	{
+		mQueryOverlay->hide();
+		mShowQueryStats = false;
+	}
+
+    // Return true to continue rendering
+    return true;
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::nextFilter()
+{
+	switch (mFiltering)
+	{
+	case TFO_BILINEAR:
+		mFiltering = TFO_TRILINEAR;
+		mAniso = 1;
+		break;
+	case TFO_TRILINEAR:
+		mFiltering = TFO_ANISOTROPIC;
+		mAniso = 8;
+		break;
+	case TFO_ANISOTROPIC:
+		mFiltering = TFO_BILINEAR;
+		mAniso = 1;
+		break;
+	default:
+		break;
+	}
+
+    MaterialManager::getSingleton().setDefaultTextureFiltering(mFiltering);
+    MaterialManager::getSingleton().setDefaultAnisotropy(mAniso);
+
+	// reload stats
+    showStats(mStatsOn);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::nextSceneDetailLevel()
+{
+	mSceneDetailIndex = (mSceneDetailIndex + 1) % 3;
+	switch (mSceneDetailIndex) 
+	{
+		case 0: 
+			mCamera->setDetailLevel(SDL_SOLID); 
+			break;
+		case 1: 
+			mCamera->setDetailLevel(SDL_WIREFRAME); 
+			break;
+		case 2: 
+			mCamera->setDetailLevel(SDL_POINTS); 
+			break;
+	}
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::takeScreenshot()
+{
+	char tmp[20];
+	sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots);
+    mWindow->writeContentsToFile(tmp);
+    mWindow->setDebugText(String("Wrote ") + tmp);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::toggleDisplayCameraDetails()
+{
+	mDisplayCameraDetails = !mDisplayCameraDetails;
+        
+    if (!mDisplayCameraDetails)
+	{
+		mWindow->setDebugText("");
+	}
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::showStats(bool show)
+{
+	if (mDebugOverlay && mCullStatsOverlay)
+	{
+		if (show)
+		{
+			mDebugOverlay->show();
+			mCullStatsOverlay->show();
+		}
+		else
+		{
+			mDebugOverlay->hide();
+			mCullStatsOverlay->hide();
+		}
+	}
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::toggleShowStats()
+{
+	mStatsOn = !mStatsOn;
+
+	showStats(mStatsOn);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::toggleShowHelp()
+{
+	mShowHelp = !mShowHelp;
+
+	if (mShowHelp)
+	{
+		mHelpOverlay->show();
+	}
+	else
+	{
+		mHelpOverlay->hide();
+	}
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::initOverlayElement(OverlayElement **elInfo, String ext, 
+											  String name, int top, String caption)
+{
+	OverlayElement *el = 
+		OverlayManager::getSingleton().getOverlayElement(ext + name);
+
+	(*elInfo) = OverlayManager::getSingleton().getOverlayElement(ext + name + "Info");
+	(*elInfo)->setCaption(caption);
+
+	el->setTop(top);
+	(*elInfo)->setTop(top);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::initHelpOverlayElement(String name, int top)
+{
+	OverlayElement *el = OverlayManager::getSingleton().getOverlayElement(
+		"Example/Visibility/Help/" + name);
+
+	el->setTop(top);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::initHelpOverlay()
+{
+	const int vert_space = 15;
+	int top = 30;
+
+	initHelpOverlayElement("ShowHelp", top); top += vert_space;
+	initHelpOverlayElement("Stats", top); top += vert_space;
+	initHelpOverlayElement("AppState", top); top += vert_space;
+	initHelpOverlayElement("Recorded", top); top += vert_space;
+	initHelpOverlayElement("Animation", top); top += vert_space;
+	initHelpOverlayElement("Screenshots", top); top += vert_space;
+	initHelpOverlayElement("WriteOut", top); top += vert_space;
+
+	top +=vert_space;
+	initHelpOverlayElement("SceneDetail", top); top += vert_space;
+	initHelpOverlayElement("DisplayCameraDetails", top); top += vert_space;
+	initHelpOverlayElement("DisplayOctree", top); top += vert_space;
+	initHelpOverlayElement("UseShadows", top); top += vert_space;
+	initHelpOverlayElement("Filter", top); top += vert_space;
+
+	//-- visualization
+	top += vert_space;
+	initHelpOverlayElement("VizSection", top); top += vert_space;
+	initHelpOverlayElement("Viz", top); top += vert_space;
+	initHelpOverlayElement("NextVizMode", top); top += vert_space;
+	initHelpOverlayElement("ZoomViz", top); top += vert_space;
+
+
+	//-- visibility queries
+	top += vert_space;
+	initHelpOverlayElement("VisQuery", top); top += vert_space;
+	initHelpOverlayElement("FromCameraQuery", top); top += vert_space;
+	initHelpOverlayElement("FromPointQuery", top); top += vert_space;
+	initHelpOverlayElement("QueryType", top); top += vert_space;
+	initHelpOverlayElement("QueryTarget", top); top += vert_space;
+
+	//-- object generation
+	top += vert_space;
+	initHelpOverlayElement("SceneObjects", top); top += vert_space;
+	initHelpOverlayElement("GenerateObjects", top); top += vert_space;
+	initHelpOverlayElement("RemoveObjects", top); top += vert_space;
+	initHelpOverlayElement("DropObject", top); top += vert_space;
+
+	OverlayElement *helpPanel = OverlayManager::getSingleton().getOverlayElement(
+		"Example/Visibility/Help/HelpPanel");
+
+	helpPanel->setHeight(top + 10);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::initVisStatsOverlay()
+{
+	const int border_height = 10;
+	const int vert_space = 15;
+
+	//-- visibility culling stats overlay
+	int top = border_height;
+
+	String ext = "Example/Visibility/";
+	
+	initOverlayElement(&mAlgorithmInfo, ext, "Algorithm", top,
+		": " + msAlgorithmCaptions[mCurrentAlgorithm]); top += vert_space;
+
+	initOverlayElement(&mThresholdInfo, ext, "Threshold", top, ": 0"); top += vert_space;
+	initOverlayElement(&mTestGeometryForVisibleLeavesInfo, ext, 
+		"TestGeometryForVisibleLeaves", top, ": true"); top += vert_space;
+	initOverlayElement(&mUseDepthPassInfo, ext, "UseDepthPass", top, ": false"); top += vert_space;
+	initOverlayElement(&mAssumedVisibilityInfo, ext, "AssumedVisibility", top, ": 0"); top += vert_space;
+	initOverlayElement(&mCurrentObjectTypeInfo, ext, "CurrentObjectType", top, ": "); top += vert_space;
+	initOverlayElement(&mUseArbQueriesInfo, ext, "UseArbQueries", top, ": NV"); top += vert_space;
+	//initOverlayElement(&mHelpInfo, ext, "Help", top, ": "); top += vert_space;
+
+	OverlayElement *optionsPanel = OverlayManager::getSingleton().
+		getOverlayElement("Example/Visibility/VisibilityPanel");
+
+	optionsPanel->setHeight(top + border_height);
+
+	top = border_height;
+	//ext = "Example/Visibility/";
+	initOverlayElement(&mFrustumCulledNodesInfo, ext, "FrustumCulledNodes", top, ": 0"); top += vert_space;
+	initOverlayElement(&mQueryCulledNodesInfo, ext, "QueryCulledNodes", top, ": 0"); top += vert_space;
+	initOverlayElement(&mTraversedNodesInfo, ext, "TraversedNodes", top, ": 0"); top += vert_space;
+	initOverlayElement(&mHierarchyNodesInfo, ext, "HierarchyNodes", top, ": 0"); top += vert_space;
+	initOverlayElement(&mRenderedNodesInfo, ext, "RenderedNodes", top, ": 0"); top += vert_space;
+	initOverlayElement(&mObjectsCountInfo, ext, "ObjectsCount", top, ": 0"); top += vert_space;
+	initOverlayElement(&mQueriesIssuedInfo, ext, "QueriesIssued", top, ": 0"); top += vert_space;
+
+	OverlayElement *visPanel = OverlayManager::getSingleton().
+		getOverlayElement("Example/Visibility/VisibilityStatsPanel");
+
+	visPanel->setHeight(top + border_height);
+}
+//-----------------------------------------------------------------------
+void IVFrameListener::initQueryOverlay()
+{
+	const int border_height = 10;
+	const int vert_space = 15;
+
+	//-- visibility culling stats overlay
+	int top = border_height + 25;
+
+	String ext = "Example/Visibility/Query/";
+	    
+	initOverlayElement(&mQueryTypeInfo , ext, "QueryType", top,	": 0"); top += vert_space;
+	
+	initOverlayElement(&mQueryVisibleNodesInfo , ext, "VisibleNodes", top,	": 0"); top += vert_space;
+	initOverlayElement(&mQueryVisibleGeometryInfo , ext, "VisibleGeometry", top,	": 0"); top += vert_space;
+	initOverlayElement(&mQueryVisiblePatchInfo , ext, "VisiblePatches", top,	": 0"); top += vert_space;
+	
+	initOverlayElement(&mQueryNodeVisibilityInfo , ext, "NodeVisibility", top,	": 0"); top += vert_space;
+	initOverlayElement(&mQueryGeometryVisibilityInfo , ext, "GeometryVisibility", top,	": 0"); top += vert_space;
+	initOverlayElement(&mQueryPatchVisibilityInfo , ext, "PatchVisibility", top,	": 0"); top += vert_space;
+
+
+	OverlayElement *queryPanel = OverlayManager::getSingleton().
+		getOverlayElement("Example/Visibility/Query/QueryPanel");
+
+	queryPanel->setHeight(top + border_height);
+}
Index: /GTP-Internal/trunk/Lib/Vis/work/iv/TestCullingIVApplication.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/iv/TestCullingIVApplication.cpp	(revision 370)
+++ /GTP-Internal/trunk/Lib/Vis/work/iv/TestCullingIVApplication.cpp	(revision 370)
@@ -0,0 +1,318 @@
+#include <OgreNoMemoryMacros.h>
+#include <CEGUI/CEGUI.h>
+#include <../CEGUIRenderer/include/OgreCEGUIRenderer.h>
+#include <../CEGUIRenderer/include/OgreCEGUIResourceProvider.h>
+#include <../CEGUIRenderer/include/OgreCEGUITexture.h>
+#include <OgreMemoryMacros.h>
+
+#include <Ogre.h>
+
+//#include "OgreReferenceAppLayer.h"
+//#include "OgreRefAppWorld.h"
+#include "TestCullingIVApplication.h"
+#include "IVFrameListener.h"
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+
+/*********************************************************/
+/*        TestCullingIVApplication implementation        */
+/*********************************************************/
+
+//-----------------------------------------------------------------------
+TestCullingIVApplication::TestCullingIVApplication()
+{
+	mIVReader = new IVReader();
+}
+//-----------------------------------------------------------------------
+TestCullingIVApplication::~TestCullingIVApplication()
+{
+	OGRE_DELETE(mIVReader);
+}
+//-----------------------------------------------------------------------
+void TestCullingIVApplication::createCamera()
+{
+	// create the camera
+	mCamera = mSceneMgr->createCamera("PlayerCam");
+	// Look back along -Z
+    mCamera->lookAt(Vector3(0, 0, -300));
+	
+	/** set a nice viewpoint
+	*	we use a camera node here and apply all transformations on it instead
+	*	of applying all transformations directly to the camera
+	*	because then the camera is displayed correctly in the visualization
+	*/
+	mCamNode = mSceneMgr->getRootSceneNode()->
+		createChildSceneNode("CamNode1", Vector3(0, -100, -200));
+
+	mCamNode->attachObject(mCamera);
+	//mCamNode->lookAt(Vector3(0, 0, -300), Node::TS_WORLD); 
+	//mCamNode->setOrientation(Quaternion(-0.3486, 0.0122, 0.9365, 0.0329));
+
+	//-- create visualization camera
+	mVizCamera = mSceneMgr->createCamera("VizCam");
+	mVizCamera->setPosition(mCamNode->getPosition());
+
+	mVizCamera->setNearClipDistance(1);
+	mCamera->setNearClipDistance(1);
+
+	// infinite far plane?
+	if (mRoot->getRenderSystem()->getCapabilities()->hasCapability(RSC_INFINITE_FAR_PLANE))
+	{
+		mVizCamera->setFarClipDistance(0);
+		mCamera->setFarClipDistance(0);
+	}
+	else
+	{
+		 mVizCamera->setFarClipDistance(20000);
+		 mCamera->setFarClipDistance(20000);
+	}	
+}
+
+//-----------------------------------------------------------------------
+bool TestCullingIVApplication::setup()
+{
+	bool carryOn = ExampleApplication::setup();
+
+	if (carryOn)
+		createRenderTargetListener();
+
+	return carryOn;
+}
+//-----------------------------------------------------------------------
+void TestCullingIVApplication::createRenderTargetListener()
+{
+	mWindow->addListener(new VisualizationRenderTargetListener(mSceneMgr));
+}
+//-----------------------------------------------------------------------
+void TestCullingIVApplication::createScene()
+{
+	Real scale = 1;
+	mSceneMgr->setOption("NodeVizScale", &scale);
+	// HACK: change this to relative path
+	//String path = "E:/svn/gametools/trunk/VUT/Ogre/resources/";
+	String path = "D:/svn/trunk/VUT/Ogre/resources/";
+	
+	SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node1");
+	SceneNode *node2 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node2");
+	SceneNode *node3 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node3");
+	SceneNode *node4 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node4");
+	SceneNode *node5 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node5");
+	SceneNode *node6 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node6");
+	SceneNode *node7 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node7");
+	SceneNode *node8 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node8");
+	SceneNode *node9 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node9");
+
+
+	node1->translate(Vector3(-500, 0, 750));
+	node2->translate(Vector3(-400, 0, 750));
+	node3->scale(Vector3(100, 100 ,100));
+	node3->pitch(Radian(3 * Math::HALF_PI));
+	node4->translate(Vector3(-100, 0, 0));
+	node5->translate(Vector3(0, 300, 0));
+	
+	node6->scale(Vector3(100, 100 ,100));
+	node6->pitch(Radian(3 * Math::HALF_PI));
+	node6->roll(Radian(Math::HALF_PI));
+	node6->translate(Vector3(0, -100, 0));
+
+	node7->scale(Vector3(100, 100 ,100)); 
+	node7->pitch(Radian(3 * Math::HALF_PI));
+	node7->roll(Radian(Math::HALF_PI));
+	node7->translate(Vector3(100, 0, 0));
+	
+	node8->translate(Vector3(-300, -300, 0));
+
+	Log *log = LogManager::getSingleton().createLog("IVLog.log");
+	mIVReader->setLog(log);
+
+	/*if (mIVReader->loadFile("media\\house_test1.iv"))
+	{
+		mIVReader->buildTree(mSceneMgr, node1);
+		mIVReader->buildTree(mSceneMgr, node2);
+	}
+	if (mIVReader->loadFile("media\\anhk.wrl"))
+	{
+		mIVReader->buildTree(mSceneMgr, node3);
+	}
+	if (mIVReader->loadFile("media\\ant.wrl"))
+	{
+		mIVReader->buildTree(mSceneMgr, node4);
+	}
+	if (mIVReader->loadFile("media\\zepplin0.wrl"))
+	{
+		mIVReader->buildTree(mSceneMgr, node5);
+	}
+	if (mIVReader->loadFile("media\\warbird.wrl"))
+	{
+		mIVReader->buildTree(mSceneMgr, node6);
+	}
+	if (mIVReader->loadFile("media\\z_wing.wrl"))
+	{
+		mIVReader->buildTree(mSceneMgr, node7);
+	}*/
+
+	String fileName = path + "media\\city1500_flat_1.iv";
+	if (mIVReader->loadFile(fileName.c_str()))
+	{
+		mIVReader->buildTree(mSceneMgr, node8);
+	}
+
+	fileName = path + "media\\roofs_1500.iv";
+	if (mIVReader->loadFile(fileName.c_str()))
+	{
+		mIVReader->buildTree(mSceneMgr, node8);
+	}
+
+	fileName = path + "media\\CityRoads60.iv";
+	if (mIVReader->loadFile(fileName.c_str()))
+	{
+		mIVReader->buildTree(mSceneMgr, node8);
+	}
+
+	fileName = path + "media\\CityPlane60.iv";
+    if (mIVReader->loadFile(fileName.c_str()))
+	{
+		mIVReader->buildTree(mSceneMgr, node8);
+	}
+	
+	fileName = path + "media\\test.iv";
+	if (mIVReader->loadFile(fileName.c_str()))
+	{
+		mIVReader->buildTree(mSceneMgr, node9);
+	}
+
+	mIVReader->collapse();
+
+	
+	// Set ambient light
+	mAmbientLight = ColourValue(0.5 , 0.5, 0.5);
+	mSceneMgr->setAmbientLight(mAmbientLight);
+	
+	//-- create light
+	mSunLight = mSceneMgr->createLight("SunLight");
+	mSunLight->setType(Light::LT_DIRECTIONAL);
+	//mSunLight->setType(Light::LT_SPOTLIGHT);
+	//mSunLight->setSpotlightRange(Degree(30), Degree(50));
+
+    mSunLight->setPosition(707, 2000, 500);
+	mSunLight->setCastShadows(true);
+
+	// set light angle not too small over the surface, otherwise shadows textures will be broken
+	Vector3 dir(0.5, 1, 0.5);
+	dir.normalise();
+	mSunLight->setDirection(dir);
+	//mSunLight->setDirection(Vector3::NEGATIVE_UNIT_Y);
+	mSunLight->setDiffuseColour(1, 1, 1);
+	mSunLight->setSpecularColour(1, 1, 1);
+
+	// -- Fog
+	// NB it's VERY important to set this before calling setWorldGeometry 
+	// because the vertex program picked will be different
+	ColourValue fadeColour(0.93, 0.86, 0.76);
+	mWindow->getViewport(0)->setBackgroundColour(fadeColour);
+	//mSceneMgr->setFog( FOG_LINEAR, fadeColour, .001, 500, 1000);
+	
+	// Create a skybox
+	mSceneMgr->setSkyBox(true, "Examples/CloudyNoonSkyBox", 5000, true);
+	
+	
+	//-- CEGUI setup
+	setupGui();
+
+	// Use 512x512 texture in GL since we can't go higher than the window res
+	mSceneMgr->setShadowTextureSettings(512, 2);
+
+	mSceneMgr->setShadowColour(ColourValue(0.5, 0.5, 0.5));
+}
+//-----------------------------------------------------------------------
+void TestCullingIVApplication::setupGui()
+{
+	 mGUIRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, 
+		 false, 3000, ST_EXTERIOR_CLOSE);
+     mGUISystem = new CEGUI::System(mGUIRenderer);
+
+	 // Mouse
+     CEGUI::SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)"TaharezLook.scheme");
+     CEGUI::MouseCursor::getSingleton().setImage("TaharezLook", "MouseArrow");
+	 mGUISystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook", 
+									   (CEGUI::utf8*)"MouseArrow");
+
+	 CEGUI::MouseCursor::getSingleton().show();
+}
+//-----------------------------------------------------------------------
+void TestCullingIVApplication::createFrameListener()
+{
+	mIVFrameListener = new IVFrameListener(mWindow, mCamera, mSceneMgr, 
+		mGUIRenderer, mVizCamera, mCamNode, mSunLight, this);
+	
+	mRoot->addFrameListener(mIVFrameListener);
+}
+//-----------------------------------------------------------------------
+void TestCullingIVApplication::chooseSceneManager()
+{
+	mSceneMgr = mRoot->getSceneManager(ST_GENERIC);
+}
+
+
+
+/**************************************************************/
+/*      VisualizationRenderTargetListener implementation      */
+/**************************************************************/
+
+//-----------------------------------------------------------------------
+VisualizationRenderTargetListener::VisualizationRenderTargetListener(SceneManager *sceneMgr)
+:RenderTargetListener(), mSceneMgr(sceneMgr)
+{
+}
+//-----------------------------------------------------------------------
+void VisualizationRenderTargetListener::preViewportUpdate(const RenderTargetViewportEvent &evt)
+{
+	// visualization viewport
+	const bool showViz = evt.source->getZOrder() == VIZ_VIEWPORT_Z_ORDER;
+	const bool nShowViz = !showViz;
+
+	mSavedShadowTechnique = mSceneMgr->getShadowTechnique();
+	mSavedAmbientLight = mSceneMgr->getAmbientLight();
+
+	// -- ambient light must be full for visualization, shadows disabled
+    if (showViz)
+	{
+		mSceneMgr->setAmbientLight(ColourValue(1, 1, 1));
+		mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
+	}
+	
+    mSceneMgr->setOption("PrepareVisualization", &showViz);
+	mSceneMgr->setOption("SkyBoxEnabled", &nShowViz);
+	//mSceneMgr->setOption("SkyPlaneEnabled", &showViz);
+	
+	RenderTargetListener::preViewportUpdate(evt);
+}
+//-----------------------------------------------------------------------
+void VisualizationRenderTargetListener::postRenderTargetUpdate(const RenderTargetEvent &evt)
+{
+	// reset values
+	mSceneMgr->setShadowTechnique(mSavedShadowTechnique);
+	mSceneMgr->setAmbientLight(mSavedAmbientLight);
+	
+	RenderTargetListener::postRenderTargetUpdate(evt);
+}
+//-----------------------------------------------------------------------
+INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
+{
+    // Create application object
+    TestCullingIVApplication app;
+
+	try 
+	{
+        app.go();
+    } 
+	catch( Ogre::Exception& e ) 
+	{
+        MessageBox( NULL, e.getFullDescription().c_str(), 
+			"An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
+    }	
+
+    return 0;
+}
Index: /GTP-Internal/trunk/Lib/Vis/work/iv/Demo_IV.vcproj
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/iv/Demo_IV.vcproj	(revision 370)
+++ /GTP-Internal/trunk/Lib/Vis/work/iv/Demo_IV.vcproj	(revision 370)
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="Demo_IV"
+	ProjectGUID="{640481BA-D8FE-41ED-B2F2-9844A8CA1E40}"
+	SccProjectName=""
+	SccLocalPath="">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\..\bin\$(ConfigurationName)"
+			IntermediateDirectory=".\..\obj\$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\IVReader\include;&quot;$(OGRE_PATH)\Dependencies\include&quot;;&quot;$(OGRE_PATH)\OgreMain\include&quot;;&quot;$(OGRE_PATH)\Samples\Common\include&quot;;&quot;$(OGRE_PATH)\Dependencies\include\CEGUI&quot;;&quot;$(OGRE_PATH)\PlugIns\OctreeSceneManager\include&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include&quot;;..\..\Ogre\include;..\..\GtpVisibility\include;..\include"
+				PreprocessorDefinitions="NDEBUG;_WINDOWS;WIN32;GTP_VISIBILITY_MODIFIED_OGRE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=""
+				AssemblerListingLocation=".\..\obj\Release/"
+				ObjectFile=".\..\obj\Release/"
+				ProgramDataBaseFileName=".\..\obj\Release/"
+				BrowseInformation="1"
+				BrowseInformationFile=".\..\obj\Release/"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="3"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				IgnoreImportLibrary="TRUE"
+				AdditionalDependencies="OGREMain.LIB CEGUIBase.lib OgreGUIRenderer.lib Plugin_OctreeSceneManager.lib Plugin_VisibilitySceneManager.lib IVReader.lib"
+				OutputFile="$(OGRE_PATH)/Samples/Common/bin/Release/Demo_IV.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				AdditionalLibraryDirectories="&quot;$(OGRE_PATH)\OgreMain\Lib\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib&quot;;&quot;..\IVReader\Lib\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\Dependencies\Lib\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\PlugIns\OctreeSceneManager\bin\$(ConfigurationName)&quot;;&quot;..\..\Ogre\lib\$(ConfigurationName)&quot;"
+				ProgramDatabaseFile=".\..\bin\Release/Demo_IV.pdb"
+				SubSystem="2"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="TRUE"
+				SuppressStartupBanner="TRUE"
+				TargetEnvironment="1"
+				TypeLibraryName=".\..\bin\Release/Demo_IV.tlb"
+				HeaderFileName=""/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="2057"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\..\bin\Debug"
+			IntermediateDirectory=".\..\obj\Debug"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions="/Zm500 "
+				Optimization="0"
+				AdditionalIncludeDirectories="..\include;&quot;$(OGRE_PATH)\Samples\Common\include&quot;;&quot;$(OGRE_PATH)\OgreMain\include&quot;"
+				PreprocessorDefinitions="_WINDOWS;_DEBUG;WIN32;GTP_VISIBILITY_MODIFIED_OGRE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				PrecompiledHeaderFile=".\..\obj\Debug/Demo_IV.pch"
+				AssemblerListingLocation=".\..\obj\Debug/"
+				ObjectFile=".\..\obj\Debug/"
+				ProgramDataBaseFileName=".\..\obj\Debug/"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="4"
+				CompileAs="0"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				IgnoreImportLibrary="TRUE"
+				AdditionalDependencies="odbc32.lib odbccp32.lib OgreMain_d.lib"
+				OutputFile="$(OGRE_PATH)/Samples/Common/bin/Debug/Demo_IV.exe"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				AdditionalLibraryDirectories="&quot;$(OGRE_PATH)\OgreMain\Lib\$(ConfigurationName)&quot;"
+				IgnoreDefaultLibraryNames="LIBCMT"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\..\bin\Debug/Demo_IV.pdb"
+				SubSystem="2"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="TRUE"
+				SuppressStartupBanner="TRUE"
+				TargetEnvironment="1"
+				TypeLibraryName=".\..\bin\Debug/Demo_IV.tlb"
+				HeaderFileName=""/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="2057"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+			<File
+				RelativePath=".\IVFrameListener.cpp">
+			</File>
+			<File
+				RelativePath=".\TestCullingIVApplication.cpp">
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl">
+			<File
+				RelativePath=".\IVFrameListener.h">
+			</File>
+			<File
+				RelativePath=".\TestCullingIVApplication.h">
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+		</Filter>
+		<File
+			RelativePath=".\VTune\Demo_IV.vpj">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Index: /GTP-Internal/trunk/Lib/Vis/work/iv/IVFrameListener.h
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/iv/IVFrameListener.h	(revision 343)
+++ /GTP-Internal/trunk/Lib/Vis/work/iv/IVFrameListener.h	(revision 343)
@@ -0,0 +1,256 @@
+#ifndef _IVFrameListener_H__
+#define _IVFrameListener_H__
+
+#include "CEGUIForwardRefs.h"
+#include <Ogre.h>
+#include <OgreKeyEvent.h>
+#include <OgreEventListeners.h>
+#include <OgreStringConverter.h>
+#include <OgreException.h>
+#include "VisibilityEnvironment.h"
+#include "VisibilityManager.h"
+
+
+
+class TestCullingIVApplication;
+
+
+using namespace Ogre;
+
+
+/** Frame listener specialised for terrains.
+*/
+class IVFrameListener: public FrameListener, public MouseListener, 
+							public MouseMotionListener, public KeyListener
+{
+public:
+
+	IVFrameListener(RenderWindow* win, 
+						Camera* cam, 
+						SceneManager *sceneManager, 
+						CEGUI::Renderer *renderer, 
+						Camera *vizCamera,
+						SceneNode *camNode, 
+						Light *sunLight,
+						TestCullingIVApplication *app);
+
+	~IVFrameListener();
+
+
+	bool frameStarted(const FrameEvent& evt);
+	bool frameEnded(const FrameEvent& evt);
+   //bool processUnbufferedKeyInput(const FrameEvent& evt);
+    
+
+	/* MouseListener callbacks. */
+	virtual void mouseClicked(MouseEvent* e) { }
+	virtual void mouseEntered(MouseEvent* e) { }
+	virtual void mouseExited(MouseEvent* e)  { }
+
+	// This is when the mouse button goes DOWN.
+	void mousePressed(MouseEvent* e);
+
+	// This is when the mouse button is let UP.
+	void mouseReleased(MouseEvent* e);
+
+	/* MouseMotionListener callbacks */
+	void mouseMoved(MouseEvent *e);
+
+	// This is when the mouse is clicked, held and dragged.
+	void mouseDragged(MouseEvent *e);
+
+	void mouseDragDropped(MouseEvent *e);
+	void keyPressed(KeyEvent* e);
+
+	void keyReleased(KeyEvent* e);
+	void keyClicked(KeyEvent* e);
+
+	/** The information about camera position and orienation per frame.
+	*/
+	typedef struct
+	{
+		Vector3 position;
+		Quaternion orientation;
+		Real timeElapsed;
+	} frame_info;
+
+	enum  {WALKTHROUGH, REPLAY, STATE_NUM};
+
+	// visualization modes for scene nodes
+	enum {NODEVIZ_NONE, NODEVIZ_RENDER_NODES, NODEVIZ_RENDER_NODES_AND_CONTENT, NODEVIZ_MODES_NUM};
+	//enum {NODEVIZ_NONE, NODEVIZ_RENDER_GEOMETRY, NODEVIZ_MODES_NUM};
+
+	void zoomVizCamera(int zoom);
+
+	void addFrameInfo(SceneNode *camNode, Real timeElapsed);
+	void setCurrentFrameInfo(Real timeElapsed);
+
+	void setAlgorithm(int algorithm);
+
+	void moveCamera();
+
+	void writeFrames();
+	void loadFrames();
+
+	bool processUnbufferedKeyInput(const FrameEvent& evt);
+	bool processUnbufferedMouseInput(const FrameEvent& evt);
+
+	void showStats(bool show);
+
+	void updateStats();
+	void toggleShowHelp();
+	void toggleShowStats();
+
+	void toggleShowShadows();
+	void toggleDisplayCameraDetails();
+	void takeScreenshot();
+	void nextSceneDetailLevel();
+	void nextFilter();
+	void nextAlgorithm();
+	void nextNodeVizMode();
+	void nextAppState();
+	void changeThreshold(int incr);
+	void changeAssumedVisibility(int incr);
+	void toggleTestGeometryForVisibleLeaves();
+	void toggleShowOctree();
+	void toggleUseDepthPass();
+	void toggleUseArbQueries();
+	void toggleShowViz();
+	void toggleRecord();
+
+	bool Clamp2Floor();
+
+	static String msAlgorithmCaptions[];
+		
+	protected:
+
+	void initHelpOverlayElement(String name, int top);
+	void initOverlayElement(OverlayElement **elInfo, String ext, String name, 
+							int top, String caption);
+
+	//-- initialise overlays
+	void initHelpOverlay();
+	void initVisStatsOverlay();
+	void initQueryOverlay();
+
+	void resetStats();
+
+	SceneManager *mSceneMgr;           // A pointer to the scene manager
+
+	CEGUI::Renderer *mGUIRenderer;     // cegui renderer
+
+	int mCurrentAlgorithm;
+	int mVisibilityThreshold;
+	int mAssumedVisibility;
+	// the current frame number
+	int mCurrentFrame;
+	// the current application state
+	int mAppState;
+	// visualization mode
+	int mNodeVizMode;
+
+
+	OverlayElement *mAlgorithmInfo;
+	OverlayElement *mThresholdInfo;
+	OverlayElement *mAssumedVisibilityInfo;
+	OverlayElement *mFrustumCulledNodesInfo;
+	OverlayElement *mQueryCulledNodesInfo;
+	OverlayElement *mTraversedNodesInfo;
+	OverlayElement *mHierarchyNodesInfo;
+	OverlayElement *mTestGeometryForVisibleLeavesInfo;
+	OverlayElement *mUseDepthPassInfo;
+	OverlayElement *mUseArbQueriesInfo;
+	OverlayElement *mRenderedNodesInfo;
+	OverlayElement *mObjectsCountInfo;
+	OverlayElement *mQueriesIssuedInfo;
+	OverlayElement *mDelayedQueriesIssuedInfo;
+	OverlayElement *mDelayedTraversedNodesInfo;
+	OverlayElement *mCurrentObjectTypeInfo;
+
+	OverlayElement *mQueryTypeInfo;
+	OverlayElement *mQueryVisibleNodesInfo;
+	OverlayElement *mQueryVisibleGeometryInfo;
+	OverlayElement *mQueryVisiblePatchInfo;
+
+	OverlayElement *mQueryVisiblityInfo;
+	OverlayElement *mQueryNodeVisibilityInfo;
+	OverlayElement *mQueryGeometryVisibilityInfo;
+	OverlayElement *mQueryPatchVisibilityInfo;
+	//OverlayElement *mHelpInfo;
+	
+	bool mTestGeometryForVisibleLeaves;
+	bool mShowOctree;
+	bool mUseDepthPass;
+	bool mUseArbQueries;
+	bool mShowVisualization;
+	bool mCullCamera;
+	bool mRecordFrames;
+	bool mShowShadows;
+	bool mVisualizeCulledNodes;
+	bool mShowHelp;
+	bool mStatsOn;
+	bool mLMouseDown, mRMouseDown;     // True if the mouse buttons are down
+	bool mShutdownRequested;
+	bool mDisplayCameraDetails;
+	bool mUseItemBuffer;
+	bool mUseAnimation;
+
+	int mItemBufferMode;
+
+	Real mVizCameraHeight;
+
+	Camera *mVizCamera;
+	SceneNode *mCamNode;
+
+	std::vector<frame_info> mFrameInfo;
+		
+	Real mReplayTimeElapsed;
+	//EventProcessor* mEventProcessor;
+	InputReader* mInputDevice;
+	Camera* mCamera;
+
+	Vector3 mTranslateVector;
+	RenderWindow* mWindow;
+
+	unsigned int mNumScreenShots;
+	int mSceneDetailIndex;
+	int mAniso;
+
+	float mMoveScale;
+	Real mMoveSpeed;
+	Degree mRotScale;
+
+	// just to stop toggles flipping too fast
+	Real mTimeDelay;
+	Radian mRotX, mRotY;
+	TextureFilterOptions mFiltering;
+
+	Degree mRotateSpeed;
+
+	Overlay* mDebugOverlay;
+	Overlay* mHelpOverlay;
+	Overlay* mCullStatsOverlay;
+	Overlay* mQueryOverlay;
+
+	Light *mSunLight;
+	GtpVisibility::VisibilityManager *mVisibilityManager;
+	EventProcessor* mEventProcessor;
+
+	bool mShiftPressed;
+	bool mShowQueryStats;
+
+	unsigned long mAccumulatedFps;
+	unsigned long mAccumulatedTris;
+	unsigned long mFrameCount;
+
+	//bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn;
+	
+	float mDelayedQueriesIssued;
+	float mDelayedTraversedNodes;
+
+	TestCullingIVApplication *mApplication;
+	RaySceneQuery *mRaySceneQuery;
+};
+
+
+#endif //_IVFrameListener_H__
Index: /GTP-Internal/trunk/Lib/Vis/work/iv/TestCullingIVApplication.h
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/iv/TestCullingIVApplication.h	(revision 187)
+++ /GTP-Internal/trunk/Lib/Vis/work/iv/TestCullingIVApplication.h	(revision 187)
@@ -0,0 +1,78 @@
+#ifndef _TestCullingIVApplication_H__
+#define _TestCullingIVApplication_H__
+
+#include "CEGUIForwardRefs.h"
+#include <OgreRenderTargetListener.h>
+#include "ExampleApplication.h"
+
+#include "ivreader.h"
+#include "IVFrameListener.h"
+
+
+// z order index of visualizaion viewport
+#define VIZ_VIEWPORT_Z_ORDER 10
+
+
+/** Rendertarget listener which shows a visualization.
+*/
+class VisualizationRenderTargetListener: public RenderTargetListener
+{
+public:
+	VisualizationRenderTargetListener(SceneManager *sceneMgr);
+
+protected:
+	void preViewportUpdate (const RenderTargetViewportEvent &evt);
+	void postRenderTargetUpdate (const RenderTargetEvent &evt);
+
+	SceneManager *mSceneMgr;
+	
+	ShadowTechnique mSavedShadowTechnique;
+	ColourValue mSavedAmbientLight;
+};
+
+
+class TestCullingIVApplication: public ExampleApplication
+{
+public:
+	TestCullingIVApplication();
+	~TestCullingIVApplication();
+
+	/** Generates a scene using num entities of a type. 
+		@param num the number of objects
+		@parma objectType the type of objects
+	*/
+	void generateScene(int num, int objectType);
+
+
+protected:
+
+	//-- inherited from ExampleApplication
+	bool setup();
+	void createScene();
+	void createFrameListener();
+	void createCamera();
+	//void createViewports();
+	
+	virtual void createRenderTargetListener();
+
+	/** cegui setup 
+	*/
+	void setupGui();
+
+	CEGUI::OgreCEGUIRenderer *mGUIRenderer;
+	CEGUI::System *mGUISystem;
+
+	Camera *mVizCamera;
+	SceneNode *mCamNode;
+	Light *mSunLight;
+
+	ColourValue mAmbientLight;
+
+	IVReader *mIVReader;
+	IVFrameListener *mIVFrameListener;
+
+private:
+	void chooseSceneManager(void);
+};
+
+#endif // TestCullingIVApplication
Index: /GTP-Internal/trunk/Lib/Vis/work/iv/Demo_IV.dsp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/work/iv/Demo_IV.dsp	(revision 187)
+++ /GTP-Internal/trunk/Lib/Vis/work/iv/Demo_IV.dsp	(revision 187)
@@ -0,0 +1,141 @@
+# Microsoft Developer Studio Project File - Name="Demo_IV" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Application" 0x0101
+
+CFG=Demo_IV - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "Demo_IV.mak".
+!MESSAGE 
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "Demo_IV.mak" CFG="Demo_IV - Win32 Debug"
+!MESSAGE 
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "Demo_IV - Win32 Release" (basierend auf  "Win32 (x86) Application")
+!MESSAGE "Demo_IV - Win32 Debug" (basierend auf  "Win32 (x86) Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Demo_IV - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "..\bin\Release"
+# PROP BASE Intermediate_Dir "..\obj\Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\bin\Release"
+# PROP Intermediate_Dir "..\obj\Release"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I "..\include" /I "..\..\Common\include" /I "..\..\..\OgreMain\include" /D "NDEBUG" /D "_MBCS" /D "_WINDOWS" /D "WIN32" /Fr /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib OgreMain.lib /nologo /subsystem:windows /machine:I386 /out:"../../Common/Bin/Release/Demo_IV.exe" /libpath:"..\..\..\OgreMain\lib\release"
+# SUBTRACT LINK32 /profile /debug
+
+!ELSEIF  "$(CFG)" == "Demo_IV - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "..\bin\Debug"
+# PROP BASE Intermediate_Dir "..\obj\Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\bin\Debug"
+# PROP Intermediate_Dir "..\obj\Debug"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\include" /I "..\..\Common\include" /I "..\..\..\OgreMain\include" /D "_MBCS" /D "_WINDOWS" /D "_DEBUG" /D "WIN32" /FD /GZ /Zm500 /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib OgreMain_d.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"LIBCMT" /out:"../../Common/Bin/Debug/Demo_IV.exe" /pdbtype:sept /libpath:"..\..\..\OgreMain\lib\debug"
+# SUBTRACT LINK32 /verbose
+
+!ENDIF 
+
+# Begin Target
+
+# Name "Demo_IV - Win32 Release"
+# Name "Demo_IV - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\src\IV.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\ivmanualmeshloader.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\ivmeshdata.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\ivnode.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\ivreader.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\src\ivmanualmeshloader.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\ivmeshdata.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\ivnode.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\ivreader.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
Index: /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/classes.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/classes.fig	(revision 67)
+++ /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/classes.fig	(revision 67)
@@ -0,0 +1,217 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+50.00
+Single
+-2
+1200 2
+6 4500 600 7800 1200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4500 600 7800 600 7800 1200 4500 1200 4500 600
+4 0 0 50 -1 0 20 0.0000 4 285 2325 5100 975 HierarchyInterface\001
+-6
+6 -4050 4800 -300 5400
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 -4050 4800 -300 4800 -300 5400 -4050 5400 -4050 4800
+4 0 0 50 -1 0 20 0.0000 4 285 3645 -4050 5175 StopAndWaitCullingManager\001
+-6
+6 18900 3600 22200 4200
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 18900 3600 22200 3600 22200 4200 18900 4200 18900 3600
+4 0 0 50 -1 0 20 0.0000 4 285 2730 19125 3975 External Preprocessor\001
+-6
+6 -5550 1425 1050 2025
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 -5550 1425 1050 1425 1050 2025 -5550 2025 -5550 1425
+4 0 0 50 -1 0 20 0.0000 4 285 5490 -5100 1800 CoherentHierarchicalCullingCullingManager\001
+-6
+6 4500 -1725 7800 -1125
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4500 -1725 7800 -1725 7800 -1125 4500 -1125 4500 -1725
+4 0 0 50 -1 0 20 0.0000 4 210 2160 5100 -1350 PlatformInterface\001
+-6
+6 600 -3600 3900 -3000
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 600 -3600 3900 -3600 3900 -3000 600 -3000 600 -3600
+4 0 0 50 -1 0 20 0.0000 4 285 3165 675 -3225 OctreeHierarchyInterface\001
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 600 3600 3900 3600 3900 4200 600 4200 600 3600
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2175 3525 5025 1350
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 4950 6375 2175 4275
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4500 3600 7800 3600 7800 4200 4500 4200 4500 3600
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 8400 3600 11700 3600 11700 4200 8400 4200 8400 3600
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 6150 6375 6150 4350
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 7425 6300 9900 4350
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 6150 3450 6150 1350
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 9975 3450 7200 1350
+2 1 2 2 0 7 50 -1 -1 6.000 0 0 -1 1 1 2
+	1 1 2.00 120.00 240.00
+	1 1 2.00 120.00 240.00
+	 12000 3900 18750 3900
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 2700 4275 5325 6300
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 6450 4275 6450 6375
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 9300 4350 6900 6300
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 -1800 4650 375 4200
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 -1800 2250 375 3450
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 10800 2025 7125 3375
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 8700 1275 14625 1275 14625 1875 8700 1875 8700 1275
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4500 8025 7800 8025 7800 8625 4500 8625 4500 8025
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 6150 7125 6150 7950
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4500 6450 7800 6450 7800 7050 4500 7050 4500 6450
+2 2 0 2 0 14 80 -1 36 0.000 0 0 7 0 0 5
+	 -6000 -150 23025 -150 23025 9075 -6000 9075 -6000 -150
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 18000 -150 18000 9075
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 -5400 3300 -1650 3300 -1650 3900 -5400 3900 -5400 3300
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 -1425 3600 375 3825
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4500 -3600 7800 -3600 7800 -3000 4500 -3000 4500 -3600
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 8400 -3600 12375 -3600 12375 -3000 8400 -3000 8400 -3600
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2175 -2925 5250 -1875
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 6150 -2925 6150 -1875
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 10425 -2925 7125 -1875
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 -3675 -9000 300 -9000 300 -8400 -3675 -8400 -3675 -9000
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 225 -8025 4200 -8025 4200 -7425 225 -7425 225 -8025
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4125 -9000 8100 -9000 8100 -8400 4125 -8400 4125 -9000
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 8400 -8025 12375 -8025 12375 -7425 8400 -7425 8400 -8025
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4125 -6600 8100 -6600 8100 -6000 4125 -6000 4125 -6600
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 225 -5625 4200 -5625 4200 -5025 225 -5025 225 -5625
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 -3675 -6600 300 -6600 300 -6000 -3675 -6000 -3675 -6600
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 8400 -5625 12975 -5625 12975 -5025 8400 -5025 8400 -5625
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 -1800 -6675 -1800 -8250
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2175 -5700 2175 -7275
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 6150 -6675 6150 -8250
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 10500 -5775 10500 -7275
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 -1800 -5850 1125 -3750
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 2175 -4875 2175 -3750
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 6150 -5850 6150 -3675
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 10500 -4875 10500 -3675
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 13050 -6600 17625 -6600 17625 -6000 13050 -6000 13050 -6600
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 13350 -8925 17325 -8925 17325 -8325 13350 -8325 13350 -8925
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 15300 -6750 15300 -8250
+2 1 1 2 0 7 50 -1 -1 6.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 15150 -5850 12075 -3750
+2 2 0 2 0 10 80 -1 36 0.000 0 0 -1 0 0 5
+	 -6000 -10350 18000 -10350 18000 -6825 -6000 -6825 -6000 -10350
+2 2 0 2 0 20 80 -1 36 0.000 0 0 7 0 0 5
+	 -6000 -6825 18000 -6825 18000 -150 -6000 -150 -6000 -6825
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 6150 -975 6150 450
+3 0 1 2 0 7 50 -1 -1 6.000 0 1 0 5
+	1 1 2.00 120.00 240.00
+	 -2700 -5850 -6525 -600 -5325 6675 -675 6975 4200 7050
+	 0.000 1.000 1.000 1.000 0.000
+3 0 1 2 0 7 50 -1 -1 6.000 0 1 0 5
+	1 1 2.00 120.00 240.00
+	 525 -4875 -225 750 -600 4200 900 6000 3900 6600
+	 0.000 1.000 1.000 1.000 0.000
+3 0 1 2 0 7 50 -1 -1 6.000 0 1 0 5
+	1 1 2.00 120.00 240.00
+	 7575 -5850 8325 -1575 8625 1875 8175 4125 6975 5925
+	 0.000 1.000 1.000 1.000 0.000
+3 0 1 2 0 7 50 -1 -1 6.000 0 1 0 6
+	1 1 2.00 120.00 240.00
+	 12300 -4875 14550 -975 15000 1425 14025 5400 10950 6300 8100 6675
+	 0.000 1.000 1.000 1.000 1.000 0.000
+3 0 1 2 0 7 50 -1 -1 6.000 0 1 0 5
+	1 1 2.00 120.00 240.00
+	 15675 -5775 15825 3525 14025 6225 10125 7200 8025 7125
+	 0.000 1.000 1.000 1.000 0.000
+4 0 0 50 -1 0 20 0.0000 4 285 1950 1350 3975 CullingManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 1845 5175 3975 QueryManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 2805 8700 3975 PreprocessingManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 5385 9000 1650 CoherentHierarchicalCullingQueryManager\001
+4 0 0 50 -1 0 24 0.0000 4 255 2580 -5475 900 INDEPENDENT\001
+4 0 0 50 -1 0 20 0.0000 4 285 3000 -5100 3675 FrustumCullingManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 2790 4725 -3225 BspHierarchyInterface\001
+4 0 0 50 -1 0 20 0.0000 4 285 3735 300 -5250 VisibilityOctreeSceneManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 3840 -3600 -6225 VisibilityTerrainSceneManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 2655 900 -7650 OctreeSceneManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 2280 5100 -8625 BspSceneManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 3360 4425 -6225 VisibilityBspSceneManager\001
+4 0 0 50 -1 0 24 0.0000 4 255 2190 -5850 -5550 DEPENDENT\001
+4 0 0 50 -1 0 24 0.0000 4 255 1005 -5850 -6075 OGRE\001
+4 0 0 50 -1 0 24 0.0000 4 255 1005 -5850 -9750 OGRE\001
+4 0 0 50 -1 0 20 0.0000 4 285 2760 -3000 -8625 TerrainSceneManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 1815 9525 -7650 SceneManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 2895 9150 -5250 VisibilitySceneManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 3705 8550 -3225 SceneNodeHierarchyInterface\001
+4 0 0 50 -1 0 20 0.0000 4 285 2265 14400 -8550 DotSceneManager\001
+4 0 0 50 -1 0 20 0.0000 4 285 3345 13725 -6225 VisibilityDotSceneManager\001
+4 0 0 50 -1 0 24 0.0000 4 255 1005 -5475 375 OGRE\001
+4 0 0 50 -1 0 20 0.0000 4 285 2715 4800 8400 VisibilityEnvironment\001
+4 0 0 50 -1 0 20 0.0000 4 285 2160 5025 6825 VisibilityManager\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/classes.eps
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/classes.eps	(revision 67)
+++ /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/classes.eps	(revision 67)
@@ -0,0 +1,883 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: classes.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Fri Apr 29 12:00:52 2005
+%%For: bittner@NOTES (Jiri Bittner,U-NOTES\bittner,S-1-5-21-1914904292-1436553889-1205156892-1000)
+%%BoundingBox: 0 0 873 585
+%%Magnification: 0.5000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 585 moveto 0 0 lineto 873 0 lineto 873 585 lineto closepath clip newpath
+180.7 272.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.03000 0.03000 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 80
+% Polyline
+15.000 slw
+n -6000 -150 m 23025 -150 l 23025 9075 l -6000 9075 l
+ cp gs col14 0.80 tnt ef gr gs col0 s gr 
+% Polyline
+n -6000 -10350 m 18000 -10350 l 18000 -6825 l -6000 -6825 l
+ cp gs col10 0.80 tnt ef gr gs col0 s gr 
+% Polyline
+n -6000 -6825 m 18000 -6825 l 18000 -150 l -6000 -150 l
+ cp gs col20 0.80 tnt ef gr gs col0 s gr 
+% here ends figure;
+% 
+% here starts figure with depth 50
+/Times-Roman ff 300.00 scf sf
+-4050 5175 m
+gs 1 -1 sc (StopAndWaitCullingManager) col0 sh gr
+% Polyline
+7.500 slw
+n 18900 3600 m 22200 3600 l 22200 4200 l 18900 4200 l
+ cp gs col0 s gr 
+/Times-Roman ff 300.00 scf sf
+19125 3975 m
+gs 1 -1 sc (External Preprocessor) col0 sh gr
+% Polyline
+n -5550 1425 m 1050 1425 l 1050 2025 l -5550 2025 l
+ cp gs col0 s gr 
+/Times-Roman ff 300.00 scf sf
+-5100 1800 m
+gs 1 -1 sc (CoherentHierarchicalCullingCullingManager) col0 sh gr
+% Polyline
+n 4500 -1725 m 7800 -1725 l 7800 -1125 l 4500 -1125 l
+ cp gs col0 s gr 
+/Times-Roman ff 300.00 scf sf
+5100 -1350 m
+gs 1 -1 sc (PlatformInterface) col0 sh gr
+% Polyline
+n 600 -3600 m 3900 -3600 l 3900 -3000 l 600 -3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 300.00 scf sf
+675 -3225 m
+gs 1 -1 sc (OctreeHierarchyInterface) col0 sh gr
+% Polyline
+n 600 3600 m 3900 3600 l 3900 4200 l 600 4200 l
+ cp gs col0 s gr 
+% Polyline
+15.000 slw
+ [90] 0 sd
+gs  clippath
+5073 1388 m 5000 1293 l 4771 1467 l 4999 1370 l 4844 1563 l cp
+eoclip
+n 2175 3525 m
+ 5025 1350 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 4844 1563 m 4999 1370 l 4771 1467 l 4844 1563 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+2199 4218 m 2126 4313 l 2356 4487 l 2201 4295 l 2428 4391 l cp
+eoclip
+n 4950 6375 m
+ 2175 4275 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 2428 4391 m 2201 4295 l 2356 4487 l 2428 4391 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+7.500 slw
+n 4500 3600 m 7800 3600 l 7800 4200 l 4500 4200 l
+ cp gs col0 s gr 
+% Polyline
+n 8400 3600 m 11700 3600 l 11700 4200 l 8400 4200 l
+ cp gs col0 s gr 
+% Polyline
+15.000 slw
+ [90] 0 sd
+gs  clippath
+6210 4335 m 6090 4335 l 6090 4622 l 6150 4382 l 6210 4622 l cp
+eoclip
+n 6150 6375 m
+ 6150 4350 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 6210 4622 m 6150 4382 l 6090 4622 l 6210 4622 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+9948 4387 m 9874 4293 l 9649 4471 l 9875 4370 l 9723 4565 l cp
+eoclip
+n 7425 6300 m
+ 9900 4350 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 9723 4565 m 9875 4370 l 9649 4471 l 9723 4565 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+6210 1335 m 6090 1335 l 6090 1622 l 6150 1382 l 6210 1622 l cp
+eoclip
+n 6150 3450 m
+ 6150 1350 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 6210 1622 m 6150 1382 l 6090 1622 l 6210 1622 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+7224 1293 m 7151 1388 l 7381 1562 l 7226 1370 l 7453 1466 l cp
+eoclip
+n 9975 3450 m
+ 7200 1350 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 7453 1466 m 7226 1370 l 7381 1562 l 7453 1466 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [15 90] 90 sd
+gs  clippath
+18765 3960 m 18765 3840 l 18478 3840 l 18718 3900 l 18478 3960 l cp
+11985 3840 m 11985 3960 l 12272 3960 l 12032 3900 l 12272 3840 l cp
+eoclip
+n 12000 3900 m
+ 18750 3900 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 12272 3840 m 12032 3900 l 12272 3960 l 12272 3840 l  cp gs 0.00 setgray ef gr  col0 s
+% arrowhead
+n 18478 3960 m 18718 3900 l 18478 3840 l 18478 3960 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+5300 6356 m 5373 6261 l 5145 6085 l 5299 6280 l 5072 6180 l cp
+eoclip
+n 2700 4275 m
+ 5325 6300 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 5072 6180 m 5299 6280 l 5145 6085 l 5072 6180 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+6390 6390 m 6510 6390 l 6510 6103 l 6450 6343 l 6390 6103 l cp
+eoclip
+n 6450 4275 m
+ 6450 6375 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 6390 6103 m 6450 6343 l 6510 6103 l 6390 6103 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+6850 6262 m 6926 6356 l 7149 6175 l 6925 6280 l 7073 6082 l cp
+eoclip
+n 9300 4350 m
+ 6900 6300 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 7073 6082 m 6925 6280 l 7149 6175 l 7073 6082 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+401 4255 m 377 4138 l 95 4196 l 343 4207 l 120 4314 l cp
+eoclip
+n -1800 4650 m
+ 375 4200 l gs col0 s gr gr
+
+% arrowhead
+n 120 4314 m 343 4207 l 95 4196 l 120 4314 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+359 3509 m 417 3404 l 165 3265 l 347 3434 l 107 3370 l cp
+eoclip
+n -1800 2250 m
+ 375 3450 l gs col0 s gr gr
+
+% arrowhead
+n 107 3370 m 347 3434 l 165 3265 l 107 3370 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+7090 3323 m 7131 3436 l 7400 3337 l 7155 3364 l 7359 3224 l cp
+eoclip
+n 10800 2025 m
+ 7125 3375 l gs col0 s gr gr
+
+% arrowhead
+n 7359 3224 m 7155 3364 l 7400 3337 l 7359 3224 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+7.500 slw
+n 8700 1275 m 14625 1275 l 14625 1875 l 8700 1875 l
+ cp gs col0 s gr 
+% Polyline
+n 4500 8025 m 7800 8025 l 7800 8625 l 4500 8625 l
+ cp gs col0 s gr 
+% Polyline
+15.000 slw
+ [90] 0 sd
+gs  clippath
+6090 7965 m 6210 7965 l 6210 7678 l 6150 7918 l 6090 7678 l cp
+eoclip
+n 6150 7125 m
+ 6150 7950 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 6090 7678 m 6150 7918 l 6210 7678 l 6090 7678 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+7.500 slw
+n 4500 6450 m 7800 6450 l 7800 7050 l 4500 7050 l
+ cp gs col0 s gr 
+% Polyline
+15.000 slw
+n 18000 -150 m
+ 18000 9075 l gs col0 s gr 
+% Polyline
+7.500 slw
+n -5400 3300 m -1650 3300 l -1650 3900 l -5400 3900 l
+ cp gs col0 s gr 
+% Polyline
+15.000 slw
+gs  clippath
+382 3886 m 397 3767 l 112 3731 l 343 3821 l 97 3850 l cp
+eoclip
+n -1425 3600 m
+ 375 3825 l gs col0 s gr gr
+
+% arrowhead
+n 97 3850 m 343 3821 l 112 3731 l 97 3850 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+7.500 slw
+n 4500 -3600 m 7800 -3600 l 7800 -3000 l 4500 -3000 l
+ cp gs col0 s gr 
+% Polyline
+n 8400 -3600 m 12375 -3600 l 12375 -3000 l 8400 -3000 l
+ cp gs col0 s gr 
+% Polyline
+15.000 slw
+gs  clippath
+5244 -1813 m 5283 -1926 l 5011 -2018 l 5219 -1884 l 4972 -1904 l cp
+eoclip
+n 2175 -2925 m
+ 5250 -1875 l gs col0 s gr gr
+
+% arrowhead
+n 4972 -1904 m 5219 -1884 l 5011 -2018 l 4972 -1904 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+6090 -1860 m 6210 -1860 l 6210 -2146 l 6150 -1906 l 6090 -2146 l cp
+eoclip
+n 6150 -2925 m
+ 6150 -1875 l gs col0 s gr gr
+
+% arrowhead
+n 6090 -2146 m 6150 -1906 l 6210 -2146 l 6090 -2146 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+7092 -1927 m 7128 -1813 l 7402 -1899 l 7156 -1884 l 7366 -2013 l cp
+eoclip
+n 10425 -2925 m
+ 7125 -1875 l gs col0 s gr gr
+
+% arrowhead
+n 7366 -2013 m 7156 -1884 l 7402 -1899 l 7366 -2013 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+7.500 slw
+n -3675 -9000 m 300 -9000 l 300 -8400 l -3675 -8400 l
+ cp gs col0 s gr 
+% Polyline
+n 225 -8025 m 4200 -8025 l 4200 -7425 l 225 -7425 l
+ cp gs col0 s gr 
+% Polyline
+n 4125 -9000 m 8100 -9000 l 8100 -8400 l 4125 -8400 l
+ cp gs col0 s gr 
+% Polyline
+n 8400 -8025 m 12375 -8025 l 12375 -7425 l 8400 -7425 l
+ cp gs col0 s gr 
+% Polyline
+n 4125 -6600 m 8100 -6600 l 8100 -6000 l 4125 -6000 l
+ cp gs col0 s gr 
+% Polyline
+n 225 -5625 m 4200 -5625 l 4200 -5025 l 225 -5025 l
+ cp gs col0 s gr 
+% Polyline
+n -3675 -6600 m 300 -6600 l 300 -6000 l -3675 -6000 l
+ cp gs col0 s gr 
+% Polyline
+n 8400 -5625 m 12975 -5625 l 12975 -5025 l 8400 -5025 l
+ cp gs col0 s gr 
+% Polyline
+15.000 slw
+gs  clippath
+-1740 -8265 m -1860 -8265 l -1859 -7977 l -1799 -8217 l -1739 -7977 l cp
+eoclip
+n -1800 -6675 m
+ -1800 -8250 l gs col0 s gr gr
+
+% arrowhead
+n -1739 -7977 m -1799 -8217 l -1859 -7977 l -1739 -7977 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+2235 -7290 m 2115 -7290 l 2115 -7002 l 2175 -7242 l 2235 -7002 l cp
+eoclip
+n 2175 -5700 m
+ 2175 -7275 l gs col0 s gr gr
+
+% arrowhead
+n 2235 -7002 m 2175 -7242 l 2115 -7002 l 2235 -7002 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+6210 -8265 m 6090 -8265 l 6090 -7977 l 6150 -8217 l 6210 -7977 l cp
+eoclip
+n 6150 -6675 m
+ 6150 -8250 l gs col0 s gr gr
+
+% arrowhead
+n 6210 -7977 m 6150 -8217 l 6090 -7977 l 6210 -7977 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+10560 -7290 m 10440 -7290 l 10440 -7002 l 10500 -7242 l 10560 -7002 l cp
+eoclip
+n 10500 -5775 m
+ 10500 -7275 l gs col0 s gr gr
+
+% arrowhead
+n 10560 -7002 m 10500 -7242 l 10440 -7002 l 10560 -7002 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+1102 -3692 m 1172 -3789 l 939 -3956 l 1099 -3768 l 869 -3859 l cp
+eoclip
+n -1800 -5850 m
+ 1125 -3750 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 869 -3859 m 1099 -3768 l 939 -3956 l 869 -3859 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+2115 -3735 m 2235 -3735 l 2235 -4021 l 2175 -3781 l 2115 -4021 l cp
+eoclip
+n 2175 -4875 m
+ 2175 -3750 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 2115 -4021 m 2175 -3781 l 2235 -4021 l 2115 -4021 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+6090 -3660 m 6210 -3660 l 6210 -3946 l 6150 -3706 l 6090 -3946 l cp
+eoclip
+n 6150 -5850 m
+ 6150 -3675 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 6090 -3946 m 6150 -3706 l 6210 -3946 l 6090 -3946 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+10440 -3660 m 10560 -3660 l 10560 -3946 l 10500 -3706 l 10440 -3946 l cp
+eoclip
+n 10500 -4875 m
+ 10500 -3675 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 10440 -3946 m 10500 -3706 l 10560 -3946 l 10440 -3946 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+7.500 slw
+n 13050 -6600 m 17625 -6600 l 17625 -6000 l 13050 -6000 l
+ cp gs col0 s gr 
+% Polyline
+n 13350 -8925 m 17325 -8925 l 17325 -8325 l 13350 -8325 l
+ cp gs col0 s gr 
+% Polyline
+15.000 slw
+gs  clippath
+15360 -8265 m 15240 -8265 l 15240 -7977 l 15300 -8217 l 15360 -7977 l cp
+eoclip
+n 15300 -6750 m
+ 15300 -8250 l gs col0 s gr gr
+
+% arrowhead
+n 15360 -7977 m 15300 -8217 l 15240 -7977 l 15360 -7977 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [90] 0 sd
+gs  clippath
+12028 -3791 m 12096 -3691 l 12334 -3852 l 12102 -3767 l 12266 -3951 l cp
+eoclip
+n 15150 -5850 m
+ 12075 -3750 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 12266 -3951 m 12102 -3767 l 12334 -3852 l 12266 -3951 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+6090 465 m 6210 465 l 6210 178 l 6150 418 l 6090 178 l cp
+eoclip
+n 6150 -975 m
+ 6150 450 l gs col0 s gr gr
+
+% arrowhead
+n 6090 178 m 6150 418 l 6210 178 l 6090 178 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [90] 0 sd
+gs  clippath
+4215 7110 m 4215 6990 l 3928 6990 l 4168 7050 l 3928 7110 l cp
+eoclip
+n -2700 -5850 m -2701 -5849 l -2702 -5848 l -2704 -5844 l -2708 -5839 l -2713 -5831 l
+ -2720 -5821 l -2730 -5807 l -2741 -5790 l -2756 -5768 l -2773 -5743 l
+ -2793 -5714 l -2816 -5679 l -2843 -5641 l -2872 -5597 l -2905 -5549 l
+ -2940 -5496 l -2979 -5438 l -3021 -5376 l -3066 -5309 l -3113 -5237 l
+ -3163 -5162 l -3216 -5082 l -3271 -4999 l -3328 -4912 l -3387 -4822 l
+ -3448 -4729 l -3510 -4634 l -3573 -4536 l -3637 -4437 l -3702 -4335 l
+ -3767 -4233 l -3833 -4130 l -3899 -4026 l -3964 -3921 l -4030 -3817 l
+ -4095 -3712 l -4159 -3608 l -4223 -3504 l -4285 -3401 l -4347 -3298 l
+ -4408 -3197 l -4467 -3097 l -4525 -2997 l -4582 -2900 l -4637 -2803 l
+ -4691 -2708 l -4744 -2614 l -4795 -2521 l -4844 -2430 l -4892 -2341 l
+ -4939 -2253 l -4984 -2166 l -5027 -2080 l -5069 -1996 l -5110 -1913 l
+ -5149 -1831 l -5186 -1751 l -5223 -1671 l -5257 -1593 l -5291 -1515 l
+ -5323 -1438 l -5354 -1362 l -5384 -1287 l -5412 -1212 l -5440 -1138 l
+ -5466 -1064 l -5491 -991 l -5515 -918 l -5538 -845 l -5560 -773 l
+ -5580 -700 l -5600 -628 l -5620 -555 l -5638 -482 l -5655 -409 l
+ -5672 -336 l -5688 -263 l -5703 -187 l -5718 -111 l -5732 -34 l
+ -5745 43 l -5757 120 l -5769 198 l -5780 276 l -5790 355 l
+ -5799 435 l -5808 515 l -5816 595 l -5823 677 l -5830 758 l
+ -5835 841 l -5840 924 l -5844 1007 l -5847 1091 l -5850 1176 l
+ -5852 1261 l -5853 1347 l -5853 1433 l -5852 1519 l -5850 1606 l
+ -5848 1693 l -5845 1781 l -5841 1868 l -5836 1956 l -5830 2044 l
+ -5824 2133 l -5817 2221 l -5809 2309 l -5800 2398 l -5790 2486 l
+ -5779 2574 l -5768 2662 l -5756 2749 l -5743 2836 l -5729 2923 l
+ -5715 3010 l -5699 3095 l -5683 3181 l -5667 3265 l -5649 3349 l
+ -5631 3433 l -5612 3515 l -5593 3597 l -5572 3677 l -5551 3757 l
+ -5530 3836 l -5508 3914 l -5485 3991 l -5461 4066 l -5437 4141 l
+ -5413 4214 l -5388 4286 l -5362 4357 l -5336 4427 l -5309 4496 l
+ -5282 4563 l -5254 4629 l -5226 4694 l -5198 4757 l -5169 4819 l
+ -5139 4880 l -5109 4939 l -5079 4998 l -5048 5055 l -5017 5110 l
+ -4985 5165 l -4953 5218 l -4920 5270 l -4887 5321 l -4854 5370 l
+ -4820 5419 l -4785 5466 l -4750 5513 l -4708 5566 l -4665 5618 l
+ -4621 5669 l -4576 5718 l -4530 5766 l -4484 5813 l -4436 5859 l
+ -4387 5903 l -4338 5947 l -4287 5989 l -4235 6030 l -4182 6070 l
+ -4128 6109 l -4073 6147 l -4017 6184 l -3960 6220 l -3902 6255 l
+ -3842 6289 l -3782 6322 l -3720 6353 l -3658 6384 l -3595 6414 l
+ -3530 6443 l -3465 6471 l -3399 6498 l -3332 6524 l -3264 6549 l
+ -3196 6573 l -3126 6595 l -3056 6618 l -2986 6639 l -2915 6659 l
+ -2844 6678 l -2772 6696 l -2700 6714 l -2627 6730 l -2554 6746 l
+ -2481 6761 l -2408 6774 l -2335 6788 l -2262 6800 l -2189 6812 l
+ -2116 6823 l -2043 6833 l -1970 6842 l -1897 6851 l -1825 6860 l
+ -1753 6867 l -1681 6874 l -1609 6881 l -1538 6887 l -1467 6893 l
+ -1396 6898 l -1326 6903 l -1256 6908 l -1187 6912 l -1117 6916 l
+ -1048 6919 l -979 6923 l -911 6926 l -842 6929 l -774 6932 l
+ -706 6935 l -638 6938 l -573 6940 l -509 6942 l -444 6945 l
+ -380 6947 l -315 6950 l -249 6952 l -184 6954 l -117 6956 l
+ -50 6959 l 18 6961 l 86 6963 l 156 6965 l 227 6967 l
+ 299 6969 l 372 6971 l 446 6973 l 522 6975 l 599 6978 l
+ 679 6980 l 759 6982 l 842 6984 l 926 6986 l 1012 6988 l
+ 1100 6990 l 1190 6992 l 1282 6994 l 1376 6996 l 1472 6998 l
+ 1570 7000 l 1669 7002 l 1770 7004 l 1873 7007 l 1977 7009 l
+ 2082 7011 l 2188 7013 l 2295 7015 l 2402 7017 l 2510 7019 l
+ 2617 7021 l 2724 7023 l 2829 7025 l 2934 7027 l 3036 7029 l
+ 3136 7031 l 3234 7033 l 3328 7035 l 3419 7036 l 3505 7038 l
+ 3588 7039 l 3665 7041 l 3738 7042 l 3805 7043 l 3866 7044 l
+ 3923 7045 l 3973 7046 l 4018 7047 l 4057 7048 l 4090 7048 l
+ 4118 7049 l 4142 7049 l 4160 7049 l 4174 7050 l 4185 7050 l
+
+ 4200 7050 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 3928 7110 m 4168 7050 l 3928 6990 l 3928 7110 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [90] 0 sd
+gs  clippath
+3902 6661 m 3926 6544 l 3644 6488 l 3868 6594 l 3620 6605 l cp
+eoclip
+n 525 -4875 m 525 -4874 l 525 -4872 l 524 -4867 l 523 -4860 l 522 -4850 l
+ 520 -4836 l 517 -4818 l 514 -4796 l 511 -4768 l 506 -4736 l
+ 501 -4698 l 496 -4654 l 489 -4604 l 482 -4549 l 474 -4488 l
+ 465 -4422 l 455 -4349 l 445 -4272 l 434 -4189 l 422 -4102 l
+ 410 -4010 l 398 -3914 l 384 -3815 l 371 -3712 l 357 -3607 l
+ 343 -3499 l 328 -3389 l 313 -3277 l 298 -3165 l 283 -3051 l
+ 268 -2938 l 253 -2824 l 239 -2711 l 224 -2598 l 209 -2486 l
+ 194 -2375 l 180 -2266 l 166 -2158 l 152 -2052 l 138 -1948 l
+ 125 -1846 l 112 -1746 l 99 -1647 l 86 -1551 l 74 -1457 l
+ 62 -1366 l 50 -1276 l 39 -1189 l 28 -1103 l 17 -1020 l
+ 6 -939 l -4 -859 l -14 -782 l -24 -706 l -33 -632 l
+ -43 -560 l -52 -489 l -61 -420 l -69 -352 l -78 -285 l
+ -86 -219 l -94 -155 l -102 -92 l -110 -29 l -118 32 l
+ -126 93 l -133 153 l -141 212 l -148 271 l -155 330 l
+ -163 388 l -171 459 l -180 530 l -189 600 l -197 671 l
+ -206 741 l -214 811 l -222 880 l -231 950 l -239 1019 l
+ -247 1089 l -254 1158 l -262 1227 l -270 1297 l -277 1366 l
+ -284 1435 l -291 1505 l -298 1574 l -305 1643 l -311 1712 l
+ -317 1781 l -323 1849 l -329 1918 l -334 1986 l -339 2054 l
+ -344 2121 l -349 2188 l -353 2255 l -357 2321 l -361 2387 l
+ -364 2452 l -367 2516 l -369 2580 l -371 2642 l -373 2705 l
+ -374 2766 l -375 2826 l -375 2886 l -376 2945 l -375 3002 l
+ -374 3059 l -373 3115 l -372 3170 l -370 3224 l -367 3277 l
+ -364 3328 l -361 3379 l -357 3429 l -353 3478 l -349 3527 l
+ -344 3574 l -338 3620 l -332 3666 l -326 3711 l -319 3755 l
+ -312 3798 l -304 3841 l -296 3883 l -288 3925 l -276 3975 l
+ -265 4024 l -252 4073 l -238 4121 l -224 4170 l -209 4217 l
+ -193 4265 l -176 4312 l -158 4359 l -139 4406 l -119 4453 l
+ -98 4500 l -76 4546 l -54 4592 l -30 4638 l -5 4684 l
+ 21 4729 l 48 4774 l 76 4819 l 104 4863 l 134 4906 l
+ 164 4950 l 196 4992 l 228 5034 l 261 5075 l 295 5116 l
+ 329 5156 l 364 5195 l 399 5233 l 436 5271 l 472 5308 l
+ 509 5343 l 547 5378 l 585 5412 l 623 5445 l 662 5477 l
+ 701 5509 l 740 5539 l 780 5569 l 820 5597 l 860 5625 l
+ 900 5652 l 941 5678 l 982 5704 l 1023 5729 l 1065 5753 l
+ 1107 5777 l 1150 5800 l 1190 5821 l 1230 5842 l 1272 5862 l
+ 1313 5882 l 1356 5901 l 1400 5920 l 1445 5939 l 1491 5958 l
+ 1538 5977 l 1587 5995 l 1638 6014 l 1690 6032 l 1744 6051 l
+ 1800 6069 l 1857 6088 l 1917 6107 l 1979 6126 l 2044 6145 l
+ 2110 6164 l 2179 6183 l 2250 6203 l 2323 6223 l 2399 6243 l
+ 2476 6263 l 2555 6284 l 2636 6304 l 2717 6325 l 2800 6345 l
+ 2883 6365 l 2966 6385 l 3049 6405 l 3130 6425 l 3210 6443 l
+ 3288 6462 l 3362 6479 l 3434 6495 l 3501 6511 l 3563 6525 l
+ 3621 6538 l 3673 6550 l 3720 6560 l 3761 6569 l 3795 6577 l
+ 3825 6583 l 3848 6589 l 3867 6593 l 3880 6596 l
+ 3900 6600 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 3620 6605 m 3868 6594 l 3644 6488 l 3620 6605 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [90] 0 sd
+gs  clippath
+6916 5904 m 7017 5970 l 7173 5729 l 6993 5898 l 7073 5663 l cp
+eoclip
+n 7575 -5850 m 7575 -5849 l 7576 -5846 l 7576 -5842 l 7578 -5834 l 7580 -5823 l
+ 7582 -5809 l 7585 -5789 l 7590 -5765 l 7595 -5736 l 7601 -5702 l
+ 7607 -5662 l 7615 -5617 l 7624 -5566 l 7634 -5509 l 7644 -5447 l
+ 7656 -5380 l 7668 -5308 l 7681 -5231 l 7695 -5150 l 7710 -5065 l
+ 7725 -4977 l 7740 -4886 l 7756 -4793 l 7773 -4697 l 7789 -4601 l
+ 7806 -4503 l 7823 -4404 l 7839 -4305 l 7856 -4206 l 7873 -4108 l
+ 7889 -4011 l 7905 -3914 l 7921 -3819 l 7937 -3725 l 7952 -3633 l
+ 7967 -3542 l 7982 -3454 l 7996 -3367 l 8010 -3282 l 8024 -3200 l
+ 8037 -3119 l 8050 -3040 l 8062 -2963 l 8074 -2888 l 8086 -2815 l
+ 8097 -2744 l 8108 -2674 l 8119 -2606 l 8129 -2539 l 8139 -2474 l
+ 8149 -2410 l 8159 -2348 l 8168 -2286 l 8177 -2226 l 8186 -2167 l
+ 8194 -2108 l 8203 -2050 l 8211 -1993 l 8219 -1936 l 8227 -1880 l
+ 8235 -1824 l 8242 -1768 l 8250 -1713 l 8258 -1652 l 8266 -1591 l
+ 8274 -1530 l 8282 -1469 l 8290 -1408 l 8298 -1347 l 8306 -1286 l
+ 8313 -1225 l 8321 -1164 l 8328 -1102 l 8335 -1040 l 8343 -978 l
+ 8350 -915 l 8357 -853 l 8364 -790 l 8371 -726 l 8377 -663 l
+ 8384 -599 l 8390 -536 l 8397 -472 l 8403 -408 l 8409 -343 l
+ 8415 -279 l 8421 -215 l 8426 -151 l 8432 -87 l 8437 -24 l
+ 8442 40 l 8447 103 l 8452 166 l 8457 229 l 8461 291 l
+ 8465 353 l 8469 414 l 8473 474 l 8476 534 l 8480 594 l
+ 8483 653 l 8486 711 l 8488 768 l 8491 825 l 8493 881 l
+ 8495 936 l 8497 990 l 8498 1043 l 8500 1096 l 8501 1148 l
+ 8502 1199 l 8503 1250 l 8503 1299 l 8503 1348 l 8504 1397 l
+ 8503 1445 l 8503 1492 l 8503 1538 l 8502 1584 l 8501 1630 l
+ 8500 1675 l 8498 1729 l 8497 1783 l 8494 1837 l 8492 1890 l
+ 8489 1943 l 8486 1997 l 8482 2050 l 8479 2103 l 8474 2157 l
+ 8470 2210 l 8465 2264 l 8459 2318 l 8454 2371 l 8448 2425 l
+ 8441 2479 l 8434 2533 l 8427 2587 l 8419 2641 l 8411 2695 l
+ 8403 2749 l 8394 2803 l 8385 2856 l 8375 2909 l 8365 2962 l
+ 8355 3014 l 8345 3066 l 8334 3118 l 8322 3169 l 8311 3219 l
+ 8299 3269 l 8287 3318 l 8275 3367 l 8262 3414 l 8249 3461 l
+ 8236 3508 l 8223 3553 l 8210 3598 l 8196 3642 l 8183 3686 l
+ 8169 3728 l 8154 3770 l 8140 3812 l 8126 3853 l 8111 3893 l
+ 8096 3933 l 8081 3972 l 8066 4011 l 8050 4050 l 8033 4090 l
+ 8016 4130 l 7999 4170 l 7981 4211 l 7963 4251 l 7944 4291 l
+ 7924 4332 l 7904 4374 l 7883 4416 l 7861 4459 l 7838 4503 l
+ 7814 4548 l 7789 4594 l 7763 4641 l 7735 4689 l 7707 4739 l
+ 7677 4791 l 7646 4844 l 7615 4898 l 7581 4954 l 7547 5011 l
+ 7512 5069 l 7476 5128 l 7440 5187 l 7403 5247 l 7366 5307 l
+ 7329 5367 l 7292 5426 l 7256 5484 l 7221 5539 l 7187 5592 l
+ 7156 5642 l 7126 5689 l 7099 5732 l 7074 5771 l 7052 5805 l
+ 7033 5835 l 7017 5860 l 7004 5880 l 6994 5896 l 6986 5908 l
+
+ 6975 5925 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 7073 5663 m 6993 5898 l 7173 5729 l 7073 5663 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [90] 0 sd
+gs  clippath
+8078 6617 m 8092 6736 l 8377 6702 l 8132 6671 l 8363 6583 l cp
+eoclip
+n 12300 -4875 m 12301 -4874 l 12302 -4872 l 12304 -4868 l 12308 -4861 l 12314 -4851 l
+ 12321 -4837 l 12331 -4820 l 12344 -4798 l 12358 -4772 l 12376 -4741 l
+ 12396 -4705 l 12420 -4664 l 12446 -4618 l 12475 -4567 l 12506 -4511 l
+ 12541 -4450 l 12577 -4385 l 12616 -4316 l 12657 -4243 l 12700 -4166 l
+ 12745 -4087 l 12791 -4005 l 12838 -3921 l 12886 -3835 l 12935 -3748 l
+ 12984 -3660 l 13033 -3571 l 13083 -3482 l 13132 -3394 l 13181 -3306 l
+ 13229 -3218 l 13276 -3132 l 13323 -3047 l 13369 -2963 l 13414 -2881 l
+ 13458 -2801 l 13501 -2722 l 13542 -2645 l 13583 -2570 l 13622 -2497 l
+ 13660 -2426 l 13697 -2356 l 13733 -2289 l 13767 -2223 l 13801 -2159 l
+ 13833 -2097 l 13864 -2036 l 13894 -1977 l 13924 -1920 l 13952 -1864 l
+ 13979 -1809 l 14005 -1756 l 14031 -1703 l 14056 -1652 l 14080 -1602 l
+ 14103 -1552 l 14126 -1504 l 14148 -1456 l 14169 -1409 l 14190 -1362 l
+ 14211 -1316 l 14230 -1270 l 14250 -1225 l 14273 -1172 l 14295 -1119 l
+ 14316 -1066 l 14338 -1014 l 14358 -961 l 14379 -909 l 14398 -857 l
+ 14418 -804 l 14437 -752 l 14455 -699 l 14474 -647 l 14491 -594 l
+ 14509 -540 l 14526 -487 l 14542 -433 l 14558 -379 l 14574 -325 l
+ 14589 -271 l 14603 -216 l 14617 -161 l 14631 -106 l 14644 -51 l
+ 14656 4 l 14668 60 l 14679 115 l 14690 171 l 14701 227 l
+ 14710 282 l 14719 338 l 14728 394 l 14736 449 l 14743 505 l
+ 14749 560 l 14755 615 l 14761 670 l 14766 725 l 14770 780 l
+ 14774 834 l 14777 889 l 14780 943 l 14782 996 l 14783 1050 l
+ 14784 1103 l 14785 1157 l 14784 1210 l 14784 1263 l 14783 1315 l
+ 14781 1368 l 14779 1421 l 14777 1474 l 14774 1527 l 14771 1580 l
+ 14767 1634 l 14763 1688 l 14758 1738 l 14753 1789 l 14748 1841 l
+ 14743 1893 l 14737 1946 l 14730 1999 l 14723 2053 l 14716 2108 l
+ 14708 2163 l 14700 2219 l 14691 2276 l 14681 2333 l 14671 2391 l
+ 14661 2450 l 14650 2509 l 14638 2569 l 14625 2629 l 14613 2690 l
+ 14599 2751 l 14585 2813 l 14570 2875 l 14555 2938 l 14539 3000 l
+ 14522 3063 l 14505 3126 l 14488 3189 l 14469 3252 l 14451 3315 l
+ 14431 3378 l 14411 3440 l 14391 3503 l 14370 3564 l 14348 3626 l
+ 14326 3687 l 14303 3747 l 14280 3807 l 14257 3866 l 14233 3924 l
+ 14209 3981 l 14184 4038 l 14159 4093 l 14133 4148 l 14107 4202 l
+ 14081 4255 l 14054 4307 l 14028 4357 l 14000 4407 l 13973 4456 l
+ 13945 4504 l 13916 4550 l 13887 4596 l 13858 4640 l 13829 4684 l
+ 13799 4726 l 13769 4768 l 13738 4809 l 13707 4849 l 13675 4887 l
+ 13675 4888 l 13640 4928 l 13605 4968 l 13569 5008 l 13532 5046 l
+ 13494 5084 l 13456 5121 l 13416 5158 l 13376 5193 l 13334 5229 l
+ 13292 5263 l 13249 5298 l 13205 5331 l 13160 5364 l 13114 5397 l
+ 13067 5429 l 13019 5460 l 12971 5491 l 12921 5521 l 12871 5551 l
+ 12820 5580 l 12768 5609 l 12715 5636 l 12662 5664 l 12608 5691 l
+ 12554 5717 l 12499 5742 l 12444 5767 l 12389 5791 l 12333 5814 l
+ 12277 5837 l 12221 5860 l 12165 5881 l 12109 5902 l 12052 5922 l
+ 11996 5942 l 11940 5961 l 11884 5979 l 11829 5997 l 11774 6014 l
+ 11719 6030 l 11664 6046 l 11610 6061 l 11556 6076 l 11503 6091 l
+ 11449 6104 l 11397 6118 l 11345 6131 l 11293 6143 l 11241 6156 l
+ 11190 6168 l 11139 6179 l 11088 6190 l 11038 6202 l 10988 6213 l
+ 10937 6223 l 10887 6234 l 10837 6244 l 10786 6255 l 10735 6265 l
+ 10684 6275 l 10633 6285 l 10581 6295 l 10528 6305 l 10474 6315 l
+ 10420 6325 l 10364 6334 l 10307 6344 l 10249 6354 l 10189 6365 l
+ 10128 6375 l 10066 6385 l 10001 6396 l 9935 6406 l 9868 6417 l
+ 9798 6428 l 9727 6439 l 9654 6450 l 9580 6462 l 9504 6473 l
+ 9427 6485 l 9349 6496 l 9269 6508 l 9190 6520 l 9110 6532 l
+ 9030 6543 l 8951 6555 l 8873 6566 l 8796 6577 l 8722 6588 l
+ 8650 6598 l 8581 6608 l 8516 6617 l 8455 6626 l 8398 6633 l
+ 8347 6641 l 8300 6647 l 8258 6653 l 8222 6658 l 8192 6662 l
+ 8166 6666 l 8145 6669 l 8129 6671 l 8117 6673 l
+ 8100 6675 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 8363 6583 m 8132 6671 l 8377 6702 l 8363 6583 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [90] 0 sd
+gs  clippath
+8010 7065 m 8010 7185 l 8297 7185 l 8057 7125 l 8297 7065 l cp
+eoclip
+n 15675 -5775 m 15675 -5774 l 15675 -5772 l 15675 -5769 l 15675 -5763 l 15675 -5754 l
+ 15675 -5742 l 15675 -5726 l 15676 -5707 l 15676 -5683 l 15676 -5654 l
+ 15676 -5620 l 15677 -5580 l 15677 -5536 l 15677 -5485 l 15678 -5429 l
+ 15678 -5367 l 15679 -5298 l 15679 -5224 l 15680 -5144 l 15680 -5058 l
+ 15681 -4966 l 15681 -4869 l 15682 -4766 l 15683 -4658 l 15683 -4545 l
+ 15684 -4428 l 15684 -4306 l 15685 -4180 l 15685 -4051 l 15686 -3918 l
+ 15686 -3783 l 15686 -3644 l 15687 -3504 l 15687 -3362 l 15687 -3218 l
+ 15687 -3073 l 15687 -2928 l 15687 -2781 l 15687 -2635 l 15686 -2489 l
+ 15686 -2343 l 15686 -2198 l 15685 -2054 l 15684 -1911 l 15684 -1770 l
+ 15683 -1630 l 15682 -1492 l 15681 -1355 l 15679 -1221 l 15678 -1088 l
+ 15676 -958 l 15675 -830 l 15673 -705 l 15671 -581 l 15669 -461 l
+ 15667 -342 l 15665 -226 l 15662 -113 l 15660 -2 l 15657 107 l
+ 15654 213 l 15651 317 l 15648 419 l 15644 518 l 15641 615 l
+ 15637 710 l 15633 802 l 15629 893 l 15625 981 l 15621 1068 l
+ 15616 1153 l 15612 1235 l 15607 1316 l 15602 1396 l 15596 1473 l
+ 15591 1549 l 15585 1624 l 15579 1697 l 15573 1769 l 15567 1839 l
+ 15560 1909 l 15553 1977 l 15546 2043 l 15539 2109 l 15532 2174 l
+ 15524 2238 l 15516 2301 l 15508 2364 l 15500 2425 l 15488 2510 l
+ 15475 2594 l 15463 2677 l 15449 2758 l 15435 2839 l 15421 2918 l
+ 15406 2997 l 15390 3074 l 15374 3151 l 15358 3226 l 15340 3301 l
+ 15322 3375 l 15304 3449 l 15285 3521 l 15265 3593 l 15245 3664 l
+ 15224 3734 l 15202 3804 l 15180 3872 l 15157 3940 l 15133 4007 l
+ 15109 4073 l 15084 4138 l 15058 4202 l 15032 4266 l 15005 4328 l
+ 14978 4390 l 14949 4451 l 14921 4510 l 14892 4569 l 14862 4626 l
+ 14831 4683 l 14801 4738 l 14769 4792 l 14737 4846 l 14705 4898 l
+ 14672 4949 l 14639 4999 l 14606 5047 l 14572 5095 l 14537 5141 l
+ 14503 5187 l 14468 5231 l 14433 5274 l 14397 5316 l 14361 5357 l
+ 14325 5397 l 14289 5435 l 14252 5473 l 14215 5510 l 14178 5545 l
+ 14141 5580 l 14104 5614 l 14066 5647 l 14028 5679 l 13990 5711 l
+ 13952 5741 l 13913 5771 l 13874 5800 l 13835 5829 l 13796 5857 l
+ 13756 5884 l 13716 5911 l 13675 5938 l 13630 5966 l 13584 5995 l
+ 13537 6023 l 13490 6050 l 13442 6078 l 13393 6105 l 13343 6131 l
+ 13293 6158 l 13242 6184 l 13190 6210 l 13137 6236 l 13083 6261 l
+ 13029 6286 l 12973 6311 l 12917 6336 l 12860 6360 l 12803 6384 l
+ 12744 6408 l 12685 6432 l 12626 6455 l 12565 6478 l 12504 6501 l
+ 12443 6523 l 12381 6545 l 12319 6566 l 12257 6587 l 12194 6608 l
+ 12131 6628 l 12068 6648 l 12005 6668 l 11942 6687 l 11879 6706 l
+ 11816 6724 l 11754 6741 l 11691 6758 l 11629 6775 l 11568 6791 l
+ 11507 6807 l 11446 6822 l 11386 6837 l 11327 6851 l 11268 6865 l
+ 11210 6878 l 11152 6891 l 11096 6903 l 11040 6915 l 10985 6926 l
+ 10930 6937 l 10876 6948 l 10823 6958 l 10771 6967 l 10720 6977 l
+ 10669 6986 l 10619 6994 l 10570 7002 l 10521 7010 l 10473 7018 l
+ 10425 7025 l 10368 7033 l 10312 7041 l 10256 7049 l 10201 7056 l
+ 10146 7063 l 10091 7069 l 10036 7075 l 9982 7081 l 9927 7086 l
+ 9871 7091 l 9815 7095 l 9759 7099 l 9701 7103 l 9643 7107 l
+ 9583 7110 l 9522 7113 l 9460 7116 l 9397 7118 l 9332 7120 l
+ 9267 7122 l 9199 7124 l 9131 7125 l 9062 7127 l 8992 7128 l
+ 8921 7128 l 8851 7129 l 8780 7129 l 8710 7130 l 8641 7130 l
+ 8574 7130 l 8508 7130 l 8446 7129 l 8386 7129 l 8331 7129 l
+ 8279 7128 l 8232 7128 l 8190 7127 l 8153 7127 l 8121 7126 l
+ 8094 7126 l 8073 7126 l 8056 7126 l 8043 7125 l
+ 8025 7125 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 8297 7065 m 8057 7125 l 8297 7185 l 8297 7065 l  cp gs 0.00 setgray ef gr  col0 s
+/Times-Roman ff 300.00 scf sf
+1350 3975 m
+gs 1 -1 sc (CullingManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+5175 3975 m
+gs 1 -1 sc (QueryManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+8700 3975 m
+gs 1 -1 sc (PreprocessingManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+9000 1650 m
+gs 1 -1 sc (CoherentHierarchicalCullingQueryManager) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+-5475 900 m
+gs 1 -1 sc (INDEPENDENT) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+-5100 3675 m
+gs 1 -1 sc (FrustumCullingManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+4725 -3225 m
+gs 1 -1 sc (BspHierarchyInterface) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+300 -5250 m
+gs 1 -1 sc (VisibilityOctreeSceneManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+-3600 -6225 m
+gs 1 -1 sc (VisibilityTerrainSceneManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+900 -7650 m
+gs 1 -1 sc (OctreeSceneManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+5100 -8625 m
+gs 1 -1 sc (BspSceneManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+4425 -6225 m
+gs 1 -1 sc (VisibilityBspSceneManager) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+-5850 -5550 m
+gs 1 -1 sc (DEPENDENT) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+-5850 -6075 m
+gs 1 -1 sc (OGRE) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+-5850 -9750 m
+gs 1 -1 sc (OGRE) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+-3000 -8625 m
+gs 1 -1 sc (TerrainSceneManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+9525 -7650 m
+gs 1 -1 sc (SceneManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+9150 -5250 m
+gs 1 -1 sc (VisibilitySceneManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+8550 -3225 m
+gs 1 -1 sc (SceneNodeHierarchyInterface) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+14400 -8550 m
+gs 1 -1 sc (DotSceneManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+13725 -6225 m
+gs 1 -1 sc (VisibilityDotSceneManager) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+-5475 375 m
+gs 1 -1 sc (OGRE) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+4800 8400 m
+gs 1 -1 sc (VisibilityEnvironment) col0 sh gr
+% Polyline
+7.500 slw
+n 4500 600 m 7800 600 l 7800 1200 l 4500 1200 l
+ cp gs col0 s gr 
+/Times-Roman ff 300.00 scf sf
+5025 6825 m
+gs 1 -1 sc (VisibilityManager) col0 sh gr
+/Times-Roman ff 300.00 scf sf
+5100 975 m
+gs 1 -1 sc (HierarchyInterface) col0 sh gr
+% Polyline
+n -4050 4800 m -300 4800 l -300 5400 l -4050 5400 l
+ cp gs col0 s gr 
+% here ends figure;
+$F2psEnd
+rs
+showpage
Index: /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/overview.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/overview.tex	(revision 71)
+++ /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/overview.tex	(revision 71)
@@ -0,0 +1,87 @@
+\newcommand{\tab}{\hspace{2mm}}
+\chapter{Overview}
+
+
+ The visibility workpackage aims to develop methods for making use of
+restricted visibility in large scenes. The major goal of these methods
+is to avoid wasting computational power on currently invisible parts
+of the scene. To address this goal, we develop new methods for online
+visibility culling and offline visibility preprocessing. The online
+visibility culling is either used to render only visible part of the
+scene or to provide queries which determine visible parts of the scene
+in runtime. Visibility preprocessing provides partitioning of the view
+space into view cells, and for each view cell it calculates a
+potentially visible set.
+
+
+\section{Module Class Hierarchy}
+
+ The visibility workpackage consists of a module which is integrated
+into the game engine and an external module which deals with
+preprocessing. One of the goals of the design of the module class
+hierarchy has been easy portability of the developed methods to other
+game engines. The resulting class structure clearly separates the
+actual engine-dependent parts from the game engine independent
+algorithmic parts.  We have used name spaces to separate the engine
+dependent parts (name space Ogre) from the engine independent parts
+(name space GtpVisibility). The external visibility preprocessing
+module defines its own name space (GtpVisibilityPreprocessor).
+
+ An overview of the important classes of the visibility work package and
+their integration into the Ogre engine is depicted in
+Figure~\ref{fig:classes}.
+
+\begin{figure}[htb]
+  \centerline{
+    \includegraphics[angle=270,width=1.0\textwidth]{../classes}
+    }
+  \caption{Overview of the visibility work packages classes and their integration
+    into the Ogre game engine.}
+  \label{fig:classes}
+\end{figure}
+
+The diagram shows that the module integrated into the engine consists
+of three main parts (CullingManager, QueryManager,
+PreprocessingManager), which are encapsulated in a helper class
+(Visibility Manager). The helper class then deals with the
+initialization of the contained parts and allows easy communication
+between them.
+
+\section{Visibility Culling}
+
+Visibility culling seamlessly integrates into the rendering loop and
+eliminates most invisible objects from being sent to the pipeline.
+Visibility culling is implemented by instances of the CullingManager
+class. We will provide several implementations which can be easily
+switched at runtime and so the best technique for the particular scene
+and scene representation can be selected. Note that the Ogre
+integration design allows to exploit all already existing methods for
+scene management, such as octree, BSP tree, or plain scene graph.
+
+
+\section{Visibility Queries}
+
+Visibility queries determine the visible geometry for a given view
+point in the scene. Additionally they can also report the visible
+scene hierarchy nodes. Visibility queries are implemented by
+instances of the QueryManager class. Note that some of these instances
+will make use of the preprocessed visibility data through the use of
+PreprocessingManager.
+
+\section{Visibility Preprocessing}
+
+Visibility preprocessing precalculates visibility for all viewpoints
+corresponding to cells of a view space partitioning. The visibility
+preprocessor is implemented as a standalone module which imports files
+generated by the PreprocessingManager. The results of the visibility
+computation will be exported to the file which can then be loaded by
+the PreprocessingManager and used inside the engine.
+
+ Apart from the scene definition file, the preprocessor will be able
+to import the view cell definition. In this case it will assume the
+view cells have to be described as meshes satisfying a set of
+requirements. Alternatively, the module can generate view cells by
+automatic view space partitioning.
+
+
+%{\textbullet}\tab\textbf{Construction module for tree multiresolution models.}
Index: /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/refman_edited.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/refman_edited.tex	(revision 73)
+++ /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/refman_edited.tex	(revision 73)
@@ -0,0 +1,177 @@
+\documentclass[a4paper]{book}
+\usepackage{a4wide}
+\usepackage{makeidx}
+\usepackage{fancyhdr}
+\usepackage{graphicx}
+\usepackage{multicol}
+\usepackage{float}
+\usepackage{textcomp}
+\usepackage{alltt}
+\usepackage{times}
+\usepackage{pdfpages}
+\ifx\pdfoutput\undefined
+\usepackage[ps2pdf,
+            pagebackref=true,
+            colorlinks=true,
+            linkcolor=blue
+           ]{hyperref}
+\usepackage{pspicture}
+\else
+\usepackage[pdftex,
+            pagebackref=true,
+            colorlinks=true,
+            linkcolor=blue
+           ]{hyperref}
+\fi
+\usepackage{doxygen}
+\makeindex
+\setcounter{tocdepth}{1}
+\renewcommand{\footrulewidth}{0.4pt}
+\begin{document}
+%\begin{titlepage}
+%\vspace*{7cm}
+%\begin{center}
+%{\Large Game\-Tools Geometry Modules Reference Manual\\[1ex]\large 0.1 }\\
+%\vspace*{1cm}
+%{\large Generated by Doxygen 1.4.0}\\
+%\vspace*{0.5cm}
+%{\small Tue Apr 19 12:57:03 2005}\\
+%\end{center}
+%\end{titlepage}
+\includepdf[pages=1-2]{../cover.pdf}
+\clearemptydoublepage
+\pagenumbering{roman}
+\tableofcontents
+\clearemptydoublepage
+\pagenumbering{arabic}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\input{../overview}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Game\-Tools Visibility Modules Hierarchical Index}
+\input{hierarchy}
+\chapter{Game\-Tools Visibility Modules Class Documentation}
+\input{class_ogre_1_1_bsp_hierarchy_interface}
+\include{class_ogre_1_1_octree_hierarchy_interface}
+\include{class_ogre_1_1_platform_hierarchy_interface}
+\include{class_ogre_1_1_platform_occlusion_query}
+\include{class_ogre_1_1_scene_node_hierarchy_interface}
+\include{class_ogre_1_1_solid_half_bounding_box}
+\include{class_ogre_1_1_visibility_bsp_scene_manager}
+\include{class_ogre_1_1_visibility_dot_scene_manager}
+\include{class_ogre_1_1_visibility_octree_scene_manager}
+\include{class_ogre_1_1_visibility_scene_manager}
+\include{class_ogre_1_1_visibility_terrain_scene_manager}
+\include{class_gtp_visibility_1_1_coherent_hierarchical_culling_manager}
+\include{class_gtp_visibility_1_1_culling_manager}
+\include{class_gtp_visibility_1_1_dummy_preprocessing_manager}
+\include{class_gtp_visibility_1_1_dummy_query_manager}
+\include{class_gtp_visibility_1_1_frustum_culling_manager}
+\include{class_gtp_visibility_1_1_greater_distance}
+\include{class_gtp_visibility_1_1_hierarchy_interface}
+\include{class_gtp_visibility_1_1_mesh_info}
+\include{class_gtp_visibility_1_1_node_info}
+\include{class_gtp_visibility_1_1_occlusion_query}
+\include{class_gtp_visibility_1_1_preprocessing_manager}
+\include{class_gtp_visibility_1_1_query_manager}
+\include{class_gtp_visibility_1_1_stop_and_wait_culling_manager}
+\include{class_gtp_visibility_1_1_visibility_environment}
+\include{class_gtp_visibility_1_1_visibility_manager}
+\include{class_gtp_visibility_preprocessor_1_1_axis_aligned_box3}
+\include{class_gtp_visibility_preprocessor_1_1_b_s_p_interior}
+\include{class_gtp_visibility_preprocessor_1_1_b_s_p_leaf}
+\include{class_gtp_visibility_preprocessor_1_1_b_s_p_node}
+\include{class_gtp_visibility_preprocessor_1_1_b_s_p_tree}
+\include{class_gtp_visibility_preprocessor_1_1_exact_preprocessor}
+\include{class_gtp_visibility_preprocessor_1_1_kd_interior}
+\include{class_gtp_visibility_preprocessor_1_1_kd_leaf}
+\include{class_gtp_visibility_preprocessor_1_1_kd_node}
+\include{class_gtp_visibility_preprocessor_1_1_kd_tree}
+\include{class_gtp_visibility_preprocessor_1_1_mesh}
+\include{class_gtp_visibility_preprocessor_1_1_patch}
+\include{class_gtp_visibility_preprocessor_1_1_plane3}
+\include{class_gtp_visibility_preprocessor_1_1_preprocessor}
+\include{class_gtp_visibility_preprocessor_1_1_sampling_preprocessor}
+\include{class_gtp_visibility_preprocessor_1_1_scene_graph}
+\include{class_gtp_visibility_preprocessor_1_1_scene_graph_node}
+\include{class_gtp_visibility_preprocessor_1_1_vector3}
+\chapter{Game\-Tools Visibility Modules Namespace Documentation}
+\input{namespace_gtp_visibility}
+\include{namespace_gtp_visibility_preprocessor}
+\include{namespace_ogre}
+\chapter{Game\-Tools Visibility Modules File Documentation}
+\input{_axis_aligned_box3_8h}
+\include{_coherent_hierarchical_culling_manager_8cpp}
+\include{_coherent_hierarchical_culling_manager_8h}
+\include{_containers_8h}
+\include{_culling_manager_8cpp}
+\include{_culling_manager_8h}
+\include{_distance_queue_8h}
+\include{_dummy_preprocessing_manager_8cpp}
+\include{_dummy_preprocessing_manager_8h}
+\include{_dummy_query_manager_8cpp}
+\include{_dummy_query_manager_8h}
+\include{_exact_preprocessor_8cpp}
+\include{_exact_preprocessor_8h}
+\include{_frustum_culling_manager_8cpp}
+\include{_frustum_culling_manager_8h}
+\include{_hierarchy_interface_8cpp}
+\include{_hierarchy_interface_8h}
+\include{_kd_tree_8cpp}
+\include{_kd_tree_8h}
+\include{_mesh_8h}
+\include{_occlusion_query_8h}
+\include{_ogre_bsp_hierarchy_interface_8cpp}
+\include{_ogre_bsp_hierarchy_interface_8h}
+\include{_ogre_octree_hierarchy_interface_8cpp}
+\include{_ogre_octree_hierarchy_interface_8h}
+\include{_ogre_platform_hierarchy_interface_8cpp}
+\include{_ogre_platform_hierarchy_interface_8h}
+\include{_ogre_platform_occlusion_query_8cpp}
+\include{_ogre_platform_occlusion_query_8h}
+\include{_ogre_scene_node_hierarchy_interface_8cpp}
+\include{_ogre_scene_node_hierarchy_interface_8h}
+\include{_ogre_solid_half_bounding_box_8cpp}
+\include{_ogre_solid_half_bounding_box_8h}
+\include{_ogre_visibility_bsp_scene_manager_8cpp}
+\include{_ogre_visibility_bsp_scene_manager_8h}
+\include{_ogre_visibility_dot_scene_manager_8cpp}
+\include{_ogre_visibility_dot_scene_manager_8h}
+\include{_ogre_visibility_octree_scene_manager_8cpp}
+\include{_ogre_visibility_octree_scene_manager_8h}
+\include{_ogre_visibility_scene_manager_8cpp}
+\include{_ogre_visibility_scene_manager_8h}
+\include{_ogre_visibility_scene_manager_dll_8cpp}
+\include{_ogre_visibility_terrain_scene_manager_8cpp}
+\include{_ogre_visibility_terrain_scene_manager_8h}
+\include{_plane3_8h}
+\include{_preprocessing_manager_8cpp}
+\include{_preprocessing_manager_8h}
+\include{_preprocessor_8cpp}
+\include{_preprocessor_8h}
+\include{_query_manager_8cpp}
+\include{_query_manager_8h}
+\include{_sampling_preprocessor_8cpp}
+\include{_sampling_preprocessor_8h}
+\include{_scene_graph_8h}
+\include{_stop_and_wait_culling_manager_8cpp}
+\include{_stop_and_wait_culling_manager_8h}
+\include{_vector3_8h}
+\include{_view_cell_b_s_p_8h}
+\include{_visibility_axis_aligned_box_8h}
+\include{_visibility_camera_8h}
+\include{_visibility_environment_8cpp}
+\include{_visibility_environment_8h}
+\include{_visibility_info_8h}
+\include{_visibility_manager_8cpp}
+\include{_visibility_manager_8h}
+\include{_visibility_mesh_8h}
+\include{_visibility_ray_8h}
+\include{_visibility_vector3_8h}
+\chapter{Game\-Tools Visibility Modules Class Index}
+\input{annotated}
+\chapter{Game\-Tools Visibility Modules Namespace Index}
+\input{namespaces}
+\chapter{Game\-Tools Visibility Modules File Index}
+\input{files}
+\printindex
+\end{document}
Index: /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/header.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/header.tex	(revision 67)
+++ /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/header.tex	(revision 67)
@@ -0,0 +1,49 @@
+\documentclass[a4paper]{book}
+\usepackage{a4wide}
+\usepackage{makeidx}
+\usepackage{fancyhdr}
+\usepackage{graphicx}
+\usepackage{multicol}
+\usepackage{float}
+\usepackage{textcomp}
+\usepackage{alltt}
+\usepackage{times}
+\usepackage{pdfpages}
+\ifx\pdfoutput\undefined
+\usepackage[ps2pdf,
+            pagebackref=true,
+            colorlinks=true,
+            linkcolor=blue
+           ]{hyperref}
+\usepackage{pspicture}
+\else
+\usepackage[pdftex,
+            pagebackref=true,
+            colorlinks=true,
+            linkcolor=blue
+           ]{hyperref}
+\fi
+\usepackage{doxygen}
+\makeindex
+\setcounter{tocdepth}{1}
+\renewcommand{\footrulewidth}{0.4pt}
+\begin{document}
+%\begin{titlepage}
+%\vspace*{7cm}
+%\begin{center}
+%{\Large Game\-Tools Geometry Modules Reference Manual\\[1ex]\large 0.1 }\\
+%\vspace*{1cm}
+%{\large Generated by Doxygen 1.4.0}\\
+%\vspace*{0.5cm}
+%{\small Tue Apr 19 12:57:03 2005}\\
+%\end{center}
+%\end{titlepage}
+\includepdf[pages=1-2]{../cover.pdf}
+\clearemptydoublepage
+\pagenumbering{roman}
+\tableofcontents
+\clearemptydoublepage
+\pagenumbering{arabic}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\input{../overview}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Index: /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/doxyfile_gtp_dummy
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/doxyfile_gtp_dummy	(revision 73)
+++ /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/doxyfile_gtp_dummy	(revision 73)
@@ -0,0 +1,262 @@
+#Doxyfile 1.4.2
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = "GameTools Visibility Modules"
+PROJECT_NUMBER         = 0.1
+OUTPUT_DIRECTORY       = ./
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+USE_WINDOWS_ENCODING   = YES
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = NO
+#STRIP_FROM_PATH        = "d:/gametools/trunk/VUT/"
+STRIP_FROM_INC_PATH    = "d:\gametools\svn\trunk\VUT"
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+DISTRIBUTE_GROUP_DOC   = NO
+SEPARATE_MEMBER_PAGES  = YES
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = YES
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = YES
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = NO
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = NO
+SORT_BRIEF_DOCS        = NO
+#SORT_BY_SCOPE_NAME     = YES
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = NO
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = ../../GtpVisibility/src/ \
+	 		 ../../GtpVisibility/include/ \
+			 ../../Ogre/src/ \
+	 		 ../../Ogre/include/ \
+			 ../../GtpVisibilityPreprocessor/src/ \
+	 		 ../../GtpVisibilityPreprocessor/include/ 
+
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.d \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.idl \
+                         *.odl \
+                         *.cs \
+                         *.php \
+                         *.php3 \
+                         *.inc \
+                         *.m \
+                         *.mm \
+                         *.dox
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = */Test/*
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = YES
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = YES
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = header.tex
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = NO
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = YES
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = YES
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = NO
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 1024
+MAX_DOT_GRAPH_HEIGHT   = 1024
+MAX_DOT_GRAPH_DEPTH    = 1000
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
Index: /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/doxyfile_gtp_dummy_2
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/doxyfile_gtp_dummy_2	(revision 71)
+++ /GTP-Internal/trunk/Lib/Vis/docs/DummyModules/DummyModules/doxyfile_gtp_dummy_2	(revision 71)
@@ -0,0 +1,261 @@
+# Doxyfile 1.4.2
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = "GameTools Visibility"
+PROJECT_NUMBER         = 0.1
+OUTPUT_DIRECTORY       = ./
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+USE_WINDOWS_ENCODING   = YES
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = D:\gametools\trunk\VUT\
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+DISTRIBUTE_GROUP_DOC   = NO
+SEPARATE_MEMBER_PAGES  = YES
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = YES
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = YES
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = NO
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = NO
+SORT_BRIEF_DOCS        = YES
+SORT_BY_SCOPE_NAME     = YES
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = YES
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = ../../GtpVisibility/src/ \
+                         ../../GtpVisibility/include/ \
+                         ../../Ogre/src/ \
+                         ../../Ogre/include/ \
+                         ../../GtpVisibilityPreprocessor/src/ \
+                         ../../GtpVisibilityPreprocessor/include/
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.d \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.idl \
+                         *.odl \
+                         *.cs \
+                         *.php \
+                         *.php3 \
+                         *.inc \
+                         *.m \
+                         *.mm \
+                         *.dox
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = */Test/*
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = YES
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = YES
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = header.tex
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = NO
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = YES
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = YES
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 1024
+MAX_DOT_GRAPH_HEIGHT   = 1024
+MAX_DOT_GRAPH_DEPTH    = 1000
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/introduction.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/introduction.tex	(revision 277)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/introduction.tex	(revision 277)
@@ -0,0 +1,705 @@
+\chapter{Introduction}%\chapter
+
+\label{chap:introduction}
+
+\section{Structure of the report}
+
+  The report consists of two introductory chapters, which provide a
+ theoretical background for description of the algorithms, and three
+ chapters dealing with the actual visibility algorithms.
+
+  This chapter provides an introduction to visibility by using a
+ taxonomy of visibility problems and algorithms. The taxonomy is used
+ to classify the later described visibility
+ algorithms. Chapter~\ref{chap:analysis} provides an analysis of
+ visibility in 2D and 3D polygonal scenes. This analysis also includes
+ formal description of visibility using \plucker coordinates of
+ lines. \plucker coordinates are exploited later in algorithms for
+ mutual visibility verification (Chapter~\ref{chap:mutual}).
+
+ Chapter~\ref{chap:online} describes a visibility culling algorithm
+ used to implement the online visibility culling module. This
+ algorithm can be used accelerate rendering of fully dynamic scenes
+ using recent graphics hardware.  Chapter~\ref{chap:sampling}
+ describes global visibility sampling algorithm which forms a core of
+ the PVS computation module. This chapter also describes view space
+ partitioning algorithms used in close relation with the PVS
+ computation. Finally, Chapter~\ref{chap:mutual} describes mutual
+ visibility verification algorithms, which are used by the PVS
+ computation module to generate the final solution for precomputed
+ visibility.
+
+
+
+
+%% summarize the state of the art
+%% visibility algorithms and their relation to the proposed taxonomy of
+%% visibility problems. The second part of the survey should serve as a
+%% catalogue of visibility algorithms that is indexed by the proposed
+%% taxonomy of visibility problems.
+
+
+
+\section{Domain of visibility problems}
+\label{sec:prob_domain}
+
+ Computer graphics deals with visibility problems in the context of
+2D, \m25d, or 3D scenes. The actual problem domain is given by
+restricting the set of rays for which visibility should be
+determined.
+
+Below we list common problem domains used and the corresponding domain
+restrictions:
+
+\begin{enumerate}
+\item
+  {\em visibility along a line}
+  \begin{enumerate}
+  \item line
+  \item ray (origin + direction)
+  \end{enumerate}
+  \newpage
+\item
+  {\em visibility from a point} ({\em from-point visibility})
+  \begin{enumerate}
+  \item point
+  \item point + restricted set of rays
+    \begin{enumerate}
+    \item point + raster image (discrete form)
+    \item point + beam (continuous form)
+    \end{enumerate}
+  \end{enumerate}
+
+  
+\item
+  {\em visibility from a line segment} ({\em from-segment visibility})
+  \begin{enumerate}
+  \item line segment
+  \item line segment + restricted set of rays
+  \end{enumerate}
+  
+\item
+  {\em visibility from a polygon} ({\em from-polygon visibility})
+  \begin{enumerate}
+  \item polygon
+  \item polygon + restricted set of rays
+  \end{enumerate}
+  
+\item
+  {\em visibility from a region} ({\em from-region visibility})
+  \begin{enumerate}
+    \item region
+    \item region + restricted set of rays
+  \end{enumerate}
+
+\item
+  {\em global visibility}
+  \begin{enumerate}
+    \item no further input (all rays in the scene)
+    \item restricted set of rays
+  \end{enumerate}
+\end{enumerate}
+  
+ The domain restrictions can be given independently of the dimension
+of the scene, but the impact of the restrictions differs depending on
+the scene dimension. For example, visibility from a polygon is
+equivalent to visibility from a (polygonal) region in 2D, but not in
+3D.
+
+%*****************************************************************************
+
+\section{Dimension of the problem-relevant line set}
+
+ The six domains of visibility problems stated in
+Section~\ref{sec:prob_domain} can be characterized by the {\em
+problem-relevant line set} denoted ${\cal L}_R$. We give a
+classification of visibility problems according to the dimension of
+the problem-relevant line set. We discuss why this classification is
+important for understanding the nature of the given visibility problem
+and for identifying its relation to other problems.
+
+
+ For the following discussion we assume that a line in {\em primal
+space} can be mapped to a point in {\em line space}. For purposes of
+the classification we define the line space as a vector space where a
+point corresponds to a line in the primal space\footnote{A classical
+mathematical definition says: Line space is a direct product of two
+Hilbert spaces~\cite{Weisstein:1999:CCE}. However, this definition
+differs from the common understanding of line space in computer
+graphics~\cite{Durand99-phd}}.
+
+
+
+\subsection{Parametrization of lines in 2D}
+
+ There are two independent parameters that specify a 2D line and thus
+the corresponding set of lines is two-dimensional. There is a natural
+duality between lines and points in 2D. For example a line expressed
+as: $l:y=ax+c$ is dual to a point $p=(-c,a)$. This particular duality
+cannot handle vertical lines. See Figure~\ref{fig:duality2d} for an
+example of other dual mappings in the plane.  To avoid the singularity
+in the mapping, a line $l:ax+by+c=0$ can be represented as a point
+$p_l=(a,b,c)$ in 2D projective space ${\cal
+P}^2$~\cite{Stolfi:1991:OPG}. Multiplying $p_l$ by a non-zero scalar
+we obtain a vector that represents the same line $l$. More details
+about this singularity-free mapping will be discussed in
+Chapter~\ref{chap:analysis}.
+
+
+\begin{figure}[!htb]
+\centerline{
+\includegraphics[width=0.9\textwidth,draft=\DRAFTFIGS]{figs/duality2d}}
+\caption{Duality between points and lines in 2D.}
+\label{fig:duality2d}
+\end{figure}
+
+
+
+
+
+ To sum up: In 2D there are two degrees of freedom in description of a
+line and the corresponding line space is two-dimensional. The
+problem-relevant line set ${\cal L}_R$ then forms a $k$-dimensional
+subset of ${\cal P}^2$, where $0\leq k \leq 2$. An illustration of the
+concept of the problem-relevant line set is depicted in
+Figure~\ref{fig:classes}.
+
+
+\begin{figure}[htb]
+\centerline{
+\includegraphics[width=0.8\textwidth,draft=\DRAFTFIGS]{figs/classes}}
+\caption{The problem-relevant set of lines in 2D. The ${\cal L}_R$ for
+visibility along a line is formed by a single point that is a mapping
+of the given line. The ${\cal L}_R$ for visibility from a point $p$ is
+formed by points lying on a line. This line is a dual mapping of the
+point $p$. ${\cal L}_R$ for visibility from a line segment is formed
+by a 2D region bounded by dual mappings of endpoints of the given
+segment.}
+\label{fig:classes}
+\end{figure}
+
+
+\subsection{Parametrization of lines in 3D}
+
+
+Lines in 3D form a four-parametric space~\cite{p-rsls-97}. A line
+intersecting a given scene can be described by two points on a sphere
+enclosing the scene. Since the surface of the sphere is a two
+parametric space, we need four parameters to describe the line.
+
+ The {\em two plane parametrization} of 3D lines describes a line by
+points of intersection with the given two
+planes~\cite{Gu:1997:PGT}. This parametrization exhibits a singularity
+since it cannot describe lines parallel to these planes. See
+Figure~\ref{fig:3dlines} for illustrations of the spherical and the
+two plane parameterizations.
+
+
+\begin{figure}[htb]
+\centerline{
+\includegraphics[width=0.78\textwidth,draft=\DRAFTFIGS]{figs/3dlines}}
+\caption{Parametrization of lines in 3D. (left) A line can be
+  described by two points on a sphere enclosing the scene. (right) The
+  two plane parametrization describes a line by point of intersection
+  with two given planes.}
+\label{fig:3dlines}
+\end{figure}
+
+ Another common parametrization of 3D lines are the {\em \plucker
+coordinates}. \plucker coordinates of an oriented 3D line are a six
+tuple that can be understood as a point in 5D oriented projective
+space~\cite{Stolfi:1991:OPG}. There are six coordinates in \plucker
+representation of a line although we know that the ${\cal L}_R$ is
+four-dimensional. This can be explained as follows:
+
+\begin{itemize}
+  \item Firstly, \plucker coordinates are {\em homogeneous
+    coordinates} of a 5D point. By multiplication of the coordinates
+    by any positive scalar we get a mapping of the same line.
+  \item Secondly, only 4D subset of the 5D oriented projective space
+  corresponds to real lines. This subset is a 4D ruled quadric called
+  the {\em \plucker quadric} or the {\em Grassman
+  manifold}~\cite{Stolfi:1991:OPG,Pu98-DSGIV}.
+\end{itemize}
+
+ Although the \plucker coordinates need more coefficients they have no
+singularity and preserve some linearities: lines intersecting a set of
+lines in 3D correspond to an intersection of 5D hyperplanes. More
+details on \plucker coordinates will be discussed in
+Chapter~\ref{chap:analysis} and Chapter~\ref{chap:mutual} where they
+are used to solve the from-region visibility problem.
+
+  To sum up: In 3D there are four degrees of freedom in the
+description of a line and thus the corresponding line space is
+four-dimensional. Fixing certain line parameters (e.g. direction) the
+problem-relevant line set, denoted ${\cal L}_R$, forms a
+$k$-dimensional subset of ${\cal P}^4$, where $0\leq k \leq 4$.
+
+
+\subsection{Visibility along a line}
+
+ The simplest visibility problems deal with visibility along a single
+line. The problem-relevant line set is zero-dimensional, i.e. it is
+fully specified by the given line. A typical example of a visibility
+along a line problem is {\em ray shooting}.
+
+ A similar problem to ray shooting is the {\em point-to-point}
+visibility.  The  point-to-point visibility determines whether the
+line segment between two points is occluded, i.e. it has an
+intersection with an opaque object in the scene. Point-to-point
+visibility provides a visibility classification (answer 1a), whereas
+ray shooting determines a visible object (answer 2a) and/or a point of
+intersection (answer 3a). Note that the {\em point-to-point}
+visibility can be solved easily by means of ray shooting. Another
+constructive visibility along a line problem is determining the {\em
+maximal free line segments} on a given line. See Figure~\ref{fig:val}
+for an illustration of typical visibility along a line problems.
+
+\begin{figure}[htb]
+\centerline{
+\includegraphics[width=0.85\textwidth,draft=\DRAFTFIGS]{figs/val}}
+\caption{Visibility along a line. (left) Ray shooting. (center) Point-to-point visibility. (right) Maximal free line segments between two points.}
+\label{fig:val}
+\end{figure}
+
+
+\subsection{Visibility from a point}
+
+ Lines intersecting a point in 3D can be described  by two
+parameters. For example the lines can be expressed by an intersection
+with a unit sphere centered at the given point. The most common
+parametrization describes a line by a point of intersection with a
+given viewport. Note that this parametrization accounts only for a
+subset of lines that intersect the viewport (see Figure~\ref{fig:vfp}).
+
+\begin{figure}[htb]
+\centerline{
+\includegraphics[width=0.6\textwidth,draft=\DRAFTFIGS]{figs/vfp}}
+\caption{Visibility from a point. Lines intersecting a point can be described by a
+  point of intersection with the given viewport.}
+\label{fig:vfp}
+\end{figure}
+
+ In 3D the problem-relevant line set ${\cal L}_R$ is a 2D subset of
+the 4D line space. In 2D the ${\cal L}_R$ is a 1D subset of the 2D
+line space. The typical visibility from a point problem is the visible
+surface determination. Due to its importance the visible surface
+determination is covered by the majority of existing visibility
+algorithms. Other visibility from a point problem is the construction
+of the {\em visibility map} or the {\em point-to-region visibility}
+that classifies a region as visible, invisible, or partially visible
+with respect to the given point.
+
+
+\subsection{Visibility from a line segment}
+
+ Lines intersecting a line segment in 3D can be described by three
+parameters. One parameter fixes the intersection of the line with the
+segment the other two express the direction of the line. The
+problem-relevant line set ${\cal L}_R$ is three-dimensional and it can
+be understood as a 2D cross section of ${\cal L}_R$  swept according
+to the translation on the given line segment (see
+Figure~\ref{fig:vls}).
+
+
+\begin{figure}[htb]
+\centerline{
+\includegraphics[width=0.8\textwidth,draft=\DRAFTFIGS]{figs/vls}}
+\caption{Visibility from a line segment. (left) Line segment, a
+  spherical object $O$, and its projections $O^*_0$, $O^*_{0.5}$, $O^*_{1}$
+  with respect to the three points on the line segment. (right)
+  A possible parametrization of lines that stacks up 2D planes.
+  Each plane corresponds to mappings of lines intersecting a given
+  point on the line segment.}
+\label{fig:vls}
+\end{figure}
+
+In 2D lines intersecting a line segment form a two-dimensional
+problem-relevant line set. Thus for the 2D case the ${\cal L}_R$ is a
+two-dimensional subset of 2D line space.
+
+
+\subsection{Visibility from a region}
+
+ Visibility from a region (or from-region visibility) involves the
+most general visibility problems. In 3D the ${\cal L}_R$ is a 4D
+subset of the 4D line space. In 2D the ${\cal L}_R$ is a 2D subset of
+the 2D line space. Consequently, in the presented classification
+visibility from a region in 2D is equivalent to visibility from a line
+segment in 2D.
+
+ A typical visibility from a region problem is the problem of {\em
+region-to-region} visibility that aims to determine if the two given
+regions in the scene are visible, invisible, or partially visible (see
+Figure~\ref{fig:vfr}). Another visibility from region problem is the
+computation of a {\em potentially visible set} (PVS) with respect to a
+given view cell. The PVS consists of a set of objects that are
+potentially visible from any point inside the view cell. Further
+visibility from a region problems include computing form factors
+between two polygons, soft shadow algorithms or discontinuity meshing.
+
+
+\begin{figure}[htb]
+\centerline{
+\includegraphics[width=0.6\textwidth,draft=\DRAFTFIGS]{figs/vfr}}
+\caption{Visibility from a region --- an example of the region-to-region
+  visibility. Two regions and two occluders $A$, $B$
+  in a 2D scene.  In line space the region-to-region visibility can be
+  solved by subtracting the sets of lines $A^*$ and $B^*$
+  intersecting objects $A$ and $B$ from the lines intersecting both
+  regions.}
+\label{fig:vfr}
+\end{figure}
+
+
+\subsection{Global visibility}
+
+ According to the classification the global visibility problems can be
+seen as an extension of the from-region visibility problems. The
+dimension of the problem-relevant line set is the same ($k=2$ for 2D
+and $k=4$ for 3D scenes). Nevertheless, the global visibility problems
+typically deal with much larger set of rays, i.e.  all rays that
+penetrate the scene. Additionally, there is no given set of reference
+points from which visibility is studied and hence there is no given
+priority ordering of objects along each particular line from ${\cal
+L}_R$. Therefore an additional parameter must be used to describe
+visibility (visible object) along each ray.
+
+
+\subsection{Summary}
+
+ The classification of visibility problems according to the dimension
+of the problem-relevant line set is summarized in
+Table~\ref{table:classification3D}.  This classification provides
+means for understanding how difficult it is to compute, describe, and
+maintain visibility for a particular class of problems. For example a
+data structure representing the visible or occluded parts of the scene
+for the visibility from a point problem needs to partition a 2D ${\cal
+L}_R$ into visible and occluded sets of lines. This observation
+conforms with the traditional visible surface algorithms -- they
+partition a 2D viewport into empty/nonempty regions and associate each
+nonempty regions (pixels) with a visible object. In this case the
+viewport represents the ${\cal L}_R$ as each point of the viewport
+corresponds to a line through that point. To analytically describe
+visibility from a region a subdivision of 4D ${\cal L}_R$ should be
+performed. This is much more difficult than the 2D
+subdivision. Moreover the description of visibility from a region
+involves non-linear subdivisions of both primal space and line space
+even for polygonal scenes~\cite{Teller:1992:CAA,Durand99-phd}.
+
+\begin{table*}[htb]
+\begin{small}
+\begin{center}
+\begin{tabular}{|l|c|l|}
+\hline
+\multicolumn{3}{|c|}{2D} \\
+\hline
+\mc{domain} & $d({\cal L}_R)$ & \mc{problems} \\
+\hline
+\hline
+\begin{tabular}{l}visibility along a line\end{tabular}         & 0 &  \begin{tabular}{l}ray shooting, point-to-point visibility\end{tabular}\\
+\hline
+\begin{tabular}{l}visibility from a point\end{tabular}         & 1 &  \begin{tabular}{l}view around a point, point-to-region visibility\end{tabular}\\
+\hline
+\begin{tabular}{l} visibility from a line segment \\ visibility from region \\ global visibility \end{tabular}
+   & 2 & \begin{tabular}{l} region-to-region visibility, PVS \end{tabular}\\
+\hline
+\hline
+\multicolumn{3}{|c|}{3D} \\
+\hline
+\mc{domain} & $d({\cal L}_R)$ & \mc{problems} \\
+\hline
+\hline
+\begin{tabular}{l}visibility along a line\end{tabular}  & 0 & \begin{tabular}{l} ray shooting, point-to-point visibility \end{tabular}\\
+\hline
+\begin{tabular}{l}from point in a surface\end{tabular}  & 1 & \begin{tabular}{l} see visibility from point in 2D \end{tabular}\\
+\hline
+\begin{tabular}{l}visibility from a point\end{tabular}  & 2 & \begin{tabular}{l} visible (hidden) surfaces, point-to-region visibility,\\
+                                      visibility map, hard shadows
+                               \end{tabular} \\
+\hline
+\begin{tabular}{l}visibility from a line segment\end{tabular} & 3 & \begin{tabular}{l} segment-to-region visibility (rare) \end{tabular}\\
+\hline
+\begin{tabular}{l}visibility from a region\\global visibility\end{tabular}       & 4 & \begin{tabular}{l} region-region visibility, PVS, aspect graph,\\
+                                            soft shadows, discontinuity meshing
+                                     \end{tabular} \\
+
+\hline  
+\end{tabular}
+\end{center}
+\end{small}
+\caption{Classification of visibility problems in 2D and 3D according
+to the dimension of the problem-relevant line set.}
+\label{table:classification3D}
+\end{table*}
+
+
+
+
+
+\section{Classification of visibility algorithms}
+
+
+The taxonomy of visibility problems groups similar visibility problems
+in the same class.  A visibility problem can be solved by means of
+various visibility algorithms. A visibility algorithm poses further
+restrictions on the input and output data. These restrictions can be
+seen as a more precise definition of the visibility problem that is
+solved by the algorithm.
+
+ Above we classified visibility problems according to the problem
+domain and the desired answers. In this section we provide a
+classification of visibility algorithms according to other
+important criteria characterizing a particular visibility algorithm.
+
+
+\subsection{Scene restrictions}
+\label{sec:scene_restrictions}
+
+Visibility algorithms can be classified according to the restrictions
+they pose on the scene description.  The type of the scene description
+influences the difficulty of solving the given problem: it is simpler
+to implement an algorithm computing a visibility map for scenes
+consisting of triangles than for scenes with NURBS surfaces. We list
+common restrictions on the scene primitives suitable for visibility
+computations:
+
+
+\begin{itemize}
+\item
+  triangles, convex polygons, concave polygons,
+  
+\item
+  volumetric data,
+
+\item
+  points,
+
+\item
+  general parametric, implicit, or procedural surfaces.
+
+\end{itemize}
+
+Some attributes of scenes objects further increase the complexity of the visibility computation:
+
+\begin{itemize}
+
+\item
+  transparent objects,
+
+\item
+  dynamic objects.
+
+\end{itemize}
+
+The majority of analytic visibility algorithms deals with static
+polygonal scenes without transparency. The polygons are often
+subdivided into triangles for easier manipulation and representation.
+
+\subsection{Accuracy}
+\label{sec:accuracy}
+
+ Visibility algorithms can be classified according to the accuracy of
+the result as:
+
+\begin{itemize}
+\item exact,
+\item conservative,
+\item aggressive,
+\item approximate.
+\end{itemize}
+
+
+ An exact algorithm provides an exact analytic result for the given
+problem (in practice however this result is typically influenced by
+the finite precision of the floating point arithmetics). A
+conservative algorithm overestimates visibility, i.e. it never
+misses any visible object, surface or point. An aggressive algorithm
+always underestimates visibility, i.e. it never reports an invisible
+object, surface or point as visible.  An approximate algorithm
+provides only an approximation of the result, i.e. it can overestimate
+visibility for one input and underestimate visibility for another
+input.
+
+ The classification according to the accuracy is best illustrated on
+computing PVS: an exact algorithm computes an exact PVS. A
+conservative algorithm computes a superset of the exact PVS.  An
+aggressive algorithm determines a subset of the exact PVS.  An
+approximate algorithm computes an approximation to the exact PVS that
+is neither its subset or its superset for all possible inputs.
+
+ A more precise quality measure of algorithms computing PVSs can be
+expressed by the {\em relative overestimation} and the {\em relative
+underestimation} of the PVS with respect to the exact PVS.  We can
+define a quality measure of an algorithm $A$ on input $I$ as a tuple
+$\mbi{Q}^A(I)$:
+
+\begin{eqnarray}
+  \mbi{Q}^A(I) & = & (Q^A_o(I), Q^A_u(I)), \qquad  I \in {\cal D} \\
+  Q^A_o(I) & = & {|S^A(I) \setminus S^{\cal E}(I)| \over |S^{\cal E}(I)|} \\
+  Q^A_u(I) & = & {|S^{\cal E}(I) \setminus S^A(I) | \over |S^{\cal E}(I)|}
+\end{eqnarray}
+
+where $I$ is an input from the input domain ${\cal D}$, $S^A(I)$ is
+the PVS determined by the algorithm $A$ for input $I$ and $S^{\cal
+E}(I)$ is the exact PVS for the given input. $Q^A_o(I)$ expresses the
+{\em relative overestimation} of the PVS, $Q^A_u(I)$ is the {\em
+relative underestimation}.
+
+The expected quality of the algorithm over all possible inputs can be
+given as:
+
+\begin{eqnarray}
+Q^A & = & E[\| \mbi{Q}^A(I) \|] \\
+    & = & \sum_{\forall I \in {\cal D}} f(I).\sqrt{Q^A_o(I)^2 + Q^A_o(I)^2}
+\end{eqnarray}
+
+where f(I) is the probability density function expressing the
+probability of occurrence of input $I$. The quality measure
+$\mbi{Q}^A(I)$ can be used to classify a PVS algorithm into one of the
+four accuracy classes according to Section~\ref{sec:accuracy}:
+
+\begin{enumerate}
+\item exact\\
+  $\forall I \in {\cal D} :Q_o^A(I) = 0 \wedge Q_u^A(I) = 0$
+\item conservative\\
+  $\forall I \in {\cal D} : Q_o^A(I) \geq 0 \wedge Q_u^A(I) = 0$
+\item aggressive \\
+  $\forall I \in {\cal D} : Q_o^A(I) = 0 \wedge Q_u^A(I) \geq 0$
+\item approximate \\
+  $\qquad \exists I_j, I_k \in {\cal D}: Q_o^A(I_j) > 0 \wedge Q_u^A(I_k) > 0$
+\end{enumerate}
+
+
+
+\subsection{Solution space}
+
+\label{sec:solspace}
+
+ The solution space is the domain in which the algorithm determines
+the desired result. Note that the solution space does not need to
+match the domain of the result.
+
+The algorithms can be classified as:
+
+\begin{itemize}
+  \item discrete,
+  \item continuous,
+  \item hybrid.
+\end{itemize}
+
+ A discrete algorithm solves the problem using a discrete solution
+space; the solution is typically an approximation of the result. A
+continuous algorithm works in a continuous domain and often computes an
+analytic solution to the given problem. A hybrid algorithm uses both
+the discrete and the continuous solution space.
+
+ The classification according to the solution space is easily
+demonstrated on visible surface algorithms: The
+z-buffer~\cite{Catmull:1975:CDC} is a common example of a discrete
+algorithm. The Weiler-Atherton algorithm~\cite{Weiler:1977:HSR} is an
+example of a continuous one. A hybrid solution space is used by
+scan-line algorithms that solve the problem in discrete steps
+(scan-lines) and for each step they provide a continuous solution
+(spans).
+
+Further classification reflects the semantics of the solution
+space. According to this criteria we can classify the algorithms as:
+
+\begin{itemize}
+  \item primal space (object space),
+  \item line space,
+    \begin{itemize}
+    \item image space,
+    \item general,
+    \end{itemize}
+  \item hybrid.
+\end{itemize}
+
+ A primal space algorithm solves the problem by studying the
+visibility between objects without a transformation to a different
+solution space. A line space algorithm studies visibility using a
+transformation of the problem to line space. Image space algorithms
+can be seen as an important subclass of line space algorithms for
+solving visibility from a point problems in 3D. These algorithms cover
+all visible surface algorithms and many visibility culling
+algorithms. They solve visibility in a given image plane that
+represents the problem-relevant line set ${\cal L}_R$ --- each ray
+originating at the viewpoint corresponds to a point in the image plane.
+
+ The described classification differs from the sometimes mentioned
+understanding of image space and object space algorithms that
+incorrectly considers all image space algorithms discrete and all
+object space algorithms continuous.
+
+
+%*****************************************************************************
+
+
+
+\section{Summary}
+
+The presented taxonomy classifies visibility problems independently of
+their target application. The classification should help to understand
+the nature of the given problem and it should assist in finding
+relationships between visibility problems and algorithms in different
+application areas.  The algorithms address the following classes of
+visibility problems:
+
+\begin{itemize}
+\item Visibility from a point in 3D $d({\cal L}_R)=2$.
+\item Global visibility in 3D $d({\cal L}_R)=4$.
+\item Visibility from a region in 3D, $d({\cal L}_R)=4$.
+\end{itemize}
+
+ This chapter discussed several important criteria for the
+classification of visibility algorithms. This classification can be
+seen as a finer structuring of the taxonomy of visibility problems. We
+discussed important steps in the design of a visibility algorithm that
+should also assist in understanding the quality of a visibility
+algorithm. According to the classification the visibility algorithms
+described later in the report address algorithms with the following
+properties:
+
+\begin{itemize}
+\item Domain:
+  \begin{itemize}
+  \item viewpoint (online visibility culling),
+  \item global visibility (global visibility sampling)
+  \item polygon or polyhedron (mutual visibility verification)
+  \end{itemize}
+\item Scene restrictions (occluders):
+  \begin{itemize}
+  \item meshes consisting of convex polygons
+  \end{itemize}
+\item Scene restrictions (group objects):
+  \begin{itemize}
+  \item bounding boxes
+  \end{itemize}
+\item Output:
+  \begin{itemize}
+  \item PVS
+  \end{itemize}
+\item Accuracy:
+  \begin{itemize}
+  \item conservative
+  \item exact
+  \item aggresive
+  \end{itemize}
+\item Solution space:
+  \begin{itemize}
+  \item discrete (online visibility culling, global visibility sampling, conservative and approximate algorithm from the mutual visibility verification)
+  \item continuous (exact algorithm from mutual visibility verification)
+  \end{itemize}
+  \item Solution space data structures: viewport (online visibility culling), ray stack (global visibility sampling, conservative and approximate algorithm from the mutual visibility verification), BSP tree (exact algorithm from the mutual visibility verification)
+  \item Use of coherence of visibility:
+    \begin{itemize}
+    \item spatial coherence (all algorithms)
+    \item temporal coherence (online visibility culling)
+    \end{itemize}
+  \item Output sensitivity: expected in practice (all algorithms)
+  \item Acceleration data structure: kD-tree (all algorithms)
+  \item Use of graphics hardware: online visibility culling
+  \end{itemize}
+
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/preprocessing.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/preprocessing.tex	(revision 287)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/preprocessing.tex	(revision 287)
@@ -0,0 +1,173 @@
+\chapter{Visibility Preprocessing}
+
+
+\section{Introduction}
+
+
+\section{Related Work}
+
+
+\section{Overview of Visibility Preprocessor}
+
+The proposed visibility preprocessing framework consists of two major
+steps.
+\begin{itemize}
+\item The first step is an aggresive visibility sampling which gives
+initial estimate about global visibility in the scene. The sampling
+itself involves several strategies which will be described in
+section~\ref{sec:sampling}. The imporant property of the aggresive
+sampling step is that it provides a fast progressive solution to
+global visibility and thus it can be easily integrated into the
+game development cycle.
+
+\item The second step is visibility verification. This step turns the
+previous aggresive visibility solution into either exact, conservative
+or error bound aggresive solution. The choice of the particular
+verifier is left on the user in order to select the best for a
+particular scene, application context and time constrains. For
+example, in scenes like a forest an error bound aggresive visibility
+can be the best compromise between the resulting size of the PVS (and
+framerate) and the visual quality. The exact or conservative algorithm
+can however be chosen for urban scenes where of even small objects can
+be more distructing for the user.
+\end{itemize}
+
+
+\section{Aggresive Global Visibility Sampling}
+
+In traditional visibility preprocessing the view space is
+subdivided into view cells and for each view cell the set of visible
+objects --- potentially visible set (PVS) is computed. This framewoirk
+has bee used for conservative, aggresive and exact algorithms.
+
+We propose a different strategy which has several advantages for
+sampling based aggresive visibility preprocessing. The stategy is
+based on the following fundamental ideas:
+\begin{itemize}
+\item Replace the roles of view cells and objects
+\item Compute progressive global visibility instead of sequential from-region visibility
+\end{itemize}
+
+Both of these points are addressed below in more detail.
+
+\subsection{From-object based visibility}
+
+Our framework is based on the idea of sampling visibility by casting
+casting rays through the scene and collecting their contributions. A
+visibility sample is computed by casting a ray from an object towards
+the view cells and computing the nearest intersection with the scene
+objects. All view cells pierced by the ray segment can see the object and
+thus the object can be added to their PVS. If the ray is terminated at
+another scene object the PVS of the pierced view cells can also be
+extended by this terminating object. Thus a single ray can make a
+number of contributions to the progressively computed PVSs. A ray
+sample piercing $n$ view cells which is bound by two distinct objects
+contributes by at most $2*n$ entries to the current PVSs. Appart from
+this performance benefit there is also a benefit in terms of the
+sampling density: Assuming that the view cells are usually much larger
+than the objects (which is typically the case) starting the sampling
+deterministically from the objects increases the probability of small
+objects being captured in the PVS.
+
+At this phase of the computation we not only start the samples from
+the objects, but we also store the PVS information centered at the
+objects. Instead of storing a PVSs consting of objects visible from
+view cells, every object maintains a PVS consisting of potentially
+visible view cells. While these representations contain exactly the
+same information as we shall see later the object centered PVS is
+better suited for the importance sampling phase as well as the
+visibility verification phase.
+
+
+\subsection{Basic Randomized Sampling}
+
+
+The first phase of the sampling works as follows: At every pass of the
+algorithm visits scene objects sequentially. For every scene object we
+randomly choose a point on its surface. Then a ray is cast from the
+selected point according to the randomly chosen direction. We use a
+uniform distribution of the ray directions with respect to the
+halfspace given by the surface normal. Using this strategy the samples
+at deterministicaly placed at every object, with a randomization of
+the location on the object surface. The uniformly distributed
+direction is a simple and fast strategy to gain initial visibility
+information.
+
+
+The described algorithm accounts for the irregular distribution of the
+objects: more samples are placed at locations containing more
+objects. Additionally every object is sampled many times depending on
+the number of passes in which this sampling strategy is applied. This
+increases the chance of even a small object being captured in the PVS
+of the view cells from which it is visible.
+
+
+\subsection{Accounting for View Cell Distribution}
+
+The first modification to the basic algorithm accounts for
+irregular distribution of the view cells. Such a case in common for
+example in urban scenes where the view cells are mostly distributed in
+a horizontal direction and more view cells are placed at denser parts
+of the city. The modification involves replacing the uniformly
+distributed ray direction by direction distribution according to the
+local view cell density. We select a random viecell which lies at the
+halfpace given by the surface normal at the chosen point. We pick a
+random point inside the view cell and cast a ray towards this point.
+
+
+\subsection{Accounting for Visibility Events}
+
+
+\subsection{View Cell Representation}
+
+In order to efficiently use view cells with our sampling method, we require a view cell representation which is
+
+\begin{itemize}
+\item optimized for view cell - ray intersection.
+\item flexible, i.e., it can represent arbitrary geometry.
+\item naturally suited for an hierarchical approach. %(i.e., there is a root view cell containing all others)
+\end{itemize}
+
+We meet these requirements by using a view cell BSP tree, where the
+BSP tree leafs are associated with the view cells.  Using the BSP tree, we
+are able to find the initial view cells with only a few view ray-plane
+intersections.  The hierarchical structure of the BSP tree can be
+exploited as hierarchy of view cells. If neccessary, the BSP  approach
+makes it very easy to further subdivide a view cell.
+Currently there are two approaches to generate the initial BSP view cell tree.
+
+\begin{itemize}
+\item We use a number of dedicated input view cells. As input view
+cell any closed mesh can be applied. The only requirement is that the
+view cells do not overlap. We insert one view cell after the other
+into the tree. The polygons of a view cell are filtered down the tree,
+guiding the insertion process. Once we reach a leaf and there are no
+more polygons left, we terminate the tree subdivision. If we are on
+the inside of the last split plane (i.e., the leaf is representing the
+inside of the view cell), we associate the leaf with the view cell
+(i.e., add a pointer to the view cell). Hence a number of leafes can
+be associated with the same input view cell.
+\item We apply the BSP tree subdivision to the scene geometry. When
+the subdivision terminates, the leaf nodes also represent the view
+cells.
+\end{itemize}
+
+
+\section{Visibility Verification}
+
+
+\subsection{Exact Verifier}
+
+The exact verifier computes exact mutual visibility between two
+polyhedrons in the scene. This is computed by testing visibility
+between all pairs of potentially polygons of these polyhedrons.
+
+
+
+\subsection{Conservative Verifier}
+
+
+\subsection{Error Bound Verifier}
+
+
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/analysis.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/analysis.tex	(revision 283)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/analysis.tex	(revision 283)
@@ -0,0 +1,1034 @@
+\chapter{Analysis of Visibility in Polygonal Scenes}
+
+\label{chap:analysis}
+
+This chapter provides analysis of the visibility in polygonal scenes,
+which are the input for all developed algorithms. The visibility analysis
+uncoveres the complexity of the from-region and global visibility
+problems and thus it especially important for a good design of the
+global visibility preprocessor. To better undestand the visibility
+relationships in primal space we use mapping to line space, where the
+visibility interactions can be observed easily by interactions of sets
+of points. Additionally for the sake of clarity, we first analyze
+visibility in 2D and then extend the analysis to 3D polygonal scenes. Visibility in 3D is described using \plucker 
+
+\section{Analysis of visibility in 2D}
+
+\label{LINE_SPACE}
+
+The proposed visibility algorithm uses a mapping of oriented 2D lines to
+points in 2D oriented projective space --- {\em line space}. Such a
+mapping allows to handle sets of lines much easier than in the primal
+space~\cite{pv-vc-93}.
+
+ We use a 2D projection of Pl\"ucker
+coordinates~\cite{Stolfi:1991:OPG} to parametrize lines in the plane.
+This mapping corresponds to an ``oriented form'' of the duality
+between points and lines in 2D.  Let $l$ be an oriented line in
+${\mathcal R}^2$ and let $u=(u_x, u_y)$ and $v=(v_x, v_y)$ be two
+distinct points lying on $l$. Line $l$ oriented from $u$ to $v$ can be
+described by the following matrix:
+
+$$
+M_l=\left(
+\begin{array}{cccc}
+u_x & u_y & 1 \\
+v_x & v_y & 1  
+\end{array}
+\right)
+$$
+
+Pl\"ucker coordinates $l^*$ of $l$ are minors of $M_l$:
+
+$$
+l^* = (l^*_x, l^*_y, l^*_z) = (u_y - v_y, v_x - u_x, u_x v_y - u_y  v_x ).
+$$
+
+$l^*$ can be interpreted as homogeneous coordinates of a point in 2D
+{\em oriented projective space} ${\cal P}^2$. Two oriented lines are
+equal if and only if their Pl\"ucker coordinates differ only by a
+positive scale factor. $l^*$ also corresponds to coefficients of the
+implicit equation of a line: $l'$ expressed as $l': ax + by + c= 0$
+induces two oriented lines $l^*_1$, $l^*_2$, with Pl\"ucker
+coordinates $l^*_1 = (a, b, c)$ and $l^*_2 = -(a,b,c)$.  The \plucker
+coordinates of 2D lines defined in this chapter are a simplified form
+of the \plucker coordinates for 3D lines, which will be discussed
+below in this chapter: \plucker coordinates of a 2D line correspond
+to the \plucker coordinates of a 3D line embedded in the $z = 0$ plane
+after removal of redundant coordinates (equal to 0) and permutation of
+the remaining ones (including some sign changes).
+
+
+ Homogeneous coordinates are often normalized, e.g. $l^*_N = (a/b, 1,
+c/b)$. The normalization introduces a singularity --- in our example
+vertical lines map to points at infinity. To avoid singularities we
+treat ${\cal P}^2$ as 3D linear space and call it {\em line space}
+denoted ${\mathcal L}$. Consequently, $l^*$ represents a halfline in
+${\mathcal L}$. All points on halfline $l^*$ represent the same
+oriented line $l$.
+
+ To sum up: an oriented line in 2D is mapped to a halfline beginning
+at the origin in 3D. An example of the concept is depicted in
+Figures~\ref{lines1}-(a) and ~\ref{lines1}-(b). Further in this
+chapter we will mostly use ``projected'' 2D illustrations of line
+space (such as in Figure~\ref{lines1}-(c)). We will still talk about
+planes and halflines, but they will be depicted as lines and points,
+respectively, for the sake of clarity of the presentation.
+
+
+\subsection{Lines passing through a point}
+
+ A {\em pencil of oriented lines} passing through a point $p = (p_x,
+p_y)  \in {\mathcal R}^2$ maps to an oriented plane $p^*$ in line
+space that is expressed as:
+$$
+p^* = \{(x,y,z) | (x,y,z) \in {\mathcal L}, p_x x + p_y y + z = 0\}.
+$$
+
+This plane subdivides ${\mathcal L}$ in two open halfspaces $p^*_+$
+and $p^*_-$. Points in $p^*_-$ correspond to oriented lines passing
+clockwise around $p$ (see Figure~\ref{lines1}).  Points in $p^*_+$
+correspond to oriented lines passing counterclockwise around $p$
+(these relations depend on the orientation of the primal space). We
+denote $-p^*$ an oriented plane opposite to $p^*$ that can be
+expressed as:
+$$
+-p^* = \{(x,y,z) | (x,y,z) \in {\mathcal L}, -p_x x - p_y y - z = 0\}.
+$$
+
+
+\begin{figure*}[tb]
+\rule{0pt}{0pt}\hfill
+\includegraphics[width=1.0\textwidth,draft=\DRAFTFIGS]{figs/lines1}
+\hfill\rule{0pt}{0pt}
+\centerline{\small \hspace{0.01\textwidth}{\bf (a)}\hspace{0.3\textwidth} {\bf (b)} \hspace{0.3\textwidth} {\bf (c)}}
+\vspace{-1.5em}
+\caption{
+{\bf (a)} Four oriented lines in primal space.
+{\bf (b)} Mappings of the four lines and point p.
+Lines intersecting p map to plane $p^*$.
+Lines passing clockwise (counterclockwise) around $p$, map to
+$p^*_-$ ($p^*_+$).
+{\bf (c)} The situation after projection to a plane perpendicular to $p^*$.  }
+\label{lines1}
+\end{figure*}
+
+\subsection{Lines passing through a line segment}
+
+ Oriented lines passing through a line segment can be decomposed into
+two sets depending on their orientation.  Consider a supporting line
+$l_S$ of a line segment $S$, that partitions the plane in open
+halfspaces $S^+$ and $S^-$. Denote $a$ and $b$ the two endpoints of
+$S$ and $a^*$ and $b^*$ their mappings to ${\mathcal L}$. Lines that
+intersect $S$ and ``come from'' $S^-$ can be expressed in line space
+as an intersection of halfspaces $a^*_+$ and $b^*_-$.  The opposite
+oriented lines intersecting $S$ are expressed as $a^*_- \cap b^*_+$
+(see Figure~\ref{lines2}-(a,b)).
+
+%\begin{minipage}{\textwidth}
+
+\begin{figure}[htb]
+\rule{0pt}{0pt}\hfill
+\includegraphics[width=0.6\textwidth,draft=\DRAFTFIGS]{figs/lines2}
+\hfill\rule{0pt}{0pt}
+\centerline{\small
+\hspace{0.01\textwidth}{\bf (a)}\hspace{0.2\textwidth} {\bf (b)}
+}
+\vspace{-1.5em}
+\caption{ {\bf (a)} A line segment $S$ and three oriented lines that
+intersect $S$.  {\bf (b)} The situation in line space: the projection of two
+wedges corresponding to lines intersecting $S$. Mappings of supporting
+line $l_S$ of $S$ are two halflines that project to point
+$l_S^*$. Line $k$ intersects point $b$ and therefore maps to plane
+$b^*$. Lines $m$ and $n$ map to the wedge corresponding to their
+orientation.  }
+\label{lines2}
+\end{figure}
+
+
+
+
+\subsection{Lines passing through two line segments}
+
+\label{sec:blocker_polygon}
+
+Consider two disjoint line segments such as those depicted in
+Figure~\ref{lines3}-(a). The set of lines passing through the two line
+segments can be described as an intersection of four halfspaces in
+line space. The four halfspaces correspond to mappings of endpoints of
+the two line segments.  Since the halfspaces pass through the origin
+of ${\mathcal L}$, their intersection is a pyramid with the apex at
+the origin. The boundary halflines of the pyramid correspond to
+mappings of the four {\em extremal lines} induced by the two
+segments. Denote ${\mathcal P}(S, O)$ a line space pyramid
+corresponding to oriented lines intersecting line segments $S$ and $O$
+in this order.  We represent the pyramid by a {\em blocker polygon}
+$B(S, O)$ (see Figure~\ref{lines3}-(b)). Since $B(S, O)$ only
+represents the pyramid ${\mathcal P}(S, O)$, it need not be a planar
+polygon, i.e. its vertices may lay anywhere on the boundary halflines
+of ${\mathcal P}(S, O)$.  We normalize the vertex coordinates: they
+correspond to an intersection of the boundary halfline of ${\mathcal
+P}(S, O)$ and the unit sphere centered at the origin of ${\mathcal L}$.
+
+\begin{figure}[htb]
+\hfill\rule{0pt}{0pt}
+\includegraphics[width=0.7\textwidth,draft=\DRAFTFIGS]{figs/lines3}
+\hfill\rule{0pt}{0pt}
+\centerline{\small
+\hspace{0.01\textwidth}{\bf (a)}\hspace{0.2\textwidth} {\bf (b)}
+}
+\vspace{-1.5em}
+\caption{ {\bf (a)} Two line segments and corresponding four extremal lines
+oriented from $S$ to $O$. Separating lines $ad$ and $bc$ bound region
+of partial visibility of $S$ behind $O$ (penumbra). Supporting lines
+$ac$ and $bd$ bound region where $S$ is invisible (umbra). {\bf (b)}
+Blocker polygon $B(S,O)$ representing pyramid ${\mathcal
+P}(S,O)$.
+}
+\label{lines3}
+\end{figure}
+
+
+In Figure~\ref{lines4}-(a), the supporting line of $cd$ intersects $ab$
+at point $x$.  The set of rays passing through $ab$ and $cd$ can be
+decomposed to rays passing through $ax$ and $cd$, and through $xb$
+and $cd$. Rays through $ax$ and $cd$ map to a pyramid that is
+described by intersection of only three halfspaces induced by mappings
+of $a$, $x$ and $d$. Rays through $xb$ and $cd$ can be
+described similarly. The configuration in line space is depicted in
+Figure~\ref{lines4}-(b).
+
+\begin{figure}[htb]
+\rule{0pt}{0pt}\hfill
+\includegraphics[width=0.7\textwidth,draft=\DRAFTFIGS]{figs/lines4}
+\hfill\rule{0pt}{0pt}
+\centerline{\small
+\hspace{0.01\textwidth}{\bf (a)}\hspace{0.2\textwidth} {\bf (b)}
+}
+\vspace{-1.5em}
+\caption{ {\bf (a)} Degenerate configuration of line segments: the supporting
+line of $cd$ intersects $ab$ at point $x$. There are five extremal
+lines. Note, that there is no umbra region. {\bf (b)} In line space the
+configuration yields two pyramids sharing a boundary that is a
+mapping of the oriented line $cd$. 
+}
+\label{lines4}
+\end{figure}
+
+\subsection{Lines passing through a set of line segments}
+
+ Consider a set of $n+1$ line segments. We call one line segment the
+{\em source} (denoted by $S$) and the other $n$ segments we call
+occluders (denoted by $O_k$, $1 \leq k \leq n$).  Further in the
+chapter we will use the term {\em ray} as a representative of an
+oriented line that is oriented from the source ``towards'' the
+occluders.
+
+Assume that we can process all occluders in a strict front-to-back
+order with respect to the given source. We have already processed $k$
+occluders and we continue by processing $O_{k+1}$.  $O_{k+1}$ can be
+visible through rays that correspond to the pyramid ${\mathcal P}(S,
+O_{k+1})$. Nevertheless some of these rays can be blocked by 
+combination of already processed occluders $O_x$ ($1\leq x \leq k$).
+To determine if $O_{k+1}$ is visible we subtract all ${\mathcal
+P}(S,O_x)$ from ${\mathcal P}(S,O_{k+1})$:
+
+$$
+{\mathcal V}(S,O_{k+1}) = {\mathcal P}(S,O_{k+1})\ - \bigcup_{1 \leq x \leq k} {\mathcal P}(S,O_x)
+$$
+
+${\mathcal V}(S, O_{k+1})$ is a set pyramids representing rays through
+which $O_{k+1}$ is visible from $S$.  In turn, all rays corresponding
+to ${\mathcal V}(S,O_{k+1})$ are blocked behind $O_{k+1}$.  If
+${\mathcal V}(S, O_{k+1})$ is an empty set, occluder $O_{k+1}$ is
+invisible. This suggest incremental construction of an arrangement of
+pyramids ${\mathcal A}_k$ that corresponds to rays blocked by the
+$k$ processed occluders.  We determine ${\mathcal V}(S,O_{k+1})$ and
+${\mathcal A}_{k+1}$ (${\mathcal A}_0$ is empty):
+
+$$
+{\mathcal V}(S,O_{k+1}) = {\mathcal P}(S,O_{k+1}) \ - \ {\mathcal A}_k,
+$$
+$$
+{\mathcal A}_{k+1} = {\mathcal A}_k \cup {\mathcal P}(S,O_{k+1}) =
+{\mathcal A}_k \ \cup \ {\mathcal V}(S,O_{k+1}).
+$$
+
+ Figures~\ref{lines5}-(a,b) depict a projection of an arrangement
+${\mathcal A}_3$ of a source and three occluders. Note that the
+shorter the source line segment the narrower ($s^*_a$ and $s^*_b$ get
+closer) are the pyramids ${\mathcal P}(S,O_k)$.
+
+
+
+
+\begin{figure}[htb]
+\rule{0pt}{0pt}\hfill
+\includegraphics[width=0.6\textwidth,draft=\DRAFTFIGS]{figs/rot2new}
+\hfill\rule{0pt}{0pt}
+\centerline{\small
+\hspace{0.01\textwidth}{\bf (a)}\hspace{0.2\textwidth} {\bf (b)}
+}
+\vspace{-1.5em}
+\caption{  {\bf (a)} The source line segment $S$ and three
+occluders. $Q_{1-3}$ denote unoccluded funnels.  {\bf (b)} The
+line space subdivision. For each cell, the corresponding occluder-sequence
+is depicted.  Note the cells $Q^*_1$, $Q^*_2$ and $Q^*_3$
+corresponding to unoccluded funnels.}
+\label{lines5}
+\end{figure}
+
+Recall that the pyramid ${\mathcal P}(S,O_k)$ is represented by
+blocker polygon $B(S,O_k)$. The construction of the arrangement
+${\mathcal A}_k$ resembles the from-point visibility problem, more
+specifically the hidden surface removal applied on the blocker
+polygons with respect to the origin of ${\mathcal L}$. The difference
+is that the depth information is irrelevant in line space. The
+priority of blocker polygons is either completely determined by the
+processing order of occluders or their depth must be compared in
+primal space. This observation is supported by the classification of
+visibility problems presented in
+Chapter~\ref{chap:introduction}. Visibility from point in 3D and visibility
+from region in 2D induce a two-dimensional problem-relevant line
+set. This suggests the possibility of mapping one problem to another.
+
+In the next section we show how the arrangement ${\mathcal A}_k$ can
+be maintained consistently and efficiently using the occlusion tree.
+
+
+
+\section{Pl\"ucker coordinates of lines in 3D}
+
+\label{sec:plucker}
+
+
+ We will use a mapping that describes an oriented 3D line as a point
+in a projective 5D space~\cite{Boissonnat98} by means of \plucker
+coordinates~\cite{Teller92phd,p-rsls-97,yn-sbgtc-97,Pu98-DSGIV}. \plucker
+coordinates allow to represent sets of lines using 5D polyhedra and to
+compute visibility by means of polyhedra set operations in 5D.
+
+ A line in 3D can be described by homogeneous coordinates of two
+distinct points on that line. Let $l$ be a line in ${\cal R}^3$ and
+let $\mbi{u}=(u_x, u_y, u_z, u_w)$ and $\mbi{v}=(v_x,v_y,v_z, v_w)$ be
+two distinct points in homogeneous coordinates lying on $l$. A line
+$l$ oriented from $\mbi{u}$ to $\mbi{v}$ can be described by the following matrix:
+
+\begin{equation}
+l=\left(
+\begin{array}{cccc}
+u_{x} & u_{y} & u_{z} & u_{w} \\
+v_{x} & v_{y} & v_{z} & v_{w} 
+\end{array}
+\right)
+\label{coord_cara}
+\end{equation}
+
+Minors of the matrix correspond to components of the {\em \plucker
+coordinates} $\bpi_l$ of line $l$:
+
+\begin{equation}
+\begin{array}{ll}
+\bpi_l & =  (\pi_{l0}, \pi_{l1}, \pi_{l2}, \pi_{l3}, \pi_{l4}, \pi_{l5}) = \\
+       & =  (\xi_{wx},\xi_{wy},\xi_{wz},\xi_{yz},\xi_{zx},\xi_{xy}),
+\end{array}
+\label{eq:plucker_coords_def}
+\end{equation}
+
+where
+
+\begin{equation}
+\xi_{rs} = det\left(
+\begin{array}{cc}
+u_{r} & u_{s} \\
+v_{r} & v_{s}
+\end{array}
+\right).
+\end{equation}
+
+Substituting $u_w=1$ and $v_w=1$ into Eq.~\ref{eq:plucker_coords_def}
+enumerates to:
+
+\begin{equation}
+\begin{array}{l}
+\pi_{l0} = v_x - u_x\\
+\pi_{l1} = v_y - u_y\\
+\pi_{l2} = v_z - u_z\\
+\pi_{l3} = u_{y}v_{z} - u_{z}v_{y}\\
+\pi_{l4} = u_{z}v_{x} - u_{x}v_{z}\\
+\pi_{l5} = u_{x}v_{y} - u_{y}v_{x}
+\end{array}
+\label{eq:plucker_coords}
+\end{equation}
+
+The \plucker coordinates $\bpi_l$ can be seen as homogeneous
+coordinates of a point in a projective five-dimensional space ${\cal
+P}^5$. We call this point a {\em \plucker point} $\ppoint_l$ of
+$l$. For a given oriented line $l$ the \plucker coordinates $\bpi_l$
+are unique and they do not depend on the choice of points $p$ and $q$.
+We will use the notation of a \plucker point $\ppoint_l$ in the case
+when we want to stress that the corresponding \plucker coordinates
+$\bpi_l$ are interpreted as a point in ${\cal P}^5$.
+
+Using the projective duality the \plucker coordinates can be
+interpreted as coefficients of a hyperplane. The {\em \plucker
+coefficients} $\bomega_l$ of line $l$ are given as:
+
+
+\begin{equation}
+\begin{array}{ll}
+\bomega_l
+ & =  (\omega_{l0}, \omega_{l1}, \omega_{l2}, \omega_{l3}, \omega_{l4}, \omega_{l5}) = \\
+ & =  (\xi_{yz},\xi_{zx},\xi_{xy},\xi_{wx},\xi_{wy},\xi_{wz})
+\end{array}
+\label{eq:plucker_coef_def}
+\end{equation}
+
+Substituting Eq.~\ref{eq:plucker_coords} into Eq.~\ref{eq:plucker_coef_def}
+we get:
+
+\begin{equation}
+\begin{array}{l}
+\omega_{l0} = \pi_{l3} \\
+\omega_{l1} = \pi_{l4}\\
+\omega_{l2} = \pi_{l5}\\
+\omega_{l3} = \pi_{l0}\\
+\omega_{l4} = \pi_{l1}\\
+\omega_{l5} = \pi_{l2}
+\end{array}
+\label{eq:plucker_coef}
+\end{equation}
+
+
+ The \plucker coefficients $\bomega_l$ define a {\em \plucker
+ hyperplane} $\pplane_l$. We will use the notation of a \plucker
+ hyperplane $\pplane_l$ when we want to stress that the
+ corresponding \plucker coefficients $\bomega_l$ are interpreted as a
+ hyperplane in ${\cal P}^5$. In terms of \plucker points the \plucker
+ hyperplane can be expressed as:
+ 
+\begin{equation}
+\label{hyperplane}
+\begin{array}{l}
+\pplane_l = \{\ppoint | \ppoint \in {\cal P}^5, \bomega_l \odot \bpi = 0\}
+\end{array}
+\end{equation} 
+
+The \plucker hyperplane induces closed positive and negative halfspaces
+given as:
+
+\begin{equation}
+\begin{array}{l}
+\pplane^{+}_l = \{\ppoint | \ppoint \in {\cal P}^{5}, \bomega_l \odot \bpi \geq 0\} \\
+\pplane^{-}_l = \{\ppoint | \ppoint \in {\cal P}^{5}, \bomega_l \odot \bpi \leq 0\} \\
+\end{array}
+\label{eq:def_halfspaces}
+\end{equation} 
+
+ These definitions of \plucker coordinates and coefficients follow the
+``traditional'' convention~\cite{Pu98-DSGIV}. They differ from the
+definitions used by Teller~\cite{Teller92phd} who used a permuted
+order of the coordinates. The traditional convention provides an
+elegant interpretation of \plucker coordinates that will be discussed
+in Section~\ref{sec:plucker_interp}.
+
+ If $a$ and $b$ are two directed lines, the relation $side(a,b)$ is
+defined as an inner product $\bomega_a \odot \bpi_b$ or permuted inner
+product $\bpi_a \times \bpi_b$:
+
+\begin{equation}
+\begin{array}{ll}
+  side(a,b) & = \bomega_a \odot \bpi_b = \\
+            & = \omega_{a0}\pi_{b0} + \omega_{a1}\pi_{b1} + \omega_{a2}\pi_{b2} +
+  \omega_{a3}\pi_{b3} + \omega_{a4}\pi_{b4} + \omega_{a5}\pi_{b5} = \\
+            & = \bpi_a \times \bpi_b = \\
+            & = \pi_{a0}\pi_{b3} + \pi_{a1}\pi_{b4} + \pi_{a2}\pi_{b5} +
+  \pi_{a3}\pi_{b0} + \pi_{a4}\pi_{b1} + \pi_{a5}\pi_{b2}
+\end{array}
+\label{eq:side}
+\end{equation}
+
+
+ This relation can be interpreted with the right-hand rule
+(Figure~\ref{sidepict}). If the thumb of the right hand is directed
+along line $a$, then:
+
+\begin{itemize}
+\item $side(a,b)> 0$,  if line $b$ is oriented in the direction of the fingers, 
+
+\item $side(a,b) = 0$,  if lines $a$ and $b$ intersect or are parallel,
+
+\item $side(a,b) < 0$, if line $b$ points against the direction of the fingers.
+\end{itemize}
+
+\begin{figure}[htb]
+\centerline{
+  \includegraphics[width=0.8\textwidth,draft=\DRAFTFIGS]{figs/pldual}}
+\caption{The $side(a,b)$, interpreted as the right-hand rule.} 
+\label{sidepict}
+\end{figure}
+
+
+\plucker coordinates have an important property: Although every
+oriented line in ${\cal R}^3$ maps to a point in \plucker coordinates,
+not every tuple of six real numbers corresponds to a real line. Only
+the points $\ppoint \in {\cal P}^5$ \plucker coordinates of which
+satisfy the condition
+
+\begin{equation}
+\bpi \odot \bpi = 0 \qquad \equiv \qquad \pi_{0}\pi_{3} + \pi_{1}\pi_{4} + \pi_{2}\pi_{5} = 0,
+\label{eq:plucker_quadric}
+\end{equation}
+
+represent real lines in ${\cal R}^3$. All other points correspond to
+lines which are said to be {\em imaginary}. The set of points in
+${\cal P}^5$ satisfying Eq.~\ref{eq:plucker_quadric} forms a 4D
+hyperboloid of one sheet called the {\em \plucker quadric}, also known
+as the {\em Klein quadric} or the {\em Grassman manifold}
+(see Figure~\ref{quadric}).
+
+
+\begin{figure}[htb]
+\medskip
+\centerline{
+  \includegraphics[width=0.65\textwidth,draft=\DRAFTFIGS]{figs/reallin}}
+\caption{Real lines map on points on the Pl\"{u}cker quadric.} 
+\label{quadric}
+\end{figure}
+
+The six \plucker coordinates of a real line are not
+independent. Firstly, they describe an oriented projective space,
+secondly, they must satisfy the
+equation~\ref{eq:plucker_quadric}. Thus there are four degrees of
+freedom in the description of a 3D line, which conforms with the
+classification from Chapter~\ref{chap:introduction}.
+
+ \plucker coordinates allow to detect an incidence of two lines by
+computing an inner product of a homogeneous point (mapping of one
+line) with a hyperplane (mapping of the other). Lines $l$ and $l'$
+intersect or are parallel (i.e. meet at infinity) if and only if
+$\ppoint_l \in \pplane_{l'}$, i.e. $side(l, l') = 0$. Note that according
+to ~\ref{eq:plucker_quadric} any line always meets itself.
+
+
+\subsection{Geometric interpretation of \plucker coordinates}
+\label{sec:plucker_interp}
+
+For a better understanding of \plucker coordinates it is natural to
+ask how each individual \plucker coordinate is related to the geometry
+of the corresponding line. The \plucker coordinates of a given line
+can be divided to the {\em directional} and the {\em locational}
+parts. The directional part encodes the direction of the line, the
+locational part encodes the position of the line. Given \plucker
+coordinates $\bpi_l$ of a line $l$ we can write:
+
+\begin{equation}
+\begin{array}{lll}
+\mbi{d}_l & = (\pi_{l0}, \pi_{l1}, \pi_{l2}), \\
+\mbi{l}_l & = (\pi_{l3}, \pi_{l4}, \pi_{l5}), \\
+\end{array}
+\end{equation}
+
+where $\mbi{d}_l$ is the {\em directional vector} of $l$ and $\mbi{l}_l$
+is the {\em locational vector} of $l$. The \plucker coordinates
+$\bpi_l$ and the \plucker coefficients $\bomega_l$ can be expressed as:
+
+
+\begin{equation}
+\begin{array}{ll}
+\bpi_l &= [\mbi{d}_l; \mbi{l}_l],\\
+\bomega_l &= [\mbi{l}_l; \mbi{d}_l].
+\end{array}
+\label{eq:rot3_locdir}
+\end{equation}
+
+
+\subsubsection{Extracting a point}
+
+Often we need to describe a line using a parametric representation by
+means of an {\em anchor point} and a directional vector. Given a line
+$l$ the directional vector $\mbi{d}_l$ is embedded in the \plucker
+coordinates of $l$ (see Eq.~\ref{eq:rot3_locdir}). The anchor point
+$\mbi{a}_l$ can be computed as:
+
+\begin{equation}
+\mbi{a}_l = (a_x, a_y, a_z) = \frac{\mbi{d}_l \times \mbi{l}_l}{\parallel \mbi{d}_l \parallel ^2}.
+\end{equation}
+  
+
+\subsubsection{Computing the distance}
+
+The distance between two lines $l$ and $l'$ can be expressed 
+using their anchor points and the directional vectors:
+
+\begin{equation}
+  dist(l, l') = { | (\mbi{a}_l - \mbi{a}_{l'}) \cdot (\mbi{d}_l \times
+\mbi{d}_{l'}) | \over \parallel \mbi{d}_l \times \mbi{d}_{l'} \parallel }.
+\end{equation}
+
+
+The distance is the length of the projection of the line segment
+$\mbi{a}_l,\mbi{a}_{l'}$ onto the direction $\mbi{d}_l \times
+\mbi{d}_{l'}$.
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Visual events}
+
+\label{sec:events}
+
+This section discusses visual events occurring in polygonal
+scenes~\cite{Gigus90}. We will focus on the boundaries of visual
+events and their relation to \plucker coordinates. The understanding
+of the  visual events helps to comprehend the complexity of the
+from-region visibility in 3D.
+
+ Any scene can be decomposed into regions from which the scene has a
+topologically equivalent view~\cite{Gigus90}. Boundaries of such
+regions correspond to {\em event surfaces}. Crossing an event surface
+causes a {\em visual event}, i.e. a change in the topology of the view
+(visibility map). In polygonal scenes there are three types of event
+surfaces~\cite{Gigus90}:
+
+\begin{itemize}
+  \item {\em vertex-edge} (VE) events involving an edge and a vertex
+  of two distinct polygons.
+  \item {\em edge-edge-edge} (EEE) events involving three edges of
+  three distinct polygons.
+  \item {\em supporting} events corresponding to supporting planes of
+  scene polygons. The supporting event can be seen as a degenerated
+  case of VE or EEE events.
+\end{itemize}
+
+The VE events correspond to planes, the EEE events in general form
+quadratic surfaces. The definitions assume that the scene polygons are
+in general non-degenerate position. In real world scenes the polygons
+or their edges polygons can be variously aligned. In such a case these
+definitions of visibility events form minimal sets of edges and
+vertices defining an event. For example a VE event can involve a
+vertex and several edges of scene polygons (see
+Figure~\ref{fig:degen_event}).
+
+\begin{figure}[htb]
+\centerline{
+  \includegraphics[width=0.45\textwidth,draft=\DRAFTFIGS]{figs/ve_degen}}
+\caption{Degenerated VE event. The VE event is induced by a vertex and
+three edges of scene polygons.} 
+\label{fig:degen_event}
+\end{figure}
+
+
+ The intersections of event surfaces correspond to {\em extremal
+lines}~\cite{Teller92phd}. An extremal line intersects four edges of
+some scene polygons. There are four types of extremal lines:
+vertex-vertex (VV) lines, vertex-edge-edge (VEE) lines,
+edge-vertex-edge (EVE) and quadruple edge (4E) lines. Imagine
+``sliding'' an extremal line (of any type) away from its initial
+position by relaxing exactly one of the four edge constraints
+determining the line. The section of the event surface swept out by
+the sliding line is called the {\em swath}.  A swath is either planar
+if it corresponds to a VE event surface or a regulus if it is embedded
+in an EEE event surface.
+
+Figure~\ref{swaths}-(a) shows an extremal VV line tight on four edges
+A,B,C, and D. Relaxing constraint C yields a VE (planar) swath defined
+by A,B, and D. When the sliding line encounters an obstacle (edge E) it
+terminates at a VV extremal line defined by A,B,D, and
+E. Figure~\ref{swaths}-(b) depicts an extremal 4E line tight on the
+mutually skew edges A,B,C, and D. Relaxing constraint A produces an EEE
+event surface that is a regulus intersecting B,C, and D. When the
+sliding line encounters edge E the swath terminates at an VEE extremal
+line.
+
+\begin{figure}[htb]
+\centerline{
+  \includegraphics[width=0.75\textwidth,draft=\DRAFTFIGS]{figs/swaths}}
+\centerline{\small
+{\bf (a)}\hspace{0.3\textwidth} {\bf (b)}
+\hspace{0.2\textwidth}}
+\caption{Swaths of event surfaces. (a) VE swath. (b) EEE swath. }
+\label{swaths}
+\end{figure}
+
+
+\subsection{Visual events and \plucker coordinates}
+
+\plucker coordinates allow an elegant description of event surfaces.
+An event surface can be expressed as an intersection of three \plucker
+hyperplanes, and thus avoiding explicit treatment of quadratic
+surfaces. The non-linear EEE surfaces correspond to curves embedded in
+the intersection of the \plucker hyperplanes.
+
+Let ${\cal H}$ be an arrangement~\cite{dcg-handbook} of hyperplanes in
+${\cal P}^5$ that correspond to \plucker coefficients of edges of the
+scene polygons. The intersection of the arrangement ${\cal H}$ and the
+\plucker quadric yields all visual
+events~\cite{Teller92phd,p-rsls-97,Pu98-DSGIV}.
+
+An extremal line $l$ intersects four generator edges. Consequently,
+the corresponding \plucker point $\ppoint_l$ lies on four \plucker
+hyperplanes.  In 5D the four hyperplanes define an edge of the
+arrangement ${\cal H}$. Thus, we can find all extremal lines of a
+given set of polygons by examining the edges of ${\cal H}$ for
+intersections with the \plucker quadric~\cite{Pu98-DSGIV}.
+
+
+Consider the situation depicted in Figure~\ref{swaths}. In line space
+the event surfaces correspond to curves embedded in the \plucker
+quadric. In general these curves are conics defined by an intersection
+of the 2D-faces of ${\cal H}$ with the \plucker quadric (see
+Figure~\ref{5Dswaths}).
+
+\begin{figure}[htb]
+\centerline{
+  \includegraphics[width=0.6\textwidth,draft=\DRAFTFIGS]{figs/ipswaths}}
+\caption{3D swaths correspond to conics on the Pl\"ucker quadric.} 
+\label{5Dswaths}
+\end{figure}
+
+
+
+\section{Lines intersecting a polygon}
+
+\label{sec:rot3d_singlepoly}
+
+ \plucker coordinates provide a tool to map lines from primal space to
+points in line space. This mapping allows to perform operations of
+sets of lines using set theoretical operations on the corresponding
+sets of points. In polygonal scenes the {\em elementary set of lines}
+is formed by lines intersecting a given polygon.
+
+
+ Assume that a convex polygon $P$ is defined by edges $e_i, 0\leq i <
+n$ that are oriented counterclockwise. The set of lines ${\cal L}_P$
+intersecting the polygon that are oriented in the direction of the
+polygon's normal satisfies:
+
+
+\begin{equation}
+{\cal L}_P = \{ l |  l \in (R^3, R^3), side(\bpi_l, \bpi_{e_i}) \leq 0, \forall i \in \langle 0,n) \},
+\label{eq:halfspaces}
+\end{equation}
+
+where $\bpi_l$ are \plucker coordinates of line $l$ and $\bpi_{e_i}$ are
+\plucker coordinates of $i$-th edge of the polygon. Substituting the
+Eq.~\ref{eq:side} and rewriting the equation in terms of a set of
+\plucker points we get:
+
+\begin{equation}
+\begin{array}{ll}
+{\cal F}_P & = \{ \ppoint | \ppoint \in {\cal P}^5, \bpi \times \bpi_{e_i} \leq 0, \forall i \in \langle 0,n) \} = \\
+           & = \{ \ppoint | \ppoint \in {\cal P}^5, \bpi \odot \bomega_{e_i} \leq 0, \forall i \in \langle 0,n) \},
+\end{array}
+\label{eq:feasible}
+\end{equation}
+
+where ${\cal F}_P$ is a set of {\em feasible \plucker points} for
+polygon $P$. Substituting Eq.~\ref{eq:def_halfspaces}
+into~\ref{eq:feasible} we obtain:
+
+\begin{equation}
+\begin{array}{ll}
+{\cal F}_P & = \{ \ppoint | \ppoint \in {\cal P}^5,  \bpi \in \pplane^-_{e_i}, \forall i \in \langle 0,n) \}
+\end{array}
+\label{eq:intersection}
+\end{equation}
+
+Thus the set of feasible \plucker points is defined by an intersection
+of halfspaces defined by the \plucker hyperplanes corresponding to edges of the
+polygon. The set of {\em stabbers} ${\cal S}_P$ is then defined as an
+intersection of ${\cal F}_P$ with the \plucker quadric:
+
+\begin{equation}
+{\cal S}_P = \{ \ppoint | \ppoint \in {\cal F}_P, \bpi \odot \bpi  = 0 \}.
+\end{equation}
+
+The stabbers are \plucker points corresponding to the real lines
+intersecting the polygon that are oriented in the direction of the
+normal. Similarly we can define the sets of {\em reverse feasible
+\plucker points} ${\cal F}^-_P$ and {\em reverse stabbers} ${\cal
+S}^-_P$ that correspond to opposite oriented lines intersecting the
+polygon:
+
+\begin{equation}
+\begin{array}{ll}
+{\cal F}^-_P  & = \{ \ppoint | \ppoint \in {\cal P}^5, \ppoint \in \pplane^+_{e_i}, \forall i \in \langle 0,n) \} \\
+{\cal S}^-_P  & = \{ \ppoint | \ppoint \in {\cal F}^-_P, \bpi \odot \bpi  = 0 \}.
+\end{array}
+\end{equation}
+
+
+
+
+\section{Lines between two polygons}
+\label{sec:rot3d_twopoly}
+
+ The above presented definitions of elementary line sets  allow to
+handle visibility computations by means of set operations on the sets
+of feasible \plucker points.  Visibility between two polygons $P_j$
+and $P_k$ can be determined by constructing an intersection of
+feasible sets of the two polygons ${\cal F}_{P_j}$ and ${\cal
+F}_{P_k}$ and subtracting all feasible sets of polygons lying between
+$P_j$ and $P_k$. To obtain the set of unoccluded stabbers we intersect
+the resulting feasible set with the \plucker quadric.
+
+Further in this chapter we restrict our discussion to visibility from
+a given {\em source polygon} $P_S$. Given any {\em occluder polygon}
+$P_j$ we first describe lines intersecting both $P_S$ and $P_j$. Lines
+between $P_S$ and  $P_j$ can be described by an intersection of their
+feasible line sets:
+
+\begin{equation}
+{\cal F}_{P_SP_j} = {\cal F}_{P_S} \cap {\cal F}_{P_j}
+\end{equation}
+
+and thus
+
+\begin{equation}
+{\cal S}_{P_SP_j} = {\cal S}_{P_S} \cap {\cal S}_{P_j}. 
+\end{equation}
+
+ The feasible \plucker points are defined by an intersection of
+halfspaces corresponding to edges of $P_S$ and $P_j$. These halfspaces
+define a {\em blocker polyhedron} $B_{P_SP_j}$ that is described in
+the next section.
+
+
+\subsubsection{Blocker polyhedron}
+
+ The blocker polyhedron describes lines intersecting the source
+ polygon and the given occluder.  The blocker polyhedron can be seen
+ as an extension of the blocker polygon discussed above for the from-region
+ visibility in 3D scenes. The blocker polyhedron is a 5D polyhedron in
+ a 5D projective space.  To avoid singularities in the projection from
+ ${\cal P}^5$ to ${\cal R}^5$ the polyhedron can be embedded in ${\cal
+ R}^6$ similarly to the embedding of blocker polygon in ${\cal R}^3$
+ (see Section~\ref{sec:blocker_polygon}). Then the polyhedron actually
+ represents a 6D pyramid with an apex at the origin of ${\cal R}^6$.
+
+
+\subsubsection{Cap planes}
+
+The blocker polyhedron is defined by an intersection of halfspaces
+defined by \plucker planes that are mappings of edges of the source
+polygon and the occluder. As stated above the blocker polyhedron
+represents the set of feasible \plucker points ${\cal F}_{P_SP_j}$
+including points not intersecting the \plucker quadric that correspond
+to imaginary lines. We bound the polyhedron by {\em cap planes}
+aligned with the \plucker quadric so that the resulting polyhedron is
+a tighter representation of the stabbers ${\cal S}_{P_SP_j}$. We need
+to ensure that the resulting polyhedron fully contains the stabbers
+${\cal S}_{P_SP_j}$, i.e. contains the cross-section of the \plucker
+quadric and ${\cal F}_{P_SP_j}$.
+
+The cap planes provide the following benefits:
+
+\begin{itemize}
+\item The computation is localized to the proximity of the \plucker
+quadric. This reduces the combinatorial complexity of data structure
+representing an arrangement of the blocker polyhedra.
+
+\item The blocker polyhedron is always bounded. Although the set of
+  lines between two convex polygons is bounded, the set of feasible
+  \plucker points can be unbounded at the ``direction'' of imaginary
+  lines. Adding the cap planes we make sure that the polyhedron is
+  bounded, which allows its easier treatment. By using the cap planes
+  we avoid the handling of very oblong, almost unbounded polyhedra,
+  which improves numerical stability of a floating point
+  implementation of the algorithm.
+\end{itemize}
+
+
+ We used two cap planes to bound the polyhedron, one for each side of
+the \plucker quadric (a side is given by the sign of $\bpi \odot
+\bpi$). The cap planes are computed as tangents to the \plucker
+quadric at the center of the set of stabbers ${\cal S}_{P_SP_j}$. The
+planes are translated each at the opposite direction making sure that
+they include the whole set ${\cal S}_{P_SP_j}$.
+
+
+
+\subsection{Intersection with the \plucker quadric}
+\label{sec:stabbers}
+
+Given a blocker polyhedron representing the set of feasible lines
+${\cal F}_{P_SP_j}$ we can compute an intersection of the edges of the
+polyhedron with the \plucker quadric to determine the set of extremal
+lines bounding the set of stabbers ${\cal S}_{P_SP_j}$. An
+intersection of an edge of the blocker polyhedron with the \plucker
+quadric results in at most two {\em extremal \plucker points} that
+correspond extremal lines\footnote{Neglecting the case that the whole
+edge is embedded in the \plucker quadric, which results in infinite
+number of extremal lines.}. Given an edge of the blocker polyhedron
+the intersection with the \plucker quadric is computed by solving the
+quadratic equation (Eq.~\ref{eq:plucker_quadric}). A robust algorithm
+for computing this intersection was developed by
+Teller~\cite{TH83}.
+
+
+Intersecting all edges of the blocker polyhedron with the \plucker
+quadric yields all extremal lines of ${\cal
+S}_{P_SP_j}$~\cite{Teller:1992:CAA,Pu98-DSGIV}. See
+Figure~\ref{fig:rot3_visrays} for an example of extremal lines
+computed for the given source polygon and a set of three occluders.
+
+
+\begin{figure}[htb]
+\centerline{
+  \includegraphics[width=0.5\textwidth,draft=\DRAFTIMAGES]{images/rot3_visrays}}
+\caption{Extremal lines for the given source polygon (yellow) and three occluders.}
+\label{fig:rot3_visrays}
+\end{figure}
+
+ The intersection of the 2D faces of the blocker polyhedron with the
+\plucker quadric yields swaths of event surfaces of the set of
+stabbers ${\cal S}_{P_SP_j}$~\cite{Teller92phd}. In general the
+intersection results in 1D conics.
+
+ We can avoid the explicit treatment of conics in 5D by computing the
+local topology of the edges of the blocker polyhedron and constructing
+the swaths in primal space between the topologically connected
+extremal lines~\cite{Teller92phd}. The local topology of an extremal
+\plucker point is given by connections with extremal \plucker points
+embedded in the same 2D face of the blocker polyhedron.  A 2D face of
+the blocker polyhedron is given by three \plucker hyperplanes. Thus
+the pairs of extremal \plucker points defined by the subset of the
+same three \plucker hyperplanes define a swath.
+
+
+
+% For solution of some from-region visibility problems (e.g. PVS
+% computation, region-to-region visibility) the event swaths need not be
+% reconstructed. For example the visibility culling algorithm that will
+% be discussed in Section~\ref{sec:rot3pvs} only computes extremal
+% \plucker points and uses them to test an existence of a set of
+% stabbers of a given size.
+
+
+\subsection{Size of the set of lines}
+
+\label{sec:size_measure}
+
+Computing a size measure of a given set of lines is useful for most
+visibility algorithms. The computed size measure can be used to drive
+the subdivision of the given set of lines or to bound the maximal
+error of the algorithm. An analytic algorithm can use the computed
+size measure for thresholding by a given $\epsilon$-size to discard
+very small line sets.  A discrete algorithm can use the size measure
+to determine the required density of sampling.
+
+The size of a set of lines for the from-point visibility can be
+formulated easily: the size is given by the area of the intersection
+of the line set with a plane. This corresponds to quantifying
+visibility of an object according to its projected area. Such a size
+is determined in the solution space (viewport). Alternatively we could
+use a ``viewport independent measure'' given by a solid angle formed by
+the visible part of an object. The size measure for the from-region
+visibility problems is more complicated for the following reasons:
+
+\begin{itemize}
+\item The domain of the solution space is four-dimensional.
+\item The solution space of the from-region visibility algorithm
+  generally does not correspond to the solution space of the
+  application. For example, a visible surface algorithm using a
+  precomputed PVS works in a 2D domain induced by the given viewport.
+\end{itemize}
+
+
+\subsubsection{General size measure}
+
+A size of a set of lines for the from-region visibility can be
+computed by evaluating a 4D integral. Using \plucker coordinates we
+can compute a volume of the 4D hyper-surface corresponding to the
+given set of lines. The volume however depends on a way of projecting
+the blocker polyhedron from ${\cal P}^5$ to ${\cal R}^5$. This
+projection has a similar role as the selection of the viewport for the
+from-point visibility problem. We can project the blocker polyhedron
+from ${\cal P}^5$ to ${\cal R}^5$ by projecting it to a 5D hyperplane
+defined by certain reference direction, e.g. the ``center-line'' of
+the given set of lines. Pu proposed a different size measure based on
+measuring the {\em angular spread} and the {\em distance} between
+lines~\cite{Pu98-DSGIV}. Both these quantities can be evaluated in
+terms of \plucker coordinates of the set of extremal lines of the
+given line set.
+
+
+\subsubsection{Size measure for the PVS computation}
+
+ It can be difficult to relate the size measures described above to
+the domain of the result of a subsequently applied visibility
+algorithm. We need a simple scheme that fits to the context of the
+target application.  In this section we suggest a size measure
+designed for the PVS computation. When computing a PVS we are
+interested in measuring the size of the set of unoccluded lines
+(stabbers) between the source polygon $P_S$ and a given scene
+polygon. If this size is below an $\epsilon$-threshold, we can
+possibly exclude the polygon from the PVS.  We suggest to use an
+estimate of the minimal angle between the stabbers at a point inside
+$P_S$. The idea is to estimate the minimal projected diameter of a
+polygon visible through the given set of lines from any point inside
+$P_S$. This estimate can be used to bound a maximal error of an image
+synthesized with respect to any viewpoint inside $P_S$ for the case that
+the corresponding set of lines is neglected.
+
+%%  The size measure approximates the minimal spatial angle given by a
+%% cross-section of the given set of lines parallel to the source polygon
+%% $P_S$ and the center of $P_S$.
+
+Given a blocker polyhedron ${\cal F}_{P_SP_j}$  the proposed size
+measure can be evaluated as follows:
+
+\begin{enumerate}
+
+\item
+ Compute the extremal lines of the corresponding set of stabbers ${\cal
+S}_{P_SP_j}$ as described in Section~\ref{sec:stabbers}.
+
+\item For each polygon edge $e_i$ bounding the stabbers
+  determine an extremal line $l_{mi}$ with a maximal distance from the
+  edge.
+  
+\item For each edge $e_i$ compute a shortest line segment $z_i$
+  connecting $e_i$ and $l_{mi}$.  The length of this line segment is
+  then scaled according to its distance from the source polygon,
+  i.e. we compute an angle $\alpha_i$ between the lines connecting the
+  center of the source polygon and the endpoints of $z_i$.
+  
+\item Select a minimal angle $\alpha_m$ of all $\alpha_i$ as the
+estimate of the size of the given line set.
+
+\end{enumerate}
+
+The evaluation of the size measure is depicted in
+Figure~\ref{fig:linesize}.
+
+\begin{figure}[htb]
+\centerline{
+  \includegraphics[width=0.4\textwidth,draft=\DRAFTFIGS]{figs/linesize}}
+\caption{A 2D example of evaluation of the size of a set of lines. The three
+  line segments
+  $z_1$, $z_2$ and $z_3$ maximize the distance of the corresponding
+  occluder edges from the extremal lines. The line segment $z_3$ spans
+  a minimal angle $\alpha_m$ with respect to the center of the source
+  polygon $P_S$.}
+\label{fig:linesize}
+\end{figure}
+
+ The angle $\alpha_m$ can be related to the angular resolution of the
+synthesized image. Given the resolution of the image we can threshold
+``small'' line sets with $\alpha_m$ below the corresponding angular
+threshold to achieve a sub-pixel precision of the rendering algorithm.
+This measure can also be applied to deal with the finite precision of
+the floating point arithmetics by using a small $\epsilon$-threshold
+to handle numerical inaccuracies.
+
+
+\section{Summary}
+
+ In this chapter we discussed the relation of sets of lines in 3D and
+the polyhedra in \plucker coordinates. We proposed a general size
+measure for a set of lines described by a blocker polyhedron and a
+size measure designed for the computation of PVS.
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/online.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/online.tex	(revision 277)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/online.tex	(revision 277)
@@ -0,0 +1,1160 @@
+\chapter{Online Visibility Culling}
+%*****************************************************************************
+\label{chap:online}
+
+\section{Introduction}
+
+ Visibility culling is one of the major acceleration techniques for
+the real-time rendering of complex scenes. The ultimate goal of
+visibility culling techniques is to prevent invisible objects from
+being sent to the rendering pipeline. A standard visibility-culling
+technique is {\em view-frustum culling}, which eliminates objects
+outside of the current view frustum. View-frustum culling is a fast
+and simple technique, but it does not eliminate objects in the view
+frustum that are occluded by other objects. This can lead to significant
+{\em overdraw}, i.e., the same image area gets covered more than
+once. The overdraw causes a waste of computational effort both in the
+pixel and the vertex processing stages of modern graphic hardware.
+%that is, we render each pixel in the image several times. For many complex
+%scenes with high occlusion, the effort wasted on overdraw cannot simply be
+%eliminated by the increasing the raw computational power of the hardware.
+%This problem becomes even more apparent on recent graphics hardware with
+%programmable vertex and pixel shaders: all complex per-vertex or per-pixel
+%computations on object get completely wasted if the object is occluded.
+The elimination of occluded objects is addressed by {\em occlusion
+culling}. In an optimized rendering pipeline, occlusion culling complements
+other rendering acceleration techniques such as levels of detail or
+impostors.
+
+ Occlusion culling can either be applied offline or online.  When
+applied offline as a preprocess, we compute a potentially visible set
+(PVS) for cells of a fixed subdivision of the scene. At runtime, we
+can quickly identify a PVS for the given viewpoint. However, this
+approach suffers from four major problems: (1) the PVS is  valid only
+for the original static scene configuration, (2) for a given
+viewpoint, the corresponding cell-based PVS can be overly
+conservative, (3) computing all PVSs is computationally expensive, and (4)
+an accurate PVS computation is difficult to implement for general
+scenes. Online occlusion culling can solve these problems at the cost
+of applying extra computations at each frame. To make these additional
+computations efficient, most online occlusion culling methods rely on a
+number of assumptions about the scene structure and its occlusion
+characteristics (e.g. presence of large occluders, occluder
+connectivity, occlusion by few closest depth layers).
+
+\begin{figure}%[htb]
+  %\centerline
+  \centering \footnotesize
+  \begin{tabular}{c}
+  \includegraphics[width=0.6\textwidth, draft=\DRAFTFIGS]{images/ogre_terrain} \\
+  %\hline 
+  \includegraphics[width=0.3\textwidth, draft=\DRAFTFIGS]{images/vis_viewfrustum} \hfill \includegraphics[width=0.3\textwidth, draft=\DRAFTFIGS]{images/vis_chc} \\
+  \end{tabular}
+%\label{tab:online_culling_example}
+  \caption{(top) The rendered terrain scene. (bottom) Visualizion of the rendered / culled objects.
+    Using view frustum culling (left image) vs. occlusion queries (right image).
+    The yellow boxes show the actually rendered scene objects. The
+    red boxes depict the view frustum culled hierarchy nodes, the blue boxes depict the
+    occlusion query culled hierarchy nodes.}
+  \label{fig:online_culling_example}
+\end{figure}
+
+Recent graphics hardware natively supports an \emph{occlusion query}
+to detect the visibility of an object against the current contents of
+the z-buffer.  Although the query itself is processed quickly using
+the raw power of the graphics processing unit (GPU), its result is not
+available immediately due to the delay between issuing the query and
+its actual processing in the graphics pipeline. As a result, a naive
+application of occlusion queries can even decrease the overall
+application performance due the associated CPU stalls and GPU
+starvation. In this chapter, we present an algorithm that aims to
+overcome these problems by reducing the number of issued queries and
+eliminating the CPU stalls and GPU starvation. To schedule the
+queries, the algorithm makes use of both the spatial and the temporal
+coherence of visibility. A major strength of our technique is its
+simplicity and versatility: the method can be easily integrated in
+existing real-time rendering packages on architectures supporting the
+underlying occlusion query~\cite{wimmer05:gpugems}.  In
+figure~\ref{fig:online_culling_example}, the same scene (top row) is
+rendered using view frustum culling (visualization in the bottom left
+image) versus online culling using occlusion queries (visualization in
+the bottom right image). It can be seen that with view frustum culling
+only many objects are still rendered.
+%Using spatial and assuming temporal coherence
+
+\section{Related Work}
+
+With the demand for rendering scenes of ever increasing size, there
+have been a number of visibility culling methods developed in the
+last decade.  A comprehensive survey of visibility culling methods
+was presented by Cohen-Or et al.~\cite{Cohen:2002:survey}. Another
+recent survey of Bittner and Wonka~\cite{bittner03:jep} discusses
+visibility culling in a broader context of other visibility problems.
+
+According to the domain of visibility computation, we distinguish
+between {\em from-point} and {\em from-region} visibility algorithms.
+From-region algorithms compute a PVS and are applied offline in a
+preprocessing phase~\cite{Airey90,Teller91a,Leyvand:2003:RSF}.
+From-point algorithms are applied online for each particular
+viewpoint~\cite{Greene93a,Hudson97,EVL-1997-163,bittner98b,Wonka:1999:OSF,Klosowski:2001:ECV}.
+In our further discussion we focus on online occlusion culling methods
+that exploit graphics hardware.
+
+A conceptually important online occlusion culling method is the
+hierarchical z-buffer introduced by Greene et al.~\cite{Greene93a}. It
+organizes the z-buffer as a pyramid, where the standard z-buffer is
+the finest level. At all other levels, each z-value is the farthest in
+the window corresponding to the adjacent finer level. The hierarchical
+z-buffer allows to quickly determine if the geometry in question is
+occluded. To a certain extent this idea is used in the current
+generation of graphics hardware by applying early z-tests of fragments
+in the graphics pipeline (e.g., Hyper-Z technology of ATI or Z-cull of
+NVIDIA). However, the geometry still needs to be sent to the GPU,
+transformed, and coarsely rasterized even if it is later determined
+invisible.
+
+ Zhang~\cite{EVL-1997-163} proposed hierarchical occlusion maps, which
+do not rely on the hardware support for the z-pyramid, but instead
+make use of hardware texturing. The hierarchical occlusion map is
+computed on the GPU by rasterizing and down sampling a given set of
+occluders. The occlusion map is used for overlap tests whereas the
+depths are compared using a coarse depth estimation buffer. Wonka and
+Schmalstieg~\cite{Wonka:1999:OSF} use occluder shadows to compute
+from-point visibility in \m25d scenes with the help of the GPU. This
+method has been further extended to online computation of from-region
+visibility executed on a server~\cite{wonka:01:eg}.
+
+%% In
+%% parallel to rendering, the visibility server calculates visibility for
+%% the neighborhood of the given viewpoint and sends them back to the
+%% display host.
+
+%% A similar method designed by Aila and
+%% Miettinen~\cite{aila:00:msc}. The incremental occlusion maps are
+%% created on the CPU, which takes the CPU computational time but it does
+%% not suffer the problem of slow read-back from the GPU.
+
+%Klosowski:2001:ECV
+
+Bartz et al.~\cite{Bartz98} proposed an OpenGL extension for occlusion
+queries along with a discussion concerning a potential realization in
+hardware. A first hardware implementation of occlusion queries came
+with the VISUALIZE fx graphics hardware~\cite{Scott:1998:OVF}. The
+corresponding OpenGL extension is called \hpot{}. A more recent OpenGL
+extension, \nvoq{}, was introduced by NVIDIA with the GeForce 3 graphics
+card and it is now also available as an official ARB extension.
+
+%Both
+%extensions have been used in several several occlusion methods
+%algorithms~\cite{Meissner01,Hillesland02,Staneker:2004:OCO}.
+%\cite{Meissner01}
+
+ Hillesland et al.~\cite{Hillesland02} have proposed an algorithm
+which employs the \nvoq. They subdivide the scene using a uniform
+grid. Then the cubes are traversed in slabs roughly perpendicular to
+the viewport. The queries are issued for all cubes of a slab at once,
+after the visible geometry of this slab has been rendered. The method
+can also use nested grids: a cell of the grid contains another grid
+that is traversed if the cell is proven visible. This method however
+does not exploit temporal and spatial coherence of visibility and it
+is restricted to regular subdivision data structures. Our new method
+addresses both these problems and provides natural extensions to
+balance the accuracy of visibility classification and the associated
+computational costs.
+
+ Recently, Staneker et al.~\cite{Staneker:2004:OCO} developed a method
+integrating occlusion culling into the OpenSG scene graph
+framework. Their technique uses occupancy maps maintained in software
+to avoid queries on visible scene graph nodes, and temporal coherence
+to reduce the number of occlusion queries. The drawback of the method
+is that it performs the queries in a serial fashion and thus it
+suffers from the CPU stalls and GPU starvation.
+
+%% The methods proposed in this chapter can be used to make use of temporal
+%% and spatial coherence in the scope of existing visibility algorithms,
+%% that utilise a spatial hierarchy. Examples of these are algorithms
+%% based on hierarchical occlusion maps~\cite{Zhang97}, coverage
+%% masks~\cite{Greene:1996:HPT}, shadow frusta~\cite{Hudson97}, and
+%% occlusion trees~\cite{bittner98b_long}.
+
+On a theoretical level, our method is related to methods aiming to
+exploit the temporal coherence of visibility. Greene et
+al.~\cite{Greene93a} used the set of visible objects from one frame to
+initialize the z-pyramid in the next frame in order to reduce the
+overdraw of the hierarchical z-buffer. The algorithm of Coorg and
+Teller~\cite{Coorg96b} restricts the hierarchical traversal to nodes
+associated with visual events that were crossed between successive
+viewpoint positions. Another method of Coorg and Teller~\cite{Coorg97}
+exploits temporal coherence by caching occlusion relationships.
+Chrysanthou and Slater have proposed a probabilistic scheme for
+view-frustum culling~\cite{Chrysanthou:97}.
+
+The above mentioned methods for exploiting temporal coherence are
+tightly interwoven with the particular culling algorithm. On the
+contrary, Bittner et al.~\cite{bittner01:jvca} presented a general
+acceleration technique for exploiting spatial and temporal coherence
+in hierarchical visibility algorithms. The central idea, which is also
+vital for the online occlusion culling, is to avoid repeated
+visibility tests of interior nodes of the hierarchy. The problem of
+direct adoption of this method is that it is designed for the use with
+instantaneous CPU based occlusion queries, whereas hardware occlusion
+queries exhibit significant latency. The method presented herein
+efficiently overcomes the problem of latency while keeping the
+benefits of a generality and simplicity of the original hierarchical
+technique. As a result we obtain a simple and efficient occlusion
+culling algorithm utilizing hardware occlusion queries.
+
+
+%In this paper we show how to overcome this problem while
+%keeping the benefits of exploiting.
+
+
+% The rest of the chapter is organized as follows:
+% Section~\ref{sec:hwqueries} discusses hardware supported occlusion
+% queries and a basic application of these queries using a kD-tree.
+% Section~\ref{sec:hoq} presents our new algorithm and
+% Section~\ref{sec:optimizations} describes several additional
+% optimizations. Section~\ref{sec:results} presents results obtained by
+% experimental evaluation of the method and discusses its
+% behavior. Finally Section~\ref{sec:conclusion} concludes the chapter.
+
+
+
+
+\section{Hardware Occlusion Queries}
+\label{sec:hwqueries}
+
+
+Hardware occlusion queries follow a simple pattern: To test visibility
+of an occludee, we send its bounding volume to the GPU. The volume is
+rasterized and its fragments are compared to the current contents of
+the z-buffer. The GPU then returns the number of visible
+fragments. If there is no visible fragment, the occludee is invisible
+and it need not be rendered.
+
+\subsection{Advantages of hardware occlusion queries}
+
+There are several advantages of hardware occlusion queries:
+
+\begin{itemize}
+
+\item {\em Generality of occluders.} We can use the original scene geometry
+as occluders, since the queries use the current contents of the z-buffer.
+
+
+\item {\em Occluder fusion.} The occluders are merged in the z-buffer,
+so the queries automatically account for occluder fusion. Additionally
+this fusion comes for free since we use the intermediate result of the
+rendering itself.
+
+\item {\em Generality of occludees.} We can use complex
+occludees. Anything that can be rasterized quickly is suitable.
+
+\item {\em Exploiting the GPU power.} The queries take full advantage of
+the high fill rates and internal parallelism provided by modern GPUs.
+
+\item {\em Simple use.} Hardware occlusion queries can be easily
+integrated into a rendering algorithm. They provide a powerful tool to
+minimize the implementation effort, especially when compared to
+CPU-based occlusion culling.
+
+
+\end{itemize}
+
+
+
+\subsection{Problems of hardware occlusion queries}
+
+ Currently there are two main hardware supported variants of occlusion
+queries: the HP test (\hpot) and the more recent NV query (\nvoq, now
+also available as \arboq). The most important difference between the
+HP test and the NV query is that multiple NV queries can be
+issued before asking for their results, while only one HP test is
+allowed at a time, which severely limits its possible algorithmic
+usage. Additionally the NV query returns the number of visible pixels
+whereas the HP test returns only a binary visibility
+classification.
+
+%% Issuing multiple independent NV queries is crucial for
+%% the design of algorithms that strive to exploit power of the GPU.
+
+ The main problem of both the HP test and the NV query is the latency
+between issuing the query and the availability of the result. The
+latency occurs due to the delayed processing of the query in a long
+graphics pipeline, the cost of processing the query itself, and the
+cost of transferring the result back to the CPU. The latency causes
+two major problems: CPU stalls and GPU starvation. After issuing the
+query, the CPU waits for its result and does not feed the GPU with new
+data. When the result finally becomes available, the GPU pipeline can
+already be empty. Thus the GPU needs to wait for the CPU to process
+the result of the query and to feed the GPU with new data.
+
+A major challenge when using hardware occlusion queries is to avoid
+the CPU stalls by filling the latency time with other tasks, such as
+rendering visible scene objects or issuing other, independent
+occlusion queries (see Figure~\ref{fig:latency})
+
+
+\begin{figure}[htb]
+  \centerline{
+    \includegraphics[width=0.5\textwidth,draft=\DRAFTFIGS]{figs/latency2}
+    }
+
+  \caption{(top) Illustration of CPU stalls and GPU starvation.
+    Qn, Rn, and Cn denote querying, rendering, and culling of object
+    n, respectively. Note that object 5 is found invisible by Q5 and
+    thus not rendered. (bottom) More efficient query scheduling. The
+    scheduling assumes that objects 4 and 6 will be visible in the
+    current frame and renders them without waiting for the result of
+    the corresponding queries. }
+  \label{fig:latency}
+\end{figure}
+
+
+
+
+
+\subsection{Hierarchical stop-and-wait method}
+\label{sec:basic}
+
+Many rendering algorithms rely on hierarchical structures in order to
+deal with complex scenes.  In the context of occlusion culling, such a
+data structure allows to efficiently cull large scene blocks, and thus
+to exploit spatial coherence of visibility and provide a key to
+achieving output sensitivity.
+
+This section outlines a naive application of occlusion queries in the
+scope of a hierarchical algorithm. We refer to this approach as the
+{\em hierarchical stop-and-wait} method. Our discussion is based on
+kD-trees, which proved to be efficient for point location, ray
+tracing, and visibility
+culling~\cite{MacDonald90,Hudson97,Coorg97,bittner01:jvca}. The
+concept applies to general hierarchical data structures as well, though.
+
+The hierarchical stop-and-wait method proceeds as follows: Once a
+kD-tree node passes view-frustum culling, it is tested for
+occlusion by issuing the occlusion query and waiting for its
+result. If the node is found visible, we continue by recursively
+testing its children in a front-to-back order. If the node is a
+leaf, we render its associated objects.
+
+ The problem with this approach is that we can continue the tree
+traversal only when the result of the last occlusion query becomes
+available. If the result is not available, we have to stall the CPU,
+which causes significant performance penalties. As we document in
+Section~\ref{sec:results}, these penalties together with the overhead
+of the queries themselves can even decrease the overall application
+performance compared to pure view-frustum culling. Our new method aims
+to eliminate this problem by issuing multiple occlusion queries for
+independent scene parts and exploiting temporal coherence of
+visibility classifications.
+
+
+\section{Coherent Hierarchical Culling}
+
+\label{sec:hoq}
+
+ In this section we first present an overview of our new
+algorithm. Then we discuss its steps in more detail.
+
+%and present a
+%generalization of the method to other spatial data structures.
+
+\subsection{Algorithm Overview}
+
+\label{sec:overview}
+
+
+Our method is based on exploiting temporal coherence of visibility
+classification. In particular, it is centered on the following
+three ideas:
+
+\begin{itemize}
+ \item We initiate occlusion queries on nodes of the hierarchy where
+   the traversal terminated in the last frame. Thus we avoid queries
+   on all previously visible interior nodes~\cite{bittner01:jvca}.
+ \item We assume that a previously visible leaf node remains visible
+   and render the associated geometry without waiting for the result
+   of the corresponding occlusion query.
+\item Issued occlusion queries are stored in a query queue until they are known to be carried out by the GPU. This allows
+  interleaving the queries with the rendering of visible geometry.
+\end{itemize}
+
+
+The algorithm performs a traversal of the hierarchy that is
+terminated either at leaf nodes or nodes that are classified as
+invisible. Let us call such nodes the {\em termination nodes}, and
+interior nodes that have been classified visible the {\em opened
+nodes}. We denote sets of termination and opened nodes in the $i$-th
+frame $\mathcal{T}_i$ and $\mathcal{ O}_i$, respectively. In the
+$i$-th frame, we traverse the kD-tree in a front-to-back order, skip
+all nodes of $\mathcal{ O}_{i-1}$ and apply occlusion queries first on
+the termination nodes $\mathcal{ T}_{i-1}$. When reaching a
+termination node, the algorithm proceeds as follows:
+
+\begin{itemize}
+\item For a previously visible node (this must be a leaf), we issue
+the occlusion query and store it in the query queue. Then we
+immediately render the associated geometry without waiting for the
+result of the query.
+ \item For a previously invisible node, we issue the query and store
+ it in the query queue.
+\end{itemize}
+
+\begin{figure}[htb]
+{\footnotesize
+  \input{code/pseudocode2}
+ }
+  \caption{Pseudo-code of coherent hierarchical culling.}
+  \label{fig:pseudocode}
+\end{figure}
+
+When the query queue is not empty, we check if the result of the
+oldest query in the queue is already available. If the query result is
+not available, we continue by recursively processing other nodes of
+the kD-tree as described above. If the query result is available, we
+fetch the result and remove the node from the query queue. If the node
+is visible, we process its children recursively. Otherwise, the whole
+subtree of the node is invisible and thus it is culled.
+
+
+In order to propagate changes in visibility upwards in the hierarchy,
+the visibility classification is \emph{pulled up} according to the
+following rule: An interior node is invisible only if all its children
+have been classified invisible. Otherwise, it remains visible and thus
+opened. The pseudo-code of the complete algorithm is given in
+Figure~\ref{fig:pseudocode}. An example of the behavior of the method
+on a small kD-tree for two subsequent frames is depicted
+Figure~\ref{fig:cut}.
+
+\begin{figure*}[htb]
+  \centerline{
+    \includegraphics[width=0.73\textwidth,draft=\DRAFTFIGS]{figs/cut} }
+  \caption{(left) Visibility classification of a node of the kD-tree and
+    the termination nodes. (right) Visibility classification after the
+    application of the occlusion test and the new set of termination nodes.
+    Nodes on which occlusion queries were applied are depicted with a
+    solid outline. Note the pull-up and pull-down due to visibility changes.}
+  \label{fig:cut}
+\end{figure*}
+
+
+
+The sets of opened nodes and termination nodes need not be maintained
+explicitly. Instead, these sets can be easily identified by
+associating with each node an information about its visibility and an
+id of the last frame when it was visited. The node is an opened node
+if it is an interior visible node that was visited in the last frame
+(line 23 in the pseudocode). Note that in the actual implementation of
+the pull up we can set all visited nodes to invisible by default and
+then pull up any changes from invisible to visible (lines 25 and line
+12 in Figure~\ref{fig:pseudocode}). This modification eliminates
+checking children for invisibility during the pull up.
+
+
+
+%% \begin{figure*}[htb]
+%% \centerline{\includegraphics[width=0.8\textwidth,draft=\DRAFTFIGS]{figs/basic}}
+%% \caption{Illustration of the hierarchy traversal. Initially the algorithm
+%% starts at the root of the hierarchy (left). In the second frame the
+%% opened nodes $\mathcal{ O}_0$ are skipped and the occlusion queries
+%% are first applied on the termination nodes $\mathcal{T}_0$. Visibility changes are propagated upwarsds in the hierarchy and a
+%% new set of termination nodes $\mathcal{ T}_1$ is established.}
+%% \label{fig:basic}
+%% \end{figure*}
+
+
+\subsection{Reduction of the number of queries}
+
+%Skipping the opened nodes and issuing occlusion queries for the
+%termination nodes assists in exploiting two main characteristics of
+%scene visibility:
+
+%Identifying the set of termination nodes assists in finding a subdivision
+
+Our method reduces the number of visibility queries in two ways:
+Firstly, as other hierarchical culling methods we consider only a
+subtree of the whole hierarchy (opened nodes + termination
+nodes). Secondly, by avoiding queries on opened nodes we eliminate
+part of the overhead of identification of this subtree. These
+reductions reflect the following coherence properties of scene
+visibility:
+
+\begin{itemize}
+
+
+\item {\em Spatial coherence.} The invisible termination nodes
+approximate the occluded part of the scene with the smallest number of
+nodes with respect to the given hierarchy, i.e., each invisible
+termination node has a visible parent. This induces an adaptive
+spatial subdivision that reflects spatial coherence of visibility,
+more precisely the coherence of occluded regions. The adaptive nature
+of the subdivision allows to minimize the number of subsequent
+occlusion queries by applying the queries on the largest spatial
+regions that are expected to remain occluded.
+
+%, and visible termination
+%nodes correspond to the smallest unoccluded regions (visible
+%leafs)
+
+\item {\em Temporal coherence.} If visibility remains constant the set
+of termination nodes needs no adaptation. If an occluded node becomes
+visible we recursively process its children (pull-down). If a visible
+node becomes occluded we propagate the change higher in the hierarchy
+(pull-up). A pull-down reflects a spatial growing of visible
+regions. Similarly, a pull-up reflects a spatial growing of occluded
+regions.
+
+
+%The first case corresponds to pull-down of the cut, the latter to pull-up.
+
+\end{itemize}
+
+By avoiding queries on the opened nodes, we can save $1/k$ of the queries
+for a hierarchy with branching factor $k$ (assuming visibility remains
+constant). Thus for the kD-tree, up to half of the queries can be
+saved. The actual savings in the total query time are even larger: the
+higher we are at the hierarchy, the larger boxes we would have to
+check for occlusion. Consequently, the higher is the fill rate that
+would have been required to rasterize the boxes. In particular,
+assuming that the sum of the screen space projected area for nodes at
+each level of the kD-tree is equal and the opened nodes form a
+complete binary subtree of depth $d$, the fill rate is reduced $(d+2)$
+times.
+
+
+
+\subsection{Reduction of CPU stalls and GPU starvation}
+
+\label{sec:latency}
+
+The reduction of CPU stalls and GPU starvation is achieved by
+interleaving occlusion queries with the rendering of visible geometry. The
+immediate rendering of previously visible termination nodes and the
+subsequent issuing of occlusion queries eliminates the requirement of
+waiting for the query result during the processing of the initial
+depth layers containing previously visible nodes. In an optimal case,
+new query results become available in between and thus we completely
+eliminate CPU stalls. In a static scenario, we achieve exactly the
+same visibility classification as the hierarchical stop-and-wait
+method.
+
+If the visibility is changing, the situation can be different: if the
+results of the queries arrive too late, it is possible that we
+initiated an occlusion query on a previously occluded node $A$ that is
+in fact occluded by another previously occluded node $B$ that became
+visible. If $B$ is still in the query queue, we do not capture a
+possible occlusion of $A$ by $B$ since the geometry associated with
+$B$ has not yet been rendered. In Section~\ref{sec:results} we show
+that the increase of the number of rendered objects compared to the
+stop-and-wait method is usually very small.
+
+%% It is possible that we have already traversed all previously
+%% visible nodes and we must stall the CPU by waiting for the result
+%% of the oldest occlusion query. A technique completely eliminating
+%% CPU stalls at the cost of an increase of the number of rendered
+%% objects will be discussed in Section~\ref{sec:full}.
+
+\subsection{Front-to-back scene traversal}
+
+For kD-trees the front-to-back scene traversal can be easily
+implemented using a depth first
+traversal~\cite{bittner01:jvca}. However, at a modest increase in
+computational cost we can also use a more general breadth-first
+traversal based on a priority queue. The priority of the node then
+corresponds to an inverse of the minimal distance of the viewpoint and
+the bounding box associated with the given node of the
+kD-tree~\cite{Klosowski:2001:ECV,Staneker:2004:OCO}.
+
+In the context of our culling algorithm, there are two main advantages
+of the breadth-first front-to-back traversal :
+
+\begin{itemize}
+\item {\em Better query scheduling.} By spreading the traversal of the
+scene in a breadth-first manner, we process the scene in depth
+layers. Within each layer, the node processing order is practically
+independent, which minimizes the problem of occlusion query
+dependence. The breadth-first traversal interleaves
+occlusion-independent nodes, which can provide a more accurate
+visibility classification if visibility changes quickly. In
+particular, it reduces the problem of false classifications due to
+missed occlusion by nodes waiting in the query queue (discussed in
+Section~\ref{sec:latency}).
+
+\item {\em Using other spatial data structures.} By using a
+breadth-first traversal, we are no longer restricted to the
+kD-tree. Instead we can use an arbitrary spatial data structure
+such as a bounding volume hierarchy, octree, grid, hierarchical grid,
+etc. Once we compute a distance from a node to the viewpoint, the
+node processing order is established by the priority queue.
+\end{itemize}
+
+ When using the priority queue, our culling algorithm can also be
+applied directly to the scene graph hierarchy, thus avoiding the
+construction of any auxiliary data structure for spatial
+partitioning. This is especially important for dynamic scenes, in
+which maintenance of a spatial classification of moving objects can be
+costly.
+
+\subsection{Checking the query result}
+
+  The presented algorithm repeatedly checks if the result of the
+ occlusion query is available before fetching any node from the
+ traversal stack (line 6 in Figure~\ref{fig:pseudocode}). Our
+ practical experiments have proven that the cost of this check is
+ negligible and thus it can used frequently without any performance
+ penalty. If the cost of this check were significantly higher, we could
+ delay asking for the query result by a time established by empirical
+ measurements for the particular hardware. This delay should also
+ reflect the size of the queried node to match the expected
+ availability of the query result as precise as possible.
+
+
+\section{Further Optimizations}
+
+\label{sec:optimizations}
+
+This section discusses a couple of optimizations of our method that
+can further improve the overall rendering performance. In contrast to
+the basic algorithm from the previous section, these optimizations
+rely on some user specified parameters that should be tuned for a
+particular scene and hardware configuration.
+
+
+\subsection{Conservative visibility testing}
+
+The first optimization addresses the reduction of the number of
+visibility tests at the cost of a possible increase in the number of
+rendered objects. This optimization is based on the idea of skipping
+some occlusion tests of visible nodes. We assume that whenever a node
+becomes visible, it remains visible for a number of frames. Within the
+given number of frames we avoid issuing occlusion queries and simply
+assume the node remains visible~\cite{bittner01:jvca}.
+
+This technique can significantly reduce the number of visibility tests
+applied on visible nodes of the hierarchy. Especially in the case of
+sparsely occluded scenes, there is a large number of visible nodes
+being tested, which does not provide any benefit since most of them
+remain visible. On the other hand, we do not immediately capture all
+changes from visibility to invisibility, and thus we may render
+objects that have already become invisible from the moment when the
+last occlusion test was issued.
+
+ In the simplest case, the number of frames a node is assumed visible
+can be a predefined constant. In a more complicated scenario this
+number should be influenced by the history of the success of occlusion
+queries and/or the current speed of camera movement.
+
+
+\subsection{Approximate visibility}
+
+ The algorithm as presented computes a conservative visibility
+classification with respect to the resolution of the z-buffer. We
+can easily modify the algorithm to cull nodes more aggressively in
+cases when a small part of the node is visible. We compare the
+number of visible pixels returned by the occlusion query with a
+user specified constant and cull the node if this number drops
+below this constant.
+
+
+\subsection{Complete elimination of CPU stalls}
+
+\label{sec:full}
+
+ The basic algorithm eliminates CPU stalls unless the traversal stack
+is empty. If there is no node to traverse in the traversal stack and
+the result of the oldest query in the query queue is still not
+available, it stalls the CPU by waiting for the query result. To
+completely eliminate the CPU stalls, we can speculatively render some
+nodes with undecided visibility. In particular, we select a node from
+the query queue and render the geometry associated with the node (or
+the whole subtree if it is an interior node). The node is marked as
+rendered but the associated occlusion query is kept in the queue to
+fetch its result later. If we are unlucky and the node remains
+invisible, the effort of rendering the node's geometry is wasted. On
+the other hand, if the node has become visible, we have used the time
+slot before the next query arrives in an optimal manner.
+
+To avoid the problem of spending more time on rendering invisible
+nodes than would be spent by waiting for the result of the query, we
+select a node with the lowest estimated rendering cost and compare
+this cost with a user specified constant. If the cost is larger than
+the constant we conclude that it is too risky to render the node and
+wait till the result of the query becomes available.
+
+\begin{figure}%[htb]
+{\footnotesize
+  \input{code/pseudocode_batching}
+ }
+  \caption{Pseudo-code of coherent hierarchical culling using multiple queries.}
+  \label{fig:pseudocode_batching}
+\end{figure}
+
+\subsection{Initial depth pass}
+\label{sec:initial}
+
+\begin{figure}
+\centering 
+\includegraphics[width=0.49\textwidth,draft=\DRAFTIMAGES]{images/transp_wrong}
+\includegraphics[width=0.49\textwidth,draft=\DRAFTIMAGES]{images/transp_delayed}
+\caption{(left) all passes are rendered with CHC. Note that the soldiers are
+visible through the tree. (right) Only the solid passes are rendered using CHC, afterwards the transparent passes.}
+\label{fig:online_transparency}
+\end{figure}
+
+
+To achieve maximal performance on modern GPU's, one has to take care of a number of issues.
+First, it is very important to reduce material switching. Thus modern rendering engines sort the 
+objects (or patches) by materials in order to eliminate the material switching as good as possible. 
+
+Next, materials can be very costly, sometimes complicated shaders have to be evaluated several times per batch. Hence it should be avoided to render the full material for fragments which eventually turn out to be occluded. This can be achieved
+by rendering an initial depth pass (i.e., enabling only depth write to fill the depth
+buffer). Afterwards the geometry is rendered again, this time with full shading. Because the 
+depth buffer is already established, invisible fragments will be discarded before any shading is done calculated.
+
+This approach can be naturally adapted for use with the CHC algorithm. Only an initial depth pass is rendered
+in front-to-back order using the CHC algorithm. The initial pass is sufficient to fill the depth buffer and determine the visible geometry. Then only the visible geometry is rendered again, exploiting the full optimization and material sorting capability of the rendering engine.
+
+If the materials requires several rendering passes, we can use a variant of the depth pass method. We render
+only the first passes using the algorithm (e.g., the solid passes), determining the visibility of the patches, and 
+render all the other passes afterwards. This approach can be used when there are passes which require a special
+kind of sorting to be rendered correctly (e.g., transparent passes, shadow passes). In figure~\ref{fig:online_transparency},
+we can see that artifacts occur in the left image if the transparent passes are not rendered in the correct order after
+applying the hierarchical algorithm (right image). In a similar fashion, we are able to handle shadows~\ref{fig:chc_shadows}.
+
+\begin{figure}
+\centering 
+\includegraphics[width=0.4\textwidth,draft=\DRAFTIMAGES]{images/chc_shadows}
+\caption{We can correctly handle shadow volumes together with CHC.}
+\label{fig:chc_shadows}
+\end{figure}
+
+\subsection{Batching multiple queries}
+\label{sec:batching}
+
+When occlusion queries are rendered interleaved with geometry, there is always a state change involved. To
+reduce state changes, it is beneficial not to execute one query at a time, but multiple queries at once~\cite{Staneker:2004:EMO}.
+Instead of immediately executing a query for a node when we fetch it from the traversal stack, we add it to the {\em pending queue}. If {\em n} of these queries are accumulated in the queue, we can execute them at once.
+To optain an optimal value for {\em n}, several some heuristics can be applied, e.g., a fraction of the number of queries issued in the last frame. The pseudo-code of the algorithm including the batching is given in Figure~\ref{fig:pseudocode_batching}. 
+
+
+\section{Results}
+\label{sec:results}
+
+We have incorporated our method into an OpenGL-based scene graph
+library and tested it on three scenes of different types. All tests
+were conducted on a PC with a 3.2GHz P4, 1GB of memory, and a
+GeForce FX5950 graphics card.
+
+\subsection{Test scenes}
+
+The three test scenes comprise a synthetic arrangement of 5000
+randomly positioned teapots (11.6M polygons); an urban environment (1M
+polygons); and the UNC power plant model (13M polygons). The test
+scenes are depicted in Figure~\ref{fig:scenes}. All scenes were
+partitioned using a kD-tree constructed according to the surface-area
+heuristics~\cite{MacDonald90}.
+
+
+Although the teapot scene would intuitively offer good occlusion, it
+is a complicated case to handle for occlusion culling. Firstly, the
+teapots consist of small triangles and so only the effect of fused
+occlusion due to a large number of visible triangles can bring a
+culling benefit. Secondly, there are many thin holes through which it
+is possible to see quite far into the arrangement of teapots. Thirdly,
+the arrangement is long and thin and so we can see almost
+half of the teapots along the longer side of the arrangement.
+
+%Although the teapot scene would intuitively seem to offer good
+%occlusion, it is one of the more complicated cases for occlusion
+%culling. Due to the high number of very dense objects, a very fine
+%kD-tree subdivision was necessary, which in turn leads to higher costs
+%for testing many nodes in the hierarchy. Additionally, misclassifying
+%a single teapot can lead to a significant increase in frame time due
+%to the high polygon density (2,304 polygons per teapot). There are also
+%many locations where it is possible to see very far into the block of
+%teapots. This can be seen in the kD-tree node classification which is
+%shown in the accompanying video.
+
+The complete power plant model is quite challenging even to load into
+memory, but on the other hand it offers good occlusion. This scene is
+an interesting candidate for testing not only due to its size, but
+also due to significant changes in visibility and depth complexity in
+its different parts.
+
+%as can also be seen in the
+%walkthrough. A relatively coarse subdivision of the model triangles
+%into about 4,600 nodes was sufficient to capture most occlusion
+%interdependencies.
+
+The city scene is a classical target for occlusion culling
+algorithms. Due to the urban structure consisting of buildings and
+streets, most of the model is occluded when viewed from the
+streets. Note that the scene does not contain any detailed geometry
+inside the buildings. See Figure~\ref{fig:city_vis} for a
+visualization of the visibility classification of the kD-tree nodes
+for the city scene.
+
+%that
+%could further
+
+
+
+%% However, we still included a section in the walkthrough where the
+%% viewpoint is elevated above the building roofs in order to show that
+%% the algorithm continues to work without modification, albeit at some
+%% expense. It will be an interesting topic of research to automatically
+%% recognize such situations and decrease the frequency of visibility
+%% queries or turn the occlusion culling algorithm off completely.
+
+
+
+\begin{figure}
+\centering \includegraphics[width=0.4\textwidth,draft=\DRAFTIMAGES]{images/city_vis}
+\caption{Visibility classification of the kD-tree nodes in the city scene.
+  The orange nodes were found visible, all the other depicted nodes are invisible.
+  Note the increasing size of the occluded nodes with increasing distance from the visible set.}
+\label{fig:city_vis}
+\end{figure}
+
+
+\subsection{Basic tests}
+
+
+We have measured the frame times for rendering with only view-frustum culling
+(VFC), the hierarchical stop-and-wait method (S\&W), and our new
+coherent hierarchical culling method (CHC). Additionally, we have
+evaluated the time for an ``ideal'' algorithm. The ideal algorithm
+renders the visible objects found by the S\&W algorithm without
+performing any visibility tests. This is an optimal solution with
+respect to the given hierarchy, i.e., no occlusion culling algorithm
+operating on the same hierarchy can be faster. For the basic tests we
+did not apply any of the optimizations discussed in
+Section~\ref{sec:optimizations}, which require user specified
+parameters.
+
+%% In order to obtain repeatable and comparable timings, the process
+%% priority of our application was set to high, timings were obtained
+%% using the CPU cycle counter instruction, and the OpenGL {\tt Finish()}
+%% instruction was executed before each invocation of the timer at the
+%% start and the end of a frame. Furthermore, we did not include clear
+%% and buffer swapping times in our results, since they depend strongly
+%% on the windowing mode used.
+
+For each test scene, we have constructed a walkthrough which is shown
+in full in the accompanying
+video. Figures~\ref{fig:teapot_walkthrough},~\ref{fig:city_walkthrough},
+and~\ref{fig:plant_walkthrough} depict the frame times measured for
+the walkthroughs. Note that Figure~\ref{fig:plant_walkthrough} uses a
+logarithmic scale to capture the high variations in frame times during
+the power plant walkthrough.
+\begin{figure}
+\centering
+\includegraphics[width=0.5\textwidth,draft=\DRAFTFIGS]{images/teapotgraph1}
+\caption{Frame times for the teapot scene.}\label{fig:teapot_walkthrough}
+\end{figure}
+\begin{figure}
+\centering
+\includegraphics[width=0.5\textwidth,draft=\DRAFTFIGS]{images/citygraph1}
+\caption{Frame times for the city walkthrough. Note
+the spike around frame 1600, where the viewpoint was elevated above the roofs,
+practically eliminating any occlusion.}\label{fig:city_walkthrough}
+\end{figure}
+\begin{figure}
+\centering
+\includegraphics[width=0.5\textwidth,draft=\DRAFTFIGS]{images/plantgraph1log}
+\caption{Frame times for the power plant walkthrough.
+The plot shows the weakness of the S\&W method: when there is not much occlusion it becomes slower than VFC (near frame 2200).
+The CHC can keep up even in these situations and in the same time it can exploit occlusion when it appears
+(e.g. near frame 3700).}
+\label{fig:plant_walkthrough}
+\end{figure}
+To better demonstrate the behavior of our algorithm, all walkthroughs
+contain sections with both restricted and unrestricted visibility. For
+the teapots, we viewed the arrangement of teapots along the longer
+side of the arrangement (frames 25--90). In the city we elevated the
+viewpoint above the roofs and gained sight over most of the city
+(frames 1200--1800). The power plant walkthrough contains several
+viewpoints from which a large part of the model is visible (spikes in
+Figure~\ref{fig:plant_walkthrough} where all algorithms are slow),
+viewpoints along the border of the model directed outwards with low depth complexity (holes in
+Figure~\ref{fig:plant_walkthrough} where all algorithms are fast), and
+viewpoints inside the power plant with high depth complexity where occlusion culling produces a
+significant speedup over VFC (e.g. frame 3800).
+
+ As we can see for a number frames in the walkthroughs, the CHC method
+can produce a speedup of more than one order of magnitude compared to
+VFC. The maximum speedup for the teapots, the city, and the power
+plant walkthroughs is 8, 20, and 70, respectively. We can also observe
+that CHC maintains a significant gain over S\&W and in many cases it
+almost matches the performance of the ideal algorithm. In complicated
+scenarios the S\&W method caused a significant slowdown compared to
+VFC (e.g. frames 1200--1800 of
+Figure~\ref{fig:city_walkthrough}). Even in these cases, the CHC
+method maintained a good speedup over VFC except for a small number of
+frames.
+
+\begin{table*}
+\centering \footnotesize
+\begin{tabular}{|c|c|c|c|c|c|c|c|}
+ \hline\hline
+scene                  & method   & \#queries & wait time [ms] & rendered triangles & frame time [ms]  & speedup \\\hline\hline
+
+Teapots                & VFC      & ---        &  ---     & 11,139,928  & 310.42  & 1.0 \\\hhline{~|-|-|-|-|-|-|-|}
+11,520,000 triangles    & S\&W     & 4704     & 83.19  & 2,617,801  & 154.95 & 2.3 \\\hhline{~|-|-|-|-|-|-|-|}
+21,639 kD-Tree nodes   & {\bf CHC} &{\bf 2827} & {\bf 1.31}  & {\bf 2,852,514 } & {\bf 81,18 } & {\bf 4.6 } \\\hhline{~|-|-|-|-|-|-|-|}
+                       & Ideal    & ---        &  ---     & 2,617,801  & 72.19  & 5.2 \\
+                       \hline\hline
+City                   & VFC      & ---        &  ---     & 156,521    & 19.79 & 1.0   \\\hhline{~|-|-|-|-|-|-|-|}
+1,036,146 triangles    & S\&W     & 663      &  9.49  & 30,594     & 19.9  & 1.5 \\\hhline{~|-|-|-|-|-|-|-|}
+33,195 kD-Tree nodes   &{\bf CHC} & {\bf 345} & {\bf 0.18}   & {\bf 31,034}  & {\bf 8.47}  & {\bf 4.0}  \\\hhline{~|-|-|-|-|-|-|-|}
+                       & Ideal    & ---        &   ---   & 30,594     & 4.55  & 6.6  \\
+                       \hline\hline
+Power Plant            & VFC      & ---    &  ---   & 1,556,300 & 138.76 & 1.0 \\\hhline{~|-|-|-|-|-|-|-|}
+12,748,510 triangles    & S\&W    & 485   & 16.16  & 392,962  & 52.29 & 3.2 \\\hhline{~|-|-|-|-|-|-|-|}
+18,719 kD-Tree nodes    &{\bf CHC} & {\bf 263}  & {\bf 0.70}  & {\bf 397,920} & {\bf 38.73}  & {\bf 4.7} \\\hhline{~|-|-|-|-|-|-|-|}
+                       & Ideal    &    ---      &  ---   &   392,962    &  36.34  & 5.8 \\\hline\hline
+\end{tabular}
+\caption{Statistics for the three test scenes. VFC is rendering with only view-frustum culling, S\&W is the
+  hierarchical stop and wait method, CHC is our new method, and Ideal
+is a perfect method with respect to the given hierarchy. All values
+are averages over all frames (including the speedup).}
+\label{tab:averages}
+\end{table*}
+
+%VFC     S&W     CHC     Ideal
+%(01:50:59) salzrat: 1     3,243823523     4,744645293     5,765981148
+%(01:51:04) salzrat: for the powerplant
+% for the powerplant
+%(01:53:59) salzrat: 1     1,519898136     4,01897468     6,599413211
+%(01:54:01) salzrat: for the city
+%(01:55:15) salzrat: and
+%(01:55:15) salzrat: 1     2,321137905     4,646185621     5,199086993
+
+%salzrat: teapot: 1,977162565     1,128631431
+%(02:01:52) salzrat: city: 2,607396227     1,674188137
+%(02:02:59) salzrat: powerplant: 1,635036084     1,244446469
+
+
+ Next, we summarized the scene statistics and the average values per
+frame in Table~\ref{tab:averages}. The table shows the number of
+issued occlusion queries, the wait time representing the CPU stalls,
+the number of rendered triangles, the total frame time, and the
+speedup over VFC.
+
+
+We can see that the CHC method practically eliminates the CPU stalls
+(wait time) compared to the S\&W method. This is paid for by a slight
+increase in the number of rendered triangles. For the three
+walkthroughs, the CHC method produces average speedups of 4.6, 4.0, and
+4.7 over view frustum culling and average speedups of 2.0, 2.6, and
+1.6 over the S\&W method. CHC is only 1.1, 1.7, and 1.2 times
+slower than the ideal occlusion culling algorithm. Concerning the
+accuracy, the increase of the average number of rendered triangles for
+CHC method compared to S\&W was 9\%, 1.4\%, and 1.3\%. This increase
+was always recovered by the reduction of CPU stalls for the tested
+walkthroughs.
+
+%% While this number may be very low, the algorithm also incurs a
+%% non-negligible overhead which is caused by the graphics card
+%% reconfiguration required for the queries and rasterization of the
+%% bounding volume geometries.
+
+% triangles
+% 9%
+% 1.4%
+% 1.3%
+
+
+% speedup over SW
+% 1.9
+% 2.32
+% 1.33
+
+% compare to ideal
+% 1.13
+% 1.9
+% 1.05
+
+
+
+\subsection{Optimizations}
+
+First of all we have observed that the technique of complete
+elimination of CPU stalls discussed in Section~\ref{sec:full} has a
+very limited scope. In fact for all our tests the stalls were almost
+completely eliminated by the basic algorithm already (see wait time in
+Table~\ref{tab:averages}). We did not find constants that could
+produce additional speedup using this technique.
+
+The measurements for the other optimizations discussed in
+Section~\ref{sec:optimizations} are summarized in
+Table~\ref{tab:assumed}. We have measured the average number of issued queries
+and the average frame time in dependence on the number of frames a node is
+assumed visible and the pixel threshold of approximate visibility. We
+have observed that the effectiveness of the optimizations depends strongly on the scene. If
+the hierarchy is deep and the geometry associated with a leaf node is
+not too complex, the conservative visibility testing produces a
+significant speedup (city and power plant). For the teapot scene the
+penalty for false rendering of actually occluded objects became larger
+than savings achieved by the reduction of the number of queries. On the other
+hand since the teapot scene contains complex visible geometry the
+approximate visibility optimization produced a significant
+speedup. This is however paid for by introducing errors in the image
+proportional to the pixel threshold used.
+
+%Good parameters for these
+%optimizations have to be estimated on a scene-by-scene basis.
+
+
+
+
+%% , where we compare the reference frame time and
+%% number of queries already shown in the previous table to the
+%% approximate visibility optimization using a higher pixel threshold,
+%% and to the conservative visibility testing optimization assuming a
+%% node remains visible for 2 frames, both for the teapot and the city
+%% scene. These tests clearly show that a high visibility threshold
+%% improves frame times, albeit at the expense of image quality. The
+%% benefit of the conservative visibility optimization, is however
+%% limited. While the number of queries can be reduced significantly, the
+%% number of misclassified objects rises and increases the frame time
+%% again.
+
+
+
+%% \begin{table}
+%% \centering \footnotesize
+%% \begin{tabular}{|l|c|c|}
+%%  \hline\hline
+%%                 & Teapots & City \\\hline\hline
+%%  frame time CHC & 130.42  & 13.91\\\hline
+%%  \#queries      & 2267    & 94.04\\\hline\hline
+%%  \multicolumn{3}{|l|}{assume 2 frames visible}\\\hline
+%%  frame time      & 123.84 & 13.27 \\\hline
+%%  \#queries      & 1342    &  42 \\\hline\hline
+%%  \multicolumn{3}{|l|}{pixel threshold 50 pixels and assume 2 frames visible}\\\hline
+%%  frame time     & 73.22 & 11.47  \\\hline
+%%  \#queries      &  1132 &  50 \\\hline\hline
+%% \end{tabular}
+%% \caption{Influence of optimizations on two test scenes. All values are averages
+%% over all frames, frame times are in [ms].}\label{tab:assumed}
+%% \end{table}
+
+
+\begin{table}
+\centering \footnotesize
+\begin{tabular}{|l|c|c|c|c|}
+ \hline\hline
+scene                    & t$_{av}$ &  n$_{vp}$ & \#queries & frame time [ms]   \\ \hline\hline
+\multirow{3}{*}{Teapots} & 0        &    0         & 2827      & 81.18  \\ \hhline{~----}
+                         & 2       &    0         & 1769      &  86.31 \\ \hhline{~----}
+                         & 2       &    25         & 1468      & 55.90  \\ \hline\hline
+\multirow{3}{*}{City}    & 0        &    0         & 345        & 8.47  \\ \hhline{~----}
+                         & 2        &    0         & 192        & 6.70 \\ \hhline{~----}
+                         & 2       &    25         & 181       & 6.11  \\ \hline\hline
+\multirow{3}{*}{Power Plant}    & 0  &    0        & 263        & 38.73  \\ \hhline{~----}
+                         & 2        &    0         & 126        & 31.17 \\ \hhline{~----}
+                         & 2       &    25         & 120       & 36.62  \\ \hline\hline
+\end{tabular}
+
+\caption{Influence of optimizations on the CHC method.
+  $t_{av}$ is the number of assumed visibility frames for conservative
+  visibility testing, n$_{vp}$ is the pixel threshold for
+  approximate visibility.}\label{tab:assumed}
+\end{table}
+
+
+\subsection{Comparison to PVS-based rendering}
+
+ We also compared the CHC method against precalculated visibility. In
+particular, we used the PVS computed by an offline visibility
+algorithm~\cite{wonka00}. While the walkthrough using the PVS was
+1.26ms faster per frame on average, our method does not require costly
+precomputation and can be used at any general 3D position in the
+model, not only in a predefined view space.
+
+
+\section{Summary}
+\label{sec:conclusion}
+
+ We have presented a method for the optimized scheduling of hardware
+ accelerated occlusion queries. The method schedules occlusion queries
+ in order to minimize the number of the queries and their latency.
+ This is achieved by exploiting spatial and temporal coherence of
+ visibility. Our results show that the CPU stalls and GPU starvation
+ are almost completely eliminated at the cost of a slight increase in
+ the number of rendered objects.
+
+%Additionally it schedules the queries in an order
+%minimizing the overhead due to the latency of availability of query
+%results.
+
+ Our technique can be used with practically arbitrary scene
+ partitioning data structures such as kD-trees, bounding volume
+ hierarchies, or hierarchical grids. The implementation of the method
+ is straightforward as it uses a simple OpenGL interface to the
+ hardware occlusion queries. In particular, the method requires no
+ complicated geometrical operations or data structures. The algorithm
+ is suitable for application on scenes of arbitrary structure and it
+ requires no preprocessing or scene dependent tuning.
+
+ We have experimentally verified that the method is well suited to the
+ \nvoq{} supported on current consumer grade graphics hardware. We
+ have obtained an average speedup of 4.0--4.7 compared to pure view-frustum
+ culling and 1.6--2.6 compared to the hierarchical
+ stop-and-wait application of occlusion queries.
+
+
+%   The major potential in improving the method is a better estimation
+%  of changes in the visibility classification of hierarchy nodes. If
+%  nodes tend to be mostly visible, we could automatically decrease the
+%  frequency of occlusion tests and thus better adapt the method to the
+%  actual occlusion in the scene. Another possibility for improvement is
+%  better tuning for a particular graphics hardware by means of more
+%  accurate rendering cost estimation. Skipping occlusion tests for
+%  simpler geometry  can be faster than issuing comparably expensive
+%  occlusion queries.
+
+
+\begin{figure*}[htb]
+  \centerline{
+    \hfill
+    \includegraphics[height=0.3\textwidth,draft=\DRAFTFIGS]{images/teapots}
+    \hfill
+    \includegraphics[height=0.3\textwidth,draft=\DRAFTFIGS]{images/city}
+    \hfill
+  }
+  \centerline{
+    \includegraphics[width=0.35\textwidth,draft=\DRAFTFIGS]{images/pplant}
+  }
+  
+  \caption{The test scenes: the teapots, the city, and the power plant.}
+  \label{fig:scenes}
+\end{figure*}
+
+%%  \begin{figure}[htb]
+%%    \centerline{
+%%      \includegraphics[width=0.2\textwidth,draft=\DRAFTFIGS]{images/city}
+%%   }
+%%   \caption{The the city scene.}
+%%   \label{fig:images1}
+%% \end{figure}
+
+%%  \begin{figure}[htb]
+%%    \centerline{
+%%      \includegraphics[width=0.25\textwidth,draft=\DRAFTFIGS]{images/teapots}
+%%   }
+%%   \caption{The the teapot scene.}
+%%   \label{fig:images2}
+%% \end{figure}
+
+%%  \begin{figure}[htb]
+%%    \centerline{
+%%      \includegraphics[width=0.2\textwidth,draft=\DRAFTFIGS]{images/pplant}
+%%   }
+%%   \caption{The the power plant scene.}
+%%   \label{fig:images3}
+%% \end{figure}
+
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/default.mac
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/default.mac	(revision 246)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/default.mac	(revision 246)
@@ -0,0 +1,7 @@
+% Macros for c2tex translator
+\def\mymd{\mdseries}
+\def\keya{\rm\bf}
+\def\keyb{\sl\mymd}
+\def\comment{\sl\mymd}
+\def\symbol{\rm\mymd}
+\def\normal{\rm\mymd}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/is-alpha.bst
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/is-alpha.bst	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/is-alpha.bst	(revision 243)
@@ -0,0 +1,2020 @@
+%% =====================================================================
+%% WARNING: Do NOT edit this file.  It was produced automatically by
+%% Nelson H. F. Beebe <beebe@plot79.math.utah.edu>
+%% from file://plot79.math.utah.edu/u/sy/beebe/tex/bib/merge/xbtxbst.doc 
+%% on Wed May 15 10:36:04 MDT 1996.
+%% =====================================================================
+%%%=====================================================================
+%%% @BibTeX-style-file{
+%%%     author          = "Nelson H. F. Beebe",
+%%%     version         = "2.03",
+%%%     date            = "15 May 1996",
+%%%     time            = "10:35:51 MDT",
+%%%     filename        = "is-alpha.bst",
+%%%     address         = "Center for Scientific Computing
+%%%                        Department of Mathematics
+%%%                        University of Utah
+%%%                        Salt Lake City, UT 84112
+%%%                        USA",
+%%%     telephone       = "+1 801 581 5254",
+%%%     FAX             = "+1 801 581 4148",
+%%%     URL             = "http://www.math.utah.edu/~beebe",
+%%%     checksum        = "49675 2020 5086 41225",
+%%%     email           = "beebe@math.utah.edu (Internet)",
+%%%     codetable       = "ISO/ASCII",
+%%%     keywords        = "BibTeX, style, bibliography",
+%%%     supported       = "yes",
+%%%     docstring       = "This file is a modification of the standard
+%%%                        BibTeX btxbst.doc file, or is a .bst file
+%%%                        derived from that modification.  It contains
+%%%                        optional added support for CODEN, ISBN, ISSN,
+%%%                        LCCN, and PRICE fields, extended PAGES
+%%%                        fields, the PERIODICAL entry, and extended
+%%%                        citation label suffixing.
+%%%
+%%%                        In addition, date formatting supports a day
+%%%                        keyword, so that bibliography entries can be
+%%%                        written with
+%%%
+%%%                            day   = {23},
+%%%                            month = aug,
+%%%
+%%%                        instead of the language-dependent awkward
+%%%                        forms required by the standard styles
+%%%
+%%%                            month = {23~} # aug,
+%%%                            month = aug # {~23},
+%%%
+%%%                        These older forms are, of course, still
+%%%                        handled correctly.
+%%%
+%%%                        The UNIX C preprocessor can be used to
+%%%                        extract the standard styles, as follows:
+%%%
+%%%                            cpp -P -DPLAIN xbtxbst.doc >plain.bst
+%%%                            cpp -P -DUNSRT xbtxbst.doc >unsrt.bst
+%%%                            cpp -P -DALPHA xbtxbst.doc >alpha.bst
+%%%                            cpp -P -DABBRV xbtxbst.doc >abbrv.bst
+%%%
+%%%                        To obtain correct file header checksums, pipe
+%%%                        the output through the checksum program, e.g.
+%%%
+%%%                            cpp -P -DPLAIN xbtxbst.doc | checksum >plain.bst
+%%%
+%%%                        The accompanying UNIX Makefile automates this
+%%%                        job, and provides some extra leading comments
+%%%                        in the generated style files warning the user
+%%%                        not to modify them.
+%%%
+%%%                        Additional optional definitions are recognized
+%%%                        to provide extensions to the standard styles:
+%%%
+%%%                            -D_CODEN for CODEN output
+%%%
+%%%                            -D_ISBN for ISBN output
+%%%
+%%%                            -D_ISSN for ISSN output
+%%%
+%%%                            -D_LCCN for LCCN output
+%%%
+%%%                            -D_PRICE for price output,
+%%%
+%%%                            -D_BOOKPAGES for book, techreport, manual,
+%%%                            and thesis pages output.
+%%%
+%%%                            -D_URL to get World-Wide Web Uniform
+%%%                            Resource Locator (URL) output.
+%%%
+%%%                            -D_NUMERIC_SUFFIXES to get numeric
+%%%                            label suffixes -1, -2, ..., -26, instead of
+%%%                            letters a, b, ..., z, so as to correctly
+%%%                            handle alpha-style bibliographies with more
+%%%                            than 26 entries for a single author in one
+%%%                            year.  Change letter suffix code to switch
+%%%                            to numeric suffixes if more than 26 letters
+%%%                            are used, so that no matter which scheme is
+%%%                            selected, correct output will always be
+%%%                            obtained.
+%%%
+%%%                        The CODEN, ISBN, ISSN, LCCN, PRICE, and URL
+%%%                        values are wrapped inside macros \showCODEN{}
+%%%                        etc. that the user can provide alternate
+%%%                        definitions of to change the formatting, or
+%%%                        to suppress their output altogether.  That
+%%%                        way, output identical to that of the four
+%%%                        standard BibTeX style files can be obtained
+%%%                        with these extended files, if these macros
+%%%                        are defined to expand to empty strings.
+%%%
+%%%                        URL handling is slightly more complex,
+%%%                        because URLs can contain characters which TeX
+%%%                        must handle in verbatim mode in a typewriter
+%%%                        font, and such text cannot readily appear
+%%%                        inside nested macro arguments.  Consequently,
+%%%                        URLs are formatted in the .bbl file like
+%%%                        this:
+%%%                            \ifshowURL {\showURL \path|...|} \fi
+%%%                        where \showURL takes no argument, and
+%%%                        normally expands to the 4-character string
+%%%                        URL<space>.  The grouping braces ensure that
+%%%                        any font changes made by \showURL remain
+%%%                        localized.  Vertical bar is chosen as the
+%%%                        verbatim path delimiter, because it cannot
+%%%                        appear in URLs.  The other prohibited ISO
+%%%                        Latin 1 characters are the non-printing
+%%%                        control characters 0..31, plus those in the
+%%%                        range 128..255, plus the ten special
+%%%                        characters
+%%%
+%%%                            { } [ ] \ ^ ~ < > `
+%%%
+%%%                        See Internet RFC 1630 (June 1994) for more
+%%%                        details.  (Backquote is not even mentioned
+%%%                        there.)
+%%%
+%%%                        As an example of font changes, in LaTeX 2e
+%%%                        you might define
+%%%                            \newcommand{\showURL}{URL
+%%%                                \let \oldtt = \tt
+%%%                                \renewcommand{\tt}{\oldtt \itshape}}
+%%%                        to get URLs set in a typewriter italic font.
+%%%
+%%%                        If desired, a sed script can be used to
+%%%                        eliminate non-essential comments (this
+%%%                        reduces the file size by 2/3); a command
+%%%                        filter step like
+%%%                                sed -e '/^%$/d' -e '/^%[^%].*$/d'
+%%%                        will accomplish that job.
+%%%
+%%%                        The checksum field above contains a CRC-16
+%%%                        checksum as the first value, followed by the
+%%%                        equivalent of the standard UNIX wc (word
+%%%                        count) utility output of lines, words, and
+%%%                        characters.  This is produced by Robert
+%%%                        Solovay's checksum utility."
+%%%     }
+%%% ====================================================================
+%%% Revision history (reverse time order):
+%%%
+%%% 2.03 [15-May-1996]
+%%%      Add CODEN support, ISBN and ISSN output for Article entries,
+%%%      and ISBN output for TechReport entries (yes, these sometimes
+%%%      do have ISBNs).
+%%%
+%%%      Add wrapper macros \showXYZ{} (XYZ = CODEN, ISBN, ISSN, LCCN,
+%%%      PRICE, and URL) defined inside the thebibliography environment
+%%%      to expand to XYZ (except for PRICE) and their arguments,
+%%%      PROVIDED they are not already defined.  That way, the user can
+%%%      provide alternate definitions outside the thebibliography
+%%%      environment, for example, to suppress particular ones, or
+%%%      to alter the font used.
+%%%
+%%%      Substantially revise leading comments to better document the
+%%%      extensions.
+%%%
+%%% 2.02 [01-Apr-1996]
+%%%	 Add day keyword support with new code in format.date function.
+%%%	 Oren Patashnik will include this new keyword in standard styles
+%%%	 in BibTeX 1.0.
+%%%
+%%%	 Add new function collapse.pagerange, and use it to collapse
+%%%	 page ranges with identical initial and final numbers to a
+%%%	 single number, so that bibliography files can distinguish
+%%%	 between one-page documents, and documents missing final page
+%%%	 numbers.
+%%%
+%%% 2.01 [25-Oct-1994]
+%%%	 Add URL output support.
+%%%
+%%% 2.00 [12-Oct-1994]
+%%%	 Add support for pages in theses and manuals, treating them
+%%%	 like Book and InBook pages.
+%%%
+%%%	 Correct ISSN support: a typo caused output of ISBN instead of
+%%%	 ISSN.
+%%%
+%%%	 Wherever ISBNs are output, also output an ISSN, if one
+%%%	 exists, and vice versa.  The reason is that some periodicals
+%%%	 (e.g. The X Resource, published by O'Reilly and Associates)
+%%%	 have both ISSN and ISBN numbers, and can be purchased either
+%%%	 as journal subscriptions, or as single volumes.
+%%%
+%%%	 For InProceedings and Proceedings output, issue a warning for
+%%%	 a missing publisher: even though that field is optional, a
+%%%	 bibliographic reference without it is incomplete.
+%%%
+%%%	 Remove harmless, but unneeded, single horizontal space before
+%%%	 price output added with version 1.03.
+%%%
+%%%	 Change Proceedings and InProceedings to treat address values
+%%%	 as publisher addresses, as they are with every other document
+%%%	 type, rather than as conference addresses, which belong in
+%%%	 the title field (that is how major libraries, including OCLC
+%%%	 and Library of Congress, with nearly 60M holdings, represent
+%%%	 them).  The need for this change has been discussed with
+%%%	 BibTeX's author, Oren Patashnik, and there is a good
+%%%	 possibility that BibTeX 1.0 will contain the change
+%%%	 implemented here.  This is an INCOMPATIBLE change that will
+%%%	 produce different .bbl file formatting.  However, the TUG and
+%%%	 BibNet bibliography projects have consistently used address
+%%%	 to me publisher/organization/institution address, and so
+%%%	 already conform to the new practice.
+%%%
+%%% 1.05 [30-May-1994]
+%%%	 Add NUMERIC_SUFFIXES support.
+%%%
+%%%	 Change all preprocessor statements to put else and endif
+%%%	 labels inside C-style comments to conform to 1989 ISO/ANSI C
+%%%	 Standard.
+%%%
+%%% 1.04 [11-Nov-1993]
+%%%	 Add underscore prefix to new processor symbols to prevent
+%%%	 substitution in comments
+%%%
+%%% 1.03 [11-Oct-1993]
+%%%	 Add support for LCCN (Library of Congress Catalog Number)
+%%%	 and price fields, and make ISBN, ISSN, LCCN, and price
+%%%	 selectable by preprocessor conditionals.
+%%%
+%%% 1.02 [12-Sep-1991]
+%%%      Merge in Barbara N. Beeton's suggestion for hyphen-less
+%%%      line breaks around volume(number):page.
+%%%
+%%% 1.01 [10-Sep-1991]
+%%%      Update file comment header and use Solovay checksum program.
+%%%
+%%% 1.00 [17-Oct-1990]
+%%%      Original version merging hand-edits of is-xxx.bst files into
+%%%      this master file, xbtxbst.doc.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% BibTeX `plain' family
+%%       version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+%%       Copyright (C) 1985, all rights reserved.
+%%       Copying of this file is authorized only if either
+%%       (1) you make absolutely no changes to your copy, including name, or
+%%       (2) if you do make changes, you name it something other than
+%%       btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+%%       This restriction helps ensure that all standard styles are identical.
+%%       The file btxbst.doc has the documentation for this style.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+
+    coden
+
+    day
+    edition
+    editor
+    howpublished
+    institution
+
+    isbn
+
+
+    issn
+
+    journal
+    key
+
+    lccn
+
+    month
+    note
+    number
+    organization
+    pages
+
+    price
+
+    publisher
+    school
+    series
+    title
+    type
+
+    URL
+
+    volume
+    year
+  }
+  {}
+
+
+  { label extra.label sort.label }
+
+
+
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+
+STRINGS { b e new.pages original.t s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+        { add.period$ write$
+          newline$
+          "\newblock " write$
+        }
+        { output.state before.all =
+            'write$
+            { add.period$ " " * write$ }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+
+  "\bibitem[" write$
+  label write$
+  "]{" write$
+
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  before.all 'output.state :=
+}
+
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+        'skip$
+        { after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\em " swap$ * "}" * }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+
+    { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+
+      nameptr #1 >
+        { namesleft #1 >
+            { ", " * t * }
+            { numnames #2 >
+                { "," * }
+                'skip$
+              if$
+              t "others" =
+                { " et~al." * }
+                { " and " * t * }
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+
+FUNCTION {format.coden}
+{ coden empty$
+    { "" }
+    { new.block "\showCODEN{" coden * "}" *}
+  if$
+}
+
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+        { ", editors" * }
+        { ", editor" * }
+      if$
+    }
+  if$
+}
+
+
+FUNCTION {format.isbn}
+{ isbn empty$
+    { "" }
+    { new.block "\showISBN{" isbn * "}" *}
+  if$
+}
+
+
+
+FUNCTION {format.issn}
+{ issn empty$
+    { "" }
+    { new.block "\showISSN{" issn * "}" *}
+  if$
+}
+
+
+
+FUNCTION {format.lccn}
+{ lccn empty$
+    { "" }
+    { new.block "\showLCCN{" lccn * "}" *}
+  if$
+}
+
+
+
+FUNCTION {format.price}
+{ price empty$
+    { "" }
+    { new.block "\showPRICE{" price * "}" *}
+  if$
+}
+
+
+
+FUNCTION {format.url}
+{ url empty$
+    { "" }
+    { new.block "\ifshowURL {\showURL \path|" url * "|}\fi" *}
+  if$
+}
+
+
+
+
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+
+    { title "t" change.case$ }
+
+  if$
+}
+
+
+
+FUNCTION {collapse.pagerange}
+{ 't :=				% save input page range string
+  t 'original.t :=		% save original page range
+  "" 'b :=			% beginning page number
+  "" 'e :=			% ending page number
+    { t empty$ not }		% while-loop Boolean condition
+    {				% while-loop body
+      t #1 #2 substring$ "--" =	% have we found the en-dash?
+	{
+	   t #3 global.max$ substring$ 'e :=	% yes, save ending page number
+	   "" 't := 		% and set t to empty string to terminate loop
+	}
+	{
+	   b t #1 #1 substring$ * 'b := % no, just accumulate this character
+	   t #2 global.max$ substring$ 't := % and set t to the remaining string
+	}
+      if$
+    }
+  while$			% on exit, t has ending page number string
+  e b =				% are beginning and ending numbers the same?
+    { b	}			% yes, return the beginning page number string
+    { original.t }		% no, return the original page number string
+  if$
+}
+
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+        { t #1 #2 substring$ "--" = not
+            { "--" *
+              t #2 global.max$ substring$ 't :=
+            }
+            {   { t #1 #1 substring$ "-" = }
+                { "-" *
+                  t #2 global.max$ substring$ 't :=
+                }
+              while$
+            }
+          if$
+        }
+        { t #1 #1 substring$ *
+          t #2 global.max$ substring$ 't :=
+        }
+      if$
+    }
+  while$
+}
+
+
+FUNCTION {format.date}
+{ year empty$
+    { month empty$
+        {
+	  day empty$
+	    { "" }
+	    { "there's a day but no month or year in " cite$ * warning$ }
+	  if$
+	}
+        { "there's a month but no year in " cite$ * warning$
+          month
+	  day empty$
+            { }
+	    { " " * day * }
+          if$
+        }
+      if$
+    }
+    { month empty$
+	{
+	  day empty$
+	    { year }
+	    { "there's a day and year but no month in " cite$ * warning$ }
+	  if$
+	}
+        {
+          month " " *
+	  day empty$
+            { }
+	    { day * ", " * }
+          if$
+          year *
+        }
+      if$
+    }
+  if$
+}
+
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$ * *
+}
+
+
+FUNCTION {either.or.check}
+{ empty$
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+
+
+FUNCTION {format.bvolume}
+{ volume empty$
+    { "" }
+    { "volume" volume tie.or.space.connect
+      series empty$
+        'skip$
+        { " of " * series emphasize * }
+      if$
+      "volume and number" number either.or.check
+    }
+  if$
+}
+
+
+FUNCTION {format.number.series}
+{ volume empty$
+    { number empty$
+        { series field.or.null }
+        { output.state mid.sentence =
+            { "number" }
+            { "Number" }
+          if$
+          number tie.or.space.connect
+          series empty$
+            { "there's a number but no series in " cite$ * warning$ }
+            { " in " * series * }
+          if$
+        }
+      if$
+    }
+    { "" }
+  if$
+}
+
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { output.state mid.sentence =
+        { edition "l" change.case$ " edition" * }
+        { edition "t" change.case$ " edition" * }
+      if$
+    }
+  if$
+}
+
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+        { #1 'multiresult := }
+        { t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+
+FUNCTION {format.book.pages}
+{ pages empty$
+    { "" }
+    { new.block pages " pp." * }
+  if$
+}
+
+
+
+FUNCTION {format.pages}
+{ pages empty$
+    { "" }
+    {
+      pages multi.page.check
+        { pages collapse.pagerange 'new.pages := }
+	{ pages 'new.pages := }
+      if$
+      new.pages multi.page.check
+        { "pages" new.pages n.dashify tie.or.space.connect }
+        { "page" new.pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  number empty$
+    'skip$
+    { "\penalty0 (" number * ")" * *
+      volume empty$
+        { "there's a number but no volume in " cite$ * warning$ }
+        'skip$
+      if$
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+        { pop$ format.pages }
+        { ":\penalty0 " * pages collapse.pagerange n.dashify * }
+      if$
+    }
+  if$
+}
+
+
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+        { "chapter" }
+        { type "l" change.case$ }
+      if$
+      chapter tie.or.space.connect
+      pages empty$
+        'skip$
+        { ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { editor empty$
+        { "In " booktitle emphasize * }
+        { "In " format.editors * ", " * booktitle emphasize * }
+      if$
+    }
+  if$
+}
+
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+
+  key empty$ not and
+
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    'skip$
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { "Technical Report" }
+    'type
+  if$
+  number empty$
+    { "t" change.case$ }
+    { number tie.or.space.connect }
+  if$
+}
+
+
+FUNCTION {format.article.crossref}
+{ key empty$
+    { journal empty$
+        { "need key or journal for " cite$ * " to crossref " * crossref *
+          warning$
+          ""
+        }
+        { "In {\em " journal * "\/}" * }
+      if$
+    }
+    { "In " key * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { pop$ " et~al." * }
+    { #2 <
+        'skip$
+        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+            { " et~al." * }
+            { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      "In "
+    }
+    { "Volume" volume tie.or.space.connect
+      " of " *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { series empty$
+            { "need editor, key, or series for " cite$ * " to crossref " *
+              crossref * warning$
+              "" *
+            }
+            { "{\em " * series * "\/}" * }
+          if$
+        }
+        { key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { booktitle empty$
+            { "need editor, key, or booktitle for " cite$ * " to crossref " *
+              crossref * warning$
+              ""
+            }
+            { "In {\em " booktitle * "\/}" * }
+          if$
+        }
+        { "In " key * }
+      if$
+    }
+    { "In " format.crossref.editor * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { journal emphasize "journal" output.check
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+
+  format.coden output
+
+
+  format.isbn output
+
+
+  format.issn output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+
+  format.coden output
+
+
+  format.isbn output
+
+
+  format.issn output
+
+
+  format.book.pages output
+
+
+  format.lccn output
+
+
+  format.price output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+}
+
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  new.block
+  format.title "title" output.check
+  howpublished address new.block.checkb
+  howpublished output
+  address output
+  format.date output
+
+  format.coden output
+
+
+  format.isbn output
+
+
+  format.issn output
+
+
+  format.book.pages output
+
+
+  format.lccn output
+
+
+  format.price output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+}
+
+
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+
+  format.coden output
+
+
+  format.isbn output
+
+
+  format.issn output
+
+
+  format.lccn output
+
+
+  format.price output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+}
+
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+
+  format.coden output
+
+
+  format.isbn output
+
+
+  format.issn output
+
+
+  format.lccn output
+
+
+  format.price output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+}
+
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      address empty$
+        { organization publisher new.sentence.checkb
+          organization output
+          publisher "publisher" output.check
+          format.date "year" output.check
+        }
+        { new.sentence
+          organization output
+          publisher "publisher" output.check
+          address output.nonnull
+          format.date "year" output.check
+        }
+      if$
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+
+  format.coden output
+
+
+  format.isbn output
+
+
+  format.issn output
+
+
+  format.lccn output
+
+
+  format.price output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+}
+
+
+FUNCTION {conference} { inproceedings }
+
+
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization empty$
+        'skip$
+        { organization output.nonnull
+          address output
+        }
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+        { address new.block.checka
+          address output
+        }
+        'skip$
+      if$
+    }
+    { organization address new.block.checkb
+      organization output
+      address output
+    }
+  if$
+  format.edition output
+  format.date output
+
+  format.book.pages output
+
+
+  format.price output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+}
+
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  "Master's thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+
+  format.book.pages output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+}
+
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  title howpublished new.block.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished output
+  format.date output
+
+  format.coden output
+
+
+  format.isbn output
+
+
+  format.issn output
+
+
+  format.price output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.btitle "title" output.check
+  new.block
+  "PhD thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+
+  format.book.pages output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+}
+
+
+FUNCTION {periodical}
+{ output.bibitem
+  editor empty$
+    { organization output }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  title emphasize "title" output.check
+  format.vol.num.pages output
+  format.date output
+
+  format.coden output
+
+
+  format.isbn output
+
+
+  format.issn output
+
+
+  format.price output
+
+
+  format.url output
+
+  new.sentence
+  publisher output
+  address output
+  howpublished new.block.checka
+  howpublished output
+  new.block
+  note output
+  fin.entry
+}
+
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization output }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  address empty$
+    { editor empty$
+        { publisher new.sentence.checka }
+        { organization publisher new.sentence.checkb
+          organization output
+        }
+      if$
+      publisher "publisher" output.check %%% <- new check for missing
+      format.date "year" output.check
+    }
+    { new.sentence
+      editor empty$
+        'skip$
+        { organization output }
+      if$
+      publisher "publisher" output.check
+      address output.nonnull
+      format.date "year" output.check
+    }
+  if$
+
+  format.coden output
+
+
+  format.isbn output
+
+
+  format.issn output
+
+
+  format.lccn output
+
+
+  format.price output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+}
+
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" output.check
+  address output
+  format.date "year" output.check
+
+  format.isbn output		% NB: TechReports occasionally have ISBNs
+
+
+  format.book.pages output
+
+
+  format.price output
+
+
+  format.url output
+
+  new.block
+  note output
+  fin.entry
+}
+
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  note "note" output.check
+  format.date output
+
+  format.url output
+
+  fin.entry
+}
+
+
+FUNCTION {default.type} { misc }
+
+
+
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+
+
+
+
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+
+
+
+READ
+
+
+
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+
+
+
+
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 's :=
+  s num.names$ 'numnames :=
+  numnames #1 >
+    { numnames #4 >
+        { #3 'namesleft := }
+        { numnames 'namesleft := }
+      if$
+      #1 'nameptr :=
+      ""
+        { namesleft #0 > }
+        { nameptr numnames =
+            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+                { "{\etalchar{+}}" *
+                  #1 'et.al.char.used :=
+                }
+                { s nameptr "{v{}}{l{}}" format.name$ * }
+              if$
+            }
+            { s nameptr "{v{}}{l{}}" format.name$ * }
+          if$
+          nameptr #1 + 'nameptr :=
+          namesleft #1 - 'namesleft :=
+        }
+      while$
+      numnames #4 >
+        { "{\etalchar{+}}" *
+          #1 'et.al.char.used :=
+        }
+        'skip$
+      if$
+    }
+    { s #1 "{v{}}{l{}}" format.name$
+      duplicate$ text.length$ #2 <
+        { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+        'skip$
+      if$
+    }
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+
+        { cite$ #1 #3 substring$ }
+
+        { key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+        { key empty$
+
+            { cite$ #1 #3 substring$ }
+
+            { key #3 text.prefix$ }
+          if$
+        }
+        { editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key empty$
+        { organization empty$
+
+            { cite$ #1 #3 substring$ }
+
+            { "The " #4 organization chop.word #3 text.prefix$ }
+          if$
+        }
+        { key #3 text.prefix$ }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key empty$
+        { organization empty$
+
+            { cite$ #1 #3 substring$ }
+
+            { "The " #4 organization chop.word #3 text.prefix$ }
+          if$
+        }
+        { key #3 text.prefix$ }
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+        'editor.key.organization.label
+        { type$ "manual" =
+            'author.key.organization.label
+            'author.key.label
+          if$
+        }
+      if$
+    }
+  if$
+  duplicate$
+  year field.or.null purify$ #-1 #2 substring$
+  *
+  'label :=
+  year field.or.null purify$ #-1 #4 substring$
+  *
+  sortify 'sort.label :=
+}
+
+
+
+
+
+
+
+
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+        { "   " * }
+        'skip$
+      if$
+
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+
+      nameptr numnames = t "others" = and
+        { "et al" * }
+        { t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+        { "to sort, need author or key in " cite$ * warning$
+          ""
+        }
+        { key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { "to sort, need author, editor, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need author, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need editor, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+
+FUNCTION {presort}
+
+{ calc.label
+  sort.label
+  "    "
+  *
+  type$ "book" =
+
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+        'editor.organization.sort
+        { type$ "manual" =
+            'author.organization.sort
+            'author.sort
+          if$
+        }
+      if$
+    }
+  if$
+
+  *
+
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+
+SORT
+
+
+
+
+
+
+
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #0 int.to.chr$ 'last.sort.label :=
+  "" 'next.extra :=
+  #0 'longest.label.width :=
+  #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+    { last.extra.num #1 + 'last.extra.num :=
+
+      last.extra.num "z" chr.to.int$ >
+
+	% Generate -1, -2, ... suffixes
+	{ "-" last.extra.num "a" chr.to.int$ - #1 + int.to.str$ * 'extra.label := }
+	% Generate a, b, ..., z suffixes
+        { last.extra.num int.to.chr$ 'extra.label := }
+      if$
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      sort.label 'last.sort.label :=
+    }
+  if$
+}
+
+FUNCTION {reverse.pass}
+{
+
+  next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+
+  label extra.label * 'label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+
+
+
+
+
+FUNCTION {begin.bib}
+
+{ et.al.char.used
+    { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+    'skip$
+  if$
+  preamble$ empty$
+
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
+
+  "\ifx \showCODEN  \undefined \def \showCODEN #1{CODEN #1}  \fi" write$ newline$
+
+
+  "\ifx \showISBN   \undefined \def \showISBN  #1{ISBN #1}   \fi" write$ newline$
+
+
+  "\ifx \showISSN   \undefined \def \showISSN  #1{ISSN #1}   \fi" write$ newline$
+
+
+  "\ifx \showLCCN   \undefined \def \showLCCN  #1{LCCN #1}   \fi" write$ newline$
+
+
+  "\ifx \showPRICE  \undefined \def \showPRICE #1{#1}        \fi" write$ newline$
+
+
+  "\ifx \showURL    \undefined \def \showURL {URL }          \fi" write$ newline$
+  "\ifx \path       \undefined \input path.sty               \fi" write$ newline$
+  "\ifx \ifshowURL \undefined" write$ newline$
+  "     \newif \ifshowURL"     write$ newline$
+  "     \showURLtrue"          write$ newline$
+  "\fi" write$ newline$
+
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+
+ITERATE {call.type$}
+
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency2.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency2.fig	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency2.fig	(revision 243)
@@ -0,0 +1,173 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2175 2325 5925 3075
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 2250 2400 3150 2400 3150 3000 2250 3000 2250 2400
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 3150 2400 4050 2400 4050 3000 3150 3000 3150 2400
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 4050 2400 4950 2400 4950 3000 4050 3000 4050 2400
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 4950 2400 5850 2400 5850 3000 4950 3000 4950 2400
+4 0 0 50 0 0 32 0.0000 4 330 540 2475 2850 R1\001
+4 0 0 50 0 0 32 0.0000 4 330 540 3375 2850 R2\001
+4 0 0 50 0 0 32 0.0000 4 330 540 4275 2850 R3\001
+4 0 0 50 0 0 32 0.0000 4 435 570 5175 2850 Q4\001
+-6
+6 6375 1125 8325 1875
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 6450 1200 7350 1200 7350 1800 6450 1800 6450 1200
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 7350 1200 8250 1200 8250 1800 7350 1800 7350 1200
+4 0 0 50 0 0 32 0.0000 4 330 540 6675 1650 R4\001
+4 0 0 50 0 0 32 0.0000 4 435 570 7575 1650 Q5\001
+-6
+6 7725 2325 9675 3075
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 7800 2400 8700 2400 8700 3000 7800 3000 7800 2400
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 8700 2400 9600 2400 9600 3000 8700 3000 8700 2400
+4 0 0 50 0 0 32 0.0000 4 330 540 8025 2850 R4\001
+4 0 0 50 0 0 32 0.0000 4 435 570 8925 2850 Q5\001
+-6
+6 10125 1125 11175 1875
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 10200 1200 11100 1200 11100 1800 10200 1800 10200 1200
+4 0 0 50 0 0 32 0.0000 4 330 540 10425 1650 C5\001
+-6
+6 13650 3600 15300 4125
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 13725 3675 15225 3675
+4 0 0 50 0 0 32 0.0000 4 285 135 14475 4125 t\001
+-6
+6 13650 7200 15300 7725
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 13725 7275 15225 7275
+4 0 0 50 0 0 32 0.0000 4 285 135 14475 7725 t\001
+-6
+6 11025 1125 12075 1875
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 11100 1200 12000 1200 12000 1800 11100 1800 11100 1200
+4 0 0 50 0 0 32 0.0000 4 435 570 11325 1650 Q6\001
+-6
+6 12375 2325 13425 3075
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 12450 2400 13350 2400 13350 3000 12450 3000 12450 2400
+4 0 0 50 0 0 32 0.0000 4 435 570 12675 2850 Q6\001
+-6
+6 13875 1125 14925 1875
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 13950 1200 14850 1200 14850 1800 13950 1800 13950 1200
+4 0 0 50 0 0 32 0.0000 4 330 540 14250 1650 R6\001
+-6
+6 15225 2325 16275 3075
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 15300 2400 16200 2400 16200 3000 15300 3000 15300 2400
+4 0 0 50 0 0 32 0.0000 4 330 540 15525 2850 R6\001
+-6
+6 5850 1800 6675 2475
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 5925 2325 6300 1875
+4 0 0 50 0 0 32 0.0000 4 330 330 6300 2475 V\001
+-6
+6 9600 1800 10200 2475
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 9675 2325 10050 1875
+4 0 0 50 0 0 32 0.0000 4 330 150 10050 2475 I\001
+-6
+6 13350 1800 14175 2475
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 13425 2325 13800 1875
+4 0 0 50 0 0 32 0.0000 4 330 330 13800 2475 V\001
+-6
+6 8250 5025 9300 5775
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 8325 5100 9225 5100 9225 5700 8325 5700 8325 5100
+4 0 0 50 0 0 32 0.0000 4 330 540 8550 5550 C5\001
+-6
+6 2175 6225 9525 6975
+6 2175 6225 9525 6975
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 6750 6300 7650 6300 7650 6900 6750 6900 6750 6300
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 7650 6300 8550 6300 8550 6900 7650 6900 7650 6300
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 2250 6300 3150 6300 3150 6900 2250 6900 2250 6300
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 3150 6300 4050 6300 4050 6900 3150 6900 3150 6300
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 4050 6300 4950 6300 4950 6900 4050 6900 4050 6300
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 4950 6300 5850 6300 5850 6900 4950 6900 4950 6300
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 5850 6300 6750 6300 6750 6900 5850 6900 5850 6300
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 8550 6300 9450 6300 9450 6900 8550 6900 8550 6300
+4 0 0 50 0 0 32 0.0000 4 435 570 6975 6750 Q5\001
+4 0 0 50 0 0 32 0.0000 4 435 570 7875 6750 Q6\001
+4 0 0 50 0 0 32 0.0000 4 330 540 2475 6750 R1\001
+4 0 0 50 0 0 32 0.0000 4 330 540 3375 6750 R2\001
+4 0 0 50 0 0 32 0.0000 4 330 540 4275 6750 R3\001
+4 0 0 50 0 0 32 0.0000 4 435 570 5175 6750 Q4\001
+4 0 0 50 0 0 32 0.0000 4 330 540 6075 6750 R4\001
+4 0 0 50 0 0 32 0.0000 4 330 540 8775 6750 R6\001
+-6
+-6
+6 7725 5700 8325 6300
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 7800 6225 8175 5775
+4 0 0 50 0 0 32 0.0000 4 330 150 8175 6225 I\001
+-6
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 900 1200 1800 1200 1800 1800 900 1800 900 1200
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 1800 1200 2700 1200 2700 1800 1800 1800 1800 1200
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 2700 1200 3600 1200 3600 1800 2700 1800 2700 1200
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 3600 1200 4500 1200 4500 1800 3600 1800 3600 1200
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 5400 5100 6300 5100 6300 5700 5400 5700 5400 5100
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 6300 5100 7200 5100 7200 5700 6300 5700 6300 5100
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 900 5100 1800 5100 1800 5700 900 5700 900 5100
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 1800 5100 2700 5100 2700 5700 1800 5700 1800 5100
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 2700 5100 3600 5100 3600 5700 2700 5700 2700 5100
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 3600 5100 4500 5100 4500 5700 3600 5700 3600 5100
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 4500 5100 5400 5100 5400 5700 4500 5700 4500 5100
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 7200 5100 8100 5100 8100 5700 7200 5700 7200 5100
+4 0 0 50 0 0 32 0.0000 4 330 540 1125 1650 R1\001
+4 0 0 50 0 0 32 0.0000 4 330 540 2025 1650 R2\001
+4 0 0 50 0 0 32 0.0000 4 330 540 2925 1650 R3\001
+4 0 0 50 0 0 32 0.0000 4 435 570 3825 1650 Q4\001
+4 0 0 50 0 0 32 0.0000 4 330 945 -300 1650 CPU\001
+4 0 0 50 0 0 32 0.0000 4 330 975 -300 2925 GPU\001
+4 0 0 50 0 0 32 0.0000 4 435 570 5625 5550 Q5\001
+4 0 0 50 0 0 32 0.0000 4 435 570 6525 5550 Q6\001
+4 0 0 50 0 0 32 0.0000 4 330 540 1125 5550 R1\001
+4 0 0 50 0 0 32 0.0000 4 330 540 2025 5550 R2\001
+4 0 0 50 0 0 32 0.0000 4 330 540 2925 5550 R3\001
+4 0 0 50 0 0 32 0.0000 4 435 570 3825 5550 Q4\001
+4 0 0 50 0 0 32 0.0000 4 330 540 4725 5550 R4\001
+4 0 0 50 0 0 32 0.0000 4 330 540 7425 5550 R6\001
+4 0 0 50 0 0 32 0.0000 4 330 945 -300 5550 CPU\001
+4 0 0 50 0 0 32 0.0000 4 330 975 -300 6825 GPU\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency.eps
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency.eps	(revision 283)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency.eps	(revision 283)
@@ -0,0 +1,351 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: latency.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Fri Sep 16 18:25:55 2005
+%%For: matt@sakura (matt,U-COMPUTERGRAPHIK\matt,S-1-5-21-1259991482-2646404242-2158041560-3508)
+%%BoundingBox: 0 0 1153 326
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 326 moveto 0 0 lineto 1153 0 lineto 1153 326 lineto closepath clip newpath
+72.0 396.7 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+/Times-Roman ff 360.00 scf sf
+17325 2850 m
+gs 1 -1 sc (R7) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+2025 1650 m
+gs 1 -1 sc (R2) col0 sh gr
+% Polyline
+7.500 slw
+n 2700 1200 m 3600 1200 l 3600 1800 l 2700 1800 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+2925 1650 m
+gs 1 -1 sc (R3) col0 sh gr
+% Polyline
+n 3600 1200 m 4500 1200 l 4500 1800 l 3600 1800 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+3825 1650 m
+gs 1 -1 sc (R4) col0 sh gr
+% Polyline
+n 900 1200 m 1800 1200 l 1800 1800 l 900 1800 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+1125 1650 m
+gs 1 -1 sc (R1) col0 sh gr
+% Polyline
+n 4500 1200 m 5400 1200 l 5400 1800 l 4500 1800 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+4725 1650 m
+gs 1 -1 sc (Q5) col0 sh gr
+% Polyline
+n 1800 4800 m 2700 4800 l 2700 5400 l 1800 5400 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+2025 5250 m
+gs 1 -1 sc (R2) col0 sh gr
+% Polyline
+n 2700 4800 m 3600 4800 l 3600 5400 l 2700 5400 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+2925 5250 m
+gs 1 -1 sc (R3) col0 sh gr
+% Polyline
+n 3600 4800 m 4500 4800 l 4500 5400 l 3600 5400 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+3825 5250 m
+gs 1 -1 sc (R4) col0 sh gr
+% Polyline
+n 900 4800 m 1800 4800 l 1800 5400 l 900 5400 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+1125 5250 m
+gs 1 -1 sc (R1) col0 sh gr
+% Polyline
+n 4500 4800 m 5400 4800 l 5400 5400 l 4500 5400 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+4725 5250 m
+gs 1 -1 sc (Q5) col0 sh gr
+% Polyline
+n 7200 4800 m 8100 4800 l 8100 5400 l 7200 5400 l
+ cp gs col0 s gr 
+% Polyline
+n 8100 4800 m 9000 4800 l 9000 5400 l 8100 5400 l
+ cp gs col0 s gr 
+% Polyline
+n 9000 4800 m 9900 4800 l 9900 5400 l 9000 5400 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+7425 5250 m
+gs 1 -1 sc (R5) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+8325 5250 m
+gs 1 -1 sc (R6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+9225 5250 m
+gs 1 -1 sc (R7) col0 sh gr
+% Polyline
+n 2700 2400 m 3600 2400 l 3600 3000 l 2700 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+2925 2850 m
+gs 1 -1 sc (R2) col0 sh gr
+% Polyline
+n 3600 2400 m 4500 2400 l 4500 3000 l 3600 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+3825 2850 m
+gs 1 -1 sc (R3) col0 sh gr
+% Polyline
+n 4500 2400 m 5400 2400 l 5400 3000 l 4500 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+4725 2850 m
+gs 1 -1 sc (R4) col0 sh gr
+% Polyline
+n 1800 2400 m 2700 2400 l 2700 3000 l 1800 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+2025 2850 m
+gs 1 -1 sc (R1) col0 sh gr
+% Polyline
+n 5400 2400 m 6300 2400 l 6300 3000 l 5400 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+5625 2850 m
+gs 1 -1 sc (Q5) col0 sh gr
+% Polyline
+n 7200 1200 m 8100 1200 l 8100 1800 l 7200 1800 l
+ cp gs col0 s gr 
+% Polyline
+n 8100 1200 m 9000 1200 l 9000 1800 l 8100 1800 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+7425 1650 m
+gs 1 -1 sc (R5) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+8325 1650 m
+gs 1 -1 sc (Q6) col0 sh gr
+% Polyline
+n 2700 6000 m 3600 6000 l 3600 6600 l 2700 6600 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+2925 6450 m
+gs 1 -1 sc (R2) col0 sh gr
+% Polyline
+n 3600 6000 m 4500 6000 l 4500 6600 l 3600 6600 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+3825 6450 m
+gs 1 -1 sc (R3) col0 sh gr
+% Polyline
+n 4500 6000 m 5400 6000 l 5400 6600 l 4500 6600 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+4725 6450 m
+gs 1 -1 sc (R4) col0 sh gr
+% Polyline
+n 1800 6000 m 2700 6000 l 2700 6600 l 1800 6600 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+2025 6450 m
+gs 1 -1 sc (R1) col0 sh gr
+% Polyline
+n 5400 6000 m 6300 6000 l 6300 6600 l 5400 6600 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+5625 6450 m
+gs 1 -1 sc (Q5) col0 sh gr
+% Polyline
+n 8100 6000 m 9000 6000 l 9000 6600 l 8100 6600 l
+ cp gs col0 s gr 
+% Polyline
+n 9000 6000 m 9900 6000 l 9900 6600 l 9000 6600 l
+ cp gs col0 s gr 
+% Polyline
+n 9900 6000 m 10800 6000 l 10800 6600 l 9900 6600 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+8325 6450 m
+gs 1 -1 sc (R5) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+9300 6450 m
+gs 1 -1 sc (R6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+10125 6450 m
+gs 1 -1 sc (R7) col0 sh gr
+% Polyline
+n 9000 2400 m 9900 2400 l 9900 3000 l 9000 3000 l
+ cp gs col0 s gr 
+% Polyline
+n 9900 2400 m 10800 2400 l 10800 3000 l 9900 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+9225 2850 m
+gs 1 -1 sc (R5) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+10125 2850 m
+gs 1 -1 sc (Q6) col0 sh gr
+% Polyline
+n 11700 1200 m 12600 1200 l 12600 1800 l 11700 1800 l
+ cp gs col0 s gr 
+% Polyline
+n 12600 1200 m 13500 1200 l 13500 1800 l 12600 1800 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+11925 1650 m
+gs 1 -1 sc (R6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+12825 1650 m
+gs 1 -1 sc (Q7) col0 sh gr
+% Polyline
+n 14400 2400 m 15300 2400 l 15300 3000 l 14400 3000 l
+ cp gs col0 s gr 
+% Polyline
+n 13500 2400 m 14400 2400 l 14400 3000 l 13500 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+13725 2850 m
+gs 1 -1 sc (R6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+14625 2850 m
+gs 1 -1 sc (Q7) col0 sh gr
+% Polyline
+n 5400 4800 m 6300 4800 l 6300 5400 l 5400 5400 l
+ cp gs col0 s gr 
+% Polyline
+n 6300 4800 m 7200 4800 l 7200 5400 l 6300 5400 l
+ cp gs col0 s gr 
+% Polyline
+n 6300 6000 m 7200 6000 l 7200 6600 l 6300 6600 l
+ cp gs col0 s gr 
+% Polyline
+n 7200 6000 m 8100 6000 l 8100 6600 l 7200 6600 l
+ cp gs col0 s gr 
+% Polyline
+n 16200 1200 m 17100 1200 l 17100 1800 l 16200 1800 l
+ cp gs col0 s gr 
+% Polyline
+n 17100 2400 m 18000 2400 l 18000 3000 l 17100 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+5625 5250 m
+gs 1 -1 sc (Q6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+6525 5250 m
+gs 1 -1 sc (Q7) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+-1200 1725 m
+gs 1 -1 sc (CPU) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+-1200 2925 m
+gs 1 -1 sc (GPU) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+-1125 5250 m
+gs 1 -1 sc (CPU) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+-1125 6525 m
+gs 1 -1 sc (GPU) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+6525 6450 m
+gs 1 -1 sc (Q6) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+7425 6450 m
+gs 1 -1 sc (Q7) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+16500 1650 m
+gs 1 -1 sc (R7) col0 sh gr
+% Polyline
+n 1800 1200 m 2700 1200 l 2700 1800 l 1800 1800 l
+ cp gs col0 s gr 
+% here ends figure;
+$F2psEnd
+rs
+showpage
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/basic.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/basic.fig	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/basic.fig	(revision 243)
@@ -0,0 +1,85 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 7 0 0 20 0.000 1 0.0000 4200 1200 168 168 4200 1200 4368 1200
+1 3 0 1 0 7 0 0 20 0.000 1 0.0000 11100 1200 168 168 11100 1200 11268 1200
+2 1 0 1 0 7 12 0 -1 0.000 0 0 -1 0 0 4
+	 8100 4800 11100 1200 14100 4800 8100 4800
+2 1 0 1 0 7 6 0 -1 0.000 0 0 -1 0 0 4
+	 1200 4800 4200 1200 7200 4800 1200 4800
+2 1 0 1 0 7 0 0 18 0.000 0 0 -1 0 0 11
+	 11250 3450 11475 3075 11700 2850 11850 2850 12375 3000 12675 3075
+	 13050 3525 12675 3750 12150 3675 11625 3450 11250 3450
+2 1 0 4 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 12675 3075 13050 3525
+2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 10275 4425 10275 3975
+2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 10725 4350 10575 3900
+2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 9750 4350 10050 3900
+2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 3975 1875 3600 2400
+2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4200 1875 4200 2400
+2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4425 1875 4800 2400
+2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 12375 3075 12675 3450
+2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 12150 3075 12225 3450
+2 1 0 2 0 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 11850 3000 11850 3300
+2 1 0 1 0 7 1 0 20 0.000 0 0 -1 0 0 9
+	 9300 3675 9822 3733 10197 3733 11100 3600 10872 4408 10725 4575
+	 10050 4650 9600 4350 9300 3675
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 7050 2700 4200 3825
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 8400 2700 10350 3675
+2 1 0 4 0 7 5 0 18 0.000 0 0 -1 0 0 10
+	 2250 3600 4200 1200 5775 3075 4950 2700 4500 2925 3975 4500
+	 3750 4725 3075 4650 2775 4500 2250 3600
+2 4 0 4 0 7 0 0 18 0.000 0 0 7 0 0 5
+	 7425 1425 6825 1425 6825 1050 7425 1050 7425 1425
+3 2 0 10 0 7 0 0 -1 0.000 0 0 0 6
+	 9150 3600 10050 3750 10800 3675 11550 3450 12525 3750 13050 3525
+	 0.000 -1.000 -1.000 -1.000 -1.000 0.000
+3 2 0 12 29 7 10 0 -1 0.000 0 0 0 7
+	 9150 3600 9675 4500 10275 4725 10800 4575 11325 3150 11775 2775
+	 12675 3075
+	 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.000
+3 2 0 12 0 7 0 0 -1 0.000 0 0 0 7
+	 2250 3600 2775 4500 3375 4725 3900 4575 4425 3150 4875 2775
+	 5775 3075
+	 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.000
+3 2 0 4 0 7 0 0 -1 0.000 0 0 0 8
+	 9225 3600 9750 4500 10275 4650 10800 4500 11100 3675 11400 3150
+	 11775 2850 12600 3075
+	 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.000
+4 0 0 0 0 -1 15 0.0000 4 150 105 7350 2775 0\001
+4 0 0 0 0 -1 15 0.0000 4 150 105 8250 2775 1\001
+4 0 0 0 0 0 24 0.0000 4 255 1125 2250 1275 frame 0\001
+4 0 0 0 0 -1 24 0.0000 4 255 240 8025 2700 T\001
+4 0 0 0 0 -1 24 0.0000 4 255 240 7125 2700 T\001
+4 0 0 0 0 0 24 0.0000 4 255 1125 11850 1275 frame 1\001
+4 0 0 0 0 0 24 0.0000 4 255 870 7725 1500 nodes\001
+4 0 0 0 0 0 24 0.0000 4 255 870 7725 1125 tested\001
+4 0 0 0 0 -1 24 0.0000 4 255 2670 6375 2250 termination nodes\001
+4 0 0 0 0 -1 24 0.0000 4 330 1020 11175 4575 pull up\001
+4 0 0 0 0 -1 24 0.0000 4 330 1455 12900 3075 pull down\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/linesize.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/linesize.fig	(revision 249)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/linesize.fig	(revision 249)
@@ -0,0 +1,63 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 34 #ff8c0a
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+0 38 #ffd10a
+5 1 0 2 34 7 40 0 -1 0.000 0 0 0 0 3064.688 7284.375 2910 6495 3060 6480 3330 6525
+1 3 0 1 0 0 65 0 20 0.000 1 0.0000 2992 7495 96 96 2992 7495 3088 7495
+2 1 0 6 0 7 60 0 -1 0.000 0 0 -1 0 0 2
+	 675 5100 2700 5100
+2 1 0 6 0 7 60 0 -1 0.000 0 0 7 0 0 2
+	 3525 5700 5505 5700
+2 1 0 6 0 7 60 0 -1 0.000 0 0 7 0 0 2
+	 3750 4500 5550 4500
+2 1 0 6 0 7 60 0 -1 0.000 0 0 7 0 0 2
+	 1800 7500 4200 7500
+2 1 0 2 0 7 40 0 -1 0.000 0 0 -1 0 0 2
+	 4200 7500 1125 2475
+2 1 0 2 0 7 40 0 -1 0.000 0 0 7 0 0 2
+	 4200 2475 3075 7500
+2 1 0 2 0 7 40 0 -1 0.000 0 0 7 0 0 2
+	 1800 7500 5250 2175
+2 1 0 2 0 7 40 0 -1 0.000 0 0 7 0 0 2
+	 4200 7500 2100 2250
+2 1 0 4 34 7 45 0 -1 0.000 0 0 -1 0 0 2
+	 3765 4500 2790 5175
+2 1 0 2 0 7 40 0 -1 0.000 0 0 7 0 0 2
+	 1800 7500 3675 2550
+2 1 0 4 34 7 45 0 -1 0.000 0 0 7 0 0 2
+	 2730 5085 3600 5235
+2 1 1 4 34 7 45 0 -1 10.000 0 0 7 0 0 2
+	 2985 7500 2805 5190
+2 1 1 4 34 7 45 0 -1 10.000 0 0 7 0 0 2
+	 3000 7500 3735 4545
+2 1 0 4 34 7 45 0 -1 0.000 0 0 7 0 0 2
+	 3570 5715 2625 5310
+2 3 0 0 0 7 80 0 18 0.000 0 0 -1 0 0 10
+	 1800 7500 2730 5055 1035 2295 2430 1710 3645 2235 5565 1695
+	 3780 4470 3480 5700 4200 7530 1800 7500
+4 0 0 40 0 0 24 0.0000 4 255 225 3855 7965 P\001
+4 0 0 40 0 0 24 0.0000 4 255 225 5355 6240 P\001
+4 0 0 40 0 0 24 0.0000 4 255 225 765 5565 P\001
+4 0 0 40 0 0 24 0.0000 4 255 225 5355 4920 P\001
+4 0 0 40 0 0 20 0.0000 4 195 165 4035 8085 S\001
+4 0 0 40 0 0 20 0.0000 4 195 135 5520 6360 1\001
+4 0 0 40 0 0 20 0.0000 4 195 135 915 5685 2\001
+4 0 0 40 0 0 20 0.0000 4 195 135 5475 5055 3\001
+4 0 0 40 0 0 20 0.0000 4 135 225 3150 6435 m\001
+4 0 0 40 0 0 24 0.0000 4 180 150 3210 4590 z\001
+4 0 0 40 0 0 20 0.0000 4 195 135 3390 4680 3\001
+4 0 0 40 0 0 24 0.0000 4 180 150 3705 5280 z\001
+4 0 0 40 0 32 24 0.0000 4 195 240 2955 6315 a\001
+4 0 0 40 0 0 24 0.0000 4 180 150 2235 5505 z\001
+4 0 0 40 0 0 20 0.0000 4 195 135 2400 5595 1\001
+4 0 0 40 0 0 20 0.0000 4 195 135 3900 5400 2\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/viewcell_part.eps
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/viewcell_part.eps	(revision 281)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/viewcell_part.eps	(revision 281)
@@ -0,0 +1,1058 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: 0.42.2
+%%Pages: 1
+%%Orientation: Portrait
+%%BoundingBox: 35 274 523 537
+%%HiResBoundingBox: 35.315479 274.43741 522.26021 536.89432
+%%EndComments
+%%Page: 1 1
+0 842 translate
+0.80000000 -0.80000000 scale
+gsave [1.0000000 0.00000000 0.00000000 1.0000000 0.00000000 0.00000000] concat
+gsave [0.92330700 0.38406300 -0.40401100 0.91475400 0.00000000 0.00000000] concat
+gsave
+0.00000000 0.00000000 1.0000000 setrgbcolor
+newpath
+303.67282 548.33398 moveto
+335.96476 548.33398 lineto
+335.96476 584.08998 lineto
+303.67282 584.08998 lineto
+303.67282 548.33398 lineto
+closepath
+eofill
+grestore
+0.00000000 0.00000000 1.0000000 setrgbcolor
+[] 0 setdash
+0.52029562 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+303.67282 548.33398 moveto
+335.96476 548.33398 lineto
+335.96476 584.08998 lineto
+303.67282 584.08998 lineto
+303.67282 548.33398 lineto
+closepath
+stroke
+grestore
+gsave [0.66727000 -0.74481600 0.74481600 0.66727000 0.00000000 0.00000000] concat
+gsave
+0.00000000 0.00000000 1.0000000 setrgbcolor
+newpath
+-132.50075 734.34601 moveto
+-74.126011 734.34601 lineto
+-74.126011 775.45520 lineto
+-132.50075 775.45520 lineto
+-132.50075 734.34601 lineto
+closepath
+eofill
+grestore
+0.00000000 0.00000000 1.0000000 setrgbcolor
+[] 0 setdash
+1.0000002 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+-132.50075 734.34601 moveto
+-74.126011 734.34601 lineto
+-74.126011 775.45520 lineto
+-132.50075 775.45520 lineto
+-132.50075 734.34601 lineto
+closepath
+stroke
+grestore
+1.0000000 0.57254905 0.00000000 setrgbcolor
+[] 0 setdash
+2.7761126 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+98.506912 416.67648 moveto
+412.35905 416.67648 lineto
+412.35905 689.10904 lineto
+98.506912 689.10904 lineto
+98.506912 416.67648 lineto
+closepath
+stroke
+gsave [0.84714000 0.53136900 -0.47088400 0.88219500 0.00000000 0.00000000] concat
+gsave
+0.00000000 0.00000000 1.0000000 setrgbcolor
+newpath
+527.03149 434.68646 moveto
+558.31406 434.68646 lineto
+558.31406 467.31791 lineto
+527.03149 467.31791 lineto
+527.03149 434.68646 lineto
+closepath
+eofill
+grestore
+0.00000000 0.00000000 1.0000000 setrgbcolor
+[] 0 setdash
+0.75914353 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+527.03149 434.68646 moveto
+558.31406 434.68646 lineto
+558.31406 467.31791 lineto
+527.03149 467.31791 lineto
+527.03149 434.68646 lineto
+closepath
+stroke
+grestore
+gsave [0.14868900 -0.98888400 0.98888400 0.14868900 0.00000000 0.00000000] concat
+gsave
+0.00000000 0.00000000 1.0000000 setrgbcolor
+newpath
+-377.93018 224.46983 moveto
+-357.91210 224.46983 lineto
+-357.91210 246.48948 lineto
+-377.93018 246.48948 lineto
+-377.93018 224.46983 lineto
+closepath
+eofill
+grestore
+0.00000000 0.00000000 1.0000000 setrgbcolor
+[] 0 setdash
+1.0000000 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+-377.93018 224.46983 moveto
+-357.91210 224.46983 lineto
+-357.91210 246.48948 lineto
+-377.93018 246.48948 lineto
+-377.93018 224.46983 lineto
+closepath
+stroke
+grestore
+gsave [0.96888400 0.24751700 -0.28124800 0.95963500 0.00000000 0.00000000] concat
+gsave
+0.00000000 1.0000000 0.00000000 setrgbcolor
+newpath
+190.68875 424.80807 moveto
+512.48712 424.80807 lineto
+512.48712 448.75340 lineto
+190.68875 448.75340 lineto
+190.68875 424.80807 lineto
+closepath
+eofill
+grestore
+0.00000000 1.0000000 0.00000000 setrgbcolor
+[] 0 setdash
+1.3859025 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+190.68875 424.80807 moveto
+512.48712 424.80807 lineto
+512.48712 448.75340 lineto
+190.68875 448.75340 lineto
+190.68875 424.80807 lineto
+closepath
+stroke
+grestore
+gsave [0.83383200 -0.55201900 0.55201900 0.83383200 0.00000000 0.00000000] concat
+gsave
+0.00000000 0.00000000 1.0000000 setrgbcolor
+newpath
+-143.69884 380.23199 moveto
+-117.19646 380.23199 lineto
+-117.19646 397.64792 lineto
+-143.69884 397.64792 lineto
+-143.69884 380.23199 lineto
+closepath
+eofill
+grestore
+0.00000000 0.00000000 1.0000000 setrgbcolor
+[] 0 setdash
+1.0000018 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+-143.69884 380.23199 moveto
+-117.19646 380.23199 lineto
+-117.19646 397.64792 lineto
+-143.69884 397.64792 lineto
+-143.69884 380.23199 lineto
+closepath
+stroke
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+473.14052 569.56028 moveto
+94.799049 638.75573 lineto
+eofill
+grestore
+0.00000000 0.00000000 0.00000000 setrgbcolor
+[] 0 setdash
+1.9799416 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+473.14052 569.56028 moveto
+94.799049 638.75573 lineto
+stroke
+gsave [1.1685816 -0.21372367 0.21372367 1.1685816 88.956141 639.82435] concat
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+8.7185878 4.0337352 moveto
+-2.2072895 0.016013256 lineto
+8.7185884 -4.0017078 lineto
+6.9730900 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto
+closepath
+eofill
+grestore
+grestore
+gsave
+0.00000000 0.00000000 1.0000000 setrgbcolor
+newpath
+473.53439 566.12822 moveto
+120.16402 408.33747 lineto
+eofill
+grestore
+0.00000000 0.00000000 0.00000000 setrgbcolor
+[] 0 setdash
+2.3055024 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+473.53439 566.12822 moveto
+120.16402 408.33747 lineto
+stroke
+gsave [1.2630969 0.56401165 -0.56401165 1.2630969 113.84854 405.51741] concat
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+8.7185878 4.0337352 moveto
+-2.2072895 0.016013256 lineto
+8.7185884 -4.0017078 lineto
+6.9730900 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto
+closepath
+eofill
+grestore
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+477.14189 563.01467 moveto
+196.86368 406.40027 lineto
+eofill
+grestore
+0.00000000 0.00000000 0.00000000 setrgbcolor
+[] 0 setdash
+1.8639412 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+477.14189 563.01467 moveto
+196.86368 406.40027 lineto
+stroke
+gsave [0.97628648 0.54553125 -0.54553125 0.97628648 191.98225 403.67261] concat
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+8.7185878 4.0337352 moveto
+-2.2072895 0.016013256 lineto
+8.7185884 -4.0017078 lineto
+6.9730900 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto
+closepath
+eofill
+grestore
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+499.43916 485.54112 moveto
+499.43916 490.70560 lineto
+502.49820 490.70560 lineto
+503.52417 490.70560 504.28263 490.49475 504.77360 490.07302 curveto
+505.27084 489.64501 505.51946 488.99355 505.51947 488.11864 curveto
+505.51946 487.23744 505.27084 486.58913 504.77360 486.17369 curveto
+504.28263 485.75198 503.52417 485.54112 502.49820 485.54112 curveto
+499.43916 485.54112 lineto
+499.43916 479.74405 moveto
+499.43916 483.99271 lineto
+502.26216 483.99271 lineto
+503.19371 483.99272 503.88609 483.81963 504.33929 483.47343 curveto
+504.79876 483.12096 505.02851 482.58594 505.02852 481.86838 curveto
+505.02851 481.15713 504.79876 480.62527 504.33929 480.27277 curveto
+503.88609 479.92030 503.19371 479.74406 502.26216 479.74405 curveto
+499.43916 479.74405 lineto
+497.53198 478.17676 moveto
+502.40379 478.17676 lineto
+503.85776 478.17678 504.97815 478.47891 505.76495 479.08315 curveto
+506.55173 479.68741 506.94512 480.54659 506.94514 481.66067 curveto
+506.94512 482.52300 506.74371 483.20908 506.34088 483.71891 curveto
+505.93803 484.22876 505.34637 484.54662 504.56588 484.67250 curveto
+505.50373 484.87393 506.23072 485.29564 506.74686 485.93766 curveto
+507.26928 486.57339 507.53050 487.36962 507.53051 488.32635 curveto
+507.53050 489.58522 507.10248 490.55769 506.24647 491.24377 curveto
+505.39043 491.92985 504.17248 492.27289 502.59261 492.27289 curveto
+497.53198 492.27289 lineto
+497.53198 478.17676 lineto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+515.51800 486.95734 moveto
+514.11436 486.95734 513.14189 487.11785 512.60058 487.43885 curveto
+512.05927 487.75987 511.78861 488.30747 511.78861 489.08167 curveto
+511.78861 489.69851 511.99003 490.18947 512.39287 490.55454 curveto
+512.80199 490.91332 513.35589 491.09270 514.05457 491.09270 curveto
+515.01759 491.09270 515.78864 490.75281 516.36773 490.07302 curveto
+516.95309 489.38695 517.24578 488.47742 517.24579 487.34444 curveto
+517.24579 486.95734 lineto
+515.51800 486.95734 lineto
+518.98302 486.23978 moveto
+518.98302 492.27289 lineto
+517.24579 492.27289 lineto
+517.24579 490.66784 lineto
+516.84924 491.30986 516.35513 491.78508 515.76347 492.09350 curveto
+515.17180 492.39563 514.44796 492.54669 513.59193 492.54669 curveto
+512.50931 492.54669 511.64699 492.24456 511.00497 491.64031 curveto
+510.36924 491.02976 510.05138 490.21465 510.05138 489.19497 curveto
+510.05138 488.00535 510.44792 487.10841 511.24101 486.50415 curveto
+512.04038 485.89990 513.23001 485.59777 514.80989 485.59776 curveto
+517.24579 485.59776 lineto
+517.24579 485.42782 lineto
+517.24578 484.62845 516.98142 484.01160 516.45270 483.57729 curveto
+515.93027 483.13670 515.19383 482.91639 514.24340 482.91639 curveto
+513.63914 482.91639 513.05062 482.98878 512.47784 483.13354 curveto
+511.90505 483.27832 511.35430 483.49547 510.82558 483.78500 curveto
+510.82558 482.17995 lineto
+511.46131 481.93448 512.07815 481.75195 512.67611 481.63234 curveto
+513.27407 481.50647 513.85629 481.44353 514.42278 481.44351 curveto
+515.95230 481.44353 517.09471 481.84007 517.85004 482.63314 curveto
+518.60535 483.42623 518.98301 484.62845 518.98302 486.23978 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+529.52915 483.30349 moveto
+529.52915 477.58195 lineto
+531.26638 477.58195 lineto
+531.26638 492.27289 lineto
+529.52915 492.27289 lineto
+529.52915 490.68672 lineto
+529.16407 491.31615 528.70144 491.78508 528.14125 492.09350 curveto
+527.58734 492.39563 526.92015 492.54669 526.13966 492.54669 curveto
+524.86191 492.54669 523.82020 492.03685 523.01453 491.01717 curveto
+522.21515 489.99749 521.81546 488.65681 521.81546 486.99510 curveto
+521.81546 485.33341 522.21515 483.99272 523.01453 482.97303 curveto
+523.82020 481.95336 524.86191 481.44353 526.13966 481.44351 curveto
+526.92015 481.44353 527.58734 481.59774 528.14125 481.90615 curveto
+528.70144 482.20828 529.16407 482.67406 529.52915 483.30349 curveto
+523.60934 486.99510 moveto
+523.60934 488.27285 523.87055 489.27680 524.39298 490.00693 curveto
+524.92170 490.73078 525.64555 491.09270 526.56452 491.09270 curveto
+527.48349 491.09270 528.20733 490.73078 528.73606 490.00693 curveto
+529.26478 489.27680 529.52914 488.27285 529.52915 486.99510 curveto
+529.52914 485.71736 529.26478 484.71657 528.73606 483.99271 curveto
+528.20733 483.26258 527.48349 482.89751 526.56452 482.89750 curveto
+525.64555 482.89751 524.92170 483.26258 524.39298 483.99271 curveto
+523.87055 484.71657 523.60934 485.71736 523.60934 486.99510 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+547.74176 482.01000 moveto
+547.74176 483.65282 lineto
+547.25079 483.40106 546.74095 483.21223 546.21224 483.08633 curveto
+545.68351 482.96045 545.13590 482.89751 544.56942 482.89750 curveto
+543.70709 482.89751 543.05878 483.02969 542.62448 483.29404 curveto
+542.19646 483.55841 541.98245 483.95496 541.98246 484.48367 curveto
+541.98245 484.88651 542.13666 485.20438 542.44509 485.43726 curveto
+542.75351 485.66386 543.37350 485.88102 544.30506 486.08872 curveto
+544.89987 486.22090 lineto
+546.13355 486.48527 547.00846 486.85978 547.52460 487.34444 curveto
+548.04702 487.82281 548.30824 488.49315 548.30824 489.35547 curveto
+548.30824 490.33739 547.91799 491.11473 547.13750 491.68752 curveto
+546.36329 492.26030 545.29641 492.54669 543.93684 492.54669 curveto
+543.37035 492.54669 542.77868 492.49004 542.16184 492.37674 curveto
+541.55129 492.26974 540.90613 492.10609 540.22634 491.88579 curveto
+540.22634 490.09191 lineto
+540.86836 490.42551 541.50094 490.67728 542.12408 490.84723 curveto
+542.74721 491.01088 543.36405 491.09270 543.97461 491.09270 curveto
+544.79286 491.09270 545.42229 490.95423 545.86290 490.67728 curveto
+546.30350 490.39404 546.52380 489.99749 546.52381 489.48765 curveto
+546.52380 489.01558 546.36329 488.65366 546.04229 488.40188 curveto
+545.72757 488.15011 545.03205 487.90778 543.95572 487.67489 curveto
+543.35147 487.53327 lineto
+542.27514 487.30668 541.49779 486.96049 541.01942 486.49470 curveto
+540.54106 486.02264 540.30187 485.37747 540.30187 484.55920 curveto
+540.30187 483.56471 540.65435 482.79680 541.35932 482.25548 curveto
+542.06428 481.71418 543.06507 481.44353 544.36171 481.44351 curveto
+545.00372 481.44353 545.60798 481.49073 546.17447 481.58514 curveto
+546.74095 481.67956 547.26338 481.82118 547.74176 482.01000 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+552.76462 490.68672 moveto
+552.76462 496.29496 lineto
+551.01795 496.29496 lineto
+551.01795 481.69843 lineto
+552.76462 481.69843 lineto
+552.76462 483.30349 lineto
+553.12969 482.67406 553.58917 482.20828 554.14308 481.90615 curveto
+554.70327 481.59774 555.37046 481.44353 556.14467 481.44351 curveto
+557.42870 481.44353 558.47041 481.95336 559.26980 482.97303 curveto
+560.07546 483.99272 560.47830 485.33341 560.47831 486.99510 curveto
+560.47830 488.65681 560.07546 489.99749 559.26980 491.01717 curveto
+558.47041 492.03685 557.42870 492.54669 556.14467 492.54669 curveto
+555.37046 492.54669 554.70327 492.39563 554.14308 492.09350 curveto
+553.58917 491.78508 553.12969 491.31615 552.76462 490.68672 curveto
+558.67499 486.99510 moveto
+558.67498 485.71736 558.41061 484.71657 557.88190 483.99271 curveto
+557.35946 483.26258 556.63877 482.89751 555.71980 482.89750 curveto
+554.80083 482.89751 554.07698 483.26258 553.54826 483.99271 curveto
+553.02583 484.71657 552.76462 485.71736 552.76462 486.99510 curveto
+552.76462 488.27285 553.02583 489.27680 553.54826 490.00693 curveto
+554.07698 490.73078 554.80083 491.09270 555.71980 491.09270 curveto
+556.63877 491.09270 557.35946 490.73078 557.88190 490.00693 curveto
+558.41061 489.27680 558.67498 488.27285 558.67499 486.99510 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+563.35796 477.58195 moveto
+565.09519 477.58195 lineto
+565.09519 492.27289 lineto
+563.35796 492.27289 lineto
+563.35796 477.58195 lineto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+568.72072 481.69843 moveto
+570.45795 481.69843 lineto
+570.45795 492.27289 lineto
+568.72072 492.27289 lineto
+568.72072 481.69843 lineto
+568.72072 477.58195 moveto
+570.45795 477.58195 lineto
+570.45795 479.78182 lineto
+568.72072 479.78182 lineto
+568.72072 477.58195 lineto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+575.80182 478.69605 moveto
+575.80182 481.69843 lineto
+579.38014 481.69843 lineto
+579.38014 483.04857 lineto
+575.80182 483.04857 lineto
+575.80182 488.78898 lineto
+575.80182 489.65131 575.91826 490.20521 576.15116 490.45068 curveto
+576.39034 490.69616 576.87185 490.81890 577.59570 490.81890 curveto
+579.38014 490.81890 lineto
+579.38014 492.27289 lineto
+577.59570 492.27289 lineto
+576.25501 492.27289 575.32975 492.02426 574.81991 491.52701 curveto
+574.31007 491.02347 574.05515 490.11079 574.05515 488.78898 curveto
+574.05515 483.04857 lineto
+572.78055 483.04857 lineto
+572.78055 481.69843 lineto
+574.05515 481.69843 lineto
+574.05515 478.69605 lineto
+575.80182 478.69605 lineto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+589.51084 490.68672 moveto
+589.51084 496.29496 lineto
+587.76417 496.29496 lineto
+587.76417 481.69843 lineto
+589.51084 481.69843 lineto
+589.51084 483.30349 lineto
+589.87591 482.67406 590.33540 482.20828 590.88930 481.90615 curveto
+591.44949 481.59774 592.11669 481.44353 592.89089 481.44351 curveto
+594.17493 481.44353 595.21663 481.95336 596.01602 482.97303 curveto
+596.82168 483.99272 597.22452 485.33341 597.22453 486.99510 curveto
+597.22452 488.65681 596.82168 489.99749 596.01602 491.01717 curveto
+595.21663 492.03685 594.17493 492.54669 592.89089 492.54669 curveto
+592.11669 492.54669 591.44949 492.39563 590.88930 492.09350 curveto
+590.33540 491.78508 589.87591 491.31615 589.51084 490.68672 curveto
+595.42121 486.99510 moveto
+595.42120 485.71736 595.15684 484.71657 594.62812 483.99271 curveto
+594.10569 483.26258 593.38499 482.89751 592.46603 482.89750 curveto
+591.54705 482.89751 590.82320 483.26258 590.29449 483.99271 curveto
+589.77205 484.71657 589.51084 485.71736 589.51084 486.99510 curveto
+589.51084 488.27285 589.77205 489.27680 590.29449 490.00693 curveto
+590.82320 490.73078 591.54705 491.09270 592.46603 491.09270 curveto
+593.38499 491.09270 594.10569 490.73078 594.62812 490.00693 curveto
+595.15684 489.27680 595.42120 488.27285 595.42121 486.99510 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+600.10418 477.58195 moveto
+601.84141 477.58195 lineto
+601.84141 492.27289 lineto
+600.10418 492.27289 lineto
+600.10418 477.58195 lineto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+610.27265 486.95734 moveto
+608.86902 486.95734 607.89654 487.11785 607.35524 487.43885 curveto
+606.81392 487.75987 606.54327 488.30747 606.54327 489.08167 curveto
+606.54327 489.69851 606.74469 490.18947 607.14752 490.55454 curveto
+607.55665 490.91332 608.11055 491.09270 608.80922 491.09270 curveto
+609.77225 491.09270 610.54330 490.75281 611.12239 490.07302 curveto
+611.70775 489.38695 612.00044 488.47742 612.00044 487.34444 curveto
+612.00044 486.95734 lineto
+610.27265 486.95734 lineto
+613.73768 486.23978 moveto
+613.73768 492.27289 lineto
+612.00044 492.27289 lineto
+612.00044 490.66784 lineto
+611.60389 491.30986 611.10979 491.78508 610.51813 492.09350 curveto
+609.92646 492.39563 609.20261 492.54669 608.34659 492.54669 curveto
+607.26397 492.54669 606.40165 492.24456 605.75963 491.64031 curveto
+605.12390 491.02976 604.80604 490.21465 604.80604 489.19497 curveto
+604.80604 488.00535 605.20258 487.10841 605.99566 486.50415 curveto
+606.79504 485.89990 607.98466 485.59777 609.56454 485.59776 curveto
+612.00044 485.59776 lineto
+612.00044 485.42782 lineto
+612.00044 484.62845 611.73607 484.01160 611.20736 483.57729 curveto
+610.68492 483.13670 609.94849 482.91639 608.99805 482.91639 curveto
+608.39380 482.91639 607.80528 482.98878 607.23250 483.13354 curveto
+606.65971 483.27832 606.10896 483.49547 605.58024 483.78500 curveto
+605.58024 482.17995 lineto
+606.21596 481.93448 606.83281 481.75195 607.43077 481.63234 curveto
+608.02873 481.50647 608.61095 481.44353 609.17744 481.44351 curveto
+610.70695 481.44353 611.84937 481.84007 612.60470 482.63314 curveto
+613.36001 483.42623 613.73767 484.62845 613.73768 486.23978 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+626.11545 485.89045 moveto
+626.11545 492.27289 lineto
+624.37821 492.27289 lineto
+624.37821 485.94710 lineto
+624.37821 484.94631 624.18308 484.19729 623.79284 483.70003 curveto
+623.40259 483.20279 622.81722 482.95416 622.03673 482.95415 curveto
+621.09887 482.95416 620.35929 483.25314 619.81798 483.85109 curveto
+619.27667 484.44906 619.00601 485.26417 619.00601 486.29643 curveto
+619.00601 492.27289 lineto
+617.25934 492.27289 lineto
+617.25934 481.69843 lineto
+619.00601 481.69843 lineto
+619.00601 483.34125 lineto
+619.42144 482.70554 619.90925 482.23031 620.46944 481.91559 curveto
+621.03593 481.60088 621.68739 481.44353 622.42383 481.44351 curveto
+623.63862 481.44353 624.55759 481.82118 625.18074 482.57649 curveto
+625.80387 483.32552 626.11544 484.43018 626.11545 485.89045 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+638.64428 486.55135 moveto
+638.64428 487.40109 lineto
+630.65680 487.40109 lineto
+630.73232 488.59701 631.09110 489.50969 631.73312 490.13911 curveto
+632.38143 490.76225 633.28152 491.07382 634.43339 491.07382 curveto
+635.10058 491.07382 635.74574 490.99200 636.36889 490.82834 curveto
+636.99831 490.66469 637.62145 490.41921 638.23830 490.09191 curveto
+638.23830 491.73472 lineto
+637.61515 491.99909 636.97628 492.20050 636.32168 492.33898 curveto
+635.66706 492.47745 635.00301 492.54669 634.32953 492.54669 curveto
+632.64265 492.54669 631.30511 492.05573 630.31690 491.07382 curveto
+629.33499 490.09191 628.84403 488.76381 628.84403 487.08952 curveto
+628.84403 485.35859 629.30981 483.98643 630.24137 482.97303 curveto
+631.17922 481.95336 632.44123 481.44353 634.02740 481.44351 curveto
+635.44991 481.44353 636.57345 481.90301 637.39801 482.82197 curveto
+638.22885 483.73465 638.64427 484.97778 638.64428 486.55135 curveto
+636.90705 486.04151 moveto
+636.89446 485.09108 636.62695 484.33261 636.10453 483.76612 curveto
+635.58839 483.19964 634.90231 482.91639 634.04629 482.91639 curveto
+633.07696 482.91639 632.29961 483.19020 631.71424 483.73779 curveto
+631.13516 484.28541 630.80156 485.05646 630.71344 486.05096 curveto
+636.90705 486.04151 lineto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+185.92113 464.62276 moveto
+184.20411 464.62277 182.83832 465.26275 181.82373 466.54268 curveto
+180.81693 467.82264 180.31354 469.56696 180.31354 471.77564 curveto
+180.31354 473.97654 180.81693 475.71696 181.82373 476.99690 curveto
+182.83832 478.27686 184.20411 478.91683 185.92113 478.91683 curveto
+187.63812 478.91683 188.99612 478.27686 189.99511 476.99690 curveto
+191.00189 475.71696 191.50528 473.97654 191.50530 471.77564 curveto
+191.50528 469.56696 191.00189 467.82264 189.99511 466.54268 curveto
+188.99612 465.26275 187.63812 464.62277 185.92113 464.62276 curveto
+185.92113 462.70283 moveto
+188.37175 462.70285 190.33070 463.52623 191.79797 465.17298 curveto
+193.26521 466.81195 193.99884 469.01284 193.99886 471.77564 curveto
+193.99884 474.53066 193.26521 476.73155 191.79797 478.37831 curveto
+190.33070 480.01727 188.37175 480.83675 185.92113 480.83675 curveto
+183.46268 480.83675 181.49593 480.01727 180.02087 478.37831 curveto
+178.55361 476.73936 177.81998 474.53847 177.81998 471.77564 curveto
+177.81998 469.01284 178.55361 466.81195 180.02087 465.17298 curveto
+181.49593 463.52623 183.46268 462.70285 185.92113 462.70283 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+507.14341 418.54103 moveto
+507.14341 414.75500 lineto
+504.02772 414.75500 lineto
+504.02772 413.18771 lineto
+509.03170 413.18771 lineto
+509.03170 419.23970 lineto
+508.29525 419.76213 507.48329 420.15867 506.59580 420.42932 curveto
+505.70829 420.69368 504.76100 420.82587 503.75392 420.82587 curveto
+501.55090 420.82587 499.82626 420.18385 498.57999 418.89980 curveto
+497.34001 417.60947 496.72002 415.81559 496.72002 413.51816 curveto
+496.72002 411.21445 497.34001 409.42057 498.57999 408.13652 curveto
+499.82626 406.84620 501.55090 406.20103 503.75392 406.20102 curveto
+504.67288 406.20103 505.54464 406.31433 506.36921 406.54091 curveto
+507.20004 406.76752 507.96480 407.10112 508.66348 407.54171 curveto
+508.66348 409.57163 lineto
+507.95851 408.97368 507.20949 408.52363 506.41641 408.22149 curveto
+505.62332 407.91938 504.78932 407.76832 503.91442 407.76830 curveto
+502.18977 407.76832 500.89314 408.24983 500.02453 409.21285 curveto
+499.16221 410.17589 498.73105 411.61099 498.73105 413.51816 curveto
+498.73105 415.41905 499.16221 416.85101 500.02453 417.81403 curveto
+500.89314 418.77707 502.18977 419.25858 503.91442 419.25858 curveto
+504.58790 419.25858 505.18901 419.20193 505.71774 419.08863 curveto
+506.24646 418.96904 506.72168 418.78651 507.14341 418.54103 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+516.54712 411.19556 moveto
+515.61555 411.19557 514.87912 411.56064 514.33781 412.29077 curveto
+513.79650 413.01463 513.52584 414.00913 513.52584 415.27428 curveto
+513.52584 416.53944 513.79335 417.53709 514.32837 418.26723 curveto
+514.86968 418.99107 515.60926 419.35300 516.54712 419.35300 curveto
+517.47237 419.35300 518.20566 418.98793 518.74698 418.25778 curveto
+519.28828 417.52765 519.55894 416.53315 519.55895 415.27428 curveto
+519.55894 414.02172 519.28828 413.03036 518.74698 412.30021 curveto
+518.20566 411.56379 517.47237 411.19557 516.54712 411.19556 curveto
+516.54712 409.72269 moveto
+518.05775 409.72270 519.24422 410.21366 520.10655 411.19556 curveto
+520.96886 412.17748 521.40002 413.53705 521.40004 415.27428 curveto
+521.40002 417.00522 520.96886 418.36479 520.10655 419.35300 curveto
+519.24422 420.33491 518.05775 420.82587 516.54712 420.82587 curveto
+515.03018 420.82587 513.84056 420.33491 512.97824 419.35300 curveto
+512.12221 418.36479 511.69420 417.00522 511.69420 415.27428 curveto
+511.69420 413.53705 512.12221 412.17748 512.97824 411.19556 curveto
+513.84056 410.21366 515.03018 409.72270 516.54712 409.72269 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+528.36785 411.19556 moveto
+527.43628 411.19557 526.69985 411.56064 526.15854 412.29077 curveto
+525.61723 413.01463 525.34657 414.00913 525.34657 415.27428 curveto
+525.34657 416.53944 525.61408 417.53709 526.14910 418.26723 curveto
+526.69041 418.99107 527.42999 419.35300 528.36785 419.35300 curveto
+529.29310 419.35300 530.02639 418.98793 530.56771 418.25778 curveto
+531.10901 417.52765 531.37967 416.53315 531.37968 415.27428 curveto
+531.37967 414.02172 531.10901 413.03036 530.56771 412.30021 curveto
+530.02639 411.56379 529.29310 411.19557 528.36785 411.19556 curveto
+528.36785 409.72269 moveto
+529.87847 409.72270 531.06495 410.21366 531.92728 411.19556 curveto
+532.78959 412.17748 533.22075 413.53705 533.22076 415.27428 curveto
+533.22075 417.00522 532.78959 418.36479 531.92728 419.35300 curveto
+531.06495 420.33491 529.87847 420.82587 528.36785 420.82587 curveto
+526.85091 420.82587 525.66129 420.33491 524.79897 419.35300 curveto
+523.94294 418.36479 523.51493 417.00522 523.51493 415.27428 curveto
+523.51493 413.53705 523.94294 412.17748 524.79897 411.19556 curveto
+525.66129 410.21366 526.85091 409.72270 528.36785 409.72269 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+543.04934 411.58266 moveto
+543.04934 405.86113 lineto
+544.78657 405.86113 lineto
+544.78657 420.55206 lineto
+543.04934 420.55206 lineto
+543.04934 418.96589 lineto
+542.68426 419.59533 542.22163 420.06425 541.66144 420.37267 curveto
+541.10754 420.67480 540.44034 420.82587 539.65985 420.82587 curveto
+538.38210 420.82587 537.34039 420.31603 536.53472 419.29635 curveto
+535.73534 418.27667 535.33565 416.93598 535.33566 415.27428 curveto
+535.33565 413.61258 535.73534 412.27190 536.53472 411.25221 curveto
+537.34039 410.23254 538.38210 409.72270 539.65985 409.72269 curveto
+540.44034 409.72270 541.10754 409.87691 541.66144 410.18532 curveto
+542.22163 410.48746 542.68426 410.95324 543.04934 411.58266 curveto
+537.12954 415.27428 moveto
+537.12953 416.55203 537.39075 417.55597 537.91318 418.28611 curveto
+538.44190 419.00996 539.16574 419.37188 540.08472 419.37188 curveto
+541.00368 419.37188 541.72753 419.00996 542.25626 418.28611 curveto
+542.78497 417.55597 543.04933 416.55203 543.04934 415.27428 curveto
+543.04933 413.99654 542.78497 412.99574 542.25626 412.27189 curveto
+541.72753 411.54176 541.00368 411.17669 540.08472 411.17668 curveto
+539.16574 411.17669 538.44190 411.54176 537.91318 412.27189 curveto
+537.39075 412.99574 537.12953 413.99654 537.12954 415.27428 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+561.26195 410.28918 moveto
+561.26195 411.93200 lineto
+560.77098 411.68023 560.26114 411.49140 559.73243 411.36551 curveto
+559.20370 411.23963 558.65609 411.17669 558.08961 411.17668 curveto
+557.22729 411.17669 556.57897 411.30887 556.14467 411.57322 curveto
+555.71665 411.83759 555.50264 412.23413 555.50265 412.76285 curveto
+555.50264 413.16569 555.65685 413.48355 555.96528 413.71643 curveto
+556.27370 413.94304 556.89369 414.16019 557.82525 414.36790 curveto
+558.42006 414.50008 lineto
+559.65374 414.76444 560.52865 415.13896 561.04479 415.62361 curveto
+561.56721 416.10198 561.82843 416.77233 561.82844 417.63465 curveto
+561.82843 418.61656 561.43818 419.39391 560.65769 419.96669 curveto
+559.88348 420.53947 558.81660 420.82587 557.45703 420.82587 curveto
+556.89054 420.82587 556.29887 420.76922 555.68203 420.65592 curveto
+555.07148 420.54892 554.42632 420.38526 553.74653 420.16496 curveto
+553.74653 418.37108 lineto
+554.38855 418.70468 555.02113 418.95646 555.64427 419.12640 curveto
+556.26740 419.29005 556.88425 419.37188 557.49480 419.37188 curveto
+558.31305 419.37188 558.94249 419.23340 559.38309 418.95645 curveto
+559.82369 418.67321 560.04399 418.27667 560.04400 417.76683 curveto
+560.04399 417.29476 559.88348 416.93283 559.56248 416.68106 curveto
+559.24776 416.42929 558.55224 416.18696 557.47592 415.95406 curveto
+556.87166 415.81244 lineto
+555.79533 415.58585 555.01798 415.23966 554.53962 414.77388 curveto
+554.06125 414.30181 553.82206 413.65665 553.82206 412.83838 curveto
+553.82206 411.84388 554.17454 411.07598 554.87951 410.53466 curveto
+555.58447 409.99336 556.58527 409.72270 557.88190 409.72269 curveto
+558.52391 409.72270 559.12817 409.76991 559.69466 409.86431 curveto
+560.26114 409.95874 560.78357 410.10036 561.26195 410.28918 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+566.28482 418.96589 moveto
+566.28482 424.57413 lineto
+564.53814 424.57413 lineto
+564.53814 409.97761 lineto
+566.28482 409.97761 lineto
+566.28482 411.58266 lineto
+566.64988 410.95324 567.10937 410.48746 567.66327 410.18532 curveto
+568.22346 409.87691 568.89066 409.72270 569.66486 409.72269 curveto
+570.94890 409.72270 571.99061 410.23254 572.78999 411.25221 curveto
+573.59565 412.27190 573.99849 413.61258 573.99850 415.27428 curveto
+573.99849 416.93598 573.59565 418.27667 572.78999 419.29635 curveto
+571.99061 420.31603 570.94890 420.82587 569.66486 420.82587 curveto
+568.89066 420.82587 568.22346 420.67480 567.66327 420.37267 curveto
+567.10937 420.06425 566.64988 419.59533 566.28482 418.96589 curveto
+572.19518 415.27428 moveto
+572.19517 413.99654 571.93081 412.99574 571.40210 412.27189 curveto
+570.87966 411.54176 570.15896 411.17669 569.24000 411.17668 curveto
+568.32102 411.17669 567.59718 411.54176 567.06846 412.27189 curveto
+566.54603 412.99574 566.28481 413.99654 566.28482 415.27428 curveto
+566.28481 416.55203 566.54603 417.55597 567.06846 418.28611 curveto
+567.59718 419.00996 568.32102 419.37188 569.24000 419.37188 curveto
+570.15896 419.37188 570.87966 419.00996 571.40210 418.28611 curveto
+571.93081 417.55597 572.19517 416.55203 572.19518 415.27428 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+576.87815 405.86113 moveto
+578.61538 405.86113 lineto
+578.61538 420.55206 lineto
+576.87815 420.55206 lineto
+576.87815 405.86113 lineto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+582.24091 409.97761 moveto
+583.97814 409.97761 lineto
+583.97814 420.55206 lineto
+582.24091 420.55206 lineto
+582.24091 409.97761 lineto
+582.24091 405.86113 moveto
+583.97814 405.86113 lineto
+583.97814 408.06099 lineto
+582.24091 408.06099 lineto
+582.24091 405.86113 lineto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+589.32202 406.97522 moveto
+589.32202 409.97761 lineto
+592.90034 409.97761 lineto
+592.90034 411.32774 lineto
+589.32202 411.32774 lineto
+589.32202 417.06816 lineto
+589.32201 417.93048 589.43846 418.48438 589.67135 418.72986 curveto
+589.91053 418.97534 590.39205 419.09808 591.11590 419.09808 curveto
+592.90034 419.09808 lineto
+592.90034 420.55206 lineto
+591.11590 420.55206 lineto
+589.77520 420.55206 588.84994 420.30344 588.34010 419.80619 curveto
+587.83026 419.30264 587.57534 418.38997 587.57534 417.06816 curveto
+587.57534 411.32774 lineto
+586.30074 411.32774 lineto
+586.30074 409.97761 lineto
+587.57534 409.97761 lineto
+587.57534 406.97522 lineto
+589.32202 406.97522 lineto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+603.03104 418.96589 moveto
+603.03104 424.57413 lineto
+601.28437 424.57413 lineto
+601.28437 409.97761 lineto
+603.03104 409.97761 lineto
+603.03104 411.58266 lineto
+603.39611 410.95324 603.85559 410.48746 604.40949 410.18532 curveto
+604.96968 409.87691 605.63688 409.72270 606.41109 409.72269 curveto
+607.69512 409.72270 608.73683 410.23254 609.53622 411.25221 curveto
+610.34188 412.27190 610.74471 413.61258 610.74473 415.27428 curveto
+610.74471 416.93598 610.34188 418.27667 609.53622 419.29635 curveto
+608.73683 420.31603 607.69512 420.82587 606.41109 420.82587 curveto
+605.63688 420.82587 604.96968 420.67480 604.40949 420.37267 curveto
+603.85559 420.06425 603.39611 419.59533 603.03104 418.96589 curveto
+608.94140 415.27428 moveto
+608.94139 413.99654 608.67703 412.99574 608.14832 412.27189 curveto
+607.62588 411.54176 606.90518 411.17669 605.98622 411.17668 curveto
+605.06725 411.17669 604.34340 411.54176 603.81468 412.27189 curveto
+603.29225 412.99574 603.03104 413.99654 603.03104 415.27428 curveto
+603.03104 416.55203 603.29225 417.55597 603.81468 418.28611 curveto
+604.34340 419.00996 605.06725 419.37188 605.98622 419.37188 curveto
+606.90518 419.37188 607.62588 419.00996 608.14832 418.28611 curveto
+608.67703 417.55597 608.94139 416.55203 608.94140 415.27428 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+613.62437 405.86113 moveto
+615.36161 405.86113 lineto
+615.36161 420.55206 lineto
+613.62437 420.55206 lineto
+613.62437 405.86113 lineto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+623.79285 415.23651 moveto
+622.38921 415.23652 621.41674 415.39702 620.87543 415.71803 curveto
+620.33412 416.03904 620.06346 416.58665 620.06347 417.36084 curveto
+620.06346 417.97769 620.26488 418.46865 620.66772 418.83371 curveto
+621.07685 419.19249 621.63075 419.37188 622.32942 419.37188 curveto
+623.29244 419.37188 624.06350 419.03199 624.64258 418.35220 curveto
+625.22794 417.66612 625.52063 416.75659 625.52064 415.62361 curveto
+625.52064 415.23651 lineto
+623.79285 415.23651 lineto
+627.25787 414.51896 moveto
+627.25787 420.55206 lineto
+625.52064 420.55206 lineto
+625.52064 418.94701 lineto
+625.12409 419.58903 624.62999 420.06425 624.03833 420.37267 curveto
+623.44665 420.67480 622.72281 420.82587 621.86679 420.82587 curveto
+620.78416 420.82587 619.92184 420.52374 619.27982 419.91948 curveto
+618.64410 419.30894 618.32623 418.49382 618.32623 417.47414 curveto
+618.32623 416.28452 618.72277 415.38758 619.51586 414.78332 curveto
+620.31524 414.17907 621.50486 413.87695 623.08474 413.87694 curveto
+625.52064 413.87694 lineto
+625.52064 413.70699 lineto
+625.52063 412.90762 625.25627 412.29078 624.72755 411.85646 curveto
+624.20512 411.41587 623.46868 411.19557 622.51825 411.19556 curveto
+621.91399 411.19557 621.32547 411.26795 620.75269 411.41271 curveto
+620.17991 411.55749 619.62916 411.77465 619.10043 412.06418 curveto
+619.10043 410.45912 lineto
+619.73616 410.21366 620.35300 410.03112 620.95096 409.91152 curveto
+621.54892 409.78564 622.13114 409.72270 622.69764 409.72269 curveto
+624.22715 409.72270 625.36957 410.11924 626.12489 410.91232 curveto
+626.88020 411.70541 627.25786 412.90762 627.25787 414.51896 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+639.63564 414.16962 moveto
+639.63564 420.55206 lineto
+637.89841 420.55206 lineto
+637.89841 414.22627 lineto
+637.89840 413.22548 637.70328 412.47646 637.31304 411.97920 curveto
+636.92278 411.48196 636.33741 411.23334 635.55692 411.23333 curveto
+634.61906 411.23334 633.87948 411.53231 633.33818 412.13027 curveto
+632.79686 412.72823 632.52621 413.54335 632.52621 414.57561 curveto
+632.52621 420.55206 lineto
+630.77954 420.55206 lineto
+630.77954 409.97761 lineto
+632.52621 409.97761 lineto
+632.52621 411.62043 lineto
+632.94163 410.98471 633.42944 410.50949 633.98964 410.19476 curveto
+634.55612 409.88006 635.20758 409.72270 635.94402 409.72269 curveto
+637.15882 409.72270 638.07779 410.10036 638.70094 410.85567 curveto
+639.32406 411.60470 639.63563 412.70935 639.63564 414.16962 curveto
+fill
+grestore
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+652.16449 414.83053 moveto
+652.16449 415.68026 lineto
+644.17700 415.68026 lineto
+644.25253 416.87619 644.61130 417.78886 645.25333 418.41829 curveto
+645.90164 419.04143 646.80172 419.35300 647.95359 419.35300 curveto
+648.62078 419.35300 649.26595 419.27117 649.88909 419.10752 curveto
+650.51851 418.94387 651.14165 418.69839 651.75850 418.37108 curveto
+651.75850 420.01390 lineto
+651.13536 420.27826 650.49648 420.47968 649.84188 420.61815 curveto
+649.18727 420.75663 648.52322 420.82587 647.84973 420.82587 curveto
+646.16285 420.82587 644.82531 420.33491 643.83711 419.35300 curveto
+642.85519 418.37108 642.36423 417.04298 642.36423 415.36869 curveto
+642.36423 413.63776 642.83001 412.26560 643.76157 411.25221 curveto
+644.69942 410.23254 645.96143 409.72270 647.54761 409.72269 curveto
+648.97011 409.72270 650.09365 410.18219 650.91821 411.10115 curveto
+651.74905 412.01383 652.16448 413.25696 652.16449 414.83053 curveto
+650.42726 414.32069 moveto
+650.41466 413.37025 650.14715 412.61179 649.62473 412.04529 curveto
+649.10859 411.47881 648.42251 411.19557 647.56649 411.19556 curveto
+646.59716 411.19557 645.81981 411.46937 645.23444 412.01697 curveto
+644.65536 412.56458 644.32176 413.33564 644.23365 414.33013 curveto
+650.42726 414.32069 lineto
+fill
+grestore
+gsave
+1.0000000 0.00000000 0.00000000 setrgbcolor
+newpath
+651.26163 502.54148 moveto
+497.01057 504.24910 lineto
+eofill
+grestore
+1.0000000 0.00000000 0.00000000 setrgbcolor
+[11.300000 11.300000] 15.255000 setdash
+2.8250000 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+651.26163 502.54148 moveto
+497.01057 504.24910 lineto
+stroke
+gsave
+0.00000000 0.00000000 1.0000000 setrgbcolor
+newpath
+497.86958 429.14908 moveto
+651.41276 431.16939 lineto
+eofill
+grestore
+0.00000000 0.00000000 1.0000000 setrgbcolor
+[2.8250000 5.6500000] 0.00000000 setdash
+2.8250000 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+497.86958 429.14908 moveto
+651.41276 431.16939 lineto
+stroke
+gsave
+1.0000000 0.00000000 0.00000000 setrgbcolor
+newpath
+411.50154 424.60339 moveto
+331.19441 688.25321 lineto
+eofill
+grestore
+1.0000000 0.00000000 0.00000000 setrgbcolor
+[11.300000 11.300000] 1.4125000 setdash
+2.8250000 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+411.50154 424.60339 moveto
+331.19441 688.25321 lineto
+stroke
+0.00000000 0.00000000 0.00000000 setrgbcolor
+[] 0 setdash
+1.9800000 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+471.23616 574.05496 moveto
+264.65997 667.99914 lineto
+stroke
+gsave [1.0814248 -0.49179709 0.49179709 1.0814248 259.25285 670.45813] concat
+gsave
+0.00000000 0.00000000 0.00000000 setrgbcolor
+newpath
+8.7185878 4.0337352 moveto
+-2.2072895 0.016013256 lineto
+8.7185884 -4.0017078 lineto
+6.9730900 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto
+closepath
+eofill
+grestore
+grestore
+gsave
+0.00000000 0.00000000 1.0000000 setrgbcolor
+newpath
+99.364400 490.80371 moveto
+409.98630 570.53512 lineto
+eofill
+grestore
+0.00000000 0.00000000 1.0000000 setrgbcolor
+[2.8250000 2.8250000] 0.00000000 setdash
+2.8250000 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+99.364400 490.80371 moveto
+409.98630 570.53512 lineto
+stroke
+grestore
+showpage
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/approximate_sampling.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/approximate_sampling.fig	(revision 282)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/approximate_sampling.fig	(revision 282)
@@ -0,0 +1,33 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 54 -1 -1 0.000 0 0 0 0 5362.500 2437.500 6075 2100 6150 2475 6075 2775
+1 3 0 2 0 4 48 -1 20 0.000 1 0.0000 2400 2475 106 106 2400 2475 2506 2475
+1 3 0 2 0 7 50 -1 14 0.000 1 0.0000 7875 1875 691 691 7875 1875 8566 1875
+1 3 0 2 0 7 50 -1 14 0.000 1 0.0000 8274 2957 370 370 8274 2957 8625 3075
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2400 2475 9300 2100
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2400 3300 9300 2625
+2 1 0 1 0 7 54 -1 -1 0.000 0 0 -1 0 0 2
+	 2400 2475 12075 1950
+2 1 0 1 0 7 54 -1 -1 0.000 0 0 7 0 0 2
+	 2400 2475 12225 2700
+2 1 0 10 4 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 9300 2100 9300 2625
+2 2 0 3 0 11 59 -1 20 0.000 0 0 -1 0 0 5
+	 -450 1500 2400 1500 2400 4200 -450 4200 -450 1500
+2 2 0 3 0 11 59 -1 20 0.000 0 0 7 0 0 5
+	 9300 1725 11550 1725 11550 3975 9300 3975 9300 1725
+2 1 0 0 0 6 62 -1 20 0.000 0 0 -1 0 0 5
+	 2400 2475 2400 3300 9300 2625 9300 2100 2400 2475
+4 0 0 54 -1 0 32 0.0000 4 330 1650 150 2925 view cell\001
+4 0 0 54 -1 0 32 0.0000 4 435 1125 9600 3450 object\001
+4 0 0 59 -1 0 32 0.0000 4 330 1800 6825 825 occluders\001
+4 0 0 54 -1 32 36 0.0000 4 285 345 6450 2550 a\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/portals_explosion.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/portals_explosion.fig	(revision 266)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/portals_explosion.fig	(revision 266)
@@ -0,0 +1,59 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 34 #ff8c0a
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+0 38 #ffd10a
+2 2 0 6 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 2400 2100 9300 2100 9300 7500 2400 7500 2400 2100
+2 1 0 6 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 3900 5175 3900 5775
+2 1 0 6 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 3900 6900 3900 7500
+2 1 0 6 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 3900 2100 3900 2700
+2 1 0 6 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 3900 3675 3900 4275
+2 1 0 6 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 6600 2925 6600 3525
+2 1 0 6 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 6600 6000 6600 6600
+2 1 0 2 35 7 60 0 -1 0.000 0 0 -1 0 0 2
+	 3900 2100 3900 7500
+2 1 0 2 35 7 60 0 -1 0.000 0 0 -1 0 0 2
+	 6600 2100 6600 7500
+2 1 0 2 35 7 40 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3150 3225 7500 2325
+2 1 0 2 35 7 40 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3225 2925 8325 4950
+2 1 0 2 35 7 40 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3225 2625 7050 7350
+2 1 0 2 35 7 40 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3000 4950 6900 2325
+2 1 0 2 35 7 40 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2850 4725 7350 4725
+2 1 0 2 35 7 40 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3075 4275 7350 7350
+2 1 0 2 35 7 40 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3075 6825 7050 2250
+2 1 0 2 35 7 40 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3000 6450 7725 4125
+2 1 0 2 35 7 40 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3000 6150 7875 7050
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/vfp.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/vfp.fig	(revision 266)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/vfp.fig	(revision 266)
@@ -0,0 +1,53 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 35 #ff7a0a
+0 36 #ffb10a
+0 37 #ffc10a
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 2700 4200 121 121 2700 4200 2821 4200
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 7500 2250 75 75 7500 2250 7575 2250
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 5700 3450 75 75 5700 3450 5775 3450
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 6600 5400 75 75 6600 5400 6675 5400
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 6000 4575 75 75 6000 4575 6075 4575
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 6900 3900 75 75 6900 3900 6975 3900
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 1 3
+	1 1 1.00 60.00 120.00
+	1 1 1.00 60.00 120.00
+	 4500 5400 4500 6300 5175 6750
+2 1 0 1 35 7 60 0 -1 0.000 0 0 -1 0 0 3
+	 5100 3525 5700 3450 5700 6300
+2 1 0 2 0 7 67 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2685 4185 11850 510
+2 1 0 2 0 7 67 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 2700 4200 9855 2445
+2 1 0 2 0 7 67 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 2775 4200 11355 3570
+2 1 0 2 0 7 67 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 2700 4200 9840 4980
+2 1 0 2 0 7 67 0 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 2700 4200 10785 6690
+2 1 0 1 35 7 60 0 -1 0.000 0 0 7 0 0 3
+	 5085 4455 6000 4575 6000 6525
+2 1 0 1 35 7 60 0 -1 0.000 0 0 7 0 0 3
+	 5100 5025 6600 5400 6600 6750
+2 1 0 1 35 7 60 0 -1 0.000 0 0 7 0 0 3
+	 5100 3975 6900 3900 6900 6975
+2 1 0 1 35 7 60 0 -1 0.000 0 0 7 0 0 3
+	 5100 3000 7500 2250 7500 7275
+2 3 0 3 0 7 60 0 -1 0.000 0 0 7 0 0 5
+	 5100 2400 8100 900 8100 7575 5100 6000 5100 2400
+4 0 0 50 0 0 24 0.0000 4 330 1260 5400 1425 viewport\001
+4 0 0 50 0 0 24 0.0000 4 180 195 4800 6900 x\001
+4 0 0 50 0 0 24 0.0000 4 255 165 4275 5850 y\001
+4 0 0 50 0 0 24 0.0000 4 330 1425 1875 3675 viewpoint\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/vfr.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/vfr.fig	(revision 266)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/vfr.fig	(revision 266)
@@ -0,0 +1,40 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 34 #ff8c0a
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+0 38 #ffd10a
+2 1 0 8 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 2925 3675 3900 4350
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 7200 900 12000 900 12000 5400 7200 5400 7200 900
+2 1 0 8 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 1802 2916 3002 3141
+2 3 1 4 0 27 30 0 -1 6.000 0 0 -1 0 0 5
+	 8156 1881 10856 1431 10631 4206 8981 4581 8156 1881
+2 1 0 2 0 7 85 0 14 0.000 0 0 7 0 0 4
+	 7200 1050 12000 1350 12000 2700 7200 2475
+2 3 0 0 0 36 90 0 20 0.000 0 0 -1 0 0 5
+	 8175 1875 10875 1425 10650 4200 9000 4575 8175 1875
+2 1 0 2 0 7 85 0 14 0.000 0 0 7 0 0 4
+	 7125 3600 12000 3150 12000 4725 7200 4725
+2 2 0 4 0 34 50 0 20 0.000 0 0 7 0 0 5
+	 1500 4200 2400 4200 2400 5100 1500 5100 1500 4200
+2 2 0 4 0 34 50 0 20 0.000 0 0 7 0 0 5
+	 4200 1200 5100 1200 5100 2100 4200 2100 4200 1200
+2 1 0 2 0 36 85 0 20 0.000 0 0 -1 0 0 6
+	 1500 5100 1500 4200 4200 1200 5100 1200 5100 2100 2400 5100
+4 0 0 85 0 0 24 0.0000 4 330 1860 2400 600 primal space\001
+4 0 0 85 0 0 24 0.0000 4 330 1455 8625 600 line space\001
+4 0 0 10 0 0 24 0.0000 4 255 420 7575 4275 B*\001
+4 0 0 85 0 0 24 0.0000 4 255 240 4275 4425 B\001
+4 0 0 85 0 0 24 0.0000 4 255 255 2175 2700 A\001
+4 0 0 10 0 0 24 0.0000 4 255 435 7500 1950 A*\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency.fig	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency.fig	(revision 243)
@@ -0,0 +1,203 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 900 1200 5400 1800
+6 1800 1200 2700 1800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 1800 1200 2700 1200 2700 1800 1800 1800 1800 1200
+4 0 0 50 0 0 24 0.0000 4 255 420 2025 1650 R2\001
+-6
+6 2700 1200 3600 1800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 2700 1200 3600 1200 3600 1800 2700 1800 2700 1200
+4 0 0 50 0 0 24 0.0000 4 255 420 2925 1650 R3\001
+-6
+6 3600 1200 4500 1800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 3600 1200 4500 1200 4500 1800 3600 1800 3600 1200
+4 0 0 50 0 0 24 0.0000 4 255 420 3825 1650 R4\001
+-6
+6 900 1200 1800 1800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 900 1200 1800 1200 1800 1800 900 1800 900 1200
+4 0 0 50 0 0 24 0.0000 4 255 420 1125 1650 R1\001
+-6
+6 4500 1200 5400 1800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 4500 1200 5400 1200 5400 1800 4500 1800 4500 1200
+4 0 0 50 0 0 24 0.0000 4 330 450 4725 1650 Q5\001
+-6
+-6
+6 900 4800 5400 5400
+6 1800 4800 2700 5400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 1800 4800 2700 4800 2700 5400 1800 5400 1800 4800
+4 0 0 50 0 0 24 0.0000 4 255 420 2025 5250 R2\001
+-6
+6 2700 4800 3600 5400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 2700 4800 3600 4800 3600 5400 2700 5400 2700 4800
+4 0 0 50 0 0 24 0.0000 4 255 420 2925 5250 R3\001
+-6
+6 3600 4800 4500 5400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 3600 4800 4500 4800 4500 5400 3600 5400 3600 4800
+4 0 0 50 0 0 24 0.0000 4 255 420 3825 5250 R4\001
+-6
+6 900 4800 1800 5400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 900 4800 1800 4800 1800 5400 900 5400 900 4800
+4 0 0 50 0 0 24 0.0000 4 255 420 1125 5250 R1\001
+-6
+6 4500 4800 5400 5400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 4500 4800 5400 4800 5400 5400 4500 5400 4500 4800
+4 0 0 50 0 0 24 0.0000 4 330 450 4725 5250 Q5\001
+-6
+-6
+6 7200 4800 9900 5400
+6 7200 4800 9900 5400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 7200 4800 8100 4800 8100 5400 7200 5400 7200 4800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 8100 4800 9000 4800 9000 5400 8100 5400 8100 4800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 9000 4800 9900 4800 9900 5400 9000 5400 9000 4800
+4 0 0 50 0 0 24 0.0000 4 255 420 7425 5250 R5\001
+4 0 0 50 0 0 24 0.0000 4 255 420 8325 5250 R6\001
+4 0 0 50 0 0 24 0.0000 4 255 420 9225 5250 R7\001
+-6
+-6
+6 1800 2400 6300 3000
+6 1800 2400 6300 3000
+6 1800 2400 6300 3000
+6 2700 2400 3600 3000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 2700 2400 3600 2400 3600 3000 2700 3000 2700 2400
+4 0 0 50 0 0 24 0.0000 4 255 420 2925 2850 R2\001
+-6
+6 3600 2400 4500 3000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 3600 2400 4500 2400 4500 3000 3600 3000 3600 2400
+4 0 0 50 0 0 24 0.0000 4 255 420 3825 2850 R3\001
+-6
+6 4500 2400 5400 3000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 4500 2400 5400 2400 5400 3000 4500 3000 4500 2400
+4 0 0 50 0 0 24 0.0000 4 255 420 4725 2850 R4\001
+-6
+6 1800 2400 2700 3000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 1800 2400 2700 2400 2700 3000 1800 3000 1800 2400
+4 0 0 50 0 0 24 0.0000 4 255 420 2025 2850 R1\001
+-6
+6 5400 2400 6300 3000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 5400 2400 6300 2400 6300 3000 5400 3000 5400 2400
+4 0 0 50 0 0 24 0.0000 4 330 450 5625 2850 Q5\001
+-6
+-6
+-6
+-6
+6 7200 1200 9000 1800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 7200 1200 8100 1200 8100 1800 7200 1800 7200 1200
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 8100 1200 9000 1200 9000 1800 8100 1800 8100 1200
+4 0 0 50 0 0 24 0.0000 4 255 420 7425 1650 R5\001
+4 0 0 50 0 0 24 0.0000 4 330 450 8325 1650 Q6\001
+-6
+6 1800 6000 6300 6600
+6 1800 6000 6300 6600
+6 1800 6000 6300 6600
+6 2700 6000 3600 6600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 2700 6000 3600 6000 3600 6600 2700 6600 2700 6000
+4 0 0 50 0 0 24 0.0000 4 255 420 2925 6450 R2\001
+-6
+6 3600 6000 4500 6600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 3600 6000 4500 6000 4500 6600 3600 6600 3600 6000
+4 0 0 50 0 0 24 0.0000 4 255 420 3825 6450 R3\001
+-6
+6 4500 6000 5400 6600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 4500 6000 5400 6000 5400 6600 4500 6600 4500 6000
+4 0 0 50 0 0 24 0.0000 4 255 420 4725 6450 R4\001
+-6
+6 1800 6000 2700 6600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 1800 6000 2700 6000 2700 6600 1800 6600 1800 6000
+4 0 0 50 0 0 24 0.0000 4 255 420 2025 6450 R1\001
+-6
+6 5400 6000 6300 6600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 5400 6000 6300 6000 6300 6600 5400 6600 5400 6000
+4 0 0 50 0 0 24 0.0000 4 330 450 5625 6450 Q5\001
+-6
+-6
+-6
+-6
+6 8100 6000 10800 6600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 8100 6000 9000 6000 9000 6600 8100 6600 8100 6000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 9000 6000 9900 6000 9900 6600 9000 6600 9000 6000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 9900 6000 10800 6000 10800 6600 9900 6600 9900 6000
+4 0 0 50 0 0 24 0.0000 4 255 420 8325 6450 R5\001
+4 0 0 50 0 0 24 0.0000 4 255 420 9300 6450 R6\001
+4 0 0 50 0 0 24 0.0000 4 255 420 10125 6450 R7\001
+-6
+6 9000 2400 10800 3000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 9000 2400 9900 2400 9900 3000 9000 3000 9000 2400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 9900 2400 10800 2400 10800 3000 9900 3000 9900 2400
+4 0 0 50 0 0 24 0.0000 4 255 420 9225 2850 R5\001
+4 0 0 50 0 0 24 0.0000 4 330 450 10125 2850 Q6\001
+-6
+6 11700 1200 13500 1800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 11700 1200 12600 1200 12600 1800 11700 1800 11700 1200
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 12600 1200 13500 1200 13500 1800 12600 1800 12600 1200
+4 0 0 50 0 0 24 0.0000 4 255 420 11925 1650 R6\001
+4 0 0 50 0 0 24 0.0000 4 330 450 12825 1650 Q7\001
+-6
+6 13500 2400 15300 3000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 14400 2400 15300 2400 15300 3000 14400 3000 14400 2400
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 13500 2400 14400 2400 14400 3000 13500 3000 13500 2400
+4 0 0 50 0 0 24 0.0000 4 255 420 13725 2850 R6\001
+4 0 0 50 0 0 24 0.0000 4 330 450 14625 2850 Q7\001
+-6
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 5400 4800 6300 4800 6300 5400 5400 5400 5400 4800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 6300 4800 7200 4800 7200 5400 6300 5400 6300 4800
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 6300 6000 7200 6000 7200 6600 6300 6600 6300 6000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 7200 6000 8100 6000 8100 6600 7200 6600 7200 6000
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 16200 1200 17100 1200 17100 1800 16200 1800 16200 1200
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 17100 2400 18000 2400 18000 3000 17100 3000 17100 2400
+4 0 0 50 0 0 24 0.0000 4 330 450 5625 5250 Q6\001
+4 0 0 50 0 0 24 0.0000 4 330 450 6525 5250 Q7\001
+4 0 0 50 0 0 24 0.0000 4 255 735 -1200 1725 CPU\001
+4 0 0 50 0 0 24 0.0000 4 255 765 -1200 2925 GPU\001
+4 0 0 50 0 0 24 0.0000 4 255 735 -1125 5250 CPU\001
+4 0 0 50 0 0 24 0.0000 4 255 765 -1125 6525 GPU\001
+4 0 0 50 0 0 24 0.0000 4 330 450 6525 6450 Q6\001
+4 0 0 50 0 0 24 0.0000 4 330 450 7425 6450 Q7\001
+4 0 0 50 0 0 24 0.0000 4 255 420 16500 1650 R7\001
+4 0 0 50 0 0 24 0.0000 4 255 420 17325 2850 R7\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/rot2new.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/rot2new.fig	(revision 249)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/rot2new.fig	(revision 249)
@@ -0,0 +1,139 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 7034 1213 7568 1670
+4 0 0 50 0 18 30 0.0000 4 345 345 7034 1558 O\001
+4 0 0 50 0 18 24 0.0000 4 270 195 7373 1670 1\001
+-6
+6 7080 3883 7637 4303
+4 0 0 50 0 18 30 0.0000 4 345 345 7080 4228 O\001
+4 0 0 50 0 18 24 0.0000 4 270 195 7442 4303 2\001
+-6
+6 8325 2338 8867 2758
+4 0 0 50 0 18 30 0.0000 4 345 345 8325 2683 O\001
+4 0 0 50 0 18 24 0.0000 4 270 195 8672 2758 3\001
+-6
+6 2862 1952 3404 2372
+4 0 0 50 0 18 30 0.0000 4 345 345 2862 2297 O\001
+4 0 0 50 0 18 24 0.0000 4 270 195 3209 2372 3\001
+-6
+6 1800 3632 2357 4052
+4 0 0 50 0 18 30 0.0000 4 345 345 1800 3977 O\001
+4 0 0 50 0 18 24 0.0000 4 270 195 2162 4052 2\001
+-6
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 -111 1665 70 70 -111 1665 -41 1665
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2 4402 70 70 2 4402 72 4402
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 1644 3090 70 70 1644 3090 1714 3090
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2912 3217 70 70 2912 3217 2982 3217
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 1769 1082 70 70 1769 1082 1839 1082
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 1650 4650 70 70 1650 4650 1720 4650
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2582 1354 70 70 2582 1354 2652 1354
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 1867 2321 70 70 1867 2321 1937 2321
+2 1 0 9 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 1650 3075 1650 4650
+2 1 0 9 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 2582 1309 2925 3225
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 6327 379 6012 6043
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 10482 2989 5367 3694
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 10677 3709 5502 5164
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 9012 379 10197 5689
+2 1 1 2 0 7 50 0 -1 6.000 0 0 7 0 0 2
+	 10329 3515 8541 3242
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 9732 724 5352 1234
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 10137 1444 5457 2644
+2 1 1 2 0 7 50 0 -1 6.000 0 0 7 0 0 2
+	 9231 1360 6239 1765
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 6249 1768 5504 1862
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 10027 1240 9220 1351
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 8534 3242 5507 2803
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 -88 1693 3797 4745
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 -51 2900 4397 3373
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 -88 1663 4389 4003
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 3
+	 -31 2893 1649 3058 4004 4903
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 3
+	 -76 1648 2924 3223 4499 3388
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 0 4425 2775 -900
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 -75 1650 3975 375
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 -66 1647 2550 6375
+2 1 0 0 0 7 56 0 18 0.000 0 0 -1 0 0 8
+	 -88 1655 1667 4685 3182 4865 2687 5705 1637 5960 902 6785
+	 92 6530 -118 1670
+2 1 0 0 0 7 55 0 18 0.000 0 0 -1 0 0 9
+	 -36 2885 -88 1663 2927 3230 4104 3335 4262 3853 3669 4070
+	 3677 4640 1674 3073 -28 2893
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 0 4425 3375 4875
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 3
+	 -73 1670 1637 4670 3407 4880
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 3
+	 47 4399 1757 1054 4082 349
+2 1 0 0 0 7 55 0 18 0.000 0 0 -1 0 0 8
+	 17 4384 1772 1069 3902 379 2987 -491 1547 -131 782 -641
+	 -193 -296 -13 4414
+2 1 0 9 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 -114 1682 -1 4407
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 -229 -600 103 6980
+2 1 0 9 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 1769 1052 1862 2314
+2 1 0 0 0 7 55 0 17 0.000 0 0 -1 0 0 5
+	 6216 2453 6291 1133 9104 803 9299 1666 6209 2453
+2 1 0 2 0 7 55 0 16 0.000 0 0 -1 0 0 5
+	 6074 5016 6156 3591 9629 3111 9816 3966 6066 5001
+2 1 0 2 0 7 55 0 15 0.000 0 0 -1 0 0 6
+	 6182 2885 6216 2451 9291 1671 9621 3111 8586 3246 6182 2915
+4 0 0 50 0 18 30 0.0000 4 345 300 -675 3150 S\001
+4 0 0 50 0 18 20 0.0000 4 150 165 6042 559 a\001
+4 0 0 50 0 18 20 0.0000 4 210 180 9327 394 b\001
+4 0 0 50 0 18 24 0.0000 4 285 345 9087 274 s*\001
+4 0 0 50 0 18 24 0.0000 4 285 360 5427 3956 o*\001
+4 0 0 50 0 18 24 0.0000 4 285 360 5382 5434 o*\001
+4 0 0 50 0 18 24 0.0000 4 285 360 5420 2381 o*\001
+4 0 0 50 0 18 20 0.0000 4 210 330 5622 2517 1b\001
+4 0 0 50 0 18 24 0.0000 4 285 360 5427 994 o*\001
+4 0 0 50 0 18 20 0.0000 4 195 315 5637 1129 1a\001
+4 0 0 50 0 18 20 0.0000 4 210 330 5584 5554 2b\001
+4 0 0 50 0 18 20 0.0000 4 195 315 5614 4099 2a\001
+4 0 0 50 0 18 20 0.0000 4 210 330 10152 3476 3b\001
+4 0 0 50 0 18 24 0.0000 4 285 360 9920 3409 o*\001
+4 0 0 50 0 18 24 0.0000 4 285 360 9342 1121 o*\001
+4 0 0 50 0 18 20 0.0000 4 195 315 9552 1234 3a\001
+4 0 0 50 0 18 28 0.0000 4 240 240 3674 3257 e\001
+4 0 0 50 0 18 28 0.0000 4 315 405 8384 3662 e*\001
+4 0 0 50 0 18 24 0.0000 4 285 345 5847 499 s*\001
+4 0 0 50 0 18 24 0.0000 4 270 195 3300 4125 3\001
+4 0 0 50 0 18 28 0.0000 4 315 480 6300 3375 Q*\001
+4 0 0 50 0 18 28 0.0000 4 315 480 7814 5533 Q*\001
+4 0 0 50 0 18 24 0.0000 4 270 195 8100 5670 2\001
+4 0 0 50 0 18 24 0.0000 4 270 195 7950 735 1\001
+4 0 0 50 0 18 24 0.0000 4 270 195 1455 5805 2\001
+4 0 0 50 0 18 30 0.0000 4 345 345 1920 1875 O\001
+4 0 0 50 0 18 24 0.0000 4 270 195 2205 2040 1\001
+4 0 0 50 0 18 28 0.0000 4 315 315 839 328 Q\001
+4 0 0 50 0 18 24 0.0000 4 270 195 1155 495 1\001
+4 0 0 50 0 18 28 0.0000 4 315 315 1125 5625 Q\001
+4 0 0 50 0 18 24 0.0000 4 270 195 6600 3525 3\001
+4 0 0 50 0 18 28 0.0000 4 315 315 3000 3975 Q\001
+4 0 0 50 0 18 28 0.0000 4 315 480 7649 598 Q*\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/ipswaths.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/ipswaths.fig	(revision 249)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/ipswaths.fig	(revision 249)
@@ -0,0 +1,63 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 34 #ff8c0a
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+0 38 #ffd10a
+1 1 0 2 -1 7 0 0 -1 0.000 1 0.0000 3900 1500 1875 525 3900 1500 5775 2025
+1 1 0 2 -1 7 0 0 -1 0.000 1 0.0000 3900 5400 1875 525 3900 5400 5775 5925
+1 3 0 2 -1 7 0 0 0 0.000 1 0.0000 3300 2400 75 75 3300 2400 3375 2400
+1 3 0 2 -1 7 0 0 0 0.000 1 0.0000 3750 3075 75 75 3750 3075 3825 3075
+1 3 0 2 -1 7 0 0 0 0.000 1 0.0000 3675 3750 75 75 3675 3750 3750 3750
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 2700 4800 4650 2700 2700 2250 3150 3300 2700 4800
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 3150 3300 4650 2700
+2 1 1 2 -1 7 0 0 -1 6.000 0 0 -1 0 0 4
+	 2700 2250 1500 3075 1050 2250 2625 2250
+2 1 1 2 -1 7 0 0 -1 6.000 0 0 -1 0 0 2
+	 3150 3300 1425 3600
+2 1 1 2 -1 7 0 0 -1 6.000 0 0 -1 0 0 2
+	 2700 4800 1200 4575
+2 1 1 2 -1 7 0 0 -1 6.000 0 0 -1 0 0 2
+	 2700 4800 1350 5025
+2 1 0 1 0 7 0 0 0 0.000 0 0 7 0 1 2
+	1 1 1.00 60.00 120.00
+	 3525 2325 5925 825
+2 1 0 1 0 7 0 0 0 0.000 0 0 7 0 1 2
+	1 1 1.00 60.00 120.00
+	 4125 2550 6600 2175
+2 1 0 1 0 7 0 0 0 0.000 0 0 7 0 1 2
+	1 1 1.00 60.00 120.00
+	 4125 3075 6525 3075
+2 1 0 1 0 7 0 0 0 0.000 0 0 7 0 1 2
+	1 1 1.00 60.00 120.00
+	 3825 3375 6450 4050
+3 0 0 2 -1 7 0 0 -1 0.000 0 0 0 3
+	 2025 1575 2700 3375 2025 5400
+	 0.000 1.000 0.000
+3 0 0 2 -1 7 0 0 -1 0.000 0 0 0 3
+	 5775 1575 5100 3450 5775 5475
+	 0.000 1.000 0.000
+3 0 0 2 34 7 2 0 -1 0.000 0 0 0 3
+	 3300 2400 3750 2700 3750 3075
+	 0.000 1.000 0.000
+3 0 0 2 34 7 2 0 -1 0.000 0 0 0 3
+	 3750 3075 3825 3300 3675 3750
+	 0.000 1.000 0.000
+4 0 -1 0 0 -1 20 0.0000 4 255 720 7050 2400 (edge)\001
+4 0 -1 0 0 -1 20 0.0000 4 195 900 6900 3150 2D-face\001
+4 0 -1 0 0 -1 20 0.0000 4 255 1290 750 3375 other edges\001
+4 0 -1 0 0 -1 20 0.0000 4 195 1320 6825 4125 conic trace \001
+4 0 -1 0 0 -1 20 0.0000 4 255 2475 6300 4425 (mapping of a swath)\001
+4 0 -1 0 0 -1 20 0.0000 4 195 900 6900 2100 1D-face\001
+4 0 -1 0 0 -1 20 0.0000 4 255 2730 6300 750 extremal Pluecker point\001
+4 0 -1 0 0 -1 20 0.0000 4 255 3435 6000 1050 (mapping of an extremal line)\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/ot1.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/ot1.fig	(revision 266)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/ot1.fig	(revision 266)
@@ -0,0 +1,182 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 34 #ff8c0a
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+0 38 #ffd10a
+6 9225 2925 10425 3225
+4 0 0 50 0 0 24 0.0000 4 30 135 9231 3179 -\001
+4 0 0 50 0 0 24 0.0000 4 180 210 10205 3179 +\001
+-6
+6 10875 1650 12150 1875
+4 0 0 50 0 0 24 0.0000 4 30 135 10896 1874 -\001
+4 0 0 50 0 0 24 0.0000 4 180 210 11870 1874 +\001
+-6
+6 7725 4875 9000 5175
+4 0 0 50 0 0 24 0.0000 4 30 135 7796 5136 -\001
+4 0 0 50 0 0 24 0.0000 4 180 210 8770 5136 +\001
+-6
+6 10050 3975 11325 4200
+4 0 0 50 0 0 24 0.0000 4 30 135 10121 4176 -\001
+4 0 0 50 0 0 24 0.0000 4 180 210 11095 4176 +\001
+-6
+6 11775 3900 13050 4200
+4 0 0 50 0 0 24 0.0000 4 30 135 11846 4146 -\001
+4 0 0 50 0 0 24 0.0000 4 180 210 12820 4146 +\001
+-6
+6 12525 5625 13800 5850
+4 0 0 50 0 0 24 0.0000 4 30 135 12566 5826 -\001
+4 0 0 50 0 0 24 0.0000 4 180 210 13540 5826 +\001
+-6
+6 12675 3000 13950 3225
+4 0 0 50 0 0 24 0.0000 4 30 135 12696 3239 -\001
+4 0 0 50 0 0 24 0.0000 4 180 210 13670 3239 +\001
+-6
+6 13650 3900 14925 4125
+4 0 0 50 0 0 24 0.0000 4 30 135 13716 4139 -\001
+4 0 0 50 0 0 24 0.0000 4 180 210 14690 4139 +\001
+-6
+6 13125 4725 14400 5025
+4 0 0 50 0 0 24 0.0000 4 30 135 13146 4994 -\001
+4 0 0 50 0 0 24 0.0000 4 180 210 14120 4994 +\001
+-6
+6 8475 3975 9750 4200
+4 0 0 50 0 0 24 0.0000 4 30 135 8496 4184 -\001
+4 0 0 50 0 0 24 0.0000 4 180 210 9470 4184 +\001
+-6
+1 3 0 3 -1 7 0 0 -1 0.000 1 0.0000 9794 2900 300 300 9794 2900 10094 3200
+1 3 0 3 -1 7 0 0 -1 0.000 1 0.0000 11459 1595 300 300 11459 1595 11759 1895
+1 3 0 3 -1 7 0 0 -1 0.000 1 0.0000 8366 4865 300 300 8366 4865 8666 5165
+1 3 0 3 -1 7 0 0 -1 0.000 1 0.0000 10691 3905 300 300 10691 3905 10991 4205
+1 3 0 3 -1 7 0 0 -1 0.000 1 0.0000 12416 3875 300 300 12416 3875 12716 4175
+1 3 0 3 -1 7 0 0 -1 0.000 1 0.0000 13136 5555 300 300 13136 5555 13436 5855
+1 3 0 3 -1 7 0 0 -1 0.000 1 0.0000 13259 2960 300 300 13259 2960 13559 3260
+1 3 0 3 -1 7 0 0 -1 0.000 1 0.0000 14279 3860 300 300 14279 3860 14579 4160
+1 3 0 3 -1 7 0 0 -1 0.000 1 0.0000 13709 4715 300 300 13709 4715 14009 5015
+1 3 0 3 -1 7 0 0 -1 0.000 1 0.0000 9059 3905 300 300 9059 3905 9359 4205
+2 1 0 2 0 7 45 0 -1 0.000 0 0 -1 0 0 2
+	 6225 5700 -975 1725
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 3000 3900 -1236 4448
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 75 4275 1314 7223
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 2964 3888 460 500
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 3954 3138 834 1008
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 2634 3393 5389 2873
+2 1 1 4 0 7 50 0 -1 4.000 0 0 -1 0 0 3
+	 2410 2120 1120 3650 3955 3155
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 14226 5300 14526 5300 14526 5600 14226 5600 14226 5300
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 14811 4445 15111 4445 15111 4745 14811 4745 14811 4445
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 9532 3103 9231 3470
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 10048 3101 10431 3515
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 9441 4505 9741 4505 9741 4805 9441 4805 9441 4505
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 11197 1798 10086 2570
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 11713 1796 12996 2630
+2 3 0 5 0 36 50 0 22 0.000 0 0 -1 0 0 5
+	 75 4275 900 6225 4425 4725 3000 3900 75 4275
+2 3 0 5 0 36 55 0 24 0.000 0 0 -1 0 0 4
+	 2400 2100 1125 3675 3975 3150 2400 2100
+2 3 0 5 0 34 50 0 18 0.000 0 0 -1 0 0 4
+	 1575 2025 75 4275 3000 3900 1575 2025
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 8122 5078 7873 5383
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 8608 5071 8893 5391
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 8721 5381 9021 5381 9021 5681 8721 5681 8721 5381
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 10447 4118 10198 4423
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 10933 4111 11218 4431
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 11046 4421 11346 4421 11346 4721 11046 4721 11046 4421
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 12172 4088 11923 4393
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 12658 4081 12943 4401
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 12771 4391 13071 4391 13071 4691 12771 4691 12771 4391
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 12892 5768 12643 6073
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 13378 5761 13663 6081
+2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 13491 6071 13791 6071 13791 6371 13491 6371 13491 6071
+2 2 0 2 0 36 50 0 22 0.000 0 0 -1 0 0 5
+	 7716 5381 8016 5381 8016 5681 7716 5681 7716 5381
+2 2 0 2 0 34 50 0 18 0.000 0 0 -1 0 0 5
+	 10041 4421 10341 4421 10341 4721 10041 4721 10041 4421
+2 2 0 2 0 34 50 0 18 0.000 0 0 -1 0 0 5
+	 11766 4391 12066 4391 12066 4691 11766 4691 11766 4391
+2 2 0 2 0 36 50 0 24 0.000 0 0 -1 0 0 5
+	 12486 6071 12786 6071 12786 6371 12486 6371 12486 6071
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 12997 3163 12771 3470
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 13513 3161 13941 3566
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 14017 4063 13791 4370
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 14533 4061 14961 4466
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 13447 4918 13221 5225
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 13963 4916 14391 5321
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 8797 4108 8571 4415
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 9313 4106 9636 4460
+4 0 0 50 0 0 24 0.0000 4 255 180 2529 6039 d\001
+4 0 0 50 0 0 24 0.0000 4 255 90 3234 2544 i\001
+4 0 0 50 0 0 24 0.0000 4 255 195 3414 3624 h\001
+4 0 0 50 0 0 26 0.0000 4 345 270 597 3846 P\001
+4 0 0 50 0 0 26 0.0000 4 345 270 2529 2946 P\001
+4 0 0 50 0 0 24 0.0000 4 255 345 747 4033 2a\001
+4 0 0 50 0 0 24 0.0000 4 255 345 2735 3115 3a\001
+4 0 0 50 0 0 24 0.0000 4 180 165 3789 4239 a\001
+4 0 0 50 0 0 24 0.0000 4 255 105 564 3219 f\001
+4 0 0 50 0 0 24 0.0000 4 255 180 9716 3069 b\001
+4 0 0 50 0 0 24 0.0000 4 255 180 8231 4989 d\001
+4 0 0 50 0 0 24 0.0000 4 255 105 10646 4059 f\001
+4 0 0 50 0 0 24 0.0000 4 180 165 11381 1734 a\001
+4 0 0 50 0 0 24 0.0000 4 180 165 13181 3084 e\001
+4 0 0 50 0 0 24 0.0000 4 255 105 12311 3999 f\001
+4 0 0 50 0 0 24 0.0000 4 255 195 14201 4014 h\001
+4 0 0 50 0 0 24 0.0000 4 255 90 13676 4869 i\001
+4 0 0 50 0 0 24 0.0000 4 330 90 13091 5709 j\001
+4 0 0 50 0 0 26 0.0000 4 345 270 7742 6113 P\001
+4 0 0 50 0 0 26 0.0000 4 345 270 10086 5176 P\001
+4 0 0 50 0 0 26 0.0000 4 345 270 11811 5138 P\001
+4 0 0 50 0 0 26 0.0000 4 345 270 12505 6807 P\001
+4 0 0 50 0 0 24 0.0000 4 255 180 7891 6320 1\001
+4 0 0 50 0 0 24 0.0000 4 255 345 10273 5345 2a\001
+4 0 0 50 0 0 24 0.0000 4 255 360 11979 5308 2b\001
+4 0 0 50 0 0 24 0.0000 4 255 345 12692 6958 3a\001
+4 0 0 50 0 0 24 0.0000 4 255 180 1824 3864 g\001
+4 0 0 50 0 0 24 0.0000 4 255 180 1854 4434 b\001
+4 0 0 50 0 0 24 0.0000 4 180 165 174 5439 c\001
+4 0 0 50 0 0 24 0.0000 4 180 165 1614 2004 e\001
+4 0 0 50 0 0 24 0.0000 4 330 90 2079 2289 j\001
+4 0 0 50 0 0 26 0.0000 4 345 270 1347 2841 P\001
+4 0 0 50 0 0 24 0.0000 4 255 360 1512 2998 2b\001
+4 0 0 50 0 0 26 0.0000 4 345 270 1742 5060 P\001
+4 0 0 50 0 0 24 0.0000 4 255 180 1880 5218 1\001
+4 0 0 50 0 0 24 0.0000 4 180 165 8981 4059 c\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/vls.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/vls.fig	(revision 266)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/vls.fig	(revision 266)
@@ -0,0 +1,115 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 34 #ff8c0a
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+0 38 #ffd10a
+6 7800 3525 8250 3975
+4 0 0 50 0 0 24 0.0000 4 255 450 7800 3825 O*\001
+4 0 0 50 0 0 20 0.0000 4 195 135 8025 3975 0\001
+-6
+6 9075 4350 9675 4800
+6 9300 4575 9675 4800
+4 0 0 50 0 0 20 0.0000 4 195 330 9300 4800 0.5\001
+-6
+4 0 0 50 0 0 24 0.0000 4 255 450 9075 4650 O*\001
+-6
+6 4725 2475 5175 2925
+4 0 0 50 0 0 24 0.0000 4 255 450 4725 2775 O*\001
+4 0 0 50 0 0 20 0.0000 4 195 135 4950 2925 0\001
+-6
+6 4725 3600 5325 4050
+6 4950 3825 5325 4050
+4 0 0 50 0 0 20 0.0000 4 195 330 4950 4050 0.5\001
+-6
+4 0 0 50 0 0 24 0.0000 4 255 450 4725 3900 O*\001
+-6
+6 4650 4875 5100 5325
+4 0 0 50 0 0 24 0.0000 4 255 450 4650 5175 O*\001
+4 0 0 50 0 0 20 0.0000 4 195 135 4875 5325 1\001
+-6
+1 1 0 3 0 27 50 0 20 0.000 1 0.0000 4425 2775 225 525 4425 2775 4650 2775
+1 3 0 4 0 34 50 0 20 0.000 1 0.0000 2657 3314 242 242 2657 3314 2899 3314
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 906 2280 75 75 906 2280 981 2280
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 906 3015 75 75 906 3015 981 3015
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 891 3810 75 75 891 3810 966 3810
+1 1 0 4 0 34 50 0 20 0.000 1 0.0000 4426 2774 225 525 4426 2774 4651 2774
+1 1 0 4 0 34 50 0 20 0.000 1 0.0000 10785 4558 240 561 10785 4558 11025 4558
+1 1 0 4 0 34 50 0 20 0.000 1 0.0000 9547 3705 216 528 9547 3705 9763 3705
+1 1 0 4 0 34 50 0 20 0.000 1 0.0000 8175 2775 225 525 8175 2775 8400 2775
+1 1 0 4 0 34 40 0 -1 0.000 1 0.0000 4428 4408 240 561 4428 4408 4668 4408
+1 1 0 4 0 34 55 0 20 0.000 1 0.0000 4427 4409 240 561 4427 4409 4667 4409
+1 1 0 4 0 34 50 0 20 0.000 1 0.0000 4414 3631 216 528 4414 3631 4630 3631
+1 1 0 4 0 34 49 0 -1 0.000 1 0.0000 4426 2745 225 525 4426 2745 4651 2745
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 3600 2400 5400 1500 5400 6975 3600 5400 3600 2400
+2 1 0 6 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 900 2250 900 3825
+2 1 0 2 0 27 50 0 -1 0.000 0 0 -1 1 1 3
+	1 1 2.00 120.00 240.00
+	1 1 2.00 120.00 240.00
+	 3150 4575 3150 5550 3750 6150
+2 1 0 2 0 27 50 0 -1 0.000 0 0 -1 1 1 3
+	1 1 2.00 120.00 240.00
+	1 1 2.00 120.00 240.00
+	 6600 4650 6600 5625 7200 6225
+2 1 0 2 0 27 50 0 20 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 6600 5625 7350 5625
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 900 3825 4425 2250
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 906 3015 4416 3135
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 900 2250 4350 3825
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 900 3825 4425 3300
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 936 3015 4416 4155
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 900 2250 4386 4980
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 9675 2400 12073 1485 12073 6975 9673 5400 9673 2400
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 7275 2400 9075 1500 9075 6975 7275 5400 7273 2400
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 9075 1500 12075 1500
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 9075 6975 12075 6975
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 7275 5400 9675 5400
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 7275 2400 9675 2400
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 8475 2400 10575 1500 10575 6975 8475 5400 8475 2400
+2 1 0 2 0 27 50 0 20 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 150 3600 150 2625
+2 1 0 3 0 37 80 0 20 0.000 0 0 -1 0 0 4
+	 8175 3300 10725 5100 10800 3975 8250 2250
+4 0 0 50 0 0 24 0.0000 4 255 450 10725 5550 O*\001
+4 0 0 50 0 0 20 0.0000 4 195 135 10950 5700 1\001
+4 0 0 50 0 0 24 0.0000 4 255 270 2550 2925 O\001
+4 0 0 50 0 0 20 0.0000 4 195 135 525 2325 1\001
+4 0 0 50 0 0 20 0.0000 4 195 330 375 3075 0.5\001
+4 0 0 50 0 0 20 0.0000 4 195 135 525 3900 0\001
+4 0 0 50 0 0 20 0.0000 4 195 135 9000 7350 0\001
+4 0 0 50 0 0 20 0.0000 4 195 330 10425 7350 0.5\001
+4 0 0 50 0 0 20 0.0000 4 195 135 12075 7350 1\001
+4 0 0 50 0 0 24 0.0000 4 330 1455 9075 1200 line space\001
+4 0 0 50 0 0 24 0.0000 4 330 1260 3825 1200 viewport\001
+4 0 0 50 0 0 24 0.0000 4 300 1260 375 1200 segment\001
+4 0 0 50 0 0 24 0.0000 4 255 165 6300 5250 y\001
+4 0 0 50 0 0 24 0.0000 4 180 195 6600 6150 x\001
+4 0 0 50 0 0 24 0.0000 4 180 195 3150 6075 x\001
+4 0 0 50 0 0 24 0.0000 4 255 165 2850 5175 y\001
+4 0 0 50 0 0 24 0.0000 4 180 195 -150 3300 u\001
+4 0 0 50 0 0 24 0.0000 4 180 195 6900 5475 u\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/swaths.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/swaths.fig	(revision 249)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/swaths.fig	(revision 249)
@@ -0,0 +1,118 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 34 #ff8c0a
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+0 38 #ffd10a
+1 3 0 1 -1 7 10 0 0 0.000 1 0.0000 8854 2363 60 60 8854 2363 8914 2363
+1 3 0 1 -1 7 10 0 0 0.000 1 0.0000 7428 3511 60 60 7428 3511 7488 3511
+1 3 0 1 -1 7 10 0 0 0.000 1 0.0000 7824 3946 60 60 7824 3946 7884 3946
+1 3 0 1 -1 7 10 0 0 0.000 1 0.0000 8141 2956 60 60 8141 2956 8201 2956
+1 3 0 1 -1 7 10 0 0 0.000 1 0.0000 3326 1073 60 60 3326 1073 3386 1073
+1 3 0 1 -1 7 10 0 0 0.000 1 0.0000 3959 2023 60 60 3959 2023 4019 2023
+1 3 0 1 -1 7 10 0 0 0.000 1 0.0000 2059 2656 60 60 2059 2656 2119 2656
+1 3 0 1 -1 7 10 0 0 0.000 1 0.0000 7943 2006 60 60 7943 2006 8003 2006
+1 3 0 1 -1 7 10 0 0 0.000 1 0.0000 7864 2956 60 60 7864 2956 7924 2956
+1 3 0 1 -1 7 10 0 0 0.000 1 0.0000 6518 4228 60 60 6518 4228 6578 4228
+2 1 1 3 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 7575 4200 8022 4817
+2 1 1 4 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 7270 3352 6399 3748
+2 1 1 4 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 8181 4382 8181 4857
+2 1 1 4 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 9012 2956 9210 3946
+2 1 1 4 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 7428 2956 7112 3273
+2 1 1 4 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 7943 2006 6953 2521
+2 1 1 4 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 9606 2679 9408 3432
+2 1 1 1 -1 7 10 0 -1 4.000 0 0 -1 0 0 1
+	 2692 4240
+2 1 0 3 -1 7 3 0 -1 0.000 0 0 -1 0 0 2
+	 2059 2656 4078 123
+2 1 0 2 -1 7 10 0 -1 0.000 0 0 -1 1 0 2
+	0 0 2.00 120.00 240.00
+	 4593 242 5305 1271
+2 1 0 4 -1 7 10 0 -1 0.000 0 0 -1 0 0 3
+	 1425 3923 2059 2656 2692 4240
+2 1 1 4 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 2692 4240 2336 4755
+2 1 1 4 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 1425 3923 1504 4319
+2 1 1 4 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 2059 1706 1979 2221
+2 1 0 4 -1 7 10 0 -1 0.000 0 0 -1 0 0 3
+	 2059 1706 3326 1073 3959 2023
+2 1 1 4 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 3959 2023 3642 2815
+2 1 1 4 -1 7 10 0 -1 4.000 0 0 -1 0 0 2
+	 6215 4229 5859 4665
+2 1 0 2 34 7 5 0 -1 0.000 0 0 7 0 0 2
+	 2059 2656 4038 756
+2 1 0 2 34 7 5 0 -1 0.000 0 0 7 0 0 2
+	 2059 2656 4236 1073
+2 1 0 2 34 7 5 0 -1 0.000 0 0 7 0 0 2
+	 2059 2656 4395 1350
+2 1 0 2 34 7 5 0 -1 0.000 0 0 7 0 0 2
+	 2098 2617 4593 1588
+2 1 0 2 34 7 5 0 -1 0.000 0 0 -1 0 0 2
+	 3840 440 4711 1786
+2 1 0 3 -1 7 3 0 -1 0.000 0 0 -1 0 0 2
+	 2059 2656 5266 1588
+2 1 0 3 -1 7 3 0 -1 0.000 0 0 -1 0 0 2
+	 7745 4817 8062 265
+2 1 0 4 -1 7 10 0 -1 0.000 0 0 -1 0 0 2
+	 7943 2006 9606 2679
+2 1 0 4 -1 7 10 0 -1 0.000 0 0 -1 0 0 2
+	 7428 2956 9012 2956
+2 1 0 4 -1 7 10 0 -1 0.000 0 0 -1 0 0 2
+	 7270 3352 8181 4382
+2 1 0 4 -1 7 10 0 -1 0.000 0 0 -1 0 0 2
+	 6201 4223 7575 4200
+2 1 0 3 -1 7 3 0 -1 0.000 0 0 -1 0 0 2
+	 6320 4382 9764 1650
+3 0 0 2 -1 7 10 0 -1 0.000 0 1 0 4
+	0 0 2.00 120.00 240.00
+	 9674 1302 9254 1254 8906 985 8621 447
+	 0.000 1.000 1.000 0.000
+3 0 0 2 34 7 5 0 -1 0.000 0 0 0 2
+	 8265 1230 7710 3851
+	 0.000 0.000
+3 0 0 2 34 7 5 0 -1 0.000 0 0 0 4
+	 9289 2006 8814 1927 8379 1531 8022 700
+	 0.000 1.000 1.000 0.000
+3 0 0 2 34 7 5 0 -1 0.000 0 0 0 2
+	 8494 1626 7607 3748
+	 0.000 0.000
+3 0 0 2 34 7 5 0 -1 0.000 0 0 0 2
+	 8732 1848 7520 3661
+	 0.000 0.000
+3 0 0 2 34 7 5 0 -1 0.000 0 0 0 2
+	 9009 1951 7457 3574
+	 0.000 0.000
+4 0 -1 10 0 0 20 0.0000 4 195 180 7219 2204 E\001
+4 0 -1 10 0 0 20 0.0000 4 195 195 8100 4125 B\001
+4 0 -1 10 0 0 20 0.0000 4 195 195 8625 3300 C\001
+4 0 -1 10 0 0 20 0.0000 4 195 720 9900 1650 EEEE\001
+4 0 -1 10 0 0 20 0.0000 4 195 540 8625 1575 EEE\001
+4 0 -1 10 0 0 20 0.0000 4 195 570 7875 150 VEE\001
+4 0 -1 10 0 0 20 0.0000 4 195 210 3600 1350 D\001
+4 0 -1 10 0 0 20 0.0000 4 195 195 2400 1350 C\001
+4 0 -1 10 0 0 20 0.0000 4 195 180 3450 2625 E\001
+4 0 -1 10 0 0 20 0.0000 4 195 210 1275 3525 A\001
+4 0 -1 10 0 0 20 0.0000 4 195 420 4066 82 VV\001
+4 0 -1 10 0 0 20 0.0000 4 195 420 5360 1703 VV\001
+4 0 -1 10 0 0 20 0.0000 4 195 390 4368 1020 VE\001
+4 0 -1 10 0 0 20 0.0000 4 195 210 6900 4545 A\001
+4 0 -1 10 0 0 20 0.0000 4 195 210 9420 2475 D\001
+4 0 -1 10 0 0 20 0.0000 4 195 195 2550 3525 B\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/sampling.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/sampling.fig	(revision 277)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/sampling.fig	(revision 277)
@@ -0,0 +1,56 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 2 0 4 50 -1 20 0.000 1 0.0000 2932 3599 375 375 2932 3599 3307 3599
+1 3 0 2 0 7 50 -1 16 0.000 1 0.0000 4624 3790 318 318 4624 3790 4942 3790
+1 3 0 2 0 7 50 -1 16 0.000 1 0.0000 5850 4125 168 168 5850 4125 5925 4275
+1 3 0 2 0 7 50 -1 16 0.000 1 0.0000 7500 2775 530 530 7500 2775 7875 3150
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3150 3300 4500 2025
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 3300 3450 7500 2100
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3300 3600 6900 3000
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3225 3375 8400 3450
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2925 4050 2775 5325
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3375 3750 7125 5250
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2700 3225 2550 2100
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 3225 3975 5250 5250
+2 2 0 5 15 7 55 -1 -1 0.000 0 0 -1 0 0 5
+	 2100 1800 8700 1800 8700 5700 2100 5700 2100 1800
+2 1 0 5 15 7 55 -1 -1 0.000 0 0 7 0 0 2
+	 2100 3000 6300 3000
+2 1 0 5 15 7 55 -1 -1 0.000 0 0 7 0 0 2
+	 2100 4350 4200 4350
+2 1 0 5 15 7 55 -1 -1 0.000 0 0 7 0 0 2
+	 4200 3000 4200 5700
+2 1 0 5 15 7 55 -1 -1 0.000 0 0 7 0 0 2
+	 5250 3000 5250 4500
+2 1 0 5 15 7 55 -1 -1 0.000 0 0 7 0 0 2
+	 4200 4500 6300 4500
+2 1 0 5 15 7 55 -1 -1 0.000 0 0 7 0 0 2
+	 6300 1800 6300 5700
+2 1 0 5 15 7 55 -1 -1 0.000 0 0 7 0 0 2
+	 6300 3900 8700 3900
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 7 1 0 2
+	1 1 2.00 120.00 240.00
+	 3375 3675 4275 3750
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/ve_degen.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/ve_degen.fig	(revision 249)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/ve_degen.fig	(revision 249)
@@ -0,0 +1,40 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 34 #ff8c0a
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+0 38 #ffd10a
+6 5040 3067 5265 3474
+4 0 0 20 0 0 24 0.0000 4 255 225 5040 3322 P\001
+4 0 0 10 0 0 18 0.0000 4 195 135 5130 3474 3\001
+-6
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 2184 2478 67 67 2184 2478 2251 2478
+1 3 0 1 0 0 10 0 20 0.000 1 0.0000 4734 2403 67 67 4734 2403 4801 2403
+1 3 0 1 0 0 10 0 20 0.000 1 0.0000 5244 2688 67 67 5244 2688 5311 2688
+1 3 0 1 0 0 10 0 20 0.000 1 0.0000 5754 2988 67 67 5754 2988 5821 2988
+2 3 0 4 0 7 50 0 -1 0.000 0 0 -1 0 0 4
+	 1650 3000 2175 2475 2400 3750 1650 3000
+2 3 0 3 0 7 30 0 20 0.000 0 0 -1 0 0 5
+	 5250 1350 5775 1650 5775 3000 5250 2700 5250 1350
+2 3 0 3 0 7 30 0 20 0.000 0 0 -1 0 0 5
+	 4725 1050 5250 1350 5250 2700 4725 2400 4725 1050
+2 3 0 3 0 7 60 0 20 0.000 0 0 -1 0 0 5
+	 5550 2850 5550 4200 4717 3660 4717 2385 5550 2850
+2 1 1 3 0 7 15 0 -1 8.000 0 0 -1 0 0 2
+	 4725 2850 4725 2400
+2 1 0 1 0 34 50 0 24 0.000 0 0 -1 0 0 5
+	 2169 2475 6144 2340 6024 2730 7029 3180 2169 2475
+4 0 0 20 0 0 24 0.0000 4 255 225 4884 2043 P\001
+4 0 0 20 0 0 24 0.0000 4 255 225 1929 3063 P\001
+4 0 0 20 0 0 24 0.0000 4 255 225 5439 2238 P\001
+4 0 0 10 0 0 18 0.0000 4 195 150 2034 3200 S\001
+4 0 0 10 0 0 18 0.0000 4 195 135 4989 2180 1\001
+4 0 0 10 0 0 18 0.0000 4 195 135 5529 2390 2\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/dummy.eps
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/dummy.eps	(revision 283)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/dummy.eps	(revision 283)
@@ -0,0 +1,105 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: dummy.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Fri Sep 16 18:25:53 2005
+%%For: matt@sakura (matt,U-COMPUTERGRAPHIK\matt,S-1-5-21-1259991482-2646404242-2158041560-3508)
+%%BoundingBox: 0 0 474 443
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 443 moveto 0 0 lineto 474 0 lineto 474 443 lineto closepath clip newpath
+-102.8 495.7 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Polyline
+7.500 slw
+n 1725 900 m 9600 900 l 9600 8250 l 1725 8250 l
+ cp gs col0 s gr 
+/Helvetica-Bold ff 300.00 scf sf
+4725 4575 m
+gs 1 -1 sc (CENSORED) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/cut.eps
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/cut.eps	(revision 283)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/cut.eps	(revision 283)
@@ -0,0 +1,764 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: cut.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Fri Sep 16 18:25:52 2005
+%%For: matt@sakura (matt,U-COMPUTERGRAPHIK\matt,S-1-5-21-1259991482-2646404242-2158041560-3508)
+%%BoundingBox: 0 0 979 330
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 330 moveto 0 0 lineto 979 0 lineto 979 330 lineto closepath clip newpath
+12.7 381.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 55
+/Times-Roman ff 360.00 scf sf
+2792 3750 m
+gs 1 -1 sc (V) col0 sh gr
+% Polyline
+15.000 slw
+n 14026 2733 m
+ 13651 3258 l gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+12417 1400 m
+gs 1 -1 sc (V) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+15093 3783 m
+gs 1 -1 sc (V) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+11493 3783 m
+gs 1 -1 sc (V) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+14193 2583 m
+gs 1 -1 sc (V) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+10593 2583 m
+gs 1 -1 sc (V) col0 sh gr
+% Polyline
+n 14626 2733 m
+ 15001 3258 l gs col0 s gr 
+% Polyline
+n 9676 3933 m
+ 9376 4458 l gs col0 s gr 
+% Polyline
+n 10126 3933 m
+ 10351 4458 l gs col0 s gr 
+% Polyline
+n 13201 3933 m
+ 12901 4458 l gs col0 s gr 
+% Polyline
+n 13651 3933 m
+ 13876 4458 l gs col0 s gr 
+% Polyline
+n 13801 5133 m
+ 13501 5658 l gs col0 s gr 
+% Polyline
+n 14251 5133 m
+ 14476 5658 l gs col0 s gr 
+% Polyline
+n 5325 2700 m
+ 4950 3225 l gs col0 s gr 
+% Polyline
+n 5925 2700 m
+ 6300 3225 l gs col0 s gr 
+% Polyline
+n 975 3900 m
+ 675 4425 l gs col0 s gr 
+% Polyline
+n 1425 3900 m
+ 1650 4425 l gs col0 s gr 
+% Polyline
+n 4500 3900 m
+ 4200 4425 l gs col0 s gr 
+% Polyline
+n 4950 3900 m
+ 5175 4425 l gs col0 s gr 
+% Polyline
+n 5100 5100 m
+ 4800 5625 l gs col0 s gr 
+% Polyline
+n 3600 1425 m
+ 2325 2100 l gs col0 s gr 
+% Polyline
+n 1725 2700 m
+ 1350 3225 l gs col0 s gr 
+% Polyline
+n 2325 2700 m
+ 2700 3225 l gs col0 s gr 
+% Polyline
+n 5550 5100 m
+ 5775 5625 l gs col0 s gr 
+% Polyline
+n 12301 1458 m
+ 11026 2133 l gs col0 s gr 
+% Polyline
+n 10426 2733 m
+ 10051 3258 l gs col0 s gr 
+% Polyline
+n 11026 2733 m
+ 11401 3258 l gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+1892 2550 m
+gs 1 -1 sc (V) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+3716 1367 m
+gs 1 -1 sc (V) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+1058 3750 m
+gs 1 -1 sc (V) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+5492 2550 m
+gs 1 -1 sc (V) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+409 4967 m
+gs 1 -1 sc (V) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+6392 3750 m
+gs 1 -1 sc (V) col0 sh gr
+% here ends figure;
+% 
+% here starts figure with depth 50
+% Polyline
+45.000 slw
+gs  clippath
+9960 3960 m 9840 3960 l 9840 4247 l 9900 4007 l 9960 4247 l cp
+eoclip
+n 9900 4950 m
+ 9900 3975 l gs col0 s gr gr
+
+% arrowhead
+15.000 slw
+n 9960 4247 m 9900 4007 l 9840 4247 l 9960 4247 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+45.000 slw
+gs  clippath
+13365 4965 m 13485 4965 l 13485 4678 l 13425 4918 l 13365 4678 l cp
+eoclip
+n 13425 4950 m
+ 13425 3975 l gs col0 s gr gr
+
+% arrowhead
+15.000 slw
+n 13365 4678 m 13425 4918 l 13485 4678 l 13365 4678 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+7184 2930 m 7269 3015 l 7473 2811 l 7261 2939 l 7388 2726 l cp
+eoclip
+n 7688 2512 m
+ 7238 2962 l gs col0 s gr gr
+
+% arrowhead
+n 7388 2726 m 7261 2939 l 7473 2811 l 7388 2726 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+9455 3015 m 9540 2930 l 9336 2726 l 9464 2939 l 9251 2811 l cp
+eoclip
+n 9037 2512 m
+ 9487 2962 l gs col0 s gr gr
+
+% arrowhead
+n 9251 2811 m 9464 2939 l 9336 2726 l 9251 2811 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [90] 0 sd
+n 8531 4837 m 8534 4818 l 8538 4800 l 8544 4781 l 8550 4762 l 8557 4743 l
+ 8566 4724 l 8576 4704 l 8587 4684 l 8600 4665 l 8614 4645 l
+ 8629 4625 l 8645 4606 l 8662 4587 l 8681 4568 l 8700 4550 l
+ 8720 4532 l 8741 4515 l 8763 4499 l 8785 4484 l 8808 4469 l
+ 8831 4455 l 8855 4443 l 8880 4431 l 8905 4419 l 8930 4409 l
+ 8956 4400 l 8979 4392 l 9003 4384 l 9028 4378 l 9053 4371 l
+ 9080 4365 l 9107 4359 l 9135 4354 l 9165 4349 l 9195 4344 l
+ 9226 4339 l 9257 4335 l 9290 4331 l 9323 4327 l 9356 4324 l
+ 9390 4321 l 9424 4318 l 9458 4315 l 9492 4312 l 9525 4310 l
+ 9559 4307 l 9592 4305 l 9625 4303 l 9657 4301 l 9689 4299 l
+ 9720 4297 l 9751 4295 l 9781 4293 l 9811 4291 l 9840 4289 l
+ 9869 4287 l 9899 4284 l 9930 4282 l 9960 4279 l 9991 4275 l
+ 10021 4272 l 10052 4268 l 10083 4263 l 10114 4258 l 10146 4252 l
+ 10177 4246 l 10208 4240 l 10239 4232 l 10269 4225 l 10299 4216 l
+ 10329 4207 l 10358 4198 l 10386 4187 l 10413 4176 l 10440 4165 l
+ 10465 4153 l 10489 4141 l 10512 4128 l 10535 4114 l 10556 4100 l
+ 10576 4085 l 10595 4070 l 10613 4054 l 10631 4037 l 10648 4019 l
+ 10664 4001 l 10680 3981 l 10696 3961 l 10711 3939 l 10726 3917 l
+ 10741 3893 l 10755 3869 l 10770 3844 l 10784 3818 l 10799 3791 l
+ 10813 3764 l 10828 3736 l 10842 3709 l 10856 3681 l 10870 3653 l
+ 10884 3625 l 10898 3598 l 10912 3571 l 10926 3545 l 10940 3519 l
+ 10955 3494 l 10969 3470 l 10983 3447 l 10998 3424 l 11013 3403 l
+ 11028 3382 l 11044 3362 l 11060 3343 l 11077 3324 l 11095 3306 l
+ 11113 3288 l 11133 3271 l 11153 3254 l 11175 3237 l 11198 3221 l
+ 11222 3205 l 11247 3190 l 11272 3175 l 11299 3161 l 11327 3147 l
+ 11355 3135 l 11384 3122 l 11414 3111 l 11444 3100 l 11475 3089 l
+ 11506 3080 l 11537 3071 l 11569 3063 l 11601 3056 l 11632 3049 l
+ 11664 3043 l 11696 3038 l 11728 3033 l 11761 3028 l 11794 3025 l
+ 11818 3022 l 11843 3020 l 11869 3017 l 11895 3015 l 11922 3014 l
+ 11949 3012 l 11978 3011 l 12007 3009 l 12037 3008 l 12069 3007 l
+ 12101 3006 l 12134 3006 l 12168 3005 l 12204 3005 l 12240 3005 l
+ 12277 3004 l 12315 3004 l 12354 3005 l 12394 3005 l 12434 3005 l
+ 12476 3005 l 12518 3006 l 12560 3006 l 12604 3007 l 12647 3007 l
+ 12692 3008 l 12736 3008 l 12781 3009 l 12827 3009 l 12873 3010 l
+ 12919 3010 l 12965 3011 l 13012 3011 l 13060 3011 l 13108 3012 l
+ 13156 3012 l 13206 3012 l 13256 3012 l 13298 3012 l 13341 3012 l
+ 13385 3012 l 13430 3012 l 13475 3011 l 13521 3011 l 13569 3011 l
+ 13617 3011 l 13666 3010 l 13716 3010 l 13767 3010 l 13818 3009 l
+ 13871 3009 l 13924 3009 l 13978 3009 l 14032 3009 l 14087 3009 l
+ 14142 3009 l 14197 3009 l 14253 3009 l 14308 3009 l 14364 3009 l
+ 14419 3010 l 14474 3010 l 14529 3011 l 14584 3012 l 14637 3013 l
+ 14690 3014 l 14743 3015 l 14794 3017 l 14844 3018 l 14894 3020 l
+ 14942 3022 l 14989 3024 l 15035 3026 l 15080 3028 l 15123 3031 l
+ 15166 3033 l 15206 3036 l 15246 3039 l 15284 3042 l 15321 3046 l
+ 15357 3050 l 15391 3054 l 15424 3058 l 15456 3062 l 15503 3069 l
+ 15547 3077 l 15589 3085 l 15630 3095 l 15668 3104 l 15704 3115 l
+ 15738 3126 l 15771 3138 l 15802 3151 l 15831 3164 l 15858 3178 l
+ 15883 3192 l 15906 3207 l 15928 3222 l 15947 3238 l 15965 3255 l
+ 15982 3271 l 15996 3288 l 16009 3305 l 16020 3322 l 16030 3339 l
+ 16038 3356 l 16045 3372 l 16051 3389 l 16056 3406 l 16060 3422 l
+ 16063 3439 l 16065 3455 l 16067 3471 l 16069 3487 l 16070 3509 l
+ 16070 3531 l 16070 3553 l 16069 3576 l 16068 3599 l 16065 3623 l
+ 16062 3646 l 16058 3670 l 16054 3695 l 16048 3719 l 16042 3743 l
+ 16035 3766 l 16028 3789 l 16020 3812 l 16012 3834 l 16003 3855 l
+ 15994 3875 l 15985 3894 l 15975 3912 l 15965 3929 l 15954 3946 l
+ 15944 3962 l 15935 3973 l 15927 3984 l 15918 3995 l 15908 4006 l
+ 15898 4016 l 15887 4027 l 15874 4037 l 15861 4047 l 15847 4056 l
+ 15831 4066 l 15813 4075 l 15795 4084 l 15775 4093 l 15753 4101 l
+ 15729 4109 l 15704 4116 l 15678 4124 l 15649 4130 l 15620 4136 l
+ 15588 4142 l 15555 4147 l 15520 4152 l 15484 4157 l 15446 4160 l
+ 15406 4164 l 15365 4167 l 15322 4169 l 15277 4171 l 15230 4173 l
+ 15181 4175 l 15148 4175 l 15113 4176 l 15077 4176 l 15040 4176 l
+ 15002 4176 l 14963 4176 l 14922 4176 l 14881 4176 l 14838 4175 l
+ 14793 4175 l 14748 4174 l 14701 4174 l 14653 4173 l 14604 4172 l
+ 14555 4171 l 14504 4170 l 14452 4168 l 14400 4167 l 14347 4166 l
+ 14293 4165 l 14239 4163 l 14184 4162 l 14130 4160 l 14075 4159 l
+ 14020 4157 l 13965 4156 l 13910 4154 l 13856 4153 l 13802 4151 l
+ 13748 4150 l 13695 4149 l 13643 4147 l 13591 4146 l 13541 4145 l
+ 13491 4144 l 13442 4143 l 13394 4142 l 13347 4141 l 13301 4140 l
+ 13256 4139 l 13212 4138 l 13169 4138 l 13127 4138 l 13085 4137 l
+ 13045 4137 l 13006 4137 l 12954 4137 l 12904 4137 l 12854 4138 l
+ 12806 4139 l 12758 4140 l 12711 4142 l 12665 4143 l 12620 4145 l
+ 12576 4148 l 12532 4150 l 12489 4154 l 12447 4157 l 12406 4161 l
+ 12366 4165 l 12326 4169 l 12288 4174 l 12251 4179 l 12215 4185 l
+ 12180 4191 l 12146 4197 l 12113 4203 l 12082 4210 l 12052 4217 l
+ 12023 4225 l 11996 4232 l 11970 4240 l 11944 4248 l 11920 4257 l
+ 11897 4265 l 11875 4274 l 11853 4283 l 11833 4292 l 11813 4302 l
+ 11794 4312 l 11769 4326 l 11744 4340 l 11721 4355 l 11697 4370 l
+ 11674 4387 l 11651 4404 l 11628 4422 l 11605 4441 l 11583 4461 l
+ 11561 4481 l 11540 4502 l 11519 4524 l 11498 4546 l 11478 4568 l
+ 11459 4590 l 11441 4613 l 11423 4635 l 11406 4657 l 11389 4679 l
+ 11374 4701 l 11359 4722 l 11345 4743 l 11331 4764 l 11318 4784 l
+ 11306 4805 l 11294 4825 l 11282 4844 l 11270 4864 l 11258 4884 l
+ 11246 4904 l 11234 4924 l 11221 4945 l 11208 4965 l 11194 4986 l
+ 11179 5006 l 11164 5027 l 11147 5047 l 11129 5067 l 11111 5087 l
+ 11091 5107 l 11070 5126 l 11048 5144 l 11024 5162 l 11000 5179 l
+ 10974 5195 l 10947 5211 l 10919 5225 l 10889 5239 l 10858 5252 l
+ 10826 5265 l 10792 5276 l 10756 5287 l 10729 5294 l 10700 5302 l
+ 10670 5309 l 10639 5315 l 10607 5322 l 10574 5328 l 10539 5334 l
+ 10503 5340 l 10465 5345 l 10427 5351 l 10387 5356 l 10347 5361 l
+ 10305 5366 l 10263 5370 l 10220 5374 l 10176 5378 l 10132 5382 l
+ 10088 5386 l 10044 5389 l 10000 5392 l 9956 5395 l 9912 5397 l
+ 9869 5400 l 9827 5402 l 9785 5404 l 9744 5405 l 9704 5407 l
+ 9665 5408 l 9627 5409 l 9590 5410 l 9555 5411 l 9520 5411 l
+ 9487 5411 l 9455 5412 l 9424 5412 l 9394 5412 l 9350 5412 l
+ 9309 5411 l 9269 5411 l 9230 5410 l 9193 5408 l 9157 5407 l
+ 9122 5404 l 9089 5402 l 9056 5398 l 9025 5395 l 8996 5390 l
+ 8967 5386 l 8941 5380 l 8915 5374 l 8891 5368 l 8869 5361 l
+ 8848 5353 l 8828 5345 l 8810 5337 l 8792 5328 l 8776 5319 l
+ 8760 5309 l 8745 5298 l 8731 5287 l 8717 5275 l 8703 5263 l
+ 8689 5249 l 8675 5235 l 8662 5220 l 8648 5203 l 8635 5186 l
+ 8622 5168 l 8610 5150 l 8598 5130 l 8587 5110 l 8577 5089 l
+ 8567 5068 l 8559 5047 l 8551 5025 l 8544 5003 l 8539 4982 l
+ 8534 4960 l 8531 4939 l 8529 4918 l 8528 4898 l 8528 4877 l
+ 8529 4857 l
+ cp gs col0 s gr  [] 0 sd
+% Polyline
+30.000 slw
+n 9428 3194 m 9440 3186 l 9452 3178 l 9465 3171 l 9479 3163 l 9493 3156 l
+ 9509 3149 l 9525 3143 l 9544 3136 l 9563 3130 l 9584 3123 l
+ 9607 3117 l 9631 3112 l 9656 3106 l 9683 3101 l 9712 3097 l
+ 9742 3092 l 9774 3088 l 9807 3085 l 9841 3081 l 9878 3078 l
+ 9916 3075 l 9956 3072 l 9984 3071 l 10012 3069 l 10042 3067 l
+ 10073 3066 l 10105 3064 l 10139 3063 l 10173 3062 l 10209 3061 l
+ 10247 3059 l 10285 3058 l 10324 3057 l 10365 3056 l 10406 3055 l
+ 10448 3055 l 10490 3054 l 10533 3053 l 10576 3053 l 10620 3053 l
+ 10663 3052 l 10706 3052 l 10749 3052 l 10791 3052 l 10833 3052 l
+ 10873 3053 l 10914 3053 l 10953 3054 l 10991 3054 l 11028 3055 l
+ 11064 3056 l 11099 3057 l 11132 3058 l 11165 3059 l 11197 3060 l
+ 11228 3062 l 11267 3064 l 11304 3066 l 11341 3069 l 11377 3071 l
+ 11412 3074 l 11446 3078 l 11480 3082 l 11513 3086 l 11545 3090 l
+ 11576 3095 l 11607 3100 l 11636 3106 l 11665 3112 l 11692 3119 l
+ 11719 3126 l 11744 3133 l 11768 3141 l 11791 3149 l 11813 3157 l
+ 11834 3165 l 11854 3174 l 11873 3183 l 11891 3192 l 11909 3202 l
+ 11925 3212 l 11942 3222 l 11961 3235 l 11980 3249 l 11999 3263 l
+ 12017 3278 l 12036 3295 l 12055 3312 l 12074 3330 l 12093 3348 l
+ 12112 3368 l 12130 3388 l 12149 3409 l 12167 3430 l 12184 3451 l
+ 12201 3473 l 12218 3494 l 12234 3515 l 12249 3536 l 12264 3557 l
+ 12278 3577 l 12291 3597 l 12304 3617 l 12317 3637 l 12328 3655 l
+ 12339 3673 l 12351 3691 l 12363 3710 l 12375 3729 l 12387 3748 l
+ 12400 3768 l 12414 3787 l 12428 3807 l 12444 3827 l 12460 3847 l
+ 12476 3867 l 12494 3887 l 12512 3906 l 12531 3925 l 12551 3943 l
+ 12572 3961 l 12593 3978 l 12616 3995 l 12639 4011 l 12663 4026 l
+ 12688 4041 l 12714 4055 l 12742 4069 l 12765 4080 l 12789 4090 l
+ 12814 4100 l 12841 4111 l 12869 4121 l 12898 4130 l 12928 4140 l
+ 12959 4150 l 12992 4159 l 13025 4168 l 13059 4177 l 13095 4186 l
+ 13131 4194 l 13167 4202 l 13204 4209 l 13241 4216 l 13278 4223 l
+ 13315 4229 l 13352 4235 l 13388 4240 l 13424 4244 l 13459 4248 l
+ 13493 4252 l 13527 4255 l 13559 4257 l 13591 4259 l 13622 4261 l
+ 13652 4261 l 13681 4262 l 13710 4262 l 13745 4261 l 13779 4259 l
+ 13812 4257 l 13845 4254 l 13878 4250 l 13910 4245 l 13942 4239 l
+ 13973 4233 l 14004 4225 l 14034 4217 l 14063 4208 l 14092 4198 l
+ 14119 4187 l 14146 4176 l 14171 4164 l 14195 4152 l 14217 4139 l
+ 14239 4126 l 14259 4112 l 14278 4098 l 14295 4084 l 14312 4070 l
+ 14327 4055 l 14342 4041 l 14357 4024 l 14372 4006 l 14386 3988 l
+ 14399 3969 l 14413 3949 l 14425 3929 l 14438 3907 l 14450 3885 l
+ 14461 3862 l 14473 3839 l 14484 3816 l 14494 3792 l 14504 3768 l
+ 14514 3745 l 14523 3721 l 14532 3698 l 14541 3676 l 14549 3654 l
+ 14557 3633 l 14565 3612 l 14573 3592 l 14581 3573 l 14589 3553 l
+ 14598 3533 l 14606 3514 l 14616 3494 l 14626 3475 l 14636 3455 l
+ 14647 3435 l 14659 3415 l 14672 3396 l 14686 3376 l 14700 3357 l
+ 14715 3338 l 14730 3320 l 14747 3302 l 14764 3286 l 14781 3270 l
+ 14799 3254 l 14818 3240 l 14837 3227 l 14857 3214 l 14877 3202 l
+ 14899 3190 l 14919 3180 l 14941 3171 l 14963 3161 l 14987 3152 l
+ 15012 3144 l 15038 3136 l 15065 3128 l 15093 3121 l 15122 3114 l
+ 15152 3108 l 15182 3102 l 15213 3097 l 15244 3093 l 15274 3090 l
+ 15305 3087 l 15335 3085 l 15364 3084 l 15393 3084 l 15420 3084 l
+ 15447 3085 l 15473 3087 l 15498 3090 l 15522 3093 l 15545 3097 l
+ 15568 3102 l 15590 3108 l 15612 3115 l 15633 3122 l 15654 3131 l
+ 15675 3140 l 15695 3151 l 15715 3163 l 15734 3176 l 15753 3190 l
+ 15771 3205 l 15788 3221 l 15805 3238 l 15820 3256 l 15835 3275 l
+ 15849 3294 l 15861 3314 l 15873 3335 l 15883 3356 l 15893 3377 l
+ 15901 3399 l 15908 3422 l 15915 3445 l 15921 3468 l 15926 3491 l
+ 15930 3514 l 15933 3539 l 15936 3564 l 15938 3590 l 15939 3617 l
+ 15940 3646 l 15940 3675 l 15939 3705 l 15938 3736 l 15935 3767 l
+ 15932 3799 l 15928 3831 l 15924 3863 l 15918 3896 l 15912 3928 l
+ 15905 3959 l 15898 3991 l 15890 4021 l 15881 4051 l 15872 4080 l
+ 15862 4108 l 15851 4135 l 15841 4162 l 15829 4188 l 15817 4213 l
+ 15805 4236 l 15793 4259 l 15780 4282 l 15766 4304 l 15751 4327 l
+ 15735 4349 l 15719 4372 l 15701 4394 l 15683 4417 l 15663 4440 l
+ 15643 4462 l 15622 4485 l 15600 4507 l 15578 4530 l 15554 4552 l
+ 15530 4573 l 15506 4595 l 15481 4616 l 15456 4636 l 15431 4656 l
+ 15405 4676 l 15379 4696 l 15354 4714 l 15327 4733 l 15301 4751 l
+ 15275 4769 l 15248 4787 l 15221 4804 l 15195 4821 l 15168 4837 l
+ 15141 4854 l 15114 4871 l 15085 4888 l 15056 4905 l 15026 4923 l
+ 14995 4940 l 14964 4958 l 14932 4976 l 14900 4994 l 14868 5012 l
+ 14835 5029 l 14802 5047 l 14769 5064 l 14736 5082 l 14704 5098 l
+ 14672 5115 l 14641 5131 l 14610 5146 l 14580 5161 l 14551 5175 l
+ 14523 5189 l 14496 5202 l 14469 5214 l 14444 5226 l 14420 5237 l
+ 14397 5247 l 14375 5257 l 14353 5266 l 14325 5278 l 14298 5289 l
+ 14272 5300 l 14247 5309 l 14222 5319 l 14197 5327 l 14172 5335 l
+ 14148 5342 l 14123 5348 l 14099 5354 l 14075 5360 l 14050 5365 l
+ 14026 5369 l 14002 5372 l 13978 5375 l 13953 5378 l 13929 5380 l
+ 13904 5382 l 13879 5384 l 13853 5385 l 13826 5386 l 13799 5387 l
+ 13776 5388 l 13753 5388 l 13728 5389 l 13703 5389 l 13676 5390 l
+ 13648 5390 l 13619 5390 l 13589 5390 l 13558 5391 l 13526 5390 l
+ 13492 5390 l 13459 5390 l 13424 5390 l 13390 5389 l 13355 5388 l
+ 13319 5387 l 13284 5386 l 13249 5385 l 13215 5384 l 13181 5383 l
+ 13147 5381 l 13114 5379 l 13082 5377 l 13051 5375 l 13020 5373 l
+ 12990 5371 l 12960 5368 l 12931 5366 l 12900 5362 l 12870 5359 l
+ 12839 5355 l 12809 5351 l 12778 5347 l 12748 5342 l 12717 5336 l
+ 12686 5330 l 12656 5324 l 12625 5317 l 12594 5310 l 12564 5302 l
+ 12533 5293 l 12504 5284 l 12474 5275 l 12446 5264 l 12418 5254 l
+ 12391 5243 l 12365 5232 l 12339 5220 l 12315 5208 l 12291 5195 l
+ 12268 5182 l 12246 5169 l 12224 5155 l 12203 5141 l 12182 5126 l
+ 12161 5110 l 12140 5093 l 12119 5076 l 12098 5058 l 12077 5039 l
+ 12056 5019 l 12035 4998 l 12014 4977 l 11993 4955 l 11972 4932 l
+ 11951 4910 l 11930 4887 l 11910 4863 l 11890 4840 l 11871 4817 l
+ 11852 4794 l 11834 4772 l 11816 4750 l 11799 4728 l 11783 4707 l
+ 11767 4687 l 11752 4667 l 11738 4648 l 11723 4630 l 11710 4612 l
+ 11694 4591 l 11678 4571 l 11662 4551 l 11647 4531 l 11631 4511 l
+ 11616 4492 l 11600 4473 l 11584 4454 l 11568 4436 l 11552 4418 l
+ 11536 4400 l 11521 4384 l 11505 4368 l 11490 4353 l 11475 4338 l
+ 11460 4325 l 11445 4312 l 11430 4301 l 11416 4290 l 11402 4280 l
+ 11388 4270 l 11374 4262 l 11359 4253 l 11344 4245 l 11329 4238 l
+ 11313 4231 l 11296 4224 l 11278 4218 l 11259 4212 l 11239 4206 l
+ 11217 4201 l 11195 4196 l 11172 4191 l 11148 4187 l 11123 4184 l
+ 11098 4180 l 11072 4177 l 11045 4175 l 11017 4172 l 10989 4170 l
+ 10961 4169 l 10931 4167 l 10901 4166 l 10870 4165 l 10845 4165 l
+ 10819 4164 l 10791 4164 l 10763 4163 l 10734 4163 l 10703 4163 l
+ 10672 4162 l 10639 4162 l 10606 4162 l 10572 4162 l 10537 4161 l
+ 10501 4161 l 10466 4161 l 10429 4160 l 10393 4160 l 10357 4160 l
+ 10322 4159 l 10286 4159 l 10252 4158 l 10218 4157 l 10185 4157 l
+ 10153 4156 l 10122 4155 l 10092 4154 l 10063 4152 l 10035 4151 l
+ 10007 4150 l 9981 4148 l 9948 4145 l 9917 4143 l 9886 4140 l
+ 9856 4136 l 9826 4133 l 9796 4128 l 9768 4124 l 9739 4119 l
+ 9712 4113 l 9685 4107 l 9659 4101 l 9634 4094 l 9610 4088 l
+ 9587 4080 l 9565 4073 l 9545 4065 l 9526 4057 l 9508 4049 l
+ 9491 4041 l 9475 4033 l 9460 4024 l 9445 4016 l 9428 4004 l
+ 9411 3993 l 9395 3980 l 9379 3967 l 9363 3953 l 9348 3938 l
+ 9333 3923 l 9319 3907 l 9305 3890 l 9292 3873 l 9279 3856 l
+ 9268 3840 l 9257 3823 l 9248 3807 l 9239 3791 l 9231 3775 l
+ 9223 3759 l 9217 3744 l 9209 3727 l 9203 3709 l 9197 3691 l
+ 9192 3673 l 9187 3654 l 9183 3634 l 9180 3614 l 9178 3594 l
+ 9177 3575 l 9177 3555 l 9178 3536 l 9180 3517 l 9183 3499 l
+ 9187 3481 l 9192 3464 l 9199 3448 l 9205 3433 l 9213 3418 l
+ 9221 3403 l 9230 3388 l 9241 3372 l 9253 3356 l 9265 3340 l
+ 9278 3325 l 9292 3309 l 9307 3294 l 9322 3279 l 9337 3264 l
+ 9353 3251 l 9368 3238 l 9383 3226 l 9398 3214 l 9413 3204 l
+
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+7125 1500 m
+gs 1 -1 sc (termination nodes) col0 sh gr
+% Ellipse
+15.000 slw
+n 525 4800 318 318 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 1725 4800 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+
+% Ellipse
+n 2918 3589 318 318 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 6525 3600 318 318 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 4725 3600 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+
+% Ellipse
+n 1193 3589 318 318 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 2016 2398 318 318 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 3825 1200 318 318 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 5616 2398 318 318 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 4125 4800 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+
+% Ellipse
+n 5325 4800 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+
+% Ellipse
+n 4725 6000 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+
+% Ellipse
+n 5925 6000 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+
+% Polyline
+0 slj
+7.500 slw
+n 4050 1425 m
+ 5325 2100 l gs col0 s gr 
+% Polyline
+2 slj
+30.000 slw
+n -175 4800 m -172 4781 l -168 4763 l -162 4744 l -156 4725 l -149 4706 l
+ -140 4687 l -130 4667 l -119 4647 l -106 4628 l -92 4608 l
+ -77 4588 l -61 4569 l -44 4550 l -25 4531 l -6 4513 l
+ 14 4495 l 35 4478 l 57 4462 l 79 4447 l 102 4432 l
+ 125 4418 l 149 4406 l 174 4394 l 199 4382 l 224 4372 l
+ 250 4363 l 273 4355 l 297 4347 l 322 4341 l 347 4334 l
+ 374 4328 l 401 4322 l 429 4317 l 459 4312 l 489 4307 l
+ 520 4302 l 551 4298 l 584 4294 l 617 4290 l 650 4287 l
+ 684 4284 l 718 4281 l 752 4278 l 786 4275 l 819 4273 l
+ 853 4270 l 886 4268 l 919 4266 l 951 4264 l 983 4262 l
+ 1014 4260 l 1045 4258 l 1075 4256 l 1105 4254 l 1134 4252 l
+ 1163 4250 l 1193 4247 l 1224 4245 l 1254 4242 l 1285 4238 l
+ 1315 4235 l 1346 4231 l 1377 4226 l 1408 4221 l 1440 4215 l
+ 1471 4209 l 1502 4203 l 1533 4195 l 1563 4188 l 1593 4179 l
+ 1623 4170 l 1652 4161 l 1680 4150 l 1707 4139 l 1734 4128 l
+ 1759 4116 l 1783 4104 l 1806 4091 l 1829 4077 l 1850 4063 l
+ 1870 4048 l 1889 4033 l 1907 4017 l 1925 4000 l 1942 3982 l
+ 1958 3964 l 1974 3944 l 1990 3924 l 2005 3902 l 2020 3880 l
+ 2035 3856 l 2049 3832 l 2064 3807 l 2078 3781 l 2093 3754 l
+ 2107 3727 l 2122 3699 l 2136 3672 l 2150 3644 l 2164 3616 l
+ 2178 3588 l 2192 3561 l 2206 3534 l 2220 3508 l 2234 3482 l
+ 2249 3457 l 2263 3433 l 2277 3410 l 2292 3387 l 2307 3366 l
+ 2322 3345 l 2338 3325 l 2354 3306 l 2371 3287 l 2389 3269 l
+ 2407 3251 l 2427 3234 l 2447 3217 l 2469 3200 l 2492 3184 l
+ 2516 3168 l 2541 3153 l 2566 3138 l 2593 3124 l 2621 3110 l
+ 2649 3098 l 2678 3085 l 2708 3074 l 2738 3063 l 2769 3052 l
+ 2800 3043 l 2831 3034 l 2863 3026 l 2895 3019 l 2926 3012 l
+ 2958 3006 l 2990 3001 l 3022 2996 l 3055 2991 l 3088 2988 l
+ 3112 2985 l 3137 2983 l 3163 2980 l 3189 2978 l 3216 2977 l
+ 3243 2975 l 3272 2974 l 3301 2972 l 3331 2971 l 3363 2970 l
+ 3395 2969 l 3428 2969 l 3462 2968 l 3498 2968 l 3534 2968 l
+ 3571 2967 l 3609 2967 l 3648 2968 l 3688 2968 l 3728 2968 l
+ 3770 2968 l 3812 2969 l 3854 2969 l 3898 2970 l 3941 2970 l
+ 3986 2971 l 4030 2971 l 4075 2972 l 4121 2972 l 4167 2973 l
+ 4213 2973 l 4259 2974 l 4306 2974 l 4354 2974 l 4402 2975 l
+ 4450 2975 l 4500 2975 l 4550 2975 l 4592 2975 l 4635 2975 l
+ 4679 2975 l 4724 2975 l 4769 2974 l 4815 2974 l 4863 2974 l
+ 4911 2974 l 4960 2973 l 5010 2973 l 5061 2973 l 5112 2972 l
+ 5165 2972 l 5218 2972 l 5272 2972 l 5326 2972 l 5381 2972 l
+ 5436 2972 l 5491 2972 l 5547 2972 l 5602 2972 l 5658 2972 l
+ 5713 2973 l 5768 2973 l 5823 2974 l 5878 2975 l 5931 2976 l
+ 5984 2977 l 6037 2978 l 6088 2980 l 6138 2981 l 6188 2983 l
+ 6236 2985 l 6283 2987 l 6329 2989 l 6374 2991 l 6417 2994 l
+ 6460 2996 l 6500 2999 l 6540 3002 l 6578 3005 l 6615 3009 l
+ 6651 3013 l 6685 3017 l 6718 3021 l 6750 3025 l 6797 3032 l
+ 6841 3040 l 6883 3048 l 6924 3058 l 6962 3067 l 6998 3078 l
+ 7032 3089 l 7065 3101 l 7096 3114 l 7125 3127 l 7152 3141 l
+ 7177 3155 l 7200 3170 l 7222 3185 l 7241 3201 l 7259 3218 l
+ 7276 3234 l 7290 3251 l 7303 3268 l 7314 3285 l 7324 3302 l
+ 7332 3319 l 7339 3335 l 7345 3352 l 7350 3369 l 7354 3385 l
+ 7357 3402 l 7359 3418 l 7361 3434 l 7363 3450 l 7364 3472 l
+ 7364 3494 l 7364 3516 l 7363 3539 l 7362 3562 l 7359 3586 l
+ 7356 3609 l 7352 3633 l 7348 3658 l 7342 3682 l 7336 3706 l
+ 7329 3729 l 7322 3752 l 7314 3775 l 7306 3797 l 7297 3818 l
+ 7288 3838 l 7279 3857 l 7269 3875 l 7259 3892 l 7248 3909 l
+ 7238 3925 l 7229 3936 l 7221 3947 l 7212 3958 l 7202 3969 l
+ 7192 3979 l 7181 3990 l 7168 4000 l 7155 4010 l 7141 4019 l
+ 7125 4029 l 7107 4038 l 7089 4047 l 7069 4056 l 7047 4064 l
+ 7023 4072 l 6998 4079 l 6972 4087 l 6943 4093 l 6914 4099 l
+ 6882 4105 l 6849 4110 l 6814 4115 l 6778 4120 l 6740 4123 l
+ 6700 4127 l 6659 4130 l 6616 4132 l 6571 4134 l 6524 4136 l
+ 6475 4138 l 6442 4138 l 6407 4139 l 6371 4139 l 6334 4139 l
+ 6296 4139 l 6257 4139 l 6216 4139 l 6175 4139 l 6132 4138 l
+ 6087 4138 l 6042 4137 l 5995 4137 l 5947 4136 l 5898 4135 l
+ 5849 4134 l 5798 4133 l 5746 4131 l 5694 4130 l 5641 4129 l
+ 5587 4128 l 5533 4126 l 5478 4125 l 5424 4123 l 5369 4122 l
+ 5314 4120 l 5259 4119 l 5204 4117 l 5150 4116 l 5096 4114 l
+ 5042 4113 l 4989 4112 l 4937 4110 l 4885 4109 l 4835 4108 l
+ 4785 4107 l 4736 4106 l 4688 4105 l 4641 4104 l 4595 4103 l
+ 4550 4102 l 4506 4101 l 4463 4101 l 4421 4101 l 4379 4100 l
+ 4339 4100 l 4300 4100 l 4248 4100 l 4198 4100 l 4148 4101 l
+ 4100 4102 l 4052 4103 l 4005 4105 l 3959 4106 l 3914 4108 l
+ 3870 4111 l 3826 4113 l 3783 4117 l 3741 4120 l 3700 4124 l
+ 3660 4128 l 3620 4132 l 3582 4137 l 3545 4142 l 3509 4148 l
+ 3474 4154 l 3440 4160 l 3407 4166 l 3376 4173 l 3346 4180 l
+ 3317 4188 l 3290 4195 l 3264 4203 l 3238 4211 l 3214 4220 l
+ 3191 4228 l 3169 4237 l 3147 4246 l 3127 4255 l 3107 4265 l
+ 3088 4275 l 3063 4289 l 3038 4303 l 3015 4318 l 2991 4333 l
+ 2968 4350 l 2945 4367 l 2922 4385 l 2899 4404 l 2877 4424 l
+ 2855 4444 l 2834 4465 l 2813 4487 l 2792 4509 l 2772 4531 l
+ 2753 4553 l 2735 4576 l 2717 4598 l 2700 4620 l 2683 4642 l
+ 2668 4664 l 2653 4685 l 2639 4706 l 2625 4727 l 2612 4747 l
+ 2600 4768 l 2588 4788 l 2576 4807 l 2564 4827 l 2552 4847 l
+ 2540 4867 l 2528 4887 l 2515 4908 l 2502 4928 l 2488 4949 l
+ 2473 4969 l 2458 4990 l 2441 5010 l 2423 5030 l 2405 5050 l
+ 2385 5070 l 2364 5089 l 2342 5107 l 2318 5125 l 2294 5142 l
+ 2268 5158 l 2241 5174 l 2213 5188 l 2183 5202 l 2152 5215 l
+ 2120 5228 l 2086 5239 l 2050 5250 l 2023 5257 l 1994 5265 l
+ 1964 5272 l 1933 5278 l 1901 5285 l 1868 5291 l 1833 5297 l
+ 1797 5303 l 1759 5308 l 1721 5314 l 1681 5319 l 1641 5324 l
+ 1599 5329 l 1557 5333 l 1514 5337 l 1470 5341 l 1426 5345 l
+ 1382 5349 l 1338 5352 l 1294 5355 l 1250 5358 l 1206 5360 l
+ 1163 5363 l 1121 5365 l 1079 5367 l 1038 5368 l 998 5370 l
+ 959 5371 l 921 5372 l 884 5373 l 849 5374 l 814 5374 l
+ 781 5374 l 749 5375 l 718 5375 l 688 5375 l 644 5375 l
+ 603 5374 l 563 5374 l 524 5373 l 487 5371 l 451 5370 l
+ 416 5367 l 383 5365 l 350 5361 l 319 5358 l 290 5353 l
+ 261 5349 l 235 5343 l 209 5337 l 185 5331 l 163 5324 l
+ 142 5316 l 122 5308 l 104 5300 l 86 5291 l 70 5282 l
+ 54 5272 l 39 5261 l 25 5250 l 11 5238 l -3 5226 l
+ -17 5212 l -31 5198 l -44 5183 l -58 5166 l -71 5149 l
+ -84 5131 l -96 5113 l -108 5093 l -119 5073 l -129 5052 l
+ -139 5031 l -147 5010 l -155 4988 l -162 4966 l -167 4945 l
+ -172 4923 l -175 4902 l -177 4881 l -178 4861 l -178 4840 l
+ -177 4820 l
+ cp gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+7575 2175 m
+gs 1 -1 sc (T) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+7725 2325 m
+gs 1 -1 sc (0) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+8775 2175 m
+gs 1 -1 sc (T) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+9000 2325 m
+gs 1 -1 sc (1) col0 sh gr
+% Ellipse
+15.000 slw
+ [90] 0 sd
+n 13426 6033 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+ [] 0 sd
+% Ellipse
+ [90] 0 sd
+n 14626 6033 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+ [] 0 sd
+% Ellipse
+ [90] 0 sd
+n 10717 2431 318 318 0 360 DrawEllipse gs col0 s gr
+ [] 0 sd
+% Ellipse
+ [90] 0 sd
+n 12526 1233 318 318 0 360 DrawEllipse gs col0 s gr
+ [] 0 sd
+% Ellipse
+ [90] 0 sd
+n 14317 2431 318 318 0 360 DrawEllipse gs col0 s gr
+ [] 0 sd
+% Ellipse
+30.000 slw
+n 9226 4833 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+
+% Ellipse
+n 10426 4833 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+
+% Ellipse
+n 12826 4833 318 318 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 13426 3633 318 318 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 14026 4833 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+
+% Ellipse
+n 15226 3633 318 318 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 11619 3622 318 318 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+15.000 slw
+ [90] 0 sd
+n 9894 3622 318 318 0 360 DrawEllipse gs col7 0.80 shd ef gr gs col0 s gr
+ [] 0 sd
+% Polyline
+0 slj
+7.500 slw
+n 12751 1458 m
+ 14026 2133 l gs col0 s gr 
+/Times-Roman ff 360.00 scf sf
+8325 4200 m
+gs 1 -1 sc (pull up) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+14175 4425 m
+gs 1 -1 sc (pull down) col0 sh gr
+% here ends figure;
+% 
+% here starts figure with depth 45
+/Times-Roman ff 360.00 scf sf
+5892 6133 m
+gs 1 -1 sc (I) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+5275 4916 m
+gs 1 -1 sc (I) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+10360 4982 m
+gs 1 -1 sc (I) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+13976 4949 m
+gs 1 -1 sc (I) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+13376 6166 m
+gs 1 -1 sc (I) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+14593 6166 m
+gs 1 -1 sc (I) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+9180 4957 m
+gs 1 -1 sc (I) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+9834 3753 m
+gs 1 -1 sc (I) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+13316 3771 m
+gs 1 -1 sc (V) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+12716 4972 m
+gs 1 -1 sc (V) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+1659 4949 m
+gs 1 -1 sc (I) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+4075 4916 m
+gs 1 -1 sc (I) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+4675 3716 m
+gs 1 -1 sc (I) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+4675 6133 m
+gs 1 -1 sc (I) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/pldual.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/pldual.fig	(revision 249)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/pldual.fig	(revision 249)
@@ -0,0 +1,102 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 34 #ff8c0a
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+0 38 #ffd10a
+5 1 0 2 0 7 0 0 -1 0.000 0 0 1 0 1558.222 2358.015 1755 2520 1350 2505 1335 2235
+	0 0 2.00 120.00 120.00
+5 1 0 2 0 7 0 0 -1 0.000 0 0 0 1 10063.222 2373.015 10260 2535 9855 2520 9840 2250
+	0 0 2.00 120.00 120.00
+6 525 5700 12075 8475
+6 11475 7725 12075 8100
+4 0 -1 0 0 32 32 0.0000 4 255 330 11475 8025 w\001
+4 0 -1 0 0 0 24 0.0000 4 180 165 11850 8100 a\001
+-6
+6 7350 7725 7950 8100
+4 0 -1 0 0 32 32 0.0000 4 255 330 7350 8025 w\001
+4 0 -1 0 0 0 24 0.0000 4 180 165 7725 8100 a\001
+-6
+6 525 8025 1125 8475
+4 0 -1 0 0 32 32 0.0000 4 255 270 555 8310 p\001
+4 0 -1 0 0 0 24 0.0000 4 255 180 945 8415 b\001
+-6
+6 4950 6450 5550 6825
+4 0 -1 0 0 32 32 0.0000 4 255 270 4965 6705 p\001
+4 0 -1 0 0 0 24 0.0000 4 255 180 5355 6810 b\001
+-6
+6 10425 5700 11100 6150
+4 0 -1 0 0 32 32 0.0000 4 255 270 10485 6015 p\001
+4 0 -1 0 0 0 24 0.0000 4 255 180 10875 6120 b\001
+-6
+6 3075 7725 3675 8100
+4 0 -1 0 0 32 32 0.0000 4 255 330 3075 8025 w\001
+4 0 -1 0 0 0 24 0.0000 4 180 165 3450 8100 a\001
+-6
+1 3 0 2 -1 7 0 0 0 0.000 1 0.0000 5925 6900 75 75 5925 6900 6000 6900
+1 3 0 2 -1 7 0 0 0 0.000 1 0.0000 10725 6300 75 75 10725 6300 10800 6375
+1 3 0 2 -1 7 0 0 0 0.000 1 0.0000 825 7800 75 75 825 7800 900 7875
+2 1 1 2 -1 7 0 0 0 6.000 0 0 -1 0 0 2
+	 825 7800 1725 6900
+2 1 1 2 -1 7 0 0 0 6.000 0 0 -1 0 0 2
+	 10125 6900 10725 6300
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 9300 7200 10800 8100 11700 7200 10200 6300 9300 7200
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	3 0 2.00 120.00 240.00
+	 10425 7200 11175 6450
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 900 7200 2400 8100 3300 7200 1800 6300 900 7200
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 5175 7200 6675 8100 7575 7200 6075 6300 5175 7200
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	3 0 2.00 120.00 240.00
+	 6375 7200 7050 6450
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	3 0 2.00 120.00 240.00
+	 2100 7200 2775 6450
+-6
+1 3 0 2 -1 7 0 0 0 0.000 1 0.0000 6150 2100 75 75 6150 2100 6225 2100
+2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
+	 300 4800 12675 4800
+2 1 0 2 -1 7 0 0 0 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 4875 2100 7875 2100
+2 1 0 2 -1 7 0 0 0 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 9075 2100 12075 2100
+2 1 0 2 -1 7 0 0 0 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 825 2775 3300 1275
+2 1 0 2 -1 7 0 0 0 0.000 0 0 -1 0 0 2
+	 675 2100 1785 2100
+2 1 0 2 -1 7 0 0 0 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 5025 2775 7500 1275
+2 1 0 2 -1 7 0 0 0 0.000 0 0 -1 0 0 2
+	 9225 2775 10245 2160
+2 1 0 2 -1 7 0 0 0 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 10455 2025 11700 1275
+2 1 0 2 -1 7 0 0 0 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 2070 2100 3675 2100
+4 0 -1 0 0 0 32 0.0000 4 450 1980 12525 5400 line space\001
+4 0 -1 0 0 0 32 0.0000 4 420 2235 1020 3810 side(a,b)<0\001
+4 0 -1 0 0 0 32 0.0000 4 420 2235 5265 3780 side(a,b)=0\001
+4 0 -1 0 0 0 32 0.0000 4 420 2235 9450 3750 side(a,b)>0\001
+4 0 -1 0 0 0 32 0.0000 4 345 240 885 1935 b\001
+4 0 -1 0 0 0 32 0.0000 4 345 240 5085 1920 b\001
+4 0 -1 0 0 0 32 0.0000 4 345 240 9300 1950 b\001
+4 0 -1 0 0 0 32 0.0000 4 225 225 9735 2880 a\001
+4 0 -1 0 0 0 32 0.0000 4 225 225 5535 2865 a\001
+4 0 -1 0 0 0 32 0.0000 4 225 225 1275 2880 a\001
+4 0 -1 0 0 0 32 0.0000 4 450 2550 12225 4425 primal space\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/val.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/val.fig	(revision 266)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/val.fig	(revision 266)
@@ -0,0 +1,82 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+6 2700 4350 3000 4650
+2 1 0 3 0 35 50 0 20 0.000 0 0 7 0 0 2
+	 2730 4395 2955 4620
+2 1 0 3 0 35 50 0 20 0.000 0 0 7 0 0 2
+	 2955 4395 2730 4620
+-6
+6 13425 4350 13725 4650
+2 1 0 3 0 35 50 0 20 0.000 0 0 7 0 0 2
+	 13470 4395 13695 4620
+2 1 0 3 0 35 50 0 20 0.000 0 0 7 0 0 2
+	 13695 4395 13470 4620
+-6
+6 13500 3675 13875 3975
+2 1 0 3 0 35 50 0 20 0.000 0 0 7 0 0 2
+	 13575 3735 13800 3960
+2 1 0 3 0 35 50 0 20 0.000 0 0 7 0 0 2
+	 13800 3735 13575 3960
+-6
+6 13725 2475 14025 2775
+2 1 0 3 0 35 50 0 20 0.000 0 0 7 0 0 2
+	 13755 2490 13980 2715
+2 1 0 3 0 35 50 0 20 0.000 0 0 7 0 0 2
+	 13980 2490 13755 2715
+-6
+6 13575 3375 13875 3675
+2 1 0 3 0 35 50 0 20 0.000 0 0 7 0 0 2
+	 13620 3420 13845 3645
+2 1 0 3 0 35 50 0 20 0.000 0 0 7 0 0 2
+	 13845 3420 13620 3645
+-6
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 8010 5955 106 106 8010 5955 8116 5955
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 8640 1215 106 106 8640 1215 8746 1215
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 2670 5955 106 106 2670 5955 2776 5955
+1 3 0 3 0 7 50 0 12 0.000 1 0.0000 3225 3075 530 530 3225 3075 3600 3450
+1 3 0 3 0 35 50 0 20 0.000 1 0.0000 8565 3075 530 530 8565 3075 8940 3450
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 13410 5955 106 106 13410 5955 13516 5955
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 14040 1215 106 106 14040 1215 14146 1215
+1 3 0 3 0 35 50 0 20 0.000 1 0.0000 13965 3075 530 530 13965 3075 14340 3450
+2 1 1 3 0 35 80 0 20 8.000 0 0 -1 0 0 2
+	 8003 5969 8633 1169
+2 1 0 2 0 35 50 0 20 0.000 0 0 -1 0 0 2
+	 2670 5970 2850 4515
+2 2 0 3 0 35 50 0 20 0.000 0 0 7 0 0 5
+	 2175 3825 3225 3825 3225 4500 2175 4500 2175 3825
+2 3 0 3 0 7 50 0 12 0.000 0 0 -1 0 0 4
+	 3975 3750 3825 4875 5475 4275 3975 3750
+2 3 0 3 0 7 50 0 12 0.000 0 0 7 0 0 4
+	 4125 2100 4050 3525 5175 1950 4125 2100
+2 2 0 3 0 35 50 0 20 0.000 0 0 7 0 0 5
+	 7515 3825 8565 3825 8565 4500 7515 4500 7515 3825
+2 3 0 3 0 7 50 0 12 0.000 0 0 7 0 0 4
+	 9465 2100 9390 3525 10515 1950 9465 2100
+2 3 0 3 0 7 50 0 12 0.000 0 0 7 0 0 4
+	 9315 3750 9165 4875 10815 4275 9315 3750
+2 1 0 2 0 35 50 0 20 0.000 0 0 -1 0 0 2
+	 13410 5970 13590 4515
+2 1 0 3 0 35 80 0 20 0.000 0 0 -1 0 0 2
+	 13410 5970 14040 1170
+2 2 0 3 0 35 50 0 20 0.000 0 0 7 0 0 5
+	 12915 3825 13965 3825 13965 4500 12915 4500 12915 3825
+2 3 0 3 0 7 50 0 12 0.000 0 0 7 0 0 4
+	 14865 2100 14790 3525 15915 1950 14865 2100
+2 3 0 3 0 7 50 0 12 0.000 0 0 7 0 0 4
+	 14715 3750 14565 4875 16215 4275 14715 3750
+4 0 0 50 0 0 26 0.0000 4 345 360 2910 6165 A\001
+4 0 0 50 0 0 26 0.0000 4 345 360 8310 6150 A\001
+4 0 0 50 0 0 26 0.0000 4 345 330 8955 1365 B\001
+4 0 0 50 0 0 26 0.0000 4 345 1695 8250 5475 invisible\001
+4 0 0 50 0 0 26 0.0000 4 345 360 13710 6150 A\001
+4 0 0 50 0 0 26 0.0000 4 345 330 14355 1365 B\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/reallin.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/reallin.fig	(revision 249)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/reallin.fig	(revision 249)
@@ -0,0 +1,58 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 34 #ff8c0a
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+0 38 #ffd10a
+6 2550 6675 3075 7200
+4 0 -1 0 0 0 32 0.0000 4 345 330 2550 7200 R\001
+4 0 -1 0 0 0 24 0.0000 4 255 180 2850 6975 3\001
+-6
+6 9000 6675 9525 7200
+4 0 -1 0 0 0 32 0.0000 4 345 270 9000 7200 P\001
+4 0 -1 0 0 0 24 0.0000 4 255 180 9300 6975 5\001
+-6
+1 1 0 2 -1 7 0 0 -1 0.000 1 0.0000 9187 1771 1550 434 9187 1771 10738 2205
+1 1 0 2 -1 7 0 0 -1 0.000 1 0.0000 9187 4996 1550 434 9187 4996 10738 5430
+1 3 0 2 -1 7 0 0 0 0.000 1 0.0000 8400 1425 106 106 8400 1425 8475 1500
+1 3 0 2 -1 7 0 0 0 0.000 1 0.0000 8700 5400 106 106 8700 5400 8775 5475
+1 3 0 2 -1 7 0 0 0 0.000 1 0.0000 8025 3300 106 106 8025 3300 8131 3406
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 1425 5100 3900 1725
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 4725 2925 1050 1725
+2 1 0 2 -1 7 0 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 1350 2400 4125 5250
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 600 900 5100 900 5100 6300 600 6300 600 900
+2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
+	 6900 900 11400 900 11400 6300 6900 6300 6900 900
+3 0 0 2 -1 7 0 0 -1 0.000 0 0 0 3
+	 10738 1833 10180 3384 10738 5058
+	 0.000 1.000 0.000
+3 0 0 2 -1 7 0 0 -1 0.000 0 0 0 3
+	 7637 1833 8195 3321 7637 4996
+	 0.000 1.000 0.000
+3 0 0 2 34 7 0 0 -1 0.000 0 1 0 5
+	1 1 1.00 60.00 120.00
+	 3825 4725 6225 5325 7275 5700 8175 5775 8625 5550
+	 0.000 1.000 1.000 1.000 0.000
+3 0 0 2 34 7 0 0 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 3000 3300 5250 3600 6825 3600 7875 3375
+	 0.000 1.000 1.000 0.000
+3 0 0 2 34 7 0 0 -1 0.000 0 1 0 5
+	1 1 1.00 60.00 120.00
+	 4200 2550 5475 1575 6825 1125 7800 1125 8325 1275
+	 0.000 1.000 1.000 1.000 0.000
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/dummy.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/dummy.fig	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/dummy.fig	(revision 243)
@@ -0,0 +1,12 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 1725 900 9600 900 9600 8250 1725 8250 1725 900
+4 0 0 50 0 18 20 0.0000 4 210 1650 4725 4575 CENSORED\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/cut.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/cut.fig	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/cut.fig	(revision 243)
@@ -0,0 +1,174 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 13575 2700 15075 3300
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 14026 2733 13651 3258
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 14626 2733 15001 3258
+-6
+6 9300 3900 10425 4500
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 9676 3933 9376 4458
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 10126 3933 10351 4458
+-6
+6 12825 3900 13950 4500
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 13201 3933 12901 4458
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 13651 3933 13876 4458
+-6
+6 13425 5100 14550 5700
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 13801 5133 13501 5658
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 14251 5133 14476 5658
+-6
+6 -375 825 7500 6375
+6 4875 2625 6375 3300
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 5325 2700 4950 3225
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 5925 2700 6300 3225
+-6
+6 600 3825 1725 4500
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 975 3900 675 4425
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 1425 3900 1650 4425
+-6
+6 4125 3825 5250 4500
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 4500 3900 4200 4425
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 4950 3900 5175 4425
+-6
+6 4725 5025 5850 5700
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 5100 5100 4800 5625
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 5550 5100 5775 5625
+-6
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 525 4800 318 318 525 4800 750 5025
+1 3 0 2 0 7 50 0 16 0.000 1 0.0000 1725 4800 318 318 1725 4800 2043 4800
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 2918 3589 318 318 2918 3589 3143 3814
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 6525 3600 318 318 6525 3600 6750 3825
+1 3 0 2 0 7 50 0 16 0.000 1 0.0000 4725 3600 318 318 4725 3600 4950 3825
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 1193 3589 318 318 1193 3589 1511 3589
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 2016 2398 318 318 2016 2398 2241 2623
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 3825 1200 318 318 3825 1200 4143 1200
+1 3 0 2 0 7 50 0 -1 0.000 1 0.0000 5616 2398 318 318 5616 2398 5841 2623
+1 3 0 2 0 7 50 0 16 0.000 1 0.0000 4125 4800 318 318 4125 4800 4443 4800
+1 3 0 2 0 7 50 0 16 0.000 1 0.0000 5325 4800 318 318 5325 4800 5550 5025
+1 3 0 2 0 7 50 0 16 0.000 1 0.0000 4725 6000 318 318 4725 6000 4950 6225
+1 3 0 2 0 7 50 0 16 0.000 1 0.0000 5925 6000 318 318 5925 6000 6150 6225
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 4050 1425 5325 2100
+2 1 0 2 0 7 55 0 -1 0.000 0 0 -1 0 0 2
+	 3600 1425 2325 2100
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 1725 2700 1350 3225
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 2325 2700 2700 3225
+3 1 0 3 0 7 50 0 -1 0.000 0 0 0 17
+	 0 5325 -300 4800 150 4275 1200 4275 2025 4125 2250 3225
+	 3000 2925 4275 3000 7200 2925 7425 3450 7275 3975 6900 4200
+	 3975 4050 3000 4200 2550 4800 2325 5325 450 5400
+	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
+	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
+	 1.000
+4 0 0 55 0 0 24 0.0000 4 255 255 1892 2550 V\001
+4 0 0 55 0 0 24 0.0000 4 255 255 3716 1367 V\001
+4 0 0 55 0 0 24 0.0000 4 255 255 1058 3750 V\001
+4 0 0 55 0 0 24 0.0000 4 255 255 5492 2550 V\001
+4 0 0 55 0 0 24 0.0000 4 255 255 409 4967 V\001
+4 0 0 55 0 0 24 0.0000 4 255 255 2792 3750 V\001
+4 0 0 55 0 0 24 0.0000 4 255 255 6392 3750 V\001
+4 0 0 45 0 0 24 0.0000 4 255 120 1659 4949 I\001
+4 0 0 45 0 0 24 0.0000 4 255 120 4075 4916 I\001
+4 0 0 45 0 0 24 0.0000 4 255 120 5275 4916 I\001
+4 0 0 45 0 0 24 0.0000 4 255 120 4675 6133 I\001
+4 0 0 45 0 0 24 0.0000 4 255 120 5892 6133 I\001
+4 0 0 45 0 0 24 0.0000 4 255 120 4675 3716 I\001
+-6
+6 7575 1875 7950 2325
+4 0 0 50 0 0 24 0.0000 4 255 240 7575 2175 T\001
+4 0 0 50 0 0 24 0.0000 4 255 180 7725 2325 0\001
+-6
+6 8775 1875 9225 2325
+4 0 0 50 0 0 24 0.0000 4 255 240 8775 2175 T\001
+4 0 0 50 0 0 24 0.0000 4 255 180 9000 2325 1\001
+-6
+1 3 1 2 0 7 50 0 16 6.000 1 0.0000 13426 6033 318 318 13426 6033 13651 6258
+1 3 1 2 0 7 50 0 16 6.000 1 0.0000 14626 6033 318 318 14626 6033 14851 6258
+1 3 1 2 0 7 50 0 -1 6.000 1 0.0000 10717 2431 318 318 10717 2431 10942 2656
+1 3 1 2 0 7 50 0 -1 6.000 1 0.0000 12526 1233 318 318 12526 1233 12844 1233
+1 3 1 2 0 7 50 0 -1 6.000 1 0.0000 14317 2431 318 318 14317 2431 14542 2656
+1 3 0 3 0 7 50 0 16 0.000 1 0.0000 9226 4833 318 318 9226 4833 9544 4833
+1 3 0 3 0 7 50 0 16 0.000 1 0.0000 10426 4833 318 318 10426 4833 10744 4833
+1 3 0 3 0 7 50 0 -1 0.000 1 0.0000 12826 4833 318 318 12826 4833 13144 4833
+1 3 0 3 0 7 50 0 -1 0.000 1 0.0000 13426 3633 318 318 13426 3633 13744 3633
+1 3 0 3 0 7 50 0 16 0.000 1 0.0000 14026 4833 318 318 14026 4833 14344 4833
+1 3 0 3 0 7 50 0 -1 0.000 1 0.0000 15226 3633 318 318 15226 3633 15451 3858
+1 3 0 3 0 7 50 0 -1 0.000 1 0.0000 11619 3622 318 318 11619 3622 11844 3847
+1 3 1 2 0 7 50 0 16 6.000 1 0.0000 9894 3622 318 318 9894 3622 10119 3847
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 12751 1458 14026 2133
+2 1 0 2 0 7 55 0 -1 0.000 0 0 -1 0 0 2
+	 12301 1458 11026 2133
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 10426 2733 10051 3258
+2 1 0 2 0 7 55 0 -1 0.000 0 0 7 0 0 2
+	 11026 2733 11401 3258
+2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 9900 4950 9900 3975
+2 1 0 4 0 7 50 0 -1 0.000 0 0 -1 0 1 2
+	1 1 2.00 120.00 240.00
+	 13425 4950 13425 3975
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 7688 2512 7238 2962
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 9037 2512 9487 2962
+3 1 1 2 0 7 50 0 -1 6.000 0 0 0 17
+	 8706 5362 8406 4837 8856 4312 9906 4312 10731 4162 10956 3262
+	 11706 2962 12981 3037 15906 2962 16131 3487 15981 4012 15606 4237
+	 12681 4087 11706 4237 11256 4837 11031 5362 9156 5437
+	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
+	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
+	 1.000
+3 1 0 3 0 7 50 0 -1 0.000 0 0 0 25
+	 9145 3444 9424 3165 9724 3058 11417 3037 11974 3165 12338 3637
+	 12574 4108 13817 4344 14417 4087 14567 3551 14802 3144 15617 3015
+	 16002 3380 15900 4275 15300 4800 14224 5351 13924 5394 12874 5394
+	 12167 5223 11674 4558 11395 4215 10988 4151 9874 4173 9402 4044
+	 9188 3744
+	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
+	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
+	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
+	 1.000
+4 0 0 55 0 0 24 0.0000 4 255 255 10593 2583 V\001
+4 0 0 55 0 0 24 0.0000 4 255 255 14193 2583 V\001
+4 0 0 55 0 0 24 0.0000 4 255 255 11493 3783 V\001
+4 0 0 55 0 0 24 0.0000 4 255 255 15093 3783 V\001
+4 0 0 45 0 0 24 0.0000 4 255 120 10360 4982 I\001
+4 0 0 45 0 0 24 0.0000 4 255 120 13976 4949 I\001
+4 0 0 45 0 0 24 0.0000 4 255 120 13376 6166 I\001
+4 0 0 45 0 0 24 0.0000 4 255 120 14593 6166 I\001
+4 0 0 45 0 0 24 0.0000 4 255 120 9180 4957 I\001
+4 0 0 45 0 0 24 0.0000 4 255 120 9834 3753 I\001
+4 0 0 45 0 0 24 0.0000 4 255 255 13316 3771 V\001
+4 0 0 50 0 0 24 0.0000 4 330 1020 8325 4200 pull up\001
+4 0 0 50 0 0 24 0.0000 4 330 1455 14175 4425 pull down\001
+4 0 0 55 0 0 24 0.0000 4 255 255 12417 1400 V\001
+4 0 0 45 0 0 24 0.0000 4 255 255 12716 4972 V\001
+4 0 0 50 0 0 24 0.0000 4 255 2670 7125 1500 termination nodes\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines1.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines1.fig	(revision 249)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines1.fig	(revision 249)
@@ -0,0 +1,86 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 150 1125 5100 4125
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2106 2688 56 56 2106 2688 2162 2688
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 134.12 268.23
+	 206 2521 4800 2925
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 134.12 268.23
+	 374 3526 5025 1200
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 134.12 268.23
+	 206 4085 4800 3225
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 134.12 268.23
+	 262 1906 4950 2100
+4 0 0 50 0 19 30 0.0000 4 255 270 450 3900 n\001
+4 0 0 50 0 19 30 0.0000 4 255 375 450 3225 m\001
+4 0 0 50 0 19 30 0.0000 4 345 120 525 2475 l\001
+4 0 0 50 0 19 30 0.0000 4 345 255 525 1725 k\001
+4 0 0 50 0 18 30 0.0000 4 360 270 2025 3150 p\001
+-6
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 15600 1500 70 70 15600 1500 15670 1500
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 16800 3900 70 70 16800 3900 16870 3900
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 14775 3225 70 70 14775 3225 14845 3225
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 17250 2175 70 70 17250 2175 17320 2175
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 180.00 360.00
+	 8456 3896 12479 2275
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 180.00 360.00
+	 9238 1381 9517 431
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 180.00 360.00
+	 8456 3896 7282 1269
+2 1 1 3 0 7 50 0 -1 8.000 0 0 -1 0 0 2
+	 8456 3896 9238 1381
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+	 8456 3896 11138 3896
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 11138 3896 12256 3896
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 10020 822 11585 3616 7897 6019 6500 3225 10020 822
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 15150 675 17550 5400
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 8456 3896 8456 710
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 180.00 360.00
+	 8456 3896 10970 431
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 1 3
+	0 0 1.00 60.00 120.00
+	0 0 1.00 60.00 120.00
+	 525 4950 525 5925 1650 5925
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 8456 3896 6723 5628
+4 0 0 50 0 19 26 0.0000 4 300 480 11641 2331 m*\001
+4 0 0 50 0 19 30 0.0000 4 345 450 7562 1493 n*\001
+4 0 0 50 0 18 30 0.0000 4 450 450 10300 4678 p*\001
+4 0 0 50 0 19 30 0.0000 4 345 300 11026 878 l*\001
+4 0 0 50 0 19 30 0.0000 4 345 300 15675 1275 l*\001
+4 0 0 50 0 19 30 0.0000 4 345 435 17550 1950 k*\001
+4 0 0 50 0 19 30 0.0000 4 345 555 17025 3750 m*\001
+4 0 0 50 0 18 30 0.0000 4 450 450 18000 4200 p*\001
+4 0 0 50 0 18 30 0.0000 4 450 450 17325 5700 p*\001
+4 0 0 50 0 18 30 0.0000 4 450 450 15900 5100 p*\001
+4 0 0 50 0 19 30 0.0000 4 345 450 14250 3075 n*\001
+4 0 0 50 0 19 30 0.0000 4 345 435 8850 825 k*\001
+4 0 0 50 0 18 30 0.0000 4 450 450 8307 5035 p*\001
+4 0 0 50 0 18 20 0.0000 4 120 165 8474 5192 +\001
+4 0 0 50 0 18 30 0.0000 4 450 450 8850 5768 p*\001
+4 0 0 55 0 18 20 0.0000 4 30 165 9017 5918 -\001
+4 0 0 55 0 18 20 0.0000 4 30 165 18207 4365 -\001
+4 0 0 50 0 18 20 0.0000 4 120 165 16109 5267 +\001
+4 0 0 50 0 19 20 0.0000 4 150 150 1425 6225 x\001
+4 0 0 50 0 19 20 0.0000 4 210 135 300 5175 y\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines2.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines2.fig	(revision 249)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines2.fig	(revision 249)
@@ -0,0 +1,79 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 5550 450 10050 6450
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 7665 3270 56 56 7665 3270 7721 3270
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 7492 5345 56 56 7492 5345 7548 5345
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 6810 1156 56 56 6810 1156 6866 1156
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 6705 1956 56 56 6705 1956 6761 1956
+2 1 0 2 0 7 50 0 -1 6.000 0 0 -1 0 0 1
+	 7830 5947
+2 1 0 2 0 7 55 0 18 0.000 0 0 -1 0 0 6
+	 7650 3247 8992 569 7800 922 6810 539 5835 764 7665 3262
+2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+	 9052 457 6094 6412
+2 1 0 2 0 7 55 0 18 0.000 0 0 -1 0 0 7
+	 6297 6007 7650 3270 9547 5885 8452 5547 7687 6095 6840 5685
+	 6300 6000
+2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+	 5610 457 9922 6402
+3 2 0 2 0 7 50 0 -1 0.000 0 0 0 11
+	 7401 1929 7401 1851 7401 1791 7421 1725 7447 1687 7513 1667
+	 7598 1674 7636 1713 7657 1779 7657 1843 7663 1929
+	 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
+	 -1.000 -1.000 0.000
+3 2 0 2 0 7 50 0 -1 0.000 0 0 0 11
+	 7648 4681 7648 4603 7648 4543 7668 4477 7694 4439 7760 4419
+	 7845 4426 7883 4465 7904 4531 7904 4595 7910 4681
+	 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
+	 -1.000 -1.000 0.000
+4 0 0 50 0 18 18 0.0000 4 210 180 8025 3525 S\001
+4 0 0 50 0 19 30 0.0000 4 345 300 7875 3375 l*\001
+4 0 0 50 0 19 30 0.0000 4 345 435 6323 2528 k*\001
+4 0 0 50 0 19 30 0.0000 4 345 555 6915 1297 m*\001
+4 0 0 50 0 18 30 0.0000 4 345 435 6960 1897 a*\001
+4 0 0 50 0 18 30 0.0000 4 345 450 7747 1913 b*\001
+4 0 0 50 0 18 30 0.0000 4 345 435 5962 5692 a*\001
+4 0 0 50 0 18 30 0.0000 4 345 450 9562 5611 b*\001
+4 0 0 50 0 19 30 0.0000 4 345 450 7590 5482 n*\001
+4 0 0 50 0 18 30 0.0000 4 345 435 7185 4665 a*\001
+4 0 0 50 0 18 30 0.0000 4 345 450 7980 4695 b*\001
+4 0 0 50 0 18 24 0.0000 4 180 225 7396 4781 +\001
+4 0 0 50 0 18 24 0.0000 4 30 225 8242 4804 -\001
+4 0 0 50 0 18 24 0.0000 4 30 225 7155 2022 -\001
+4 0 0 50 0 18 24 0.0000 4 180 225 8003 2010 +\001
+-6
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2400 2100 56 56 2400 2100 2456 2100
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2100 5100 56 56 2100 5100 2156 5100
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 134.12 268.23
+	 131 3271 4396 3368
+2 1 0 5 0 7 50 0 -1 12.000 0 0 -1 0 0 2
+	 2400 2100 2100 5100
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 134.12 268.23
+	 450 2025 4529 2193
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 134.12 268.23
+	 4212 4135 375 4650
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 1995 6037 2520 952
+4 0 0 50 0 19 30 0.0000 4 345 255 450 1800 k\001
+4 0 0 50 0 19 30 0.0000 4 255 375 410 3215 m\001
+4 0 0 50 0 19 30 0.0000 4 255 270 375 4425 n\001
+4 0 0 50 0 18 30 0.0000 4 255 255 2250 5400 a\001
+4 0 0 50 0 18 30 0.0000 4 345 270 2550 1950 b\001
+4 0 0 50 0 19 30 0.0000 4 345 120 2115 1155 l\001
+4 0 0 50 0 18 18 0.0000 4 210 180 2250 1335 S\001
+4 0 0 50 0 18 30 0.0000 4 345 300 675 5700 S\001
+4 0 0 50 0 18 30 0.0000 4 345 300 3300 5700 S\001
+4 0 0 50 0 18 24 0.0000 4 180 225 975 5475 +\001
+4 0 0 50 0 18 24 0.0000 4 30 225 3630 5475 -\001
+4 0 0 50 0 18 30 0.0000 4 345 300 1740 4035 S\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/classes.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/classes.fig	(revision 266)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/classes.fig	(revision 266)
@@ -0,0 +1,116 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 32 #ffb10a
+0 35 #ff9c0a
+6 3450 1350 8175 7200
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 3510 6390 8100 1800
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 4305 6885 7050 1575
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 5055 7125 6300 1425
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 6030 7095 5400 1425
+-6
+6 10200 1200 14850 7125
+2 1 0 10 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 11250 3915 12900 4185
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 11973 6945 11343 1275
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 11243 6980 12488 1280
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 10274 6269 14809 1612
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 11518 1335 10993 6915
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 1
+	 10993 6915
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 13498 1575 12103 7080
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 10253 2662 13628 5606
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 10230 5756 13267 1950
+-6
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 5700 4200 90 90 5700 4200 5790 4200
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 3678 9807 90 90 3678 9807 3768 9807
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 4465 10219 90 90 4465 10219 4555 10219
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 5140 10594 90 90 5140 10594 5230 10594
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 6584 11363 90 90 6584 11363 6674 11363
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 7090 11625 90 90 7090 11625 7180 11625
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 6209 11157 90 90 6209 11157 6299 11157
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 -1050 10500 90 90 -1050 10500 -960 10500
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 11290 3938 90 90 11290 3938 11380 3938
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 12865 4163 90 90 12865 4163 12955 4163
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 10615 10088 90 90 10615 10088 10705 10088
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 11683 9863 90 90 11683 9863 11773 9863
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 12471 11982 90 90 12471 11982 12561 11982
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 13446 11119 90 90 13446 11119 13536 11119
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 12058 10913 90 90 12058 10913 12148 10913
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 13821 11757 90 90 13821 11757 13911 11757
+1 3 0 1 0 0 60 0 20 0.000 1 0.0000 10858 11119 90 90 10858 11119 10948 11119
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 4511 2475 6855 5831
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 3874 4687 7567 3675
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 3300 1200 8400 1200 8400 7200 3300 7200 3300 1200
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 3300 8100 8400 8100 8400 14100 3300 14100 3300 8100
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 3300 9600 8400 12300
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 -3300 1200 1800 1200 1800 7200 -3300 7200 -3300 1200
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 9900 1200 15000 1200 15000 7200 9900 7200 9900 1200
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 9900 8100 15000 8100 15000 14100 9900 14100 9900 8100
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 9910 9383 15029 10695
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 9902 11719 15021 12244
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 -3300 8100 1800 8100 1800 14100 -3300 14100 -3300 8100
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 2
+	 -2237 6433 628 1783
+2 1 0 0 0 7 80 0 16 0.000 0 0 -1 0 0 5
+	 9902 9375 15002 10688 15002 12244 9902 11719 9902 9375
+3 0 0 2 35 7 50 0 -1 0.000 0 1 0 3
+	1 1 2.00 120.00 240.00
+	 -1552 5687 -633 7712 -896 10168
+	 0.000 1.000 0.000
+3 0 0 2 35 7 50 0 -1 0.000 0 1 0 4
+	1 1 2.00 120.00 240.00
+	 3801 6324 4232 8387 4195 9174 3895 9568
+	 0.000 1.000 1.000 0.000
+3 0 0 2 35 7 50 0 -1 0.000 0 1 0 4
+	1 1 2.00 120.00 240.00
+	 5864 6849 5676 8312 5957 9699 6276 10843
+	 0.000 1.000 1.000 0.000
+3 0 0 2 35 7 50 0 -1 0.000 0 1 0 3
+	1 1 2.00 120.00 240.00
+	 10936 7093 11030 8424 11555 9605
+	 0.000 1.000 0.000
+3 0 0 2 35 7 50 0 -1 0.000 0 1 0 5
+	1 1 2.00 120.00 240.00
+	 12361 6587 13018 7862 13261 9324 13055 10899 12624 11743
+	 0.000 1.000 1.000 1.000 0.000
+4 0 0 50 0 0 32 0.0000 4 450 1755 -1804 384 visibility\001
+4 0 0 50 0 0 32 0.0000 4 450 1935 -1979 934 along line\001
+4 0 0 50 0 0 32 0.0000 4 450 1755 4596 384 visibility\001
+4 0 0 50 0 0 32 0.0000 4 450 2085 4471 909 from point\001
+4 0 0 50 0 0 32 0.0000 4 450 1755 11371 384 visibility\001
+4 0 0 50 0 0 32 0.0000 4 450 2730 10896 934 from segment\001
+4 0 0 50 0 0 32 0.0000 4 345 525 -684 14799 =0\001
+4 0 0 50 0 0 32 0.0000 4 345 240 -1109 14815 d\001
+4 0 0 50 0 0 32 0.0000 4 345 240 5491 14840 d\001
+4 0 0 50 0 0 32 0.0000 4 345 525 5916 14799 =1\001
+4 0 0 50 0 0 32 0.0000 4 345 240 12291 14815 d\001
+4 0 0 50 0 0 32 0.0000 4 345 525 12716 14799 =2\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines3.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines3.fig	(revision 249)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines3.fig	(revision 249)
@@ -0,0 +1,82 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 5475 0 10950 5400
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 8735 959 56 56 8735 959 8791 959
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 9380 3794 56 56 9380 3794 9436 3794
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 6275 4049 56 56 6275 4049 6331 4049
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 6455 1484 56 56 6455 1484 6511 1484
+2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+	 8540 59 9725 5369
+2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+	 6500 179 6215 5279
+2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+	 9890 689 5750 1619
+2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+	 10880 3659 5855 4079
+2 1 0 3 0 7 55 0 18 0.000 0 0 -1 0 0 5
+	 6275 4064 6440 1484 8735 944 9380 3794 6290 4034
+3 2 0 2 0 7 50 0 -1 0.000 0 0 0 11
+	 6851 3546 6851 3468 6851 3408 6871 3342 6897 3304 6963 3284
+	 7048 3291 7086 3330 7107 3396 7107 3460 7113 3546
+	 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
+	 -1.000 -1.000 0.000
+3 2 0 2 0 7 50 0 -1 0.000 0 0 0 11
+	 7653 3541 7653 3463 7653 3403 7673 3337 7699 3299 7765 3279
+	 7850 3286 7888 3325 7909 3391 7909 3455 7915 3541
+	 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
+	 -1.000 -1.000 0.000
+3 2 0 2 0 7 50 0 -1 0.000 0 0 0 11
+	 8428 3533 8428 3455 8428 3395 8448 3329 8474 3291 8540 3271
+	 8625 3278 8663 3317 8684 3383 8684 3447 8690 3533
+	 0.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
+	 -1.000 -1.000 0.000
+4 0 0 50 0 18 30 0.0000 4 345 435 6418 3534 a*\001
+4 0 0 50 0 18 30 0.0000 4 345 450 7174 3558 b*\001
+4 0 0 50 0 18 30 0.0000 4 345 420 7963 3554 c*\001
+4 0 0 50 0 18 30 0.0000 4 345 450 8750 3539 d*\001
+4 0 0 50 0 18 20 0.0000 4 120 165 6643 3659 +\001
+4 0 0 50 0 18 20 0.0000 4 30 165 7423 3682 -\001
+4 0 0 50 0 18 20 0.0000 4 120 165 8187 3652 +\001
+4 0 0 50 0 18 20 0.0000 4 30 165 9035 3659 -\001
+4 0 0 50 0 17 30 0.0000 4 330 630 5705 1394 ac*\001
+4 0 0 50 0 18 30 0.0000 4 345 420 7467 1109 c*\001
+4 0 0 50 0 17 30 0.0000 4 345 645 8795 757 bc*\001
+4 0 0 50 0 17 30 0.0000 4 345 690 9500 4214 bd*\001
+4 0 0 50 0 17 30 0.0000 4 345 675 5525 4529 ad*\001
+4 0 0 50 0 18 30 0.0000 4 345 450 7722 4371 d*\001
+4 0 0 50 0 18 30 0.0000 4 345 450 9133 2337 b*\001
+4 0 0 50 0 18 30 0.0000 4 345 435 5871 2832 a*\001
+-6
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 -9 4400 70 70 -9 4400 61 4400
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2886 1640 70 70 2886 1640 2956 1640
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2586 3882 70 70 2586 3882 2656 3882
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 -129 1700 70 70 -129 1700 -59 1700
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 134.12 268.23
+	 -924 5315 4377 230
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 134.12 268.23
+	 -1068 920 4272 5255
+2 1 0 8 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 2879 1640 2579 3912
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 134.12 268.23
+	 -993 1715 4437 1610
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 134.12 268.23
+	 -993 4595 4437 3530
+2 1 0 8 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 -129 1685 -1 4407
+4 0 0 50 0 18 30 0.0000 4 345 270 2392 4385 d\001
+4 0 0 50 0 18 30 0.0000 4 255 255 -113 1545 a\001
+4 0 0 50 0 18 30 0.0000 4 255 240 2744 1452 c\001
+4 0 0 50 0 18 30 0.0000 4 345 270 30 4904 b\001
+4 0 0 50 0 18 30 0.0000 4 345 300 -675 3225 S\001
+4 0 0 50 0 18 30 0.0000 4 345 345 3000 2925 O\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines4.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines4.fig	(revision 249)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/lines4.fig	(revision 249)
@@ -0,0 +1,71 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 5475 150 10275 5700
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 6359 4014 56 56 6359 4014 6415 4014
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 6539 1449 56 56 6539 1449 6595 1449
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 7739 2403 56 56 7739 2403 7795 2403
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 8879 1113 56 56 8879 1113 8935 1113
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 9434 3648 56 56 9434 3648 9490 3648
+2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+	 8655 165 9765 4995
+2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+	 6570 255 6300 5445
+2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+	 9675 210 5475 4965
+2 1 0 1 0 7 50 0 -1 4.000 0 0 -1 0 0 2
+	 10275 4275 5535 720
+2 1 0 3 0 7 55 0 18 0.000 0 0 -1 0 0 4
+	 7754 2418 8879 1098 9449 3693 7769 2403
+2 1 0 3 0 7 55 0 18 0.000 0 0 -1 0 0 4
+	 6359 4008 6524 1458 7754 2403 6344 3978
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 7620 150 7934 5643
+4 0 0 50 0 18 30 0.0000 4 345 435 5880 2760 a*\001
+4 0 0 50 0 17 30 0.0000 4 330 630 5759 1734 ac*\001
+4 0 0 50 0 17 30 0.0000 4 345 675 5579 4074 ad*\001
+4 0 0 50 0 18 30 0.0000 4 345 420 7739 708 x*\001
+4 0 0 50 0 18 30 0.0000 4 345 450 9375 2325 b*\001
+4 0 0 50 0 17 30 0.0000 4 345 645 7949 2508 cd*\001
+4 0 0 50 0 18 30 0.0000 4 345 420 8429 3624 c*\001
+4 0 0 50 0 18 30 0.0000 4 345 450 6929 3684 d*\001
+4 0 0 50 0 17 30 0.0000 4 345 645 9600 3675 bc*\001
+4 0 0 50 0 17 30 0.0000 4 345 690 9150 1200 bd*\001
+-6
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 -114 1682 56 56 -114 1682 -58 1682
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 -39 3399 56 56 -39 3399 17 3399
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 6 4404 56 56 6 4404 62 4404
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2992 2662 56 56 2992 2662 3048 2662
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 1012 3105 56 56 1012 3105 1068 3105
+2 1 0 8 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 -114 1682 -1 4407
+2 1 0 2 0 7 48 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 58.50 163.50
+	 -961 4952 4575 1725
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 58.50 193.50
+	 -1171 1292 4500 3150
+2 1 0 8 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 2980 2672 977 3118
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 58.50 193.50
+	 -871 716 2744 5231
+2 1 0 2 0 7 48 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 58.50 163.50
+	 -841 5531 3134 296
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	1 1 3.00 58.50 193.50
+	 -1031 3577 4575 2325
+4 0 0 50 0 18 30 0.0000 4 255 240 898 2862 c\001
+4 0 0 50 0 18 30 0.0000 4 255 240 44 3220 x\001
+4 0 0 50 0 18 30 0.0000 4 255 255 -83 1530 a\001
+4 0 0 50 0 18 30 0.0000 4 345 270 2864 2473 d\001
+4 0 0 50 0 18 30 0.0000 4 345 270 -15 4919 b\001
+4 0 0 50 0 18 30 0.0000 4 345 345 1650 2775 O\001
+4 0 0 50 0 18 30 0.0000 4 345 300 -532 2880 S\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/3dlines.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/3dlines.fig	(revision 266)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/3dlines.fig	(revision 266)
@@ -0,0 +1,51 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 35 #ff9c0a
+0 36 #ffb10a
+0 37 #ffc10a
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 2472 5595 121 121 2472 5595 2593 5595
+1 3 0 1 0 7 50 0 6 0.000 1 0.0000 5322 2925 108 108 5322 2925 5430 2925
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 11174 5420 121 121 11174 5420 11295 5420
+1 3 0 1 0 0 50 0 20 0.000 1 0.0000 15524 2540 121 121 15524 2540 15645 2540
+1 3 0 2 0 7 80 0 17 0.000 1 0.0000 3300 3900 2689 2689 3300 3900 5989 3900
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 0 1 2
+	0 0 3.00 180.00 360.00
+	 942 7035 2427 5625
+2 1 0 3 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+	0 0 3.00 180.00 360.00
+	 5637 2640 6972 1380
+2 1 1 3 0 7 60 0 -1 8.000 0 0 -1 0 0 2
+	 975 6990 6825 1515
+2 1 1 3 0 7 60 0 -1 8.000 0 0 -1 0 0 2
+	 9152 6710 17702 1160
+2 1 0 3 0 7 60 0 -1 0.000 0 0 -1 0 1 2
+	0 0 3.00 180.00 360.00
+	 9164 6710 10349 5930
+2 1 0 3 0 7 60 0 -1 0.000 0 0 -1 1 0 2
+	0 0 3.00 180.00 360.00
+	 16334 2060 17669 1175
+2 1 0 3 0 7 55 0 -1 0.000 0 0 -1 0 0 2
+	 11159 5420 12866 4294
+2 1 0 3 0 7 55 0 -1 0.000 0 0 -1 0 0 2
+	 14302 3363 15622 2493
+2 3 0 2 0 7 80 0 17 0.000 0 0 -1 0 0 5
+	 10352 560 12152 1760 12152 5960 10352 7460 10352 560
+2 3 0 2 0 7 80 0 17 0.000 0 0 -1 0 0 5
+	 16329 525 14529 1725 14529 5925 16329 7425 16329 525
+3 1 0 3 0 7 70 0 8 0.000 0 0 0 8
+	 11411 3610 12206 2470 13496 3895 14456 3010 15101 4270 13466 5680
+	 12761 4510 11831 4435
+	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
+3 1 0 3 0 7 70 0 8 0.000 0 0 0 8
+	 1497 3405 2292 2265 3582 3690 4542 2805 5187 4065 3552 5475
+	 2847 4305 1917 4230
+	 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
+4 0 0 60 0 0 28 0.0000 4 225 1110 2925 2850 scene\001
+4 0 0 60 0 0 28 0.0000 4 225 1110 12825 3000 scene\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/duality2d.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/duality2d.fig	(revision 266)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/duality2d.fig	(revision 266)
@@ -0,0 +1,174 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 35 #ff9c0a
+6 6750 12675 10950 13050
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 1 2
+	1 1 2.00 120.00 210.00
+	1 1 2.00 120.00 210.00
+	 7950 12900 8625 12900
+4 0 0 50 0 0 24 0.0000 4 330 870 6750 12975 p(a,b)\001
+4 0 0 50 0 0 24 0.0000 4 330 2070 8850 12975 p*:ax+by-1=0\001
+-6
+6 12225 -75 16125 300
+2 1 0 2 0 7 50 0 -1 0.000 0 0 7 1 1 2
+	1 1 2.00 120.00 210.00
+	1 1 2.00 120.00 210.00
+	 13350 150 14025 150
+4 0 0 50 0 0 24 0.0000 4 330 870 12225 225 p(a,b)\001
+4 0 0 50 0 0 24 0.0000 4 330 1995 14100 225 p*:2ax-y-b=0\001
+-6
+6 1650 -75 5550 300
+2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 1 2
+	1 1 2.00 120.00 210.00
+	1 1 2.00 120.00 210.00
+	 2700 150 3375 150
+4 0 0 50 0 0 24 0.0000 4 330 870 1650 225 p(a,b)\001
+4 0 0 50 0 0 24 0.0000 4 330 1965 3525 225 p*:ax+y+b=0\001
+-6
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 3000 2844 54 54 3000 2844 3052 2860
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 3752 1951 54 54 3752 1951 3804 1967
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2490 3425 54 54 2490 3425 2542 3441
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 3525 5561 54 54 3525 5561 3577 5577
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 2490 5553 54 54 2490 5553 2542 5569
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 1405 2835 54 54 1405 2835 1457 2851
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 9329 8112 54 54 9329 8112 9381 8128
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 6436 7797 54 54 6436 7797 6488 7813
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 8609 9149 54 54 8609 9149 8661 9165
+1 3 0 1 0 0 40 0 -1 0.000 1 0.0000 8325 8700 1172 1172 8325 8700 9497 8700
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 13012 3234 54 54 13012 3234 13064 3250
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 13720 2094 54 54 13720 2094 13772 2110
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 15082 2839 54 54 15082 2839 15134 2855
+1 3 0 2 0 0 50 0 20 0.000 1 0.0000 13424 3462 54 54 13424 3462 13476 3478
+2 1 0 3 0 0 40 0 20 0.000 0 0 7 0 0 2
+	 592 2844 5685 2844
+2 1 0 2 0 0 40 0 20 0.000 0 0 7 0 0 2
+	 405 2459 5490 4364
+2 1 0 3 0 0 40 0 20 0.000 0 0 7 0 0 2
+	 445 4588 5530 6493
+2 1 0 5 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 5850 3900 0 3900
+2 1 0 5 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 3000 750 3000 7050
+2 1 0 3 0 0 40 0 20 0.000 0 0 7 0 0 2
+	 248 3490 5030 776
+2 1 0 5 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 11175 8700 5325 8700
+2 1 0 5 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 8325 5550 8325 11850
+2 1 0 3 0 0 40 0 20 0.000 0 0 -1 0 0 2
+	 7994 5784 11182 11226
+2 1 0 1 0 0 40 0 20 0.000 0 0 -1 0 0 2
+	 6442 7809 8317 8686
+2 1 0 3 0 0 40 0 20 0.000 0 0 -1 0 0 2
+	 8864 5806 6352 11199
+2 1 0 1 0 0 40 0 20 0.000 0 0 -1 0 0 2
+	 8332 8724 9607 10726
+2 1 0 3 0 0 40 0 20 0.000 0 0 -1 0 0 2
+	 7672 11976 11302 9659
+2 1 0 5 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 16567 3894 10717 3894
+2 1 0 5 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 13717 744 13717 7044
+2 1 0 3 0 0 40 0 -1 0.000 0 0 -1 0 0 2
+	 11737 849 14677 6324
+2 1 0 3 0 0 40 0 -1 0.000 0 0 -1 0 0 2
+	 10723 5697 16312 5697
+2 1 0 3 0 0 40 0 -1 0.000 0 0 -1 0 0 2
+	 13237 6334 15202 657
+2 1 0 3 0 0 40 0 -1 0.000 0 0 -1 0 0 2
+	 15464 5974 10852 1744
+2 1 0 3 0 0 40 0 20 0.000 0 0 7 0 0 2
+	 443 6500 5528 4595
+2 1 0 3 0 0 40 0 20 0.000 0 0 7 0 0 2
+	 4717 831 1110 5034
+3 0 0 1 0 0 40 0 -1 0.000 0 0 0 12
+	 12181 624 12456 1734 12629 2289 12831 2814 12924 3049 13049 3301
+	 13139 3439 13234 3584 13339 3714 13444 3809 13544 3874 13716 3886
+	 0.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
+	 1.000 1.000 1.000 0.000
+3 0 0 1 0 0 40 0 -1 0.000 0 0 0 12
+	 15274 609 14997 1733 14824 2288 14622 2813 14529 3048 14404 3300
+	 14314 3438 14219 3583 14114 3713 14009 3808 13909 3873 13737 3885
+	 0.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
+	 1.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 4
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 3645 5555 3975 5475 3945 5383 4125 5175
+	 0.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 4
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 2362 5540 2250 5475 2025 5625 2070 5863
+	 0.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 6
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 2535 2780 2595 2638 2692 2563 2797 2555 2917 2615 2940 2735
+	 0.000 1.000 1.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 5
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 3202 1846 3270 1951 3397 2034 3540 2034 3630 2004
+	 0.000 1.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 4
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 2175 3159 2137 3301 2190 3429 2392 3451
+	 0.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 4
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 9050 7437 9372 7490 9500 7700 9440 8000
+	 0.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 5
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 8735 9140 9200 9312 9455 9635 9732 10137 9890 10430
+	 0.000 1.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 4
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 13847 2187 14192 3004 14440 4414 14560 5614
+	 0.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 4
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 14440 3087 14710 3154 14965 3094 15062 2974
+	 0.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 3
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 12827 3477 13180 3334 13330 3372
+	 0.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 4
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 12880 3222 12662 3177 12535 2967 12632 2697
+	 0.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 6
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 6560 7715 6867 7617 7167 7617 7370 7677 7647 7812 7790 7887
+	 0.000 1.000 1.000 1.000 1.000 0.000
+3 0 0 3 35 0 40 0 -1 0.000 0 1 1 6
+	0 0 2.00 90.00 150.00
+	0 0 2.00 90.00 150.00
+	 1410 2941 1440 3159 1500 3375 1725 3525 2047 3586 2190 3646
+	 0.000 1.000 1.000 1.000 1.000 0.000
+4 0 0 50 0 0 24 0.0000 4 225 555 16050 4275 x, a\001
+4 0 0 50 0 0 24 0.0000 4 330 540 12975 1050 y, b\001
+4 0 0 50 0 0 24 0.0000 4 225 555 10725 9075 x, a\001
+4 0 0 50 0 0 24 0.0000 4 330 540 7650 5625 y, b\001
+4 0 0 50 0 0 24 0.0000 4 225 555 5700 4275 x, a\001
+4 0 0 50 0 0 24 0.0000 4 330 540 2250 975 y, b\001
+4 0 0 50 0 0 24 0.0000 4 330 2115 6750 12450 polar mapping\001
+4 0 0 50 0 0 24 0.0000 4 330 2625 12225 -300 parabola mapping\001
+4 0 0 50 0 0 24 0.0000 4 330 2145 1650 -300 slope mapping\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/conservative_sampling.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/conservative_sampling.fig	(revision 282)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/conservative_sampling.fig	(revision 282)
@@ -0,0 +1,47 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 2 0 7 50 -1 14 0.000 1 0.0000 5325 1800 437 437 5325 1800 5762 1800
+1 3 0 2 0 7 50 -1 14 0.000 1 0.0000 3675 2100 375 375 3675 2100 3975 2325
+1 3 0 2 0 7 50 -1 14 0.000 1 0.0000 3225 3075 375 375 3225 3075 3525 3300
+1 3 0 2 0 7 50 -1 14 0.000 1 0.0000 5325 3225 424 424 5325 3225 5625 3525
+1 3 0 2 0 4 50 -1 20 0.000 1 0.0000 4500 2700 237 237 4500 2700 4737 2700
+2 2 0 3 0 11 50 -1 20 0.000 0 0 -1 0 0 5
+	 1200 2100 2400 2100 2400 3300 1200 3300 1200 2100
+2 2 0 3 0 11 50 -1 20 0.000 0 0 7 0 0 5
+	 6600 2100 7800 2100 7800 3300 6600 3300 6600 2100
+2 1 0 0 0 6 55 -1 20 0.000 0 0 -1 0 0 5
+	 2400 2100 2400 2400 6600 3300 6600 3000 2475 2100
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2
+	1 1 1.00 60.00 120.00
+	1 1 1.00 60.00 120.00
+	 2400 2100 6600 2100
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 1 2
+	1 1 1.00 60.00 120.00
+	1 1 1.00 60.00 120.00
+	 2400 2100 6600 2700
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 1 2
+	1 1 1.00 60.00 120.00
+	1 1 1.00 60.00 120.00
+	 2400 2400 6600 3300
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 1 2
+	1 1 1.00 60.00 120.00
+	1 1 1.00 60.00 120.00
+	 2475 2100 6600 3000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 1 2
+	1 1 1.00 60.00 120.00
+	1 1 1.00 60.00 120.00
+	 2400 2700 6600 3300
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 7 1 1 2
+	1 1 1.00 60.00 120.00
+	1 1 1.00 60.00 120.00
+	 2400 3300 6600 3300
+4 0 0 50 -1 0 18 0.0000 4 195 960 1350 2775 view cell\001
+4 0 0 50 -1 0 18 0.0000 4 255 675 6900 2700 object\001
+4 0 0 50 -1 0 18 0.0000 4 195 1050 3900 1350 occluders\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency2.eps
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency2.eps	(revision 283)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/latency2.eps	(revision 283)
@@ -0,0 +1,387 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: latency2.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Fri Sep 16 18:25:55 2005
+%%For: matt@sakura (matt,U-COMPUTERGRAPHIK\matt,S-1-5-21-1259991482-2646404242-2158041560-3508)
+%%BoundingBox: 0 0 992 393
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 393 moveto 0 0 lineto 992 0 lineto 992 393 lineto closepath clip newpath
+18.0 463.5 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+/Times-Roman ff 480.00 scf sf
+-300 6825 m
+gs 1 -1 sc (GPU) col0 sh gr
+% Polyline
+15.000 slw
+n 3150 2400 m 4050 2400 l 4050 3000 l 3150 3000 l
+ cp gs col0 s gr 
+% Polyline
+n 4050 2400 m 4950 2400 l 4950 3000 l 4050 3000 l
+ cp gs col0 s gr 
+% Polyline
+n 4950 2400 m 5850 2400 l 5850 3000 l 4950 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 480.00 scf sf
+2475 2850 m
+gs 1 -1 sc (R1) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+3375 2850 m
+gs 1 -1 sc (R2) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+4275 2850 m
+gs 1 -1 sc (R3) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+5175 2850 m
+gs 1 -1 sc (Q4) col0 sh gr
+% Polyline
+n 6450 1200 m 7350 1200 l 7350 1800 l 6450 1800 l
+ cp gs col0 s gr 
+% Polyline
+n 7350 1200 m 8250 1200 l 8250 1800 l 7350 1800 l
+ cp gs col0 s gr 
+/Times-Roman ff 480.00 scf sf
+6675 1650 m
+gs 1 -1 sc (R4) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+7575 1650 m
+gs 1 -1 sc (Q5) col0 sh gr
+% Polyline
+n 7800 2400 m 8700 2400 l 8700 3000 l 7800 3000 l
+ cp gs col0 s gr 
+% Polyline
+n 8700 2400 m 9600 2400 l 9600 3000 l 8700 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 480.00 scf sf
+8025 2850 m
+gs 1 -1 sc (R4) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+8925 2850 m
+gs 1 -1 sc (Q5) col0 sh gr
+% Polyline
+n 10200 1200 m 11100 1200 l 11100 1800 l 10200 1800 l
+ cp gs col0 s gr 
+/Times-Roman ff 480.00 scf sf
+10425 1650 m
+gs 1 -1 sc (C5) col0 sh gr
+% Polyline
+gs  clippath
+15240 3735 m 15240 3615 l 14953 3615 l 15193 3675 l 14953 3735 l cp
+eoclip
+n 13725 3675 m
+ 15225 3675 l gs col0 s gr gr
+
+% arrowhead
+n 14953 3735 m 15193 3675 l 14953 3615 l 14953 3735 l  cp gs 0.00 setgray ef gr  col0 s
+/Times-Roman ff 480.00 scf sf
+14475 4125 m
+gs 1 -1 sc (t) col0 sh gr
+% Polyline
+gs  clippath
+15240 7335 m 15240 7215 l 14953 7215 l 15193 7275 l 14953 7335 l cp
+eoclip
+n 13725 7275 m
+ 15225 7275 l gs col0 s gr gr
+
+% arrowhead
+n 14953 7335 m 15193 7275 l 14953 7215 l 14953 7335 l  cp gs 0.00 setgray ef gr  col0 s
+/Times-Roman ff 480.00 scf sf
+14475 7725 m
+gs 1 -1 sc (t) col0 sh gr
+% Polyline
+n 11100 1200 m 12000 1200 l 12000 1800 l 11100 1800 l
+ cp gs col0 s gr 
+/Times-Roman ff 480.00 scf sf
+11325 1650 m
+gs 1 -1 sc (Q6) col0 sh gr
+% Polyline
+n 12450 2400 m 13350 2400 l 13350 3000 l 12450 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 480.00 scf sf
+12675 2850 m
+gs 1 -1 sc (Q6) col0 sh gr
+% Polyline
+n 13950 1200 m 14850 1200 l 14850 1800 l 13950 1800 l
+ cp gs col0 s gr 
+/Times-Roman ff 480.00 scf sf
+14250 1650 m
+gs 1 -1 sc (R6) col0 sh gr
+% Polyline
+n 15300 2400 m 16200 2400 l 16200 3000 l 15300 3000 l
+ cp gs col0 s gr 
+/Times-Roman ff 480.00 scf sf
+15525 2850 m
+gs 1 -1 sc (R6) col0 sh gr
+% Polyline
+gs  clippath
+6355 1901 m 6263 1825 l 6079 2045 l 6279 1900 l 6171 2122 l cp
+eoclip
+n 5925 2325 m
+ 6300 1875 l gs col0 s gr gr
+
+% arrowhead
+n 6171 2122 m 6279 1900 l 6079 2045 l 6171 2122 l  cp gs 0.00 setgray ef gr  col0 s
+/Times-Roman ff 480.00 scf sf
+6300 2475 m
+gs 1 -1 sc (V) col0 sh gr
+% Polyline
+gs  clippath
+10105 1901 m 10013 1825 l 9829 2045 l 10029 1900 l 9921 2122 l cp
+eoclip
+n 9675 2325 m
+ 10050 1875 l gs col0 s gr gr
+
+% arrowhead
+n 9921 2122 m 10029 1900 l 9829 2045 l 9921 2122 l  cp gs 0.00 setgray ef gr  col0 s
+/Times-Roman ff 480.00 scf sf
+10050 2475 m
+gs 1 -1 sc (I) col0 sh gr
+% Polyline
+gs  clippath
+13855 1901 m 13763 1825 l 13579 2045 l 13779 1900 l 13671 2122 l cp
+eoclip
+n 13425 2325 m
+ 13800 1875 l gs col0 s gr gr
+
+% arrowhead
+n 13671 2122 m 13779 1900 l 13579 2045 l 13671 2122 l  cp gs 0.00 setgray ef gr  col0 s
+/Times-Roman ff 480.00 scf sf
+13800 2475 m
+gs 1 -1 sc (V) col0 sh gr
+% Polyline
+n 8325 5100 m 9225 5100 l 9225 5700 l 8325 5700 l
+ cp gs col0 s gr 
+/Times-Roman ff 480.00 scf sf
+8550 5550 m
+gs 1 -1 sc (C5) col0 sh gr
+% Polyline
+n 6750 6300 m 7650 6300 l 7650 6900 l 6750 6900 l
+ cp gs col0 s gr 
+% Polyline
+n 7650 6300 m 8550 6300 l 8550 6900 l 7650 6900 l
+ cp gs col0 s gr 
+% Polyline
+n 2250 6300 m 3150 6300 l 3150 6900 l 2250 6900 l
+ cp gs col0 s gr 
+% Polyline
+n 3150 6300 m 4050 6300 l 4050 6900 l 3150 6900 l
+ cp gs col0 s gr 
+% Polyline
+n 4050 6300 m 4950 6300 l 4950 6900 l 4050 6900 l
+ cp gs col0 s gr 
+% Polyline
+n 4950 6300 m 5850 6300 l 5850 6900 l 4950 6900 l
+ cp gs col0 s gr 
+% Polyline
+n 5850 6300 m 6750 6300 l 6750 6900 l 5850 6900 l
+ cp gs col0 s gr 
+% Polyline
+n 8550 6300 m 9450 6300 l 9450 6900 l 8550 6900 l
+ cp gs col0 s gr 
+/Times-Roman ff 480.00 scf sf
+6975 6750 m
+gs 1 -1 sc (Q5) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+7875 6750 m
+gs 1 -1 sc (Q6) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+2475 6750 m
+gs 1 -1 sc (R1) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+3375 6750 m
+gs 1 -1 sc (R2) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+4275 6750 m
+gs 1 -1 sc (R3) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+5175 6750 m
+gs 1 -1 sc (Q4) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+6075 6750 m
+gs 1 -1 sc (R4) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+8775 6750 m
+gs 1 -1 sc (R6) col0 sh gr
+% Polyline
+gs  clippath
+8230 5801 m 8138 5725 l 7954 5945 l 8154 5800 l 8046 6022 l cp
+eoclip
+n 7800 6225 m
+ 8175 5775 l gs col0 s gr gr
+
+% arrowhead
+n 8046 6022 m 8154 5800 l 7954 5945 l 8046 6022 l  cp gs 0.00 setgray ef gr  col0 s
+/Times-Roman ff 480.00 scf sf
+8175 6225 m
+gs 1 -1 sc (I) col0 sh gr
+% Polyline
+n 900 1200 m 1800 1200 l 1800 1800 l 900 1800 l
+ cp gs col0 s gr 
+% Polyline
+n 1800 1200 m 2700 1200 l 2700 1800 l 1800 1800 l
+ cp gs col0 s gr 
+% Polyline
+n 2700 1200 m 3600 1200 l 3600 1800 l 2700 1800 l
+ cp gs col0 s gr 
+% Polyline
+n 3600 1200 m 4500 1200 l 4500 1800 l 3600 1800 l
+ cp gs col0 s gr 
+% Polyline
+n 5400 5100 m 6300 5100 l 6300 5700 l 5400 5700 l
+ cp gs col0 s gr 
+% Polyline
+n 6300 5100 m 7200 5100 l 7200 5700 l 6300 5700 l
+ cp gs col0 s gr 
+% Polyline
+n 900 5100 m 1800 5100 l 1800 5700 l 900 5700 l
+ cp gs col0 s gr 
+% Polyline
+n 1800 5100 m 2700 5100 l 2700 5700 l 1800 5700 l
+ cp gs col0 s gr 
+% Polyline
+n 2700 5100 m 3600 5100 l 3600 5700 l 2700 5700 l
+ cp gs col0 s gr 
+% Polyline
+n 3600 5100 m 4500 5100 l 4500 5700 l 3600 5700 l
+ cp gs col0 s gr 
+% Polyline
+n 4500 5100 m 5400 5100 l 5400 5700 l 4500 5700 l
+ cp gs col0 s gr 
+% Polyline
+n 7200 5100 m 8100 5100 l 8100 5700 l 7200 5700 l
+ cp gs col0 s gr 
+/Times-Roman ff 480.00 scf sf
+1125 1650 m
+gs 1 -1 sc (R1) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+2025 1650 m
+gs 1 -1 sc (R2) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+2925 1650 m
+gs 1 -1 sc (R3) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+3825 1650 m
+gs 1 -1 sc (Q4) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+-300 1650 m
+gs 1 -1 sc (CPU) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+-300 2925 m
+gs 1 -1 sc (GPU) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+5625 5550 m
+gs 1 -1 sc (Q5) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+6525 5550 m
+gs 1 -1 sc (Q6) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+1125 5550 m
+gs 1 -1 sc (R1) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+2025 5550 m
+gs 1 -1 sc (R2) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+2925 5550 m
+gs 1 -1 sc (R3) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+3825 5550 m
+gs 1 -1 sc (Q4) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+4725 5550 m
+gs 1 -1 sc (R4) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+7425 5550 m
+gs 1 -1 sc (R6) col0 sh gr
+/Times-Roman ff 480.00 scf sf
+-300 5550 m
+gs 1 -1 sc (CPU) col0 sh gr
+% Polyline
+n 2250 2400 m 3150 2400 l 3150 3000 l 2250 3000 l
+ cp gs col0 s gr 
+% here ends figure;
+$F2psEnd
+rs
+showpage
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/basic.eps
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/basic.eps	(revision 283)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/basic.eps	(revision 283)
@@ -0,0 +1,450 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: basic.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Fri Sep 16 18:25:50 2005
+%%For: matt@sakura (matt,U-COMPUTERGRAPHIK\matt,S-1-5-21-1259991482-2646404242-2158041560-3508)
+%%BoundingBox: 0 0 793 244
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 244 moveto 0 0 lineto 793 0 lineto 793 244 lineto closepath clip newpath
+-71.3 296.2 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 12
+% Polyline
+7.500 slw
+n 8100 4800 m 11100 1200 l 14100 4800 l
+ 8100 4800 l  cp gs col0 s gr 
+% here ends figure;
+% 
+% here starts figure with depth 10
+% Polyline
+2 slj
+165.000 slw
+n 9150 3600 m 9150 3601 l 9151 3604 l 9153 3608 l 9156 3616 l 9160 3626 l
+ 9166 3639 l 9173 3656 l 9181 3676 l 9191 3700 l 9202 3726 l
+ 9214 3755 l 9228 3786 l 9242 3818 l 9258 3853 l 9274 3888 l
+ 9291 3925 l 9309 3962 l 9328 3999 l 9347 4037 l 9368 4075 l
+ 9389 4113 l 9411 4152 l 9435 4190 l 9459 4229 l 9486 4268 l
+ 9513 4308 l 9543 4347 l 9574 4387 l 9606 4426 l 9640 4464 l
+ 9675 4500 l 9718 4541 l 9760 4577 l 9798 4608 l 9833 4634 l
+ 9863 4655 l 9888 4671 l 9909 4683 l 9927 4691 l 9941 4697 l
+ 9952 4700 l 9961 4701 l 9968 4701 l 9975 4700 l 9982 4699 l
+ 9989 4697 l 9998 4696 l 10009 4695 l 10023 4695 l 10041 4696 l
+ 10062 4698 l 10087 4702 l 10117 4706 l 10152 4711 l 10190 4716 l
+ 10232 4721 l 10275 4725 l 10315 4727 l 10353 4728 l 10387 4728 l
+ 10418 4729 l 10445 4731 l 10468 4734 l 10487 4738 l 10503 4743 l
+ 10515 4749 l 10524 4756 l 10531 4763 l 10536 4771 l 10540 4780 l
+ 10544 4788 l 10547 4795 l 10551 4801 l 10556 4806 l 10563 4808 l
+ 10572 4808 l 10584 4805 l 10598 4797 l 10617 4785 l 10639 4767 l
+ 10664 4743 l 10694 4712 l 10727 4674 l 10763 4628 l 10800 4575 l
+ 10828 4532 l 10854 4487 l 10880 4440 l 10905 4394 l 10927 4348 l
+ 10948 4303 l 10967 4260 l 10983 4219 l 10998 4179 l 11011 4142 l
+ 11022 4107 l 11031 4074 l 11039 4043 l 11046 4014 l 11052 3985 l
+ 11057 3958 l 11061 3932 l 11065 3907 l 11069 3881 l 11072 3856 l
+ 11076 3830 l 11080 3804 l 11085 3776 l 11091 3748 l 11098 3717 l
+ 11105 3686 l 11115 3652 l 11125 3615 l 11138 3577 l 11152 3536 l
+ 11168 3493 l 11185 3447 l 11205 3399 l 11227 3350 l 11250 3300 l
+ 11274 3249 l 11299 3199 l 11325 3150 l 11357 3093 l 11388 3041 l
+ 11416 2995 l 11441 2955 l 11462 2922 l 11480 2894 l 11494 2872 l
+ 11505 2855 l 11513 2841 l 11518 2832 l 11521 2825 l 11522 2821 l
+ 11521 2819 l 11520 2818 l 11519 2819 l 11517 2820 l 11517 2821 l
+ 11517 2822 l 11519 2822 l 11523 2822 l 11530 2821 l 11540 2818 l
+ 11554 2815 l 11572 2810 l 11595 2805 l 11622 2798 l 11654 2791 l
+ 11691 2785 l 11731 2779 l 11775 2775 l 11821 2774 l 11867 2776 l
+ 11914 2780 l 11960 2786 l 12005 2794 l 12049 2804 l 12092 2815 l
+ 12134 2827 l 12176 2841 l 12216 2855 l 12256 2870 l 12295 2886 l
+ 12333 2903 l 12371 2920 l 12408 2937 l 12443 2954 l 12478 2971 l
+ 12510 2987 l 12540 3002 l 12568 3017 l 12593 3030 l 12614 3042 l
+ 12632 3051 l 12647 3059 l 12658 3066 l 12666 3070 l 12671 3073 l
+ 12674 3074 l
+ 12675 3075 l gs col29 s gr 
+% here ends figure;
+% 
+% here starts figure with depth 6
+% Polyline
+7.500 slw
+n 1200 4800 m 4200 1200 l 7200 4800 l
+ 1200 4800 l  cp gs col0 s gr 
+% Polyline
+45.000 slw
+n 2250 3600 m 4200 1200 l 5775 3075 l 4950 2700 l 4500 2925 l 3975 4500 l
+ 3750 4725 l 3075 4650 l 2775 4500 l
+ 2250 3600 l  cp gs col7 0.90 shd ef gr gs col0 s gr 
+% here ends figure;
+% 
+% here starts figure with depth 1
+% Polyline
+7.500 slw
+n 9300 3675 m 9822 3733 l 10197 3733 l 11100 3600 l 10872 4408 l 10725 4575 l
+ 10050 4650 l 9600 4350 l
+ 9300 3675 l  cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+15.000 slw
+gs  clippath
+10598 3876 m 10541 3895 l 10589 4038 l 10580 3915 l 10646 4019 l cp
+eoclip
+n 10725 4350 m
+ 10575 3900 l gs col0 s gr gr
+
+% arrowhead
+7.500 slw
+n 10646 4019 m 10580 3915 l 10589 4038 l 10646 4019 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+15.000 slw
+gs  clippath
+10083 3904 m 10033 3870 l 9949 3996 l 10041 3913 l 9999 4029 l cp
+eoclip
+n 9750 4350 m
+ 10050 3900 l gs col0 s gr gr
+
+% arrowhead
+7.500 slw
+n 9999 4029 m 10041 3913 l 9949 3996 l 9999 4029 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+15.000 slw
+gs  clippath
+3566 2394 m 3615 2429 l 3703 2306 l 3609 2387 l 3654 2271 l cp
+eoclip
+n 3975 1875 m
+ 3600 2400 l gs col0 s gr gr
+
+% arrowhead
+7.500 slw
+n 3654 2271 m 3609 2387 l 3703 2306 l 3654 2271 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+15.000 slw
+gs  clippath
+4170 2415 m 4230 2415 l 4230 2264 l 4200 2384 l 4170 2264 l cp
+eoclip
+n 4200 1875 m
+ 4200 2400 l gs col0 s gr gr
+
+% arrowhead
+7.500 slw
+n 4170 2264 m 4200 2384 l 4230 2264 l 4170 2264 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+15.000 slw
+gs  clippath
+4784 2429 m 4833 2394 l 4745 2271 l 4791 2387 l 4696 2306 l cp
+eoclip
+n 4425 1875 m
+ 4800 2400 l gs col0 s gr gr
+
+% arrowhead
+7.500 slw
+n 4696 2306 m 4791 2387 l 4745 2271 l 4696 2306 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+15.000 slw
+gs  clippath
+12660 3480 m 12707 3442 l 12613 3324 l 12665 3437 l 12566 3362 l cp
+eoclip
+n 12375 3075 m
+ 12675 3450 l gs col0 s gr gr
+
+% arrowhead
+7.500 slw
+n 12566 3362 m 12665 3437 l 12613 3324 l 12566 3362 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+15.000 slw
+gs  clippath
+12198 3470 m 12257 3458 l 12227 3310 l 12222 3434 l 12169 3322 l cp
+eoclip
+n 12150 3075 m
+ 12225 3450 l gs col0 s gr gr
+
+% arrowhead
+7.500 slw
+n 12169 3322 m 12222 3434 l 12227 3310 l 12169 3322 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+15.000 slw
+gs  clippath
+11820 3315 m 11880 3315 l 11880 3164 l 11850 3284 l 11820 3164 l cp
+eoclip
+n 11850 3000 m
+ 11850 3300 l gs col0 s gr gr
+
+% arrowhead
+7.500 slw
+n 11820 3164 m 11850 3284 l 11880 3164 l 11820 3164 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+n 7050 2700 m
+ 4200 3825 l gs col0 s gr 
+% Polyline
+n 8400 2700 m
+ 10350 3675 l gs col0 s gr 
+% Polyline
+45.000 slw
+n 6930 1050 m 6825 1050 6825 1320 105 arcto 4 {pop} repeat
+  6825 1425 7320 1425 105 arcto 4 {pop} repeat
+  7425 1425 7425 1155 105 arcto 4 {pop} repeat
+  7425 1050 6930 1050 105 arcto 4 {pop} repeat
+ cp gs col7 0.90 shd ef gr gs col0 s gr 
+% Polyline
+2 slj
+135.000 slw
+n 9150 3600 m 9151 3600 l 9153 3601 l 9158 3602 l 9165 3604 l 9175 3606 l
+ 9188 3610 l 9203 3614 l 9223 3619 l 9244 3624 l 9269 3630 l
+ 9296 3637 l 9325 3644 l 9356 3651 l 9389 3659 l 9423 3666 l
+ 9458 3674 l 9495 3681 l 9532 3688 l 9571 3696 l 9611 3703 l
+ 9652 3709 l 9695 3716 l 9740 3722 l 9787 3728 l 9836 3734 l
+ 9887 3739 l 9940 3743 l 9995 3747 l 10050 3750 l 10113 3752 l
+ 10171 3753 l 10225 3754 l 10272 3754 l 10312 3753 l 10345 3752 l
+ 10371 3751 l 10391 3750 l 10407 3749 l 10418 3748 l 10426 3746 l
+ 10432 3745 l 10438 3744 l 10442 3742 l 10448 3740 l 10456 3738 l
+ 10467 3736 l 10482 3733 l 10501 3729 l 10526 3724 l 10557 3719 l
+ 10595 3712 l 10638 3705 l 10688 3696 l 10743 3686 l 10800 3675 l
+ 10857 3663 l 10912 3651 l 10961 3638 l 11005 3626 l 11042 3614 l
+ 11073 3602 l 11097 3591 l 11116 3580 l 11130 3570 l 11140 3560 l
+ 11147 3550 l 11152 3540 l 11156 3531 l 11160 3522 l 11166 3513 l
+ 11173 3504 l 11184 3496 l 11199 3487 l 11220 3479 l 11246 3471 l
+ 11280 3464 l 11320 3458 l 11368 3453 l 11424 3450 l 11485 3449 l
+ 11550 3450 l 11608 3454 l 11664 3459 l 11718 3466 l 11768 3475 l
+ 11814 3485 l 11855 3495 l 11892 3506 l 11923 3517 l 11951 3529 l
+ 11974 3540 l 11995 3552 l 12013 3564 l 12028 3576 l 12043 3588 l
+ 12056 3600 l 12070 3612 l 12084 3624 l 12099 3636 l 12116 3648 l
+ 12136 3660 l 12158 3671 l 12184 3683 l 12214 3694 l 12248 3705 l
+ 12287 3715 l 12329 3725 l 12375 3734 l 12424 3741 l 12474 3746 l
+ 12525 3750 l 12586 3751 l 12642 3749 l 12692 3745 l 12737 3738 l
+ 12777 3729 l 12813 3718 l 12845 3706 l 12873 3692 l 12899 3678 l
+ 12921 3663 l 12942 3647 l 12961 3630 l 12978 3614 l 12993 3598 l
+ 13006 3583 l 13018 3569 l 13027 3557 l 13035 3547 l 13041 3538 l
+ 13045 3532 l 13048 3528 l 13049 3526 l
+ 13050 3525 l gs col0 s gr 
+% Polyline
+165.000 slw
+n 2250 3600 m 2250 3601 l 2251 3604 l 2253 3608 l 2256 3616 l 2260 3626 l
+ 2266 3639 l 2273 3656 l 2281 3676 l 2291 3700 l 2302 3726 l
+ 2314 3755 l 2328 3786 l 2342 3818 l 2358 3853 l 2374 3888 l
+ 2391 3925 l 2409 3962 l 2428 3999 l 2447 4037 l 2468 4075 l
+ 2489 4113 l 2511 4152 l 2535 4190 l 2559 4229 l 2586 4268 l
+ 2613 4308 l 2643 4347 l 2674 4387 l 2706 4426 l 2740 4464 l
+ 2775 4500 l 2818 4541 l 2860 4577 l 2898 4608 l 2933 4634 l
+ 2963 4655 l 2988 4671 l 3009 4683 l 3027 4691 l 3041 4697 l
+ 3052 4700 l 3061 4701 l 3068 4701 l 3075 4700 l 3082 4699 l
+ 3089 4697 l 3098 4696 l 3109 4695 l 3123 4695 l 3141 4696 l
+ 3162 4698 l 3187 4702 l 3217 4706 l 3252 4711 l 3290 4716 l
+ 3332 4721 l 3375 4725 l 3415 4727 l 3453 4728 l 3487 4728 l
+ 3518 4729 l 3545 4731 l 3568 4734 l 3587 4738 l 3603 4743 l
+ 3615 4749 l 3624 4756 l 3631 4763 l 3636 4771 l 3640 4780 l
+ 3644 4788 l 3647 4795 l 3651 4801 l 3656 4806 l 3663 4808 l
+ 3672 4808 l 3684 4805 l 3698 4797 l 3717 4785 l 3739 4767 l
+ 3764 4743 l 3794 4712 l 3827 4674 l 3863 4628 l 3900 4575 l
+ 3928 4532 l 3954 4487 l 3980 4440 l 4005 4394 l 4027 4348 l
+ 4048 4303 l 4067 4260 l 4083 4219 l 4098 4179 l 4111 4142 l
+ 4122 4107 l 4131 4074 l 4139 4043 l 4146 4014 l 4152 3985 l
+ 4157 3958 l 4161 3932 l 4165 3907 l 4169 3881 l 4172 3856 l
+ 4176 3830 l 4180 3804 l 4185 3776 l 4191 3748 l 4198 3717 l
+ 4205 3686 l 4215 3652 l 4225 3615 l 4238 3577 l 4252 3536 l
+ 4268 3493 l 4285 3447 l 4305 3399 l 4327 3350 l 4350 3300 l
+ 4374 3249 l 4399 3199 l 4425 3150 l 4457 3093 l 4488 3041 l
+ 4516 2995 l 4541 2955 l 4562 2922 l 4580 2894 l 4594 2872 l
+ 4605 2855 l 4613 2841 l 4618 2832 l 4621 2825 l 4622 2821 l
+ 4621 2819 l 4620 2818 l 4619 2819 l 4617 2820 l 4617 2821 l
+ 4617 2822 l 4619 2822 l 4623 2822 l 4630 2821 l 4640 2818 l
+ 4654 2815 l 4672 2810 l 4695 2805 l 4722 2798 l 4754 2791 l
+ 4791 2785 l 4831 2779 l 4875 2775 l 4921 2774 l 4967 2776 l
+ 5014 2780 l 5060 2786 l 5105 2794 l 5149 2804 l 5192 2815 l
+ 5234 2827 l 5276 2841 l 5316 2855 l 5356 2870 l 5395 2886 l
+ 5433 2903 l 5471 2920 l 5508 2937 l 5543 2954 l 5578 2971 l
+ 5610 2987 l 5640 3002 l 5668 3017 l 5693 3030 l 5714 3042 l
+ 5732 3051 l 5747 3059 l 5758 3066 l 5766 3070 l 5771 3073 l
+ 5774 3074 l
+ 5775 3075 l gs col0 s gr 
+% Polyline
+45.000 slw
+n 9225 3600 m 9225 3601 l 9227 3604 l 9229 3609 l 9232 3616 l 9236 3627 l
+ 9242 3641 l 9249 3658 l 9258 3679 l 9269 3702 l 9280 3729 l
+ 9293 3759 l 9308 3790 l 9323 3824 l 9339 3859 l 9356 3895 l
+ 9374 3932 l 9393 3970 l 9412 4008 l 9432 4046 l 9452 4084 l
+ 9474 4123 l 9496 4161 l 9519 4200 l 9544 4238 l 9569 4277 l
+ 9596 4316 l 9624 4354 l 9654 4392 l 9685 4430 l 9717 4466 l
+ 9750 4500 l 9793 4541 l 9834 4576 l 9871 4605 l 9904 4627 l
+ 9931 4644 l 9953 4656 l 9971 4664 l 9984 4668 l 9994 4669 l
+ 10002 4668 l 10007 4666 l 10013 4662 l 10018 4658 l 10023 4654 l
+ 10031 4650 l 10041 4647 l 10054 4645 l 10072 4643 l 10094 4643 l
+ 10121 4644 l 10154 4645 l 10191 4647 l 10232 4649 l 10275 4650 l
+ 10318 4649 l 10360 4647 l 10397 4645 l 10430 4643 l 10459 4642 l
+ 10482 4642 l 10502 4643 l 10517 4644 l 10530 4647 l 10540 4650 l
+ 10549 4653 l 10556 4656 l 10564 4659 l 10572 4661 l 10581 4661 l
+ 10593 4659 l 10607 4655 l 10625 4647 l 10646 4635 l 10671 4619 l
+ 10699 4598 l 10731 4571 l 10765 4538 l 10800 4500 l 10829 4464 l
+ 10855 4426 l 10879 4389 l 10900 4352 l 10918 4318 l 10932 4287 l
+ 10944 4258 l 10953 4232 l 10959 4209 l 10963 4188 l 10966 4169 l
+ 10968 4152 l 10968 4135 l 10969 4119 l 10969 4102 l 10969 4085 l
+ 10970 4067 l 10973 4047 l 10976 4024 l 10981 3999 l 10988 3970 l
+ 10998 3938 l 11009 3902 l 11023 3862 l 11040 3818 l 11058 3772 l
+ 11079 3724 l 11100 3675 l 11125 3620 l 11148 3570 l 11169 3525 l
+ 11187 3487 l 11203 3456 l 11215 3431 l 11224 3411 l 11231 3397 l
+ 11236 3386 l 11239 3378 l 11242 3373 l 11244 3369 l 11246 3365 l
+ 11248 3360 l 11252 3354 l 11257 3346 l 11265 3335 l 11275 3320 l
+ 11288 3301 l 11304 3277 l 11324 3250 l 11347 3219 l 11372 3185 l
+ 11400 3150 l 11431 3114 l 11459 3081 l 11484 3051 l 11505 3026 l
+ 11521 3005 l 11532 2988 l 11540 2974 l 11544 2962 l 11545 2953 l
+ 11545 2945 l 11544 2937 l 11543 2931 l 11544 2924 l 11547 2917 l
+ 11554 2910 l 11565 2902 l 11582 2892 l 11606 2883 l 11638 2873 l
+ 11677 2863 l 11723 2855 l 11775 2850 l 11819 2849 l 11864 2850 l
+ 11908 2853 l 11953 2858 l 11996 2865 l 12039 2873 l 12080 2882 l
+ 12121 2892 l 12161 2904 l 12201 2916 l 12240 2929 l 12278 2942 l
+ 12315 2956 l 12352 2970 l 12387 2983 l 12421 2997 l 12453 3010 l
+ 12482 3023 l 12509 3034 l 12532 3045 l 12552 3053 l 12568 3061 l
+ 12581 3066 l 12590 3070 l 12595 3073 l 12599 3074 l
+ 12600 3075 l gs col0 s gr 
+/Times-Roman ff 225.00 scf sf
+7350 2775 m
+gs 1 -1 sc (0) col0 sh gr
+/Times-Roman ff 225.00 scf sf
+8250 2775 m
+gs 1 -1 sc (1) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+2250 1275 m
+gs 1 -1 sc (frame 0) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+8025 2700 m
+gs 1 -1 sc (T) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+7125 2700 m
+gs 1 -1 sc (T) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+11850 1275 m
+gs 1 -1 sc (frame 1) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+7725 1500 m
+gs 1 -1 sc (nodes) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+7725 1125 m
+gs 1 -1 sc (tested) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+6375 2250 m
+gs 1 -1 sc (termination nodes) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+11175 4575 m
+gs 1 -1 sc (pull up) col0 sh gr
+% Ellipse
+7.500 slw
+n 4200 1200 168 168 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
+
+/Times-Roman ff 360.00 scf sf
+12900 3075 m
+gs 1 -1 sc (pull down) col0 sh gr
+% Ellipse
+n 11100 1200 168 168 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
+
+% Polyline
+0 slj
+n 11250 3450 m 11475 3075 l 11700 2850 l 11850 2850 l 12375 3000 l 12675 3075 l
+ 13050 3525 l 12675 3750 l 12150 3675 l 11625 3450 l
+ 11250 3450 l  cp gs col7 0.90 shd ef gr gs col0 s gr 
+% Polyline
+45.000 slw
+n 12675 3075 m
+ 13050 3525 l gs col0 s gr 
+% Polyline
+15.000 slw
+gs  clippath
+10305 3960 m 10245 3960 l 10245 4111 l 10275 3991 l 10305 4111 l cp
+eoclip
+n 10275 4425 m
+ 10275 3975 l gs col0 s gr gr
+
+% arrowhead
+7.500 slw
+n 10305 4111 m 10275 3991 l 10245 4111 l 10305 4111 l  cp gs 0.00 setgray ef gr  col0 s
+% here ends figure;
+$F2psEnd
+rs
+showpage
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/approximate_sampling2.fig
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/approximate_sampling2.fig	(revision 285)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/approximate_sampling2.fig	(revision 285)
@@ -0,0 +1,33 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 54 -1 -1 0.000 0 0 0 0 5306.250 2925.000 6075 2400 6225 2775 6225 3075
+1 3 0 2 0 7 50 -1 14 0.000 1 0.0000 8274 2957 370 370 8274 2957 8625 3075
+1 3 0 2 0 7 50 -1 14 0.000 1 0.0000 7875 1875 691 691 7875 1875 8566 1875
+1 3 0 2 0 4 48 -1 20 0.000 1 0.0000 2400 3300 106 106 2400 3300 2506 3300
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2400 2475 9300 2100
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2400 3300 9300 2625
+2 2 0 3 0 11 59 -1 20 0.000 0 0 -1 0 0 5
+	 -450 1500 2400 1500 2400 4200 -450 4200 -450 1500
+2 2 0 3 0 11 59 -1 20 0.000 0 0 7 0 0 5
+	 9300 1725 11550 1725 11550 3975 9300 3975 9300 1725
+2 1 0 0 0 6 62 -1 20 0.000 0 0 -1 0 0 5
+	 2400 2475 2400 3300 9300 2625 9300 2100 2400 2475
+2 1 0 10 4 7 40 -1 -1 0.000 0 0 -1 0 0 2
+	 7275 2250 7950 2775
+2 1 0 1 0 7 47 -1 -1 0.000 0 0 7 0 0 2
+	 2400 3300 12075 1200
+2 1 0 1 0 7 47 -1 -1 0.000 0 0 7 0 0 2
+	 2400 3300 12375 2325
+4 0 0 54 -1 0 32 0.0000 4 330 1650 150 2925 view cell\001
+4 0 0 54 -1 0 32 0.0000 4 435 1125 9600 3450 object\001
+4 0 0 59 -1 0 32 0.0000 4 330 1800 6825 825 occluders\001
+4 0 0 54 -1 32 36 0.0000 4 285 345 6300 2850 a\001
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/makefile
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/makefile	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/figs/makefile	(revision 243)
@@ -0,0 +1,45 @@
+
+FIG := $(shell ls *.fig)
+
+OBJ := $(shell ls *.obj)
+
+EPS = ${FIG:.fig=.eps} ${OBJ:.obj=.eps}
+
+PDF = ${FIG:.fig=.pdf} ${OBJ:.obj=.pdf}
+
+
+DEFAULT: $(EPS) $(PDF)
+
+pdf:
+	@make $(PDF)
+
+eps:
+	@make $(EPS)
+
+clean:
+	rm -f $(EPS) $(PDF)
+
+
+.SUFFIXES: .fig .eps .pdf .obj
+
+
+.fig.eps: 
+	@echo "Converting $< to $@ ..."
+	@fig2dev -L eps $< $@
+	@echo "done."
+
+.eps.pdf: 
+	@echo "Converting $< to $@ ..."
+	@epstopdf $<
+	@echo "done."
+
+
+.obj.eps: 
+	@echo "Converting $< to $@ ..."
+	@tgif -print -color -eps $< $@
+	@echo "done."
+
+#.obj.pdf: 
+#	@echo "Converting $< to $@ ..."
+#	@tgif -eps $< $@
+#	@echo "done."
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/grafici.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/grafici.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/grafici.bib	(revision 243)
@@ -0,0 +1,2654 @@
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Antos 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
+@InProceedings{Antos95,
+  author	= "K. Anto\v{s} and B. Je\v{z}ek and A. Homola and P. Felkel
+		  and R. Prymula",
+  title		= "Human Anatomy and Virtual Reality",
+  booktitle	= "MASERV'95 -- Proceedings of the Second International
+                   Conference on the Military Applications of Synthetic
+                   Enviroments and Virtual Reality, 06.12.95 -- 10.12.95",
+  year		= "1996",
+  key		= "virtmed, virtual reality, medicine",
+  place		= "Stockholm",
+  publisher     = "FWM, Stockholm",
+  month		= dec,
+  pages		= "198--202"
+}
+
+@Article{Antos96:actaV96,
+  author = 	 {K. Anto¹ and B. JeŸek and A. Homola and
+                  L. Kubínová and P. Felkel},
+  title = 	 {{Methods for Reconstruction of Three-Dimensional
+                  Structures}},
+  journal = 	 {Acta Veterinaria },
+  year = 	 1996,
+  number =	 65,
+  pages =	 {237--245},
+  where =	 {Brno : Vysoká ¹kola veterinární. (4x roènì)}
+}
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Benes 90 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
+@Article{Benes:bajt90,
+  author	= "B. Bene\v{s}",
+  title		= "Jak se vlastn\v{e} pozn\'a kvalita po\v{c}\'{\i}ta\v{c}e
+		  ?",
+  journal	= "Bajt",
+  year		= 1990,
+  number	= 5,
+  pages		= "??",
+  note		= "In Czech."
+}
+
+;;;;;;;;;;;;;; Benes 91 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
+@Article{Benes:bajt91a,
+  author	= "Bene\v{s}, B. ",
+  title		= "Frakt\'aly 1",
+  key		= "Fractals",
+  journal	= "Bajt",
+  year		= "1991",
+  number	= "3",
+  note		= "In Czech."
+}
+
+@Article{Benes:bajt:91b,
+  author	= "Bene\v{s}, B. ",
+  title		= "Frakt\'aly 2",
+  key		= "Fractals",
+  journal	= "Bajt",
+  year		= "1991",
+  number	= "4",
+  note		= "In Czech."
+}
+
+;;;;;;;;;;;;;; Benes 92 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Benes:geom92,
+  author	= "B. Bene\v{s}",
+  title		= "Frakt\'aln\'{\i} geometrie a po\v{c}\'{\i}ta\v{c}ov\'a
+		  grafika",
+  booktitle	= "Sborn\'{\i}k setk\'an\'{\i} spole\v{c}nosti pro
+		  po\v{c}\'{\i}ta\v{c}ovou grafiku a geometrii",
+  year		= "1992",
+  editor	= "F. Je\v{z}ek",
+  publisher	= "Technical University Pilsen",
+  month		= oct,
+  pages		= "??"
+}
+
+
+;;;;;;;;;;;;;; Benes 93 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
+@Article{Benes:cecho93,
+  author	= "Bene\v{s}, B. ",
+  title		= "Frakt\'aln\'{\i} geometrie a po\v{c}\'{\i}ta\v{c}ov\'a
+		  grafika",
+  key		= "Fractals",
+  journal	= "Computer Echo",
+  year		= "1993",
+  volume	= "II",
+  number	= "3",
+  pages		= "38-41",
+  note		= "In Czech"
+}
+
+
+;;;;;;;;;;;;;; Benes 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
+@InProceedings{Benes:dg94,
+  author	= "Bene\v{s}, B.",
+  title		= "Modelling of Plants using {NURBS}",
+  key		= "benes",
+  pages		= "97--102",
+  booktitle	= "Sborn\'{\i}k 14.setk\'{a}n\'{\i} spole\v{c}osti pro
+		  deskript\'{\i}vn\'{\i} geometrii, po\v{c}\'{\i}ta\v{c}ovou
+		  grafiku a technick\'{e} kreslen\'{\i}",
+  year		= "1994",
+  note		= "In Czech"
+}
+
+@InProceedings{Benes:geom94,
+  author	= "Bene\v{s}, B.",
+  title		= "Modelov\'{a}n\'{\i} rostlin pomoc\'{\i} {NURBS}",
+  booktitle	= "Sborn\'{\i}k 14.setk\'{a}n\'{\i} spole\v{c}osti pro
+		  deskript\'{\i}vn\'{\i} geometrii, po\v{c}\'{\i}ta\v{c}ovou
+		  grafiku a technick\'{e} kreslen\'{\i}",
+  key		= "Benes",
+  pages		= "97-102",
+  publisher	= "Technical University Pilsen",
+  year		= 1994,
+  note		= "In Czech"
+}
+
+@InProceedings{Benes:ws94,
+  author	= "B. Bene\v{s} and T. Pavlis and J. \v{Z}\'{a}ra",
+  title		= "Generating Trees and Plants for Computer Graphics",
+  crossref	= "ws94",
+  key		= "benes",
+  pages		= "29--30"
+}
+
+@InProceedings{Benes:wscg94,
+  author	= "Bene\v{s}, B.",
+  title		= "Generating Plants for Computer Graphics",
+  crossref	= "wscg94",
+  key		= "benes",
+  pages		= "221--223"
+}
+
+
+;;;;;;;;;;;;;; Benes 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
+@Article{Benes:cecho95,
+  author	= "Bene\v{s}, B. and \v{Z}\'ara, J.",
+  title		= "Laborato\v{r} po\v{c}\'{\i}ta\v{c}ov\'e grafiky na {FEL}
+		  {\v{C}VUT}",
+  journal	= "Computer ECHO",
+  year		= "1995",
+  volume	= "IV",
+  number	= "1",
+  pages		= "8-12",
+  month		= feb,
+  note		= "In Czech"
+}
+
+
+@Article{Benes:sgiw95,
+  author	= "Bene\v{s}, B. and Pavlis, T. and \v{Z}\'ara, J.",
+  title		= {Interactive Data Visualization},
+  journal	= "Silicon World",
+  year		= "1995",
+  volume	= "3",
+  number	= "10",
+  pages		= "38--41",
+  note		= "In Czech"
+}
+
+@InProceedings{Benes:ws95,
+  author	= "Bene\v{s}, B.",
+  title		= "Generating plants using {NURBS}",
+  crossref	= "ws95",
+  key		= "benes",
+  pages		= "253--254"
+}
+
+@InProceedings{Benes:wscg95,
+  author	= "Bene\v{s}, B.",
+  title		= "Generating a model of plant using {NURBS}",
+  crossref	= "wscg95",
+  key		= "Benes",
+  volume	= "I",
+  pages		= "1--4"
+}
+
+
+;;;;;;;;;;;;;; Benes 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
+@InProceedings{Benes:EGCAS96,
+  author        = "Bene\v{s}, B.",
+  title         = "An {E}fficient {E}stimation of {L}ight in
+		   {S}imulation of {P}lant {D}evelopment",
+  editor        = "R.Boulic and G.H\'egron",
+  series        = "Springer Computer Science",
+  pages         =  "153-165",
+  booktitle     = "Computer {A}nimation and {S}imulation'96",
+  year          =  1996,
+  publisher     = "Springer--Verlag Wien New York",
+  abstract      = "During a simulation of plant development
+                   evaluation of the amount of light plays a
+                   significant role. Most of the previous works take
+                   into account only constant amount and constant
+                   direction of the light in the scene without respect
+                   to local shadows in the tree. In the other works
+                   this evaluation strongly depends on the number of
+                   objects in the scene.
+
+                   This paper introduces a new method for evaluation
+                   of amount of light for the artificial plants. This
+                   technique is based on Z-buffer algorithm and has
+                   the ability to evaluate the direction and the
+                   amount of light for every leaf in the plant with a
+                   significantly decreased time of
+                   calculation. Several new aspects of lifetime of the
+                   plant elements and of the whole plant are
+                   discussed."
+}
+
+@Article{Benes:cadgr96a,
+ author         = "Bene\v{s}, B. and \v{Z}\'ara, J.",
+ title          = {Za tajemnstv\'{\i}m {O}pen{GL}},
+ journal        = "{CAD} \& {G}raphics",
+ year           = 1996,
+ volume         = "I",
+ number         = 3,
+ pages          = "58-61",
+ note           = "In Czech"
+}
+
+@Article{Benes:cadgr96b,
+ author         = "Bene\v{s}, B.",
+ title          = {{P}ohled do budoucnosti: {E}urographics'96},
+ journal        = "{CAD} \& {G}raphics",
+ year           = "1996",
+ volume         = "I",
+ number         = "5",
+ pages          = "24--30",
+ note           = "In Czech"
+}
+
+@Article{Benes:sgiw96,
+  author	= "Bene\v{s}, B. and \v{Z}\'ara, J.",
+  title		= {{OpenGL} -- {N}ov\'e paradigma v po\v{c}\'{\i}ta\v{c}ov\'e
+		  grafice?},
+  journal	= "Silicon World",
+  year		= "1996",
+  volume	= "I",
+  number	= "12",
+  pages		= "37--40",
+  note		= "In Czech"
+}
+
+@InProceedings{Benes:ws96,
+  author	= "Bene\v{s}, B. and \v{S}och, M.",
+  title		= "Simulation of plant development using extended
+		  strand model",
+  crossref	= "ws96",
+  key		= "benes",
+  year		= "1996",
+  pages		= "289-290"
+}
+
+@InProceedings{Benes:wscg96,
+  author	= "Bene\v{s}, B. and Hole\v{c}ek, A. and \v{Z}\'ara, J.",
+  title		= "Language {S}upport for {D}istributed {V}irtual {R}eality",
+  key		= "virtual reality, benes, holecek, zara",
+  crossref	= "wscg96",
+  volume	= "II",
+  pages		= "233-243"
+}
+
+;;;;;;;;;;;;;; Benes 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
+@Book{Benes:skr97,
+  author	= {Bene¹, Bedøich and Felkel, Petr and Sochor, Jiøí and
+		  ®ára, Jiøí},
+  title		= {{Vizualizace}},
+  edition	= {1},
+  address	= {Praha},
+  publisher	= {ÈVUT},
+  year		= {1997},
+  pages		= {197},
+  figures	= {163},
+  isbn		= {80-01-01582-3},
+  note		= {(in Czech)}
+}
+
+@Article{Benes97a,
+  author	= {Bene¹, Bedøich},
+  title		= {{Eurographics'96}},
+  journal	= {Silicon World},
+  number	= {16},
+  volume        = {IV},
+  year		= {1997},
+  pages		= {64--65},
+  note		= {(in Czech)}
+}
+
+@Article{Benes97b,
+  author	= {Bene¹, Bedøich},
+  title		= {{Eurographics '97}},
+  journal	= {Pixel},
+  volume        = {II},
+  number	= {11},
+  year		= {1997},
+  pages		= {14--15},
+  issn		= {1211-5401},
+  note		= {(in Czech)}
+}
+
+@Article{Benes97c,
+  author	= {Bene¹, Bedøich},
+  title		= {{Eurographics'97: Grafika, 3D a Internet}},
+  journal	= {Computer Design},
+  volume        = {I},
+  number	= {5},
+  year		= {1997},
+  pages		= {6--13},
+  issn		= {1211-1082},
+  note		= {(in Czech)}
+}
+
+@Article{Benes97d,
+  author	= {Bene¹, Bedøich and Vorlíèek, Jan},
+  title		= {{Esa tøetího rozmìru}},
+  journal	= {Computer},
+  volume        = {IV},
+  number	= {4},
+  year		= {1997},
+  pages		= {4--8},
+  issn		= {1210-8790},
+  note		= {(in Czech)}
+}
+
+@Unpublished{Benes97e,
+  author	= {Bene¹, Bedøich},
+  title		= {{Fraktály}},
+  note		= {Invited Lecture},
+  address	= {VUT Brno},
+  organisation	= {VUT Brno, doc.J.Sochor,CSc.},
+  date		= {10.12.97},
+  year		= {1997}
+}
+
+@InProceedings{Benes97f,
+  author	= {Bene¹, Bedøich},
+  title		= {{The Growth Direction in Virtual Plants Simulation}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {293--294}
+}
+
+@InProceedings{Benes97g,
+  author	= {Bene¹, Bedøich and Marák, Ivo and ©imek, Pavel and
+		  Slavík, Pavel},
+  title		= {{Hierarchical Erosion of Synthetical Terrains}},
+  booktitle	= {{Spring Conference on Computer Graphics}},
+  address	= {Bratislava},
+  publisher	= {Comenius University},
+  year		= {1997},
+  pages		= {93--100},
+  isbn		= {80-223-1176-6}
+}
+
+@InProceedings{Benes97h,
+  author	= {Bene¹, Bedøich},
+  title		= {{Visual Simulation of Plant Development with Respect to
+		  Influence of Light}},
+  booktitle	= {{Computer Animation and Simulation '97}},
+  address	= {Wien},
+  publisher	= {Springer},
+  year		= {1997},
+  pages		= {125--136},
+  isbn		= {3-211-83048-0}
+}
+
+@InProceedings{Benes97i,
+  author	= {Bene¹, Bedøich},
+  title		= {{Fast Estimation of Light in Simulation of Plant
+		  Development}},
+  booktitle	= {{WSCG '97}},
+  volume	= {1},
+  address	= {Pilsen},
+  publisher	= {University of West Bohemia},
+  year		= {1997},
+  pages		= {1--10},
+  isbn		= {80-7082-306-2}
+}
+
+
+@InProceedings{Benes:wscg97,
+  author = 	 {B. Bene\v{s}},
+  title = 	 {Fast Estimation of Growth Direction in Virtual Plants
+		  Simulation},
+  crossref =	 {wscg97},
+  volume =	 {I},
+  pages =	 {1--10},
+  note =	 {benes}
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Berka 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Berka:sscg94,
+  author	= "R. Berka and I. Jel\'{\i}nek",
+  title		= "Formal Methods in Human Body Model Animation",
+  crossref	= "sscg94",
+  key		= "berka, jelinek",
+  pages		= "220--225"
+}
+
+@InProceedings{Berka:ws94,
+  author	= "R. Berka and I. Jel\'{\i}nek",
+  title		= "{VITALIATOR} - the human body animation system",
+  crossref	= "ws94",
+  key		= "berka, jelinek",
+  pages		= "45--46"
+}
+
+
+;;;;;;;;;;;;;; Berka 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Berka:ws95,
+  author	= "R. Berka and I. Jel\'{\i}nek",
+  title		= "Using formal methods in the control of independent
+		  animated objects",
+  crossref	= "ws95",
+  key		= "berka, jelinek",
+  pages		= "251--252"
+}
+
+@InProceedings{Berka:wscg95,
+  author	= "R. Berka and I. Jel\'{\i}nek",
+  title		= "One Method of the Human Body Model Animation",
+  crossref	= "wscg95",
+  key		= "berka, jelinek",
+  volume	= "I",
+  pages		= "5--15"
+}
+
+;;;;;;;;;;;;;; Berka 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Berka:rostock96,
+  author =       {R. Berka and M. Brachtl and A. Hole\v{c}ek and
+                  M. Novotn\'{y} and J. P\v{r}ikryl and P. Slav\'{i}k
+                  and J. \v{Z}\'{a}ra},
+  title =        {Three-Dimensional Information System on the World
+                  Wide Web},
+  booktitle =    {Multimedia '96},
+  editor =       {B. Urban},
+  year =         1996,
+  organization = {Eurographics},
+  publisher =    {Springer-Verlag},
+  address =      {Wien, New York},
+  postscript =   {/Publications/Berka_rostock96.ps.gz},
+  pages =        {70--78}
+}
+
+;;;;;;;;;;;;;; Berka 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
+@InProceedings{Berka97a,
+  author	= {Berka, Roman},
+  title		= {{Reduction of Computations in Physics-Based Animation
+		  Using Level of Detail}},
+  booktitle	= {{Spring Conference on Computer Graphics}},
+  address	= {Bratislava},
+  publisher	= {Comenius University},
+  year		= {1997},
+  pages		= {69--76},
+  isbn		= {80-223-1176-6}
+}
+
+@InProceedings{Berka97b,
+  author	= {Berka, Roman and Novotný, Martin and Píè, V. and
+		  Slavík, Pavel},
+  title		= {{EYE - the Navigation and Training System for Blind}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {291--292}
+}
+
+;;;;;;;;;;;;;; Berka 98 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
+
+
+@InProceedings{Berka:poster98,
+  author = 	 {M. Koutek and R. Berka },
+  title = 	 {Optimizing Motion of Two-Legged Creature},
+  crossref =	 {poster98},
+  pages =	 {IC-26}
+}
+
+@InProceedings{Berka:ecdvrat98,
+  author =       {R. Berka and P. Slav\'{\i}k},
+  title =        {Virtual {R}eality for {B}lind {U}sers},
+  booktitle =    {The 2nd Conference on Disability, Virtual Reality
+                  and Associated Technologies},
+  editor =	 {P. Sharkey and D. Rose and Jan-Ingvar Lindstr\"{o}m},
+  year =         1998,
+  publisher =	 {University of Reading, UK},
+  address =	 {Sk\"{o}vde, Sweden},
+  month =	 {September},
+  pages =	 {89--98}
+}
+
+
+
+;;;;;;;;;;;;;; Bila 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Bila97,
+  author	= {Bíla, J. and Jelínek, Ivan},
+  title		= {{Gate off Complexity - Artificial Intelligence or
+		  Artificial Life}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {245--246}
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Bittner 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@TechReport{Bittner:delft96,
+  author = 	 {Bittner, J.},
+  title = 	 {RECNET - The speech recognition system},
+  institution =  {Technical University, Delft},
+  year = 	 1996,
+  month = 	 jun,
+}
+
+@TechReport{Bittner:dresden95,
+  author = 	 {Bittner, J. and Cup\'ak, M.},
+  title = 	 {Dragon Voice Tools},
+  institution =  {HTW Dresden},
+  year = 	 1995,
+  month = 	 sep,
+}
+
+@TechReport{Bittner:ecp96,
+  author = 	 {Bittner, J.},
+  title = 	 {Enumeration of Convex Polyhedra in Arbitrary Dimension},
+  institution =  {Department of Computers, Czech Technical University },
+  year = 	 1996,
+}
+
+
+;;;;;;;;;;;;;; Bittner 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Bittner97,
+  author	= {Bittner, Jiøí},
+  title		= {{Global Visibility}},
+  booktitle	= {{CESCG '97}},
+  address	= {Wien},
+  publisher	= {Technische Universität},
+  year		= {1997},
+  pages		= {105--111}
+}
+
+@InProceedings{Bittner:gaw97,
+  author = 	 {Bittner, J.},
+  title = 	 {Object Space Visibility Computations},
+  booktitle =    {Graphics and WEB '97},
+  year =         1997,
+  organization = {HTW Dresden, Germany},
+  key =          {global visibility, VRML, conservative visibility, spatial
+                  subdivision, visibility computations},
+}
+
+@MastersThesis{Bittner:masters97,
+  author = 	 {Bittner, J.},
+  title = 	 {Global Visibility Computations},
+  school = 	 {Department of Computers, Czech Technical University},
+  year = 	 1997,
+  month = 	 jan,
+}
+;;;;;;;;;;;;;; Bittner 98 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Bittner:poster98,
+  author = {Ji\v{r}\'{\i} Bittner},
+  title = {Conservative Hierarchical Visibility with Occlusion Trees},
+  crossref = {poster98},
+  pages = {IC-3}
+}
+
+@inproceedings{bittner98b,
+  author = "Bittner, J. and Havran, V. and Slavik, P.",
+  title = "Hierarchical Visibility Culling with Occlusion Trees",
+  booktitle = "Proceedings of Computer Graphics International '98 (CGI'98)",
+  year = "1998",
+  month = jun,
+  pages = "207--219",
+  address = "Hannover, Germany",
+  publisher = "IEEE, New York",
+}
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Brachtl 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Brachtl:poster95,
+  author	= "M. Brachtl and R. Berka",
+  title		= "{Comparing Test of a Few Graphical Workstations}",
+  crossref	= "Poster95",
+  key		= "benchmark, brachtl",
+  pages		= "125"
+}
+
+;;;;;;;;;;;;;; Brachtl 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Brachtl:ws96,
+  author	= "M. Brachtl",
+  title		= "Distributed Information System on {World Wide Web}",
+  crossref	= "ws96",
+  key		= "www, brachtl",
+  pages		= "251--252"
+}
+
+;;;;;;;;;;;;;; Brachtl 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Brachtl97,
+  author	= {Brachtl, Martin},
+  title		= {{Particle-System Based Support for Behavioral Animation}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {327--328}
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Cerveny 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Cerveny97,
+  author	= {Èervený, Martin and Dryák, Ale¹},
+  title		= {{Routing in ATM Networks Using PNNI 1.0}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {313--314}
+}
+
+;;;;;;;;;;;;;; Chlumsky 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Chlumsky97,
+  author	= {Chlumský, Petr},
+  title		= {{3D-Dithering}},
+  booktitle	= {{CESCG '97}},
+  address	= {Wien},
+  publisher	= {Technische Universität},
+  year		= {1997},
+  pages		= {113--121}
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Diblik 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Diblik97,
+  author	= {Diblík, Pavel and Slavík, Pavel},
+  title		= {{Control of Lossy Compression of Three-Dimensional Data}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {295--296}
+}
+
+@InProceedings{Diblik97a,
+  author	= {Diblík, Pavel and Slavík, Pavel},
+  title		= {{Control of Lossy Compression of Three-dimensional Data}},
+  booktitle	= {{Spring Conference on Computer Graphics}},
+  address	= {Bratislava},
+  publisher	= {Comenius University},
+  year		= {1997},
+  pages		= {144--151},
+  isbn		= {80-223-1176-6}
+}
+
+@InProceedings{Diblik97b,
+  author	= {Diblík, Pavel and Slavík, Pavel},
+  title		= {{Controlled Lossy Compression of Multidimensional Data}},
+  booktitle	= {{Proceedings of 8th Eurographics Workshop on Visualization
+		  in Scientific Computing}},
+  volume	= {1},
+  address	= {Boulogne sur Mer},
+  publisher	= {Universite du Littoral},
+  year		= {1997},
+  pages		= {183--192}
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Felkel 93 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{  Felkel:ws93,
+  author = 	 {P. Felkel and J. \v{Z}\'ara},
+  title = 	 {{The  Roof  Construction Problem}},
+  booktitle = 	 {Proceedings  of CTU Workshop '93},
+  editor =	 {A. Strejc},
+  volume =	 {I - Informatics \& Cybernetics},
+  year =	 1993,
+  publisher =	 {CTU-Publishing House, Prague},
+  month =	 jan # { 18--21,},
+  pages =	 {85--86},
+  where =	 {Grlab, PF sfcs-5},
+  procenta =	 {80,20},
+  annote =	 {Popis alg. na konstrukci støech - tj. de Facto konstrukci 
+                  bisector Angular Network, jak to nazyva Oliva}
+}
+
+;;;;;;;;;;;;;; Felkel 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@TechReport{Felkel:bericht94,
+  author	= "P. Felkel",
+  title		= {{AutoCAD STEP} Processor Implementation. {D}evelopment of
+		  an {AutoCAD STEP} Postprocessor for a Ship Hull Geometry
+		  Model},
+  institution	= "ZGDV Rostock",
+  year		= 1994,
+  key		= "felkel",
+  pages		= "1--23",
+  number	= "79/94",
+  month		= apr
+}
+
+@Article{Felkel:topics94,
+  author	= "P. Felkel and G. Vatterrott",
+  title		= { {STEP} {P}rozessor f{\"u}r {AutoCAD} (Auf der {G}rundlage
+		  der {K2-T}ools)},
+  key		= "felkel",
+  journal	= "Computer Graphics Topics",
+  year		= "1994",
+  volume	= "6",
+  number	= "2",
+  pages		= "9",
+  note		= "In German."
+}
+
+;;;;;;;;;;;;;; Felkel 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Felkel95,
+  author	= "P. Felkel and J. \v{Z}\'ara",
+  title		= "Segmentation and Visualization of data acquitted by {MR}
+		  scanner",
+  year		= "1995",
+  key		= "virtmed, virtual reality, medicine",
+  pages		= "62",
+  month		= may,
+  place		= "Prague",
+  editor	= "J. Hozman",
+  booktitle	= {Proceedings of contributions on workshop "Teaching and
+		  Research within the Biomedical Engineering and
+		  Biotechnology at FEE CTU in Prague"},
+  note		= "In Czech"
+}
+
+@Proceedings{Felkel:sr95,
+  title = 	 {Selected Readings of Computer Graphics Group},
+  year = 	 1995,
+  editor =	 {P. Felkel and J. Mallat},
+  series =	 {DC-96-04 and 05},
+  publisher =	 {Czech Technical University},
+  address =	 {Prague},
+  note =	 {Collaborative Report},
+  procenta =     {70,30}
+}
+
+@InProceedings{Felkel:ws95,
+  author	= "P. Felkel and J. \v{Z}\'{a}ra",
+  title		= "{VIRTMED}--A Project for {3D} Medical Data Processing and
+		  Visualization",
+  crossref	= "ws95",
+  pages         = "165--166",
+  key		= "virtmed, felkel, zara"
+}
+
+
+;;;;;;;;;;;;;; Felkel 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Felkel:egvisc96,
+  author = 	 {P. Felkel and P. Mr\'{a}zek and L. S\'{y}kora and
+		  J. \v{Z}\'{a}ra and B. Je\v{z}ek},
+  title = 	 {On Segmentation for Medical Data Visualization},
+  crossref =     {egvisc96},
+  key =		 {segmentation, PDM, point distribution model,
+		  morphology, topology, 2,5D model},
+  pages =	 {189--198},
+  postscript =   {/Publications/felkel_egvisc_96.ps.gz},
+  abstract =     {Segmentation forms the crucial step of Magnetic
+		  Resonance  (MR) data visualization. The aim  of our
+		  article  is to present  two fundamental methods for
+		  segmentation of medical data acquired by MR
+		  scanners. After a short overview of rendering
+		  techniques the appropriate segmentation step for
+		  each of them is discussed. \\
+
+		  Firstly, we describe a segmentation algorithm
+ 		  suitable for surface rendering. We present a model
+ 		  of object shape and appearance, and show how to
+ 		  match the model to the actual image data. Genetic
+ 		  algorithms perform the initial, rough estimation and
+ 		  the position is then refined by a gradient
+ 		  method. We demonstrate the functionality of a
+ 		  simple, one-level model, as well as that of a
+ 		  multiple resolution extended model.\\
+
+		  Secondly, an algorithm suitable for volume rendering
+ 		  is discussed. It is based on combined model which
+ 		  stores not only grey level and gradient information,
+ 		  but takes into account also adjacency of organs and
+ 		  their hierarchical partitioning.
+
+		  We present results of practical tests of both
+ 		  methods described.}  
+}
+
+@Article{Felkel:sn96,
+  author	= "P. Felkel and J. \v{Z}\'{a}ra",
+  title		= "Systems for scientific visualization
+                  (Systémy pro vizualizaci dat)",
+  key		= "scientific visualization, AVS, Explorer, ",
+  journal	= "Software newspaper (Softwarov\'e noviny)",
+  year		= "1996",
+  volume	= "VII",
+  number	= "2",
+  pages		= "26--30",
+  month		= feb,
+  note		= "In. Czech",
+  annote	= "pokec o AVS a Exploreru + zdroje med. dat"
+}
+		  
+@InProceedings{Felkel:ws96,
+  author	= "P. Felkel and J. \v{Z}\'{a}ra and P. Mr\'{a}zek",
+  title		= "Towards Knowledge Based Segmentation of Brain Structures",
+  crossref	= "ws96",
+  key		= "virtmed, knowledge based segmentation, brain, active shape
+		  model, genetic algorithms",
+  pages		= "253--254",
+  month		= jan
+}
+
+
+;;;;;;;;;;;;;; Felkel 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Article{Felkel:actaP97,
+  author	= {Felkel, Petr and Sýkora, Libor and ®ára, Jiøí},
+  title		= {{Three Medical Image Segmentation Algorithms}},
+  journal	= {Acta Polytechnica},
+  publisher     = {Published by Czech Technical
+                   University, Prague},
+  volume	= {37},
+  number	= {2},
+  year		= {1997},
+  html          = {http://www.cvut.cz/ascii/ctu/publishing/acta.html},
+  postscript    = {/Publications/felkel_actaP_96.ps.gz},
+  pages		= {51--63},
+  issn		= {1210-2709},
+  note          = {Published by Czech Technical
+                   University, Prague}
+}
+
+@InProceedings{Felkel:itab97,
+  author	= {Felkel, Petr and Janáèek, Jiøí},
+  title		= {{Custom-Made Modules of the Explorer Programme Package for
+		  Image/Volume Processing}},
+  booktitle	= {{Information Technology Applications in Biomedicine
+                   -- ITAB'97}},
+  address	= {Piscataway, NJ},
+  publisher	= {IEEE},
+  editor =       {V. Eck},
+  year		= {1997},
+  month =        sep # "7--9",
+  pages		= {90--91},
+  isbn		= {0-7803-4318-2}
+}
+
+@Article{Antos:lat97,
+  author	= "K. Anto¹ and B. JeŸek and A. Homola and P. Felkel
+		  and L. Kubínová",
+  title = 	 {Analyze -- programový nástroj pro vizualizaci
+                   medicínských dat},
+  journal = 	 {Lékaø a technika},
+  year = 	 1997,
+  volume =	 28,
+  number =	 6,
+  month =	 nov,
+  ISSN =         {0301-5491},
+  anote =        {Vydává Èeská lékaøská spoleènost J. E. Purkynì 6x za rok},
+  pages =	 {127--132},
+  where =	 {grlab},
+  note =         {In Czech.}
+}
+
+@InProceedings{Felkel:sccg97,
+  author	= {Felkel, Petr and Janáèek, Jiøí},
+  title		= {{Biomedical imaging application of Explorer}},
+  booktitle	= {{SCCG 1997-Company Presentions Posters}},
+  volume	= {2},
+  address	= {Bratislava},
+  publisher	= {Comenius University},
+  year		= {1997},
+  pages		= {19--20}
+}
+
+;;;;;;;;;;;;;; Felkel 98 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Felkel:ws98,
+  author = 	 {P. Felkel},
+  title = 	 {{3D Reconstruction from Cross Sections by means 
+                  of Contour Tiling}},
+  crossref =	 {ws98},
+  pages =	 {241--242}
+}
+
+
+
+
+@InProceedings{Felkel:poster98,
+  author = 	 {P. Felkel},
+  title = 	 {Straight Skeleton Implementation},
+  crossref =	 {poster98},
+  pages =	 {IC-12}
+}
+
+@InProceedings{Felkel:sccg98,
+  author = 	 {P. Felkel and ©. ObdrŸálek},
+  title = 	 {Straight Skeleton Computation},
+  crossref =     {sccg98},
+  pages =	 {210--218},
+  postscript =	 {/Publications/felkel_sccg_98.ps.gz}
+}
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Havran 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Booklet{Havran95,
+  title		= {Effective Homogeneous Transformation of Large Raster
+		  Images},
+  author	= {V. Havran and J. \v{Z}\'{a}ra},
+  howpublished	= {Poster on SOFSEM'95: 22nd Seminar on Current Trends
+		  inTheory and Practice of Informatics},
+  address	= {Milovy, Czech Republic},
+  year		= 1995,
+  month 	= nov
+}
+
+@InProceedings{Havran:ws95,
+  author	= "V. Havran and J. \v{Z}\'{a}ra",
+  title		= "Simulation of Real Camera for Rendering",
+  crossref	= "ws95",
+  key		= "havran, zara",
+  pages		= "183--184"
+}
+
+
+;;;;;;;;;;;;;; Havran 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Havran96:d,
+  author = {Havran, V.},
+  title = {Parallel Implementation of Ray Tracing on Shared Memory
+           Architecture},
+  booktitle = {Poster Section at SOFSEM'96},
+  month = {November 23-30},
+  year = {1996},
+  address = {Milovy, Czech Republic},
+}
+
+@InProceedings{Havran96:c,
+  author = {Havran, V. and \v{Z}\'{a}ra, J.},
+  title = {Some Practical Aspects of Ray Tracing on Shared Memory Machine},
+  booktitle = {Poster Section in Eurographics Workshop on Parallel Rendering},
+  month = {August 26-27},
+  year = {1996},
+  address = {Bristol, UK},
+}
+
+@InProceedings{Havran96:poster96,
+  author = {Havran, V.},
+  title = {Load Balancing Techniques for Ray-tracer on Shared Memory
+           Machine},
+  crossref = "poster96",
+  pages = {74-74}, 
+}
+
+@MastersThesis{Havran96:a,
+  author = {Havran, V.},
+  title = {The simulation of Optical Effects},
+  address = {Prague, Czech Republic},
+  month = {February},
+  school = {CTU-FEE Prague, Department of Computer Science and Engineering},
+  year = 1996,
+}
+
+
+;;;;;;;;;;;;;; Havran 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Havran97:f,
+  author = {Havran, V.},
+  title = {Cache Sensitive Representation for the BSP Tree},
+  booktitle = {Proceedings of Compugraphics'97},
+  note  = {Accepted to Compugraphics'97, International Conference
+           on Computer Graphics, 8 pages, Portugal,
+           held 15-18th of December},
+  year  = {1997},
+  month = {December},
+}
+
+@TechReport{Havran97:rep,
+  author = {V. Havran},
+  title = {Spatial Data Structures for Visibility Computation},
+  institution = {CTU-FEE Prague},
+  number = {DC-PSR-97-05},
+  month = {May},
+  year = {1997},
+  note = {Postgraduate Study Report, 34 pages, available at 
+          ftp://sgi.felk.cvut.cz/outgoing/havran/minimum/dc-psr-97-05.ps.gz},
+}
+
+@InProceedings{Havran97:poster97,
+  author = {V. Havran},
+  title  = {Evaluation of BSP trees for ray-tracing},
+  crossref = "poster97",
+  pages = {2 pages},
+  year  = {1997},
+}
+
+@InProceedings{Havran97:sccg97,
+  author	= {Havran, Vlastimil and ®ára, Jiøí},
+  title		= {{Evaluation of BSP Properties for Ray-tracing}},
+  booktitle	= {{Spring Conference on Computer Graphics}},
+  address	= {Bratislava},
+  publisher	= {Comenius University},
+  year		= {1997},
+  pages		= {155--162},
+  isbn		= {80-223-1176-6}
+}
+
+@InProceedings{Havran97:ws97a,
+  author	= {Havran, Vlastimil},
+  title		= {{Parallel Ray-Tracer on Shared Memory Multiprocessor
+		  Machines Connected via Internet}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {321--322}
+}
+
+@InProceedings{Havran97:ws97b,
+  author	= {Havran, Vlastimil and ©imek, Pavel and ©och, Michal and
+		  Tvrdík, Pavel},
+  title		= {{Parallel Merge Sort on Shared Memory Multicomputer}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {287--288}
+}
+
+;;;;;;;;;;;;;; Havran 98 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Havran:poster98,
+   author = "Vlastimil Havran",
+   title = "Constructing Surface Area Binary Space Partitioning with
+            Rope Trees for Ray Tracing",
+   crossref = {poster98},
+   pages = {IC15} 
+}
+
+@misc{Havran98:a,
+   author = { Havran, V.},
+   title = {Statistically Optimized Traversal Algorithm for BSP trees},
+   booktitle = {Proceedings of Workshop'98},
+   organization = { CTU--FEE },
+   address = { Prague, Czech Republic },
+   editor= { A.Strejc },
+   month = { February 3--5 },
+   pages = { 365--166},
+   year  = { 1998 },
+}
+
+@InProceedings{Havran98:b,
+  author = { Havran, V. and Bittner, J. and \v{Z}\'{a}ra, J.},
+  title  = { Ray Tracing with Rope Trees},
+  booktitle = { Proceedings of 13th Spring Conference on Computer Graphics}, 
+  address = { Budme\v{r}ice},
+  date  = {April 23--26},
+  year  = 1998,
+  pages = "130--139",
+}
+
+@misc{Havran98:d,
+   author = {Havran, V. and Kopal, T. and Bittner, J. and \v{Z}\'{a}ra, J.},
+   title = {FAST ROBUST BSP TREE TRAVERSAL ALGORITHM FOR RAY TRACING},
+   note = { 8 pages, Submitted to Journal of Graphics Tools},
+   year = { 1998 },
+}
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Hejda 98 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{hejda:poster98,
+   author = {Hejda, P.},
+   title = {Visual \& Interactive Simulation Package},
+   crossref = {poster98},
+   pages = {IC16}
+}
+
+
+;;;;;;;;;;;;;; Hejda 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@MastersThesis{Hejda:94,
+  author =       {Petr Hejda},
+  title =        {{Stochastic Textures (in Czech)}},
+  school =       {Department of Computer Science and Engineering, FEE,
+                  CTU Prague, Czech Republic},
+  year =         1994
+}
+
+;;;;;;;;;;;;;; Hejda 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Hejda:poster95,
+  author	= "Hejda, P.",
+  title		= "Channel as Representation of Data Flow",
+  key		= "hejda",
+  pages		= "173",
+  crossref	= "poster95"
+}
+
+;;;;;;;;;;;;;; Hejda 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Hejda:poster96,
+  author        = "Petr Hejda",
+  title         = "How to Build and/or Optimize an Efficient User
+                   Interface",
+  key           = "hejda",
+  pages         = "75",
+  crossref =  "poster96",
+}
+
+@InProceedings{Hejda:ws96,
+  author	= "Hejda, P.",
+  title		= "Labyrinth Project",
+  key		= "hejda",
+  pages		= "287",
+  volume        = "II",
+  crossref	= "ws96"
+}
+
+@InProceedings{Hejda:wscg96,
+  author	= "Hejda, P. and \v{Z}\'ara, J.",
+  title		= "Channel - a Generalized Pipe",
+  key		= "hejda, zara",
+  pages		= "244-245",
+  volume	= "II",
+  crossref	= "wscg96"
+}
+
+;;;;;;;;;;;;;; Hejda 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@TechReport{Hejda:97,
+  author =       {Petr Hejda and Suleyman Sevinc},
+  title =        {{VISP - Visual and Interactive Simulation Package}},
+  institution =  {Basser Department of Computer Science,
+                  The University of Sydney, N.S.W. Australia},
+  year =         1997,
+  key =          {hejda,sevinc},
+  ISBN =         {??},
+  annote =       {Fill in the ISBN}
+}
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Holecek 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Holecek:poster95,
+  author	= "Hole\v{c}ek, A. and P\v{r}ikryl, J. ",
+  title		= {On Efficency of Parallel Raytracing},
+  crossref = "poster95",
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Hollay 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Hollay:ws94,
+  author	= "P. Hollay and S. Hostomsk\'{y} and I. Jel\'{\i}nek and M.
+		  \v{S}norek ",
+  title		= "Multimedia generation and presentation system",
+  crossref	= "ws94",
+  key		= "hollay, jelinek, snorek",
+  pages		= "43--44"
+}
+
+;;;;;;;;;;;;;; Hollay 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Hollay97:ws97,
+  author	= {Hollay, P. and Jelínek, Ivan},
+  title		= {{Experimental Multimedia and Hypermedia System EMHS 2.0}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {297--298}
+}
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Hudec 93 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Book{Hudec:skr93a,
+  author	= {B. Hudec},
+  title		= {Programming techniques},
+  publisher	= "Czech Technical University Publishing House, Prague",
+  year		= 1993,
+  key		= {hudec},
+  note		= "In Czech."
+}
+
+@Book{Hudec:skr93b,
+  author	= {B. Hudec},
+  title		= {Foundations of Computer Graphics},
+  publisher	= "Czech Technical University Publishing House",
+  year		= 1993,
+  pages		= "222",
+  note		= "In Czech."
+}
+
+;;;;;;;;;;;;;; Hudec 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Book{Hudec:skr94,
+  author	= {B. Hudec},
+  title		= {Graphics Systems {PHIGS} and GKS},
+  publisher	= "Czech Technical University Publishing House",
+  year		= 1994,
+  pages		= "166",
+  note		= "In Czech."
+}
+
+@InProceedings{Hudec:wscg94,
+  author	= "B. Hudec",
+  title		= "Graphics Systems {PHIGS} and {PHIGS+}",
+  crossref	= "wscg94",
+  key		= "hudec",
+  pages		= "125--142"
+}
+
+
+;;;;;;;;;;;;;; Hudec 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Book{Hudec:skr97,
+  author	= {B. Hudec},
+  title		= {{Základy poèítaèové grafiky}},
+  edition	= {1},
+  address	= {Praha},
+  publisher	= {ÈVUT},
+  year		= {1997},
+  pages		= {222},
+  figures	= {153},
+  isbn		= {80-01-00932-7},
+  note		= {(in Czech)}
+}
+		  
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Jelinek 93 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Book{Jelinek:skr93,
+  author =       {Ivan Jel\'{\i}nek},
+  title =        {Automatizace in\v{z}e\'yrsk\'ych prac\'{\i}},
+  publisher =    {Vydavatelstv\'{\i} ÈVUT, Praha},
+  year =         1993
+}
+
+
+;;;;;;;;;;;;;; Jelinek 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Jelinek:fei94,
+  author	= "Jel\'{\i}nek, I.",
+  title		= "Formalization of design process in {CAD}",
+  key		= "jelinek",
+  pages		= "220--225",
+  booktitle	= "Proceedings of {FEI'25} Conference on Electronic computers
+		  and Informatics",
+  year		= "1994",
+  address	= "Ko\v{s}ice, Slovakia",
+  month		= sep
+}
+
+@InProceedings{Jelinek:mosis94,
+  author	= "Jel\'{\i}nek, I.",
+  title		= "Logical formalization of design process in {CAD} system",
+  key		= "jelinek",
+  pages		= "166--170",
+  note		= "In Czech",
+  booktitle	= "Modelling and simulation of systems - {MOSIS'94}",
+  year		= "1994",
+  address	= "Zabreh na Morave",
+  month		= may
+}
+
+@Book{Jelinek:skr94,
+  author	= "Jel\'{\i}nek, I.",
+  title		= "{CAD} systems construction",
+  key		= "jelinek",
+  publisher	= "CTU Publishing House",
+  year		= 1994,
+  address	= "Prague",
+  note		= "In Czech"
+}
+
+@Article{Jelinek:sn11a94,
+  author	= "Jel\'{\i}nek, I.",
+  title		= "We begin with Multimedia",
+  key		= "jelinek",
+  journal	= "Softwarov\'{e} noviny",
+  year		= 1994,
+  volume	= "V",
+  number	= 11,
+  pages		= "21--26",
+  note		= "In Czech"
+}
+
+
+@Article{Jelinek:sn11b94,
+  author	= "Jel\'{\i}nek, I.",
+  title		= "Authors Systems",
+  key		= "jelinek*",
+  journal	= "Softwarov\'{e} noviny",
+  year		= 1994,
+  volume	= "V",
+  number	= 11,
+  pages		= 40,
+  note		= "In Czech"
+}
+
+@InProceedings{Jelinek:ws94a,
+  author	= "I. Jel\'{\i}nek and J. Piln\'{y} and V. \v{S}afanda and P.
+		  Slav\'{\i}k",
+  title		= "{ESA-W--{E}ducational system for {AutoCAD} on sun
+		  workstation }",
+  crossref	= "ws94",
+  key		= "jelinek, slavik",
+  pages		= "41--42"
+}
+
+@InProceedings{Jelinek:ws94b,
+  author	= "Jel\'{\i}nek, I.",
+  title		= "Logical formalization of design process in {CAD} system",
+  crossref	= "ws94",
+  key		= "jelinek",
+  pages		= "47--48"
+}
+
+@InProceedings{Jelinek:ws94c,
+  author	= "Jel\'{\i}nek, I. and Slav\'{\i}k, P. and \v{S}norek, M.",
+  title		= "Multimedia in university education",
+  crossref	= "ws94",
+  key		= "jelinek, slavik, snorek",
+  pages		= "49--50"
+}
+
+;;;;;;;;;;;;;; Jelinek 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Misc{Jelinek:cgforum95,
+  author	= {Jel\'{\i}nek, I.},
+  title		= {We begin with multimedia - Tutorial},
+  howpublished	= {Computer Graphics \& Computer Forum Exhibition Tutorial},
+  year		= 1995,
+  note		= {In Czech.}
+}
+
+@Article{Jelinek:chip95,
+  author	= {I. Jel\'{\i}nek and M. Louck\'{y}},
+  title		= {Highway to information (D\'{a}lnice k informac\'{\i}m)},
+  journal	= {CHIP},
+  year		= 1995,
+  month		= jan,
+  number	= 1,
+  pages		= {32--35}
+}
+
+@InProceedings{Jelinek:iced95,
+  author	= {Jel\'{\i}nek, I.},
+  title		= {Formal methods in design process},
+  booktitle	= {Proceedings of the 10th International Conference on
+		  Engineering Design, ICED'95},
+  editor	= { Hubka, V.},
+  volume	= 2,
+  series	= {Edition HEURISTA},
+  year		= 1995,
+  address	= {Prague},
+  pages		= {517--522},
+  url           = "/Publications/jelinek_iced_95.html"		  
+}
+
+@Book{Jelinek:skr95,
+  author	= "Jel\'{\i}nek, I.",
+  title		= "The construction of {CAD} system",
+  key		= "jelinek",
+  publisher	= "CTU Publishing House",
+  year		= 1995,
+  pages		= "125",
+  address	= "Prague",
+  note		= "In Czech"
+}
+
+@InProceedings{Jelinek:ws95a,
+  author	= "Jel\'{\i}nek, I.",
+  title		= "Research on formalization of design process",
+  crossref	= "ws95",
+  key		= "jelinek",
+  pages		= "257--258"
+}
+
+@InProceedings{Jelinek:ws95b,
+  author	= { I. Jel\'{\i}nek, P. Hollay and S. Hostomsk\'{y} and P.
+		  Slav\'{\i}k and M. \v{S}norek},
+  title		= {{EMHS~2} - Experimental Multimedia System },
+  crossref	= {ws95},
+  key		= {jelinek, snorek},
+  pages		= {259--260}
+}
+
+;;;;;;;;;;;;;; Jelinek 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Article{Jelinek:acta96,
+  author	= {I. Jel\'{\i}nek},
+  title		= {Theoretical aspects of the design process},
+  journal	= {Acta Polytechnica, CTU Prague},
+  year		= 1995,
+  volume	= 35,
+  number	= 5,
+  pages		= {55--64}
+}
+
+@InProceedings{Jelinek:ithurs96,
+  author =       {I. Jel\'{\i}nek},
+  title =        {Formalization of Design Process},
+  booktitle =    {International Conference on Intelligent
+                  Technologies in Human-Related Sciences
+                  },
+  editor =       {E. L. Gonzales},
+  volume =       1,
+  year =         1996,
+  organization = {AMSE},
+  publisher =    {Universidad de Le\'{o}n},
+  month =        jul,
+  pages =        {127--135}
+}
+
+@Book{Jelinek:skr96,
+  author	= "Jel\'{\i}nek, I.",
+  title		= "{CAD} systems construction",
+  key		= "jelinek",
+  publisher	= "CTU Publishing House",
+  year		= 1996,
+  address	= "Prague",
+  note		= "Second Edition, In Czech"
+}
+
+@InProceedings{Jelinek:ws96a,
+  author	= "J. B\'{\i}la and I. Jel\'{\i}nek",
+  title		= "Virtual Reality in the Design Process",
+  crossref	= "ws96",
+  key		= "jelinek",
+  pages		= "249--250"
+}
+
+@InProceedings{Jelinek:ws96b,
+  author	= { P. Hollay and S. Hostomsk\'{y} and I. Jel\'{\i}nek and M.
+		  \v{S}norek},
+  title		= {Experimental Multimedia and Hypermedia System {EMHS~1.0}},
+  crossref	= {ws96},
+  key		= {jelinek, snorek},
+  pages		= {243--244}
+}
+
+;;;;;;;;;;;;;; Jelinek 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Book{Jelinek97a,
+  author	= {Jelínek, Ivan},
+  title		= {{Formalization of the Design Process in CAD Systems}},
+  edition	= {1},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {103},
+  figures	= {8}
+}
+
+@TechReport{Jelinek97b,
+  author	= {Jelínek, Ivan and Rylek, Tomá¹},
+  title		= {{Annual Report 1996}},
+  type		= {Annual Report},
+  number	= {DC-97-01},
+  institution   = {CTU Prague},
+  OPTIaddress	= {Prague},
+  publisher	= {CTU, Faculty of Electrical Engineering, Department of
+		  Computers},
+  year		= {1997},
+  pages		= {85}
+}
+
+@Article{Jelinek:cw97a,
+  author	= {Jelínek, Ivan},
+  title		= {{C4=CAD+CAM+CAE+CIM}},
+  journal	= {Computerworld},
+  volume	= {VIII},
+  number	= {17},
+  year		= {1997},
+  pages		= {30--32},
+  issn		= {1210-9924},
+  note		= {(in Czech)}
+}
+
+@Article{Jelinek:cw97b,
+  author	= {Jelínek, Ivan},
+  title		= {{CAD systémy a práce s nimi}},
+  journal	= {Computerworld},
+  volume	= {VIII},
+  number	= {4},
+  year		= {1997},
+  pages		= {13--14},
+  issn		= {1210-9924},
+  note		= {(in Czech)}
+}
+
+@Article{Jelinek:ln97a,
+  author	= {Jelínek, Ivan},
+  title		= {{PlíŸivá destrukce vysokého ¹kolství}},
+  journal	= {Lidové noviny},
+  volume	= {10},
+  number	= {140},
+  year		= {1997},
+  pages		= {9},
+  issn		= {0862-5921},
+  note		= {(in Czech)}
+}
+
+@Article{Jelinek:ln97b,
+  author	= {Jelínek, Ivan},
+  title		= {{Co vlastnì ohroŸuje prestiŸ uèitelù}},
+  journal	= {Lidové noviny},
+  volume	= {10},
+  number	= {22},
+  year		= {1997},
+  pages		= {9},
+  issn		= {0862-5921},
+  note		= {(in Czech)}
+}
+
+;;;;;;;;;;;;;; Kopal 98 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Kopal98:poster98,
+  author = {Kopal, T. and Havran, V. and Bittner, J. and \v{Z}\'{a}ra, J.},
+  title  = {Directionality in Ray Tracing},
+  pages = {IC 24},
+  crossref = {poster98},  
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Limpouch 93-96  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Book{Limpouch:book93,
+  author	= "A. Limpouch",
+  title		= "{X} {W}indow {S}ystem - application programming",
+  key		= "limpouch",
+  publisher	= "Grada",
+  year		= "1993",
+  address	= "Prague",
+  note		= "In Czech"
+}
+
+@InProceedings{Limpouch:design95,
+  author	= "A. Limpouch",
+  title		= "Grammar-based Formal Specification for the Object-Oriented
+		  User Interface Development",
+  key		= "limpouch",
+  editor	= "F. Paterno",
+  pages		= "369--382",
+  booktitle	= "Design, Specification and Verification of Interactive
+		  Systems. Proceedings of the Eurographics Workshop on
+		  Interactive Systems (Bocca di Magra, 1994)",
+  year		= "1995",
+  publisher	= "Springer-Verlag, Berlin"
+}
+
+@InProceedings{Limpouch:ica95,
+  author	= "A. Limpouch",
+  title		= "{GIS} for the Next Century",
+  key		= "limpouch",
+  pages		= "20--32",
+  booktitle	= "Proceedings of 17th International Cartographic Conference",
+  year		= "1995",
+  publisher	= "Institut Cartografic de Catalunya, Barcelona"
+}
+
+@InProceedings{Limpouch:sofs94,
+  author	= "A. Limpouch",
+  title		= "Architecture for Interactive Systems with Highly Graphical
+		  User Interfaces",
+  key		= "limpouch",
+  pages		= "63--68",
+  year		= "1994",
+  booktitle	= "Proceedings of SOFSEM'94",
+  publisher	= "Masaryk University, Brno",
+  address	= "Milovy",
+  month		= nov,
+  note		= "Contributed talk"
+}
+
+@InProceedings{Limpouch:sofs95,
+  author	= "K. Charv\'{a}t and A. Limpouch",
+  title		= "Quo Vadis {GIS}: {F}rom {GIS} and {GIMS} to Open {GIS}",
+  key		= "limpouch",
+  pages		= "334--349",
+  booktitle	= "Proceedings of SOFSEM'95",
+  year		= "1995",
+  publisher	= "Springer-Verlag, Berlin",
+  month		= nov,
+  note		= "Invited paper"
+}
+
+@InProceedings{Limpouch:sscg94,
+  author	= "A. Limpouch",
+  title		= "Graphical User Interfaces",
+  crossref	= "sscg94",
+  key		= "limpouch",
+  pages		= "17--39",
+  note		= "Invited paper"
+}
+
+@Article{Limpouch:swn95,
+  author	= "A. Limpouch",
+  title		= "Geographic Information Systems",
+  key		= "limpouch",
+  journal	= "Softwarov\'{e} noviny",
+  year		= 1995,
+  volume	= "VI",
+  number	= 4,
+  pages		= "36--46",
+  note		= "In Czech"
+}
+
+@InProceedings{Limpouch:transition94,
+  author	= "K. Charv\'{a}t and A. Limpouch",
+  title		= "{TopoL GIS} system",
+  key		= "limpouch",
+  volume	= "II",
+  pages		= "51--63",
+  booktitle	= "Proceedings of the conference Europe in Transition: The
+		  Context of GIS",
+  year		= "1994",
+  publisher	= "Masaryk University, Brno",
+  address	= "Brno",
+  month		= aug
+}
+		  
+@InProceedings{Limpouch:wscg94,
+  author	= "A. Limpouch",
+  title		= "{X} {W}indow System",
+  crossref	= "wscg94",
+  key		= "limpouch",
+  pages		= "197--206"
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Manda 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Manda:wscg96,
+  author	= "Manda, V. and Slav\'{\i}k, P.",
+  title		= "A New Method for Formal Description of 3D Scenes",
+  key		= "Slavik*",
+  pages		= "199--203",
+  booktitle	= "Proceedings of Winter School for Computer Graphics",
+  year		= 1996,
+  publisher	= "West Bohemian University, Plzen",
+  volume	= "I",
+  month		= feb
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Marak 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Marak97,
+  author	= {Marák, Ivo},
+  title		= {{On Synthetic Terrain Erosion Modelling: A Survey}},
+  booktitle	= {{CESCG '97}},
+  address	= {Wien},
+  publisher	= {Technische Universität},
+  year		= {1997},
+  pages		= {63--71}
+}
+
+@InProceedings{Marak:ws97,
+  author	= {Marák, Ivo and Bene¹, Bedøich and Slavík, Pavel},
+  title		= {{Terrain Erosion Model Based on Rewriting Matricies}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {299--300}
+}
+
+@InProceedings{Marak:wscg97,
+  author = 	 {I. Mar\'{a}k and B. Bene\v{s} and P. Slav\'{\i}k},
+  title = 	 {Terrain Erosion Model Based on Rewriting of Matrices},
+  crossref =	 {wscg97},
+  volume =	 {II},
+  pages =	 {341--350}
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Menzal 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Menzel94,
+  author	= "K. Menzel and O. Schmidt and F. Stangenberg and Chr.
+		  Hornung and B. Lange and A. Hole\v{c}ek and
+		  J. P\v{r}ikryl and J. \v{Z}\'ara",
+  title		= "Distributed Rendering Techniques using Virtual Walls",
+  key		= "rt, holecek, prikryl, zara",
+  pages		= "10",
+  booktitle	= "Proceedings of First European PVM Users Group Meeting",
+  year		= 1994,
+  address	= "Roma, Italy",
+  month		= oct
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Miksicek 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Miksicek97,
+  author	= {Mik¹íèek, Luká¹},
+  title		= {{3D Sound - an overview}},
+  booktitle	= {{CESCG '97}},
+  address	= {Wien},
+  publisher	= {Technische Universität},
+  year		= {1997},
+  pages		= {155--162}
+}
+
+@InProceedings{Miksicek:ws97,
+  author	= {Mik¹íèek, Luká¹},
+  title		= {{Raster Image Output for Blind Users}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {323--324}
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Mrazek 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Mrazek:sscg95,
+  author	= "P. Mr\'azek and P. Felkel and L. S\'ykora",
+  title		= "Model-Based Segmentation of Medical Images",
+  key		= "virtmed, virtual reality, medicine",
+  pages		= "DM.22--DM.31",
+  crossref      = "sscg95",
+  postscript	= "/Publications/mrazek_sscg_95.ps.gz"
+}
+
+;;;;;;;;;;;;;; Mrazek 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Mrazek96,
+  author        = "P. Mr\'azek",
+  title         = "Genetic Algorithms and Image Search",
+  crossref      = "wscg96",		  
+  pages         = "278--284"
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Prikryl 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Prikryl:usp:1996,
+  author = 	 {Jan P\v{r}ikryl},
+  title = 	 {{\'{U}}vod do syst\'{e}mu {PVM}},
+  booktitle = 	 {Programy a algoritmy numerick\'{e} matematiky 8},
+  year = 	 {1996},
+  publisher =	 {Matematick\'{y} \'{u}stav {AV} {\v{C}R}},
+  organization = {Matematick\'{y} \'{u}stav {AV} {\v{C}R}},
+  address =	 {{\v{Z}}itn\'{a} 25, CZ-11567 Praha 1},
+  month =	 {June},
+  note = 	 {In Czech},
+  pages =	 {162--167}
+}
+
+;;;;;;;;;;;;;; Prikryl 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Prikryl:wscg97,
+  author = 	 {J. P\v{r}ikryl},
+  title = 	 {On Mesh Preprocessing for Radiosity},
+  crossref =	 {wscg97},
+  key =		 {radiosity, mesh, discontinuity meshing},
+  volume =	 {IV},
+  pages =	 {687--690}
+}
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Simek 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Simek:wscg96,
+  author	= "\v{S}imek, P. and Slav\'{\i}k, P.",
+  title		= "Constraint Satisfaction Problem Solved by Minimal Change
+		  method",
+  key		= "slavik",
+  pages		= "311--321",
+  crossref	= "wscg96",
+  year		= 1996,
+  volume	= "II"
+}
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Slavik 92 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Slavik:ws92,
+  author	= "Slav\'{\i}k, P. and P. Bene\v{s}, B.",
+  title		= "Generative description of objects and randomness",
+  crossref	= "ws92",
+  key		= "slavik, benes",
+  pages		= "??"
+}
+
+;;;;;;;;;;;;;; Slavik 93 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Book{Slavik:grada93,
+  author	= "P. Slav\'{\i}k and M. \v{S}norek",
+  title		= "PC Video Adapter Programming",
+  year		= "1993",
+  publisher	= "Grada",
+  note		= "In Czech."
+}
+
+@InProceedings{Slavik:geom93,
+  author	= "P. Slav\'{\i}k",
+  title		= "Data Formats for Image Processing",
+  key		= "slavik",
+  pages		= "28--33",
+  booktitle	= "Proceeding of the 13th workshop on Geometry and Computer
+		  Graphics",
+  year		= 1993,
+  publisher	= "West Bohemian University, Plzen",
+  address	= "Rostock",
+  month		= sep
+}
+
+@TechReport{Slavik:uid93,
+  author	= "P. Slav\'{\i}k and A. Limpouch",
+  title		= "User Interface Design Based on the Theory of Formal
+		  Languages",
+  institution	= "Department of Computers, Czech Technical University",
+  key		= "slavik",
+  year		= "1993",
+  type		= "Research Report",
+  number	= "DC--93--03",
+  address	= "Prague, Czech Republic"
+}
+
+;;;;;;;;;;;;;; Slavik 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Slavik:cmuid94,
+  author	= "P. Slav\'{\i}k",
+  title		= "Grammars and rewriting systems as models for {GUI}",
+  key		= "slavik",
+  editor	= "C. Stary",
+  pages		= "1--11",
+  booktitle	= "First Interdisciplinary Workshop on Cognitive Modelling \&
+		  User Interface Development",
+  year		= 1994,
+  address	= "Vienna",
+  month		= dec
+}
+
+@Article{Slavik:sn12a94,
+  author	= "P. Slav\'{\i}k",
+  title		= "Compression of Graphical Information and Multimedia
+		  Systems",
+  key		= "slavik",
+  journal	= "Softwarov\'{e} noviny",
+  year		= 1994,
+  volume	= "V",
+  number	= 12,
+  pages		= "19--24",
+  note		= "In Czech"
+}
+
+@Article{Slavik:sn12b94,
+  author	= "P. Slav\'{\i}k",
+  title		= "Multimedia and Virtual Reality",
+  key		= "slavik",
+  journal	= "Softwarov\'{e} noviny",
+  year		= 1994,
+  volume	= "V",
+  number	= 12,
+  pages		= "26--27",
+  note		= "In Czech"
+}
+
+@InProceedings{Slavik:hci94,
+  author	= "P. Slav\'{\i}k and R. Herr",
+  title		= "Interaction in 3{D} Space and 3{D} window manager",
+  key		= "slavik, herr",
+  editor	= "D. England",
+  pages		= 2,
+  booktitle	= "{HCI '94} Ancillary Proceedings",
+  year		= 1994,
+  publisher	= "The University of Glasgow",
+  month		= aug
+}
+
+@InProceedings{Slavik:ica94,
+  author	= "P. Slav\'{\i}k",
+  title		= "Accelerating Interaction in 3{D} Space by Means of
+		  Constrains",
+  key		= "slavik",
+  pages		= "1--12",
+  booktitle	= "ICA '94. Integratioon of {CAD}-techniques in theory and
+		  Practice",
+  year		= 1994,
+  publisher	= "ZGDV e.V., Rostock",
+  address	= "Rostock",
+  month		= sep
+}
+
+
+;;;;;;;;;;;;;; Slavik 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InCollection{Slavik95,
+  author	= {P. Slav\'{\i}k},
+  title		= "{CAD} Systems: trends and developments",
+  booktitle	= "Information Management in Computer Integrated
+		  Manufacturing",
+  key		= {slavik},
+  publisher	= {Springer-Verlag},
+  year		= 1995,
+  editor	= "H. Adelsberger and J. La\v{z}ansk\'{y} and V.
+		  Ma\v{r}\'{i}k",
+  volume	= 973,
+  series	= {Lecture Notes in Computer Science},
+  pages		= {478--492}
+}
+
+@InProceedings{Slavik:wscg95,
+  author	= "Slav\'{\i}k, P. and P\v{r}ikryl, J.",
+  title		= "Dithering as a method for image data compression",
+  crossref	= "wscg95",
+  postscript    = {/Publications/slavik_wscg_95.ps.gz},		  
+  volume	= "II",
+  pages		= "283--288"
+}
+
+;;;;;;;;;;;;;; Slavik 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Manual{Slavik:96,
+  title =        {WISE/E: Advanced User Manual},
+  author =       {Pavel Slav{\'\i}k and Martin Brachtl and
+                  Petr Hejda and Luk\'{a}\v{s} Mik\v{s}{\'\i}\v{c}ek
+                  and Ji\v{r}{\'\i} \v{Z}{\'a}ra and Vilu, J.},
+  organization = {Frauenhofer Institut, Rostock},
+  year =         1996,
+  annote =       {WISE/E}
+}
+
+@Article{Slavik:cg96,
+  author	= {P. Slav\'{\i}k},
+  title		= {Computer Graphics Education in the {C}zech {R}epublic},
+  journal	= {Computer Graphics},
+  year		= 1996,
+  number	= 1,
+  pages		= {22--24}
+}
+
+@InProceedings{Slavik:egvisc96,
+  author = 	 {P. Slav\'{\i}k and F. Hrdli\v{c}ka and T. Pavlis and
+		  P. Vl\v{c}ek},
+  title = 	 {Visualization of the dispersion of airborne
+                  effluents},
+  crossref =     {egvisc96},
+  pages =	 {153--169}
+}
+
+@Article{Slavik:sgiw96,
+  author	= {P. Slav\'{\i}k},
+  title		= {Report about {SIGGRAPH~'95}},
+  journal	= {Silicon World},
+  year		= 1996,
+  pages		= {57--59}
+}
+
+@Book{Slavik:skr196,
+  author	= "P. Slav\'{\i}k",
+  title		= "Methods for Graphical Information Processing. (Metody
+		  zpracov\'{a}n\'{\i} grafick\'{e} informace)",
+  year		= "1996",
+  publisher	= "CTU Prague",
+  note		= "In Czech."
+}
+
+@Book{Slavik:skr296,
+  author	= {P. Slav\'{\i}k},
+  title		= {Machine Oriented languages},
+  publisher	= {CTU Prague},
+  year		= 1996,
+  pages		= 191
+}
+
+@Article{Slavik:sn196,
+  author	= "Slav\'{\i}k, P.",
+  title		= "Applications of Scientific Visualization",
+  key		= "Slavik*",
+  journal	= "Softwarov\'{e} noviny",
+  year		= 1996,
+  volume	= "V",
+  number	= 2,
+  pages		= "23--24",
+  note		= "(In Czech)"
+}
+
+@Article{Slavik:sn296,
+  author	= "Slav\'{\i}k, P.",
+  title		= "Scientific Visualization",
+  key		= "Slavik*",
+  journal	= "Softwarov\'{e} noviny",
+  year		= 1996,
+  volume	= "V",
+  number	= 2,
+  pages		= "18--22",
+  note		= "(In Czech)"
+}
+
+;;;;;;;;;;;;;; Slavik 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Article{Slavik97a,
+  author	= {Slavík, Pavel},
+  title		= {{Grammars and Rewriting Systems as Models for Graphical
+		  User Interfaces}},
+  journal	= {Cognitive Systems},
+  volume	= {4},
+  number	= {4-3},
+  year		= {1997},
+  pages		= {381--399},
+  issn		= {0256-663X}
+}
+
+@Article{Slavik97b,
+  author	= {Slavík, Pavel},
+  title		= {{Vizualizace dat mezinárodnì}},
+  journal       = {Computer Design},
+  volume        = {I},
+  number	= {4},
+  year		= {1997},
+  pages		= {76--79},
+  issn		= {1211-1082},
+  note		= {(in Czech)}
+}
+
+@Article{Slavik97c,
+  author	= {Slavík, Pavel and Hudec, Bohuslav},
+  title		= {{Vybíráme a testujeme CAD/CAM systémy}},
+  journal       = {Computer Design},
+  volume        = {I},
+  number	= {5},
+  year		= {1997},
+  pages		= {112--117},
+  issn		= {1211-1082},
+  note		= {(in Czech)}
+}
+
+@Article{Slavik97d,
+  author	= {Slavík, Pavel},
+  title		= {{Tvoøíme prototypy rychle a levnì}},
+  journal	= {Computer Design},
+  number	= {5},
+  volume        = {I}, 
+  year		= {1997},
+  pages		= {78--81},
+  issn		= {1211-1082},
+  note		= {(in Czech)}
+}
+
+@Unpublished{Slavik97e,
+  author	= {Slavík, Pavel},
+  title		= {{Lossy 3D Compression Methods}},
+  note		= {Invited Lecture},
+  address	= {Dagstuhl},
+  organisation	= {Universitaet Kaiserslautern},
+  date		= {12.06.97},
+  year		= {1997}
+}
+
+@Unpublished{Slavik97f,
+  author	= {Slavík, Pavel},
+  title		= {{HCI Education at CTU Prague}},
+  note		= {Invited Lecture},
+  address	= {Dresden},
+  organisation	= {TU Dresden},
+  date		= {05.03.97},
+  year		= {1997}
+}
+
+@InProceedings{Slavik97g,
+  author	= {Slavík, Pavel},
+  title		= {{Internet Applications at Department of Computer Science
+		  and Engineering}},
+  booktitle	= {{Computer Networking and Services of Distributed
+		  Systems}},
+  address	= {Aachen},
+  publisher	= {RWTH Aachen},
+  year		= {1997},
+  pages		= {107--119}
+}
+
+@InProceedings{Slavik97h,
+  author	= {Slavík, Pavel},
+  title		= {{HCI in the Czech Republic}},
+  booktitle	= {{CHI 97 Extended Abstracts}},
+  volume	= {1},
+  address	= {New York},
+  publisher	= {ACM},
+  year		= {1997},
+  pages		= {47--48}
+}
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Snorek 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Article{Snorek:bajt94,
+  author	= "M. \v{S}norek",
+  title		= "{PC} motherboard evolution",
+  key		= "snorek",
+  journal	= "Bajt",
+  year		= 1994,
+  pages		= "151--156",
+  month		= jun,
+  note		= "In Czech"
+}
+
+@InProceedings{Snorek:ca94,
+  author	= "M. \v{S}norek",
+  title		= "{Hardware for Multimedia}",
+  year		= 1994,
+  pages		= "1--40",
+  note		= "In Czech",
+  booktitle	= "Computer Academy, AVAMP",
+  organization	= "Prague"
+}
+
+@Article{Snorek:sn1194,
+  author	= "M. \v{S}norek",
+  title		= "{Hardware for Multimedia}",
+  journal	= "Softwarov\'{e} noviny",
+  year		= 1994,
+  volume	= "V",
+  number	= 11,
+  pages		= "28--38",
+  note		= "In Czech"
+}
+
+@Article{Snorek:sn694,
+  author	= "M. \v{S}norek",
+  title		= "{RISC and PowerPC}",
+  journal	= "Softwarov\'{e} noviny",
+  year		= 1994,
+  volume	= "V",
+  number	= 6,
+  pages		= "20--27",
+  note		= "In Czech"
+}
+
+@InProceedings{Snorek:ws94,
+  author	= "\v{S}norek, M.",
+  title		= "Computer Graphics hardware",
+  crossref	= "ws94",
+  key		= "Snorek*",
+  pages		= "35--39"
+}
+
+;;;;;;;;;;;;;; Snorek 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Book{Snorek:skr95,
+  author	= "\v{S}norek, M.",
+  title		= "Technical Equipment for Computer Graphics",
+  year		= "1995",
+  publisher	= "CTU publishing house",
+  pages         = "194",   
+  note		= "In Czech."
+}
+
+;;;;;;;;;;;;;; Snorek 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Snorek 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Unpublished{Snorek97,
+  author	= {©norek, Miroslav},
+  title		= {{A "Bad" Student Prediction}},
+  note		= {Invited Lecture},
+  address	= {Dresden},
+  organisation	= {FTW Dresden},
+  date		= {13.11.97},
+  year		= {1997}
+}
+
+@Unpublished{Snorek97b,
+  author	= {©norek, Miroslav},
+  title		= {{Generalized Fingerprint}},
+  note		= {Invited Lecture},
+  address	= {Berlin},
+  organisation	= {PTB Berlin},
+  date		= {26.06.97},
+  year		= {1997}
+}
+
+@InProceedings{Snorek97c,
+  author	= {©norek, Miroslav},
+  title		= {{Generalized Fingerprint}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {305--306}
+}
+
+@Book{Snorek97d,
+  author	= {©norek, Miroslav},
+  title		= {{Periferní zaøízení}},
+  edition	= {1},
+  address	= {Praha},
+  publisher	= {ÈVUT},
+  year		= {1997},
+  pages		= {162},
+  figures	= {160},
+  isbn		= {80-01-01645-5},
+  note		= {(in Czech)}
+}
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Soch 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Soch:sscg95,
+  author	= "\v{S}och, M. and Bene\v{s}, B.",
+  title		= "Simulation of Plant Developement using Strands Model,",
+  key		= "Benes",
+  pages		= "AP.30-AP.35",
+  crossref      = "sscg95",
+  postscript    = "/Publications/soch_sscg_95.ps.gz"
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Sochor 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Book{Sochor:skr96,
+  author	= "Sochor, J. and \v{Z}\'ara, J. and Bene\v{s}, B.",
+  title		= "Algoritmy po\v{c}\'{\i}ta\v{c}ov\'e grafiky",
+  year		= "1996",
+  publisher	= "CVUT publishing house",
+  month         = jan,
+  pages		= 194,
+  note		= "In Czech."
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Steuer 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Steuer97,
+  author	= {Steuer, Michal and Rothkrantz, L. and ©norek, Miroslav},
+  title		= {{Improvement of Training of the Neocognitron Neural
+		  Network}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {329--330}
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Trefny 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Trefny97a,
+  author	= {Trefný, Marek and Bittner, J.},
+  title		= {{Global Visibility}},
+  booktitle	= {{Workshop 97}},
+  volume	= {I},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {325--326}
+}
+
+@InProceedings{Trefny97b,
+  author = 	 {M. Trefn\'{y} and J. Bittner},
+  title = 	 {Global Visibility},
+  crossref =	 {wscg97},
+  key =		 {global visibility, VRML, conservative visibility, spatial
+		  subdivision, visibility computations},
+  volume =	 {IV},
+  pages =	 {691--694}
+}
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Vecerka 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Vecerka:ssb94,
+  author	= "Ve\v{c}erka, D. and Vitou\v{s}ek, R.",
+  title		= "Medical Volume Visualization",
+  key		= "virtmed, vecerka, vitousek",
+  booktitle	= "Student Seminar on Computer Graphics `94",
+  year		= 1994,
+  organization	= "VUT Brno, CTU Prague, TU Vienna",
+  publisher	= "VUT Brno",
+  address	= "Brno, Czech Republic",
+  month		= nov
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Zara 93 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Book{Zara:book93,
+  author	= "\v{Z}\'ara, J. and Limpouch, A. and Bene\v{s}, B. and
+		  Werner, T.",
+  title		= "Po\v{c}\'{\i}ta\v{c}ov\'a grafika - principy a algoritmy",
+  year		= "1993",
+  publisher	= "Grada",
+  note		= "In Czech."
+}
+
+;;;;;;;;;;;;;; Zara 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@InProceedings{Zara:sscg94,
+  author	= "J. \v{Z}\'{a}ra and A. Hole\v{c}ek and J. P\v{r}ikryl",
+  title		= "When the Parallel Ray--Tracer Starts to be Efficient?",
+  crossref	= "sscg94",
+  key		= "rt, zara",
+  pages		= "108--116"
+}
+
+@InProceedings{Zara:ws94,
+  author	= "J. \v{Z}\'{a}ra and A. Hole\v{c}ek and J. P\v{r}ikryl",
+  title		= "Distributed Ray Tracing under {PVM}.",
+  crossref	= "ws94",
+  key		= "rt, zara",
+  pages		= "93--94"
+}
+
+@InProceedings{Zara:wscg94,
+  author	= "J. \v{Z}\'{a}ra and A. Hole\v{c}ek and J. P\v{r}ikryl",
+  title		= "Parallelisation of the Ray--Tracing Algorithm.",
+  crossref	= "wscg94",
+  key		= "rt, zara",
+  pages		= "113--117"
+}
+
+;;;;;;;;;;;;;; Zara 95 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Article{Zara:sgiw95,
+  author	= " \v{Z}\'ara, J. and Bene\v{s}, B. and Pavlis, T.",
+  title		= {Interaktivn\'{\i} vizualizace dat - Explorer},
+  journal	= "Silicon World",
+  year		= "1995",
+  volume	= "II",
+  number	= "10",
+  pages		= "38-41",
+  note		= "In Czech"
+}
+
+@InProceedings{Zara:sscg95,
+  author = 	 {J. \v{Z}\'{a}ra},
+  title = 	 {Speeding Up Ray Tracing - {SW} and {HW} Approaches},
+  crossref =	 {sscg95},
+  key	=        "rt, zara",
+  pages =	 {IP.29--IP.44},
+  postscript =   "/Publications/zara_sscg_95.ps.gz"		  
+}
+
+@InProceedings{Zara:ws95,
+  author	= "J. \v{Z}\'{a}ra and A. Hole\v{c}ek and J. P\v{r}ikryl",
+  title		= "Loadbalancing for distributed raytracer",
+  crossref	= "ws95",
+  key		= "rt, zara",
+  pages		= "167--168"
+}
+
+@InProceedings{Zara:wscg95,
+  author	= "J. \v{Z}\'{a}ra and A. Hole\v{c}ek and J. P\v{r}ikryl and
+		  J. Buri\'{a}nek and K. Menzel",
+  title		= "Load balancing for parallel raytracer on Virtual Walls",
+  crossref	= "wscg95",
+  key		= "rt, zara",
+  volume	= {II},
+  pages		= "439--447"
+}
+
+
+;;;;;;;;;;;;;; Zara 96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; Zara 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@Article{Zara97,
+  author	= {®ára, Jiøí},
+  title		= {{Jazyk VRML pro modelování virtuální reality}},
+  journal	= {Magazín ÈSN},
+  volume	= {7},
+  number	= {1},
+  year		= {1997},
+  pages		= {5--8},
+  issn		= {0862-7932},
+  note		= {(in Czech)}
+}
+
+@InProceedings{Zara:rufis97,
+  author	= {®ára, Jiøí and Zrzavý, Jakub},
+  title		= {{Multimedia Information System in 3D Space (MISS)}},
+  booktitle	= {{RUFIS '97. Proceedings for International Part of the
+		  Conference}},
+  address	= {Prague},
+  publisher	= {CTU},
+  year		= {1997},
+  pages		= {213--218},
+  isbn		= {80-01-01710-9}
+}
+
+@Article{Zara:sn97a,
+  author	= {®ára, Jiøí},
+  title		= {{VRML - jazyk pro virtuální realitu}},
+  journal	= {Softwarové noviny},
+  volume	= {VIII},
+  number	= 1,
+  year		= 1997,
+  pages		= {62--69},
+  issn		= {1210-8472},
+  note		= {(in Czech)}
+}
+		  
+@Article{Zara:sn97b,
+  author	= {®ára, Jiøí and Dachs, Libor and Buriánek, Jan},
+  title		= {{Vystaèíme s osmi bity?}},
+  journal	= {Softwarové noviny},
+  volume	= {VIII},
+  number	= 11,
+  year		= 1997,
+  pages		= {88--94},
+  issn		= {1210-8472},
+  note		= {(in Czech)}
+}
+
+@InProceedings{Zara:sofsem97,
+  author = 	 {J. ®ára},
+  title = 	 {An Introduction to Virtual Reality Modeling Language},
+  booktitle = 	 {Sofsem'97: Theory and Practice of Informatics},
+  editor =	 {F. Plá¹il and K. G. Jeffery},
+  series =	 {Lecture Notes in Computer Science},
+  number =       1338,
+  year =	 1997,
+  publisher =    {Springer},
+  address =	 {Milovy, Czech Republic},
+  month =	 nov,
+  pages =        {331--348},
+  postscript =   {/Publications/zara_sofsem_97.ps.gz}
+}
+
+@PhDThesis{Zara:theses97,
+  author	= {®ára, J.},
+  title		= {{On the Parallelization and Other Speeding Up Techniques
+		  for the Ray Tracing Algorithm}},
+  type		= {Associate Professor Theses},
+  address	= {Prague},
+  year		= {1997},
+  pages		= {62},
+  school	= {CTU, Faculty of Electrical Engineering}
+}
+
+
+
+@Book{Zara:book98,
+  author = 	 {Jiøí ®ára, Bedøich Bene¹, Petr Felkel},
+  title = 	 {Moderní poèítaèová grafika},
+  publisher = 	 {Computer Press, Brno},
+  year = 	 1998,
+  html =	 {http://sgi.felk.cvut.cz/Contact}
+}
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;; crossref 94 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@TechReport{collrep94,
+  author	= "P. Tvrd\'{\i}k",
+  title		= "Research Activities of Department of Computers",
+  institution	= "Department of Computers, Czech Technical University",
+  year		= 1993,
+  type		= "Collaborative Report",
+  number	= "DC--93--02",
+  address	= "Prague, Czechoslovakia",
+  month		= may
+}
+
+@Proceedings{egvisc96,
+  title = 	 {Proceedings of 7th Eurographics Workshop on
+                  Visualization in
+                  Scientific Computing },
+  booktitle = 	 {Proceedings of 7th Eurographics Workshop on
+		  Visualization in Scientific Computing},
+  year = 	 1996,
+  editor =	 {P. Slavík and J.v. Wijk and P. Felkel
+                  and J. Vorlíèek},
+  publisher =	 {Czech Technical University, Department of
+                  Computer Science \& Engineering
+                  and Czech ACM Chapter, Prague},
+  month =	 apr # {~23--25,},
+  note =	 {198 pages},
+  procenta =     {30 30 20 20}
+}
+
+@Proceedings{poster95,
+  title		= "Poster '95",
+  booktitle	= "Poster '95",
+  year		= "1995",
+  editor	= "J. T\v{u}ma",
+  publisher	= "Czech Technical University Publishing House"
+}
+
+@Proceedings{poster96,
+  title		= "Poster '96",
+  booktitle	= "Poster '96",
+  year		= 1996,
+  month = may,
+  editor	= "J. T\v{u}ma",
+  publisher	= "Czech Technical University Publishing House"
+}
+
+@Proceedings{poster97,
+  title		= "Poster '97",
+  booktitle	= "Poster '97 -- 1st International Student Conference 
+                   on Electrical Engineering",
+  month = may,
+  year		= 1997,
+  editor	= "J. T\v{u}ma",
+  publisher	= "Czech Technical University Publishing House"
+}
+
+@Proceedings{poster98,
+  title		= "Poster '98",
+  booktitle	= "Poster '98 -- 2nd International Student Conference 
+                   on Electrical Engineering",
+  month = may,
+  year		= 1998,
+  editor	= "J. T\v{u}ma",
+  publisher	= "Czech Technical University Publishing House, Prague"
+} 
+
+@Proceedings{sccg97,
+  title = 	 {Proceedings of Spring Conference on Computer Graphics},
+  booktitle = 	 {Proceedings of Spring Conference on Computer Graphics},
+  year = 	 1997,
+  editor =	 {T. Plachetka and A. Ferko},
+  address =	 {Budmerice, Slovakia},
+  month =	 jun # { 5--8},
+}
+
+@Proceedings{sccg97pos,
+  title = 	 {Proceedings of Spring Conference on Computer Graphics,
+                  Company Presentations , Posters},
+  booktitle = 	 {Proceedings of Spring Conference on Computer Graphics,
+                  Company Presentations , Posters},
+  year = 	 1997,
+  editor =	 {T. Plachetka and A. Ferko},
+  address =	 {Budmerice, Slovakia},
+  month =	 jun # { 5--8},
+}
+
+@Proceedings{sscg94,
+  title		= "Proceedings of 10th Spring School on Computer Graphics",
+  booktitle	= "Proceedings of 10th Spring School on Computer Graphics",
+  year		= 1994,
+  editor	= "E. Ru\v{z}ick\'{y}",
+  address	= "Bratislava, Slovakia",
+  month		= jun
+}
+
+@Proceedings{sscg95,
+  title		= "Proceedings of 11th Spring School on Computer Graphics",
+  booktitle	= "Proceedings of 11th Spring School on Computer Graphics",
+  year		= 1995,
+  editor	= "T. Plachetka",
+  address	= "Bratislava, Slovakia",
+  month		= may
+}
+
+@Proceedings{ws92,
+  title		= "CTU Workshop '92",
+  booktitle	= "CTU Workshop '92",
+  year		= "1992",
+  editor	= "A. Strejc",
+  volume	= "Part I.",
+  publisher	= "Czech Technical University, Prague, Czech Republic",
+  month		= jan
+}
+
+@Proceedings{ws93,
+  title		= "CTU Workshop '93",
+  booktitle	= "CTU Workshop '93",
+  year		= "1993",
+  editor	= "A. Strejc",
+  volume	= "A",
+  publisher	= "Czech Technical University, Prague, Czech Republic",
+  month		= jan
+}
+
+@Proceedings{ws94,
+  title		= "CTU Seminar '94",
+  booktitle	= "CTU Seminar '94",
+  year		= "1994",
+  editor	= "A. Strejc",
+  volume	= "B",
+  publisher	= "Czech Technical University, Prague, Czech Republic",
+  month		= jan
+}
+
+@Proceedings{ws95,
+  title		= "CTU Workshop '95",
+  booktitle	= "CTU Workshop '95",
+  year		= "1995",
+  editor	= "A. Strejc",
+  volume	= "1",
+  publisher	= "Czech Technical University, Prague, Czech Republic",
+  month		= jan
+}
+
+@Proceedings{ws96,
+  title		= "Workshop '96",
+  booktitle	= "Workshop '96",
+  year		= "1996",
+  editor	= "A. Strejc",
+  volume	= "I",
+  publisher	= "Czech Technical University Publishing House, Brno/Prague, Czech Republic",
+  month		= jan
+}
+
+@Proceedings{	  ws98,
+  title		= "Workshop '98",
+  booktitle	= "Workshop '98",
+  year		= "1998",
+  editor	= "A. Strejc",
+  volume	= "I",
+  publisher	= "Czech Technical University Publishing House, Prague,
+		  Czech Republic",
+  month		= feb # { 3.--5.}
+}
+
+@Proceedings{wscg94,
+  title		= "Proceedings of Winter School of Computer Graphics and CAD
+		  Systems",
+  booktitle	= "Proceedings of Winter School of Computer Graphics and CAD
+		  Systems",
+  year		= "1994",
+  editor	= "V\'{a}clav Skala",
+  publisher	= "University of West Bohemia, Plze\v{n}, Czech Republic",
+  month		= jan
+}
+
+@Proceedings{wscg95,
+  title		= "Proceedings of The Third International Conference in
+		  Central Europe on Computer Graphics and Visualisation '95",
+  booktitle	= "Proceedings of The Third International Conference in
+		  Central Europe on Computer Graphics and Visualisation '95",
+  year		= "1995",
+  editor	= "V\'{a}clav Skala",
+  publisher	= "University of West Bohemia, Plze\v{n}, Czech Republic",
+  month		= feb
+}
+
+@Proceedings{wscg96,
+  title		= "Proceedings of The Fourth International Conference in
+		  Central Europe on Computer Graphics and Visualisation '96",
+  booktitle	= "Proceedings of The Fourth International Conference in
+		  Central Europe on Computer Graphics and Visualisation '96",
+  year		= "1996",
+  editor	= "V\'{a}clav Skala",
+  publisher	= "University of West Bohemia, Plze\v{n}, Czech Republic",
+  month		= feb
+}
+
+@Proceedings{wscg97,
+  title = 	 {Proceedings of The Fifth Internatinal Conference in Central
+		  Europe on Computer Graphics and Visualization '97},
+  booktitle = 	 {Proceedings of The Fifth Internatinal Conference in Central
+		  Europe on Computer Graphics and Visualization '97},
+  year = 	 {1997},
+  editor =	 {Nadia Magenant Thalman and V\'{a}clav Skala},
+  address =	 {Depatment of Computer Science, University of West
+		  Bohemia,
+		  Univerzitn\'{\i} 22, BOX 314, CZ-30614 Plze\v{n}},
+  month =	 feb
+}
+
+%%%%%%%%%%%%%%%%% konference 1998 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+@Proceedings{sccg98,
+  title = 	 {Spring Conference on Computer Graphics},
+  year = 	 1998,
+  editor =	 {Lázló Szirmay-Kalos},
+  address =	 {Budmerice, Slovakia},
+  month =	 apr # { 23--25},
+  html =	 {http://center.fmph.uniba.sk/~sccg/index.html},
+  where =	 {Grlab},
+  isbn =         {ISBN 80-223-0837-4}
+}
+
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/others.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/others.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/others.bib	(revision 243)
@@ -0,0 +1,36 @@
+@InProceedings{Drettakis:1996:AVM,
+  author =       "George Drettakis and Fran{\c{c}}ois Sillion",
+  title =        "Accurate Visibility and Meshing Calculations for
+                 Hierarchical Radiosity",
+  booktitle =    "Eurographics Rendering Workshop 1996",
+  editor =       "Xavier Pueyo and Peter Schr{\"{o}}der",
+  year =         "1996",
+  organization = "Eurographics",
+  publisher =    "Springer Wein",
+  address =      "New York City, NY",
+  month =        jun,
+  pages =        "269--278",
+  note =         "ISBN 3-211-82883-4",
+  annote =       "Precise quality control for hierarchical lighting
+                 simulations is still a hard problem, due in part to the
+                 difficulty of analysing the source of error and to the
+                 close interactions between different components of the
+                 algorithm. In this paper we attempt to address this
+                 issue by examining two of the most central components
+                 of these algorithms: visibility computation and the
+                 mesh. We first present an investigation tool in the
+                 form of a new hierarchical algorithm: this algorithmic
+                 extension encapsulates exact visibility information
+                 with respect to the light source in the form of the
+                 backprojection data structure, and allows the use of
+                 discontinuity meshes in the solution hierarchy. This
+                 tool permits us to study separately the effects of
+                 visibility and meshing error on image quality,
+                 computational expense as well as solution convergence.
+                 Initial experimental results are presented by comparing
+                 standard quadtree-based hierarchical radiosity with
+                 point-sampling visibility to the approaches
+                 incorporating backprojections, discontinuity meshes or
+                 both.",
+}
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/renmame.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/renmame.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/renmame.bib	(revision 243)
@@ -0,0 +1,2388 @@
+
+@InProceedings{Niepel:1995:SCD,
+  author =       "L. Niepel and J. Martinka and A. Ferko and P. Elias",
+  title =        "On Scene Complexity Definition for Rendering",
+  booktitle =    "Winter School of Computer Graphics 1995",
+  year =         "1995",
+  month =        feb,
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, 14-18 February 1995",
+  who  = "Havran Vlastimil: REN-0001",
+}
+
+@TechReport{Snyder96,
+  author = "J. M. Snyder",
+  title = "Area Light Sources for Real-Time Graphics",
+  pages = 30,
+  institution = "Microsoft Research",
+  year = 1996,
+  month = mar,
+  number = "MSR-TR-96-11",
+  who  = "Havran Vlastimil: REN-0002",
+}
+
+@InProceedings{Keller:1997:IR,
+  author =       "Alexander Keller",
+  title =        "Instant Radiosity",
+  booktitle =    "SIGGRAPH 97 Conference Proceedings",
+  editor =       "Turner Whitted",
+  series =       "Annual Conference Series",
+  year =         "1997",
+  organization = "ACM SIGGRAPH",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  pages =        "49--56",
+  note =         "ISBN 0-89791-896-7",
+  keywords =     "Radiance equation, radiosity, shading, Monte Carlo
+                 integration, quasi-Monte Carlo integration,
+                 quasi-random walk, jittered low discrepancy sampling,
+                 hardware, accumulation buffer, realtime rendering
+                 algorithms, photorealism",
+  annote =       "We present a fundamental procedure for instant
+                 rendering from the radiance equation. Operating
+                 directly on the textured scene description, the very
+                 efficient and simple algorithm produces photorealistic
+                 images without any finite element kernel or solution
+                 discretization of the underlying integral equation.
+                 Rendering rates of a few seconds are obtained by
+                 exploiting graphics hardware, the deterministic
+                 technique of the quasi-random walk for the solution of
+                 the global illumination problem, and the new method of
+                 jittered low discrepancy sampling.",
+  who  = "Havran Vlastimil: REN-0003",
+}
+
+@Article{Tiede:1990:IMA,
+  author =       "Ulf Tiede and Karl Heinz Hoehne and Michael Bomans and
+                 Andreas Pommert and Martin Riemer and Gunnar Wiebecke",
+  title =        "Investigation of Medical {3D}-Rendering Algorithms",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "10",
+  number =       "2",
+  pages =        "41--53",
+  month =        mar,
+  year =         "1990",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Univ Hospital Eppendorf, Inst of Math \& Comput Sci in
+                 Med, Hamburg, West Ger",
+  classification = "461; 723",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Biomedical Engineering; Computer Graphics --- Medical
+                 Applications; Computer Programming --- Algorithms;
+                 Computerized Tomography; Gradient Shading; Magnetic
+                 Resonance --- Imaging Techniques; Shading Algorithms;
+                 Surface Rendering; surface rendering",
+  who  = "Havran Vlastimil: REN-0004",
+}
+
+@Article{George:1990:RRD,
+  author =       "David W. George and Fran{\c{c}}ois X. Sillion and
+                 Donald P. Greenberg",
+  title =        "Radiosity Redistribution for Dynamic Environments",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "10",
+  number =       "4",
+  pages =        "26--34",
+  month =        jul,
+  year =         "1990",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Cornell Univ, Ithaca, NY, USA",
+  annote =       "They present a modification to the progressive
+                 radiosity to allow faster radiosity computation for
+                 animation sequences where objects can be added, moved,
+                 removed or their surface changed properties. When an
+                 object is added, radiosity is shot onto these new
+                 patches. A shadow volume is determined and a negative
+                 radiosity is shot to the patches in shadow. When an
+                 object is moved, it is removed from the scene and added
+                 to the new position, the radiosity being recomputed at
+                 each step. The radiosity recomputed is based on two
+                 strategies: redistribute first or interleave
+                 redistribution and propagation. Some heuristics are
+                 presented to choose the most important patches. This
+                 solution is good when just a few objects are involved
+                 but as the complexity of the scenes and mostly moving
+                 objects increases, the algorithm lost of its
+                 interest.",
+  classification = "723",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Computer Graphics; Computer Software --- Applications;
+                 Interactive; radiosity, animation, interaction, shadow,
+                 negative radiosity; Shading; Shadowing",
+  who  = "Havran Vlastimil: REN-0005",
+}
+
+@TechReport{EVL-1997-43,
+  author =       "M. Stamminger and Ph. Slusallek and H.-P. Seidel",
+  title =        "Bounded Clustering -- Finding Good Bounds on Clustered
+                 Light Transport",
+  number =       "2",
+  institution =  "Universit{\"a}t Erlangen-N{\"u}rnberg",
+  year =         "1997",
+  note =         "submitted for publication",
+  abstract =     "Clustering is a very efficient technique for applying
+                 finite element methods to the computation of global
+                 illumination of complex scenes. Both computation time
+                 and memory consumption can be reduced dramatically by
+                 grouping the primitives of the input scene into a
+                 hierarchy of clusters and allowing for light exchange
+                 between all levels of this hierarchy. One problem with
+                 clustering methods, however, has been to determine good
+                 bounds on the exchange of light between nodes in the
+                 hierarchy. In this paper, we propose a set of methods
+                 applicable to both clusters and surface patches that
+                 allows for computing conservative but tight error
+                 bounds on the light transport between clusters and
+                 surface patches. Their intrinsic properties can be
+                 exploited by splitting the computation of bounds into a
+                 set of related methods, applicable to any object. The
+                 resulting algorithm abstracts from the nature of the
+                 interacting objects -- light transport between
+                 clusters, planar patches and even curved surfaces can
+                 be efficiently approximated and bound by a single set
+                 of methods.",
+  evlib-url =    "http://infovis.zib.de:8000/Dienst/UI/2.0/Describe/evl.surfacerendering%2FEVL-1997-43",
+  evlib-revision = "1st",
+  who  = "Havran Vlastimil: REN-0006",
+}
+
+@InProceedings{EVL-1997-38,
+  author =       "M. Stamminger and W. Nitsch and Ph. Slusallek",
+  title =        "Isotropic Clustering for Hierarchical Radiosity --
+                 Implementation and Experiences",
+  booktitle =    "Proc. Fifth International Conference in Central Europe
+                 on Computer Graphics and Visualization '97",
+  year =         "1997",
+  abstract =     "Although Hierarchical Radiosity was a big step forward
+                 for finite element computations in the context of
+                 global illumination, the algorithm can hardly cope with
+                 scenes of more than medium complexity. The reason is
+                 that Hierarchical Radiosity requires an initial linking
+                 step, comparing all pairs of initial objects in the
+                 scene. These initial objects are then hierarchically
+                 subdivided in order to accurately represent the light
+                 transport between them. Isotropic Clustering, as
+                 introduced by Sillion, in addition creates a hierarchy
+                 above the input objects. Thus, it allows for the
+                 interaction of complete clusters of objects and avoids
+                 the costly initial linking step. In this paper, we
+                 describe our implementation of the isotropic clustering
+                 algorithm and discuss some of the problems that we
+                 encountered. The complexity of the algorithm is
+                 examined and clustering strategies are compared.",
+  postscript-url = "ftp://faui90.informatik.uni-erlangen.de/pub/Publications/1997/Publ.1997.3.ps.gz",
+  evlib-url =    "http://infovis.zib.de:8000/Dienst/UI/2.0/Describe/evl.surfacerendering%2FEVL-1997-38",
+  evlib-revision = "1st",
+  who  = "Havran Vlastimil: REN-0007",
+}
+
+@InProceedings{Shirley95-GIDE,
+  author =       "Peter Shirley and Bretton Wade and Philip M. Hubbard
+                 and David Zareski and Bruce Walter and Donald P.
+                 Greenberg",
+  year =         "1995",
+  title =        "Global {Illumination} via {Density} {Estimation}",
+  booktitle =    "Rendering Techniques '95 (Proceedings of the Sixth
+                 Eurographics Workshop on Rendering)",
+  pages =        "219--230",
+  publisher =    "Springer-Verlag",
+  address =      "New York, NY",
+  who = "Havran Vlastimil: REN-0008",
+}
+
+@InProceedings{Arvo:1990:PTI,
+  author =       "James Arvo and David Kirk",
+  editor =       "Forest Baskett",
+  title =        "Particle Transport and Image Synthesis",
+  booktitle =      "Computer Graphics (Proceedings of SIGGRAPH'90)",
+  pages =        "63--66",
+  month =        aug,
+  year =         "1990",
+  annote =       "The rendering equation is similar to the linear
+                 Boltzmann equation which has been widely studied in
+                 physics and nuclear engineering. Consequently, many of
+                 the powerful techniques which have been developed in
+                 these fields can be applied to problems in image
+                 synthesis. In this paper we adapt several statistical
+                 techniques commonly used in neutron transport to
+                 stachastic ray tracing and, more generally, to Monte
+                 Carlo solution of the rendering equation. First, we
+                 describe a technique known as {\em Russian roulette}
+                 which can be used to terminate the recursive tracing of
+                 rays without introducing statistical bias. We also
+                 examine the practice of creating ray trees in classical
+                 ray tracing in the light of a well-known technique in
+                 particle transport known as {\em splitting}. We show
+                 that neither ray trees nor paths as described in
+                 [Kaj86] constitute an optimal sampling plan in
+                 themselves and that a hybrid may be more efficient.",
+  conference =   "held in Dallas, Texas; 6--10 August 1990",
+  keywords =     "Boltzmann equation, Monte Carlo, particle transport,
+                 radiosity, ray tracing, rendering equation",
+  who  = "Havran Vlastimil: REN-0009",
+}
+
+@InProceedings{Interrante:1997:ISS,
+  author =       "Victoria L. Interrante",
+  title =        "Illustrating Surface Shape in Volume Data via
+                 Principal Direction-Driven 3{D} Line Integral
+                 Convolution",
+  booktitle =    "SIGGRAPH 97 Conference Proceedings",
+  editor =       "Turner Whitted",
+  series =       "Annual Conference Series",
+  year =         "1997",
+  organization = "ACM SIGGRAPH",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  pages =        "109--116",
+  note =         "ISBN 0-89791-896-7",
+  keywords =     "visualization, transparent surfaces, shape
+                 representation, principal directions, stroke textures,
+                 line integral convolution, solid texture, isosurfaces,
+                 volume rendering",
+  annote =       "This paper describes how the set of principal
+                 directions and principal curvatures can be understood
+                 to define a natural {"}flow{"} over the surface of an
+                 object and, as such, can be used to guide the placement
+                 of the lines of a stroke texture that seeks to
+                 represent 3D shape in a perceptually intuitive way. The
+                 driving application for this work is the visualization
+                 of layered isovalue surfaces in volume data, where the
+                 particular identity of an individual surface is not
+                 generally known a priori and observers will typically
+                 wish to view a variety of different level surfaces from
+                 the same distribution, superimposed over underlying
+                 opaque structures. This paper describes how, by
+                 advecting an evenly distributed set of tiny opaque
+                 particles, and the empty space between them, via 3D
+                 line integral convolution through the vector field
+                 defined by the principal directions and principal
+                 curvatures of the level surfaces passing through each
+                 gridpoint of a 3D volume, it is possible to generate a
+                 single scan-converted solid stroke texture that can be
+                 used to illustrate the essential shape information of
+                 any level surface in the data. By redefining the length
+                 of the filter kernel according to the magnitude of the
+                 maximum principal curvature of the level surface at
+                 each point around which the convolution is applied, one
+                 can generate longer strokes over more the highly curved
+                 areas, where the directional information is both most
+                 stable and most relevant, and at the same time downplay
+                 the visual impact of the directional information
+                 indicated by the stroke texture in the flatter regions.
+                 In a voxel-based approach such as this one, stroke
+                 narrowness will be constrained by the resolution of the
+                 volume within which the texture is represented.
+                 However, by adaptively indexing into multiple
+                 pre-computed texture volumes, obtained by advecting
+                 particles of increasing sizes, one may selectively
+                 widen the strokes at any point by a variable amount,
+                 determined at the time of rendering, to reflect shading
+                 information or any other function defined over the
+                 volume data.",
+  who  = "Havran Vlastimil: REN-0010",
+}
+
+@InProceedings{salesin90a,
+  author =       "David Salesin and Jorge Stolfi",
+  title =        "Rendering {CSG} Models with a {ZZ}-Buffer",
+  pages =        "67--76",
+  booktitle =    "Computer Graphics (SIGGRAPH '90 Proceedings)",
+  volume =       "24",
+  number =       "4",
+  year =         "1990",
+  month =        aug,
+  editor =       "Forest Baskett",
+  conference =   "held in Dallas, Texas; 6-10 August 1990",
+  keywords =     "ray tracing, antialiasing, constructive solid
+                 geometry, transparent surfaces, display buffers,
+                 visible-surface algorithms, rendering algorithms",
+  annote =       "The ZZ-buffer is a simple acceleration scheme for ray
+                 tracing that can be applied to a wide variety of
+                 scenes, including those with small features, textured
+                 and transparent surfaces, shadows and penubrae, and
+                 depth-of-field effects. In this paper, we describe how
+                 the ZZ-buffer algorithm can be adapted to the rendering
+                 of scenes defined by constructive solid geometry.",
+  who  = "Havran Vlastimil: REN-0011",
+}
+
+@InProceedings{oikarinen97a,
+  author =       "Jarkko OIKARINEN and Lasse JYRKINEN",
+  title =        "Maximum Intensity Projection by 3-Dimensional Seed Filling
+                  in View Lattice",
+  pages =        "173--183",
+  booktitle =      "Proceedings of {\em Compugraphics'97}",
+  keywords = "volume visualization, three-dimensional (3D) Imaging, Ray Casting,
+              Volume Rendering, Medical Application",
+  year =         "1997",
+  month = dec,
+  who  = "Havran Vlastimil: REN-0012",
+}
+
+@Article{Brotman:1984:GSS,
+  author =       "Lynne Shapiro Brotman and Norman I. Badler",
+  title =        "Generating Soft Shadows with a Depth Buffer
+                 Algorithm",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "4",
+  number =       "10",
+  pages =        "5--12",
+  month =        oct,
+  year =         "1984",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Wed Jan 29 06:09:24 1997",
+  acknowledgement = ack-nhfb,
+  classification = "723",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "computer graphics; computer programming;
+                 computer-synthesized shadows; depth buffer algorithm;
+                 penumbra; shadow, I37 soft shadow, I37 shadow penumbra;
+                 soft shadows; visible surface rendering",
+  who  = "Havran Vlastimil: REN-0013",
+}
+
+@InProceedings{Fang:1996:DVR,
+  title =        "Deformable Volume Rendering by {3D} Texture Mapping
+                 and Octree Encoding",
+  author =       "Shiaofen Fang and Rajagopalan Srinivasan and Su Huang
+                 and Ragu Raghavan",
+  booktitle =    "IEEE Visualization '96",
+  organization = "IEEE",
+  year =         "1996",
+  month =        oct,
+  note =         "ISBN 0-89791-864-9",
+  who  = "Havran Vlastimil: REN-0014",
+}
+
+@InProceedings{Reitan97a,
+  author =       "Paula J. Reitan",
+  title =        "3D Visualization of Truecolor Image Histograms",
+  pages =        "320--328",
+  booktitle =      "Proceedings of {\em Compugraphics'97}",
+  keywords = "3D tree drawing, 3D data structures, truecolor image histograms",
+  year =         "1997",
+  month = dec,
+  who  = "Havran Vlastimil: REN-0015",
+}
+
+@InProceedings{EVL-1997-127,
+  author =       "Bruce Walter and G{\"{u}}n Alppay and Eric P. F.
+                 Lafortune and Sebastian Fernandez and Donald P.
+                 Greenberg",
+  editor =       "Turner Whitted",
+  title =        "Fitting Virtual Lights For Non-Diffuse Walkthroughs",
+  booktitle =    "SIGGRAPH 97 Conference Proceedings",
+  series =       "Annual Conference Series",
+  pages =        "45--48",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  year =         "1997",
+  keywords =     "interactive walkthroughs, non-diffuse appearance,
+                 global illumination, Phong shading",
+  language =     "en",
+  abstract =     "This paper describes a technique for using a simple
+                 shading method, such as the Phong lighting model, to
+                 approximate the appearance calculated by a more
+                 accurate method. The results are then suitable for
+                 rapid display using existing graphics hardware and
+                 portable via standard graphics API's. Interactive
+                 walkthroughs of view-independent nondiffuse global
+                 illumination solutions are explored as the motivating
+                 application.",
+  note =         "ISBN 0-89791-896-7",
+  evlib-url =    "http://visinfo.zib.de:80/Dienst/UI/2.0/Describe/evl.computergraphics%2FEVL-1997-127",
+  evlib-revision = "1st",
+  organization = "ACM SIGGRAPH",
+ who  = "Havran Vlastimil: REN-0016",
+}
+
+@Article{Verbeck:1984:CLD,
+  author =       "Channing P. Verbeck and Donald P. Greenberg",
+  title =        "A Comprehensive Light-Source Description for Computer
+                 Graphics",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "4",
+  number =       "7",
+  pages =        "66--75",
+  month =        jul,
+  year =         "1984",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  classification = "723; 741",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "computer generated images; computer graphics ---
+                 Imaging Techniques; light sources; light, I34 Ray
+                 Tracing, I37 Light-Source Description; ray-tracing
+                 system",
+ who  = "Havran Vlastimil: REN-0017",
+}
+
+@InProceedings{Lafortune95-FTRVM,
+  author =       "Eric P. Lafortune and Yves D. Willems",
+  editor =       "P. M. Hanrahan and W. Purgathofer",
+  year =         "1995",
+  title =        "A 5{D} {Tree} to {Reduce} the {Variance} of {Monte}
+                 {Carlo} {Ray} {Tracing}",
+  booktitle =    "Rendering Techniques '95 (Proceedings of the Sixth
+                 Eurographics Workshop on Rendering)",
+  pages =        "11--20",
+  publisher =    "Springer-Verlag",
+  address =      "New York, NY",
+  keywords =     "Monte Carlo, ray tracing, illumination caching",
+  comments =     "ISBN 3-211-82733-1",
+  who  = "Havran Vlastimil: REN-0018",
+}
+
+@InProceedings{Tobler:1997:HSA,
+  author =       "Robert F. Tobler and Alexander Wilkie and Martin Feda
+                 and Werner Purgathofer",
+  title =        "A Hierarchical Subdivision Algorithm for Stochastic
+                 Radiosity Methods",
+  booktitle =    "Eurographics Rendering Workshop 1997",
+  editor =       "Julie Dorsey and Philipp Slusallek",
+  year =         "1997",
+  organization = "Eurographics",
+  publisher =    "Springer Wein",
+  address =      "New York City, NY",
+  month =        jun,
+  pages =        "193--204",
+  note =         "ISBN 3-211-83001-4",
+  keywords =     "radiosity, stochastic, Monte Carlo, hierarchical,
+                 Galerkin",
+  annote =       "The algorithm proposed in this paper uses a stochastic
+                 approach to incrementally calculate the illumination
+                 function over a surface. By tracking the illumination
+                 function at different levels of meshing resolution, it
+                 is possible to get a measure for the quality of the
+                 current representation, and to adoptively subdivide in
+                 places with inadequate accuracy. With this technique a
+                 hierarchical mesh that is based on the stochastic
+                 evaluation of global illumination is generated.",
+  who  = "Havran Vlastimil: REN-0019",
+}
+
+@TechReport{EVL-1995-11,
+  author =       "E. Gr{\"o}ller and W. Purgathofer",
+  title =        "Coherence in Computer Graphics",
+  type =         "Research paper",
+  institution =  "Institute for Computer Graphics, Technical University
+                 Vienna",
+  year =         "1995",
+  abstract =     "Coherence denotes similarities between items or
+                 entities. It describes the extent to which these items
+                 or entities are locally constant. An introduction to
+                 coherence and a survey of various types of coherence,
+                 that are used in computer graphics, are given.
+                 Techniques and data structures for exploiting coherence
+                 in computer graphics are described. Incremental
+                 techniques, bounding volume schemes, subdivision
+                 techniques and several geometric data structures are
+                 discussed in more detail. Applications of coherence
+                 principles to computer graphics are treated and a
+                 survey of previous research is done.",
+  postscript-url = "ftp://ftp.cg.tuwien.ac.at/pub/TR/95/TR-186-2-95-04Paper.ps.gz",
+  evlib-url =    "http://infovis.zib.de:8000/Dienst/UI/2.0/Describe/evl.computergraphics%2FEVL-1995-11",
+  evlib-revision = "1st",
+  who  = "Havran Vlastimil: REN-0020",
+}
+
+
+@InProceedings{Veach94-BELT,
+  author =       "Eric Veach and Leonidas Guibas",
+  month =        jun,
+  year =         "1994",
+  title =        "Bidirectional {Estimators} for {Light} {Transport}",
+  booktitle =    "Fifth Eurographics Workshop on Rendering",
+  pages =        "147--162",
+  address =      "Darmstadt, Germany",
+  keywords =     "Monte Carlo, sampling noise, variance reduction, light
+                 transport, importance transport",
+  who  = "Havran Vlastimil: REN-0021",
+}
+
+@TechReport{EVL-1997-19,
+  author =       "Dieter Schmalstieg",
+  title =        "A Survey of Advanced Interactive 3-{D} Graphics
+                 Techniques",
+  type =         "Research paper",
+  institution =  "Institute of Computer Graphics, Vienna University of
+                 Technology",
+  year =         "1997",
+  abstract =     "Interactive 3-D Graphics are a new emerging field
+                 enabled by powerful and cost-effective computer
+                 systems. The goal is to present a three-dimensional
+                 image of a scene stored in a computer to give a human
+                 user the impression that he or she is looking at a
+                 virtual world. In producing such an illusion, we would
+                 like to always be able to produce images that match or
+                 exceed the limits of human visual perception in all
+                 aspects. Unfortunately, limitations in the performance
+                 of the image generators we employ for this task defeat
+                 this goal. The ever-increasing demands of applications
+                 make it unlikely that this situation will ever change
+                 significantly. Working solutions require us to trade
+                 off image fidelity for graphical complexity and
+                 performance of the application. In doing so, it is
+                 vital to understand those human factors that dominate
+                 the perception of interactive 3-D computer graphics.",
+  postscript-url = "ftp://ftp.cg.tuwien.ac.at/pub/TR/97/TR-186-2-97-05Paper.ps.gz",
+  evlib-url =    "http://infovis.zib.de:8000/Dienst/UI/2.0/Describe/evl.computergraphics%2FEVL-1997-19",
+  evlib-revision = "1st",
+  evlib-postscript-md5 = "7f854b51437fbc452dd968e6dfc5d18b",
+  who  = "Havran Vlastimil: REN-0022",
+}
+
+@Article{Woo:1990:SSA,
+  author =       "Andrew Woo and Pierre Poulin and Alain Fournier",
+  title =        "A Survey of Shadow Algorithms",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "10",
+  number =       "6",
+  pages =        "13--32",
+  month =        nov,
+  year =         "1990",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Alias Research, Toronto, Ont, Canada",
+  annote =       "Essential to realistic and visually appealing images,
+                 shadows are difficult to compute in most display
+                 environments. This survey characterizes the various
+                 types of shadows. It also describes most existing
+                 shadow algorithms and discusses their complexities,
+                 advantages, and shortcomings. We examine hard shadows,
+                 soft shadows, shadows of transparent objects, and
+                 shadows for complex modeling primitives. For each type,
+                 we examine shadow algorithms within various rendering
+                 techniques. \\ This survey attempts to provide readers
+                 with enough background and insight on the various
+                 methods to allow them to choose the algorithm best
+                 suited to their needs. We also hope that our analysis
+                 will help identify the areas that need more research
+                 and point to possible solutions.",
+  classification = "723; 741",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Bidirectional Ray Tracing; Computer Graphics; Hard
+                 Shadow Generation; Image Processing; Image Rendering;
+                 Shadow Algorithms; Shadow Volumes; Soft Shadow
+                 Generation; survey",
+  who  = "Havran Vlastimil: REN-0023",
+}
+
+@InProceedings{Greenberg:1997:FRI,
+  author =       "Donald P. Greenberg and Kenneth E. Torrance and Peter
+                 Shirley and James Arvo and James A. Ferwerda and
+                 Sumanta Pattanaik and Eric P. F. Lafortune and Bruce
+                 Walter and Sing-Choong Foo and Ben Trumbore",
+  title =        "A Framework for Realistic Image Synthesis",
+  booktitle =    "SIGGRAPH 97 Conference Proceedings",
+  editor =       "Turner Whitted",
+  series =       "Annual Conference Series",
+  year =         "1997",
+  organization = "ACM SIGGRAPH",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  pages =        "477--494",
+  note =         "ISBN 0-89791-896-7",
+  keywords =     "Realistic Image Synthesis, Light Reflection,
+                 Perception",
+  annote =       "Our goal is to develop physically based lighting
+                 models and perceptually based rendering procedures for
+                 computer graphics that will produce synthetic images
+                 that are visually and measurably indistinguishable from
+                 real-world images. Fidelity of the physical simulation
+                 is of primary concern. Our research framework is
+                 subdivided into three sub-sections: the local light
+                 reflection model, the energy transport simulation, and
+                 the visual display algorithms. The first two
+                 subsections are physically based, and the last is
+                 perceptually based. We emphasize the comparisons
+                 between simulations and actual measurements, the
+                 difficulties encountered, and the need to utilize the
+                 vast amount of psychophysical research already
+                 conducted. Future research directions are enumerated.
+                 We hope that results of this research will help
+                 establish a more fundamental, scientific approach for
+                 future rendering algorithms. This presentation
+                 describes a chronology of past research in global
+                 illumination and how parts of our new system are
+                 currently being developed.",
+  who  = "Havran Vlastimil: REN-0024",
+}
+
+
+@InProceedings{Stewart:1997:HVT,
+  author =       "A. James Stewart",
+  title =        "Hierarchical Visibility in Terrains",
+  booktitle =    "Proceedings of Eurographics Rendering Workshop '97",
+  year =         "1997",
+  pages =        "217--228",
+  annote =       "This paper describes a hierarchical visibility
+                 technique that significantly accelerates terrain
+                 rendering. With this technique, large parts of the
+                 terrain that are hidden from the viewpoint are culled,
+                 thus avoiding the expense of uselessly sending them
+                 down the graphics pipeline (only to find in the
+                 z-buffer step that they are hidden). The hierarchical
+                 visibility technique has been implemented in a
+                 multiresolution terrain rendering algorithm and
+                 experimental results show very large speedups in some
+                 situations.",
+  who  = "Havran Vlastimil: REN-0025",
+}
+
+@Article{Sillion:1997:EIM,
+  author =       "Francois Sillion and George Drettakis and Benoit
+                 Bodelet",
+  title =        "Efficient Impostor Manipulation for Real-Time
+                 Visualization of Urban Scenery",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "16",
+  number =       "3",
+  pages =        "C207--C218",
+  month =        sep # " 4--8",
+  year =         "1997",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Tue Mar 17 15:44:38 MST 1998",
+  acknowledgement = ack-nhfb,
+  affiliation =  "INRIA",
+  affiliationaddress = "Grenoble, Fr",
+  classification = "722.4; 723; 723.2; 723.3; 723.5",
+  journalabr =   "Comput Graphics Forum",
+  keywords =     "Algorithms; Computer simulation; Database systems;
+                 Image segmentation; Interactive computer systems;
+                 Interactive visualization systems; Real time systems;
+                 Three dimensional computer graphics; Urban scenes;
+                 Virtual reality; Visualization",
+  who  = "Havran Vlastimil: REN-0026",
+}
+
+@InProceedings{Schaufler:1997:NRP,
+  author =       "Gernot Schaufler",
+  title =        "Nailboards: {A} Rendering Primitive for Image Caching
+                 in Dynamic Scenes",
+  booktitle =    "Eurographics Rendering Workshop 1997",
+  editor =       "Julie Dorsey and Philipp Slusallek",
+  year =         "1997",
+  organization = "Eurographics",
+  publisher =    "Springer Wein",
+  address =      "New York City, NY",
+  month =        jun,
+  pages =        "151--162",
+  note =         "ISBN 3-211-83001-4",
+  annote =       "This paper proposes a simple augmentation to texture
+                 mapping hardware which produces the correct depth
+                 buffer content and hence correct visibility when
+                 replacing complex objects by partially transparent
+                 textured polygons. Rendering such polygons exploits
+                 frame-to-frame coherence in image sequences of dynamic
+                 scenes. Correct depth values are obtained by keeping a
+                 small depth delta for every texel which represents the
+                 texel's deviation from the textured polygon. The
+                 polygon's depth values are modified at every pixel to
+                 match the depicted object's geometry.",
+  who  = "Havran Vlastimil: REN-0027",
+}
+
+@InProceedings{Bishop:1994:FRD,
+  author =       "Gary Bishop and Henry Fuchs and Leonard Mc{M}illan and
+                 Ellen J. {Scher Zagier}",
+  editor =       "Andrew Glassner",
+  booktitle =    "Proceedings of SIGGRAPH '94 (Orlando, Florida, July
+                 24--29, 1994)",
+  title =        "Frameless Rendering: Double Buffering Considered
+                 Harmful",
+  organization = "ACM SIGGRAPH",
+  publisher =    "ACM Press",
+  pages =        "175--176",
+  month =        jul,
+  year =         "1994",
+  note =         "ISBN 0-89791-667-0",
+  series =       "Computer Graphics Proceedings, Annual Conference
+                 Series",
+  who  = "Havran Vlastimil: REN-0028",
+}
+
+@InProceedings{kajiya86a,
+  author =       "J. T. Kajiya",
+  title =        "The Rendering Equation",
+  pages =        "143--150",
+  booktitle =      "Computer Graphics (SIGGRAPH '86 Proceedings)",
+  year =         "1986",
+  month =        aug,
+  conference =   "held in Dallas, Texas, August 18--22, 1986",
+  keywords =     "I37 rendering, I37 ray tracing, I37 radiosity,
+                 shading, diffuse reflection, radiosity",
+  annote =       "We present an integral equation which generalizes a
+                 variety of known rendering algorithms. In the course of
+                 discussing a Monte Carlo solution a new form of
+                 variance reduction is presented, called hierarchical
+                 sampling, and a number of elaborations are given that
+                 show that it may be an efficient new technique for a
+                 wide variety of Monte Carlo procedures. The resulting
+                 rendering algorithm extends the range of optical
+                 phenomena which can be effectively simulated.",
+  who  = "Havran Vlastimil: REN-0029",
+}
+
+@inproceedings{CDRLSS-gi96,
+  title     = "Fast rendering of complex environments using a spatial hierarchy",
+  author    = "Bradford Chamberlain and Tony DeRose and Dani Lischinski and
+               David Salesin and John Snyder",
+  booktitle = "Graphics Interface",
+  year      = "1996",
+  month     = "May",
+  pages     = "132--141",
+  who  = "Havran Vlastimil: REN-0030",
+}
+
+@InProceedings{sillion89a,
+  author =       "Francois Sillion and Claude Puech",
+  title =        "A General Two-Pass Method Integrating Specular and
+                 Diffuse Reflection",
+  pages =        "335--344",
+  booktitle =      "Computer Graphics (SIGGRAPH '89 Proceedings)",
+  volume =       "23",
+  number =       "3",
+  year =         "1989",
+  month =        jul,
+  editor =       "Jeffrey Lane",
+  conference =   "held in Boston, Massachusetts; 31 July -- 4 August
+                 1989",
+  keywords =     "radiosity, interreflection, two-pass method, extended
+                 form factors, z-buffer, progressive refinement, global
+                 illumination, ray tracing",
+  annote =       "We analyze some recent approaches to the global
+                 illumination problem by introducing the corresponding
+                 {\em reflection operators}, and we demonstrate the
+                 advantages of a two-pass method. A generalization of
+                 this system introduced by Wallace {\em et al}.\ at
+                 Siggraph '87 to integrate diffuse as well as specular
+                 reflection is presented. It is based on the calculation
+                 of {\em extended form-factors}, which allows arbitrary
+                 geometries to be used in the scene description, as well
+                 as refraction effects. We also present a new sampling
+                 method for the calculation of form-factors, which is an
+                 alternative to the {\em hemi-cube} technique introduced
+                 by Cohen and Greenberg for radiosity calculations. This
+                 method is particularly well suited to the extended
+                 form-factors calculation. The problem of interactive
+                 display of the picture being created is also addressed
+                 by using hardware-assisted projections and image
+                 composition to recreate a complete specular view of the
+                 scene.",
+  who  = "Havran Vlastimil: REN-0031",
+}
+
+@Article{Gibson:1996:EHR,
+  author =       "S. Gibson and R. J. Hubbold",
+  title =        "Efficient Hierarchical Refinement and Clustering for
+                 Radiosity in Complex Environments",
+  journal =      "Computer Graphics Forum",
+  year =         "1996",
+  volume =       "15",
+  number =       "5",
+  pages =        "297--310",
+  note =         "ISSN 0167-7055",
+  keywords =     "radiosity, hierarchical radiosity, error bounds,
+                 clustering",
+  annote =       "Generating accurate radiosity solutions of very
+                 complex environments is a time-consuming problem. We
+                 present a rapid hierarchical algorithm that enables
+                 such solutions to be computed quickly and efficiently.
+                 Firstly, a new technique for bouncing the error in the
+                 transfer of radiosity between surfaces is discussed,
+                 incorporating bounds on form factors, visibility,
+                 irradiance, and reflectance over textured surfaces.
+                 This technique is then applied to the problem of
+                 bounding radiosity transfer between clusters of
+                 surfaces, leading to a fast, practical clustering
+                 algorithm that builds on the previous work of Sillion.
+                 Volumes are used to represent clusters of small
+                 surfaces, but unlike previous algorithms, the
+                 orientations of surfaces inside each cluster are
+                 accounted for in both the error bound and radiosity
+                 transfer. This enables an accurate solution to be
+                 generated very efficiently, and results are presented
+                 demonstrating the performance of the algorithm on a
+                 variety of complex models, one containing almost a
+                 quarter of a million initial surfaces.",
+  who  = "Havran Vlastimil: REN-0032",
+}
+
+@InProceedings{Smits:1994:CAR,
+  author =       "Brian Smits and James Arvo and Donald Greenberg",
+  editor =       "Andrew Glassner",
+  booktitle =    "Proceedings of SIGGRAPH '94 (Orlando, Florida, July
+                 24--29, 1994)",
+  title =        "A Clustering Algorithm for Radiosity in Complex
+                 Environments",
+  organization = "ACM SIGGRAPH",
+  publisher =    "ACM Press",
+  pages =        "435--442",
+  month =        jul,
+  year =         "1994",
+  note =         "ISBN 0-89791-667-0",
+  series =       "Computer Graphics Proceedings, Annual Conference
+                 Series",
+  who  = "Havran Vlastimil: REN-0033",
+}
+
+@InProceedings{Jensen95-EFSPM,
+  author =       "Henrik Wann Jensen and Niels J. Christensen",
+  editor =       "Harold P. Santo",
+  month =        dec # " 12,",
+  year =         "1995",
+  title =        "Efficiently {Rendering} {Shadows} {Using} the {Photon}
+                 {Map}",
+  booktitle =    "Edugraphics + Compugraphics Proceedings",
+  pages =        "285--291",
+  publisher =    "GRASP- Graphic Science Promotions \& Publications",
+  address =      "P.O. Box 4076, Massama, 2745 Queluz, Portugal",
+  comments =     "ISBN 972-8342-00-4",
+  who  = "Havran Vlastimil: REN-0034",
+}
+
+@InProceedings{Huerta97,
+  author =       "Joaquin Huerta and  Miguel Chover and Jose Ribelles
+                  and Ricardo Quiros",
+  editor =       "Harold P. Santo",
+  month =        dec # " 15,",
+  year =         "1997",
+  title =        "Constructing and Rendering of Multiresolution Binary Space
+                  Partitioning Trees",
+  booktitle =    "Edugraphics + Compugraphics Proceedings",
+  pages =        "212--221",
+  publisher =    "GRASP- Graphic Science Promotions \& Publications",
+  address =      "P.O. Box 4076, Massama, 2745 Queluz, Portugal",
+  who  = "Havran Vlastimil: REN-0035",
+}
+
+@InProceedings{Teller:1994:POL,
+  author =       "Seth Teller and Celeste Fowler and Thomas Funkhouser
+                 and Pat Hanrahan",
+  editor =       "Andrew Glassner",
+  booktitle =    "Proceedings of SIGGRAPH '94 (Orlando, Florida, July
+                 24--29, 1994)",
+  title =        "Partitioning and Ordering Large Radiosity
+                 Computations",
+  organization = "ACM SIGGRAPH",
+  publisher =    "ACM Press",
+  pages =        "443--450",
+  month =        jul,
+  year =         "1994",
+  note =         "ISBN 0-89791-667-0",
+  series =       "Computer Graphics Proceedings, Annual Conference
+                 Series",
+  who  = "Havran Vlastimil: REN-0036",
+}
+
+@InProceedings{EVL-1997-128,
+  author =       "Eric Veach and Leonidas J. Guibas",
+  editor =       "Turner Whitted",
+  title =        "Metropolis Light Transport",
+  booktitle =    "SIGGRAPH 97 Conference Proceedings",
+  series =       "Annual Conference Series",
+  pages =        "65--76",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  year =         "1997",
+  keywords =     "global illumination, lighting simulation, radiative
+                 heat transfer, physically-based rendering, Monte Carlo
+                 integration, variance reduction, Metropolis-Hastings
+                 algorithm, Markov Chain Monte Carlo (MCMC) methods",
+  language =     "en",
+  abstract =     "We present a new Monte Carlo method for solving the
+                 light transport problem, inspired by the Metropolis
+                 sampling method in computational physics. To render an
+                 image, we generate a sequence of light transport paths
+                 by randomly mutating a single current path (e.g. adding
+                 a new vertex to the path). Each mutation is accepted or
+                 rejected with a carefully chosen probability, to ensure
+                 that paths are sampled according to the contribution
+                 they make to the ideal image. We then estimate this
+                 image by sampling many paths, and recording their
+                 locations on the image plane. Our algorithm is
+                 unbiased, handles general geometric and scattering
+                 models, uses little storage, and can be orders of
+                 magnitude more efficient than previous unbiased
+                 approaches. It performs especially well on problems
+                 that are usually considered difficult, e.g. those
+                 involving bright indirect light, small geometric holes,
+                 or glossy surfaces. Furthermore, it is competitive with
+                 previous unbiased algorithms even for relatively simple
+                 scenes. The key advantage of the Metropolis approach is
+                 that the path space is explored locally, by favoring
+                 mutations that make small changes to the current path.
+                 This has several consequences. First, the average cost
+                 per sample is small (typically only one or two rays).
+                 Second, once an important path is found, the nearby
+                 paths are explored as well, thus amortizing the expense
+                 of finding such paths over many samples. Third, the
+                 mutation set is easily extended. By constructing
+                 mutations that preserve certain properties of the path
+                 (e.g. which light source is used) while changing
+                 others, we can exploit various kinds of coherence in
+                 the scene. It is often possible to handle difficult
+                 lighting problems efficiently by designing a
+                 specialized mutation in this way.",
+  note =         "ISBN 0-89791-896-7",
+  evlib-url =    "http://visinfo.zib.de:80/Dienst/UI/2.0/Describe/evl.computergraphics%2FEVL-1997-128",
+  evlib-revision = "1st",
+  organization = "ACM SIGGRAPH",
+  who  = "Havran Vlastimil: REN-0037",
+}
+
+@InProceedings{Jensen:1996:GIU,
+  author =       "Henrik Wann Jensen",
+  title =        "Global Illumination using Photon Maps",
+  booktitle =    "Eurographics Rendering Workshop 1996",
+  editor =       "Xavier Pueyo and Peter Schr{\"{o}}der",
+  year =         "1996",
+  organization = "Eurographics",
+  publisher =    "Springer Wein",
+  address =      "New York City, NY",
+  month =        jun,
+  pages =        "21--30",
+  note =         "ISBN 3-211-82883-4",
+  keywords =     "Global Illumination, Photon Maps, Filtering, Monte
+                 Carlo Ray Tracing",
+  annote =       "This paper presents a two pass global illumination
+                 method based on the concept of photon maps. It
+                 represents a significant improvement of a previously
+                 described approach both with respect to speed, accuracy
+                 and versatility. In the first pass two photon maps are
+                 created by emitting packets of energy (photons) from
+                 the light sources and storing these as they hit
+                 surfaces within the scene. We use one high resolution
+                 caustics photon map to render caustics that are
+                 visualized directly and one low resolution photon map
+                 that is used during the rendering step. The scene is
+                 rendered using a distribution ray tracing algorithm
+                 optimized by using the information in the photon maps.
+                 Shadow photons are used to render shadows more
+                 efficiently and the directional information in the
+                 photon map is used to generate more optimal sampling
+                 directions and to limit the recursion in the
+                 distribution ray tracer by providing an estimate of the
+                 radiance on all surfaces with the exception of specular
+                 and highly glossy surfaces. Noise and blur at
+                 discontinuities in the radiance estimate is reduced by
+                 using a cone filter. The results presented demonstrate
+                 global illumination in scenes containing procedural
+                 objects and surfaces with diffuse and glossy reflection
+                 models. The implementation is also compared with the
+                 Radiance program.",
+  who  = "Havran Vlastimil: REN-0038",
+}
+
+@InProceedings{Jansen94a,
+   author = "E. Reinhard and Lucas U. Tijssen and Frederik W. Jansen",
+   title = "Environment Mapping for Efficient Sampling of the Diffuse Interreflection",
+   year = 1994,
+   booktitle =  "Proc. of 5th Eurographics Workshop on Rendering 1994",
+   pages = "401--404",
+   who = "Havran Vlastimil: REN-0039",
+}
+
+@inproceedings{McCoolHarwood-gi97,
+  title     = "Probability trees",
+  author    = "Michael D. McCool and Peter K. Harwood",
+  booktitle = "Graphics Interface '97",
+  year      = "1997",
+  month     = "May",
+  pages     = "37--46",
+  who  = "Havran Vlastimil: REN-0040",
+}
+
+@inproceedings{MFC-gi97,
+  title     = "Multiresolution rendering of complex botanical scenes",
+  author    = "Dana Marshall and Donald S. Fussell and A.T. Campbell,~III",
+  booktitle = "Graphics Interface '97",
+  year      = "1997",
+  month     = "May",
+  pages     = "97--104",
+  who  = "Havran Vlastimil: REN-0041",
+}
+
+@Misc{Fortune,
+  author = "Steven Fortune",
+  title = "A Beam-Tracing Algorithm for Prediction of Indoor Radio Propagation",
+  year = "19??",
+  month = "??",
+  pages = "10",
+  who  = "Havran Vlastimil: REN-0042",
+}
+
+@PhdThesis{Arvo95-AMSLT,
+  author =       "James Arvo",
+  month =        dec,
+  year =         "1995",
+  title =        "Analytic {Methods} for {Simulated} {Light}
+                 {Transport}",
+  institution =  "Yale University",
+  type =         "Ph.{D}. thesis",
+  who  = "Havran Vlastimil: REN-0043",
+}
+
+
+@Article{Wilhelms:1991:CPA,
+  author =       "Jane Wilhelms and Allen Van Gelder",
+  editor =       "Thomas W. Sederberg",
+  title =        "A coherent projection approach for direct volume
+                 rendering",
+  journal =      "Computer Graphics",
+  volume =       "25",
+  number =       "4",
+  pages =        "275--284",
+  month =        jul,
+  year =         "1991",
+  coden =        "CGRADI, CPGPBZ",
+  ISSN =         "0097-8930",
+  conference =   "held in Las Vegas, Nevada; 28 July -- 2 August 1991",
+  who  = "Havran Vlastimil: REN-0044",
+}
+
+@Article{Levoy:1990:VRA,
+  author =       "Marc Levoy",
+  title =        "Volume Rendering by Adaptive Refinement",
+  journal =      "The Visual Computer",
+  pages =        "2--7",
+  volume =       "6",
+  number =       "1",
+  month =        feb,
+  year =         "1990",
+  keywords =     "volume rendering, voxel, adaptive refinement, adaptive
+                 sampling, ray tracing",
+  annote =       "{\em Volume rendering} is a technique for visualizing
+                 sampled scalar functions of three spatial dimensions by
+                 computing 2D projections of a colored semi-transparent
+                 gel. This paper presents a volume-rendering algorithm,
+                 in which imge quality is adaptively refined over time.
+                 An initial image is generated by casting a small number
+                 of rays into the data, less than one ray per pixel, and
+                 interpolating between the resulting colors. Subsequent
+                 images are generated by alternately casting more rays
+                 and interpolating. The usefulness of these rays is
+                 maximized by distributing them according to measures of
+                 loal image complexity. Examples from two applications
+                 are given: molecular graphics and medical imaging.",
+  who  = "Havran Vlastimil: REN-0045",
+}
+
+@Article{Hsu:1995:SDA,
+  author =       "Siu-Chi Hsu and Tien-Tsin Wong",
+  title =        "Simulating Dust Accumulation",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "15",
+  number =       "1",
+  pages =        "18--22",
+  month =        jan,
+  year =         "1995",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Chinese Univ. of Hong Kong, Shatin, Hong Kong",
+  classification = "451.1; 723.5; 921.6; 931.2",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Approximation theory; Computer graphics; Computer
+                 simulation; Dust; Dust accumulation; Image analysis;
+                 Interpolation; Mathematical models; Natural sciences
+                 computing; Ray tracing; Rendering; Scraping effects;
+                 Surface exposure; Surface properties; Surfaces;
+                 Textures",
+  who  = "Havran Vlastimil: REN-0046",
+}
+
+
+@Article{Rushmeier:1995:VRP,
+  author =       "Holly Rushmeier and Anthony Hamins and Mun Young
+                 Choi",
+  title =        "Volume rendering of pool fire data",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "15",
+  number =       "4",
+  pages =        "62--67",
+  month =        jul,
+  year =         "1995",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Natl Inst of Standards and Technology",
+  affiliationaddress = "Gaithersburg, MD, USA",
+  classification = "723.5; 914.2; 921.2; 921.6",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Calculations; Computer graphics; Fires; Imaging
+                 techniques; Integration; Line integration; Mathematical
+                 models; Pool fires; Radiation effects; Ray casting; Two
+                 dimensional; Visualization; Volume rendering",
+  who  = "Havran Vlastimil: REN-0047",		 
+}
+
+
+@Article{Woo:1996:IRR,
+  author =       "Andrew Woo and Andrew Pearce and Marc Ouellette",
+  title =        "It's really not a rendering bug, you see.",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "16",
+  number =       "5",
+  pages =        "21--25",
+  month =        sep,
+  year =         "1996",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Alias-Wavefront, Toronto, Ont., Canada",
+  classification = "721.1; 723.1; 723.5; 741.1; 921.4; 921.6",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Algorithms; Approximation theory; Color computer
+                 graphics; Computational geometry; Computational
+                 methods; Computer graphics; Convergence of numerical
+                 methods; Digital arithmetic; Errors; Gouraud shading;
+                 Image artifacts; Interpolation; Light reflection;
+                 Lighting; Liner interpolation; Mirror reflection;
+                 Mirrors; Numerical instability; Phong shading; Planar
+                 equation; Polygons; Program debugging; Ray plane
+                 intersection equation; Ray tracing; Rendering
+                 artifacts; Shadowing; Texture mapping; Three
+                 dimensional computer graphics; Visibility",
+  who  = "Havran Vlastimil: REN-0048",
+}
+
+@InProceedings{Nechvile:1996:FFE,
+  author =       "K. Nechvile and J. Sochor",
+  title =        "Form-factor Evaluation with Regional {BSP} Trees",
+  booktitle =    "Winter School of Computer Graphics 1996", 
+  year =         "1996",
+  month =        feb,
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, 12-16 February 1996",
+  who  = "Havran Vlastimil: REN-0049",
+}
+
+@InProceedings{Campbell:1990:AMG,
+  author =       "A. T. {Campbell, III} and Donald S. Fussell",
+  title =        "Adaptive Mesh Generation for Global Diffuse
+                 Illumination",
+  year =         "1990",
+  month =        aug,
+  volume =       "24",
+  booktitle =    "Computer Graphics (SIGGRAPH '90 Proceedings)",
+  pages =        "155--164",
+  keywords =     "BSP tree",
+  who  = "Havran Vlastimil: REN-0050",
+}
+
+@Article{Noordmans:1997:FVR,
+  author =       "H. J. Noordmans and A. W. M. Smeulders and H. T. M.
+                 {van der Voort}",
+  title =        "Fast volume render techniques for interactive
+                 analysis",
+  journal =      "The Visual Computer",
+  year =         "1997",
+  volume =       "13",
+  number =       "8",
+  pages =        "345--358",
+  publisher =    "Springer-Verlag",
+  note =         "ISSN 0178-2789",
+  keywords =     "volume rendering, interaction, successive adaptive
+                 refinement, confocal microscopy",
+  annote =       "Without graphics hardware, interactive volume
+                 rendering is almost impossible with the current
+                 generation of computers and software. We describe the
+                 implementation of a volume renderer for interactive
+                 analysis of confocal images. We propose several
+                 techniques to accelerate the rendering of grey-value
+                 volumes. We propose to illuminate the volume
+                 selectively with ray templates to get a proper shadow
+                 cue in the shortest feasible time. In the viewing
+                 phase, rendering is distinctively accelerated for four
+                 user interactions: (1) a total change by successive
+                 adaptive refinement, (2) an unknown change in the view
+                 with this refinement strategy combined with suspended
+                 interpolation, (3) a known change in the view by
+                 recalculating only that part and (4) a view translation
+                 by recalculating the uncovered part.",
+  who  = "Havran Vlastimil: REN-0051",
+}
+
+@Article{lischinski92a,
+      author =       "Dani Lischinski and Filippo Tampieri and Donald P.
+                     Greenberg",
+      title =        "Discontinuity meshing for accurate radiosity",
+      journal =      "IEEE Computer Graphics and Applications",
+      pages =        "25--39",
+      volume =       "12",
+      number =       "6",
+      month =        nov,
+      year =         "1992",
+      keywords =     "shadow, illumination, bsp, adaptive subdivision",
+      annote =       "This object-space algorithm accurately produces the
+                     radiance across a surface. Used in
+                     progressive-refinement radiosity system, it greatly
+                     improves the photorealism of diffuse global
+                     illumination solutions.",
+  who  = "Havran Vlastimil: REN-0052",
+}
+
+
+@Article{tvcg-1995-19,
+  author =       "Francois X. Sillion",
+  email =        "francois.sillion@imag.fr",
+  title =        "{A Unified Hierarchical Algorithm for Global
+                 Illumination with Scattering Volumes and Object
+                 Clusters}",
+  journal =      "IEEE Transactions on Visualization and Computer
+                 Graphics",
+  volume =       "1",
+  number =       "3",
+  month =        sep,
+  year =         "1995",
+  pages =        "240--254",
+  abstract =     "This paper presents a new radiosity algorithm that
+                 allows the simultaneous computation of energy exchanges
+                 between surface elements, scattering volume
+                 distributions, and groups of surfaces, or object
+                 clusters. The new technique is based on a hierarchical
+                 formulation of the zonal method, and efficiently
+                 integrates volumes and surfaces. In particular no
+                 initial linking stage is needed, even for inhomogeneous
+                 volumes, thanks to the construction of a global spatial
+                 hierarchy. An analogy between object clusters and
+                 scattering volumes results in a powerful clustering
+                 radiosity algorithm, with no initial linking between
+                 surfaces and fast computation of average visibility
+                 information through a cluster. We show that the
+                 accurate distribution of the energy emitted or received
+                 at the cluster level can produce even better results
+                 than isotropic clustering at a marginal cost. The
+                 resulting algorithm is fast and, more importantly,
+                 truly progressive as it allows the quick calculation of
+                 approximate solutions with a smooth convergence towards
+                 very accurate simulations.",
+  keywords =     "Radiosity, hierarchical techniques, clustering,
+                 visibility, volume scattering, lighting simulation,
+                 realistic image synthesis",
+  tvcg-abstract-url = "http://www.computer.org/tvcg/tg1995/v0240abs.htm",
+  who  = "Havran Vlastimil: REN-0053",
+}
+
+@Article{tvcg-1997-25,
+  author =       "Paul Lalonde and Alain Fournier",
+  title =        "{A Wavelet Representation of Reflectance Functions}",
+  journal =      "IEEE Transactions on Visualization and Computer
+                 Graphics",
+  volume =       "3",
+  number =       "4",
+  month =        oct,
+  year =         "1997",
+  pages =        "329--336",
+  abstract =     "Analytical models of light reflection are in common
+                 use in computer graphics. However, models based on
+                 measured reflectance data promise increased realism by
+                 making it possible to simulate many more types of
+                 surfaces to a greater level of accuracy than with
+                 analytical models. They also require less expert
+                 knowledge about the illumination models and their
+                 parameters. There are a number of hurdles to using
+                 measured reflectance functions, however. The data sets
+                 are very large. A reflectance distribution function
+                 sampled at five degrees angular resolution, arguably
+                 sparse enough to miss highlights and other high
+                 frequency effects, can easily require over a million
+                 samples, which in turn amount to over four megabytes of
+                 data. These data then also require some form of
+                 interpolation and filtering to be used effectively. In
+                 this paper, we examine issues of representation of
+                 measured reflectance distribution functions. In
+                 particular, we examine a wavelet basis representation
+                 of reflectance functions, and the algorithms required
+                 for efficient point-wise reconstruction of the BRDF. We
+                 show that the nonstandard wavelet decomposition leads
+                 to considerably more efficient algorithms than the
+                 standard wavelet decomposition. We also show that
+                 thresholding allows considerable improvement in running
+                 times, without unduly sacrificing image quality.",
+  keywords =     "reflectance models, bidirectional reflectance,
+                 distribution functions, local shading, local
+                 illumination, wavelets, compression",
+  tvcg-abstract-url = "http://www.computer.org/tvcg/tg1997/v0329abs.htm",
+  tvcg-pdf-url = "http://pdf.computer.org/tg/books/tg1997/pdf/v0329.pdf",
+  who  = "Havran Vlastimil: REN-0054",
+}
+
+@InProceedings{Shade:1996:HIC,
+  author =       "Jonathan Shade and Dani Lischinski and David Salesin
+                 and Tony {DeRose} and John Snyder",
+  title =        "Hierarchical Image Caching for Accelerated
+                 Walkthroughs of Complex Environments",
+  pages =        "75--82",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH '96)",
+  year =         "1996",
+  publisher =    "ACM SIGGRAPH/Addison Wesley",
+  month =        aug,
+  abstract =     "We present a new method that utilizes path coherence
+                 to accelerate walkthroughs of geometrically complex
+                 static scenes. As a preprocessing step, our method
+                 constructs a BSP-tree that hierarchically partitions
+                 the geometric primitives in the scene. In the course of
+                 a walkthrough, images of nodes at various levels of the
+                 hierarchy are cached for reuse in subsequent frames. A
+                 cached image is reused by texture-mapping it onto a
+                 single quadrilateral that is drawn instead of the
+                 geometry contained in the corresponding node. Visual
+                 artifacts are kept under control by using an error
+                 metric that quantifies the discrepancy between the
+                 appearance of the geometry contained in a node and the
+                 cached image. The new method is shown to achieve
+                 speedups of an order of magnitude for walkthroughs of a
+                 complex outdoor scene, with little or no loss in
+                 rendering quality.",
+  who  = "Havran Vlastimil: REN-0055",
+}
+
+@Article{tvcg-1996-22,
+  author =       "Daniel Cohen-Or and Eran Rich and Uri Lerner and
+                 Victor Shenkar",
+  email =        "daniel@math.tau.ac.il and none and none and none",
+  title =        "{A Real-Time Photo-Realistic Visual Flythrough}",
+  journal =      "IEEE Transactions on Visualization and Computer
+                 Graphics",
+  volume =       "2",
+  number =       "3",
+  month =        sep,
+  year =         "1996",
+  pages =        "255--264",
+  abstract =     "In this paper we present a comprehensive flythrough
+                 system which generates photo-realistic images in true
+                 real-time. The high performance is due to an innovative
+                 rendering algorithm based on a discrete ray casting
+                 approach, accelerated by ray coherence and
+                 multiresolution traversal. The terrain as well as the
+                 3D objects are represented by a textured mapped
+                 voxel-based model. The system is based on a pure
+                 software algorithm and is thus portable. It was first
+                 implemented on a workstation and then ported to a
+                 general-purpose parallel architecture to achieve
+                 real-time performance.",
+  keywords =     "Terrain visualization, parallel rendering, flight
+                 simulator, visual simulations, voxel-based modeling,
+                 ray casting",
+  tvcg-abstract-url = "http://www.computer.org/tvcg/tg1996/v0255abs.htm",
+  who  = "Havran Vlastimil: REN-0056",
+}
+
+@InProceedings{hanrahan90b,
+  author =       "Pat Hanrahan and Jim Lawson",
+  title =        "A Language for Shading and Lighting Calculations",
+  pages =        "289--298",
+  booktitle =      "Computer Graphics (SIGGRAPH '90 Proceedings)",
+  volume =       "24",
+  number =       "4",
+  year =         "1990",
+  month =        aug,
+  editor =       "Forest Baskett",
+  conference =   "held in Dallas, Texas; 6-10 August 1990",
+  keywords =     "shading language, little language, illumination,
+                 lighting, rendering",
+  who  = "Havran Vlastimil: REN-0057",
+}
+
+@InProceedings{Schroder:1993:FFB,
+  author =       "Peter Schr{\"{o}}der and Pat Hanrahan",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH '93)",
+  title =        "On the Form Factor Between Two Polygons",
+  pages =        "163--164",
+  year =         "1993",
+  keywords =     "Radiosity, Engineering, Closed form solution, form
+                 factor, polygons",
+  annote =       "Form factors are used in radiosity to describe the
+                 fraction of diffusely re ected light leaving one
+                 surface and arriving at another. They are a fundamental
+                 geometric property used for computation. Many special
+                 configurations admit closed form solutions. However,
+                 the important case of the form factor between two
+                 polygons in three space has had no known closed form
+                 solution. We give such a solution for the case of
+                 general (planar, convex or concave, possibly containing
+                 holes) polygons.",
+  who  = "Havran Vlastimil: REN-0058",		 
+}
+
+
+@Article{Kaufman:1993:VG,
+  author =       "Arie Kaufman and Daniel Cohen and Roni Yagel",
+  title =        "Volume Graphics",
+  journal =      "Computer",
+  volume =       "26",
+  number =       "7",
+  pages =        "51--64",
+  month =        jul,
+  year =         "1993",
+  coden =        "CPTRB4",
+  ISSN =         "0018-9162",
+  bibdate =      "Sat Feb 1 16:21:14 MST 1997",
+  abstract =     "Just as 2D raster graphics superseded vector graphics,
+                 volume graphics has the potential to supersede surface
+                 graphics for 3D geometric scene representation,
+                 manipulation, and rendering.",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Dept. of Comput. Sci., State Univ. of New York, Stony
+                 Brook, NY, USA",
+  classification = "723.2; C4260 (Computational geometry); C6130B
+                 (Graphics techniques)",
+  journalabr =   "Computer",
+  keywords =     "3D scene representation; Block operations;
+                 Constructive solid geometry modeling; Discreteness;
+                 Geometric objects; Hierarchical representation; Imaging
+                 techniques; Interactive computer graphics; Internal
+                 structures; Irregular voxel sizes; Memory size;
+                 Processing time; Sampled data sets; Simulated data
+                 sets; Three dimensional computer graphics; Viewpoint
+                 independence; Volume buffer; Volume data sets; Volume
+                 graphics; Volume visualization",
+  thesaurus =    "Computational geometry; Data visualisation; Solid
+                 modelling",
+  who  = "Havran Vlastimil: REN-0059",
+}
+
+@TechReport{Heckbert97shadow,
+  author =       "Paul S. Heckbert and Michael Herf",
+  title =        "Simulating Soft Shadows with Graphics Hardware",
+  institution =  "CS Dept., Carnegie Mellon U.",
+  month =        jan,
+  year =         "1997",
+  note =         "CMU-CS-97-104, http://www.cs.cmu.edu/~ph",
+  keywords =     "penumbra, texture mapping, graphics workstation,
+                 interaction, real-time, SGI Reality Engine",
+ who  = "Havran Vlastimil: REN-0060",
+}
+
+@InProceedings{Novins:1990:EMV,
+  author =       "Kevin L. Novins and Francois X. Sillion and Donald P.
+                 Greenberg",
+  title =        "An Efficient Method for Volume Rendering using
+                 Perspective Projection",
+  pages =        "95--102",
+  booktitle =    "Computer Graphics (San Diego Workshop on Volume
+                 Visualization)",
+  volume =       "24",
+  number =       "5",
+  year =         "1990",
+  month =        nov,
+  conference =   "held in San Diego, California; 10-11 December 1990",
+  keywords =     "volume visualization, volume rendering, scientific
+                 visualization, ray tracing, perspective projection,
+                 depth of field",
+  annote =       "Use of the perspective projection adds important
+                 perceptual cues for image comprehension. However, it
+                 has not been widely used in volume rendering because of
+                 the lack of efficient computational algorithms and
+                 concern over the nonuniform sampling rate imposed by
+                 perspective ray divergence. This paper introduces two
+                 new techniques to help make perspective projection more
+                 feasible in rendering volume data. First, a method is
+                 presented for efficient slice-by-slice processing of
+                 volume data, allowing high resolution data sets by
+                 eliminating typical memory constraints. Second, an
+                 adaptive ``ray splitting'' approach is described which
+                 ensures that the entire volume is sampled within
+                 user-specified limits. Additionally, we present results
+                 using distributed ray tracing to achieve depth of field
+                 effects.",
+ who  = "Havran Vlastimil: REN-0061",
+}
+
+@InProceedings{shirley94cn,
+  author = "P. Shirley",
+  title = "Hybrid Radiosity/Monte Carlo Methods",
+  pages =        "??-??",
+  booktitle =    "SIGGRAPH'94 (Advanced Radiosity Course Notes)",
+  volume =       "28",
+  year =         "1994",
+  month =        jul,
+  who  = "Havran Vlastimil: REN-0062",  
+}
+
+@InProceedings{Kok:1994:SSD,
+      author =       "Arjan J. F. Kok and Frederik Jansen",
+      booktitle =    "Photorealistic Rendering in Computer Graphics
+		     (Proceedings of the Second Eurographics Workshop on
+		     Rendering)",
+      title =        "Source Selection for the Direct Lighting Computation
+		     in Global Illumination",
+      publisher =    "Springer-Verlag",
+      address =      "New York",
+      pages =        "75--82",
+      year =         "1994",
+      keywords =     "adaptive subdivision, ray tracing",
+      bibsource =    "sig-11-1994",
+      who  	= "Havran Vlastimil: REN-0063",
+}
+
+@InProceedings{Wiley97,
+  author= "Wiley C and Campbell A and Szygenda S and Fussel D and Hudson F",
+  title = "Multiresolution BSP Trees",
+  booktitle = "Graphics Interface 97",
+  year  = "1997",
+  pages = "??-??",
+  note  = "University of Texas",
+  who  	= "Havran Vlastimil: REN-0064",
+}
+
+@InProceedings{shirley94pg,
+  author = "P. Shirley",
+  title = "Practitioners' Assessment of Light Reflection Models",
+  pages =        "??-??",
+  booktitle =    "Pacific Graphics'97",
+  volume =       "??",
+  year =         "1997",
+  month =        oct,
+  who  = "Havran Vlastimil: REN-0065",  
+}
+
+@inproceedings{sbert:cgi:98,
+  author = "M. Sbert",
+  title = "Random Walk Radiosity with generalized absorption probabilities",
+  booktitle = "Proceedings of Computer Graphics International '98 (CGI'98)",
+  year = "1998",
+  month = jun,
+  pages = "658--665",
+  address = "Hannover, Germany",
+  publisher = "IEEE, NY",
+  who = "Havran Vlastimil: REN-0066",
+}
+
+@inproceedings{neumann:cgi:98,
+  author = "L. Neumann",
+  title = "Automatic Exposure in Computer Graphics Based on the Minimum
+           Information Loss Principle",
+  booktitle = "Proceedings of Computer Graphics International '98 (CGI'98)",
+  year = "1998",
+  month = jun,
+  pages = "666-677",
+  address = "Hannover, Germany",
+  publisher = "IEEE, NY",
+  who = "Havran Vlastimil: REN-0067",
+}
+
+@inproceedings{SS98,
+        author = "Cyril Soler and Fran\c{c}ois Sillion",
+        title = "Fast Calculation of Soft Shadow Textures Using Convolution", 
+        booktitle = "Computer Graphics (Proceedings of SIGGRAPH~'98)",
+        year = 1998,
+        organization = "ACM SIGGRAPH",
+        month = jul,
+  who = "Havran Vlastimil: REN-0068",
+}
+%        pages = "??-??",
+
+@inproceedings{prikryl:eg:1998,
+  author = "J. Prikryl and W. Purgathofer",
+  title = "State of the Art in Perceptually Driven Radiosity",
+  booktitle = "STAR in {\em Eurographics~'98}",
+  pages = "??-??",
+  organization = "Eurographics Association",
+  year =         "1998",
+  month =        sep,
+  note =         "held in Lisbon, Protugal, 02-04 September 1998",
+  who = "Havran Vlastimil: REN-0069",
+}
+
+@InProceedings{Garrett:1996:RTI,
+  title =        "Real-Time Incremental Visualization of Dynamic
+                 Ultrasound Volumes Using Parallel {BSP} Trees",
+  author =       "William F. Garrett and Henry Fuchs and Mary C. Whitton
+                 and Andrei State",
+  booktitle =    "IEEE Visualization '96",
+  organization = "IEEE",
+  year =         "1996",
+  month =        oct,
+  note =         "ISBN 0-89791-864-9",
+  who = "Havran Vlastimil: REN-0070",
+}
+
+@InProceedings{Mueller:1996:FPV,
+  title =        "Fast Perspective Volume Rendering with Splatting by
+                 Utilizing a Ray-Driven Approach",
+  author =       "Klaus Mueller and Roni Yagel",
+  booktitle =    "IEEE Visualization '96",
+  organization = "IEEE",
+  year =         "1996",
+  month =        oct,
+  note =         "ISBN 0-89791-864-9",
+  who = "Havran Vlastimil: REN-0071",
+}
+
+@InProceedings{Levoy:1996:LFR,
+  author =       "Marc Levoy and Pat Hanrahan",
+  title =        "Light Field Rendering",
+  editor =       "Holly Rushmeier",
+  series =       "Annual Conference Series",
+  pages =        "31--42",
+  booktitle =    "SIGGRAPH 96 Conference Proceedings",
+  year =         "1996",
+  organization = "ACM SIGGRAPH",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  note =         "held in New Orleans, Louisiana, 04-09 August 1996",
+  abstract =     "A number of techniques have been proposed for flying
+                 through scenes by redisplaying previously rendered or
+                 digitized views. Techniques have also been proposed for
+                 interpolating between views by warping input images,
+                 using depth information or correspondences between
+                 multiple images. In this paper, we describe a simple
+                 and robust method for generating new views from
+                 arbitrary camera positions without depth information or
+                 feature matching, simply by combining and resampling
+                 the available images. The key to this technique lies in
+                 interpreting the input images as 2D slices of a 4D
+                 function - the light field. This function completely
+                 characterizes the flow of light through unobstructed
+                 space in a static scene with fixed illumination. We
+                 describe a sampled representation for light fields that
+                 allows for both efficient creation and display of
+                 inward and outward looking views. We have created light
+                 fields from large arrays of both rendered and digitized
+                 images. The latter are acquired using a video camera
+                 mounted on a computer-controlled gantry. Once a light
+                 field has been created, new views may be constructed in
+                 real time by extracting slices in appropriate
+                 directions. Since the success of the method depends on
+                 having a high sample rate, we describe a compression
+                 system that is able to compress the light fields we
+                 have generated by more than a factor of 100:1 with very
+                 little loss of fidelity. We also address the issues of
+                 antialiasing during creation, and resampling during
+                 slice extraction.",
+  who = "Havran Vlastimil: REN-0072",
+}
+
+@InProceedings{Wilhelms:1996:HPD,
+  title =        "Hierarchical and Parallelizable Direct Volume
+                 Rendering for Irregular and Multiple Grids",
+  author =       "Jane P. Wilhelms and Allen {Van Gelder} and Paul
+                  Tarantino and Jonathan Gibbs",
+  booktitle =    "IEEE Visualization '96",
+  organization = "IEEE",
+  year =         "1996",
+  month =        oct,
+  note =         "ISBN 0-89791-864-9",
+  who = "Havran Vlastimil: REN-0073",
+}
+
+@InProceedings{Paquette:1998:HVD,
+  author =       "Eric Paquette and Pierre Poulin and George Drettakis",
+  title =        "A Light Hierarchy for Fast Rendering of Scenes with 
+                  Many Lights",
+  editor =       "TBD...",
+  pages =        "TBD...",
+  booktitle =    "Computer Graphics Forum (EuroGraphics '98 Conference 
+                  Proceedings",
+  year =         "1998",
+  organization = "EuroGraphics",
+  month =        sep,
+  note =         "held in Lisbon, Protugal, 02-04 September 1998",
+  who = "Havran Vlastimil: REN-0074",
+}
+
+@Article{tvcg-1997-12,
+  author =       "Claudio T. Silva and Joseph S. B. Mitchell",
+  email =        "csilva@ams.sunysb.edu and jsbm@ams.sunysb.edu",
+  title =        "The Lazy Sweep Ray Casting Algorithm for Rendering
+                 Irregular Grids",
+  journal =      "IEEE Transaction on Visualization and Computer
+                 Graphics",
+  volume =       "3",
+  number =       "2",
+  month =        apr,
+  year =         "1997",
+  pages =        "142--157",
+  abstract =     "Lazy Sweep Ray Casting is a fast algorithm for
+                 rendering general irregular grids. It is based on the
+                 sweep-plane paradigm, and it is able to accelerate ray
+                 casting for rendering irregular grids, including
+                 disconnected and nonconvex (even with holes)
+                 unstructured irregular grids with a rendering cost that
+                 decreases as the ``disconnectedness'' decreases. The
+                 algorithm is carefully tailored to exploit spatial
+                 coherence even if the image resolution differs
+                 substantially from the object space resolution. Lazy
+                 Sweep Ray Casting has several desirable properties,
+                 including its generality, (depth-sorting) accuracy, low
+                 memory consumption, speed, simplicity of
+                 implementation, and portability (e.g., no hardware
+                 dependencies). We establish the practicality of our
+                 method through experimental results based on our
+                 implementation, which is shown to be substantially
+                 faster (by up to two orders of magnitude) than other
+                 algorithms implemented in software. We also provide
+                 theoretical results, both lower and upper bounds, on
+                 the complexity of ray casting of irregular grids.",
+  keywords =     "volumetric data, irregular grids, volume rendering,
+                 sweep algorithms, ray tracing, computational geometry,
+                 scientific visualization",
+  tvcg-abstract-url = "http://www.computer.org/pubs/tvcg/1997/v0142abs.htm",
+  who = "Havran Vlastimil: REN-0075",
+}
+
+@InProceedings{EVL-1997-33,
+  author =       "W. Heidrich and Ph. Slusallek and H.-P. Seidel",
+  editor =       "V. Klassen M. Mantei",
+  title =        "An Image-Based Model for Realistic Lens Systems in
+                 Interactive Computer Graphics",
+  booktitle =    "Proceedings of Graphics Interface '97",
+  year =         "1997",
+  note =         "accepted for publication",
+  abstract =     "Many applications, such as realistic rendering,
+                 virtual and augmented reality, and virtual studios,
+                 require an accurate simulation of real lens and camera
+                 systems at interactive rates, including depth of field
+                 and geometric aberrations, in particular distortions.
+                 Unfortunately, camera models used in Computer Graphics
+                 are either too simple to describe these effects or too
+                 expensive to simulate for interactive use. In this
+                 paper, we introduce an image-based lens model that is
+                 powerful enough to simulate sophisticated properties of
+                 real lens systems, yet fast enough for interactive
+                 graphics. By exploiting coherence, common graphics
+                 hardware can be used to yield high frame rates.",
+  keywords =     "Lens Systems, Image-Based Rendering, Hardware
+                 Acceleration, Interactive Computer Graphics",
+  postscript-url = "ftp://faui90.informatik.uni-erlangen.de/pub/Publications/1997/Publ.1997.4.ps.gz",
+  evlib-url =    "http://infovis.zib.de:8000/Dienst/UI/2.0/Describe/evl.computergraphics%2FEVL-1997-33",
+  evlib-revision = "1st",
+  who = "Havran Vlastimil: REN-0076",
+}
+
+@InProceedings{schilling91a,
+  author =       "Andreas Schilling",
+  title =        "A new simple and efficient antialiasing with subpixel
+                 masks",
+  pages =        "133--141",
+  booktitle =      "Computer Graphics (SIGGRAPH '91 Proceedings)",
+  volume =       "25",
+  number =       "4",
+  year =         "1991",
+  month =        jul,
+  editor =       "Thomas W. Sederberg",
+  conference =   "held in Las Vegas, Nevada; 28 July - 2 August 1991",
+  keywords =     "antialiasing, exact area subpixel algorithm",
+  who = "Havran Vlastimil: REN-0077",  
+}
+
+
+@InProceedings{Ward:1994:RLS,
+  author =       "Gregory J. Ward",
+  editor =       "Andrew Glassner",
+  booktitle =    "Proceedings of SIGGRAPH '94 (Orlando, Florida, July
+                 24--29, 1994)",
+  title =        "The {RADIANCE} Lighting Simulation and Rendering
+                 System",
+  organization = "ACM SIGGRAPH",
+  publisher =    "ACM Press",
+  pages =        "459--472",
+  month =        jul,
+  year =         "1994",
+  note =         "ISBN 0-89791-667-0",
+  series =       "Computer Graphics Proceedings, Annual Conference
+                 Series",
+  who = "Havran Vlastimil: REN-0078",
+}
+
+
+
+@InProceedings{Chui96-LVARC,
+  author =       "Ken Chui and Kurt Zimmerman and Peter Shirley",
+  year =         "1996",
+  title =        "The {Light} {Volume}: {An} {Aid} to {Rendering}
+                 {Complex} {Environments}",
+  booktitle =    "Rendering Techniques '96 (Proceedings of the Seventh
+                 Eurographics Workshop on Rendering)",
+  pages =        "1--10",
+  publisher =    "Springer-Verlag/Wien",
+  address =      "New York, NY",
+  comments =     "ISBN 3-211-82883-4",
+  who = "Havran Vlastimil: REN-0080",
+}
+
+@Article{Shirley:1992:TCM,
+  author =       "Peter Shirley",
+  title =        "Time complexity of {Monte Carlo} radiosity",
+  journal =      "Computers and Graphics",
+  volume =       "16",
+  number =       "1",
+  pages =        "117--120",
+  year =         "1992",
+  coden =        "COGRD2",
+  ISSN =         "0097-8493",
+  bibdate =      "Wed Feb 5 07:22:58 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Indiana Univ",
+  affiliationaddress = "Bloomington, IN, USA",
+  classification = "723; 922",
+  journalabr =   "Comput Graphics (Pergamon)",
+  keywords =     "Computer Metatheory--Computational Complexity;
+                 Mathematical Statistics; Monte Carlo Methods; Time
+                 Complexity",
+  who = "Havran Vlastimil: REN-0081",
+}
+
+
+
+@Article{Nishita85,
+  author =       "Tomoyuki Nishita and Eihachiro Nakamae",
+  title =        "Continuous Tone Representation of 3-{D} Objects Taking
+                 Account of Shadows and Interreflection",
+  journal =      "Computer Graphics (SIGGRAPH '85 Proceedings)",
+  volume =       "19",
+  number =       "3",
+  month =        jul,
+  year =         "1985",
+  pages =        "23--30",
+  keywords =     "shading, penumbra, radiosity",
+  who = "Havran Vlastimil: REN-0082",
+}
+
+
+@Article{Christensen:1997:CGG,
+  author =       "Per H. Christensen and Dani Lischinski and Eric J.
+                 Stollnitz and David H. Salesin",
+  title =        "Clustering for Glossy Global Illumination",
+  journal =      "ACM Transactions on Graphics",
+  year =         "1997",
+  volume =       "16",
+  number =       "1",
+  month =        jan,
+  pages =        "3--33",
+  note =         "ISSN 0730-0301",
+  keywords =     "clustering, error bounds, global illumination, glossy
+                 reflectors, hierarchy, importance, radiance,
+                 rendering",
+  annote =       "We present a new clustering algorithm for global
+                 illumination in complex environments. The new algorithm
+                 extends previous work on clustering for radiosity to
+                 allow for nondiffuse (glossy) reflectors. We represent
+                 clusters as points with directional distributions of
+                 outgoing and incoming radiance and importance, and we
+                 derive an error bound for transfers between these
+                 clusters. The algorithm groups input surfaces into a
+                 hierarchy of clusters, and then permits clusters to
+                 interact only if the error bound is below an acceptable
+                 tolerance. We show that the algorithm is asymptotically
+                 more efficient than previous clustering algorithms even
+                 when restricted to ideally diffuse environments.
+                 Finally, we demonstrate the performance of our method
+                 on two complex glossy environments.",
+    who = "Havran Vlastimil: REN-0083",
+}
+
+@InCollection{Zimmerman95twopass,
+  author =       "Kurt Zimmerman and Peter Shirley",
+  title =        "A Two-Pass Realistic Image Synthesis Method for
+                 Complex Scenes",
+  booktitle =    "Rendering Techniques '95 (Proceedings of the Sixth
+                 Eurographics Workshop on Rendering)",
+  publisher =    "Springer-Verlag",
+  address =      "NY",
+  pages =        "284--295",
+  year =         "1995",
+  note =         "Also ftp://ftp.cs.indiana.edu/pub/techreports/TR434.ps.Z",
+  keywords =     "shadow",
+  who = "Havran Vlastimil: REN-0084",
+}
+
+@Article{Asensio:1992:HRC,
+  author =       "Frederic Asensio",
+  title =        "A Hierarchical Ray-Casting Algorithm for Radiosity
+                 Shadows",
+  year =         "1992",
+  month =        may,
+  journal =      "Third Eurographics Workshop on Rendering",
+  pages =        "179--188",
+  address =      "Bristol, UK",
+  keywords =     "radiosity",
+  who = "Havran Vlastimil: REN-0085",
+}
+
+
+@InProceedings{Gu:1997:PGT,
+  author =       "Xianfeng Gu and Steven J. Gortier and Michael F.
+                 Cohen",
+  title =        "Polyhedral Geometry and the Two-Plane
+                 Parameterization",
+  booktitle =    "Eurographics Rendering Workshop 1997",
+  editor =       "Julie Dorsey and Philipp Slusallek",
+  year =         "1997",
+  organization = "Eurographics",
+  publisher =    "Springer Wein",
+  address =      "New York City, NY",
+  month =        jun,
+  pages =        "1--12",
+  note =         "ISBN 3-211-83001-4",
+  annote =       "Recently the light-field and lumigraph systems have
+                 been proposed as general methods of representing the
+                 visual information present in a scene. These methods
+                 represent this information as a 4D function of light
+                 over the domain of directed lines. These systems use
+                 the intersection points of the lines on two planes to
+                 parameterize the lines in space. This paper explores
+                 the structure of the two-plane parameterization in
+                 detail. In particular we analyze the association
+                 between the geometry of the scene and subsets of the 4D
+                 data. The answers to these questions are essential to
+                 understanding the relationship between a lumigraph, and
+                 the geometry that it attempts to represent. This
+                 knowledge is potentially important for a variety of
+                 applications such as extracting shape from lumigraph
+                 data, and lumigraph compression.",
+  who = "Havran Vlastimil: REN-0086",
+}
+
+@Article{Schaufler:1996:TDI,
+  author =       "Germot Schaufler and Wolfgang Sturzlinger",
+  title =        "A Three-Dimensional Image Cache for Virtual Reality",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "15",
+  number =       "3",
+  pages =        "C227--C235, C471--C472",
+  month =        sep,
+  year =         "1996",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Tue Mar 17 15:44:38 MST 1998",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Johannes Kepler Universit{\"a}t Linz",
+  affiliationaddress = "Linz, Austria",
+  affiliationaddress = "Austria",
+  classification = "722.1; 722.4; 723.1; 723.2; 723.5; 921.5; C6120
+                 (File organisation); C6130B (Graphics techniques)",
+  conference =   "Proceedings of the 1996 17th Annual Conference and
+                 Exhibition of the European Association for Computer
+                 Graphics, EUROGRAPHICS'96",
+  conflocation = "Poitiers, France; 26-30 Aug. 1996",
+  conftitle =    "European Association for Computer Graphics 17th Annual
+                 Conference and Exhibition. EUROGRAPHICS '96",
+  corpsource =   "Johannes Kepler Univ., Linz, Austria",
+  journalabr =   "Comput Graphics Forum",
+  keywords =     "Algorithms; Buffer storage; Computational geometry;
+                 Computer hardware; Computer software; Image processing;
+                 Object hierarchies; Optimization; Real time systems;
+                 Three dimensional computer graphics; Three dimensional
+                 image cache; Virtual reality",
+  keywords =     "Algorithms; Buffer storage; cache storage; coherence;
+                 complex virtual; Computational geometry; computer
+                 displays; Computer hardware; Computer software; detail;
+                 environment display; frame rate; hardware; hierarchical
+                 scene subdivision; Image processing; impostors; large
+                 virtual environment display; levels; Object
+                 hierarchies; optimisation; Optimization; Real time
+                 systems; real-time; real-time rendering; rendering;
+                 rendering (computer graphics); rendering load; smooth
+                 frame sequence; software accelerated; software
+                 optimization; systems; Three dimensional computer
+                 graphics; three dimensional image cache; Three
+                 dimensional image cache; three dimensional image cache;
+                 virtual reality; Virtual reality; virtual reality",
+  meetingaddress = "Poitiers, Fr",
+  meetingdate =  "Aug 26--30 1996",
+  meetingdate2 = "08/26--30/96",
+  sponsor =      "CNRS; ERCIM; BARCO; EDF; SUN; et al",
+  sponsororg =   "CNRS; BARCO; Electr. France; et al",
+  treatment =    "P Practical",
+  who = "Havran Vlastimil: REN-0087",
+}
+
+@Article{Sbert:1993:IGB,
+  author =       "M. Sbert",
+  title =        "An integral geometry based method for fast form-factor
+                 computation",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "12",
+  number =       "3",
+  pages =        "C409--C420",
+  month =        "????",
+  year =         "1993",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  classification = "C1140G (Monte Carlo methods); C4260 (Computational
+                 geometry); C6130B (Graphics techniques)",
+  conflocation = "Barcelona, Spain; 6-10 Sept. 1993",
+  conftitle =    "European Association for Computer Graphics 14th Annual
+                 Conference and Exhibition. EUROGRAPHICS '93",
+  corpsource =   "Dept. d'Inf. i Matematica Aplicada, Univ. Politecnica
+                 de Catalunya, Barcelona, Spain",
+  keywords =     "complexity; Complexity; complexity; computational
+                 geometry; computer graphics; form-factor computation;
+                 Form-factor computation; integral geometry based
+                 method; Integral geometry based method; integration;
+                 local; Local integration; luminance; Luminance;
+                 methods; Monte Carlo; Monte Carlo techniques; ray
+                 tracing; rendering algorithms; Rendering algorithms",
+  thesaurus =    "Computational geometry; Computer graphics; Monte Carlo
+                 methods; Ray tracing",
+  treatment =    "P Practical; T Theoretical or Mathematical",
+  who = "Havran Vlastimil: REN-0088",
+}
+
+@TechReport{Shade:1996:   ,
+  author =       "Jonathan Shade and Dani Lischinski and David Salesin
+                 and Tony {DeRose} and John Snyder",
+  title =        "Hierarchical Image Caching for Accelerated
+                 Walkthroughs of Complex Environments",
+  institution = "University of Washington",
+  pages =        "1--22",
+  year =         "1996",
+  month =        jan,
+  who = "Havran Vlastimil: REN-0089",
+}
+
+@InProceedings{Sbert95-GMCPS,
+  author =       "Mateu Sbert and Frederic Perez and Xavier Pueyo",
+  editor =       "P. M. Hanrahan and W. Purgathofer",
+  year =         "1995",
+  title =        "Global {Monte} {Carlo}: {A} {Progressive} {Solution}",
+  booktitle =    "Rendering Techniques '95 (Proceedings of the Sixth
+                 Eurographics Workshop on Rendering)",
+  pages =        "231--239",
+  publisher =    "Springer-Verlag",
+  address =      "New York, NY",
+  comments =     "ISBN 3-211-82733-1",
+  who = "Havran Vlastimil: REN-0090",
+}
+
+@TechReport{Szirmay-Kalos98,
+  author =       "Laszlo Szirmay-Kalos and Werner Purgathofer",
+  title =        "Global Ray-bundle Tracing with Hardware Acceleration",
+  institution = " Technical University of Budapest",
+  number = "TR-186-2-98-18",
+  month =        jun,
+  year =         "1998",
+  keywords =     "rendering equation, global radiance, Monte-Carlo and
+                  quasi Monte Carlo integration, Importance Sampling,
+                  Metropolis Method, z-buffer",
+  who = "Havran Vlastimil: REN-0091",
+}
+
+@InProceedings{Braun:1995:ADS,
+  author =       "M. Braun and A. Formella",
+  title =        "Anigraph - {A} Data Structure for Computer Animation",
+  booktitle =    "Computer Animation '95",
+  year =         "1995",
+  month =        apr,
+  who = "Havran Vlastimil: REN-0092",
+}
+
+@InProceedings{EVL-1997-108,
+  author =       "Jarkko Oikarinen",
+  title =        "Using 3-Dimensional Seed Filling in View Space to
+                 Accelerate Volume Rendering",
+  booktitle =    "IEEE Visualization '97",
+  organization = "IEEE",
+  month =        oct,
+  year =         "1997",
+  language =     "en",
+  postscript-url = "http://rieska.oulu.fi/~jto/papers/ieeevis97.ps",
+  postscript-url-md5 = "f2b002cd5c384fffe63cac6826e09ed3",
+  evlib-url =    "http://visinfo.zib.de:80/Dienst/UI/2.0/Describe/evl.volumerendering%2FEVL-1997-108",
+  evlib-revision = "1st",
+  who = "Havran Vlastimil: REN-0093",
+}
+
+InProceedings{Bouatouch:1995:IWT,
+  author =       "Kadi Bouatouch and Sumant Pattanaik",
+  title =        "Interactive Walk-Through Using Particle Tracing",
+  booktitle =    "Computer Graphics International '95",
+  year =         "1995",
+  month =        jun,
+  who = "Havran Vlastimil: REN-0094",
+}
+
+@Article{Pattanaik:1993:PEI,
+  author =       "S. N. Pattanaik and S. P. Mudur",
+  title =        "The potential equation and importance in illumination
+                 computations",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "12",
+  number =       "2",
+  pages =        "131--136",
+  month =        jun,
+  year =         "1993",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  classification = "A0230 (Function theory, analysis); A4210
+                 (Propagation and transmission in homogeneous media);
+                 C4180 (Integral equations); C6130B (Graphics
+                 techniques)",
+  corpsource =   "Graphics and CAD Div., Nat. Centre for Software
+                 Technol., Bombay, India",
+  keywords =     "adjoint; Adjoint linear equations; adjoint linear
+                 equations; Adjoint radiosity equation; brightness;
+                 computer graphics; discrete; Discrete formulations;
+                 equation; formulations; Global illumination; global
+                 illumination; illumination computations; Illumination
+                 computations; illumination computations;
+                 importance-driven radiosity algorithm;
+                 Importance-driven radiosity algorithm;
+                 importance-driven radiosity algorithm; integral
+                 equations; Integral equations; lighting; Linear
+                 operators; linear operators; luminance; Luminance
+                 equation; patch; Patch; potential equation; Potential
+                 equation; potential equation; radiosity equation;
+                 Surface potential; surface potential; transposes;
+                 Transposes; transposes",
+  thesaurus =    "Brightness; Computer graphics; Integral equations;
+                 Lighting; Surface potential",
+  treatment =    "T Theoretical or Mathematical",
+  who = "Havran Vlastimil: REN-0095",
+}
+
+@InProceedings{Fuchs:1983:NRT,
+  author =       "H. Fuchs and G. D. Abram and E. D. Grant",
+  title =        "Near real-time shaded display of rigid objects",
+  pages =        "65--72",
+  journal =      "Computer Graphics (SIGGRAPH '83 Proceedings)",
+  year =         "1983",
+  month =        jul,
+  conference =   "held in Detroit, Michigan; 25--29 July 1983",
+  keywords =     "I35 object data base, I37 shading, I37 visible surface
+                 algorithm",
+  who = "Havran Vlastimil: REN-0096",
+}
+
+@InProceedings{Atherton:1983:SHS,
+  author =       "Peter R. Atherton",
+  title =        "A Scanline Hidden Surface Removal Procedure for
+                 Constructive Solid Geometry",
+  pages =        "73--82",
+  booktitle =      "Computer Graphics (SIGGRAPH '83 Proceedings)",
+  volume =       "17",
+  number =       "3",
+  year =         "1983",
+  month =        jul,
+  conference =   "held in Detroit, Michigan; 25--29 July 1983",
+  keywords =     "CSG, I35 constructive solid geometry, I37 hidden
+                 surface removal",
+  who = "Havran Vlastimil: REN-0097",
+}
+
+@Article{tvcg-1996-25,
+  author =       "George Drettakis and Eugene L. Fiume",
+  email =        "George.Drettakis@imag.fr",
+  title =        "{Structured Penumbral Irradiance Computation}",
+  journal =      "IEEE Transactions on Visualization and Computer
+                 Graphics",
+  volume =       "2",
+  number =       "4",
+  month =        dec,
+  year =         "1996",
+  pages =        "299--312",
+  abstract =     "A definitive understanding of irradiance behavior in
+                 penumbral regions has been hard to come by, mainly due
+                 to the computational expense of determining the visible
+                 parts of an area light source. Consequently, sampling
+                 strategies have been mostly ad hoc, and evaluation of
+                 the resulting approximations has been difficult. In
+                 this paper, the structure of penumbral irradiance is
+                 investigated empirically and numerically. This study
+                 has been made feasible by the use of the discontinuity
+                 mesh and the backprojection, an efficient data
+                 structure representing visibility in regions of partial
+                 occlusion. Regions of penumbrae in which irradiance
+                 varies nonmonotonically are characterized empirically,
+                 and numerical tests are performed to determine the
+                 frequency of their occurrence. This study inspired the
+                 development of two algorithms for the construction of
+                 interpolating approximations to irradiance: One
+                 algorithm reduces the number of edges in the mesh
+                 defining the interpolant domain, and the other
+                 algorithm chooses among linear, quadratic, and mixed
+                 interpolants based on irradiance monotonicity. Results
+                 from numerical tests and images are presented that
+                 demonstrate good performance of the new algorithms for
+                 various realistic test configurations.",
+  keywords =     "Rendering, primary and global illumination, sampling,
+                 interpolation, structure, penumbra, experimental study,
+                 irradiance, radiosity, discontinuity meshing,
+                 backprojection, mesh simplification, interpolant degree
+                 reduction",
+  tvcg-abstract-url = "http://www.computer.org/tvcg/tg1996/v0299abs.htm",
+  who = "Havran Vlastimil: REN-0098",
+}
+
+@Article{tvcg-1996-24,
+  author =       "Jeffry Nimeroff and Julie Dorsey and Holly Rushmeier",
+  email =        "jnimerof@graphics.cis.upenn.edu and
+                 dorsey@graphics.lcs.mit.edu and holly@watson.ibm.com",
+  title =        "{Implementation and Analysis of an Image-Based Global
+                 Illumination Framework for Animated Environments}",
+  journal =      "IEEE Transactions on Visualization and Computer
+                 Graphics",
+  volume =       "2",
+  number =       "4",
+  month =        dec,
+  year =         "1996",
+  pages =        "283--298",
+  abstract =     "We describe a new framework for efficiently computing
+                 and storing global illumination effects for complex,
+                 animated environments. The new framework allows the
+                 rapid generation of sequences representing any
+                 arbitrary path in a ``view space'' within an
+                 environment in which both the viewer and objects move.
+                 The global illumination is stored as time sequences of
+                 range-images at base locations that span the view
+                 space. We present algorithms for determining locations
+                 for these base images, and the time steps required to
+                 adequately capture the effects of object motion. We
+                 also present algorithms for computing the global
+                 illumination in the base images that exploit spatial
+                 and temporal coherence by considering direct and
+                 indirect illumination separately. We discuss an initial
+                 implementation using the new framework. Results and
+                 analysis of our implementation demonstrate the
+                 effectiveness of the individual phases of the approach;
+                 we conclude with an application of the complete
+                 framework to a complex environment that includes object
+                 motion.",
+  keywords =     "Animation, global illumination, image-based rendering,
+                 radiosity, ray tracing, walk-throughs",
+  tvcg-abstract-url = "http://www.computer.org/tvcg/tg1996/v0283abs.htm",
+  who = "Havran Vlastimil: REN-0099",
+}
+
+@Article{Danskin:1992:FAV,
+  author =       "John Danskin and Pat Hanrahan",
+  title =        "Fast Algorithms for Volume Ray Tracing",
+  year =         "1992",
+  journal =      "1992 Workshop on Volume Visualization",
+  institution =  "ACM",
+  pages =        "91--98",
+  annote =       "We examine various simple algorithms that exploit
+                 homogeneity and accumulated opacity for tracing rays
+                 through shaded volumes. Most of these meth- ods have
+                 error criteria which allow them to trade quality for
+                 speed. The time vs. quality tradeoff for these adaptive
+                 methods is compared to fixed step multiresolution
+                 methods. These methods are also useful for general
+                 light transport in volumes.",
+  who = "Havran Vlastimil: REN-0100",
+}
+
+@InProceedings{Aupperle:1993:HIA,
+  author =       "L. Aupperle and Pat Hanrahan",
+  booktitle =    "Computer Graphics Proceedings, Annual Conference
+                 Series, 1993",
+  title =        "A Hierarchical Illumination Algorithm for Surfaces
+                 with Glossy Reflection",
+  pages =        "155--162",
+  year =         "1993",
+  keywords =     "adaptive meshing, global illumination, radiosity, ray
+                 tracing",
+  annote =       "We develop a radiance formulation for discrete three
+                 point transport, and a new measure and description of
+                 reflectance:area reflectance. This formulation and
+                 associated reflectance allow an estimate of error in
+                 the computation of radiance across triples of surface
+                 elements, and lead directly to a hierarchical
+                 refinement algorithm for global illumination. We have
+                 implemented and analyzed this algorithm over surfaces
+                 exhibiting glossy specular and diffuse reflection.
+                 Theoretical growth in light transport computation is
+                 shown to be O ( n + k 3 ) for sufficient refinement,
+                 where n is the number of elements at the finest level
+                 of subdivision over an environment consisting of k
+                 input polygonal patches Ñ this growth is exhibited in
+                 experimental trials. Naive application of three point
+                 transport would require computation over O ( n 3 )
+                 element-triple interactions.",
+  keywords =     "adaptive meshing, global illumination, radiosity, ray
+                 tracing",
+  who = "Havran Vlastimil: REN-0101",
+}
+
+@Article{Cohen-Or:1998:TDD,
+  author =       "Daniel Cohen-Or and Amira Solomovic and David Levin",
+  title =        "Three-dimensional distance field metamorphosis",
+  journal =      "ACM Transactions on Graphics",
+  volume =       "17",
+  number =       "2",
+  pages =        "116--141",
+  month =        apr,
+  year =         "1998",
+  coden =        "ATGRDF",
+  ISSN =         "0730-0301",
+  bibdate =      "Sat May 16 07:25:59 MDT 1998",
+  url =          "http://www.acm.org:80/pubs/citations/journals/tog/1998-17-2/p116-cohen-or/",
+  abstract =     "Given two or more objects of general topology,
+                 intermediate objects are constructed by a distance
+                 field metamorphosis. In the presented method the
+                 interpolation of the distance field is guided by a warp
+                 function controlled by a set of corresponding anchor
+                 points. Some rules for defining a smooth
+                 least-distorting warp function are given. To reduce the
+                 distortion of the intermediate shapes, the warp
+                 function is decomposed into a rigid rotational part and
+                 an elastic part. The distance field interpolation
+                 method is modified so that the interpolation is done in
+                 correlation with the warp function. The method provides
+                 the animator with a technique that can be used to
+                 create a set of models forming a smooth transition
+                 between pairs of a given sequence of keyframe models.
+                 The advantage of the new approach is that it is capable
+                 of morphing between objects having a different
+                 topological genus where no correspondence between the
+                 geometric primitives of the models needs to be
+                 established. The desired correspondence is defined by
+                 an animator in terms of a relatively small number of
+                 anchor points",
+  acknowledgement = ack-nhfb,
+  keywords =     "algorithms",
+  subject =      "{\bf I.3.7} Computing Methodologies, COMPUTER
+                 GRAPHICS, Three-Dimensional Graphics and Realism,
+                 Animation. {\bf I.3.5} Computing Methodologies,
+                 COMPUTER GRAPHICS, Computational Geometry and Object
+                 Modeling, Curve, surface, solid, and object
+                 representations. {\bf I.3.6} Computing Methodologies,
+                 COMPUTER GRAPHICS, Methodology and Techniques,
+                 Interaction techniques.",
+  who = "Havran Vlastimil: REN-0102",
+}
+
+
+@INPROCEEDINGS{IMMD9:39:1997,
+  author = {Ph. Slusallek},
+  title = {Photo-Realistic Rendering -- Recent Trends and Developments},
+  booktitle = {EUROGRAPHICS '97 State-of-the-Art-Report},
+  year = {1997},
+  organization = {Eurographics Association},
+  who = "Havran Vlastimil: REN-0103",
+}
+
+@TECHREPORT{IMMD9:TR5:1998,
+  author = {C. Teitzel AND M. Hopf AND R. Grosso AND T. Ertl},
+  title = {Volume Ray Casting on Sparse Grids},
+  number = {5},
+  year = {1998},
+  institution = {Universität Erlangen-Nürnberg},
+  who = "Havran Vlastimil: REN-0104",
+}
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/rtmame.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/rtmame.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/rtmame.bib	(revision 243)
@@ -0,0 +1,3961 @@
+@TechReport{Bala98rep,
+  author = "K. Bala and J. Dorsey and S. Teller",
+  title = "Bounded-Error Interactive Ray Tracing",
+  pages = "1--17",
+  institution = "MIT",
+  year = 1998,
+  month = mar,
+  number = "MIT LCS TR-748",
+  who = "Havran Vlastimil: RT-0183",
+}
+
+@InProceedings{GGW-1998-cgf,
+  pages =        "C--29--C--54",
+  year =         "1998",
+  title =        "Adaptive Supersampling in Object Space Using Pyramidal Rays",
+  author =       "J. Genetti and D. Gordon and G. Williams",
+  url =          "http:// www.sdsc.edu/~genetti/Papers/CGF98/ASOS.html",
+  language =     "en",
+  booktitle =    "Computer Graphics Forum",
+  who = "Havran Vlastimil: RT-0182",
+}
+
+@InProceedings{EVL-1995-34,
+  pages =        "C--311--C--324",
+  year =         "1995",
+  title =        "Using Procedural {RenderMan} Shaders for Global
+                 Illumination",
+  author =       "Philipp Slusallek and Thomas Pflaum and Hans-Peter
+                 Seidel",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-1995-34",
+  language =     "en",
+  abstract =     "Global illumination techniques like radiosity or
+                 Monte-Carlo ray-tracing are becoming standard features
+                 of rendering systems. However, there is currently no
+                 accepted interface format which supports an appropriate
+                 physically-based scene description. In this paper we
+                 present extensions to the well-known RenderMan
+                 interface, which allow for a physically based scene
+                 description and support advanced global illumination
+                 techniques. Special emphasis has been laid on the
+                 support for procedural descriptions of reflection and
+                 emission by RenderMan surface shaders. So far, they
+                 could not be used with most global illumination
+                 algorithms. The extensions have been implemented in a
+                 physically-based rendering system and are illustrated
+                 with examples.",
+  editor =       "F. Post and M. G{\"{o}}bel",
+  booktitle =    "Computer Graphics Forum (Proceedings EUROGRAPHICS
+                 '95)",
+  who = "Havran Vlastimil: RT-0181",		 
+}
+
+@Article{Nakamaru97,
+  author =       "Koji Nakamaru and Yoshio Ohno",
+  title =        "{Breadth-First Ray Tracing Utilizing Uniform Spatial
+                 Subdivision}",
+  journal =      "IEEE Transactions on Visualization and Computer
+                 Graphics",
+  volume =       "3",
+  number =       "4",
+  month =        oct,
+  year =         "1997",
+  pages =        "316--328",
+  abstract =     "Breadth-first ray tracing is based on the idea of
+                 exchanging the roles of rays and objects. For scenes
+                 with a large number of objects, it may be profitable to
+                 form a set of rays and compare each object in turn
+                 against this set. By doing so, thrashing, due to disk
+                 access, can be minimized. In this paper, we present
+                 ways to combine breadth-first methods with traditional
+                 efficient algorithms, along with new schemes to
+                 minimize accessing objects stored on disk. Experimental
+                 analysis, including comparisons with depth-first ray
+                 tracing, shows that large databases can be handled
+                 efficiently with this approach.",
+  keywords =     "breadth-first ray tracing, uniform spatial
+                 subdivision",
+  tvcg-abstract-url = "http://www.computer.org/tvcg/tg1997/v0316abs.htm",
+  tvcg-pdf-url = "http://pdf.computer.org/tg/books/tg1997/pdf/v0316.pdf",
+ who = "Havran Vlastimil: RT-0180",
+}
+
+@Article{Elber:1997:RT,
+  author =       "Gershon Elber and {Jung-Ju} Choi and {Myung-Soo} Kim",
+  title =        "Ruled Tracing",
+  journal =      "The Visual Computer",
+  year =         "1997",
+  volume =       "13",
+  number =       "2",
+  pages =        "78--94",
+  publisher =    "Springer-Verlag",
+  note =         "ISSN 0178-2789",
+  annote =       "The traditional ray-tracing technique based on a
+                 ray-surface intersection is reduced to a ruled or
+                 developable surface-surface intersection problem. That
+                 enables direct freeform surface rendering. By
+                 exploiting the spatial coherence gained in the
+                 ruled/developable surface-tracing approach presented,
+                 the emulation of shadows, specular reflections, and/or
+                 refractions in a freeform surface environment can all
+                 be implemented efficiently. The approach provides a
+                 direct freeform surface-rendering alternative to ray
+                 tracing. An implementation of a direct freeform surface
+                 renderer that emulates shadows as well as specular
+                 reflections is discussed. This renderer processes
+                 isoparametric curves as its basic building block,
+                 eliminating the need for polygonal approximation.",
+  keywords =     "Ray tracing, light wavefronts, direct freeform surface
+                 rendering, shadow computation, reflection/refraction",
+ who = "Havran Vlastimil: RT-0179",
+}
+
+@Article{Ip:1997:EPS,
+  author =       "Horace H. S. Ip and Ken C. K. Law and Gabriel K. P.
+                 Fung",
+  title =        "Epipolar plane space subdivision method in
+                 stereoscopic ray tracing",
+  journal =      "The Visual Computer",
+  year =         "1997",
+  volume =       "13",
+  number =       "6",
+  pages =        "247--264",
+  publisher =    "Springer-Verlag",
+  note =         "ISSN 0178-2789",
+  keywords =     "ray tracing, stereoscopic rendering, epipolar
+                 geometry",
+  annote =       "This paper presents a novel space subdivision scheme
+                 based on epipolar geometry. It is particularly suited
+                 to stereoscopic ray tracing in the backprojection
+                 method. The resulting rendering algorithm gives a
+                 substantial speed improvement over generating stereo
+                 pair images separately, and the generated stereo images
+                 are effectively identical to those generated
+                 separately. In this work, the generation of
+                 stereoscopic images is accelerated by two methods,
+                 namely stereoscopic backprojection and epipolar
+                 plane-space subdivision. The performance of our
+                 algorithm is evaluated and compared with the octree
+                 algorithm. Experimental results demonstrating the
+                 efficiency of the approach are presented.",
+ who = "Havran Vlastimil: RT-0178",
+}
+
+@Article{Choi92,
+  author =       "H. K. Choi and C. M. Kyung",
+  title =        "{PYSHA}: a shadow-testing acceleration scheme for ray
+                 tracing",
+  journal =      "Computer-aided design",
+  volume =       "24",
+  number =       "2",
+  month =        feb,
+  year =         "1992",
+  note =         "hybrid scheme of light buffer and grid subdivision
+                 with cost comparison on the fly",
+ who = "Havran Vlastimil: RT-0177",
+}
+
+@TechReport{Sherstyuk96:TCHR,
+  author =       "A. Sherstyuk",
+  title =        "Ray-tracing implicit surfaces: a generalized approach",
+  year =         "1996",
+  type =         "Technical Report",
+  number =       "1996/290",
+  institution =  "Monash University",
+  keywords =     "implicit surfaces, ray-tracing",
+  who = "Havran Vlastimil: RT-0176",
+}
+
+@InProceedings{Genetti:1993:RTA,
+  author =       "Jon Genetti and Dan Gordon",
+  title =        "Ray Tracing with Adaptive Supersampling in Object
+                 Space",
+  year =         "1993",
+  month =        may,
+  booktitle =    "Proceedings of Graphics Interface '93",
+  publisher =    "Canadian Information Processing Society",
+  pages =        "70--77",
+  address =      "Toronto, Ontario",
+  keywords =     "sampling, antialiasing, penumbrae",
+  who = "Havran Vlastimil: RT-0175",
+}
+
+@Article{Redner:1995:SBI,
+  author =       "Richard A. Redner and Mark E. Lee and Samuel P.
+                 Uselton",
+  title =        "Smooth {B}-Spline Illumination Maps for Bidirectional
+                 Ray Tracing",
+  journal =      "ACM Transactions on Graphics",
+  volume =       "14",
+  number =       "4", 
+  pages =        "337--362",
+  month =        oct,
+  year =         "1995",
+  coden =        "ATGRDF",
+  ISSN =         "0730-0301",
+  bibdate =      "Mon May 26 09:17:43 1997",
+  url =          "http://www.acm.org/pubs/toc/Abstracts/0730-0301/225296.html",
+  abstract =     "In this paper we introduce B-spline illumination maps 
+                 and their generalizations and extensions for use in
+                 realistic image generation algorithms. The B-spline
+                 lighting functions (i.e., illumination maps) are
+                 defined as weighted probability density functions. The
+                 lighting functions can be estimated from random data
+                 and may be used in bidirectional distributed ray
+                 tracing programs as well as radiosity oriented
+                 algorithms. The use of these lighting functions in a
+                 bidirectional ray tracing system that can handle
+                 dispersion as well as the focusing of light through
+                 lenses is presented.",
+  acknowledgement = ack-nhfb,
+  keywords =     "algorithms; theory",
+  subject =      "{\bf I.3.7}: Computing Methodologies, COMPUTER
+                 GRAPHICS, Three-Dimensional Graphics and Realism,
+                 Visible line/surface algorithms.",
+  note =         "Corrections to Figures 4--9 are available on the
+                 World-Wide Web at path=http://www.acm.org/tog/AandE.html=.",
+  who = "Havran Vlastimil: RT-0174",
+}
+
+@Article{Lee:1985:SOS,
+  author =       "Mark E. Lee and Richard A. Redner and Samuel P.
+                 Uselton",
+  editor =       "B. A. Barsky",
+  title =        "Statistically Optimized Sampling for Distributed Ray
+                 Tracing",
+  journal =      "Computer Graphics",
+  volume =       "19",
+  number =       "3",
+  pages =        "61--67",
+  month =        jul,
+  year =         "1985",
+  coden =        "CGRADI, CPGPBZ",
+  ISSN =         "0097-8930",
+  annote =       "Cook, Porter, and Carpenter coined the phrase
+                 ``distributed ray tracing'' to describe a technique for
+                 using each ray of a super-sampled ray tracing procedure
+                 as a sample in several dimensions to achieve effects
+                 such as penumbras and motion blur in addition to
+                 spatial antialiasing. The shade to be displayed at a
+                 pixel is a weighted integral of the image function. The
+                 purpose of using many rays per pixel is to estimate the
+                 value of this integral. In this work, a relationship
+                 between the number of sample rays and the quality of
+                 the estimate of this integral is derived. Furthermore,
+                 the number of rays required does not depend on the
+                 dimensionality of the space being sampled, but only on
+                 the variance of the multi-dimensional image function.
+                 The algorithm has been optimized through the use of
+                 statistical testing and stratified sampling.",
+  conference =   "held in San Francisco, CA; 22--26 July 1985",
+  keywords =     "I37 ray-tracing, distributed, I3m optimization, I37
+                 motion blur, stratified point sampling, ray tracing
+                 anti aliasing stochastic",
+  who = "Havran Vlastimil: RT-0173",
+}
+
+@Article{Mitchell:1992:RTI,
+  author =       "Don P. Mitchell",
+  title =        "Ray Tracing and Irregularities of Distribution",
+  year =         "1992",
+  month =        may,
+  journal =      "Third Eurographics Workshop on Rendering",
+  pages =        "61--69",
+  address =      "Bristol, UK",
+  keywords =     "monte carlo",
+  who = "Havran Vlastimil: RT-0172",
+}
+
+@inproceedings{Cook84,
+  author = "Robert L. Cook and Thomas Porter and Loren Carpenter",  
+  title = "Distributed Ray Tracing",
+  booktitle = "Computer Graphics (SIGGRAPH '84 Proceedings)",
+  month = jul,
+  year = "1984",
+  pages = "137-45",
+  keywords = "monte carlo, stochastic, penumbrae, depth of field, motion blur,
+             antialiasing",
+  comments = "also in Tutorial: Computer Graphics: Image Synthesis,
+              Computer Society Press, Washington, 1988, pp. 139-147",
+  who = "Havran Vlastimil: RT-0171",
+}
+
+@InProceedings{amanatides84a,
+  author =       "John Amanatides",
+  title =        "Ray Tracing with Cones",
+  pages =        "129--135",
+  booktitle =      "Computer Graphics (SIGGRAPH '84 Proceedings)",
+  volume =       "18",
+  number =       "3", 
+  year =         "1984",
+  month =        jul,   
+  conference =   "held in Minneapolis, Minnesota; 23--27 July 1984",
+  keywords =     "cone tracing, antialiasing, I35 Ray Tracing",
+  annote =       "ray tracing spheres and polygons with circular conical
+                 rays A technique for antialiasing in ray tracing is
+                 presented which utilizes cones instead of rays. Cones
+                 prevent problems generally associated with point
+                 sampling, and therefore allow for more natural images.
+                 The mathematics involved seem only ``pretty'' for
+                 spherical objects, so an acid test has yet to be
+                 performed. \\ A new approach to ray tracing is
+                 introduced. The definition of a ``ray'' is extended
+                 into a cone by including information on the spread
+                 angle and the virtual origin. The advantages of this
+                 approach, which tries to model light propagation with
+                 more fidelity, include a better method of antialiasing,
+                 a way of calculating fuzzy shadows and dull
+                 reflections, a method of calculating the correct level
+                 of detail in a procedural model and texture map, and
+                 finally, a procedure for faster intersection
+                 calculation.",
+  who = "Havran Vlastimil: RT-0170",
+}
+
+@InProceedings{shinya87a, 
+  author =       "Mikio Shinya and Tokiichiro Takahashi and Seiichiro
+                 Naito",
+  title =        "Principles and Applications of Pencil Tracing",
+  pages =        "45--54",   
+  booktitle =      "Computer Graphics (SIGGRAPH '87 Proceedings)",
+  volume =       "21",
+  number =       "4",
+  year =         "1987",
+  month =        jul,
+  editor =       "Maureen C. Stone",
+  conference =   "held in Anaheim, California; 27 -- 31 July 1987",     
+  keywords =     "ray tracing, paraxial theory",
+  annote =       "Pencil tracing, a new approach to ray tracing, is
+                 introduced for faster image synthesis with more
+                 physical fidelity. The paraxial approximation theory
+                 for efficiently tracing a pencil of rays is described
+                 and analysis of its errors is conducted to insure the
+                 accuracy required for pencil tracing. The paraxial
+                 approximation is formulated from a 4x4 matrix (a system
+                 matrix) that provides the basis for pencil tracing and
+                 a variety of ray tracing techniques, such as beam
+                 tracing, ray tracing with cones, ray-object
+                 intersection tolerance, and a lighting model for
+                 reflection and refraction. In the error analysis,
+                 functions that estimate approximation errors and
+                 determine a constraint on the spread angle of a pencil
+                 are given. \\ The theory results in the following fast
+                 ray tracing algorithms; ray tracing using a system
+                 matrix, ray interpolation, and extended `beam tracing'
+                 using a `generalized perspective transform.' Some
+                 experiments are described to show their advantages. A
+                 lighting model is also developed to calculate the
+                 illuminance for refracted and reflected light.",
+  who = "Havran Vlastimil: RT-0169",
+}
+
+@InProceedings{mitchell87a,
+  author =       "Don P. Mitchell",
+  title =        "Generating Antialiased Images at Low Sampling
+                 Densities",
+  pages =        "65--72", 
+  booktitle =      "Computer Graphics (SIGGRAPH '87 Proceedings)",
+  volume =       "21",
+  number =       "4",
+  year =         "1987",
+  month =        jul,
+  editor =       "Maureen C. Stone",
+  conference =   "held in Anaheim, California; 27 -- 31 July 1987",
+  keywords =     "adaptive sampling, antialiasing, filtering, noise
+                 perception, nonuniform sampling, ray tracing,
+                 reconstruction",
+  who = "Havran Vlastimil: RT-0168",
+}
+
+@Article{Heckbert:1984:BTP,
+  author =       "Paul S. Heckbert and Pat Hanrahan",
+  title =        "Beam Tracing Polygonal Objects",
+  journal =      "Computer Graphics (SIGGRAPH'84 Proceedings)",
+  volume =       "18",
+  number =       "3",
+  pages =        "119--127",
+  month =        jul,
+  year =         "1984",
+  coden =        "CGRADI, CPGPBZ",
+  ISSN =         "0097-8930",
+  annote =       "Weiler-Atherton algorithm applied to ray tracing.
+                 Heckbert and Hanrahan present an elegant image space
+                 algorithm for rendering objects composed of polygonal
+                 facets. It utilizes image coherence and generates a
+                 final picture consisting of polygons. \\ Ray tracing
+                 has produced some of the most realistic computer
+                 generated pictures to date. They contain surface
+                 texturing, local shading, shadows, reflections, and
+                 refractions. The major disadvantage of ray tracing
+                 results from its point-sampling approach. Because
+                 calculation proceeds {\em ab initio} at each pixel it
+                 is very CPU intensive and may contain noticeable
+                 aliasing artifacts. It is difficult to take advantage
+                 of spatial coherence because the shapes of reflections
+                 and refractions from curved surfaces are so complex. \\
+                 In this paper we describe an algorithm that utilizes
+                 the spatial coherence of polygonal environments by
+                 combining features of both image and object space
+                 hidden surface algorithms. Instead of tracing
+                 infinitesimally thin rays of light, we sweep areas
+                 through a scene to form ``beams.'' This technique works
+                 particularly well for polygonal models since for this
+                 case the reflections are linear transformation, and
+                 refractions are often approximately so. \\ The
+                 recursive beam tracer begins by sweeping the projection
+                 plane through the scene. Beam-surface intersections are
+                 computed using two-dimensional polygonal set operations
+                 and an occlusion algorithm similar to the
+                 Weiler-Atherton hidden surface algorithm. For each
+                 beam-polygon intersection the beam is fragmented and
+                 new beams created for the reflected and transmitted
+                 swath of light. These sub-beams are redirected with a
+                 4x4 matrix transformation and recursively traced. This
+                 beam tree is an object space representation of the
+                 entire picture.",
+  conference =   "held in Minneapolis, Minnesota; 23--27 July 1984",
+  keywords =     "polygon, ray tracing beam antialiasing,
+                 Weiler-Atherton polygon clipping",
+  who = "Havran Vlastimil: RT-0167",
+}
+
+InProceedings{snyder87a, 
+  author =       "John M. Snyder and Alan H. Barr",
+  title =        "Ray Tracing Complex Models Containing Surface
+                 Tessellations",
+  pages =        "119--128", 
+  booktitle =      "Computer Graphics (SIGGRAPH '87 Proceedings)",
+  volume =       "21",
+  number =       "4",
+  year =         "1987",
+  month =        jul,
+  editor =       "Maureen C. Stone",
+  conference =   "held in Anaheim, California; 27 -- 31 July 1987",   
+  keywords =     "parametric surface, triangle, list, 3d grid",
+  annote =       "An approach to ray tracing complex models containing
+                 mathematically defined surfaces is presented.
+                 Parametric and implicit surfaces, and boolean
+                 combinations of these, are first tessellated into
+                 triangles. The resulting triangles from many such
+                 surfaces are organized into a hierarchy of lists and 3D
+                 grids, allowing efficient calculation of ray/model
+                 intersections. \\ The technique has been used to ray
+                 trace models containing billions of triangles and
+                 surfaces never before traced. The organizing scheme
+                 developed is also independently useful for efficiently
+                 ray tracing any any complex model, whether or not it
+                 contains surfaces tessellations.",
+  who = "Havran Vlastimil: RT-0166",
+}
+
+@Article{Ke93,
+  author =       "Hao-Ren Ke and Ruei-Chuan Chang",
+  title =        "An Efficient Hierarchical Traversal Algorithm for Ray
+                 Tracing",
+  journal =      "Visual Computer",
+  volume =       "10",
+  number =       "2",
+  pages =        "79--87",
+  year =         "1993",
+  keywords =     "efficiency",
+  who = "Havran Vlastimil: RT-0165",
+}
+
+@Article{Ke:1995:RCV,
+  author =       "H. R. Ke and R. C. Chang",
+  title =        "Ray-cast volume rendering accelerated by incremental
+                 trilinear interpolation and cell templates",
+  journal =      "The Visual Computer",
+  year =         "1995",
+  volume =       "11",
+  number =       "6",
+  publisher =    "Springer-Verlag",
+  pages =        "297--308",
+  note =         "ISSN 0178-2789",
+  who = "Havran Vlastimil: RT-0164",
+}
+
+@Article{Ke:1993:SBP,
+  author =       "Hao-ren Ke and Ruei-Chuan Chang",
+  title =        "Sample buffer: {A} progressive refinement ray-casting
+                 algorithm for volume rendering",
+  journal =      "Computers and Graphics",
+  volume =       "17",
+  number =       "3",
+  pages =        "277--283",
+  month =        may # "--" # jun,
+  year =         "1993",
+  coden =        "COGRD2",
+  ISSN =         "0097-8493",
+  bibdate =      "Fri Feb 07 11:04:26 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Natl Chiao Tung Univ",
+  affiliationaddress = "Hsinchu, Taiwan",
+  classification = "723.5; 741.2; 902.1; 921.6",
+  journalabr =   "Comput Graphics (Pergamon)",
+  keywords =     "Algorithms; Color; Image processing; Image quality;
+                 Interpolation; Opacity; Ray casting algorithm; Sample
+                 buffer; Three dimensional computer graphics; Transfer
+                 functions; Transparency; Visualization; Volume data
+                 rendering; Volume visualization",
+  who = "Havran Vlastimil: RT-0163",
+}
+
+@InProceedings{Sung:1991:DOT,
+  author =       "K. Sung",
+  title =        "A {DDA} Octree Traversal Algorithm for Ray Tracing",
+  pages =        "73--85",   
+  booktitle =    "Eurographics '91",
+  year =         "1991",
+  month =        sep,
+  editor =       "Werner Purgathofer",
+  publisher =    "North-Holland",
+  conference =   "European Computer Graphics Conference and Exhibition;
+                 held in Vienna, Austria; 2-6 September 1991",
+  keywords =     "ray tracing",
+  who = "Havran Vlastimil: RT-0162",
+}
+
+@InProceedings{Coquillart:1985:IRT,
+  author =       "S. Coquillart",
+  title =        "An Improvement of the Ray-Tracing Algorithm",
+  booktitle =      "Computer Graphics Forum (Eurographics '85
+                 Proceedings)",
+  volume =       "4",
+  number =       "3",
+  pages =        "77--88",
+  year =         "1985",
+  month =        sep,
+  publisher =    "North-Holland",
+  conference =   "European Computer Graphics Conference and Exhibition  
+                 in Bath, England; 28 -- 29 March 1985",
+  annote =       "This paper describes an improvement of the ray-tracing
+                 algorithm. The new method takes advantage of a data
+                 structure which allows us to consider only the closest
+                 objects to the path of the ray. This technique can be
+                 applied to primary and secondary rays. Using this
+                 method, the run-time depends more on the complexity of
+                 the generated picture than on the complexity of the
+                 scene.",
+  who = "Havran Vlastimil: RT-0161",
+}
+
+@InProceedings{Sousa:1990:IRT,
+  author =       "A. Augusto Sousa and Antonio M. C. Costa and Fernando
+                 N. Ferreira",
+  title =        "Interactive Ray-Tracing for Image Production with
+                 Increasing Realism",
+  pages =        "449--457",
+  booktitle =    "Eurographics '90",
+  year =         "1990",
+  month =        sep,
+  editor =       "C. E. Vandoni and D. A. Duce",
+  publisher =    "North-Holland",
+  conference =   "European Computer Graphics Conference and Exhibition;
+                 held in Montreux, Switzerland; 3 -- 7 September 1990",
+  keywords =     "rendering, interactive ray tracing, increasing
+                 realism, modular and paralle architectures,
+                 transputers, parallel processing",
+  who = "Havran Vlastimil: RT-0160",
+}
+
+@InProceedings{Speer92,
+  author =       "L. Richard Speer",
+  title =        "A New Subdivision Method for High-speed, Memory
+                 Efficient Ray Shooting",
+  booktitle =    "Third Eurographics Workshop on Rendering",
+  pages =        "45--60",
+  address =      "Bristol, UK",
+  month =        may,
+  year =         "1992",
+  who = "Havran Vlastimil: RT-0159",
+}
+
+@Article{Maillot:1992:PRT,
+  author =       "J-L. Maillot and L. Carraro and B. Peroche",
+  title =        "Progressive Ray Tracing",
+  year =         "1992",
+  month =        may,
+  journal =      "Third Eurographics Workshop on Rendering",
+  pages =        "9--20",
+  address =      "Bristol, UK",
+  who = "Havran Vlastimil: RT-0158",
+}
+
+@TechReport{Sherstyuk98:TCHR,
+  author =       "A. Sherstyuk",
+  title =        "Fast Ray Tracing of Implicit Surfaces",
+  year =         "1998",
+  type =         "Technical Report",
+  number =       "1998/04",
+  institution =  "Monash University",
+  keywords =     "implicit surfaces, ray-tracing",
+  who = "Havran Vlastimil: RT-0157",
+}
+
+@TechReport{Sherstyuk97:TCHR,
+  author =       "A. Sherstyuk",
+  title =        "Shells, crabs and seahorses: expanding the modeling power
+                  of implicit surfaces",
+  year =         "1997",
+  type =         "Technical Report",
+  number =       "1997/330",
+  institution =  "Monash University",
+  keywords =     "natural forms, convolution surfaces, geometric modelling,
+                  implicit surfaces",
+  who = "Havran Vlastimil: RT-0156",
+}
+
+@TechReport{McCormack97:TCHR,
+  author =       "J. McCormack and A. Sherstyuk",
+  title =        "Creating and Rendering Convolution Surfaces",
+  year =         "1997",
+  type =         "Technical Report",
+  number =       "1997/324",
+  institution =  "Monash University",
+  keywords =     "convolution surfaces, geometric modelling, implicit surfaces,
+                  ray-tracing",
+  who = "Havran Vlastimil: RT-0155",
+}
+
+@InProceedings{Heckbert87,
+  author =       "Paul S. Heckbert",
+  title =        "Ray Tracing {JELL}-{O} ({R}) Brand Gelatin",
+  booktitle =    "Computer Graphics (SIGGRAPH '87 Proceedings)",
+  pages =        "73--4",
+  month =        jul,
+  year =         "1987",
+  keywords =     "lattice algorithm, Jell-O (TM), gelatin",
+  note =         "revision appears in CACM, Vol. 31, \#2, Feb. 1988, p.
+                 130-134 Published as Computer Graphics (SIGGRAPH '87
+                 Proceedings), volume 21, number 4",
+  who = "Havran Vlastimil: RT-0154",
+}
+
+@Article{Slusallek:1994:IRP,
+  author =       "Ph. Slusallek and Th. Pflaum and H.-P. Seidel",
+  title =        "Implementing {RenderMan} --- Practice, Problems and
+                 Enhancements",
+  volume =       "13",
+  number =       "3",
+  pages =        "C/443--C/454",
+  month =        "????",
+  year =         "1994",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  classification = "C6130B (Graphics techniques); C6150E (General
+                 utility programs); C6180 (User interfaces)",
+  conflocation = "Oslo, Norway; 12-16 Sept. 1994",
+  conftitle =    "15th Annual Conference and Exhibition.
+                 EUROGRAPHICS'94",
+  corpsource =   "Comput. Graphics Group, Erlangen Univ., Germany",
+  keywords =     "interfaces; rendering (computer graphics); Rendering
+                 systems; rendering systems; RenderMan; Shading
+                 Language; solid modelling; user",
+  thesaurus =    "Rendering [computer graphics]; Solid modelling; User
+                 interfaces",
+  treatment =    "A Application; P Practical",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-1994-19",
+  language =     "en",
+  abstract =     "The RenderMan interface has been proposed as a general
+                 interface to rendering systems, yet only a few
+                 implementations of the interface exist. In this paper
+                 we describe the implementation of the RenderMan
+                 interface on a general rendering architecture that
+                 supports various rendering algorithms. Speci,cally we
+                 discuss the implementation of the RenderMan Shading
+                 Language and its integration into our rendering
+                 architecture. Special attention is focused on the
+                 problems that we have encountered and how they can be
+                 solved. Additionally, we suggest extensions and
+                 enhancements to the current interface de,nition, which
+                 would make RenderMan easier to implement and more
+                 ,exible to use.",
+  journal =      "Computer Graphics Forum (Proc. Eurographics '94)",
+  who = "Havran Vlastimil: RT-0153",
+}
+
+@InProceedings{Rushmeier93,
+  author =       "Holly E. Rushmeier and Charles Patterson and Aravindan
+                 Veerasamy",
+  title =        "Geometric Simplification for Indirect Illumination
+                 Calculations",
+  booktitle =    "Proc. Graphics Interface '93",
+  publisher =    "Canadian Inf. Proc. Soc.",
+  address =      "Toronto, Ontario",
+  month =        may,
+  year =         "1993",
+  pages =        "227--236",
+  keywords =     "Monte Carlo, progressive refinement, ray tracing,
+                 multiresolution modeling",
+  note = "http://www.cc.gatech.edu/gvu/people/Phd/Charles.Patterson",
+  annote =       "multiresolution model creation (clustering) not fully
+                 automated",
+  who = "Havran Vlastimil: RT-0152",
+}
+
+@InProceedings{Shirley:1991:RTF,
+  author =       "Peter Shirley and Kelvin Sung and William Brown",
+  title =        "A Ray Tracing Framework for Global Illumination
+                 Systems",
+  pages =        "117--128",
+  booktitle =    "Proceedings of Graphics Interface '91",
+  year =         "1991",
+  month =        jun,
+  conference =   "held in Calgary, Alberta; 3-7 June 1991",
+  keywords =     "ray tracing, radiosity, object-oriented design,
+                 software components, zonal method, visual realism",
+  who = "Havran Vlastimil: RT-0151",
+}
+
+@InProceedings{Marton:1996:SEM,
+  author =       "L. {Szirmay-Kalos} and G. Marton",
+  title =        "On the Complexity of Ray Shooting",
+  booktitle =    "Dagstuhl Seminar on Rendering, 1996",
+  year =         "1996",
+  who = "Havran Vlastimil: RT-0150",
+}
+
+@PhdThesis{bronsvoort90a,
+  author =       "Willem F. Bronsvoort",
+  title =        "Direct Display Algorithms for Solid Modelling",
+  month =        jun,
+  year =         "1990",
+  type =         "Ph.D. Thesis",
+  school =       "Delft University of Technology",
+  annote =       "Advisor: Denis J. McConalogue In this thesis
+                 algorithms are discussed for displaying geometric
+                 models of three-dimensional objects. An important use
+                 of such algorithms is in CAD/CAM-systems to give the
+                 designer insight in the shape of the design. \\ Of
+                 particular concern here are direct display algorithms
+                 for constructive solid geometry models and generalized
+                 cylinders. `Direct' in this context means that a solid
+                 object is displayed without the need to convert its
+                 model into a boundary representation providing the
+                 information about faces, edges and vertices required by
+                 the standard display algorithms. \\ For constructive
+                 solid geometry models, the starting point is a
+                 collection of primitive objects, such as cubes, spheres
+                 and cylinders, that can be combined into more complex
+                 objects with set operations. The two alternatives for
+                 displaying such models, namely conversion into a
+                 boundary representation followed by display with a
+                 standard algorithm, and direct display with an adapted
+                 algorithm, are weighed. An overview of direct display
+                 algorithms for constructive solid geometry models is
+                 also given. \\ Generalized cylinders are objects
+                 defined by an arbitrary two-dimensional contour, or
+                 cross-section, and an arbitrary three-dimensional
+                 trajectory along which to sweep the contour. With
+                 profiled generalized cylinders, the contour can be
+                 scaaed along the trajectory in two perpendicular
+                 directions according to two profile curves. An exact
+                 definition of such objects is given. Here also the
+                 alternative for display, namely conversion into a
+                 boundary representation followed by display with a
+                 standard algorithm, and direct display with a special
+                 algorithm, are compared. \\ Finally, some conclusions
+                 are drawn, and directions for further research on
+                 direct display algorithms for solid models are
+                 identified.",
+  who = "Havran Vlastimil: RT-0149",
+}
+
+@InProceedings{kajiya83a,
+  author =       "J. T. Kajiya",
+  title =        "New Techniques For Ray Tracing Procedurally Defined
+                 Objects",
+  pages =        "91--102",
+  booktitle =      "Computer Graphics (SIGGRAPH '83 Proceedings)",
+  volume =       "17",
+  number =       "3",
+  year =         "1983",
+  month =        jul,
+  conference =   "held in Detroit, Michigan; 25--29 July 1983",
+  keywords =     "I37 fractal surfaces, I37 prisms, I37 ray tracing, I37
+                 surfaces of revolution, ray tracing intersect,
+                 procedural models, fractals, revolution, prisms",
+  annote =       "Also appears in {\bf Tutorial: Computer Graphics:
+                 Image Synthesis}, Kenneth I. Joy, Charles W. Grant,
+                 Nelson L. Max, and Lansing Hatfield (eds.), Computer
+                 Society Press, Washington, 1988, p. 168-188. \\ We
+                 present new algorithms for efficient ray tracing of
+                 three procedurally defined objects: fractal surfaces,
+                 prisms, and surfaces of revolution. The fractal surface
+                 algorithm performs recursive subdivision adaptively.
+                 Subsurfaces which cannot intersect a given ray are
+                 culled from further consideration. The prism algorithm
+                 transforms the three-dimensional ray-surface
+                 intersection problem into a two-dimensional ray-curve
+                 intersection problem, which is solved by the method of
+                 strip trees. The surface-of-revolution algorithm
+                 transforms the three-dimensional ray-surface
+                 intersection problem into a two-dimensional curve-curve
+                 intersection problem, which again is solved by strip
+                 trees. \\ Kajiya presents good solid methods for ray
+                 tracing various models which are represented
+                 procedurally. Fractals are ray traced as they are
+                 built, which keeps unseen fractal surfaces from being
+                 evolved. Prisms are ray traced in a fairly simple
+                 fashion. A clever use of geometric transforms is used
+                 to ray trace surfaces of revolution. Makes good use of
+                 strip trees (see Ballard).",
+  who = "Havran Vlastimil: RT-0148",
+}
+
+@Article{Hanrahan:1983:RTA,
+  author =       "Pat Hanrahan",
+  title =        "Ray Tracing Algebraic Surfaces",
+  journal =      "Computer Graphics (SIGGRAPH '83 Proceedings)",
+  volume =       "17",
+  number =       "3",
+  pages =        "83--90",
+  month =        jul,
+  year =         "1983",
+  coden =        "CGRADI, CPGPBZ",
+  ISSN =         "0097-8930",
+  annote =       "numerical techniques for finding roots of polynomials
+                 \\ Many interesting surfaces can be written as
+                 polynomial functions of the spatial coordinates, often
+                 of low degree. We present a method based on a ray
+                 casting algorithm, extended to work in more than three
+                 dimensions, to produce pictures of these surfaces. The
+                 method uses a symbolic algebra system to automatically
+                 derive the equation of intersection between the ray and
+                 the surface and then solves this equation using an
+                 exact polynomial root finding algorithm. \\ Included
+                 are illustrations of the cusp catastrophe surface, and
+                 two unusually shaped quartic surfaces, Kummer's
+                 quadruple and Steiner's surface.",
+  conference =   "held in Detroit, Michigan; 25--29 July 1983",
+  keywords =     "root finding, algebraic surface, ray tracing intersect
+                 blob, I33 ray tracing, I37 algebraic surface",
+  who = "Havran Vlastimil: RT-0147",
+}
+
+@InProceedings{heidrich-gi98,
+  title =        "Ray-Tracing Procedural Displacement Shaders",
+  author =       "Wolfgang Heidrich and Hans-Peter Seidel",
+  booktitle =    "Graphics Interface",
+  year =         "1998",
+  month =        jun,
+  pages =        "8--16",
+  url =          "http://www.dgp.toronto.edu/gi/gi98/papers/111/111.html",
+  who = "Havran Vlastimil: RT-0146",
+}
+
+@inproceedings{gonzalez:cgi:98,
+  author = "P. Gonzalez and F. Gisbert",
+  title = "Object and Ray Coherence in the Optimization of the
+           Ray Tracing Algorithm",
+  booktitle = "Proceedings of Computer Graphics International '98 (CGI'98)",
+  year = "1998",
+  month = jun,
+  pages = "264--267",
+  address = "Hannover, Germany",
+  publisher = "IEEE, NY",
+  who = "Havran Vlastimil: RT-0145",
+}
+
+@Article{Moeller:1997:FMS,
+  author =       "Tomas M{\"{o}}ller and Ben Trumbore",
+  title =        "Fast, Minimum Storage Ray-Triangle Intersection",
+  journal =      "Journal of Graphics Tools",
+  year =         "1997",
+  volume =       "2",
+  number =       "1",
+  note =         "ISSN 1086-7651",
+  annote =       "We present a clean algorithm for determining whether a
+                 ray intersects a triangle. The algorithm translates the
+                 origin of the ray and then changes the base to yield a
+                 vector (t u v)T, where t is the distance to the plane
+                 in which the triangle lies and (u,v) represents the
+                 coordinates inside the triangle. One advantage of this
+                 method is that the plane equation need not be computed
+                 on the fly nor be stored, which can amount to
+                 significant memory savings for triangle meshes. As we
+                 found our method to be comparable in speed to previous
+                 methods, we believe it is the fastest ray-triangle
+                 intersection routine for triangles that do not have
+                 precomputed plane equations.",
+  who = "Havran Vlastimil: RT-0144",
+}
+
+@Article{pulleyblank87a,
+  author =       "Ron Pulleyblank and John Kapenga",
+  title =        "The Feasibility of a {VLSI} Chip for Ray Tracing
+                 Bicubic Patches",
+  pages =        "33--44",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "7",
+  number =       "3",
+  year =         "1987",
+  month =        mar,
+  keywords =     "bicubic patch",
+  annote =       "Also appears as ``A VLSI Chip for Ray Tracing Bicubic
+                 Patches'' in {\bf Advances in Computer Graphics
+                 Hardware I}, W. Stra\mbox{\ss}er (ed.), 1987, p.
+                 125-140. \\ In this article we explore the possibility
+                 of a VLSI chip for ray tracing bicubic patches in
+                 B\'{e}zier form. The purpose of the chip is to
+                 calculate the intersection point of a ray with the
+                 bicubic patch to a specified level of accuracy,
+                 returning parameter values $(u,v)$ specifing the
+                 location of the intersection on the patch, and a
+                 parameter value, $t$, which specifies the location of
+                 the intersection on the ray. The intersection is
+                 calculated by successively subdividing the patch and
+                 computing the intersection of the ray with a bounding
+                 box of each subpatch until the bounding volume meets
+                 the accuracy requirement. There are two operating
+                 modes: one in which only the nearest intersection is
+                 found, and another in which all intersections are
+                 found. This algorithm (and the chip) correctly handle
+                 the difficult cases of the ray tangentially
+                 intersecting a planar patch and intersections of the
+                 ray at a silhouette edge of the patch. Estimates
+                 indicate that such a chip could be implemented with
+                 2-micron NMOS (N-type metal oxide semiconductor) and
+                 could compute patch-ray intersections at the rate of
+                 one every 15 microseconds for patches that are
+                 prescaled and specified to a 12-bit fixed point for
+                 each of the $x, y$, and $z$ components. A version
+                 capable of handling 24-bit patches could compute
+                 patch-ray intersections at the rate of one every 140
+                 microseconds. Calculations of the normal at the
+                 intersection point could be performed with the addition
+                 of Re scalar subtractions and six scalar multiplies.
+                 Images drawn using a software version of the algorithm
+                 are presented and discussed.",
+   who = "Havran Vlastimil: RT-0143",
+}
+
+@InProceedings{Pearce:1991:ESC,
+  author =       "Andrew Pearce and David Jevans",
+  title =        "Exploiting Shadow Coherence in Ray Tracing",
+  pages =        "109--116",
+  booktitle =    "Proceedings of Graphics Interface '91",
+  year =         "1991",
+  month =        jun,
+  conference =   "held in Calgary, Alberta; 3-7 June 1991",
+  keywords =     "ray tracing, shadow testing, shadow caching, spatial
+                 subdivision",
+  who = "Havran Vlastimil: RT-0142",
+}
+
+@Article{haines86a,
+  author =       "Eric A. Haines and Donald P. Greenberg",
+  title =        "The Light Buffer: {A} Ray Tracer Shadow Testing
+                 Accelerator",
+  pages =        "6--16",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "6",
+  number =       "9",
+  year =         "1986",
+  month =        sep,
+  keywords =     "shading, ray tracing, shadows, ray tracing shadow
+                 cull",
+  abstract =     "In one area of computer graphics, realistic image
+                 synthesis, the ultimate goal is to produce a picture
+                 indistinguishable from a photograph of a real
+                 environment. A particularly powerful technique for
+                 simulating light reflection---an important element in
+                 creating this realism---is called ray tracing. This
+                 method produces images of excellent quality, but
+                 suffers from lengthy computation time that limits its
+                 practical use. \\ This article presents a new method to
+                 reduce shadow testing time during ray tracing. The
+                 technique involves generating light buffers, each of
+                 which partition the environment with respect to an
+                 individual light source. These partition descriptions
+                 are then used during shadow testing to quickly
+                 determine a small subset of objects that may have to be
+                 tested for intersection. \\ The results of timing tests
+                 illustrate the beneficial performance of these
+                 techniques. The tests compare the standard ray-tracing
+                 algorithm to light buffers of varying resolution.",
+  who = "Havran Vlastimil: RT-0141",
+}
+
+@InProceedings{shirley90b,
+  author =       "Peter Shirley",
+  title =        "A Ray Tracing Method for Illumination Calculation in
+                 Diffuse-Specular Scenes",
+  pages =        "205--212",
+  booktitle =      "Proceedings of Graphics Interface '90",
+  year =         "1990",
+  month =        may,
+  conference =   "held in Halifax, Nova Scotia; 14-18 May 1990",
+  keywords =     "bump mapping, illumination, radiosity, radiance, ray
+                 tracing, realism, stratified sampling, texture
+                 mapping",
+  annote =       "Several ways of improving the realism of the results
+                 of traditional ray tracing are presented. The essential
+                 physical quantities of spectral radiant power and
+                 spectral radiance and their use in lighting
+                 calculations are discussed. Global illumination terms
+                 are derived by employing illumination ray tracing for
+                 calculation of quickly changing indirect lighting
+                 components, and radiosity ray tracing for slowly
+                 changing indirect lighting components. Direct lighting
+                 is calculated during the viewing phase allowing the use
+                 of bump maps. Finally, a method is introduced that
+                 reduces the total number of shadow rays to no more than
+                 the total number of viewing rays for a given picture.",
+  who = "Havran Vlastimil: RT-0140",
+}
+
+@InProceedings{Shirley:1991:DLC,
+  author =       "Peter Shirley and Changyaw Wang",
+  title =        "Direct lighting calculation by Monte Carlo
+                 integration",
+  booktitle =    "Eurographics Workshop on Rendering",
+  year =         "1991",
+  conference =   "held in Barcelona, Spain; 13-15 May 1991",
+  keywords =     "monte carlo, illumination",
+  annote =       "Application of Monte Carlo techniques for rendering
+                 scenes with multiple light sources. Only one shadow ray
+                 per viewing ray is used. Some issues for the design of
+                 probability densities for light sources are given.",
+  who = "Havran Vlastimil: RT-0139",
+}
+
+@Article{Shirley:1996:MCT,
+  author =       "Peter Shirley and Changyaw Wang and Kurt Zimmerman",
+  title =        "{Monte Carlo} Techniques for Direct Lighting
+                 Calculations",
+  journal =      "ACM Transactions on Graphics",
+  volume =       "15",
+  number =       "1",
+  pages =        "1--36",
+  month =        jan,
+  year =         "1996",
+  coden =        "ATGRDF",
+  ISSN =         "0730-0301",
+  bibdate =      "Wed Apr 24 07:49:27 1996",
+  url =          "http://www.acm.org/pubs/toc/Abstracts/0730-0301/225887.html,
+                 http://www.acm.org/pubs/toc/Abstracts/0730-0301/226151.html",
+  abstract =     "In a distributed ray tracer, the sampling strategy is
+                 the crucial part of the direct lighting calculation.
+                 Monte Carlo integration with importance sampling is
+                 used to carry out this calculation. Importance sampling
+                 involves the design of integrand-specific probability
+                 density functions that are used to generate sample
+                 points for the numerical quadrature. Probability
+                 density functions are presented that aid in the direct
+                 lighting calculation from luminaires of various simple
+                 shapes. A method for defining a probability density
+                 function over a set of luminaires is presented that
+                 allows the direct lighting calculation to be carried
+                 out with a number of sample points that is independent
+                 of the number of luminaires.",
+  acknowledgement = ack-nhfb,
+  keywords =     "algorithms; design; theory",
+  subject =      "{\bf G.3}: Mathematics of Computing, PROBABILITY AND
+                 STATISTICS. {\bf G.1.4}: Mathematics of Computing,
+                 NUMERICAL ANALYSIS, Quadrature and Numerical
+                 Differentiation. {\bf I.3.0}: Computing Methodologies,
+                 COMPUTER GRAPHICS, General. {\bf I.4.1}: Computing
+                 Methodologies, IMAGE PROCESSING, Digitization,
+                 Sampling.",
+   who = "Havran Vlastimil: RT-0138",
+}
+
+@InProceedings{Shirley92-DRTTP,
+  author =       "Peter Shirley and Changyaw Wang",
+  month =        may,
+  year =         "1992",
+  title =        "Distribution {Ray} {Tracing}: {Theory} and
+                 {Practice}",
+  booktitle =    "Third Eurographics Workshop on Rendering",
+  pages =        "33--43",
+  address =      "Bristol, UK",
+  keywords =     "Monte Carlo",
+  who = "Havran Vlastimil: RT-0137",
+}
+
+@Article{Musgrave:1989:SRE,
+  author =       "F. Kenton Musgrave and Craig E. Kolb and Robert S.
+                 Mace",
+  editor =       "Jeffrey Lane",
+  title =        "The Synthesis and Rendering of Eroded Fractal
+                 Terrains",
+  journal =      "Computer Graphics (SIGGRAPH '89 Proceedings)",
+  volume =       "23",
+  number =       "3",
+  pages =        "41--50",
+  month =        jul,
+  year =         "1989",
+  coden =        "CGRADI, CPGPBZ",
+  ISSN =         "0097-8930",
+  annote =       "info on efficiently ray tracing height fields \\ In
+                 standard fractal terrain models based on fractional
+                 Brownian motion the statistical character of the
+                 surface is, by design, the same everywhere. A new
+                 approach to the synthesis of fractal terrain height
+                 fields is presented which, in contrast to previous
+                 techniques, features locally independent control of the
+                 frequencies composing the surface, and thus local
+                 control of fractal dimension and other statistical
+                 characteristics. The new technique, termed {\em noise
+                 synthesis}, is intermediate in difficulty of
+                 implementation, between simple stochastic subdivision
+                 and Fourier filtering or generalized stochastic
+                 subdivision, and does not suffer the drawbacks of
+                 creases or periodicity. Varying the local crossover
+                 scale of fractal character or the fractal dimension
+                 with altitude or other functions yields more realistic
+                 first approximations to eroded landscapes. A simple
+                 physical erosion model is then suggested which
+                 simulates hydraulic and thermal erosion processes to
+                 create global stream/valley networks and talus slopes.
+                 Finally, an efficient ray tracing algorithm for general
+                 height fields, of which most fractal terrains are a
+                 subset, is presented.",
+  conference =   "held in Boston, Massachusetts; 31 July -- 4 August
+                 1989",
+  keywords =     "fractal, terrain models, stochastic subdivision,
+                 fractional Brownian motion, fractal dimension,
+                 lacunarity, crossover scale, erosion models, height
+                 fields, ray tracing",
+  who = "Havran Vlastimil: RT-0136",
+}
+
+@InProceedings{musgrave89c,
+  author =       "F. Kenton Musgrave",
+  title =        "Prisms and rainbows: a dispersion model for computer
+                 graphics",
+  pages =        "227--234",
+  booktitle =      "Proceedings of Graphics Interface '89",
+  year =         "1989",
+  month =        jun,
+  conference =   "held in London, Ontario; 19-23 June 1989",
+  keywords =     "refraction, stochastic sampling, distributed ray
+                 tracing, spectrum, color gamut",
+  annote =       "{\em Dispersion} is the spreading of refracted light
+                 into its component colors or spectrum. A model of
+                 refraction including dispersion is developed using the
+                 techniques of distributed ray tracing. Two models of
+                 the rainbow, one empirical or impressionistic, the
+                 other purely physical, are developed using the results
+                 of the dispersion model. The problem of representing
+                 the spectrum of monochromatic colors using the rgb
+                 primaries of the graphics color monitor is addressed.",
+  who = "Havran Vlastimil: RT-0135",
+}
+
+@TechReport{Musgrave:1988:GTF,
+  author =       "F. Kenton Musgrave",
+  title =        "Grid Tracing: Fast Ray Tracing for Height Fields",
+  year =         "1988",
+  type =         "Technical Report",
+  number =       "YALEU/DCS/RR-639",
+  institution =  "Yale University Dept. of Computer Science Research",
+  keywords =     "parallel processing",
+  annote =       "An implementation of ray tracing using Linda. \\ A
+                 fast algorithm for ray tracing height fields is
+                 presented. The algorithm employs a modified Bresenham
+                 DDA to traverse a two dimensional array of height
+                 values. At each cell the altitude of the ray is
+                 compared with the heights of the four corners of the
+                 cell; ray/object intersections need only be calculated
+                 when the altitude of the ray is in the range of those
+                 heights. The average number of ray/object intersections
+                 performed is about two per ray; the two objects tested
+                 for intersection are located in $O(\sqrt{N-1})$ time
+                 where $N$ is the number of height values in the
+                 field.",
+  who = "Havran Vlastimil: RT-0134",
+}
+
+@InProceedings{Chapman90,
+  author =       "John Chapman and Thomas W. Calvert and John Dill",
+  title =        "Exploiting Temporal Coherence in Ray Tracing",
+  booktitle =    "Proceedings of Graphics Interface '90",
+  pages =        "196--204",
+  publisher =    "Canadian Information Processing Society",
+  address =      "Toronto, Ontario",
+  month =        may,
+  year =         "1990",
+  keywords =     "animation, temporal coherence",
+  who = "Havran Vlastimil: RT-0133",
+}
+
+@InProceedings{Woo:1990:VOT,
+  author =       "Andrew Woo and John Amanatides",
+  title =        "Voxel Occlusion Testing: {A} Shadow Determination
+                 Accelerator for Ray Tracing",
+  pages =        "213--220",
+  booktitle =    "Proceedings of Graphics Interface '90",
+  year =         "1990",
+  month =        may,
+  conference =   "held in Halifax, Nova Scotia; 14-18 May 1990",
+  keywords =     "grid, intersection culling, occlusion, penumbra, ray
+                 tracing, shadows, umbra, voxel traversal",
+  annote =       "A shadow determination accelerator for ray tracing is
+                 presented. It is built on top of the uniform voxel
+                 traversal grid structure. The accelerator proves to be
+                 rather efficient, requires little additional memory and
+                 the worst case scenario per shadow determination just
+                 reduces down to traditional voxel traversal. It can
+                 also be extended to model linear, area lights, as well
+                 as atmospheric shadows.",
+  who = "Havran Vlastimil: RT-0132",
+}
+
+@InProceedings{Jevans92,
+  author =       "David Jevans",
+  title =        "Object Space Temporal Coherence for Ray Tracing",
+  booktitle =    "Proceedings of Graphics Interface '92",
+  pages =        "176--183",
+  publisher =    "Canadian Information Processing Society",
+  address =      "Toronto, Ontario",
+  month =        may,
+  year =         "1992",
+  keywords =     "temporal coherence, efficiency, space subdivision",
+  who = "Havran Vlastimil: RT-0131",
+}
+
+@InProceedings{Woo:1992:RTP,
+  author =       "Andrew Woo",
+  title =        "Ray tracing polygons using spatial subdivision",
+  pages =        "184--191",
+  booktitle =    "Proceedings of Graphics Interface '92",
+  year =         "1992",
+  month =        may,
+  conference =   "held in Vancouver, B.C.; 11-15 May 1992",
+  keywords =     "intersection culling, subdivision, voxel traversal",
+  who = "Havran Vlastimil: RT-0130",
+}
+
+@InProceedings{Marton95a,
+  author =       "Gabor Marton",
+  editor =       "H.P. Seidel, B. Girod, H. Niemann",
+  title =        "Surfaces for Ray Tracing: A Fast View-Dependent Algorithm",
+  booktitle =    "Proceedings of 3D Image Analysis and Synthesis '97",
+  pages =        "19--26",
+  year =         "1997",
+  month =   nov,
+  who = "Havran Vlastimil: RT-0129",
+}
+
+@InCollection{Marton95b,
+  author =       "Gabor Marton",
+  editor =       "Alan W. Paeth",
+  title =        "Acceleration of Ray Tracing via Voronoi Diagrams",
+  booktitle =    "Graphics Gems V",
+  pages =        "268--284",
+  publisher =    "Academic Press",
+  address =      "Boston MA",
+  year =         "1995",
+  who = "Havran Vlastimil: RT-0128",
+}
+
+@InCollection{Moeller95a,
+  author =       "Tomas Moeller",
+  editor =       "Alan W. Paeth",
+  title =        "A Linear-time simple bounding volume algorithm",
+  booktitle =    "Graphics Gems V",
+  pages =        "242--257",
+  publisher =    "Academic Press",
+  address =      "Boston MA",
+  year =         "1995",
+  who = "Havran Vlastimil: RT-0127",
+}
+
+@InCollection{Wu93a,
+  author =       "Xiaolin Wu",
+  editor =       "David Kirk",
+  title =        "A Linear-time simple bounding volume algorithm",
+  booktitle =    "Graphics Gems III",
+  pages =        "301-306",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1992",
+  who = "Havran Vlastimil: RT-0126",
+}
+
+@Unpublished{Subramanian91a,
+ author = "K.R. Subramanian and D.S. Fussel",
+  title = "Applying Space Subdivision Techniques to Volume Rendering",
+  pages = 9,
+  institution = "The University of Texas at Austin",
+  year = 1991,
+  note = "from WWW",
+  who = "Havran Vlastimil: RT-0125",
+}
+
+@TechReport{Subramanian92a,
+  author = "K.R. Subramanian and D.S. Fussel",
+  title = "A Search Structure based on K-d Trees for Efficient Ray Tracing",
+  pages = 39,
+  institution = "The University of Texas at Austin",
+  year = 1992,
+  number = "Tx 78712-1188",
+  who = "Havran Vlastimil: RT-0124",
+}
+
+@TechReport{Subramanian90a,
+  author = "K.R. Subramanian and D.S. Fussel",
+  title = "Factors Affecting Performance of Ray Tracing Hierarchies",
+  pages = 27,
+  institution = "The University of Texas at Austin",
+  year = 1990,
+  month = jul,
+  number = "Tx 78712",
+  who = "Havran Vlastimil: RT-0123",
+}
+
+@Unpublished{Duc97a,
+  author = "N.C. Duc",
+  title = "An exploration of coherence-based acceleration methods
+using the ray tracing kernel G/GX",
+  year = 1997,
+  month = mar,
+  note = "from WWW",
+  who = "Havran Vlastimil: RT-0122",
+}
+
+@InProceedings{Groeller93a,
+  author =       "E. Groeller",
+  title =        "Oct-tracing animation sequences",
+  pages =        "96--101",
+  booktitle =    "Summer school in computer graphics in Bratislava (SCCG93)",
+  year =         "1993",
+  month =        jun,
+  keywords =     "ray tracing",
+  who  = "Havran Vlastimil: RT-0121",
+}
+
+@InProceedings{Martinka94,
+  author =       "J. Martinka",
+  title =        "Pouzitie octree struktury na urychlenie metody ray tracing",
+  booktitle =    "Winter School of Computer Graphics 1994",
+  year =         "1994",
+  month =        "feb",
+  pages =        "106--112",
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, February 1994",
+  who = "Havran Vlastimil: RT-0120",
+}
+
+@InProceedings{Kolingerova92,
+  author =       "I. Kolingerova",
+  title =        "Vyuziti dualniho prostoru pro metodu sledovani paprsku",
+  booktitle =    "Winter School of Computer Graphics 1992",
+  year =         "1992",
+  month =        "feb",
+  pages =        "66--80",
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, February 1992",
+  who = "Havran Vlastimil: RT-0119",
+}
+
+@Article{Arvo88a,
+  author="J. Arvo",
+  title="Linear-time Voxel Walking for Octrees",
+  journal="Ray Tracing News (available at htpp://www.acm.org/tog/resources/RTNew
+s/html/rtnews2d.html)",
+  year="1988",
+  editor = "Eric Haines",
+  volume="1",
+  number="5",
+  pages="",
+  owner  = "Havran Vlastimil: RT-0118",
+}
+
+@InProceedings{Sramek92a,
+  author =       "M. \v{S}r\'{a}mek",
+  title =        "Ray tracing volume data with subvoxel precision",
+  booktitle =    "Winter School of Computer Graphics 1992",
+  year =         "1992",
+  month =        feb,
+  pages = "47--65",
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, February 1992",
+  who = "Havran Vlastimil: RT-0117",
+}
+
+@Unpublished{Schregle96a,
+  author = "Roland Schregle",
+  title = "t\_{}DistLight A Distributed Light Source Class for the Minimal Ray Tracer",
+  year = 1996,
+  month = sep,
+  note = "from WWW",
+  who = "Havran Vlastimil: RT-0116",
+}
+
+@InProceedings{Stuerzlinger94a,
+  author =       "Wolfgang Stuerzlinger and R.F. Tobler",
+  title =        "Two Optimization Methods for Raytracing",
+  pages =        "104--107",
+  booktitle =    "Summer school in computer graphics in Bratislava (SCCG94)",
+  year =         "1994",
+  month =        jun,
+  keywords =     "ray tracing",
+  who  = "Havran Vlastimil: RT-0115",
+}
+
+@Misc{Qual96a,
+  author =    "Matthew Quail",
+  title =     "Space Time Ray Tracing using Ray Classification",
+  howpublished = "Bachelor thesis",
+  year =      "1996",
+  month =     nov,
+  who  = "Havran Vlastimil: RT-0114",
+}
+
+@InProceedings{Stuerzlinger96a,
+  author =       "Wolfgang Stuerzlinger",
+  title =        "Bounding Volume Construction using Point Clouds",
+  pages =        "239--246",
+  booktitle =    "Summer school in computer graphics in Bratislava (SCCG96)",
+  year =         "1996",
+  month =        jun,
+  keywords =     "bounding volume, bounding volume hierarchy, ray tracing",
+  who  = "Havran Vlastimil: RT-0113",
+}
+
+@Unpublished{Smith95a,
+  author = "Otto J.A. Smith",
+  title = "Ray-Tracing with Affine Transforms",
+  year = 1995,
+  month = jan,
+  note = "from WWW",
+  who = "Havran Vlastimil: RT-0112",
+}
+
+@Unpublished{Cak96a,
+  author = "S. Cak",
+  title = "An Effective Rendering System for Visual Realism",
+  year = 1996,
+  month = dec,
+  note = "from WWW",
+  who = "Havran Vlastimil: RT-0111",
+}
+
+@MastersThesis{Duc96a,
+  author =       "N.C. Duc",
+  title =        "Adaptives Verfahren zur Beschleunigung der generativen
+                  3D-Grafikberechnung",
+  school =       "Technical University Dresden",
+  year =         "1996",
+  month =     "july",
+  note =      "in German",
+  who = "Havran Vlastimil: RT-0110",
+}
+
+@Unpublished{Fellner93b,
+  author = "D.W. Fellner",
+  title = "Extensible Image Synthesis",
+  pages = "1--18",
+  year = 1993,
+  month = apr,
+  note = "from WWW",
+  anote = "similar to RT-0108",
+  who = "Havran Vlastimil: RT-0109",
+}
+
+@Unpublished{Fellner93a,
+  author = "D.W. Fellner",
+  title = "Extensible Image Synthesis",
+  pages = "1--14",
+  year = 1993,
+  month = apr,
+  note = "from WWW",
+  anote = "similar to RT-0109",
+  who = "Havran Vlastimil: RT-0108",
+}
+
+@Unpublished{Aguado96,
+  author = "F.A. Aguado and F. F. Perez and A. Formella",
+  title = "Fast Ray Tracing for Microcellular and Indoor Environments",
+  pages = "1--4",
+  year = 1996,
+  month = mar,
+  note = "concerns radio waves",
+  who = "Havran Vlastimil: RT-0107",
+}
+
+@TechReport{Teller96rep,
+  author = "S. Teller and K. Bala and J. Dorsey",
+  title = "Conservative Interpolants for Ray Tracing",
+  pages = "1--13",
+  institution = "MIT",
+  year = 1996,
+  month = apr,
+  number = "MIT/LCS/TM-549",
+  who = "Havran Vlastimil: RT-0106",
+}
+
+@InCollection{Woo90a,
+  author =       "Andrew Woo",
+  editor =       "Andrew S. Glassner",
+  title =        "Fast Ray-Box Intersection",
+  booktitle =    "Graphics Gems",
+  pages =        "395--396",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1990",
+  keywords =     "efficiency",
+  who = "Havran Vlastimil: RT-0105",
+}
+
+@InCollection{Woo90,
+  author =       "Andrew Woo",
+  editor =       "Andrew S. Glassner",
+  title =        "Fast Ray-Polygon Intersection",
+  booktitle =    "Graphics Gems",
+  pages =        "394",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1990",
+  keywords =     "efficiency",
+  note =         "includes code",
+  who = "Havran Vlastimil: RT-0104",
+}
+
+@InCollection{Haines91,
+  author =       "Eric Haines",
+  editor =       "James Arvo",
+  title =        "Fast Ray-Convex Polyhedron Intersection",
+  booktitle =    "Graphics Gems II",
+  pages =        "247--250",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1991",
+  keywords =     "efficiency",
+  note =         "includes code",
+  who = "Havran Vlastimil: RT-0103",
+}
+
+@InCollection{Ritter90,
+  author =       "Jack Ritter",
+  editor =       "Andrew S. Glassner",
+  title =        "A Simple Ray Rejection Test",
+  booktitle =    "Graphics Gems",
+  pages =        "385--386",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1990",
+  who = "Havran Vlastimil: RT-00102",
+}
+
+@InCollection{Cychosz92a,
+  author =       "Joseph M. Cychosz",
+  editor =       "David Kirk",
+  title =        "Use of Residency Masks and Object Space Partitioning
+                 to Eliminate Ray-Object Intersection Calculations",
+  booktitle =    "Graphics Gems III",
+  pages =        "284--287",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1992",
+  who = "Havran Vlastimil: RT-0101",
+}
+
+@InCollection{Haines91a,
+  author =       "Eric Haines",
+  editor =       "James Arvo",
+  title =        "Efficiency Improvements for Hierarchy Traversal",
+  booktitle =    "Graphics Gems II",
+  pages =        "267--273",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1991",
+  keywords =     "efficiency",
+  who = "Havran Vlastimil: RT-0100",
+}
+
+@InCollection{Pearce91,
+  author =       "Andrew Pearce",
+  editor =       "James Arvo",
+  title =        "A Recursive Shadow Voxel Cache for Ray Tracing",
+  booktitle =    "Graphics Gems II",
+  pages =        "273--274",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1991",
+  keywords =     "efficiency",
+  note =         "includes code",
+  who = "Havran Vlastimil: RT-0099",
+}
+
+@InCollection{Pearce91a,
+  author =       "Andrew Pearce",
+  editor =       "James Arvo",
+  title =        "Avoiding Incorrect Shadow Intersections for Ray
+                 Tracing",
+  booktitle =    "Graphics Gems II",
+  pages =        "275--276",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1991",
+  who = "Havran Vlastimil: RT-0098",
+}
+
+@InCollection{Voorhies91,
+  author =       "Douglas Voorhies and David Kirk",
+  editor =       "James Arvo",
+  title =        "Ray-Triangle Intersection Using Binary Recursive
+                 Subdivision",
+  booktitle =    "Graphics Gems II",
+  pages =        "257--263",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1991",
+  who = "Havran Vlastimil: RT-0097",
+}
+
+@InCollection{Kirk91,
+  author =       "David Kirk and James Arvo",
+  editor =       "James Arvo",
+  title =        "Improved Ray Tagging for Voxel-Based Ray Tracing",
+  booktitle =    "Graphics Gems II",
+  pages =        "264--266",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1991",
+  keywords =     "efficiency",
+  who = "Havran Vlastimil: RT-0096",
+}
+
+@InCollection{Cohen:1994:VTA,
+  author =       "Daniel Cohen",
+  editor =       "Paul Heckbert",
+  booktitle =    "Graphics Gems IV",
+  title =        "Voxel Traversal along a 3{D} Line",
+  publisher =    "Academic Press",
+  address =      "Boston",
+  pages =        "366--369",
+  year =         "1994",
+  keywords =     "digital line drawing, grid traversal, ray tracing,
+                 scan conversion",
+  summary =      "Visits all the voxels along a 3D line segment with
+                 integer endpoints, something like a 3D Bresenham's
+                 algorithm. This code could be modified to take
+                 endpoints with fixed point coordinates. Then the
+                 algorithm could be very useful for ray tracing, when a
+                 uniform grid is being used as a spatial data structure
+                 for optimization, or for volume rendering of grid data.
+                 Contains C code.",
+  who = "Havran Vlastimil: RT-0095",
+}
+
+@InProceedings{GARGANTINI:1995:EEI,
+  author =       "Irene GARGANTINI and J. H. G. REDEKOP",
+  title =        "Evaluating Exact Intersections of an Octree with Full
+                 Rays using only Radix-Sort and Meet Operations",
+  booktitle =    "Compugraphics '95",
+  pages =        "278--284",
+  year =         "1995",
+  month =        dec,
+  editor =       "Harold P. Santo",
+  note =         "ISBN 972-8342-00-4",
+  who = "Havran Vlastimil: RT-0094",
+}
+
+@InProceedings{Marton:1997:ACC,
+  author =       "L. {Szirmay-Kalos} and G. Marton",
+  title =        "On the Limitations of Worst--case Optimal Ray Shooting Algorithms",
+  booktitle =    "Winter School of Computer Graphics 1997",
+  year =         "1997",
+  month =        feb,
+  pages =        "562--571",
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, 14-18 February 1997",
+  who = "Havran Vlastimil: RT-0093",
+}
+
+@Article{strauss90a,
+  author =       "Paul S. Strauss",
+  title =        "A Realistic Lighting Model for Computer Animators",
+  journal =      "IEEE Computer Graphics and Applications",
+  pages =        "56--64",
+  volume =       "10",
+  number =       "6",
+  month =        nov,
+  year =         "1990",
+  keywords =     "modeling, lighting model, Torrance-Sparrow, Cook,
+                 Phong",
+  annote =       "Phong's illumination model is simple and widely used.
+                 However it is incomplete. Torrance-Sparrow and Cook's
+                 models produce results closer to the reality but its
+                 many parameters, often dependent between themselves,
+                 are difficult to tune to obtain desired results.
+                 Moreover inconsistencies can arise for given choices of
+                 parameters. Strauss introduces a reformulation of the
+                 standard illumination functions, trying to restrict the
+                 values of the parameters between 0 and 1 and to make
+                 them as independent as possible. This should make
+                 illumination easier for non-expert while an expert or
+                 someone desiring ``unrealistic'' effects could be
+                 penalized.",
+  who = "Havran Vlastimil: RT-0092",
+}
+
+@Article{Zemcik:1995:OCT,
+  author =       "Pavel Zemcik and Alan Chalmers",
+  title =        "Optimised {CSG} Tree Evaluation for Space
+                 Subdivision",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "14",
+  number =       "2",
+  pages =        "139--146",
+  month =        jun,
+  year =         "1995",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Tue Mar 17 15:44:38 MST 1998",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Technical Univ of Brno",
+  affiliationaddress = "Czech",
+  classification = "721.1; 723.2; 723.5; 921; 921.5; C4260
+                 (Computational geometry); C6120 (File organisation);
+                 C6130B (Graphics techniques)",
+  corpsource =   "Tech. Univ. of Brno, Czech Republic",
+  journalabr =   "Comput Graphics Forum",
+  keywords =     "Binary tree; Binary tree, Optimised CSG tree
+                 evaluation; Complex scenes; complex scenes;
+                 computational; computational geometry; Computational
+                 methods; Computational requirements; Computer graphics;
+                 computer graphics; Computer graphics; computer
+                 graphics; Computer images; Computer selection and
+                 evaluation; Constructive solid geometry; constructive
+                 solid geometry; Constructive solid geometry;
+                 constructive solid geometry; Data structures; Geometry;
+                 images; optimised CSG tree evaluation; Optimization;
+                 photorealistic; Photorealistic images; ray; Ray object
+                 intersection evaluations; Ray tracing; ray tracing; Ray
+                 tracing; Realistic computer images; realistic computer
+                 images; realistic images; Rendering; rendering;
+                 rendering (computer graphics); requirements; solid
+                 modelling; Space subdivision; space subdivision; Space
+                 subdivision; Status tree approach; status tree
+                 approach; structures; tracing; tree data",
+  thesaurus =    "Computational geometry; Ray tracing; Realistic images;
+                 Rendering [computer graphics]; Solid modelling; Tree
+                 data structures",
+  treatment =    "P Practical; T Theoretical or Mathematical",
+  who = "Havran Vlastimil: RT-0091",
+}
+
+@Article{Gervautz:1992:CSA,
+  author =       "Michael Gervautz",
+  title =        "Consistent schemes for addressing surfaces when ray
+                 tracing transparent {CSG} objects",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "11",
+  number =       "4",
+  pages =        "203--211",
+  month =        oct,
+  year =         "1992",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Technical Univ Vienna",
+  affiliationaddress = "Vienna, Austria",
+  classification = "723.1; 723.2; 741.1; 921.4; 931.2; C4260
+                 (Computational geometry); C6130B (Graphics
+                 techniques)",
+  corpsource =   "Inst. for Comput. Graphics, Tech. Univ. Vienna,
+                 Austria",
+  keywords =     "Asymmetric CSG-operators; asymmetric CSG-operators;
+                 Classification (of information); classification scheme;
+                 Classification scheme; classification scheme;
+                 computational geometry; constructive solid geometry;
+                 Constructive Solid Geometry (CSG) modelling; CSG
+                 modelling; CSG trees; Data representation, Constructive
+                 solid geometry; geometrical optics; Geometry; Graphic
+                 primitives; Image processing; Light refraction;
+                 Material boundaries; material boundaries; material
+                 properties; Material properties; material properties;
+                 Mathematical models; Mathematical operators; objects;
+                 properties; ray tracing; Ray tracing; Refraction;
+                 refraction; Set theory; shading; Shading; shading;
+                 solid modelling; surface; Surface properties; Surfaces;
+                 Three dimensional computer graphics; Transparency;
+                 transparent CSG; Transparent CSG objects; Trees
+                 (mathematics); Unambiguous model; unambiguous model;
+                 Visualization",
+  thesaurus =    "Computational geometry; Geometrical optics; Solid
+                 modelling",
+  treatment =    "P Practical; T Theoretical or Mathematical",
+  who = "Havran Vlastimil: RT-0090",
+}
+
+Article{Horvath:1992:RCB,
+  author =       "T. Horvath and G. Marton and P. Risztics and L.
+                 Szirmay-Kalos",
+  title =        "Ray coherence between a sphere and a convex
+                 polyhedron",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "11",
+  number =       "2",
+  pages =        "163--172",
+  month =        jun,
+  year =         "1992",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  classification = "C4240 (Programming and algorithm theory); C4260
+                 (Computational geometry); C6130B (Graphics
+                 techniques)",
+  corpsource =   "Dept. of Process Control, Tech. Univ. of Budapest,
+                 Hungary",
+  keywords =     "computational complexity; computational geometry;
+                 computer; Convex polyhedron; convex polyhedron;
+                 graphics; ray; ray coherence theorems; Ray coherence
+                 theorems; Ray tracing algorithms; Sphere; sphere;
+                 tracing algorithms",
+  thesaurus =    "Computational complexity; Computational geometry;
+                 Computer graphics",
+  treatment =    "T Theoretical or Mathematical",
+  who = "Havran Vlastimil: RT-0089",
+}
+
+@Article{Barequet:1996:BHR,
+  author =       "Gill Barequet and Bernard Chazelle and Leonidas J.
+                 Guibas and Joseph S. B. Mitchell and Ayellet Tal",
+  title =        "{BOXTREE}: {A} Hierarchical Representation for
+                 Surfaces in {3D}",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "15",
+  number =       "3",
+  pages =        "C387--C396, C484",
+  month =        sep,
+  year =         "1996",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Tue Mar 17 15:44:38 MST 1998",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Tel Aviv Univ",
+  affiliationaddress = "Tel Aviv, Isr",
+  affiliationaddress = "Isr",
+  classification = "723.2; 723.5; 921.4; C4260 (Computational geometry);
+                 C6120 (File organisation); C6130B (Graphics
+                 techniques)",
+  conference =   "Proceedings of the 1996 17th Annual Conference and
+                 Exhibition of the European Association for Computer
+                 Graphics, EUROGRAPHICS'96",
+  conflocation = "Poitiers, France; 26-30 Aug. 1996",
+  conftitle =    "European Association for Computer Graphics 17th Annual
+                 Conference and Exhibition. EUROGRAPHICS '96",
+  corpsource =   "Dept. of Comput. Sci., Tel Aviv Univ., Israel",
+  journalabr =   "Comput Graphics Forum",
+  keywords =     "Boxtree; Collision detection; Computational geometry;
+                 Data structures; Hierarchical systems; Octrees;
+                 Piecewise linear techniques; Ray shooting; Ray tracing;
+                 Surfaces; Three dimensional computer graphics",
+  keywords =     "3D representation; boxtree; BOXTREE; BSP trees;
+                 collision detection; Collision detection; computational
+                 geometry; Computational geometry; Data structures; data
+                 structures; hierarchical representation; Hierarchical
+                 systems; meshed surfaces; nested boxes; octrees;
+                 Octrees; Piecewise linear techniques; R-trees; Ray
+                 shooting; ray tracing; Ray tracing; ray tracing;
+                 surface fitting; Surfaces; Three dimensional computer
+                 graphics; three dimensional representation; tree; tree
+                 data structure; triangulated surfaces",
+  meetingaddress = "Poitiers, Fr",
+  meetingdate =  "Aug 26--30 1996",
+  meetingdate2 = "08/26--30/96",
+  sponsor =      "CNRS; ERCIM; BARCO; EDF; SUN; et al",
+  sponsororg =   "CNRS; BARCO; Electr. France; et al",
+  treatment =    "P Practical; T Theoretical or Mathematical",
+  who = "Havran Vlastimil: RT-0088",
+}
+
+@InProceedings{ENDL:1995:OOR,
+  author =       "Robert ENDL",
+  title =        "An Object-Oriented Ray Tracing Architecture for the
+                 Analysis of Ray-Generators in Spatial Subdivisions",
+  booktitle =    "Compugraphics '95",
+  pages =        "268--277",
+  year =         "1995",
+  month =        dec,
+  editor =       "Harold P. Santo",
+  note =         "ISBN 972-8342-00-4",
+  who = "Havran Vlastimil: RT-0087",
+}
+
+@InProceedings{Pharr:1997:RCS,
+  author =       "Matt Pharr and Craig Kolb and Reid Gershbein and Pat
+                 Hanrahan",
+  title =        "Rendering Complex Scenes with Memory-Coherent Ray
+                 Tracing",
+  booktitle =    "SIGGRAPH 97 Conference Proceedings",
+  editor =       "Turner Whitted",
+  series =       "Annual Conference Series",
+  year =         "1997",
+  organization = "ACM SIGGRAPH",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  pages =        "101--108",
+  note =         "ISBN 0-89791-896-7",
+  keywords =     "scene data management, caching, computation
+                 re-ordering, coherence",
+  annote =       "Simulating realistic lighting and rendering complex
+                 scenes are usually considered separate problems with
+                 incompatible solutions. Accurate lighting calculations
+                 are typically performed using ray tracing algorithms,
+                 which require that the entire scene database reside in
+                 memory to perform well. Conversely, most systems
+                 capable of rendering complex scenes use scan-conversion
+                 algorithms that access memory coherently, but are
+                 unable to incorporate sophisticated illumination. We
+                 have developed algorithms that use caching and lazy
+                 creation of texture and geometry to manage scene
+                 complexity. To improve cache performance, we increase
+                 locality of reference by dynamically reordering the
+                 rendering computation based on the contents of the
+                 cache. We have used these algorithms to compute images
+                 of scenes containing millions of primitives, while
+                 storing ten percent of the scene description in memory.
+                 Thus, a machine of a given memory capacity can render
+                 realistic scenes that are an order of magnitude more
+                 complex than was previously possible.",
+  who = "Havran Vlastimil: RT-0086",
+}
+
+@InProceedings{kalra89a,
+  author =       "Devendra Kalra and Alan H. Barr",
+  title =        "Guaranteed Ray Intersections with Implicit Surfaces",
+  pages =        "297--306",
+  booktitle = "SIGGRAPH '89 Proceedings",
+  journal =      "Computer Graphics (SIGGRAPH '89 Proceedings)",
+  volume =       "23",
+  number =       "3",
+  year =         "1989",
+  month =        jul,
+  editor =       "Jeffrey Lane",
+  conference =   "held in Boston, Massachusetts; 31 July -- 4 August
+                 1989",
+  keywords =     "implicit surfaces, ray tracing, rendering, sampling,
+                 subdivision, Lipschitz constant, root finding",
+  annote =       "Automatic interval finding for implicit surface
+                 intersection \\ In this paper, we present a robust and
+                 mathematically sound ray-intersection algorithm for
+                 implicit surfaces. The algorithm is guaranteed to
+                 numerically find the nearest intersection of the
+                 surface with a ray, and is guaranteed not to miss fine
+                 features of the surface. It does not require fine
+                 tuning or human choice of interactive parameters.
+                 Instead, it requires two upper bounds: ``L'' that
+                 limits the net rate of change of the implicit surface
+                 function $f(x,y,z)$ and ``G'' that limits the rate of
+                 change of the gradient. An implicit surface with these
+                 rate limits is referred to as an ``LG-implicit
+                 surface.'' \\ Existing schemes to intersect a ray with
+                 an implicit surface have typically been guaranteed to
+                 work only for a limited set of implicit functions, such
+                 as quadric surfaces or polynomials, or else have been
+                 ad-hoc and have not been guaranteed to work. Our
+                 technique significanty extends the ability to intersect
+                 rays with implicit surfaces in a guaranteed fashion.",
+  who = "Havran Vlastimil: RT-0085",
+}
+
+@Article{Woo:1993:ESC,
+  author =       "Andrew Woo",
+  title =        "Efficient shadow computations in ray tracing",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "13",
+  number =       "5",
+  pages =        "78--83",
+  month =        sep,
+  year =         "1993",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Fri Jan 5 07:58:42 MST 1996",
+  abstract =     "Two simple techniques speed up shadows in ray tracing.
+                 Both require little memory and easily extend to other
+                 types. One can also benefit radiosity- related
+                 computations.",
+  acknowledgement = ack-nhfb,
+  annote =       "Two simple techniques speed up shadows in ray tracing.
+                 Both require little memory and easily extend to other
+                 ray types. One can also benefit radiosity-related
+                 computations.",
+  who = "Havran Vlastimil: RT-0084",
+}
+
+@InProceedings{Milosmek:1994:AFV,
+  author =       "Milos Sramek",
+  title =        "An Algorithm for Fast Voxel Scene Traversal",
+  booktitle =    "Winter School of Computer Graphics 1994",
+  year =         "1994",
+  month =        jan,
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, 19-20 January 1994",
+  who = "Havran Vlastimil: RT-0083",
+}
+
+@InProceedings{rubin80a,
+  author =       "Steven M. Rubin and Turner Whitted",
+  title =        "A 3-Dimensional Representation for Fast Rendering of
+                 Complex Scenes",
+  pages =        "110--116",
+  booktitle =      "SIGGRAPH '80 Proceedings",
+  journal =      "Computer Graphics (SIGGRAPH '80 Proceedings)",
+  volume =       "14",
+  number =       "3",
+  year =         "1980",
+  month =        jul,
+  keywords =     "bounding volume, ray tracing cull, graphical
+                 data/base/structure representation, Methodologies,
+                 Techniques, Modeling scene, Algorithmic Aspects surface
+                 representation",
+  annote =       "hierarchical bounding boxes, used to speed up ray
+                 tracing and other algorithms \\ Hierarchical
+                 representations of 3-dimensional objects are both time
+                 and space efficient. They typically consist of trees
+                 whose branches represent bounding volumes and whose
+                 terminal nodes represent primitive object elements
+                 (usually polygons). This paper describes a method
+                 whereby the object space is represented entirely by a
+                 hierarchical data structure consisting of bounding
+                 volumes, with no other form of representation. This
+                 homogeneity allows the visible surface rendering to be
+                 performed simply and efficiently. \\ The bounding
+                 volumes selected for this algorithm are parallelepipeds
+                 oriented to minimize their sizes. With this
+                 representation, any surface can be rendered since in
+                 the limit the bounding volumes make up a point
+                 representation of the object. The advantage is that the
+                 visibility calculations consist only of a search
+                 through the data structure to determine the
+                 correspondence between terminal level bounding volumes
+                 and the current pixel. For ray tracing algorithms, this
+                 means that a simplified operation will produce the
+                 point of intersection of each ray with the bounding
+                 volumes. \\ Memory requirements are minimized by
+                 expanding or fetching lower levels of the hierarchy
+                 only when required. Because the viewing process has a
+                 single operation and primitive type, the software and
+                 hardware chosen to implement the search can be highly
+                 optimized for very fast execution.",
+  who = "Havran Vlastimil: RT-0082",
+}
+
+@Article{Kuzmin:1994:RTS,
+  author =       "Y. P. Kuzmin",
+  title =        "Ray Traversal of Spatial Structures",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "13",
+  number =       "4",
+  pages =        "223--227",
+  month =        oct,
+  year =         "1994",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  classification = "C6130B (Graphics techniques)",
+  corpsource =   "Dept. of Math. and Mech., Moscow State Univ., Russia",
+  keywords =     "computer graphics; Efficient algorithm; efficient
+                 algorithm; error accumulation; Error accumulation;
+                 error accumulation; errors; hardware implementation;
+                 Hardware implementation; hardware implementation;
+                 hierarchical spatial; Hierarchical spatial structures;
+                 integer operations; Integer operations; Logical
+                 operations; logical operations; ray; ray casting; Ray
+                 casting; ray casting; ray tracing; Ray tracing
+                 acceleration; ray traversal; Ray traversal; Software
+                 implementation; software implementation; structures;
+                 tracing acceleration; uniform spatial structures;
+                 Uniform spatial structures",
+  thesaurus =    "Computer graphics; Errors; Ray tracing",
+  treatment =    "P Practical; T Theoretical or Mathematical",
+  who = "Havran Vlastimil: RT-0081",
+}
+
+@Article{Akimoto:1991:PRT,
+  author =       "Takaaki Akimoto and Kenji Mase and Yasuhito Suenaga",
+  title =        "Pixel-selected ray tracing",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "11",
+  number =       "4",
+  pages =        "14--22",
+  month =        jul,
+  year =         "1991",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "NTT Corp, Kanagawa, Japan",
+  classification = "723; 741",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Computer Graphics; Image Processing --- Image Coding;
+                 Ray Tracing; ray tracing, acceleration; Three
+                 Dimensional Graphics",
+  who = "Havran Vlastimil: RT-0080",
+}
+
+
+@Article{McNeill:1992:PSS,
+  author =       "M. D. J. McNeill and B. C. Shah and M.-P. Hebert and
+                 P. F. Lister and R. L. Grimsdale",
+  title =        "Performance of space subdivision techniques in ray
+                 tracing",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "11",
+  number =       "4",
+  pages =        "213--220",
+  month =        oct,
+  year =         "1992",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Univ of Sussex",
+  affiliationaddress = "Brighton, Engl",
+  classification = "721.1; 722.4; 723.1; 723.2; 921.5; C4240P (Parallel
+                 programming and algorithm theory); C6120 (File
+                 organisation); C6130B (Graphics techniques)",
+  corpsource =   "Sch. of Eng., Sussex Univ., Brighton, UK",
+  keywords =     "algorithm; Algorithms; Computational complexity;
+                 computer graphics; Data structure; data structure; data
+                 structures; Data structures; dynamic; dynamic building;
+                 Dynamic building algorithm; Dynamic scenes; dynamic
+                 structure building; Dynamic structure building; dynamic
+                 structure building; Dynamic structure building
+                 algorithms; geometrical optics; Image parallelism
+                 performance; image parallelism performance; Image
+                 processing; Image quality; Image synthesis, Ray
+                 tracing; Optimization; parallel; parallel algorithms;
+                 Parallel processing systems; Performance; processing
+                 systems; ray tracing; Ray tracing; ray tracing;
+                 rendering; Rendering; rendering; scenes; Space
+                 subdivision algorithms; space subdivision algorithms;
+                 Three dimensional computer graphics",
+  thesaurus =    "Computer graphics; Data structures; Geometrical
+                 optics; Parallel algorithms",
+  treatment =    "P Practical; T Theoretical or Mathematical",
+  who = "Havran Vlastimil: RT-0079",
+}
+
+@InProceedings{sequin89a,
+  author =       "Carlo H. Sequin and Eliot K. Smyrl",
+  title =        "Parameterized Ray Tracing",
+  pages =        "307--314",
+  booktitle =    "SIGGRAPH '89 Proceedings",
+  journal =      "Computer Graphics (SIGGRAPH '89 Proceedings)",
+  volume =       "23",
+  number =       "3",
+  year =         "1989",
+  month =        jul,
+  editor =       "Jeffrey Lane",
+  conference =   "held in Boston, Massachusetts; 31 July -- 4 August
+                 1989",
+  keywords =     "ray tracing, rendering, parameterization, surface
+                 properties, runlength encoding, subexpression
+                 elimination, hashing",
+  annote =       "store ray tree data to allow quick material changes \\
+                 The construction and refinement of a computer graphics
+                 scene is unacceptably slow when using ray tracing. We
+                 introduce a new technique to speed up the generation of
+                 successive ray traced images when the geometry of the
+                 scene remains constant and only the light source
+                 intensities and the surface properties need to be
+                 adjusted. When the scene is first traced, an expression
+                 parameterized in the color of all lights and the
+                 surface property coefficients of all objects is
+                 calculated and stored for each pixel. Redisplaying a
+                 scene with a new set of lights and colors then consists
+                 of substituting values for the corresponding parameters
+                 and re-evaluating the expressions for the pixels. This
+                 parameter updating and redisplay takes only a few
+                 seconds, as compared to the many minutes or hours
+                 required to ray trace the entire scene again, but it
+                 uses much more memory and disk space. With suitable
+                 expression sharing, however, these storage needs can be
+                 reduced to an acceptable level.",
+  who = "Havran Vlastimil: RT-0078",
+}
+
+@InProceedings{hart89a,
+  author =       "John C. Hart and Daniel J. Sandin and Louis H.
+                 Kauffman",
+  title =        "Ray Tracing Deterministic 3-{D} Fractals",
+  pages =        "289--296",
+  booktitle =      "Computer Graphics (SIGGRAPH '89 Proceedings)",
+  volume =       "23",
+  number =       "3",
+  year =         "1989",
+  month =        jul,
+  editor =       "Jeffrey Lane",
+  conference =   "held in Boston, Massachusetts; 31 July -- 4 August
+                 1989",
+  keywords =     "fractal",
+  annote =       "As shown in 1982, Julia sets of quadratic functions as
+                 well as many other deterministic fractals exist in
+                 spaces of higher dimensionality than the complex plane.
+                 Originally a boundary-tracking algorithm was used to
+                 view these structures but required a large amount of
+                 storage space to operate. By ray tracing these objects,
+                 the storage facilities of a graphics workstation frame
+                 buffer are sufficient. A short discussion of a specific
+                 set of 3-D deterministic fractals precedes a full
+                 description of a ray-tracing algorithm applied to these
+                 objects. A comparision with the boundary-tracing method
+                 and applications to other 3-D deterministic fractals
+                 are also included.",
+  who = "Havran Vlastimil: RT-0077",
+}
+
+@InProceedings{Marton:1995:ACC,
+  author =       "G. Marton and L. {Szirmay-Kalos}",
+  title =        "On Average-case Complexity of Ray Tracing Algorithms",
+  booktitle =    "Winter School of Computer Graphics 1995",
+  year =         "1995",
+  month =        feb,
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, 14-18 February 1995",
+  who = "Havran Vlastimil: RT-0076",
+}
+
+@InProceedings{painter89a,
+  author =       "James Painter and Kenneth Sloan",
+  title =        "Antialiased Ray Tracing by Adaptive Progressive
+                 Refinement",
+  pages =        "281--288",
+  booktitle =      "Computer Graphics (SIGGRAPH '89 Proceedings)",
+  journal =      "Computer Graphics (SIGGRAPH '89 Proceedings)",
+  volume =       "23",
+  number =       "3",
+  year =         "1989",
+  month =        jul,
+  editor =       "Jeffrey Lane",
+  conference =   "held in Boston, Massachusetts; 31 July -- 4 August
+                 1989",
+  keywords =     "adaptive sampling, antialiasing, filtering,
+                 progressive refinement, ray tracing",
+  annote =       "We describe an antialiasing system for ray tracing
+                 based on adaptive progressive refinement. The goals of
+                 the system are to produce high quality antialiased
+                 images at a modest average sample rate, and to refine
+                 the image progressively so that the image is available
+                 in a usable form early and is refined gradually toward
+                 the final result. \\ The method proceeds by adaptive
+                 stochastic sampling of the image plane, evaluation of
+                 the samples by ray tracing, and image reconstruction
+                 from the samples. Adaptive control of the sample
+                 generation process is driven by three basic goals:
+                 coverage of the image, location of features, and
+                 confidence in the values at a distinguished ``pixel
+                 level'' resolution. \\ A three-stage process of
+                 interpolating, filtering, and resampling is used to
+                 reconstruct a regular grid of display pixels. This
+                 reconstruction can be either batch or incremental.",
+  who  = "Havran Vlastimil: RT-0075",
+}
+
+@InProceedings{Foris:1996:RSL,
+  author =       "T. Foris and G. Marton and L. {Szirmay-Kalos}",
+  title =        "Ray Shooting in Logarithmic Time",
+  booktitle =    "Winter School of Computer Graphics 1996",
+  year =         "1996",
+  month =        feb,
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, 12-16 February 1996",
+  who  = "Havran Vlastimil: RT-0074",
+}
+
+@Article{sweeney86a,
+  author =       "Michael Sweeney and Richard H. Bartels",
+  title =        "Ray Tracing Free-Form {B}-Spline Surfaces",
+  pages =        "41",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "6",
+  number =       "2",
+  year =         "1986",
+  month =        feb,
+  annote =       "We present a method for using ray tracing to render
+                 spline surfaces--one that is suitable for any object
+                 generated from control vertices via tensor-product
+                 B-splines. The method derives from Kajiya's work on ray
+                 tracing procedurally defined surfaces and make use of
+                 two preprocessing steps. One involves the
+                 control-vertex refinement recurrences due to Riesenfeld
+                 {\em et al}.\ and the second generates a tree of nested
+                 bounding boxes. Intersection testing involves running
+                 Kajiya's algorithm on the tree, followed by two or
+                 three (on the average) iterations of Newton's method.",
+  who  = "Havran Vlastimil: RT-0073",
+}
+
+@InProceedings{Pharr:1996:GCR,
+  author =       "Matt Pharr and Pat Hanrahan",
+  title =        "Geometry Caching for Ray-Tracing Displacement Maps",
+  booktitle =    "Eurographics Rendering Workshop 1996",
+  editor =       "Xavier Pueyo and Peter Schr{\"{o}}der",
+  year =         "1996",
+  organization = "Eurographics",
+  publisher =    "Springer Wein",
+  address =      "New York City, NY",
+  month =        jun,
+  pages =        "31--40",
+  note =         "ISBN 3-211-82883-4",
+  annote =       "We present a technique for rendering displacement
+                 mapped geometry in a ray-tracing renderer. Displacement
+                 mapping is an important technique for adding detail to
+                 surface geometry in rendering systems. It allows
+                 complex geometric variation to be added to simpler
+                 geometry, without the cost in geometric complexity of
+                 completely describing the nuances of the geometry at
+                 modeling time and with the advantage that the detail
+                 can be added adaptively at rendering time. The cost of
+                 displacement mapping is geometric complexity. Renderers
+                 that provide it must be able to efficiently render
+                 scenes that have effectively millions of geometric
+                 primitives. Scan-line renderers process primitives one
+                 at a time, so this complexity doesn't tax them, but
+                 traditional ray-tracing algorithms require random
+                 access to the entire scene database, so any part of the
+                 scene geometry may need to be available at any point
+                 during rendering. If the displaced geometry is fully
+                 instantiated in memory, it is straightforward to
+                 intersect rays with it, but displacement mapping has
+                 not yet been practical in ray-tracers due to the memory
+                 cost of holding this much geometry. We introduce the
+                 use of a geometry cache in order to handle the large
+                 amounts of geometry created by displacement mapping. By
+                 caching a subset of the geometry created and rendering
+                 the image in a coherent manner, we are able to take
+                 advantage of the fact that the rays spawned by
+                 traditional ray-tracing algorithms are spatially
+                 coherent. Using our algorithm, we have efficiently
+                 rendered highly complex scenes while using a limited
+                 amount of memory.",
+  who  = "Havran Vlastimil: RT-0072",
+}
+
+@Article{Musgrave:1990:NRT,
+  author =       "F. Kenton Musgrave",
+  title =        "A Note on Ray Tracing Mirages",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "10",
+  number =       "6",
+  pages =        "10--12",
+  month =        nov,
+  year =         "1990",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Yale Univ, New Haven, CT, USA",
+  annote =       "Discuss Berger's [berger90a] technique to render
+                 mirages, stressing mirages come more from internal
+                 interreflection than refraction.",
+  classification = "723; 741",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Bending Agent; Computer Graphics; Dispersive Ray
+                 Tracing; Image Processing; Light --- Reflection; Mirage
+                 Formation; mirages, internal reflection; Optics; Ray
+                 Tracing Mirages; Total Internal Reflection",
+  who  = "Havran Vlastimil: RT-0071",
+}
+
+@Article{Berger:1990:RTM,
+  author =       "Marc Berger and Terry Trout and Nancy Levit",
+  title =        "Ray Tracing Mirages",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "10",
+  number =       "3",
+  pages =        "36--41",
+  month =        may,
+  year =         "1990",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Univ of Adelaide, Adelaide, SA, Aust",
+  annote =       "Ray tracing has been used extensively to produce
+                 realistic images. Traditional algorithms simulate
+                 various optical phenomena, including reflections,
+                 refractions, and shadows. With all of these the
+                 direction of the ray changes only when it intersects an
+                 object. Atmospheric variations, however, can cause
+                 light rays to bend, thereby changing their direction at
+                 any time. Mirages are just one possible visual effect
+                 of these bent rays. We generate mirages by sending rays
+                 through an object with multiple air layers having
+                 different refractive indices. As a ray enters this
+                 virtual object, it strikes several air layers and
+                 causes repeated bending of the ray, which results in
+                 the mirage effect.",
+  classification = "723; 741",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Color; Computer Generated Images; Computer Graphics;
+                 Image Processing --- Image Analysis; Mirages; ray
+                 tracing; Ray Tracing",
+  who  = "Havran Vlastimil: RT-0070",
+}
+
+@Article{Maurel:1993:RT,
+  author =       "H. Maurel and Y. Duthen and R. Caubet",
+  title =        "A {4D} ray tracing",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "12",
+  number =       "3",
+  pages =        "C285--C294",
+  month =        "????",
+  year =         "1993",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  classification = "C4260 (Computational geometry); C6130B (Graphics
+                 techniques)",
+  conflocation = "Barcelona, Spain; 6-10 Sept. 1993",
+  conftitle =    "European Association for Computer Graphics 14th Annual
+                 Conference and Exhibition. EUROGRAPHICS '93",
+  corpsource =   "Inst. de Recherche en Inf. de Toulouse, Univ. Paul
+                 Sabatier, France",
+  keywords =     "4D ray tracing; Animation sequences; animation
+                 sequences; computer animation; graphics); illumination
+                 calculations; Illumination calculations; illumination
+                 calculations; intersection; Intersection; optical
+                 event; Optical event; optical event; ray tracing;
+                 rendering (computer; temporal coherence; Temporal
+                 coherence",
+  thesaurus =    "Computer animation; Ray tracing; Rendering [computer
+                 graphics]",
+  treatment =    "P Practical",
+  who = "Havran Vlastimil: RT-0069",
+}
+
+@PhDThesis{Simiakakis95,
+ author="G. Simiakakis",
+ title ="Accelerating RayTracing with Directional Subdivision and
+         Parallel Processing",
+ school = "University of East Anglia",
+ year = "1995",
+ month = "october",
+ note  = "available at ftp://ftp.sys.uea.ac.uk/pub/ah/G.Simiakakis\_PhD.ps",
+ who = "Havran Vlastimil: RT-0068",
+}
+
+@InProceedings{Cazals97,
+  author="F. Cazals and C. Puech",
+  title="Bucket-like space partitioning data-structures with
+         applications to ray-tracing",
+  booktitle="13th ACM Symposium on Computational Geometry",
+  address="Nice",
+  year="1997",
+  pages="To Appear",
+  who  	= "Havran Vlastimil: RT-0067",
+}
+
+@InCollection{Jansen:1986:DSR,
+      author =       "Frederik W. Jansen",
+      editor =       "L. R. A. Kessener and F. J. Peters and M. L. P. van
+		     Lierop",
+      title =        "Data Structures for Ray Tracing",
+      booktitle =    "Data Structures for Raster Graphics",
+      pages =        "57--73",
+      publisher =    "Springer-Verlag",
+      address =      "New York",
+      year =         "1986",
+      keywords =     "efficiency, CSG, BSP tree, data structures",
+      note =         "Eurographic Seminar",
+      anote =         "overview of published algorithms for ray tracing using
+		     spatial subdivision",
+      where = " MAJI V STK !!!!!",
+     who  	= "Havran Vlastimil: RT-0066",
+}
+
+@InProceedings{Semwal97,
+  author= "Semwal S and Kvarnstrom H",
+  title = "Directional Safe Zones \& Dual Extent Algorithms for Efficient
+	   Grid Traversal",
+  booktitle = "Graphics Interface 97",
+  year  = "1997",
+  pages = "to appear",
+  note  = "University of Colorado",
+  who  	= "Havran Vlastimil: RT-0065",
+}
+
+@Article{Levoy:1990:HRT,
+  author =       "Marc Levoy",
+  title =        "A Hybrid Ray Tracer for Rendering Polygon and Volume
+                 Data",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "10",
+  number =       "2",
+  pages =        "33--40",
+  month =        mar,
+  year =         "1990",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Univ of North Carolina, Dep of Comput Sci, Chapel
+                 Hill, NC, USA",
+  annote =       "Volume rendering is a technique for visualizing
+                 sampled functions of three spatial dimensions by
+                 computing 2D projections of a colored semitransparent
+                 volume. In this article I address the problem of
+                 extending volume rendering to handle polygonally
+                 defined objects. The solution I propose is a hybrid
+                 ray-tracing algorithm. Rays are simultaneously cast
+                 through a set of polygons and a volume data array.
+                 Samples of each are drawn at equally spaced intervals
+                 along the rays, and the resulting colors and opacities
+                 are composited together in depth-sorted order. To avoid
+                 aliasing of polygonal edges at modest computational
+                 expense, I use a form of selective supersampling. To
+                 avoid errors in visibility at polygon-volume
+                 intersections, I give special treatment to volume
+                 samples lying immediately in front of and behind
+                 polygons. I will evaluate the cost, image quality, and
+                 versatility of the algorithm using data from 3D medical
+                 imaging applications.",
+  classification = "461; 723",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Computer Graphics; Computer Programming ---
+                 Algorithms; Medical Applications; Polygon Data; Ray
+                 Tracing; Sampling; Selective Supersampling; Volume
+                 Rendering; volume rendering",
+  who  = "Havran Vlastimil: RT-0064",
+}
+
+@Article{Gargantini:1993:RTO,
+  author =       "I. Gargantini and H. H. Atkinson",
+  title =        "Ray tracing an octree: numerical evaluation of the
+                 first intersection",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "12",
+  number =       "4",
+  pages =        "199--210",
+  month =        oct,
+  year =         "1993",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  classification = "C1160 (Combinatorial mathematics); C4260
+                 (Computational geometry); C6120 (File organisation);
+                 C6130B (Graphics techniques)",
+  corpsource =   "Dept. of Comput. Sci., Univ. of Western Ontario,
+                 London, Ont., Canada",
+  keywords =     "based region octree; Bisecting planes; bisecting
+                 planes; computational geometry; data structures;
+                 directed graphs; directed semi-infinite straight-line;
+                 Directed semi-infinite straight-line; first; First
+                 intersection; Floating-point arithmetic; floating-point
+                 arithmetic; intersection; local ordering; Local
+                 ordering; numerical accuracy; Numerical accuracy;
+                 numerical accuracy; numerical evaluation; Numerical
+                 evaluation; numerical evaluation; octree; Octree;
+                 octree; pointer-; Pointer-based region octree; ray
+                 tracing; Ray tracing; tree",
+  thesaurus =    "Computational geometry; Directed graphs; Ray tracing;
+                 Tree data structures",
+  treatment =    "T Theoretical or Mathematical",
+      who  	= "Havran Vlastimil: RT-0063",
+}
+
+@Article{charney90a,
+        author =       "Mark J. Charney and Isaac D. Scherson",
+        title =        "Efficient Traversal of Well-Behaved Hierarchicial
+                       Trees of Extents for Ray-Tracing Complex Scenes",
+        journal =      "The Visual Computer",
+        pages =        "167--178",
+        volume =       "6",
+        number =       "3",
+        month =        jun,
+        year =         "1990",
+        keywords =     "ray tracing, hierarchy, bounding volumes, tree of
+                       extents, hte, hidden surface removal, traversal",
+        annote =       "Traversal of hierarchical trees of extents (HTE)
+                       requires computation of intersections between rays and
+                       bounding volumes whose faces are parallel to the
+                       cartesian axes. By redefining the HTE so that
+                       non-overlapping bounding volumes are generated, a
+                       well-behaved data structure is obtained in which
+                       `geometrical coherence'' is applied to speed up its
+                       traversal. We distinguish two types of bounding
+                       volumes: {\em internal} boxes contain the ray's origin
+                       while {\em external} bounding volumes do not contain
+                       the ray's origin. To traverse the HTE, we look first to
+                       polygons in the internal bounding volumes and external
+                       boxes are dealt with only when no ray-polygon
+                       intersection is found in internal nodes. As external
+                       nodes in the HTE define pruned subtrees of external
+                       bounding volumes, geometrical characteristics of the
+                       boxes are exploited for HTE traversal. A coding scheme
+                       allows a 6-bit code to determine which faces of a
+                       bounding volume need to be tested for intersection.
+                       Also, our well-behaved HTE allows for reuse of
+                       intersection points at lower levels of the tree.",
+	who  	= "Havran Vlastimil: RT-0062",
+}
+
+@Article{Cohen:1994,
+	author 	= "D.Cohen and Z.Sheffer", 
+	title  	= "Proximity clouds - an acceleration technique for 3D grid traversal",
+	journal = "The Visual Computer",
+	volume 	= "11",
+	pages 	= "27-38",
+	year 	= "1994",
+	keywords = "ray tracing, space subdivision, distance transformation,
+		   distance map, grid traversal",
+	who  	= "Havran Vlastimil: RT-0061",
+}
+
+@Article{Kok:1994:ECR,
+        author 	= "Arjan J. F. Kok and Frederik W. Jansen and C. Woodward",
+        title 	= "Efficient, Complete Radiosity Ray Tracing Using a
+                   Shadow-Coherence Method",
+        journal = "The Visual Computer",
+        volume	= "10",
+        pages	= "19--33",
+        year 	= "1993",
+	month 	= "oct",
+        bibsource = "sig-11-1993",
+	keywords = "rendering, radiosity, ray tracing, source selection,
+		shadow coherence",
+  	who  	= "Havran Vlastimil: RT-0060",
+}
+
+@Article{wyvill86d,
+  	author =       "G. Wyvill and T. L. Kunii and Y. Shirai",
+  title =        "Space Division for Ray Tracing in {CSG} (Constructive
+		 Solid Geometry)",
+  pages =        "28--34",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "6",
+  number =       "4",
+  year =         "1986",
+  month =        apr,
+  keywords =     "I35 CSG, I35 trees (mathematics), I37 ray tracing",
+  annote =       "A system of Constructive Solid Geometry (CSG) enables
+		 an engineering designer to compose three-dimensional
+		 shapes by combining simpler ones. Definitions of such
+		 objects are represented by tree structures or direct
+		 acyclic graphs. \\ Most existing systems convert this
+		 representation to a more conventional boundary
+		 representation of the solids in order to render
+		 pictures from the model. More recently, a number of
+		 systems have been described that render the pictures
+		 directly from the CSG structure. We describe such a
+		 system. We render a scene by ray tracing from a
+		 directed acyclic graph. This process is made efficient
+		 for large models by using an adaptive method of space
+		 division to reduce the number of intersection
+		 calculations needed.",
+  who  = "Havran Vlastimil: RT-0059",
+}
+
+@Article{Kok:1992:ASA,
+      author =       "Arjan J. F. Kok and Frederik W. Jansen",
+      title =        "Adaptive Sampling of Area Light Sources in Ray Tracing
+		     Including Diffuse Interreflection",
+      journal =      "Computer Graphics Forum (Eurographics '92)",
+      volume =       "11",
+      number =       "3",
+      address =      "Cambridge, UK",
+      pages =        "289--298",
+      month =        sep,
+      year =         "1992",
+      bibsource =    "sig-11-1994",
+  who  = "Havran Vlastimil: RT-0058",
+}
+
+@Article{Haines87,
+  author =       "Eric A. Haines",
+  title =        "A Proposal for Standard Graphics Environments",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "7",
+  number =       "11",
+  pages =        "3--5",
+  month =        nov,
+  year =         "1987",
+  keywords =     "benchmark",
+  note =         "also in SIGGRAPH '87, '88, '89 Introduction to Ray
+                 Tracing course notes, code available via FTP from
+                 princeton.edu:/pub/Graphics",
+  anote =         "renderer benchmarking environments and how to obtain
+                 them",
+  who  = "Havran Vlastimil: RT-0057",
+}
+
+@Article{glassner88a,
+      author =       "Andrew S. Glassner",
+      title =        "Spacetime ray tracing for animation",
+      journal =      "IEEE Computer Graphics and Applications",
+      pages =        "60--70",
+      volume =       "8",
+      number =       "2",
+      month =        mar,
+      year =         "1988",
+      keywords =     "animation, ray tracing cull",
+      annote =       "We are presenting techniques for the efficient ray
+                     tracing of animated scenes. These techniques are based
+                     on two central concepts: spacetime ray tracing, and a
+                     hybrid adaptive subdivision/bounding volume technique
+                     for generating efficient, nonoverlapping hierarchies of
+                     bounding volumes. \\ In spacetime ray tracing, instead
+                     of rendering dynamically moving objects in 3D space, we
+                     render static objects in 4D spacetime. To support
+                     spacetime ray tracing, we use 4-dimensional analogues
+                     to familiar 3-dimensional ray-tracing techniques. \\
+                     The new bounding volume hierarchy combines elements of
+                     adaptive space subdivision and bounding volume
+                     techniques. The quality of the hierarchy and its
+                     nonoverlapping character make it an improvement over
+                     previous algorithms, because both attributes reduce the
+                     number of ray/object intersections that must be
+                     computed. These savings are amplified in animation
+                     because of the much higher cost of computing ray/object
+                     intersections for motion-blurred animation. \\ We show
+                     it is possible to ray trace large animations more
+                     quickly with spacetime ray tracing using this hierarchy
+		     than with straightforward frame-by-frame rendering.",
+  who  = "Havran Vlastimil: RT-0056",
+}
+@Article{Elber:1997:RT,
+  author =       "Gershon Elber and {Jung-Ju} Choi and {Myung-Soo} Kim",
+  title =        "Ruled Tracing",
+  journal =      "The Visual Computer",
+  year =         "1997",
+  volume =       "13",
+  number =       "2",
+  pages =        "78--94",
+  publisher =    "Springer-Verlag",
+  note =         "ISSN 0178-2789",
+  annote =       "The traditional ray-tracing technique based on a
+                 ray-surface intersection is reduced to a ruled or
+                 developable surface-surface intersection problem. That
+                 enables direct freeform surface rendering. By
+                 exploiting the spatial coherence gained in the
+                 ruled/developable surface-tracing approach presented,
+                 the emulation of shadows, specular reflections, and/or
+                 refractions in a freeform surface environment can all
+                 be implemented efficiently. The approach provides a
+                 direct freeform surface-rendering alternative to ray
+                 tracing. An implementation of a direct freeform surface
+                 renderer that emulates shadows as well as specular
+                 reflections is discussed. This renderer processes
+                 isoparametric curves as its basic building block,
+                 eliminating the need for polygonal approximation.",
+  keywords =     "Ray tracing, light wavefronts, direct freeform surface
+                 rendering, shadow computation, reflection/refraction",
+  who  = "Havran Vlastimil: RT-0055",
+}
+
+@Article{Cazals:1995:FCH,
+  author =       "F. Cazals and G. Drettakis and C. Puech",
+  title =        "Filtering, Clustering and Hierarchy Construction: {A}
+                 New Solution for Ray-Tracing Complex Scenes",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "14",
+  number =       "3",
+  pages =        "C/371--382",
+  year =         "1995",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Fri Sep 13 06:22:32 MDT 1996",
+  acknowledgement = ack-nhfb,
+  classification = "C6130B (Graphics techniques); C6120 (File
+                 organisation); C6115 (Programming support)",
+  keywords =     "Hierarchy construction; Ray tracing; Complex scenes;
+                 Data structures; Input objects; Clustering step;
+                 Uniform grids; Memory requirements; Memory usage;
+                 Computational efficiency; HUG",
+  thesaurus =    "Automatic programming; Data structures; Ray tracing",
+  who  = "Havran Vlastimil: RT-0054",
+}
+ 
+@Article{Simiakakis:1994:FAS,
+ author=        "G. Simiakakis and A. M. Day",
+ title=         "Five-dimensional Adaptive Subdivision for Ray Tracing",
+ journal   =    "Com{\-}pu{\-}ter Graphics Forum",
+ volume    =    "13",
+ number    =    "2",
+ pages     =    "133--140",
+ month     =    jun,
+ year      =    "1994",
+ coden     =    "CGFODY",
+ ISSN      =    "0167-7055",
+ bibdate   =    "Fri Sep 13 06:30:31 MDT 1996",
+ acknowledgement  = ack-nhfb,
+ classification = "C6130B (Graphics techniques)",
+ keywords  =  "Five-dimensional adaptive subdivision; Ray tracing; Directional
+               subdivision method; Memory saving scheme",
+ pubcountry =   "UK",
+ thesaurus =    "Computer graphics; Ray tracing",
+ who  = "Havran Vlastimil: RT-0053",
+}
+
+@InCollection{Voorhies90,
+  author =       "Douglas Voorhies",
+  editor =       "James Arvo",
+  title =        "Space-Filling Curves and a Measure of Coherence",
+  booktitle =    "Graphics Gems",
+  pages =        "257--262",
+  publisher =    "Academic Press",
+  address =      "San Diego",
+  year =         "1990",
+  who  = "Havran Vlastimil: RT-0052",
+}
+
+@Article{Yagel:1992:DRT,
+  author =       "Roni Yagel and Daniel Cohen and Arie Kaufman",
+  title =        "Discrete Ray Tracing",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "12",
+  number =       "5",
+  pages =        "19--??",
+  month =        sep,
+  year =         "1992",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Fri Jan 5 07:58:42 MST 1996",
+  abstract =     "This ray tracing method, called 3D raster ray tracing,
+                 is insensitive to a scene's complexity and thus
+                 substantially improves computational speed over
+                 existing algorithms.",
+  acknowledgement = ack-nhfb,   
+  who  = "Havran Vlastimil: RT-0051",
+}
+
+InProceedings{Stolte:1995:DRT,
+  author =       "N. Stolte and R. Caubet",
+  title =        "Discrete Ray Tracing High Resolution {3D} Grids",
+  booktitle =    "Winter School of Computer Graphics 1995",
+  year =         "1995",
+  month =        feb,
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, 14-18 February 1995",
+  who  = "Havran Vlastimil: RT-0050",
+}
+
+@TechReport{EVL-1996-84,
+  author =       "S. Campagna and Ph. Slusallek",
+  title =        "Rendering of Quadric Surfaces According to the
+                 RenderMan-Standard",
+  number =       "5",
+  institution =  "Universit{\"a}t Erlangen-N{\"u}rnberg",
+  year =         "1996",
+  abstract =     "Rendering of high-quality pictures has two basic
+                 requirements: a renderer and a modeler. In practice,
+                 only the modeler has to comunicate with the renderer.
+                 Usually this is done by a specified file-format. Each
+                 renderer capable of that format has to produce pictures
+                 with exactly the desired surfaces, e.g. compared to a
+                 reference-platform. One popular and powerful format is
+                 the RenderMan Interface Bytestream Protocol by Pixar.
+                 Unfortunately, its specification is ambiguous in some
+                 cases. This paper clarifies the usage especially of the
+                 geometric primitives according to the
+                 RenderMan-Interface.",
+  postscript-url = "ftp://faui90.informatik.uni-erlangen.de/pub/Publications/1996/TR.1996.5.ps.gz",
+  postscript-url-md5 = "0ad1de6e9d65add7b740cfff92a03238",
+  evlib-url =    "http://infovis.zib.de:8000/Dienst/UI/2.0/Describe/evl.surfacerendering%2FEVL-1996-83",
+  evlib-revision = "1st",
+  who  = "Havran Vlastimil: RT-0049",
+}
+
+@TechReport{EVL-1996-83,
+  author =       "S. Campagna and W. Heidrich and Ph. Slusallek",
+  title =        "Rendering of Geometric Primitives According to the
+                 RenderMan-Standard",
+  number =       "5",
+  institution =  "Universit{\"a}t Erlangen-N{\"u}rnberg",
+  year =         "1996",
+  abstract =     "Rendering of high-quality pictures has two basic
+                 requirements: a renderer and a modeler. In practice,
+                 only the modeler has to comunicate with the renderer.
+                 Usually this is done by a specified file-format. Each
+                 renderer capable of that format has to produce pictures
+                 with exactly the desired surfaces, e.g. compared to a
+                 reference-platform. One popular and powerful format is
+                 the RenderMan Interface Bytestream Protocol by Pixar.
+                 Unfortunately, its specification is ambiguous in some
+                 cases. This paper clarifies the usage especially of the
+                 geometric primitives according to the
+                 RenderMan-Interface.",
+  postscript-url = "ftp://faui90.informatik.uni-erlangen.de/pub/Publications/1996/TR.1996.5.ps.gz",
+  postscript-url-md5 = "0ad1de6e9d65add7b740cfff92a03238",
+  evlib-url =    "http://infovis.zib.de:8000/Dienst/UI/2.0/Describe/evl.surfacerendering%2FEVL-1996-83",
+  evlib-revision = "1st",
+  who  = "Havran Vlastimil: RT-0048",
+}
+
+@InProceedings{Haines94,
+  author =       "Eric A. Haines and John R. Wallace",
+  editor =       "P. Brunet and F. W. Jansen",
+  title =        "Shaft Culling for Efficient Ray-Traced Radiosity",
+  booktitle =    "Photorealistic Rendering in Computer Graphics
+                 (Proceedings of the Second Eurographics Workshop on
+                 Rendering)",
+  publisher =    "Springer-Verlag",
+  address =      "New York, NY",
+  year =         "1994",
+  keywords =     "ray tracing",
+  note =         "also available via FTP from
+                 princeton.edu:/pub/Graphics/Papers",
+  anote =         "also in ACM SIGGRAPH '91 Course Notes - Frontiers in
+                 Rendering",
+  who  = "Havran Vlastimil: RT-0047",
+}
+
+@TechReport{Loofbourrow93,
+  author =       "Nathan Loofbourrow",
+  title =        "Optimizing ray tracing with visual coherence",
+  institution =  "Carnegie-Mellon University, Department of Computer
+                 Science",
+  number =       "CMU-CS-93-209",
+  year =         "1993",
+  keywords =     "adaptive sampling, nonuniform sampling, antialiasing,
+                 filtering, progressive refinement",
+  who  = "Havran Vlastimil: RT-0046",
+}
+
+@InProceedings{gunter96,
+  author =       "Gunter Raidl and Wilhelm Barth",
+  title =        "Fast Adaptive Previewing by Ray Tracing",
+  pages =        "(do not know)",
+  booktitle =    "Summer school in computer graphics in Bratislava (SCCG96)",
+  year =         "1996",
+  month =        jun,
+  keywords =     "ray tracing, previewing",
+  who  = "Havran Vlastimil: RT-0045",
+}
+
+@Article{MacDonald90,
+      author =       "J. David MacDonald and Kellogg S. Booth",
+      title =        "Heuristics for Ray Tracing Using Space Subdivision",
+      journal =      "Visual Computer",
+      pages =        "153--65",
+      publisher =    "Springer Verlag",
+      year =         "1990", 
+      volume =       "6",
+      number =       "6",
+     who  = "Havran Vlastimil: RT-0044",
+}
+
+@InCollection{Sung92,
+      author =       "Kelvin Sung and Peter Shirley",
+      editor =       "David Kirk",
+      title =        "Ray Tracing with the {BSP} Tree",
+      booktitle =    "Graphics Gems III",
+      pages =        "271--274",
+      publisher =    "Academic Press",
+      address =      "San Diego",
+      year =         "1992",
+      keywords =     "efficiency, BSP tree, octree",
+      note =         "includes code",
+ who  = "Havran Vlastimil: RT-0043",
+}
+
+@Article{Whang:1995:ORA,  
+ author =       "K. Y. Whang and J. W. Song and J. W. Chang and J. Y.
+                 Kim and W. S. Cho and C. M. Park and I. Y. Song",  
+ title =        "{Octree-R}: an adaptive octree for efficient ray tracing",
+ journal =      "IEEE Transactions on Visualization and Computer Graphics",  
+ year =         "1995",  
+ volume =       "1",
+ number =       "4",
+ pages =        "343--349",
+ month =        dec,
+ note =         "ISSN 1077-2626",
+ who  = "Havran Vlastimil: RT-0042",
+}
+
+@PhdThesis{Thompson:1991:RTA,
+        author =       "Karl Kelvin Thompson",
+        title =        "Ray tracing with amalgams",
+        month =        may,
+        year =         "1991",
+        type =         "Ph.D. Thesis",
+        school =       "University of Texas at Austin",
+        annote =       "Supervisors: Alan Bovik and Donald Fussell; Traditional ray tracing 
+	databases that use bounding volumes attach only geometric properties (e.g.
+	position, orientation, size) to each bounding volume. By also associating 
+	shading properties (e.g. color, translucency, reflectance) with each bounding 
+	volume, the database can become a multi-resolution database - a database that 
+	represents objects at different levels of detail. Specifically, the bounding
+	region itself may be rendered to coarsely represent the objects inside it. 
+	With a minor extension to the traditional ray tracing algorithm, a ray tracing 
+	renderer can traverse such a database with fewer intersection tests per ray, 
+	improving antialiasing, and (arguably) better asymptotic time complexity. The 
+	enhanced database and algorithm are particularly suited to scenes containing a 
+	large number of	primitives at a wide range of scales.",
+  who  = "Havran Vlastimil: RT-0041",
+}
+
+@Article{cleary88a,
+        author =       "John G. Cleary and Geoff Wyvill",
+        title =        "Analysis of an algorithm for fast ray tracing using
+                       uniform space subdivision",
+        journal =      "The Visual Computer",
+        pages =        "65--83",
+        volume =       "4",
+        number =       "2",
+        month =        jul,
+        year =         "1988",
+        keywords =     "rendering",
+        annote =       "Ray tracing is becoming popular as the best method of
+                       rendering high quality images from three dimensional
+                       models. Unfortunately, the computational cost is high.
+                       Recently, a number of authors have reported on ways to
+                       speed up this process by means of space subdivision
+                       which is used to minimize the number of intersection
+                       calculations. We describe such an algorithm together
+                       with an analysis of the factors which affect its
+                       performance. The critical operation of skipping an
+                       empty space subdivision can be done very quickly, using
+                       only integer addition and comparison. A theoretical
+                       analysis of the algorithm is developed. It shows how
+                       the space and time requirements vary with the number of
+                       objects in the scene.",
+  who  = "Havran Vlastimil: RT-0040",
+}
+
+@InProceedings{Arvo86-BRT,
+  author =       "James R. Arvo",
+  month =        aug,
+  year =         "1986",
+  title =        "Backward {Ray} {Tracing}",
+  booktitle =    "ACM SIGGRAPH '86 Course Notes - Developments in Ray
+                 Tracing",
+  volume =       "12",
+  keywords =     "light tracing",
+  comments =     "also appeared in ACM SIGGRAPH '89 Course Notes -
+                 Radiosity",
+  who  = "Havran Vlastimil: RT-0039",
+}
+
+@Article{Chuang:1995:NSS,
+  author =       "Jung-Hong Chuang and Weun-Jier Hwang",
+  title =        "A new space subdivision for ray tracing {CSG} solids",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "15",
+  number =       "6",
+  pages =        "56--62",
+  month =        nov,
+  year =         "1995",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Natl Chiao Tung Univ",
+  affiliationaddress = "Hsinchu, Taiwan",
+  classification = "721.1; 722.2; 723.2; 723.5; 921.4",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Algorithms; Computational complexity; Computational
+                 methods; Computer graphics; Computer simulation;
+                 Constructive solid geometry; Heuristic methods; Image
+                 processing; Ray tracing; Space subdivision; Trees
+                 (mathematics)",
+ who  = "Havran Vlastimil: RT-0038",
+}
+
+@Article{wolff90a,
+  author =       "Lawrence B. Wolff and David J. Kurlander",
+  title =        "Ray Tracing with Polarization Parameters",
+  journal =      "IEEE Computer Graphics and Applications",
+  pages =        "44--55",
+  volume =       "10",
+  number =       "6",
+  month =        nov,
+  year =         "1990",
+  keywords =     "ray tracing, lighting model, Torrance-Sparrow,
+                 Fresnel, polarization",
+  annote =       "Implement a polarization scheme for the reflection off
+                 surfaces with the Torrance-Sparrow illumination model.
+                 They use a technique suggested by Emil Wolf, a 2x2
+                 matrix that indicates the polarization state of the
+                 wavelength. \\ We demonstrate that incorporating
+                 polarization parameters into the lighting model can
+                 enhance the physical realism of images rendered with a
+                 ray tracer. Polarization effects can be importantin
+                 certain scenes, and the difference in rendering even
+                 simple scenes with and without proper treatment of
+                 polarization can be rather striking. All light waves
+                 possess a state of polarization, which changes almost
+                 every time light reflects off a material surface. A
+                 single reflection partially polarizes and may even
+                 completely polarize previously unpolarized light.
+                 Polarization influences the rendering of a scene
+                 because the reflected radiant intensity depends largely
+                 on the incident light wave's polarization state. \\ We
+                 have incorporated Emil Wolf's coherence matrix
+                 formalism for polarization into the Torrance-Sparrow
+                 reflectance model. This combination enables elegant
+                 quantitative derivations of the altered polarization
+                 state of light upon reflection in a ray tracer.
+                 Comparisons of identicala scenes rendered with a
+                 conventional ray tracer and our ray tracer.
+                 Incorporating a polarization model show that our method
+                 renders specular interobject reflections more
+                 accurately with respect to reflected radiance and
+                 color.",
+  who  = "Havran Vlastimil: RT-0037",
+}
+
+@Article{Endl:1994:CRU,
+  author =       "R. Endl and M. Sommer",
+  title =        "Classification of ray-generators in uniform
+                 subdivisions and octrees for ray tracing",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "13",
+  number =       "1",
+  pages =        "3--19",
+  month =        mar,
+  year =         "1994",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Fri Sep 13 06:30:31 MDT 1996",
+  acknowledgement = ack-nhfb,
+  classification = "C6130B (Graphics techniques); C6120 (File
+                 organisation); C6180 (User interfaces)",
+  keywords =     "Ray-generator classification; Uniform subdivisions;
+                 Octrees; Ray tracing; Spatial subdivisions; Ray-object
+                 intersections; Ray-cell sequence generation;
+                 X-ray-generators; Global time measurements; Random
+                 rays; Ray cell initialization; Ray cell determination",
+  pubcountry =   "UK",
+  thesaurus =    "Computer graphics; Ray tracing; Tree data structures",
+ who  = "Havran Vlastimil: RT-0036",
+}
+
+@Article{goldsmith87a,
+        author =       "Jeffrey Goldsmith and John Salmon",
+        title =        "Automatic Creation of Object Hierarchies for Ray
+                       Tracing",
+        pages =        "14--20",
+        journal =      "IEEE Computer Graphics and Applications",
+        volume =       "7",
+        number =       "5",
+        year =         "1987",
+        month =        may,
+        keywords =     "ray tracing cull, bounding volume",
+        annote =       "Intersection calculations dominate the run time of
+                       canonical ray tracers. A common algorithm to reduce the
+                       number of intersection tests required is the
+                       intersection of rays with a tree of extents, rather
+                       than the whole database of objects. A shortcomming of
+                       this method is that these trees are difficult to
+                       generate. Additionally, manually generated trees are
+                       poor, greatly reducing the run-time improvement
+                       available. We present methods for evaluation of these
+                       trees in approximate number of intersection
+                       calculations required and for automatic generation of
+                       good trees. These methods run in $O(n \log n)$ expected
+                       time where $n$ is the number of objects in the scene.
+                       Some examples of speedup are reported.",
+  who  = "Havran Vlastimil: RT-0035",
+}
+
+@InProceedings{arvo87a,
+        author =       "James Arvo and David Kirk",
+        title =        "Fast Ray Tracing by Ray Classification",
+        pages =        "55--64",
+        booktitle =    "(SIGGRAPH '87 Proceedings)",
+        volume =       "21",
+        number =       "4",
+        year =         "1987",
+        month =        jul,
+        editor =       "Maureen C. Stone",
+        conference =   "held in Anaheim, California; 27 -- 31 July 1987",
+        keywords =     "visible surface algorithms, extent, bounding volume,
+                       hierarchy, traversal, octree",
+        annote =       "five dimensional space subdivision \\ We describe a
+                       new approach to ray tracing which drastically reduces
+                       the number of ray-object and ray-bounds intersection
+                       calculations by means of 5-dimensional space
+                       subdivision. Collections of rays originating from a
+                       common 3D rectangular volume and directed through a 2D
+                       solid angle are represented as hypercubes in 5-space. A
+                       5D volume bounding the space of rays is dynamically
+                       subdivided into hypercubes, each linked to a set of
+                       objects which are candidates for intersection. Rays are
+                       classified into unique hypercubes and checked for
+                       intersection with the associated candidate object set.
+                       We compare several techniques for object extent
+                       testing, including boxes, spheres, plane-sets, and
+                       convex poyhedra. In addition, we examine optimizations
+                       made possible by the directional nature of the
+                       algorithm, such as sorting, caching and backface
+                       culling. Results indicate that this algorithm
+                       significantly outperforms previous ray tracing
+                       techniques, especially for complex environments.",
+ who  = "Havran Vlastimil: RT-0034",
+}
+
+@InCollection{Arvo:1990:RTM,
+  author =       "James Arvo",
+  title =        "Ray Tracing with Meta-Hierarchies",
+  year =         "1990",
+  month =        aug,
+  booktitle =    "SIGGRAPH '90 Advanced Topics in Ray Tracing course
+                 notes",
+  keywords =     "hierarchical space subdivision, octree, grid
+                 subdivision",
+  publisher = "ACM Press",
+  who  = "Havran Vlastimil: RT-0033",
+}
+
+@InProceedings{Cassen95,
+      author =       "Cassen T. and Subramanian K.R. and Michalewicz Z.",
+      title =        "Near-Optimal Construction of Partitioning Trees by
+		      Evolutionary Techniques",
+      booktitle =    "Proceedings of Graphics Interface '95",
+      pages =        "263--271",
+      address =      "Canada",
+      month =        jun,
+      year =         "1995",
+      keywords =     "BSP tree, genetic algorithms",
+ who  = "Havran Vlastimil: RT-0032",
+}
+
+@Article{Samet89,
+        author =       "Hanan Samet",
+        title =        "Implementing Ray Tracing with Octrees and Neighbor
+                       Finding",
+        journal =      "Computers and Graphics",
+        volume =       "13",
+        number =       "4",
+        pages =        "445--60",
+        year =         "1989",
+        keywords =     "octree",
+        note =         "includes code",
+        anote = "A Ray Tracing implementation is described that is based on 
+		an octree representation of a scene. Rays are traced through 
+		the scene by calculating the blocks through which they pass. 
+		This calculation is performed in a bottom-up manner through 
+		the use of neighbor finding. The octrees are assumed to be
+		implemented by a pointer representation.",
+ who  = "Havran Vlastimil: RT-0031",
+}
+
+@InProceedings{wallace89a,
+  author =       "John R. Wallace and Kells A. Elmquist and Eric A.
+                 Haines",
+  title =        "A Ray Tracing Algorithm for Progressive Radiosity",
+  pages =        "315--324",
+  booktitle =      "SIGGRAPH '89 Proceedings",
+  journal =      "Computer Graphics (SIGGRAPH '89 Proceedings)",
+  year =         "1989",
+  month =        jul,
+  conference =   "held in Boston, Massachusetts; 31 July -- 4 August
+                 1989",
+  keywords =     "radiosity, ray tracing, progressive refinement,
+                 distributed ray tracing, global illumination",
+  annote =       "calculating form-factors via ray tracing to avoid
+                 hemicube problems \\ A new method for computing
+                 form-factors within a progressive radiosity approach is
+                 presented. Previously, the progressive radiosity
+                 approach has depended on the use of the hemi-cube
+                 algorithm to determine form-factors. However, sampling
+                 problems inherent in the hemi-cube algorithm limit its
+                 usefulness for complex images. A more robust approach
+                 is described in which ray tracing is used to perform
+                 the numerical integration of the form-factor equation.
+                 The approach is tailored to provide good, approximate
+                 results for a low number of rays, while still providing
+                 a smooth continuum of increasing accuracy for higher
+                 number of rays. Quantitative comparisons between
+                 analytically derived form-factors and ray traced
+                 form-factors are presented.",
+  who  = "Havran Vlastimil: RT-0030",
+}
+
+
+@InProceedings{peng87a,
+      author =       "Qunsheng Peng and Yining Zhu and Youdong Liang",
+      title =        "A Fast Ray Tracing Algorithm Using Space Indexing
+                     Techniques",
+      pages =        "11--23",
+      booktitle =    "Eurographics '87",
+      year =         "1987",
+      month =        aug,
+      editor =       "G. Marechal",
+      publisher =    "North-Holland",
+      conference =   "European Computer Graphics Conference and Exhibition;
+                     held in Amsterdam, The Netherlands; 24 -- 28 August
+                     1987",
+      keywords =     "octree",
+      annote =       "A fast ray tracing algorithm is presented. Spatial
+                     coherency is exploited by adopting a linear octree data
+                     structure which corresponds to an adaptive partitioning
+                     of space. A ray strides over a number of empty regions
+                     aligning on its way and intersects the desired objects
+                     directly. Efficiency of the algorithm is achieved by
+                     decreasing the number of regions that the ray must be
+                     checked with, by reducing the computations involved in
+                     skipping an empty region and performing a binary search
+                     to find the next region. An efficient algorithm based
+                     on linear programming for mapping the whole environment
+                     into a sorted linear octree is also described. Only the
+                     terminal nodes containing boundary surfaces of objects
+                     are explicitly represented, which not only shortens the
+                     searching process but also leads to a considerable
+                     saving on storage space.",
+ who  = "Havran Vlastimil: RT-0029",
+}
+
+@InProceedings{Ward:1991:AST,
+      author =       "Gregory Ward",
+      title =        "Adaptive shadow testing for ray tracing",
+      booktitle =    "Eurographics Workshop on Rendering",
+      year =         "1991",
+      conference =   "held in Barcelona, Spain; 13-15 May 1991",
+      annote =       "Method for reducing the number of shadow rays for
+                     scenes with a large number of light sources. The
+                     sources are sorted on their contribution, and only for
+                     the most important sources rays are cast. The influence
+		     of the other sources is estimated statistically. Tests
+                     are done with different tolerances (threshold to
+                     determine whether sources are important) and
+                     certainties (rate of accuracy). The method gives good
+                     reduction and is able to find the most important
+                     shadows because it selects contrast as criterion.",
+ who  = "Havran Vlastimil: RT-0028",
+}
+
+@Article{Pradhan:1991:ACD, 
+ author = "B. S. S. Pradhan and A. Mukhopadhyay",
+ title  = "Adaptive cell division for ray tracing",
+ journal= "Computers and Graphics",
+ volume = "15",
+ number = "4",
+ pages  = "549--552",
+ year   = "1991",
+ coden  = "COGRD2",
+ ISSN   = "0097-8493",
+ bibdate= "Wed Feb 5 07:22:58 MST 1997",
+ acknowledgement= ack-nhfb,
+ affiliation="Indian Inst of Technology",
+ affiliationaddress="Kanpur, India",
+ classification="723",
+ journalabr="Comput Graphics (Pergamon)",
+ keywords="Computer Graphics; Data Processing--Data Structures; Three Dimensional Graphics",
+ who  = "Havran Vlastimil: RT-0027",
+}
+
+@Article{scherson87a,
+        author =       "Isaac D. Scherson and Elisha Caspary",
+        title =        "Data Structures and the Time Complexity of Ray
+                       Tracing",
+        pages =        "201--213",
+        journal =      "The Visual Computer",
+        volume =       "3",
+        number =       "4",
+        year =         "1987",
+        month =        dec,
+        annote =       "The time complexity of ray tracing is a function of
+                       the data structures used for space division. Octree and
+                       hierarchical extents have been suggested as effective
+                       choices. In this paper, complexity parameters are
+                       suggested to characterize images and show that both
+                       octrees and hierarchies are appropriate choices if
+                       given most favorable images. Also, a unified technique
+                       is proposed and shown to be better than previous
+                       methods for all images. Octrees and hierarchies are
+                       particular cases of the new proposed algorithm.",
+  who  = "Havran Vlastimil: RT-0026",
+}
+
+@InProceedings{Reinhard96,
+ author=	"Erik Reinhard and Arjan J. F. Kok and Frederik W. Jansen",
+ title =	"Cost Prediction in Ray Tracing",
+ booktitle=	"Rendering Techniques '96 (Proceedings of the Seventh Eurographics
+		Workshop on Rendering)",
+ pages=		"41--50",
+ publisher=	"Springer-Verlag/Wien",
+ address=	"New York, NY",
+ year=		"1996",
+ ISBN=		"3-211-82883-4",
+  who  = "Havran Vlastimil: RT-0025",
+} 
+
+@InProceedings{devillers89a,
+        author =       "Olivier Devillers",
+        title =        "The Macro-regions: an Efficient Space Subdivision
+                       Structure for Ray Tracing",
+        pages =        "27--38",
+        booktitle =    "Eurographics '89",
+        year =         "1989",
+        month =        sep,
+        editor =       "W. Hansmann and F. R. A. Hopgood and W. Strasser",
+        publisher =    "Elsevier / North-Holland",
+        conference =   "European Computer Graphics Conference and Exhibition;
+                       h eld in , ; -- September 1989",
+        annote =       "Ray tracing is the usual image synthesis technique
+                       which allows rendering of specular effects. The use of
+                       space subdivision for ray tracing optimization is
+                       studied. A new method of subdivision is proposed: the
+                       macro-regions. This structure allows a different
+                       treatment of the regions with a low density of
+                       information, and the regions with a high density of
+                       information. A theoretical and practical study of space
+                       subdivision methods--grid, octree--and the
+                       macro-regions structure is presented.",
+  who  = "Havran Vlastimil: RT-0024",
+}
+
+@Article{Stolte:1995:DRH,
+  author =       "N. Stolte and R. Caubet",
+  title =        "Discrete Ray-Tracing of Huge Voxel Spaces",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "14",
+  number =       "3",
+  pages =        "C/383--C/394",
+  month =        sep,
+  year =         "1995",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Fri Jul 18 14:10:31 1997",
+  acknowledgement = ack-nhfb,
+  classification = "C1160 (Combinatorial mathematics); C5470
+                 (Performance evaluation and testing); C6120 (File
+                 organisation); C6130B (Graphics techniques)",
+  conflocation = "Maastricht, Netherlands; 18 Aug.-1 Sept. 1995",
+  conftitle =    "EUROGRAPHICS '95",
+  corpsource =   "Inst. de Recherche en Inf. de Toulouse, France",
+  keywords =     "3D; 3D grid resolution; discrete ray tracing voxel
+                 spaces; Discrete ray tracing voxel spaces; discrete
+                 traversal; Discrete traversal; discrete traversal; grid
+                 resolution; Huge voxel spaces; huge voxel spaces;
+                 memory problem; Memory problem; octree; Octree;
+                 octrees; optimal times; Optimal times; optimal times;
+                 performance evaluation; Practical visualization
+                 algorithm; practical visualization algorithm; raster;
+                 Raster ray tracing; ray tracing; three dimensional DDA;
+                 Three dimensional DDA; three dimensional DDA",
+  thesaurus =    "Octrees; Performance evaluation; Ray tracing",
+  treatment =    "P Practical",
+  who  = "Havran Vlastimil: RT-0023",
+}
+
+
+@InProceedings{kay86a,
+        author =       "Timothy L. Kay and James T. Kajiya",
+        title =        "Ray Tracing Complex Scenes",
+        pages =        "269--278",
+        booktitle =    "SIGGRAPH '86 Proceedings)",
+        journal =      "Computer Graphics (SIGGRAPH '86 Proceedings)",
+        volume =       "20",
+        number =       "4",
+        year =         "1986",
+        month =        aug,
+        editor =       "David C. Evans and Rusell J. Athay",
+        conference =   "held in Dallas, Texas, August 18--22, 1986",
+        keywords =     "I37 ray tracing, cull, bounding volume",
+        annote =       "A new algorithm for speeding up ray-object
+                       intersection calculations is presented. Objects are
+                       bounded by a new type of extent, which can be made to
+                       fit convex hulls arbitrarily tightly. The objects are
+                       placed into a hierarchy. A new hierarchy traversal
+                       algorithm is presented which is efficient in the sense
+                       that objects along the ray are queried in an efficient
+                       order. \\ Results are presented which demonstrate that
+                       our technique is several times faster than other
+                       published algorithms. Furthermore, it is demonstrated
+                       that it is currently possible to ray trace scenes
+                       containing hundreds of thousands of objects.",
+  who  = "Havran Vlastimil: RT-0022",
+}
+
+@Article{Glassner:1984:SSF,
+        author =       "Andrew S. Glassner",
+        title =        "Space Subdivision For Fast Ray Tracing",
+        pages =        "15--22",
+        journal =      "IEEE Computer Graphics and Applications",
+        volume =       "4",
+        number =       "10",
+        year =         "1984",
+        month =        oct,
+        keywords =     "I35 Ray Tracing, culling, parallel processing,
+                       bounding volume, octree",
+        annote =       "use of octrees to speed intersection testing `If we
+                       want to reduce the time spent on ray-object
+                       intersections, we have at least two choices. We can
+                       speed up the intersection process itself, possibly with
+                       specialized hardware. Alternately, we can reduce the
+                       number of ray-object intersections that must be made to
+                       fully trace a given ray.''Goes onto to describe how to
+                       use octrees to reduce the number of intersection tests.
+                       Glassner proposes an octree as structure to partition
+                       space for faster ray tracing. The solution is
+                       interesting, but non-intuitive. It also has the problem
+                       of splitting objects among many octree nodes. Hence,
+                       the same object may be intersected multiple times per
+                       ray. Bleh!",
+  who  = "Havran Vlastimil: RT-0021",
+}
+
+@Article{Hsiung92,
+        author =       "Ping-Kang Hsiung and Robert H. Thibadeau",
+        title =        "Accelerating {ARTS}",
+        journal =      "The Visual Computer",
+        volume =       "8",
+        number =       "3",
+        pages =        "181--190",
+        month =        mar,
+        year =         "1992",
+        keywords =     "grid subdivision, hierarchical subdivision",
+        note =         "nested grid subdivision structures",
+  who  = "Havran Vlastimil: RT-0020",
+}
+
+@Article{fujimoto86a,
+        author =       "Akira Fujimoto and Takayuki Tanaka and Kansei Iwata",
+        title =        "{ARTS}: Accelerated Ray Tracing System",
+        pages =        "16--26",
+        journal =      "IEEE Computer Graphics and Applications",
+        volume =       "6",
+        number =       "4",
+        year =         "1986",
+        keywords =     "ray tracing cull, parallel processing, octree",
+        annote =       "Describes an encoding format, similar to octrees,
+                       which allows ray tracing to become as fast as other
+                       rendering methods for large databases. Good review of
+                       other techniques used to speed up ray tracing. Their
+                       method, SEADS (Spatially Enumerated Auxiliary Data
+                       Structures), {provides an environment for ray tracing
+                       that outpaces the hybrid octree approaches ... by an
+                       order of magnitude. Various experimental results have
+                       shown that the rendering time is virtually independent
+                       of the number of objects in the scene. When the number
+                       of objects is very large, ray tracing --- despite its
+                       reputation for ineffiency --- actually becomes faster
+                       than other rendering methods.} \\ In this paper, we
+                       propose algorithms that address the two basic problems
+                       encountered in generating continuous-tone images by ray
+                       tracing: speed and aliasing. We examine previous
+                       approaches to the problem and propose a scheme based on
+                       the coherency of an auxiliary data structure imposed on
+                       the original object domain. After investigating both
+                       simple spatial enumeration and a hybrid octree
+                       approach, we develop the 3DDDA, a 3D line generator,
+                       for efficient traversing of both structures. \\ 3DDDA
+                       provides an order of magnitude improvement in
+                       processing speed compared to other known ray-tracing
+                       methods. Processing time is found to be virtually
+                       independent of the number of objects involved in the
+                       scene. For large numbers of objects, this method
+                       actually becomes faster than scan-line methods. To
+                       remove jags from edges, a scheme for identifying edge
+                       orientation and distance from pixel center to true edge
+                       has been implemented. The time required for
+                       antialiasing depends on the total length of the edges
+                       encountered, but it is normally only a fractional
+                       addition to the time needed to produce the scene
+                       without antialiasing.",
+  who  = "Havran Vlastimil: RT-0019",
+}
+
+@InProceedings{bouatouch87a,
+        author =       "Kadi Bouatouch and M. O. Madani and Thierry Priol and
+                       Bruno Arnaldi",
+        title =        "A New Algorithm of Space Tracing Using a {CSG} Model",
+        pages =        "65--78",
+        booktitle =    "Eurographics '87",
+        year =         "1987",
+        month =        aug,
+        editor =       "G. Marechal",
+        publisher =    "North-Holland",
+        conference =   "European Computer Graphics Conference and Exhibition;
+                       held in Amsterdam, The Netherlands; 24 -- 28 August
+                       1987",
+        annote =       "This paper describes a new algorithm of space tracing.
+                       Scenes are modeled by a CSG tree. Space is subdivided
+                       regularly into 3D regions called boxes. With each box
+                       is associated a subtree which is the restriction of the
+                       whole scene CSG tree to primitives belonging to this
+                       box. A 3D grid is ued to access boxes.",
+  who  = "Havran Vlastimil: RT-0018",
+}
+
+@Article{Bouville:1985:GHQ,
+  author =       "C. Bouville and R. Brusq and J. L. Dubois and I.
+                 Marchal",
+  title =        "Generating High Quality Pictures by Ray-Tracing",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "4",
+  number =       "2",
+  pages =        "87--99",
+  month =        jun,
+  year =         "1985",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Cent Commun d'Etudes de Telediffusion et
+                 Telecommunications, Cesson-Sevigne, Fr",
+  affiliationaddress = "Cent Commun d'Etudes de Telediffusion et
+                 Telecommunications, Cesson-Sevigne, Fr",
+  classification = "723; 741; 921; A4210D (Wave-front and ray tracing in
+                 homogeneous media); C6130B (Graphics techniques)",
+  corpsource =   "Centre Commun d'Etudes de Telediffusion et
+                 Telecommun., Cesson-Sevigne, France",
+  keywords =     "algebraic surfaces; bodies of revolution --- Surfaces;
+                 casting; computational geometry; computer graphics;
+                 computer graphics --- Imaging Techniques; full lighting
+                 model; geometrical; high quality pictures developing;
+                 illumination model; image processing; lighting models;
+                 Mathematical Models; mathematical surface
+                 representation, design; optics; parallel; picture
+                 generation; processors; ray-; ray-casting technique;
+                 ray-tracing; surface of revolution; theoretical
+                 approach",
+  subject =      "J.6 Computer Applications, COMPUTER-AIDED ENGINEERING,
+                 Computer-aided design (CAD) \\ I.3.5 Computing
+                 Methodologies, COMPUTER GRAPHICS, Computational
+                 Geometry and Object Modeling, Curve, surface, solid,
+                 and object representations",
+  treatment =    "P Practical; T Theoretical or Mathematical",
+  who  = "Havran Vlastimil: RT-0017",
+}
+
+@Article{thomas89a,
+  author =       "D. Thomas and Arun N. Netravali and D. S. Fox",
+  title =        "Anti-aliased ray tracing with covers",
+  pages =        "325--336",
+  journal =      "Computer Graphics Forum",
+  volume =       "8",
+  number =       "4",
+  month =        dec,
+  year =         "1989",
+  publisher =    "North-Holland",
+  keywords =     "antialiasing",
+  annote =       "A fast and effective object space method for
+                 anti-aliasing ray-traced pictures is introduced.
+                 Traditionally, anti-aliasing has been done using
+                 super-sampling. However, this is costly since it
+                 requires casting large numbers of rays to obtain sample
+                 densities above the displayed pixel density. It is also
+                 wasteful since much of the information in these samples
+                 is discarded when they are filtered to yield the
+                 anti-aliasing pixels. We avoid these problems by
+                 performing the filtering in the object space using the
+                 geometry of ray-surface intersections rather than by
+                 casting extra rays. In addition, we only perform
+                 filtering at a pixel if edges are nearby. We detect
+                 these edges by observing the order in which the pixel's
+                 rays pass through cover surfaces constructed just
+                 inside and outside the surface of each object. Shadows,
+                 reflections and refractions can be anti-aliased using
+                 this method and a variety of object types can be
+                 handled including ellipsoids, polyhedra, and objects
+                 formed using set operations. \\ Our anti-aliasing gives
+                 high image quality that can only be approached by using
+                 super-sampling densities at least four times the
+                 display pixel density. Moreover, since the overhead of
+                 our method is small, it would take three to four times
+                 as long to render an anti-aliased image using
+                 super-sampling than it would with our method.
+                 Furthermore, covers allow sampling densities less than
+                 the displayed pixel density. When this is done,
+                 anti-aliased images can be rendered twice as fast as
+                 with no anti-aliasing and six to eight times as fast as
+                 when super-sampling is used for anti-aliasing.",
+  who  = "Havran Vlastimil: RT-0016",
+}
+
+@Article{Campagna:1997:RTS,
+  author =       "Swen Campagna and Philipp Slusallek and {Hans-Peter}
+                 Seidel",
+  title =        "Ray tracing of spline surfaces: {B}{\'{e}}zier
+                 clipping, {C}hebyshev boxing, and bounding volume
+                 hierarchy - a critical comparison with new results",
+  journal =      "The Visual Computer",
+  year =         "1997",
+  volume =       "13",
+  number =       "6",
+  pages =        "265--282",
+  publisher =    "Springer-Verlag",
+  note =         "ISSN 0178-2789",
+  keywords =     "ray tracing, spline surfaces, surface rendering",
+  annote =       "Ray tracing is a well-known rendering technique for
+                 producing high-quality and photorealistic pictures.
+                 Spline surfaces are also well known and widely used.
+                 Thus, there is the need for fast and robust methods for
+                 computing the intersections of rays with these
+                 surfaces. In this paper, we discuss and compare three
+                 recent geometric algorithms for solving the ray-patch
+                 intersection problem and present new results that are
+                 helpful in dealing with this problem.",
+  who  = "Havran Vlastimil: RT-0015",
+}
+
+@Article{Weghorst:1984:ICM,
+  author =       "Hank Weghorst and Gary Hooper and Donald P.
+                 Greenberg",
+  title =        "Improved Computational Methods for Ray Tracing",
+  journal =      "ACM Transactions on Graphics",
+  volume =       "3",
+  number =       "1",
+  pages =        "52--69",
+  month =        jan,
+  year =         "1984",
+  coden =        "ATGRDF",
+  ISSN =         "0730-0301",
+  annote =       "discussion of bounding volumes, hierarchical
+                 structures and the `item buffer'' \\ This paper
+                 describes algorithmic procedures that have been
+                 implemented to reduce the computational expense of
+                 producing ray-traced images. The selection of bounding
+                 volumes is examined to reduce the computational cost of
+                 the ray-intersection test. The use of object coherence,
+                 which relies on a hierarchical description of the
+                 environment, is then presented. Finally, since the
+                 building of the ray-intersection trees is such a large
+                 portion of the computation, a method using image
+                 coherence is described. This visible-surface
+                 preprocessing method, which is dependent upon the
+                 creation of an `item buffer,'' takes advantage of {\em
+                 a priori} image formation. Examples that indicate the
+                 efficiency of these techniques for a variety of
+                 representative environments are presented.",
+  keywords =     "bounding volume; I35 Ray Tracing",
+  who  = "Havran Vlastimil: RT-0014",
+}
+
+@InCollection{Kaplan:1987:USC,
+  author =       "Michael R. Kaplan",
+  title =        "The Use of Spatial Coherence in Ray Tracing",
+  booktitle =    "Techniques for Computer Graphics",
+  pages =        "173--193",
+  year =         "1987",
+  editor =       "David E. Rogers and Ray A. Earnshaw",
+  publisher =    "Springer Verlag",
+  keywords =     "octree",
+  annote =       "improved version of course notes article \\ Although
+                 ray tracing has proven to be a valuable technique in
+                 realistic image synthesis and a variety of other
+                 disciplines, it traditionally has not been viable in
+                 highly complex, unstructured environments. Spatial
+                 coherence algorithms for ray tracing are proposed as a
+                 solution to this problem, and the tradeoffs between
+                 various spatial coherence schemes are discussed.",
+  who  = "Havran Vlastimil: RT-0013",
+}
+
+@InProceedings{Zwaan95,
+        author =       "Maurice van der Zwaan and Erik Reinhard and Frederik
+                       W. Jansen",
+        title =        "Pyramid Clipping for Efficient Ray Traversal",
+        booktitle =    "Proceedings of the Sixth Eurographics Rendering
+                       Workshop",
+        address =      "Dublin, Ireland",
+        year =         "1995",
+  who  = "Havran Vlastimil: RT-0012",
+}
+
+@Article{badt88a,
+        author =       "Sig Badt Jr.",
+        title =        "Two Algorithms for Taking Advantage of Temporal
+                       Coherence in Ray Tracing",
+        pages =        "123--132",
+        journal =      "The Visual Computer",
+        volume =       "4",
+        number =       "3",
+        year =         "1988",
+        month =        sep,
+        annote =       "The basic ray-tracing algorithm is adapted to make
+                       ray-tracing faster for the production of motion
+                       pictures. Two algorithms are presented. The image space
+                       temporal coherence algorithm takes advantage of the
+                       fact that motion picture images do not change very much
+                       from frame to frame. The reprojection algorithm uses
+                       information about the object space saved from the
+                       previous frame to accelerate the processing of the
+                       current frame. The reprojection algorithm is used when
+                       the viewpoint of the current frame is changed by a
+                       small amount from the viewpoint of the previous
+                       frame.",
+  who  = "Havran Vlastimil: RT-0011",
+}
+
+@InProceedings{amanatides87b,
+        author =       "John Amanatides and Andrew Woo",
+        title =        "A fast voxel traversal algorithm for ray tracing",
+        pages =        "3--10",
+        booktitle =    "Eurographics '87",
+        year =         "1987",
+        month =        aug,
+        editor =       "G. Marechal",
+        publisher =    "North-Holland",
+        conference =   "European Computer Graphics Conference and Exhibition;
+                       held in Amsterdam, The Netherlands; 24 -- 28 August
+                       1987",
+        annote =       "uniform grid space subdivision \\ This paper discusses
+                       a fast and simple voxel traversal algorithm through a
+                       3D space partition. Going from one voxel to its
+                       neighbor requires only two floating point comparisons
+                       and one floating point addition. Also, multiple ray
+                       intersections with objects that are in more than one
+                       voxel are eliminated.",
+  who  = "Havran Vlastimil: RT-0010",
+}
+
+InProceedings{Kirk:1988:RTK,
+  author =       "David Kirk and James Arvo",
+  title =        "The Ray Tracing Kernel",
+  pages =        "75--82",
+  booktitle =    "Proceedings of Ausgraph '88",
+  year =         "1988",
+  annote =       "We describe a methodology for implementing a ray
+                 tracer which provides both a convenient testbed for
+                 developing new algorithms and a way to exploit the
+                 growing number of acceleration techniques. These
+                 benefits are a natural consequence of a collection of
+                 data abstractions called the ``ray tracing kernel.'' By
+                 defining an ``object'' in a broad sense, the kernel
+                 allows a single abstraction to encapsulate a wide
+                 spectrum of concepts including geometric primitives,
+                 acceleration techniques, CSG operators, and object
+                 transformations. Through hierarchical nesting of
+                 instances of these objects we are able to construct and
+                 efficiently render complex environments.",
+  who  = "Havran Vlastimil: RT-0009",
+}
+
+
+@InProceedings{Fournier:1993:RTA,
+  author =       "Alain Fournier and Pierre Poulin",
+  title =        "A Ray Tracing Accelerator Based on a Hierarchy of 1{D}
+                 Sorted Lists",
+  year =         "1993",
+  month =        may,
+  booktitle =    "Proceedings of Graphics Interface '93",
+  publisher =    "Canadian Information Processing Society",
+  pages =        "53--61",
+  address =      "Toronto, Ontario",
+  keywords =     "efficiency",
+  who  = "Havran Vlastimil: RT-0008",
+}
+
+@InProceedings{Thirion:1990:TDS,
+  author =       "Jean-Philippe Thirion",
+  title =        "{TRIES}: Data Structures Based on Binary
+                 Representation for Ray Tracing",
+  pages =        "531--541",
+  booktitle =    "Eurographics '90",
+  year =         "1990",
+  month =        sep,
+  editor =       "C. E. Vandoni and D. A. Duce",
+  publisher =    "North-Holland",
+  conference =   "European Computer Graphics Conference and Exhibition;
+                 held in Montreux, Switzerland; 3 -- 7 September 1990",
+  keywords =     "ray tracing, data structure, binary tree, boolean
+		 operation, trie",
+ who  = "Havran Vlastimil: RT-0007",
+}
+
+@InProceedings{Subramanian:1991:ATC, 
+ author       =         "K. R. Subramanian and Donald S. Fussell", 
+ title        =         "Automatic Termination Criteria for Ray Tracing  Hierarchies",
+ pages        =         "93--100", 
+ booktitle    =         "Proceedings of Graphics Interface '91", 
+ year         =         "1991", 
+ month        =         jun, 
+ conference   =         "held in Calgary, Alberta; 3-7 June 1991", 
+ keywords     =         "ray tracing, bounding volume, extent, partitioning plane, search structure, traversal", 
+ who  = "Havran Vlastimil: RT-0006",
+}
+
+
+@InProceedings{Formella94a,
+    author = "A. Formella and C. Gill and V. Hofmeyer",
+    title = "Fast Ray Tracing of Sequences by Ray History Evaluation",
+    booktitle = "Proceedings of Computer Animation '94",
+    conference = "Computer Animation '94",
+    pages = "184--191",
+    year = 1994,
+    month = may,
+    publisher = "IEEE Computer Society Press",
+    who  = "Havran Vlastimil: RT-0005",
+}
+
+@InProceedings{dauenhauer90a,
+        author =       "David Elliott Dauenhauer and Sudhanshu Kumar Semwal",
+        title =        "Approximate Ray Tracing",
+        pages =        "75--82",
+        booktitle =      "Proceedings of Graphics Interface '90",
+        year =         "1990",
+        month =        may,
+        conference =   "held in Halifax, Nova Scotia; 14-18 May 1990",
+        keywords =     "shading, rendering algorithm",
+        who  = "Havran Vlastimil: RT-0004",
+}
+
+@Article{Formella97a,
+  author =       "F. Aguado and F.P. Fontan and A. Formella",
+  title =      "Indoor and Outdoor Channel Simulator Based on Ray Tracing",
+  journal =      "IEEE Transactions on Magnetics",
+  year =         "1997",
+  volume =       "33",
+  number =       "2",
+  publisher =    "",
+  pages =        "1484--1487",
+  who  = "Havran Vlastimil: RT-0003",
+}
+
+@Article{Formella:1995:RTQ,
+  author =       "A. Formella and C. Gill",
+  title =        "Ray tracing: a quantitative analysis and a new
+                 practical algorithm",
+  journal =      "The Visual Computer",
+  year =         "1995",
+  volume =       "11",
+  number =       "9",
+  publisher =    "Springer-Verlag",
+  pages =        "465--476",
+  note =         "ISSN 0178-2789",
+  who  = "Havran Vlastimil: RT-0002",
+}
+
+@Article{Klimaszewski:1997:FRT,
+ author= 	"Kryzsztof S. Klimaszewski and Thomas W. Sederberg",
+ title = 	"Faster Ray Tracing Using Adaptive Grids",
+ journal= 	"IEEE Computer Graphics and Applications",
+ volume=        "17",
+ number =       "1",
+ pages  =       "42--51",
+ month  =       jan # "\slash " # feb,
+ year   =       "1997",
+ coden  =       "ICGADZ",
+ ISSN   =       "0272-1716",
+ bibdate=       "Sat Jan 25 10:55:04 MST 1997",
+ acknowledgement=ack-nhfb,
+ who  = "Havran Vlastimil: RT-0001",
+}
+
+@Article{Kwon98,
+  author = "Bomjun Kwon and Dae Seoung Kim and Kyung-Yong Chwa and
+            Sung Yong Shin",
+  title =        "Memory-Efficient Ray Classification for Visibility
+                  Operations",
+  journal =      "IEEE Transactions on Visualization and Computer Graphics",
+  volume =       "4",
+  number =       "3",
+  month =        {jul--sep},
+  year =         "1998",
+  pages =        "193--201",
+  abstract =     "",
+  keywords =     "ray shooting, ray classification, ray tracing, rendering",
+  who = "Havran Vlastimil: RT-0197",
+}
+
+
+
+
+
+
+
+
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/shadow.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/shadow.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/shadow.bib	(revision 243)
@@ -0,0 +1,1484 @@
+% shadow.bib: bibliography on shadow algorithms,
+%     direct illumination,
+%     area light sources,
+%     soft shadows,
+%     texture mapping on graphics workstations,
+% and related topics including hemicubes and form factor calculation.
+%
+% Paul Heckbert, January 1997
+%
+% many entries copied from the CS bibliography at
+% http://liinwww.ira.uka.de/bibliography/index.html
+
+@INPROCEEDINGS{Herf96sketch,
+AUTHOR={Michael Herf and Paul S. Heckbert},
+TITLE={Fast Soft Shadows},
+BOOKTITLE={Visual Proceedings, SIGGRAPH 96},
+MONTH={Aug.},
+YEAR={1996},
+PAGES={145},
+KEYWORDS={penumbra, graphics workstation, accumulation buffer, texture mapping},
+}
+
+@TECHREPORT{Heckbert97shadow,
+AUTHOR={Paul S. Heckbert and Michael Herf},
+TITLE={Simulating Soft Shadows with Graphics Hardware},
+INSTITUTION={CS Dept., Carnegie Mellon U.},
+MONTH={Jan.},
+YEAR=1997,
+NOTE={CMU-CS-97-104, http://www.cs.cmu.edu/~ph},
+KEYWORDS={penumbra, texture mapping, graphics workstation,
+interaction, real-time, SGI Reality Engine},
+}
+
+@MISC{Herf97shadow,
+AUTHOR={Michael Herf and Paul S. Heckbert},
+TITLE={Soft Shadow Textures},
+NOTE={Submitted for publication},
+YEAR=1997,
+}
+
+@INPROCEEDINGS{Nishita83,
+AUTHOR={Tomoyuki Nishita and Eihachiro Nakamae},
+TITLE={Half-Tone Representation of 3-{D} Objects Illuminated by Area Sources
+or Polyhedron Sources},
+BOOKTITLE={COMPSAC '83, Proc. IEEE 7th Intl. Comp. Soft.
+and Applications Conf.},
+MONTH={Nov.},
+YEAR={1983},
+PAGES={237-242},
+KEYWORDS={shading, shadow, penumbra},
+}
+
+@INPROCEEDINGS{Nakamae84,
+AUTHOR={Eihachiro Nakamae and Hideo Yamashita and Kohichi Harada and Tomoyuki Nishita},
+TITLE={Computer Graphics for Visualizing Simulation Results},
+BOOKTITLE={Eurographics '84},
+MONTH={Sept.},
+YEAR={1984},
+PAGES={419-432},
+KEYWORDS={shadow, penumbra},
+}
+
+@ARTICLE{Nishita85,
+AUTHOR={Tomoyuki Nishita and Eihachiro Nakamae},
+TITLE={Continuous Tone Representation of 3-{D} Objects Taking Account of
+Shadows and Interreflection},
+JOURNAL={Computer Graphics
+(SIGGRAPH '85 Proceedings)},
+VOLUME={19},
+NUMBER={3},
+MONTH={July},
+YEAR={1985},
+PAGES={23-30},
+KEYWORDS={shading, penumbra, radiosity},
+}
+
+@TECHREPORT{Campbell91tr1,
+AUTHOR={Campbell, III, A. T. and Donald S. Fussell},
+TITLE={Analytic Illumination with Polygonal Light Sources},
+NOTE={TR-91-15},
+INSTITUTION={CS Dept, U of Texas at Austin},
+MONTH={April},
+YEAR={1991},
+KEYWORDS={shadow},
+ANNOTE={object space shadow algorithm, like Nishita83},
+}
+
+@TECHREPORT{Campbell91tr2,
+AUTHOR={Campbell, III, A. T. and Donald S. Fussell},
+TITLE={An Analytic Approach to Illumination with Area Light Sources},
+NOTE={TR-91-25},
+INSTITUTION={CS Dept, U of Texas at Austin},
+MONTH={August},
+YEAR={1991},
+KEYWORDS={shadow},
+ANNOTE={An early draft of chapters 5 and 6 of his dissertation},
+}
+
+@MastersThesis{Woo89,
+       author =       "Andrew C. H. Woo",
+       title =        "Accelerators for Shadow Determination in Ray Tracing",
+       pages =        "136",
+       month =        feb,
+       year =         "1989",
+       school =       "Department of Computer Science, University of
+                      Toronto",
+       keywords =     "ray tracing, regular grid subdivision, voxel, shadow,
+	efficiency, cull",
+     }
+
+@InProceedings{Woo90voxel,
+author =       "Andrew Woo and John Amanatides",
+title =        "Voxel Occlusion Testing: {A} Shadow Determination
+Accelerator for Ray Tracing",
+pages =        "213--220",
+booktitle =      "Proceedings of Graphics Interface '90",
+year =         "1990",
+month =        may,
+conference =   "Halifax, Canada",
+keywords =     "grid, intersection culling, occlusion, penumbra, ray
+tracing, shadows, umbra, voxel traversal",
+abstract =       "
+A shadow determination accelerator for ray tracing is
+presented. It is built on top of the uniform voxel
+traversal grid structure. The accelerator proves to be
+rather efficient, requires little additional memory and
+the worst case scenario per shadow determination just
+reduces down to traditional voxel traversal. It can
+also be extended to model linear, area lights, as well
+as atmospheric shadows.
+",
+}
+
+@ARTICLE{Woo90survey,
+AUTHOR={Andrew Woo and Pierre Poulin and Alain Fournier},
+TITLE={A Survey of Shadow Algorithms},
+JOURNAL={IEEE Computer Graphics and Applications},
+VOLUME={10},
+NUMBER={6},
+MONTH={Nov.},
+YEAR={1990},
+PAGES={13-32},
+ABSTRACT={
+Essential to realistic and visually appealing images,
+shadows are difficult to compute in most display
+environments. This survey characterizes the various
+types of shadows. It also describes most existing
+shadow algorithms and discusses their complexities,
+advantages, and shortcomings. We examine hard shadows,
+soft shadows, shadows of transparent objects, and
+shadows for complex modeling primitives. For each type,
+we examine shadow algorithms within various rendering
+techniques. This survey attempts to provide readers
+with enough background and insight on the various
+methods to allow them to choose the algorithm best
+suited to their needs. We also hope that our analysis
+will help identify the areas that need more research
+and point to possible solutions.
+},
+}
+
+@INCOLLECTION{Woo92,
+AUTHOR={Andrew Woo},
+TITLE={The Shadow Depth Map Revisited},
+BOOKTITLE={Graphics Gems III},
+EDITOR={David Kirk},
+PUBLISHER={Academic Press},
+ADDRESS={Boston, MA},
+YEAR={1992},
+PAGES={338-342, 582},
+KEYWORDS={z-buffer shadow, aliasing},
+annote =         "includes code",
+}
+
+@Article{Woo93,
+       author =       "Andrew Woo",
+       title =        "Efficient shadow computations in ray tracing",
+       journal =      "IEEE Computer Graphics and Applications",
+       pages =        "78--83",
+       volume =       "13",
+       number =       "5",
+       month =        sep,
+       year =         "1993",
+       annote =       "Two simple techniques speed up shadows in ray tracing.
+                      Both require little memory and easily extend to other
+                      ray types. One can also benefit radiosity-related
+                      computations.",
+     }
+
+@InProceedings{Poulin90shadow,
+       author =       "Pierre Poulin and John Amanatides",
+       title =        "Shading and Shadowing with Linear Light Sources",
+       pages =        "377--386",
+       booktitle =    "Eurographics '90",
+       year =         "1990",
+       month =        sep,
+       publisher =    "North-Holland",
+       keywords =     "soft shadow",
+     }
+
+
+@ARTICLE{Bao93,
+AUTHOR={Hujun Bao and Qunsheng Peng},
+TITLE={Shading Models for Linear and Area Light Sources},
+JOURNAL={Computers and Graphics},
+VOLUME={17},
+NUMBER={2},
+YEAR={1993},
+PAGES={137-145},
+KEYWORDS={shadow, penumbra},
+}
+
+@INPROCEEDINGS{Vedel93,
+AUTHOR={Christophe Vedel},
+TITLE={Computing Illumination from Area Light Sources by Approximate Contour
+Integration},
+BOOKTITLE={Proc. Graphics Interface '93},
+PUBLISHER={Canadian Inf. Proc. Soc.},
+ADDRESS={Toronto, Ontario},
+MONTH={May},
+YEAR={1993},
+PAGES={237-244},
+KEYWORDS={shadow, penumbra},
+}
+
+@InProceedings{Chin90,
+AUTHOR={Norman Chin and Steven Feiner},
+TITLE={Near Real-Time Shadow Generation Using {BSP} Trees},
+booktitle={Proceedings of SIGGRAPH '90},
+MONTH={Aug.},
+YEAR={1990},
+PAGES={99-106},
+}
+
+@INPROCEEDINGS{Chin92,
+AUTHOR={Norman Chin and Steven Feiner},
+TITLE={Fast Object-Precision Shadow Generation for Area Light Sources using
+{BSP} Trees},
+BOOKTITLE={1992 Symp. on Interactive 3D Graphics},
+PUBLISHER={ACM SIGGRAPH},
+MONTH={Mar.},
+YEAR={1992},
+PAGES={21-30},
+}
+
+@TechReport{Chin90t,
+       author =       "Norman Chin",
+       title =        "Near Real-Time Object-Precision Shadow Generation
+                      Using {BSP} Trees---Master Thesis",
+       institution =  "University of Columbia",
+       number =       "CUCS-068-90",
+       year =         "1990",
+       abstract =     "This master's thesis describes an object-precision
+                      shadow generation algorithm for static polygonal
+                      environments illuminated by movable point light
+                      sources. The algorithm can be easily implemented on any
+                      graphics system that provides fast polygon
+                      scan-conversion and achieves near real-time performance
+                      for environments of modest size. It combines elements
+                      of two kinds of current shadow generation algorithms:
+                      two-pass object-precision approaches and shadow volume
+                      approaches. This algorithm is an example of a new
+                      paradigm for shadow generation. Previously, the
+                      shadowing the problem can be viewed as solving the
+                      visible-surface problem from the point of view of a
+                      point light source. Another way to look at them, is
+                      from a geometric modeling point of view. By creating
+                      shadow volumes and then classifying polygons
+                      analytically against it, shadows can also be computed.
+                      Several optimizations are discussed. A way of reducing
+                      the amount of polygon fragmentation is shown by
+                      coalescing the fragments on the fly. Two methods of
+                      parallelizing the algorithm is presented. One method
+                      determines shadow fragments in parallel for a given
+                      light source. And more importantly, a method to handle
+                      shadowing from multiple point light sources independent
+                      of the number of light sources on workstations with
+                      alpha blending capabilities is described. Finally this
+                      algorithm has been extended to generate soft shadows by
+                      modeling area light sources. By initially meshing the
+                      scene into penumbra/umbra regions, and by adaptively
+                      meshing the penumbra regions with concentric contours
+                      similiar in shape to the outer penumbra region and by
+                      applying the point light source shadow algorithm to
+                      compute what fraction of an area light source is seen
+                      by a point to be rendered in the interior of the
+                      penumbra region and finally, by smooth shading the
+                      results, fuzzy shadows can be rendered. The future work
+                      section talks about combining all of the above to
+                      produce higher quality shadows in radiosity
+                      environments through adaptive meshing of the scene
+                      along penumbra/umbra boundaries via the area light
+                      source shadow algorithm and through analytically
+                      computing form-factors via the point light source
+                      shadow algorithm. Pseudocode is provided along with
+                      pictures and timings from an interactive
+                      implementation.",
+     }
+
+@InProceedings{Fuchs80,
+AUTHOR={Henry Fuchs and Zvi M. Kedem and Bruce F. Naylor},
+TITLE={On Visible Surface Generation by A Priori Tree Structures},
+booktitle={Proceedings of SIGGRAPH '80},
+MONTH={July},
+YEAR={1980},
+PAGES={124-133},
+KEYWORDS={hidden surface, BSP tree},
+}
+
+@ARTICLE{Brotman84,
+AUTHOR={Lynne Shapiro Brotman and Norman I. Badler},
+TITLE={Generating Soft Shadows with a Depth Buffer Algorithm},
+JOURNAL={IEEE Computer Graphics and Applications},
+VOLUME={4},
+NUMBER={10},
+MONTH={Oct.},
+YEAR={1984},
+PAGES={5-24},
+}
+
+@ARTICLE{Crow77,
+AUTHOR={Franklin C. Crow},
+TITLE={Shadow Algorithms for Computer Graphics},
+JOURNAL={Computer Graphics
+(SIGGRAPH '77 Proceedings)},
+VOLUME={11},
+NUMBER={2},
+MONTH={Summer},
+YEAR={1977},
+}
+
+@INPROCEEDINGS{Meyer90,
+AUTHOR={U. Meyer},
+TITLE={Hemi-Cube Ray Tracing: A Method for Generating Soft Shadows},
+BOOKTITLE={Eurographics '90},
+PAGES={365-376},
+}
+
+@ARTICLE{Williams78,
+AUTHOR={Lance Williams},
+TITLE={Casting Curved Shadows on Curved Surfaces},
+JOURNAL={Computer Graphics
+(SIGGRAPH '78 Proceedings)},
+VOLUME={12},
+NUMBER={3},
+MONTH={Aug.},
+YEAR={1978},
+PAGES={270-274},
+}
+
+@ARTICLE{Reeves87,
+AUTHOR={William T. Reeves and David H. Salesin and Robert L. Cook},
+TITLE={Rendering Antialiased Shadows with Depth Maps},
+JOURNAL={Computer Graphics
+(SIGGRAPH '87 Proceedings)},
+VOLUME={21},
+NUMBER={4},
+MONTH={July},
+YEAR={1987},
+PAGES={283-291},
+}
+
+@ARTICLE{Atherton78,
+AUTHOR={Peter R. Atherton and Kevin Weiler and Donald P. Greenberg},
+TITLE={Polygon Shadow Generation},
+JOURNAL={Computer Graphics
+(SIGGRAPH '78 Proceedings)},
+VOLUME={12},
+NUMBER={3},
+MONTH={Aug.},
+YEAR={1978},
+PAGES={275-281},
+KEYWORDS={hidden surface},
+}
+
+@ARTICLE{Heckbert86,
+AUTHOR={Paul S. Heckbert},
+TITLE={Survey of Texture Mapping},
+JOURNAL={IEEE Computer Graphics and Applications},
+VOLUME={6},
+NUMBER={11},
+MONTH={Nov.},
+YEAR={1986},
+PAGES={56-67},
+}
+
+@ARTICLE{Heckbert90,
+AUTHOR={Paul S. Heckbert},
+TITLE={Adaptive Radiosity Textures for Bidirectional Ray Tracing},
+JOURNAL={Computer Graphics
+(SIGGRAPH '90 Proceedings)},
+VOLUME={24},
+NUMBER={4},
+MONTH={Aug.},
+YEAR={1990},
+PAGES={145-154},
+KEYWORDS={global illumination},
+}
+
+@PHDTHESIS{Heckbert91,
+AUTHOR={Paul S. Heckbert},
+TITLE={Simulating Global Illumination Using Adaptive Meshing},
+SCHOOL={CS Division, UC Berkeley},
+MONTH={June},
+YEAR={1991},
+NOTE={Tech. Report UCB/CSD 91/636},
+KEYWORDS={radiosity, ray tracing, adaptive mesh, integral equation,
+thermal radiation, visibility},
+}
+
+@ARTICLE{Diefenbach94,
+AUTHOR={Paul J. Diefenbach and Norman I. Badler},
+TITLE={Pipeline Rendering: Interactive Refractions, Reflections, and Shadows},
+JOURNAL={Displays},
+ANNOTE={Special issue on Interactive Computer Graphics},
+NOTE={http://www.cis.upenn.edu/~diefenba/home.html},
+VOLUME={15},
+NUMBER={3},
+YEAR={1994},
+PAGES={173-180},
+KEYWORDS={beam tracing, hardware, real time},
+}
+
+@PHDTHESIS{Diefenbach96,
+AUTHOR={Paul J. Diefenbach},
+TITLE={Pipeline Rendering: Interaction and Realism through Hardware-Based
+Multi-Pass Rendering},
+SCHOOL={U. of Pennsylvania},
+YEAR=1996,
+KEYWORDS={beam tracing, hardware, real time, Phong illumination},
+NOTE={http://www.cis.upenn.edu/~diefenba/home.html},
+}
+
+@INPROCEEDINGS{Diefenbach97inter,
+AUTHOR={Paul J. Diefenbach and Norman I. Badler},
+title={Multi-pass Pipeline Rendering: Realism for Dynamic Environments},
+BOOKTITLE={1997 Symposium on Interactive 3D Graphics},
+publisher={ACM SIGGRAPH},
+YEAR=1997,
+KEYWORDS={texture mapping},
+NOTE={To appear},
+}
+
+@InProceedings{Cohen85,
+AUTHOR={Michael F. Cohen and Donald P. Greenberg},
+TITLE={The Hemi-Cube: A Radiosity Solution for Complex Environments},
+JOURNAL={Computer Graphics (SIGGRAPH '85 Proceedings)},
+MONTH={July},
+YEAR={1985},
+PAGES={31-40},
+KEYWORDS={shading, diffuse reflection},
+}
+
+@ARTICLE{Cohen88,
+AUTHOR={Michael F. Cohen and Shenchang Eric Chen and John R. Wallace and Donald P. Greenberg},
+TITLE={A Progressive Refinement Approach to Fast Radiosity Image Generation},
+JOURNAL={Computer Graphics
+(SIGGRAPH '88 Proceedings)},
+VOLUME={22},
+NUMBER={4},
+MONTH={Aug.},
+YEAR={1988},
+PAGES={75-84},
+ANNOTE={progressive radiosity},
+}
+
+@BOOK{Cohen93,
+AUTHOR={Michael F. Cohen and John R. Wallace},
+TITLE={Radiosity and Realistic Image Synthesis},
+PUBLISHER={Academic Press},
+ADDRESS={Boston},
+YEAR={1993},
+}
+
+@ARTICLE{Cook86,
+AUTHOR={Robert L. Cook},
+TITLE={Stochastic Sampling in Computer Graphics},
+JOURNAL={ACM Trans. on Graphics},
+VOLUME={5},
+NUMBER={1},
+MONTH={Jan.},
+YEAR={1986},
+PAGES={51-72},
+KEYWORDS={ray tracing, antialiasing, motion blur},
+ANNOTE={came out 1987},
+}
+
+@ARTICLE{Baum91,
+AUTHOR={Daniel R. Baum and Stephen Mann and Kevin P. Smith and James M. Winget},
+TITLE={Making Radiosity Usable: Automatic Preprocessing and Meshing Techniques
+for the Generation of Accurate Radiosity Solutions},
+MONTH={July},
+YEAR={1991},
+JOURNAL={Computer Graphics
+(SIGGRAPH '91 Proceedings)},
+VOLUME={25},
+NUMBER={4},
+PAGES={51-60},
+KEYWORDS={mesh generation},
+}
+
+@ARTICLE{Hanrahan91,
+AUTHOR={Pat Hanrahan and David Salzman and Larry Aupperle},
+TITLE={A Rapid Hierarchical Radiosity Algorithm},
+MONTH={July},
+YEAR={1991},
+JOURNAL={Computer Graphics
+(SIGGRAPH '91 Proceedings)},
+VOLUME={25},
+NUMBER={4},
+PAGES={197-206},
+ANNOTE={adaptive sampling of kernel in quadtree-like fashion
+motivated by Greengard's fast n-body algorithm},
+}
+
+@INPROCEEDINGS{Heckbert92discon,
+AUTHOR={Paul S. Heckbert},
+TITLE={Discontinuity Meshing for Radiosity},
+BOOKTITLE={Third Eurographics Workshop on Rendering},
+MONTH={May},
+YEAR={1992},
+ADDRESS={Bristol, UK},
+PAGES={203-216},
+KEYWORDS={radiosity, adaptive mesh, visibility},
+}
+
+@ARTICLE{Lischinski92,
+AUTHOR={Dani Lischinski and Filippo Tampieri and Donald P. Greenberg},
+TITLE={Discontinuity Meshing for Accurate Radiosity},
+JOURNAL={IEEE Computer Graphics and Applications},
+VOLUME={12},
+NUMBER={6},
+MONTH={November},
+YEAR={1992},
+PAGES={25-39},
+}
+
+@PHDTHESIS{Campbell91,
+	AUTHOR = {Campbell, III, A. T.},
+	TITLE = "Modeling Global Diffuse Illumination for Image Synthesis",
+	SCHOOL = "CS Dept, University of Texas at Austin",
+	YEAR = 1991,
+	MONTH = {Dec.},
+	NOTE = {Tech. Report TR-91-39},
+	keywords = {mesh generation, radiosity, penumbra, shadow},
+       pages =        "155",
+       keywords =     "Computational geometry data structure diffuse global
+                      illumination mesh generation optimization penumbra
+                      radiosity sampling shadow.",
+       abstract =     "Rapid developments in the design of algorithms for
+                      rendering globally illuminated scenes have taken place
+                      in the past five years. Net energy methods such as
+                      radiosity algorithms have become effective at
+                      computing the energy balance for scenes containing
+                      diffusely reflecting objects. Such methods first break
+                      up a scene description into a large set of elements, or
+                      possibly several levels of elements. Energy transfers
+                      among these elements are then determined using a
+                      variety of means. While much progress has been made in
+                      the design of energy transfer algorithms, little or no
+                      attention has been paid to the proper generation of the
+                      mesh of surface elements. This dissertation presents a
+                      technique for adaptively creating a mesh of surface
+                      elements as the energy transfers are computed. The
+                      method allows large numbers of small elements to be
+                      placed at parts of the scene where the most active
+                      energy transfers occur without requiring that other
+                      parts of the scene be subdivided needlessly to the same
+                      degree. As a result, the computational effort in the
+                      energy transfer computations can be concentrated where
+                      it has the most effect. Since the sources of direct and
+                      indirect illumination in the scene are polygonal
+                      elements, the effects of light sources with finite area
+                      must be computed. Most methods simplify the problem by
+                      approximating the area source with a collection of
+                      point sources. We present an object space algorithm to
+                      model illumination from polygonal light sources
+                      analytically. The result is a collection of
+                      smooth-shaded polygonal facets that may be rendered
+                      from any viewing position. Binary Space Partitioning
+                      trees are used to compute umbra and penumbra boundaries
+                      efficiently. Fast analytic techniques are developed
+                      for illumination calculations. Numerical optimization
+                      methods ensure that the shading function is sampled
+                      finely enough to find all significant illumination
+                      gradations. Illumination calculations are optimized to
+                      concentrate computational effort on parts of the scene
+                      where they are most needed.",
+       note =         "price (\$5.00)",
+     }
+
+
+
+@ARTICLE{Ward88,
+AUTHOR={Gregory J. Ward and Francis M. Rubinstein and Robert D. Clear},
+TITLE={A Ray Tracing Solution for Diffuse Interreflection},
+JOURNAL={Computer Graphics
+(SIGGRAPH '88 Proceedings)},
+VOLUME={22},
+NUMBER={4},
+MONTH={Aug.},
+YEAR={1988},
+PAGES={85-92},
+ANNOTE={cache diffuse samples},
+}
+
+@InProceedings{ward91a,
+       author =       "Gregory Ward",
+       title =        "Adaptive shadow testing for ray tracing",
+       booktitle =    "Eurographics Workshop on Rendering",
+       month = "May",
+       year =         "1991",
+       conference =   "Barcelona",
+       pages =        "11--20",
+       keywords =     "efficiency",
+       abstract =       "Method for reducing the number of shadow rays for
+                      scenes with a large number of light sources. The
+                      sources are sorted on their contribution, and only for
+                      the most important sources rays are cast. The influence
+                      of the other sources is estimated statistically. Tests
+                      are done with different tolerances (threshold to
+                      determine whether sources are important) and
+                      certainties (rate of accuracy). The method gives good
+                      reduction and is able to find the most important
+                      shadows because it selects contrast as criterion.",
+       annote =         "avoid shooting rays at lights determined to not affect
+                      perception of image",
+     }
+
+@TECHREPORT{Garland95tr,
+AUTHOR={Michael Garland and Paul S. Heckbert},
+TITLE={Fast Polygonal Approximation of Terrains and Height Fields},
+INSTITUTION={CS Dept., Carnegie Mellon U.},
+MONTH={Sept.},
+YEAR={1995},
+NOTE={CMU-CS-95-181, http://www.cs.cmu.edu/~garland/scape},
+KEYWORDS={surface simplification, Delaunay triangulation,
+data-dependent triangulation, triangulated irregular network, TIN,
+multiresolution modeling, greedy insertion},
+}
+
+@ARTICLE{Blinn88,
+AUTHOR={James F. Blinn},
+TITLE={Me and My (Fake) Shadow},
+JOURNAL={IEEE Computer Graphics and Applications},
+VOLUME={8},
+NUMBER={1},
+MONTH={Jan.},
+YEAR={1988},
+PAGES={82-86},
+KEYWORDS={projection, homogeneous matrix},
+}
+
+@ARTICLE{Heidmann91,
+AUTHOR={Tim Heidmann},
+TITLE={Real Shadows, Real Time},
+JOURNAL={Iris Universe},
+NOTE={Silicon Graphics, Inc.},
+VOLUME={18},
+YEAR={1991},
+PAGES={28-31},
+KEYWORDS={soft shadow, SGI Reality Engine, stencil buffer, shadow volume},
+ANNOTE={includes C, GL code},
+}
+
+@PHDTHESIS{Grant92,
+AUTHOR={Charles W. Grant},
+TITLE={Visibility Algorithms in Image Synthesis},
+SCHOOL={U. of California, Davis},
+YEAR={1992},
+KEYWORDS={z buffer, ray tracing, shadow, taxonomy},
+annote={partial electronic version available from grant1@llnl.gov,
+A successor to Sutherland-Sproull-Schumacker, Comput. Surv. 74},
+}
+
+@ARTICLE{Tessman89,
+AUTHOR={Thant Tessman},
+TITLE={Casting Shadows on Flat Surfaces},
+JOURNAL={Iris Universe},
+NOTE={Silicon Graphics, Inc.},
+MONTH={Winter},
+YEAR={1989},
+PAGES={16-19},
+KEYWORDS={projection, homogeneous matrix},
+ANNOTE={includes C, GL code},
+}
+
+@BOOK{Neider93,
+AUTHOR={Jackie Neider and Tom Davis and Mason Woo},
+TITLE={{OpenGL} Programming Guide},
+PUBLISHER={Addison-Wesley},
+ADDRESS={Reading MA},
+YEAR={1993},
+KEYWORDS={computer graphics, graphics workstation, SGI},
+ANNOTE={shadows on a plane p. 401},
+}
+
+@BOOK{McReynolds96,
+editor={Tom McReynolds},
+title={Programming with {OpenGL}: Advanced Rendering},
+note={SIGGRAPH '96 course notes},
+year=1996,
+keywords={Silicon Graphics, graphics workstation,
+texture mapping, stencil buffer, accumulation buffer, shadow},
+annote={article and code at
+http://www.sgi.com/Technology/openGL/advanced_sig96.html},
+}
+
+@INPROCEEDINGS{Akeley93,
+AUTHOR={Kurt Akeley},
+TITLE={{RealityEngine} Graphics},
+BOOKTITLE={SIGGRAPH '93 Proc.},
+MONTH={Aug.},
+YEAR={1993},
+PAGES={109-116},
+KEYWORDS={hardware, texture mapping, graphics workstation, SGI},
+}
+
+@ARTICLE{Clark76,
+AUTHOR={James H. Clark},
+TITLE={Hierarchical Geometric Models for Visible Surface Algorithms},
+JOURNAL={CACM},
+VOLUME={19},
+NUMBER={10},
+MONTH={Oct.},
+YEAR={1976},
+PAGES={547-554},
+KEYWORDS={bounding volume, spatial data structure},
+}
+
+@ARTICLE{Haeberli90accum,
+AUTHOR={Paul Haeberli and Kurt Akeley},
+TITLE={The Accumulation Buffer: Hardware Support for High-Quality Rendering},
+JOURNAL={Computer Graphics (SIGGRAPH '90 Proceedings)},
+VOLUME={24},
+NUMBER={4},
+MONTH={Aug.},
+YEAR={1990},
+PAGES={309-318},
+KEYWORDS={antialiasing, motion blur, depth of field,
+soft shadows, stochastic sampling},
+}
+
+@ARTICLE{Segal92,
+AUTHOR={Mark Segal and Carl Korobkin and Rolf van Widenfelt and Jim Foran
+and Paul Haeberli},
+TITLE={Fast Shadows and Lighting Effects using Texture Mapping},
+JOURNAL={Computer Graphics (SIGGRAPH '92 Proceedings)},
+VOLUME={26},
+NUMBER={2},
+MONTH={July},
+YEAR={1992},
+PAGES={249-252},
+KEYWORDS={perspective, scan conversion},
+}
+
+@ARTICLE{Chen90,
+   author = "Shenchang Eric Chen",
+   title = "Incremental Radiosity: An Extension of Progressive 
+          Radiosity to an Interactive Image Synthesis System",
+   pages = "135-144",
+   journal = "Computer Graphics (SIGGRAPH '90 Proceedings)",
+   volume = "24",
+   number = "4",
+   year = "1990",
+   month = "August",
+   keywords = "animation",
+}
+
+@InCollection{Chen91prograd,
+       author =       "Shenchang Eric Chen",
+       editor =       "James Arvo",
+       title =        "Implementing Progressive Radiosity with User-Provided
+                      Polygon Display Routines",
+       booktitle =    "Graphics Gems II",
+       pages =        "295-298, 583-597",
+       publisher =    "Academic Press Professional",
+       address =      "Boston, MA",
+       year =         "1991",
+       note =         "includes code",
+     }
+
+@Article{george90a,
+       author =       "David W. George and Francois X. Sillion and Donald P.
+                      Greenberg",
+       title =        "Radiosity Redistribution for Dynamic Environments",
+       journal =      "IEEE Computer Graphics and Applications",
+       pages =        "26--34",
+       volume =       "10",
+       number =       "4",
+       month =        jul,
+       year =         "1990",
+       keywords =     "radiosity, animation, interaction, shadow, negative
+                      radiosity",
+       annote =       "They present a modification to the progressive
+                      radiosity to allow faster radiosity computation for
+                      animation sequences where objects can be added, moved,
+                      removed or their surface changed properties. When an
+                      object is added, radiosity is shot onto these new
+                      patches. A shadow volume is determined and a negative
+                      radiosity is shot to the patches in shadow. When an
+                      object is moved, it is removed from the scene and added
+                      to the new position, the radiosity being recomputed at
+                      each step. The radiosity recomputed is based on two
+                      strategies: redistribute first or interleave
+                      redistribution and propagation. Some heuristics are
+                      presented to choose the most important patches. This
+                      solution is good when just a few objects are involved
+                      but as the complexity of the scenes and mostly moving
+                      objects increases, the algorithm lost of its
+                      interest.",
+     }
+
+@INCOLLECTION{Sillion91shadow,
+AUTHOR={Francois Sillion},
+TITLE={Detection of Shadow Boundaries for Adaptive Meshing in Radiosity},
+EDITOR={James Arvo},
+BOOKTITLE={Graphics Gems II},
+PAGES={311-315},
+PUBLISHER={Academic Press},
+ADDRESS={Boston MA},
+YEAR={1991},
+KEYWORDS={discontinuity meshing},
+}
+
+@Article{haines86a,
+       author =       "Eric A. Haines and Donald P. Greenberg",
+       title =        "The Light Buffer: {A} Ray Tracer Shadow Testing
+                      Accelerator",
+       pages =        "6--16",
+       journal =      "IEEE Computer Graphics and Applications",
+       volume =       "6",
+       number =       "9",
+       year =         "1986",
+       month =        sep,
+       keywords =     "shading, ray tracing, shadows, ray tracing shadow
+                      cull",
+       abstract =       "In one area of computer graphics, realistic image
+                      synthesis, the ultimate goal is to produce a picture
+                      indistinguishable from a photograph of a real
+                      environment. A particularly powerful technique for
+                      simulating light reflection---an important element in
+                      creating this realism---is called ray tracing. This
+                      method produces images of excellent quality, but
+                      suffers from lengthy computation time that limits its
+                      practical use. \\ This article presents a new method to
+                      reduce shadow testing time during ray tracing. The
+                      technique involves generating light buffers, each of
+                      which partition the environment with respect to an
+                      individual light source. These partition descriptions
+                      are then used during shadow testing to quickly
+                      determine a small subset of objects that may have to be
+                      tested for intersection. \\ The results of timing tests
+                      illustrate the beneficial performance of these
+                      techniques. The tests compare the standard ray-tracing
+                      algorithm to light buffers of varying resolution.",
+     }
+
+
+@InProceedings{bouville88a,
+       author =       "C. Bouville and J. L. Dubois and I. Marchal and M. L.
+                      Viaud",
+       title =        "Monte-Carlo integration applied to an illumination
+                      model",
+       pages =        "483--498",
+       booktitle =    "Eurographics '88",
+       year =         "1988",
+       month =        sep,
+       editor =       "D. A. Duce and P. Jancene",
+       publisher =    "North-Holland",
+       conference =   "European Computer Graphics Conference and Exhibition;
+                      held in Nice, France; 12 -- 16 September 1988",
+       keywords =     "illumination model",
+       abstract =       "The use of Monte-Carlo integration together with
+                      stochastic sampling is very useful for dealing with the
+                      scattering phenomena that occur in the propagation and
+                      reflection of light. In this paper, these techniques
+                      have been applied to the implementation of a
+                      physics-based global illumination model. The
+                      theoretical basis of this approach is presented briefly
+                      and various applications to realistic image are then
+                      described. This concerns the rendering of penumbra and
+                      scattered reflection effects, antialiasing and accurate
+                      color modelling through spectral integration. For all
+                      these applications, both theoretical and implementation
+                      aspects are developed and it is shown that stochastic
+                      techiques can provide very simple and efficient
+                      algorithms.",
+     }
+
+@InProceedings{Drettakis94,
+       author =       "George Drettakis and Eugene Fiume",
+       title =        "A Fast Shadow Algorithm for Area Light Sources Using
+                      Backprojection",
+       booktitle =    "SIGGRAPH '94 Proc.",
+       pages =        "223--230",
+       year =         "1994",
+       keywords =     "shadows, umbra, penumbra, discontinuity meshing,
+                      global illumination, backprojection",
+       note =
+"http://safran.imag.fr/Membres/George.Drettakis/pub.html",
+     }
+
+@InProceedings{Stewart94,
+       author =       "A. James Stewart and Sherif Ghali",
+       title =        "Fast Computation of Shadow Boundaries using Spatial
+                      Coherence and Backprojection",
+       booktitle =    "Proceedings of SIGGRAPH '94",
+       pages =        "231--238",
+       month =        jul,
+       year =         "1994",
+       keywords =     "shadows, backprojection, discontinuity mesh, aspect
+                      graphs, radiosity, visual events, efficient surface
+                      enumeration, spatial coherence",
+     }
+
+@InProceedings{Stewart93,
+       author =       "A. James Stewart and Sherif Ghali",
+       title =        "An Output Sensitive Algorithm for the Computation of
+                      Shadow Boundaries",
+       booktitle =    "Canadian Conference on Computational Geometry",
+       pages =        "291--296",
+       month =        aug,
+       year =         "1993",
+     }
+
+@InProceedings{haines91shaft,
+author =       "Eric Haines and John Wallace",
+title =        "Shaft culling for efficient ray-traced radiosity",
+booktitle =    "Eurographics Workshop on Rendering",
+month = "may",
+year =         "1991",
+conference =   "Barcelona",
+keywords =     "radiosity, ray tracing, bounding volumes",
+abstract =       "
+A shaft is a volume between an emitter and receiver. A
+list of enclosing boxes, c.q. patches that are in that
+volume is generated. The ray casting to determine
+visibility between emitter and receiver can be reduced
+by only testing the rays against the patches in the
+shaft. Methods to make the shafts, and to determine
+which object are in the shaft are given.
+",
+}
+
+@InProceedings{shirley91direct,
+       author =       "Peter Shirley and Changyaw Wang",
+       title =        "Direct lighting calculation by Monte Carlo
+                      integration",
+       booktitle =    "Eurographics Workshop on Rendering",
+       year =         "1991",
+       conference =   "held in Barcelona, Spain; 13-15 May 1991",
+       keywords =     "monte carlo, illumination",
+       abstract =       "Application of Monte Carlo techniques for rendering
+                      scenes with multiple light sources. Only one shadow ray
+                      per viewing ray is used. Some issues for the design of
+                      probability densities for light sources are given.",
+     }
+
+@InProceedings{kok91a,
+       author =       "Arjan Kok and Frederik Jansen",
+       title =        "Source selection for the direct lighting component in
+                      global illumination",
+       booktitle =    "Eurographics Workshop on Rendering",
+       year =         "1991",
+       conference =   "held in Barcelona, Spain; 13-15 May 1991",
+       keywords =     "two pass",
+       abstract =       "Describes criteria for deciding which patches should
+                      be considered to be light sources in a two pass method
+                      in which direct lighting component is calculated
+                      separately in the second pass.",
+     }
+
+@InCollection{Zimmerman95,
+       author =       "Kurt Zimmerman",
+       editor =       "Alan W. Paeth",
+       title =        "Direct Lighting Models for Ray Tracing with
+                      Cylindrical Lamps",
+       booktitle =    "Graphics Gems V",
+       pages =        "285--289",
+       publisher =    "Academic Press Professional",
+       address =      "Boston, MA",
+       year =         "1995",
+     }
+
+@INCOLLECTION{Zimmerman95twopass,
+AUTHOR={Kurt Zimmerman and Peter Shirley},
+TITLE={A Two-Pass Realistic Image Synthesis Method for Complex Scenes},
+BOOKTITLE={Rendering Techniques '95 (Proceedings of the Sixth Eurographics
+Workshop on Rendering)},
+PUBLISHER={Springer-Verlag},
+ADDRESS={NY},
+PAGES={284-295},
+YEAR=1995,
+NOTE={Also ftp://ftp.cs.indiana.edu/pub/techreports/TR434.ps.Z},
+KEYWORDS={shadow},
+}
+
+@InCollection{Wang92,
+       author =       "Changyaw Wang",
+       editor =       "David Kirk",
+       title =        "Physically Correct Direct Lighting for Distribution
+                      Ray Tracing",
+       booktitle =    "Graphics Gems III",
+       pages =        "307-313, 562-568",
+       publisher =    "Academic Press",
+       address =      "Boston, MA",
+       year =         "1992",
+       keywords =     "monte carlo, area light source, soft shadows",
+       annote =         "includes code",
+     }
+
+@InProceedings{rossignac89b,
+       author =       "J. Rossignac and J. Wu",
+       title =        "Depth-interval buffer for hardware-assisted shading
+                      from {CSG}: Accurate treatment of coincident faces and
+                      shadows",
+       booktitle =    "Fifth Eurographics Workshop on Graphics Hardware",
+       year =         "1989",
+       editor =       "D. Grimsdale and A. Kaufman",
+       conference =   "held in Lausanne, Switzerland; 2-3 September 1989",
+       keywords =     "hardware",
+       annote =       "Discuss the role of a depth interval buffer using a
+                      new version of the Trickle algorithm for handling
+                      coincident faces and shadows with CSG
+                      representations.",
+     }
+
+
+@article{Fuchs85sig,
+       author =       "Henry Fuchs and Jack Goldfeather and Jeff P. Hultquist
+and Susan Spach and John D. Austin and Brooks, Jr., Frederick P.
+and John G. Eyles and John Poulton",
+       title =        "Fast Spheres, Shadows, Textures, Transparencies, and
+                      Image Enhancements in {Pixel-Planes}",
+       pages =        "111--120",
+       journal =      "Computer Graphics (SIGGRAPH '85 Proceedings)",
+       volume =       "19",
+       number =       "3",
+       year =         "1985",
+       month =        jul,
+       keywords =     "pixel planes, parallel processing",
+       annote =       "Fuchs' Pixel-Planes machine is explained in general.
+                      See [Eyles 87] for a final report. Explanation of how
+                      the machine can process linear equations, and gives
+                      several algorithms for display. Also published in
+                      Advances in Computer Graphics I, EUROGRAPHICS 86.",
+     }
+
+@Article{eyles87a,
+       author =       "John Eyles and John Austin and Henry Fuchs and Trey
+                      Greer and John Poulton",
+       title =        "{Pixel-Planes} 4: {A} Summary",
+       pages =        "183--207",
+       journal =      "Advances in Computer Graphics Hardware II, Record of
+                      Second Eurographics Workshop on Graphics Hardware",
+       year =         "1987",
+       keywords =     "parallel processing",
+       annote =       "A final report on the Pixel-Planes system. See also
+                      [Fuchs 85].",
+     }
+
+@InProceedings{amanatides84a,
+       author =       "John Amanatides",
+       title =        "Ray Tracing with Cones",
+       pages =        "129--135",
+       journal =      "Computer Graphics (SIGGRAPH '84 Proceedings)",
+       volume =       "18",
+       number =       "3",
+       year =         "1984",
+       month =        jul,
+       conference =   "held in Minneapolis, Minnesota; 23--27 July 1984",
+       keywords =     "cone tracing, antialiasing, I35 Ray Tracing",
+       annote =       "ray tracing spheres and polygons with circular conical
+                      rays A technique for antialiasing in ray tracing is
+                      presented which utilizes cones instead of rays. Cones
+                      prevent problems generally associated with point
+                      sampling, and therefore allow for more natural images.
+                      The mathematics involved seem only ``pretty'' for
+                      spherical objects, so an acid test has yet to be
+                      performed. \\ A new approach to ray tracing is
+                      introduced. The definition of a ``ray'' is extended
+                      into a cone by including information on the spread
+                      angle and the virtual origin. The advantages of this
+                      approach, which tries to model light propagation with
+                      more fidelity, include a better method of antialiasing,
+                      a way of calculating fuzzy shadows and dull
+                      reflections, a method of calculating the correct level
+                      of detail in a procedural model and texture map, and
+                      finally, a procedure for faster intersection
+                      calculation.",
+     }
+
+@InProceedings{salesin89a,
+       author =       "David Salesin and Jorge Stolfi",
+       title =        "The {ZZ}-Buffer: a Simple and Efficient Rendering
+                      Algorithm with Reliable Antialiasing",
+       pages =        "451--466",
+       journal =      "Proceedings of the PIXIM '89",
+       year =         "1989",
+       annote =       "The ZZ-buffer is a new rendering algorithm that is
+                      simple, efficient, and produces high-quality images.
+                      The algorithm correctly renders transparent surfaces,
+                      shadows with real penumbrae, and depth of field
+                      effects. The ZZ-buffer algorithm is substantially
+                      faster than ray tracing an nearly as versatile. While
+                      the ZZ-buffer is somewhat slower than the Z-buffer or
+                      A-buffer, it avoids the aliasing and other artifacts of
+                      these algorithms. The algorithm's efficiency comes from
+                      a screen-space object indexing scheme, and from the use
+                      of lazy evaluation for visibility tests. It achieves
+                      reliable antialiasing by employing an adaptive form of
+                      stochastic supersampling. The algorithm is simple
+                      enough that we give most of its code here in this
+                      paper. The algorithm has been implemented as part of a
+                      commercial production system and has proved robust over
+                      a large variety of images.",
+     }
+
+@InProceedings{Muller:1994:FRR,
+       author =       "Stefan Muller and Frank Schoffel",
+       booktitle =    "Fifth Eurographics Workshop on Rendering",
+       title =        "Fast Radiosity Repropagation for Interactive Virtual
+                      Environments Using a Shadow-Form-Factor-List",
+       address =      "Darmstadt, Germany",
+       pages =        "325--342",
+       month =        jun,
+       year =         "1994",
+       keywords =     "dynamic environments, shadow-form-factor-list, scene
+                      coherence, radiosity repropagation, progressive
+                      refinement radiosity",
+       bibsource =    "sig-11-1994",
+     }
+
+
+@TechReport{Seales89,
+       author =       "W. Brent Seales and Charles R. Dyer",
+       title =        "Using the {ASP} for the Interactive Viewing of
+                      Polyhedral Scenes",
+       institution =  "University of Wisconsin",
+       number =       "TR 903",
+       month =        dec,
+       year =         "1989",
+       abstract =     "In this paper we discuss an approach for solving the
+                      problem of interactively viewing a polyhedral scene.
+                      Interactive viewing is the computation and display of
+                      an interactively controlled sequence of views of a
+                      scene corresponding to a viewer's movement along a
+                      continuous viewpath. We present an algorithm for
+                      generating such views with hidden-lines removed, and
+                      consider extensions to solve the problem of generating
+                      views with hidden-surfaces removed. The method relies
+                      on a precomputation phase which constructs the {\it
+                      aspect representation}, or asp. This representation can
+                      be used to interactively view a polyhedral scene at
+                      video rates with hidden-lines or surfaces removed. The
+                      method exploits {\it viewpath coherence}, a form of
+                      frame-to-frame coherence present in such a sequence of
+                      views. The display of polyhedral line drawings with
+                      hidden lines removed makes use of the topology of the
+                      image line drawing and the pre-ordering of visual
+                      events which change that topology. This approach is
+                      extended to interactive viewing with hidden-surfaces
+                      removed and with shading, shadows, and multiple light
+                      sources. The set of object resolution polygons
+                      representing the visible faces and the shadow polygons
+                      for a single frame can be computed efficiently from the
+                      previous frame using the asp. The hidden-line and
+                      hidden-surface algorithms are closely related via the
+                      asp. Interactive viewing with hidden-lines removed is
+                      shown to be about as fast as the interactive display of
+                      a wire-frame scene. The primary on-line cost of
+                      hidden-surface interactive viewing is the cost
+                      associated with scan converting the visible surfaces
+                      and shadow polygons.",
+     }
+
+@InProceedings{seales90a,
+       author =       "W. Brent Seales and Charles R. Dyer",
+       title =        "Shaded Rendering and Shadow Computation for Polyhedral
+                      Animation",
+       pages =        "175--182",
+       journal =      "Proceedings of Graphics Interface '90",
+       year =         "1990",
+       month =        may,
+       conference =   "held in Halifax, Nova Scotia; 14-18 May 1990",
+       keywords =     "animation, aspect representation, hidden-surface
+                      computation, interactive viewing, viewpath coherence",
+     }
+
+@InProceedings{wanger92a,
+       author =       "Leonard Wanger",
+       title =        "The effect of shadow quality on the perception of
+                      spatial relationships in computer generated imagery",
+       pages =        "39--42",
+       journal =      "Computer Graphics (1992 Symposium on Interactive 3D
+                      Graphics)",
+       volume =       "25",
+       number =       "2",
+       year =         "1992",
+       month =        mar,
+       editor =       "David Zeltzer",
+       conference =   "held in Boston; 29 March - 1 April 1992",
+       keywords =     "interactive tasks, spatial relations, cue theory",
+     }
+
+@TechReport{QMW-DCS-521-1990a,
+       author =       "M. Slater",
+       title =        "Dynamic Modification Of Objects In 3{D} Scenes Using
+                      Tiling And {A} {Z} -Buffer",
+       institution =  "Queen Mary College, Department of Computer Science",
+       year =         "1990",
+       month =        nov,
+       number =       "QMW-DCS-1990-521",
+       scope =        "ace",
+       abstract-url = "http://www.dcs.qmw.ac.uk/publications/report_abstracts/1990/521",
+       keywords =     "Interactive 3D Graphics, Z-Buffer, Tiling, Shadows,
+                      Graphica Objects, Segments.",
+     }
+
+     @InProceedings{Chrysantho1995a,
+	 author =       "Yiorgos Chrysanthou and Mel Slater",
+
+       booktitle =    "ACM SIGGRAPH Symposium on Interactive 3D Graphics,
+                      Monterey, CA",
+       title =        "Shadow Volume {BSP} Trees for Computation of Shadows
+                      in Dynamic Scenes",
+       year =         "1995",
+       month =        apr,
+	 pages =        "45--50",
+
+     }
+
+@Incollection{arvo89survey,
+       author =       "James Arvo and David Kirk",
+       title =        "A survey of ray tracing acceleration techniques",
+       pages =        "201--262",
+       booktitle =    "An introduction to ray tracing",
+       year =         "1989",
+       editor =       "Andrew S. Glassner",
+       publisher =    "Academic Press",
+     }
+
+@InProceedings{Arvo95irrad,
+  author =       "James Arvo",
+  title =        "Applications of Irradiance Tensors to the Simulation
+                 of Non-Lambertian Phenomena",
+  pages =        "335--342",
+  booktitle =    "SIGGRAPH 95 Proceedings",
+  year =         "1995",
+  month =        aug,
+  keywords={shadow, shading},
+}
+
+@Article{Hourcade85,
+       author =       "J. C. Hourcade and A. Nicolas",
+       title =        "Algorithms for Antialiased Cast Shadows",
+       pages =        "259--265",
+       journal =      "Computers and Graphics",
+       volume =       "9",
+       number =       "3",
+       year =         "1985",
+       keywords =     "z-buffer shadow",
+     }
+
+@InProceedings{Tanaka90,
+       author =       "Toshimitsu Tanaka and Tokiichiro Takahashi",
+       title =        "Cross Scanline Algorithm",
+       pages =        "63--74",
+       booktitle =    "Eurographics '90",
+       year =         "1990",
+       month =        sep,
+       publisher =    "North-Holland",
+     }
+
+@inproceedings{Tanaka91,
+       author =       "Toshimitsu Tanaka and Tokiichiro Takahashi",
+       title =        "Shading with Area Light Sources",
+       booktitle =    "Eurographics '91",
+       publisher =    "North-Holland",
+       pages =        "235--246, 535--537",
+       month =        sep,
+       year =         "1991",
+       annote = "no shadows",
+     }
+
+@ARTICLE{Tanaka94,
+       author =       "Toshimitsu Tanaka and Tokiichiro Takahashi",
+       journal =      "Computer Graphics Forum",
+       title =        "Cross Scan Buffer and its Applications",
+       volume =       "13",
+       number =       "3",
+       publisher =    "Basil Blackwell Ltd",
+       pages =        "467--376",
+       year =         "1994",
+       note =         "Eurographics '94 Conference issue",
+     }
+
+@ARTICLE{Tanaka95,
+       title =        "Fast Shadowing Algorithm for Linear Light Sources",
+       author =       "Toshimitsu Tanaka and Tokiichiro Takahashi",
+       journal =      "Computer Graphics Forum",
+       volume =       "14",
+       number =       "3",
+       pages =        "205--216",
+       year =         "1995",
+       note =         "Eurographics '95 Conference issue",
+     }
+
+@ARTICLE{Tanaka96,
+title={Fast Analytic Shading and Shadowing for Area Light Sources},
+author={Toshimitsu Tanaka and Tokiichiro Takahashi},
+note={Submitted for publication},
+year=1996,
+annote={diffuse and specular surfaces},
+}
+
+@ARTICLE{Max95,
+AUTHOR={Nelson Max},
+TITLE={Optimal Sampling for Hemicubes},
+JOURNAL={IEEE Trans. on Visualization and Computer Graphics},
+VOLUME={1},
+NUMBER={1},
+YEAR={1995},
+KEYWORDS={hemicube, radiosity, form factor, sampling, variance, optimization},
+ABSTRACT={
+The hemicube estimates of form factors are based on a finite set of
+sample directions. We obtain several optimal arrangements of sample
+directions, which minimize the variance of these estimates. They are
+based on changing the size or shape of the pixels or the shape of the
+hemicube, or using non-uniform pixel grids. The best reduces the
+variance by 43%.
+
+The variance calculation is based on the assumption that the errors in
+the estimate are caused by the projections of single polygon edges, and
+that the positions and orientations of these edges are random. This
+replaces the infinite dimensional space of possible environments by the
+two dimensional space of great circles on the unit sphere, making the
+numerical variance minimization possible.
+},
+}
+
+@InProceedings{Myszkowski94,
+       title =        "Texture Mapping as an Alternative for Meshing During
+                      Walkthrough Animation",
+       author =       "Karol Myszkowski and Tosiyasu L. Kunii",
+       booktitle =    "Fifth Eurographics Workshop on Rendering",
+       pages =        "375--388",
+       month =        jun,
+       year =         "1994",
+       keywords =     "texture mapping, Gouraud shading, meshing, radiosity",
+}
+
+@INPROCEEDINGS{Ayatsuka96,
+TITLE={Penumbrae for 3D Interactions},
+AUTHOR={Yuji Ayatsuka and Satoshi Matsuoka and Jun Rekimoto},
+BOOKTITLE={9th Annl. Symp. for User Interface Software and Technology (UIST96)},
+MONTH={Nov.},
+YEAR=1996,
+PAGES={165-166},
+ABSTRACT={
+We propose a new feedback technique for 3D interaction in augmented
+reality using penumbrae which the objects cast. Rather than generating
+a real penumbra, which is computationally expensive, a fast, simplified
+algorithm is employed, which also is better suited for position
+feedback purposes. User studies show that 1) compared to orthographic
+shadow projections, 3D spatial recognition and placement tasks are
+substantially faster with our penumbrae, and 2) the users feel the
+feedback to be more natural, which is especially important in augmented
+reality.
+from http://www-masuda.is.s.u-tokyo.ac.jp/~aya/works/penumbra.html
+},
+}
+
+@TECHREPORT{Goslin95,
+author={Michael Goslin},
+title={Illumination as Texture Maps for Faster Rendering},
+SCHOOL={Dept. of CS, U. of North Carolina, Chapel Hill},
+year=1995,
+note={TR 95-042},
+keywords={texture mapping, radiosity, walkthrough, graphics workstation},
+note={ftp://ftp.cs.unc.edu/pub/publications/techreports/95.html},
+}
+
+@TECHREPORT{Bastos96,
+AUTHOR={Rui Bastos and Michael Goslin and Hansong Zhang},
+TITLE={Efficient Rendering of Radiosity Using Textures and Bicubic
+Reconstruction},
+NOTE={TR 96-025},
+INSTITUTION={Dept. of CS, U. of North Carolina at Chapel Hill},
+YEAR=1996,
+KEYWORDS={texture mapping},
+NOTE={http://www.cs.unc.edu/~bastos/radiosity.html},
+annote={also available at
+ftp://ftp.cs.unc.edu/pub/publications/techreports/96.html},
+}
+
+@INPROCEEDINGS{Bastos97,
+AUTHOR={Rui Bastos and Michael Goslin and Hansong Zhang},
+TITLE={Efficient Radiosity Rendering using Textures and Bicubic Reconstruction},
+BOOKTITLE={1997 Symposium on Interactive 3D Graphics},
+publisher={ACM SIGGRAPH},
+YEAR=1997,
+KEYWORDS={texture mapping},
+NOTE={To appear.
+http://www.cs.unc.edu/~bastos/radiosity.html},
+}
+
+@Article{Appel67qi,
+author =       "Arthur Appel",
+title =        "The Notion of Quantitative Invisibility and the
+Machine Rendering of Solids",
+year =         "1967",
+journal =      "Proc. ACM Natl. Mtg.",
+pages =        "387-393",
+keywords =     "hidden line",
+}
+
+@ARTICLE{Ackland81edge,
+  author =       "Bryan D. Ackland and Neil H. Weste",
+  title =        "The edge flag algorithm - a fill method for raster
+                 scan displays",
+  journal =      "IEEE Trans. on Comp.",
+  volume =       "C-30",
+  year =         "1981",
+  pages =        "41--47",
+  descriptors =  "Method; display; realization; two-dimensional plot;
+                 three-dimensional plot; graphics; frame store; polygon
+                 fill; raster scan; computer animation;",
+  annote =       "Contour (polygon) filling is a primitive required in
+                 many application areas of raster scan graphics. The
+                 bit-map memory in a frame-store display is
+                 computationally well suited to this task, as it
+                 provides a large scratch pad working space. In this
+                 paper, a number of contour filling algorithms based on
+                 the read/write properties of the frame-store memory are
+                 compared with the classical {"}ordered-edge-list{"}
+                 approach.",
+}
+
+@INPROCEEDINGS{Hardt96,
+author={Stephen Hardt and Seth Teller},
+title={High-Fidelity Radiosity Rendering at Interactive Rates},
+booktitle={Rendering Techniques '96},
+publisher={Springer-Verlag},
+year=1996,
+note={(Proc. Eurographics Workshop on Rendering)},
+pages={71-80,283},
+keywords={real time},
+}
+
+@TECHREPORT{Moller95ms,
+author={Tomas M\"oller},
+title={Virtual Radiosity},
+month={Sept.},
+year=1995,
+institution={Dept. of Computer Engineering, Lund Inst. of Tech., Sweden},
+keywords={texture mapping, graphics workstation, level of detail,
+virtual reality},
+note={Master's thesis, http://www.clarus.se/People/tompa/reports.html},
+annote={radiosity algorithm for graphics workstations that uses
+hardware texture mapping and multiple LODs},
+}
+
+@TECHREPORT{Moller96lic,
+author={Tomas M\"oller},
+title={Speed-Up Techniques for Computer Graphics},
+month={Dec.},
+year=1996,
+institution={Dept. of Computer Engineering, Chalmers U. of Tech., Sweden},
+note={Technical Report No. 250L, Licenciate thesis,
+http://www.clarus.se/People/tompa/reports.html},
+annote={66 pp.,
+contains four papers:
+(1) image resampling (Fast Bitmap Stretching, Gems III),
+(2) ray-surface intersection optimization (Faster Ray Tracing Using Scanline
+    Rejection, Gems V),
+(3) texturing for radiosity in VR (Radiosity Techniques for Virtual Reality,
+    Plzen, Czech, 1996),
+(4) faster soft shadows (Speed-Up Techniques for Soft Shadow Generation,
+    submitted 1996).
+},
+}
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/visibility.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/visibility.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/visibility.bib	(revision 243)
@@ -0,0 +1,2 @@
+
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/new.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/new.bib	(revision 277)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/new.bib	(revision 277)
@@ -0,0 +1,2203 @@
+@Article{avis96,
+  author = "David Avis and Komei Fukuda",
+  title = "Reverse Search for Enumeration",
+  journal =  "Discrete Applied Mathematics",
+  year = "1996",
+  volume = "6",
+  pages = "21--46"
+}
+
+@Article{Fukuda:1996:DDM,
+  author =       "K. Fukuda and A. Prodon",
+  title =        "Double Description Method Revisited",
+  journal =      "Lecture Notes in Computer Science",
+  volume =       "1120",
+  pages =        "91--111",
+  year =         "1996",
+  coden =        "LNCSD9",
+  ISSN =         "0302-9743",
+  bibdate =      "Mon Aug 25 16:23:54 MDT 1997",
+  acknowledgement = ack-nhfb,
+}
+
+@Misc{lrs_site,
+  author = 	 {David Avis},
+  title  = 	 {LRS polyhedra enumeration library},
+  year   =       {2002},
+  note    = 	 "Available at \url{http://cgm.cs.mcgill.ca/~avis/C/lrs.html}",
+}
+
+@InProceedings{buehler2001,
+  pages =        "425--432",
+  year =         "2001",
+  title =        "Unstructured Lumigraph Rendering",
+  author =       "Chris Buehler and Michael Bosse and Leonard McMillan
+                 and Steven J. Gortler and Michael F. Cohen",
+  abstract =     "We describe an image based rendering approach that
+                 generalizes many current image based rendering
+                 algorithms, including light field rendering and
+                 view-dependent texture mapping. In particular, it
+                 allows for lumigraph-style rendering from a set of
+                 input cameras in arbitrary configurations (i.e., not
+                 restricted to a plane or to any specific manifold). In
+                 the case of regular and planar input camera positions,
+                 our algorithm reduces to a typical lumigraph approach.
+                 When presented with fewer cameras and good approximate
+                 geometry, our algorithm behaves like view-dependent
+                 texture mapping. The algorithm achieves this
+                 flexibility because it is designed to meet a set of
+                 specific goals that we describe. We demonstrate this
+                 flexibility with a variety of examples.",
+  keywords =     "Image-Based Rendering",
+  booktitle =    "Computer Graphics (SIGGRAPH '01 Proceedings)",
+}
+
+@InProceedings{haumont2005:egsr,
+  pages =        "211--222",
+  year =         "2005",
+  title =        "A Low Dimensional Framework for Exact Polygon-to-Polygon Occlusion Queries",
+  author =       {Denis Haumont and Otso M\"{a}kinen and Shaun Nirenstein},
+  booktitle =    "Proceedings of Eurographics Symposium on Rendering",
+}
+
+
+
+@InProceedings{Sadagic,
+  pages =        "111--122",
+  year =         "2000",
+  title =        "Dynamic Polygon Visibility Ordering for Head-Slaved
+                 Viewing in Virtual Environments",
+  author =       "Amela Sadagic and Mel Slater",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2000-336",
+  abstract =     "This paper presents an approach to visibility called
+                 the Viewpoint Movement Space (VpMS) algorithm which
+                 supports the concept of dynamic polygon visibility
+                 orderings for head-slaved viewing in virtual
+                 environments (VE). The central idea of the approach is
+                 that the visibility, in terms of back-to-front polygon
+                 visibility ordering, does not change dramatically as
+                 the viewpoint moves. Moreover, it is possible to
+                 construct a partition of the space into cells, where
+                 for each cell the ordering is invariant. As the
+                 viewpoint moves across a cell boundary typically only a
+                 small and predictable change is made to the visibility
+                 ordering. The cost to perform this operation represents
+                 a notable reduction when compared with the cost of
+                 resolving the visibility information from the BSP tree
+                 where the classification of the viewpoint with every
+                 node plane has to be performed. The paper demonstrates
+                 how the subdivision into such cells can represent the
+                 basic source for an acceleration of the rendering
+                 process. We also discuss how the same supportive data
+                 structure can be exploited to solve other tasks in the
+                 graphics pipeline.",
+  organization = "Eurographics Association",
+  volume =       "19(2)",
+  booktitle =    "Computer Graphics Forum",
+}
+
+@Book{dcg-handbook,
+  title =        "Handbook of Discrete and Computational Geometry",
+  booktitle =    "Handbook of Discrete and Computational Geometry",
+  publisher =    "CRC Press",
+  year =         "1997",
+  editor =       "Jacob E. Goodman and Joseph O'Rourke",
+}
+
+@PhdThesis{Pu98-DSGIV,
+  author =       "Fan-Tao Pu",
+  year =         "1998",
+  title =        "Data Structures for Global Illumination and Visibility
+                 Queries in 3-Space",
+  address =      "College Park, MD",
+  school =       "University of Maryland",
+}
+
+@TechReport{Hillesland02,
+  author =       "Karl Hillesland and Brian Salomon and Anselmo Lastra
+                 and Dinesh Manocha",
+  title =        "Fast and Simple Occlusion Culling Using Hardware-Based
+                 Depth Queries",
+  institution =  "Department of Computer Science, University of North
+                 Carolina - Chapel Hill",
+  number =       "TR02-039",
+  month =        sep # " 12",
+  year =         "2002",
+  URL =          "ftp://ftp.cs.unc.edu/pub/publications/techreports/02-039.pdf",
+}
+
+@Article{Staneker:2004:OCO,
+  author =       "Dirk Staneker and Dirk Bartz and Wolfgang
+                 Stra{\ss}er",
+  title =        "Occlusion Culling in {OpenSG PLUS}",
+  journal =      "Computers and Graphics",
+  volume =       "28",
+  number =       "1",
+  pages =        "87--92",
+  month =        feb,
+  year =         "2004",
+  CODEN =        "COGRD2",
+  ISSN =         "0097-8493",
+  bibdate =      "Tue Jan 27 12:04:28 MST 2004",
+  acknowledgement = ack-nhfb,
+}
+
+@Article{Staneker:2004:EMO,
+   AUTHOR = "Dirk Staneker and Dirk Bartz and Wolfgang Strasser",
+   TITLE = "Efficient Multiple Occlusion Queries for Scene Graph Systems",
+   JOURNAL = "WSI Report (WSI-2004-6)",
+   INSTITUTION = {Wilhelm Schickard Institute for Computer Science, Graphical Interactive Systems (WSI/GRIS), University of T{\"u}bingen},
+   YEAR = "2004",
+   KEYWORDS = {GRIS}
+}
+
+@InProceedings{Meissner01,
+  author =       "Michael Meissner and Dirk Bartz and Gordon Mueller and
+                 Tobias Huettner and Jens Einighammer",
+  title =        "Generation of Decomposition Hierarchies for Efficient
+                 Occlusion Culling of Large Polygonal Models",
+  pages =        "225--232",
+  booktitle =    "Proceedings of the Vision Modeling and Visualization
+                 Conference 2001",
+  month =        nov # " ~21--23",
+  year =         "2001",
+}
+
+
+@Article{Scott:1998:OVF,
+  author =       "N. D. Scott and D. M. Olsen and E. W. Gannett",
+  title =        "An Overview of the {VISUALIZE fx} Graphics Accelerator
+                 Hardware",
+  journal =      "Hew\-lett-Pack\-ard Journal: technical information
+                 from the laboratories of Hew\-lett-Pack\-ard Company",
+  volume =       "49",
+  number =       "2",
+  pages =        "28--34",
+  month =        may,
+  year =         "1998",
+  CODEN =        "HPJOAX",
+  ISSN =         "0018-1153",
+  bibdate =      "Thu Nov 5 16:08:50 MST 1998",
+  URL =          "http://www.hp.com/hpj/98may/tc-05-98.htm",
+  acknowledgement = ack-nhfb,
+}
+
+@Article{Leyvand:2003:RSF,
+  author =       "Tommer Leyvand and Olga Sorkine and Daniel Cohen-Or",
+  title =        "Ray space factorization for from-region visibility",
+  journal =      "ACM Transactions on Graphics (Proceedings of SIGGRAPH '03)",
+  volume =       "22",
+  number =       "3",
+  pages =        "595--604",
+  month =        jul,
+  year =         "2003",
+}
+
+@InProceedings{Chrysanthou:97,
+  author =       "M. Slater and Y. Chrysanthou",
+  title =        "View Volume Culling Using a Probabilistic Caching
+                 Scheme",
+  pages =        "71--78",
+  booktitle =    "Proceedings of the {ACM} Symposium on Virtual Reality
+                 Software and Technology ({VRST}'97)",
+  optmonth =        sep # "15--17~",
+  publisher =    "ACM Press",
+  optaddress =      "New York",
+  year =         "1997",
+}
+
+@InProceedings{stamminger02,
+  pages =        "557--562",
+  year =         "2002",
+  title =        "Perspective Shadow Maps",
+  author =       "Marc Stamminger and George Drettakis",
+  abstract =     "Shadow maps are probably the most widely used means
+                 for the generation of shadows, despite their well known
+                 aliasing problems. In this paper we introduce
+                 perspective shadow maps, which are generated in
+                 normalized device coordinate space, i.e., after
+                 perspective transformation. This results in important
+                 reduction of shadow map aliasing with almost no
+                 overhead. We correctly treat light source
+                 transformations and show how to include all objects
+                 which cast shadows in the transformed space.
+                 Perspective shadow maps can directly replace standard
+                 shadow maps for interactive hardware accelerated
+                 rendering as well as in high-quality, offline
+                 renderers.",
+  keywords =     "Frame Buffer Algorithms, Graphics Hardware,
+                 Illumination, Level of Detail Algorithms, Rendering,
+                 Shadow Algorithms",
+  booktitle =    "SIGGRAPH 2002 Conference Proceedings",
+  publisher =    "ACM Press/ ACM SIGGRAPH",
+}
+
+
+@Article{vazquez99,
+  author =       "C. Saona-V{\'a}zquez and I. Navazo and P. Brunet",
+  title =        "The visibility octree: a data structure for {$3$D}
+                 navigation",
+  journal =      "Computers and Graphics",
+  volume =       "23",
+  number =       "5",
+  pages =        "635--643",
+  month =        oct,
+  year =         "1999",
+  coden =        "COGRD2",
+  ISSN =         "0097-8493",
+  bibdate =      "Sat Oct 21 14:27:20 MDT 2000",
+  url =          "http://www.elsevier.nl/gej-ng/10/13/20/24/34/28/abstract.html;
+                 http://www.elsevier.nl/gej-ng/10/13/20/24/32/28/article.pdf",
+  acknowledgement = ack-nhfb,
+}
+
+@inproceedings{lloyd02,
+ author = {Brandon Lloyd and Parris Egbert},
+ title = {Horizon occlusion culling for real-time rendering of hierarchical terrains},
+ booktitle = {Proceedings of the conference on Visualization '02},
+ year = {2002},
+ isbn = {0-7803-7498-3},
+ pages = {403--410},
+ location = {Boston, Massachusetts},
+ publisher = {IEEE Press},
+ }
+
+
+@InCollection{wald01_eg,
+  pages =        "153--164",
+  year =         "2001",
+  title =        "Interactive Rendering with Coherent Ray Tracing",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2001-174",
+  author =       "Ingo Wald and Philipp Slusallek and Carsten Benthin
+                 and Markus Wagner",
+  abstract =     "For almost two decades researchers have argued that
+                 ray tracing will eventually become faster than the
+                 rasterization technique that completely dominates
+                 todays graphics hardware. However, this has not
+                 happened yet. Ray tracing is still exclusively being
+                 used for off-line rendering of photorealistic images
+                 and it is commonly believed that ray tracing is simply
+                 too costly to ever challenge rasterization-based
+                 algorithms for interactive use. However, there is
+                 hardly any scientific analysis that supports either
+                 point of view. In particular there is no evidence of
+                 where the crossover point might be, at which ray
+                 tracing would eventually become faster, or if such a
+                 point does exist at all. This paper provides several
+                 contributions to this discussion: We first present a
+                 highly optimized implementation of a ray tracer that
+                 improves performance by more than an order of magnitude
+                 compared to currently available ray tracers. The new
+                 algorithm make better use of computational resources
+                 such as caches and SIMD instructions and better
+                 exploits image and object space coherence. Secondly, we
+                 show that this software implementation can challenge
+                 and even outperform high-end graphics hardware in
+                 interactive rendering performance for complex
+                 environments. We also provide an brief overview of the
+                 benefits of ray tracing over rasterization algorithms
+                 and point out the potential of interactive ray tracing
+                 both in hardware and software.",
+  editor =       "A. Chalmers and T.-M. Rhyne",
+  volume =       "20(3)",
+  series =       "Computer Graphics Forum",
+  booktitle =    "EG 2001 Proceedings",
+  publisher =    "Blackwell Publishing",
+}
+
+
+@InProceedings{purcell02,
+  pages =        "703--712",
+  year =         "2002",
+  title =        "Ray Tracing on Programmable Graphics Hardware",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2002-222",
+  author =       "Timothy J. Purcell and Ian Buck and William R. Mark
+                 and Pat Hanrahan",
+  abstract =     "Recently a breakthrough has occurred in graphics
+                 hardware: fixed function pipelines have been replaced
+                 with programmable vertex and fragment processors. In
+                 the near future, the graphics pipeline is likely to
+                 evolve into a general programmable stream processor
+                 capable of more than simply feed-forward triangle
+                 rendering. In this paper, we evaluate these trends in
+                 programmability of the graphics pipeline and explain
+                 how ray tracing can be mapped to graphics hardware.
+                 Using our simulator, we analyze the performance of a
+                 ray casting implementation on next generation
+                 programmable graphics hardware. In addition, we compare
+                 the performance difference between non-branching
+                 programmable hardware using a multipass implementation
+                 and an architecture that supports branching. We also
+                 show how this approach is applicable to other ray
+                 tracing algorithms such as Whitted ray tracing, path
+                 tracing, and hybrid rendering algorithms. Finally, we
+                 demonstrate that ray tracing on graphics hardware could
+                 prove to be faster than CPU based implementations as
+                 well as competitive with traditional hardware
+                 accelerated feed-forward triangle rendering.",
+  keywords =     "Programmable Graphics Hardware, Ray Tracing",
+  booktitle =    "Computer Graphics (SIGGRAPH '02 Proceedings)",
+}
+
+
+@InProceedings{Gortler:1996:L,
+  author =       "Steven J. Gortler and Radek Grzeszczuk and Richard
+                 Szeliski and Michael F. Cohen",
+  title =        "The Lumigraph",
+  series =       "Annual Conference Series",
+  pages =        "43--54",
+  booktitle =    "Computer Graphics (SIGGRAPH '96 Proceedings)",
+  year =         "1996",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  annote =       "This paper discusses a new method for capturing the
+                 complete appearance of both synthetic and real world
+                 objects and scenes, representing this information, and
+                 then using this representation to render images of the
+                 object from new camera positions. Unlike the shape
+                 capture process traditionally used in computer vision
+                 and the rendering process traditionally used in
+                 computer graphics, our approach does not rely on
+                 geometric representations. Instead we sample and
+                 reconstruct a 4D function, which we call a Lumigraph.
+                 The Lumigraph is a subset of the complete plenoptic
+                 function that describes the flow of light at all
+                 positions in all directions. With the Lumigraph, new
+                 images of the object can be generated very quickly,
+                 independent of the geometric or illumination complexity
+                 of the scene or object. The paper discusses a complete
+                 working system including the capture of samples, the
+                 construction of the Lumigraph, and the subsequent
+                 rendering of images from this new representation.",
+}
+
+
+@Article{Gotsman:1999:OOC,
+  author =       "Craig Gotsman and Oded Sudarsky and Jeffrey A.
+                 Fayman",
+  title =        "Optimized occlusion culling using five-dimensional
+                 subdivision",
+  journal =      "Computers and Graphics",
+  volume =       "23",
+  number =       "5",
+  pages =        "645--654",
+  month =        oct,
+  year =         "1999",
+  coden =        "COGRD2",
+  ISSN =         "0097-8493",
+  bibdate =      "Sat Oct 21 14:27:20 MDT 2000",
+  url =          "http://www.elsevier.nl/gej-ng/10/13/20/24/34/29/abstract.html;
+                 http://www.elsevier.nl/gej-ng/10/13/20/24/32/29/article.pdf",
+  acknowledgement = ack-nhfb,
+}
+
+@article{Pag94,
+ author = {David W. Paglieroni and Sidney M. Petersen},
+ title = {Height distributional distance transform methods for height field ray tracing},
+ journal = {ACM Transactions on Graphics (TOG)},
+ volume = {13},
+ number = {4},
+ year = {1994},
+ issn = {0730-0301},
+ pages = {376--399},
+ doi = {http://doi.acm.org/10.1145/195826.197312},
+ publisher = {ACM Press},
+ }
+
+@article{lee97,
+    author = "Cheol-Hi Lee and Yeong Gil Shin",
+    title = "A Terrain Rendering Method using Vertical Ray Coherence",
+    journal = "The Journal of Visualization and Computer Animation",
+    volume = "8",
+    number = "2",
+    pages = "97--114",
+    year = "1997",
+}
+
+
+@TechReport{mcmillan:97:phd,
+  type =         "Ph.D. Thesis",
+  number =       "TR97-013",
+  institution =  "University of North Carolina, Chapel Hill",
+  title =        "An Image-Based Approach to Three-Dimensional Computer
+                 Graphics",
+  month =        may,
+  year =         "1997",
+  bibdate =      "June 9, 1997",
+  url =          "ftp://ftp.cs.unc.edu/pub/publications/techreports/97-013.pdf.Z",
+  author =       "Leonard McMillan",
+}
+
+
+@MastersThesis{aila:00:msc,
+  author = 	 {Timo Aila},
+  title = 	 {SurRender Umbra: A Visibility Determination Framework
+for Dynamic Environments},
+  school = 	 {Helsinki University of Technology},
+  year = 	 {2000},
+}
+
+
+@Article{duguet:02:sig,
+  year =         "2002",
+  title =        "Robust Epsilon Visibility",
+  author =       "Florent Duguet and George Drettakis",
+  journal =    "To appear in Computer Graphics (SIGGRAPH'02 Proceedings)",
+  publisher =    "ACM SIGGRAPH",
+}
+
+
+@InProceedings{wand:01:sig,
+  pages =        "361--370",
+  year =         "2001",
+  title =        "The Randomized z-Buffer Algorithm: Interactive
+                 Rendering of Highly Complex Scenes",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2001-125",
+  author =       "Michael Wand and Matthias Fischer and Ingmar Peter and
+                 Friedhelm Meyer auf der Heide and Wolfgang
+                 Stra{\ss{}}er",
+  abstract =     "We present a new output-sensitive rendering algorithm,
+                 the randomized z-buffer algorithm. It renders an image
+                 of an arbitrary three-dimensional scene consisting of
+                 triangular primitives by reconstruction from a
+                 dynamically chosen set of random surface sample points.
+                 This approach is independent of mesh connectivity and
+                 topology. The resulting rendering time grows only
+                 logarithmically with the numbers of triangles in the
+                 scene. We were able to render walkthroughs of scenes of
+                 up to 1014 triangles at interactive frame rates.
+                 Automatic identification of low detail scene components
+                 ensures that the rendering speed of the randomized
+                 z-buffer cannot drop below that of conventional
+                 z-buffer rendering. Experimental and analytical
+                 evidence is given that the image quality is comparable
+                 to that of common approaches like z-buffer rendering.
+                 The precomputed data structures employed by the
+                 randomized z-buffer allow for interactive dynamic
+                 updates of the scene. Their memory requirements grow
+                 only linearly with the number of triangles and allow
+                 for a scene graph based instantiation scheme to further
+                 reduce memory consumption.",
+  keywords =     "Rendering Systems, Level of Detail Algorithms, Monte
+                 Carlo Techniques",
+  booktitle =    "Computer Graphics  (Proceedings of SIGGRAPH 2001)",
+  publisher =    "ACM SIGGRAPH",
+}
+
+@Book{berg:97,
+  year =         "1997",
+  title =        "Computational Geometry: Algorithms and Applications",
+  author =       "{Mark de} Berg and {Marc van} Kreveld and Mark
+                 Overmars and Otfried Schwarzkopf",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-1997-230",
+  language =     "en",
+  abstract =     "Computational geometry emerged from the field of
+                 algorithms design and analysis in the late 1970s. It
+                 has grown into a recognized discipline with its own
+                 journals, conferences, and a large community of active
+                 researchers. The success of the field as a research
+                 discipline can on the one hand be explained from the
+                 beauty of the problems studied and the solutions
+                 obtained, and, on the other hand, by the many
+                 application domains---computer graphics, geographic
+                 information systems (GIS), robotics, and others---in
+                 which geometric algorithms play a fundamental role. For
+                 many geometric problems the early algorithmic solutions
+                 were either slow or difficult to understand and
+                 implement. In recent years a number of new algorithmic
+                 techniques have been developed that improved and
+                 simplified many of the previous approaches. In this
+                 textbook we have tried to make these modern algorithmic
+                 solutions accessible to a large audience. The book has
+                 been written as a textbook for a course in
+                 computational geometry, but it can also be used for
+                 self study. Each of the sixteen chapters, except the
+                 introductory chapter, starts with a problem arising in
+                 one of the application domains. This problem is then
+                 transformed into a purely geometric one, which is
+                 solved using techniques from computational geometry.
+                 The geometric problem and the concepts and techniques
+                 needed to solve it are the real topic of each chapter.
+                 The choice of the applications was guided by the topics
+                 in computational geometry we wanted to cover; they are
+                 not meant to provide a good coverage of the application
+                 domains. The purpose of the applications is to motivate
+                 the reader; the goal of the chapters is not to provide
+                 ready-to-use solutions for them. Having said this, we
+                 believe that knowledge of computational geometry is
+                 important to solve geometric problems in application
+                 areas efficiently. We hope that our book will not only
+                 raise the interest of people from the algorithms
+                 community, but also from people in the application
+                 areas. For most geometric problems treated we give just
+                 one solution, even when a number of different solutions
+                 exist. In general we have chosen the solution that is
+                 most easy to understand and implement. This is not
+                 necessarily the most efficient solution. We also took
+                 care that the book contains a good mixture of
+                 techniques like divide-and-conquer, plane sweep, and
+                 randomized algorithms. We decided not to treat all
+                 sorts of variations to the problems; we felt it is more
+                 important to introduce all main topics in computational
+                 geometry than to give more detailed information about a
+                 smaller number of topics.",
+  address =      "Berlin, Heidelberg, New York",
+  copyright =    "Springer-Verlag",
+  publisher =    "Springer-Verlag",
+}
+
+
+@InProceedings{Appel:1968:STS,
+  author =       "Arthur Appel",
+  title =        "Some Techniques for Shading Machine Renderings of
+                 Solids",
+  booktitle =    "AFIPS 1968 Spring Joint Computer Conf.",
+  pages =        "37--45",
+  volume =       "32",
+  year =         "1968",
+  keywords =     "visible",
+  annote =       "first ray tracing paper, light ray tracing, black and
+                 white pictures on Calcomp plotter This paper presents
+                 some recent experimental results in the automatic
+                 shading of line drawings. The purpose of these
+                 experiments was to generate pictures of objects
+                 consisting of flat surfaces on a digital plotter and to
+                 evaluate the cost of generating such pictures and the
+                 resultant graphical quality.",
+}
+
+
+@Article{floriani:95:vc,
+  author =       "L. De Floriani and P. Magillo",
+  title =        "Horizon Computation on a Hierarchical Terrain Model",
+  journal =      "The Visual Computer: An International Journal of
+                 Computer Graphics",
+  volume =       "11",
+  year =         "1995",
+  publisher =    "Springer Verlag, New York",
+  pages =        "134--149",
+  topic =        "visibility",
+}
+
+@InProceedings{nirenstein:02:egwr,
+  year =         "2002",
+  title =        "Exact {From-Region} Visibility Culling",
+  author =       "Shaun Nirenstein and Edwin Blake and James Gain",
+  booktitle =    "Proceedings of EUROGRAPHICS Workshop on Rendering",
+  pages =        "199--210",
+
+}
+
+@InCollection{Klosowski:2000:PLP,
+  pages =        "108--123",
+  year =         "2000",
+  title =        "The Prioritized-Layered Projection Algorithm for
+                 Visible Set Estimation",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2000-206",
+  author =       "J. T. Klosowski and C. T. Silva",
+  abstract =     "Prioritized-Layered Projection (PLP) is a technique
+                 for fast rendering of high depth complexity scenes. It
+                 works by estimating the visible polygons of a scene
+                 from a given viewpoint incrementally, one primitive at
+                 a time. It is not a conservative technique, instead PLP
+                 is suitable for the computation of partially correct
+                 images for use as part of time-critical rendering
+                 systems. From a very high level, PLP amounts to a
+                 modification of a simple view-frustum culling
+                 algorithm, however, it requires the computation of a
+                 special occupancy-based tessellation and the assignment
+                 to each cell of the tessellation a solidity value,
+                 which is used to compute a special ordering on how
+                 primitives get projected. In this paper, we detail the
+                 PLP algorithm, its main components, and implementation.
+                 We also provide experimental evidence of its
+                 performance, including results on two types of spatial
+                 tessellation (using octree- and Delaunay-based
+                 tessellations), and several datasets. We also discuss
+                 several extensions of our technique.",
+  editor =       "Hans Hagen and David S. Ebert",
+  keywords =     "Visibility, time-critical rendering, occlusion
+                 culling, visible set, spatial tessellation",
+  volume =       "6 (2)",
+  booktitle =    "IEEE Transactions on Visualization and Computer
+                 Graphics",
+  publisher =    "IEEE Computer Society",
+}
+
+@Article{Klosowski:2001:ECV,
+  author =       "James T. Klosowski and Cl{\'a}udio T. Silva.",
+  title =        "Efficient Conservative Visibility Culling Using the
+                 Prioritized-Layered Projection Algorithm",
+  journal =      "IEEE Transactions on Visualization and Computer
+                 Graphics",
+  volume =       "7",
+  number =       "4",
+  pages =        "365--379",
+  month =        oct,
+  year =         "2001",
+  coden =        "ITVGEA",
+  ISSN =         "1077-2626",
+  bibdate =      "Sat Feb 23 09:10:10 MST 2002",
+  url =          "http://www.computer.org/tvcg/tg2001/v0365abs.htm;
+                 http://dlib.computer.org/tg/books/tg2001/pdf/v0365.pdf",
+  acknowledgement = ack-nhfb,
+}
+
+
+@InProceedings{hey:01:egwr,
+  author =       "Heinrich Hey and Robert F. Tobler and Werner
+                 Purgathofer",
+  title =        "{Real-Time} Occlusion Culling with a Lazy Occlusion
+                 Grid",
+  pages =        "217--222",
+  year= "2001",
+  booktitle =    "Proceedings of EUROGRAPHICS Workshop on Rendering",
+}
+
+@InProceedings{wonka:01:eg,
+  pages =        "411--421",
+  year =         "2001",
+  title =        "Instant Visibility",
+  author =       "Peter Wonka and Michael Wimmer and Fran{\c{c}}ois X.
+                 Sillion",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2001-201",
+  abstract =     "We present an online occlusion culling system which
+                 computes visibility in parallel to the rendering
+                 pipeline. We show how to use point visibility
+                 algorithms to quickly calculate a tight potentially
+                 visible set (PVS) which is valid for several frames, by
+                 shrinking the occluders used in visibility calculations
+                 by an adequate amount. These visibility calculations
+                 can be performed on a visibility server, possibly a
+                 distinct computer communicating with the display host
+                 over a local network. The resulting system essentially
+                 combines the advantages of online visibility processing
+                 and region-based visibility calculations, allowing
+                 asynchronous processing of visibility and display
+                 operations. We analyze two different types of
+                 hardware-based point visibility algorithms and address
+                 the problem of bounded calculation time which is the
+                 basis for true real-time behavior. Our results show
+                 reliable, sustained 60 Hz performance in a walkthrough
+                 with an urban environment of nearly 2 million polygons,
+                 and a terrain flyover.",
+  booktitle =    "Computer Graphics Forum (Proceedings of EUROGRAPHICS '01)",
+  optpublisher =    "Blackwell Publishing",
+}
+
+@InProceedings{fernando:01:sig,
+  pages =        "387--390",
+  year =         "2001",
+  title =        "Adaptive Shadow Maps",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2001-128",
+  author =       "Randima Fernando and Sebastian Fernandez and Kavita
+                 Bala and Donald P. Greenberg",
+  abstract =     "Shadow maps provide a fast and convenient method of
+                 identifying shadows in scenes but can introduce
+                 aliasing. This paper introduces the Adaptive Shadow Map
+                 (ASM) as a solution to this problem. An ASM removes
+                 aliasing by resolving pixel size mismatches between the
+                 eye view and the light source view. It achieves this
+                 goal by storing the light source view (i.e., the shadow
+                 map for the light source) as a hierarchical grid
+                 structure as opposed to the conventional flat
+                 structure. As pixels are transformed from the eye view
+                 to the light source view, the ASM is refined to create
+                 higher-resolution pieces of the shadow map when needed.
+                 This is done by evaluating the contributions of shadow
+                 map pixels to the overall image quality. The
+                 improvement process is view-driven, progressive, and
+                 confined to a user-specifiable memory footprint. We
+                 show that ASMs enable dramatic improvements in shadow
+                 quality while maintaining interactive rates.",
+  keywords =     "Rendering, Shadow Algorithms",
+  booktitle =    "Computer Graphics  (Proceedings of SIGGRAPH '01)",
+  publisher =    "ACM SIGGRAPH",
+}
+
+
+@InProceedings{rusinkiewicz:00:sig,
+  pages =        "343--352",
+  year =         "2000",
+  title =        "{QS}plat: {A} Multiresolution Point Rendering System
+                 for Large Meshes",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2000-73",
+  author =       "Szymon Rusinkiewicz and Marc Levoy",
+  abstract =     "Advances in 3D scanning technologies have enabled the
+                 practical creation of meshes with hundreds of millions
+                 of polygons. Traditional algorithms for display,
+                 simplification, and progressive transmission of meshes
+                 are impractical for data sets of this size. We describe
+                 a system for representing and progressively displaying
+                 these meshes that combines a multiresolution hierarchy
+                 based on bounding spheres with a rendering system based
+                 on points. A single data structure is used for view
+                 frustum culling, backface culling, level-of-detail
+                 selection, and rendering. The representation is compact
+                 and can be computed quickly, making it suitable for
+                 large data sets. Our implementation, written for use in
+                 a large-scale 3D digitization project, launches
+                 quickly, maintains a user-settable interactive frame
+                 rate regardless of object complexity or camera
+                 position, yields reasonable image quality during
+                 motion, and refines progressively when idle to a high
+                 final image quality. We have demonstrated the system on
+                 scanned models containing hundreds of millions of
+                 samples.",
+  keywords =     "Rendering systems, Spatial data structures, Level of
+                 detail algorithms, Compression algorithms",
+  booktitle =    "Computer Graphics  (Proceedings of SIGGRAPH 2000)",
+  publisher =    "ACM SIGGRAPH / Addison Wesley Longman",
+}
+
+@InProceedings{pfister:00:sig,
+  pages =        "335--342",
+  year =         "2000",
+  title =        "Surfels: Surface Elements as Rendering Primitives",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2000-69",
+  author =       "Hanspeter Pfister and Matthias Zwicker and Jeroen van
+                 Baar and Markus Gross",
+  abstract =     "Surface elements (surfels) are a powerful paradigm to
+                 efficiently render complex geometric objects at
+                 interactive frame rates. Unlike classical surface
+                 discretizations, i.e., triangles or quadrilateral
+                 meshes, surfels are point primitives without explicit
+                 connectivity. Surfel attributes comprise depth, texture
+                 color, normal, and others. As a pre-process, an
+                 octree-based surfel representation of a geometric
+                 object is computed. During sampling, surfel positions
+                 and normals are optionally perturbed, and different
+                 levels of texture colors are prefiltered and stored per
+                 surfel. During rendering, a hierarchical forward
+                 warping algorithm projects surfels to a z-buffer. A
+                 novel method called visibility splatting determines
+                 visible surfels and holes in the z-buffer. Visible
+                 surfels are shaded using texture filtering, Phong
+                 illumination, and environment mapping using per-surfel
+                 normals. Several methods of image reconstruction,
+                 including supersampling, offer flexible speed-quality
+                 tradeoffs. Due to the simplicity of the operations, the
+                 surfel rendering pipeline is amenable for hardware
+                 implementation. Surfel objects offer complex shape, low
+                 rendering cost and high image quality, which makes them
+                 specifically suited for low-cost, real-time graphics,
+                 such as games.",
+  keywords =     "Rendering Systems, Texture Mapping",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH 2001)",
+  publisher =    "ACM SIGGRAPH / Addison Wesley Longman",
+}
+
+
+@InProceedings{Grossman:rend98-181,
+  booktitle =    "Rendering Techniques '98 (Proceedings of Eurographics Rendering Workshop)",
+  year =         "1998",
+  publisher =    "Springer-Verlag Wien New York",
+  author =       "J. P. Grossman and William J. Dally",
+  title =        "Point Sample Rendering",
+  pages =        "181--192",
+  abstract =     "We present an algorithm suitable for real-time, high
+                 quality rendering of complex objects. Objects are
+                 represented as a dense set of surface point samples
+                 which contain colour, depth and normal infocmation.
+                 These point samples are obtained by sampling
+                 orthographic views on an equilateral triangle lattice.
+                 They are rendered directly and independently without
+                 any knowledge of surface topology. We introduce a novel
+                 solution to the problem of surface reconstruction using
+                 a hierarchy of Z-buffers to detect tears. Our algorithm
+                 is fast and requires only modest resources.",
+}
+
+
+
+@Article{Bartz:1999:OAO,
+  author =       "Dirk Bartz and Michael Mei{\ss}ner and Tobias
+                 H{\"u}ttner",
+  title =        "Open{GL}-assisted occlusion culling for large
+                 polygonal models",
+  journal =      "Computers and Graphics",
+  volume =       "23",
+  number =       "5",
+  pages =        "667--679",
+  month =        oct,
+  year =         "1999",
+  coden =        "COGRD2",
+  ISSN =         "0097-8493",
+  bibdate =      "Sat Oct 21 14:27:20 MDT 2000",
+  url =          "http://www.elsevier.nl/gej-ng/10/13/20/24/34/31/abstract.html;
+                 http://www.elsevier.nl/gej-ng/10/13/20/24/32/31/article.pdf",
+  acknowledgement = ack-nhfb,
+}
+
+
+@InProceedings{popescu:98:viz,
+  author =       "V. Popescu and A. Lastra and D. Aliaga and M. de
+                 Oliveira Neto",
+  title =        "Efficient warping for architectural walkthroughs using
+                 layered depth images",
+  pages =        "211--216",
+  booktitle =    "{IEEE} Visualization '98 ({VIS} '98)",
+  ISBN =         "0-8186-9176-X",
+  month =        oct,
+  publisher =    "IEEE",
+  address =      "Washington - Brussels - Tokyo",
+  year =         "1998",
+}
+
+
+@InProceedings{aliaga:99:sig,
+  author =       "Daniel G. Aliaga and Anselmo Lastra",
+  title =        "Automatic Image Placement to Provide a Guaranteed
+                 Frame Rate",
+  pages =        "307--316",
+  ISBN =         "0-201-48560-5",
+  editor =       "Alyn Rockwood",
+  booktitle =    "Proceedings of the Conference on Computer Graphics
+                 (Siggraph99)",
+  month =        aug # "8--13",
+  publisher =    "ACM Press",
+  address =      "N.Y.",
+  year =         "1999",
+}
+
+@InProceedings{aliaga:99:i3dg,
+  author =       "Daniel Aliaga and Jon Cohen and Andrew Wilson and Eric
+                 Baker and Hansong Zhang and Carl Erikson and Keny Hoff
+                 and Tom Hudson and Wolfgang St{\"u}rzlinger and Rui
+                 Bastos and Mary Whitton and Fred Brooks and Dinesh
+                 Manoclia",
+  title =        "{MMR}: An Interactive Massive Model Rendering System
+                 Using Geometric and Image-Based Acceleration (Color
+                 Plate {S}. 237)",
+  pages =        "199--206",
+  ISBN =         "1-58113-082-1",
+  editor =       "Stephen N. Spencer",
+  booktitle =    "Proceedings of the Conference on the 1999 Symposium on
+                 interactive {3D} Graphics",
+  month =        apr # " ~26--28",
+  publisher =    "ACM Press",
+  address =      "New York",
+  year =         "1999",
+}
+
+
+
+@InProceedings{wimmer:01:egwr,
+  author =       "Michael Wimmer and Peter Wonka and Francois Sillion",
+  title =        "{Point-Based} Impostors for {Real-Time}
+                 Visualization",
+  pages =        "163--176",
+  crossref =     "RENDERING TECHNIQUES`01",
+}
+
+@InProceedings{Jeschke:LEM:2002,
+  title =        "{Layered Environment-Map Impostors for Arbitrary
+                 Scenes}",
+  author =       "Stefan Jeschke and Michael Wimmer and Heidrun
+                 Schuman",
+  booktitle =    "Proc. Graphics Interface",
+  year =         "2002",
+  month =        may,
+  location =     "Calgary, Alberta",
+  pages =        "1--8",
+}
+
+@Book{Neider93,
+  author =       "Jackie Neider and Tom Davis and Mason Woo",
+  title =        "{OpenGL} Programming Guide",
+  publisher =    "Addison-Wesley",
+  address =      "Reading MA",
+  year =         "1993",
+  keywords =     "computer graphics, graphics workstation, SGI",
+  annote =       "shadows on a plane p. 401",
+}
+
+@PhdThesis{Havran2000:PhD,
+ author = "Vlastimil Havran",
+ title  = "Heuristic Ray Shooting Algorithms",
+ school = "Department of Computer Science and Engineering,
+           Faculty of Electrical Engineering,
+           Czech Technical University in Prague",
+ type   = "Ph.D. Thesis",
+ year   = "2000",
+ month  = "November",
+ url    = "http://www.cgg.cvut.cz/~havran/phdthesis.html",
+ annote = "Global illumination research aiming at the photo-realistic
+    image synthesis pushes forward research in computer graphics as a
+    whole. The computation of visually plausible images is
+    time-consuming and far from being realtime at present. A significant
+    part of computation in global illumination algorithms involves
+    repetitive computing of visibility queries.
+      In the thesis, we describe our results in ray shooting, which is
+    a well-known problem in the field of visibility. The problem is
+    difficult in spite of its simple definition: For a given oriented
+    half-line and a set of objects, find out the first object
+    intersected by the half-line if such an object exists. A
+    naive algorithm has the time complexity O(N), where N
+    is the number of objects. The naive algorithm is practically
+    inapplicable in global illumination applications for a scene with
+    a high number of objects, due its huge time requirements. In this
+    thesis we deal with heuristic ray shooting algorithms that use
+    additional spatial data structures. We put stress on average-case
+    complexity and we particularly investigate the ray shooting
+    algorithms based on spatial hierarchies. In the thesis we deal
+    with two major topics.
+      In the first part of the thesis, we introduce a ray shooting
+    computation model and performance model. Based on these two models
+    we develop a methodology for comparing various ray shooting
+    algorithms for a set of experiments performed on a set of
+    scenes. Consecutively, we compare common heuristic ray shooting
+    algorithms based on BSP trees, kd-trees, octrees, bounding volume
+    hierarchies, uniform grids, and three types of hierarchical grids
+    using a set of 30 scenes from Standard Procedural Database. We
+    show that for this set of scenes the ray shooting algorithm based
+    on the kd-tree is the winning candidate among all tested ray
+    shooting algorithms.
+      The second and major part of the thesis presents several
+    techniques for decreasing the time and space complexity for ray
+    shooting algorithms based on kd-tree. We deal with both kd-tree
+    construction and ray traversal algorithms. In the context of kd-tree
+    construction, we present new methods for adaptive construction of
+    the kd-tree using empty spatial regions in the scene, termination
+    criteria, general cost model for the kd-tree, and modified surface
+    area heuristics for a restricted set of rays. Further, we describe
+    a new version of the recursive ray traversal algorithm. In context
+    of the recursive ray traversal algorithm based on the kd-tree, we
+    develop the concept of the largest common traversal sequence. This
+    reduces the number of hierarchical traversal steps in the kd-tree
+    for certain ray sets. We also describe one technique closely related
+    to computer architecture, namely mapping kd-tree nodes to memory to
+    increase the cache hit ratio for processors with a large cache
+    line. Most of the techniques proposed in the thesis can be used in
+    combination. In practice, the average time complexity of the ray
+    shooting algorithms based on the kd-tree, as presented in this thesis,
+    is about $O(log N)$, where the hidden multiplicative factor
+    depends on the input data. However, at present it is not known
+    to have been proved theoretically for scenes with general
+    distribution of objects. For these reasons our findings are
+    supported by a set of experiments for the above-mentioned set of
+    30 scenes.",
+}
+
+
+@InProceedings{goral84a,
+  author =       "Cindy M. Goral and Kenneth K. Torrance and Donald P.
+                 Greenberg and Bennett Battaile",
+  title =        "Modelling the Interaction of Light Between Diffuse
+                 Surfaces",
+  pages =        "213--222",
+  booktitle =      "Computer Graphics (SIGGRAPH '84 Proceedings)",
+  volume =       "18",
+  number =       "3",
+  year =         "1984",
+  month =        jul,
+  conference =   "held in Minneapolis, Minnesota; 23--27 July 1984",
+  keywords =     "radiosity method, diffuse surfaces, I37 Lighting
+                 Interaction",
+  annote =       "The classic reference on radiosity. Early work on
+                 radiosity method. See Hemi Cube paper for more in depth
+                 description of implementation.",
+}
+
+@InProceedings{Heidrich:00:EGWR,
+  author =       "Wolfgang Heidrich and Stefan Brabec and {Hans-Peter}
+                 Seidel",
+  title =        "Soft Shadow Maps for Linear Lights",
+  pages =        "269--280",
+  year = "2000",
+  booktitle =    "Proceedings of EUROGRAPHICS Workshop on Rendering",
+}
+
+@Article{Heidmann91,
+  author =       "Tim Heidmann",
+  title =        "Real Shadows, Real Time",
+  journal =      "Iris Universe",
+  note =         "Silicon Graphics, Inc.",
+  volume =       "18",
+  year =         "1991",
+  pages =        "28--31",
+  keywords =     "soft shadow, SGI Reality Engine, stencil buffer,
+                 shadow volume",
+  annote =       "includes C, GL code",
+}
+
+@InProceedings{Heidrich:99:IDG,
+  year =         "1999",
+  title =        "Applications of Pixel Textures in Visualization and
+                 Realistic Image Synthesis",
+  author =       "W. Heidrich and R. Westermann and H.-P. Seidel and T.
+                 Ertl",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-1999-121",
+  organization = "ACM/Siggraph",
+  booktitle =    "ACM Symposium on Interactive 3D Graphics",
+}
+
+
+@Article{Segal92,
+  author =       "Mark Segal and Carl Korobkin and Rolf van Widenfelt
+                 and Jim Foran and Paul Haeberli",
+  title =        "Fast Shadows and Lighting Effects using Texture
+                 Mapping",
+  journal =      "Computer Graphics (SIGGRAPH '92 Proceedings)",
+  volume =       "26",
+  number =       "2",
+  month =        jul,
+  year =         "1992",
+  pages =        "249--252",
+  keywords =     "perspective, scan conversion",
+}
+
+
+@InProceedings{Williams78,
+AUTHOR={Lance Williams},
+TITLE={Casting Curved Shadows on Curved Surfaces},
+booktitle={Computer Graphics (SIGGRAPH '78 Proceedings)},
+MONTH={Aug.},
+YEAR={1978},
+PAGES={270-274},
+}
+
+@InProceedings{Hoppe:98:LOD,
+  pages =        "35--42",
+  year =         "1998",
+  title =        "Smooth View-Dependent Level-Of-Detail Control and its
+                 Application to Terrain Rendering",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-1998-124",
+  author =       "Hugues Hoppe",
+  language =     "en",
+  abstract =     "The key to real-time rendering of large-scale surfaces
+                 is to locally adapt surface geometric complexity to
+                 changing view parameters. Several schemes have been
+                 developed to address this problem of view-dependent
+                 level-of-detail control. Among these, the
+                 view-dependent progressive mesh (VDPM) framework
+                 represents an arbitrary triangle mesh as a hierarchy of
+                 geometrically optimized refinement transformations,
+                 from which accurate approximating meshes can be
+                 efficiently retrieved. In this paper we extend the
+                 general VDPM framework to provide temporal coherence
+                 through the runtime creation of geomorphs. These
+                 geomorphs eliminate {"}popping{"} artifacts by smoothly
+                 interpolating geometry. Their implementation requires
+                 new output-sensitive data structures, which have the
+                 added benefit of reducing memory use. We specialize the
+                 VDPM framework to the important case of terrain
+                 rendering. To handle huge terrain grids, we introduce a
+                 block-based simplification scheme that constructs a
+                 progressive mesh as a hierarchy of block refinements.
+                 We demonstrate the need for an accurate approximation
+                 metric during simplification. Our contributions are
+                 highlighted in a real-time flyover of a large, rugged
+                 terrain. Notably, the use of geomorphs results in
+                 visually smooth rendering even at 72 frames/sec on a
+                 graphics workstation.",
+  organization = "IEEE",
+  copyright =    "IEEE",
+  booktitle =    "Proceedings IEEE Visualization'98",
+}
+
+@InProceedings{Hoppe:1997:VDR,
+  author =       "Hugues Hoppe",
+  title =        "View-Dependent Refinement of Progressive Meshes",
+  booktitle =    "SIGGRAPH 97 Conference Proceedings",
+  editor =       "Turner Whitted",
+  series =       "Annual Conference Series",
+  year =         "1997",
+  organization = "ACM SIGGRAPH",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  pages =        "189--198",
+  note =         "ISBN 0-89791-896-7",
+  keywords =     "mesh simplification, level-of-detail, multiresolution
+                 representations, dynamic tessellation, shape
+                 interpolation",
+  annote =       "Level-of-detail (LOD) representations are an important
+                 tool for real-time rendering of complex geometric
+                 environments. The previously introduced progressive
+                 mesh representation defines for an arbitrary triangle
+                 mesh a sequence of approximating meshes optimized for
+                 view-independent LOD. In this paper, we introduce a
+                 framework for selectively refining an arbitrary
+                 progressive mesh according to changing view parameters.
+                 We define efficient refinement criteria based on the
+                 view frustum, surface orientation, and screen-space
+                 geometric error, and develop a real-time algorithmfor
+                 incrementally refining and coarsening the mesh
+                 according to these criteria. The algorithm exploits
+                 view coherence, supports frame rate regulation, and is
+                 found to require less than 15% of total frame time on a
+                 graphics workstation. Moreover, for continuous motions
+                 this work can be amortized over consecutive frames. In
+                 addition, smooth visual transitions (geomorphs) can be
+                 constructed between any two selectively refined meshes.
+                 A number of previous schemes create view-dependent LOD
+                 meshes for height fields (e.g. terrains) and parametric
+                 surfaces (e.g. NURBS). Our framework also performs well
+                 for these special cases. Notably, the absence of a
+                 rigid subdivision structure allows more accurate
+                 approximations than with existing schemes. We include
+                 results for these cases as well as for general
+                 meshes.",
+}
+
+@InProceedings{Hoppe:1996:PM,
+  author =       "Hugues Hoppe",
+  title =        "Progressive Meshes",
+  editor =       "Holly Rushmeier",
+  series =       "Annual Conference Series",
+  pages =        "99--108",
+  booktitle =    "SIGGRAPH 96 Conference Proceedings",
+  year =         "1996",
+  organization = "ACM SIGGRAPH",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  note =         "held in New Orleans, Louisiana, 04-09 August 1996",
+  annote =       "Highly detailed geometric models are rapidly becoming
+                 commonplace in computer graphics. These models, often
+                 represented as complex triangle meshes, challenge
+                 rendering performance, transmission bandwidth, and
+                 storage capacities. This paper introduces the
+                 progressive mesh (PM) representation, a new scheme for
+                 storing and transmitting arbitrary triangle meshes.
+                 This efficient, lossless, continuous-resolution
+                 representation addresses several practical problems in
+                 graphics: smooth geomorphing of level-of-detail
+                 approximations, progressive transmission, mesh
+                 compression, and selective refinement. In addition, we
+                 present a new mesh simplification procedure for
+                 constructing a PM representation from an arbitrary
+                 mesh. The goal of this optimization procedure is to
+                 preserve not just the geometry of the original mesh,
+                 but more importantly its overall appearance as defined
+                 by its discrete and scalar appearance attributes such
+                 as material identifiers, color values, normals, and
+                 texture coordinates. We demonstrate construction of the
+                 PM representation and its applications using several
+                 practical models.",
+}
+
+
+@InProceedings{andujar:2000:HVS,
+  author = 	 {Carlos And\'ujar, Carlos Saona-V\'azquez, Isabel Navazo and Pere Brunet},
+  title = 	 {Integrating Occlusion Culling with Levels of Detail through Hardly-Visible Sets},
+  booktitle = {Computer Graphics Forum (Proceedings of Eurographics 2000)},
+  year = 	 {2000},
+  volume = "19",
+number="3",
+pages="499--506",
+}
+
+@InProceedings{downs:2001:I3DG,
+  author =       "Laura Downs and Tomas M{\"o}ller and Carlo H.
+                 S{\'e}quin",
+  title =        "Occlusion Horizons for Driving through Urban Scenes",
+  booktitle =    "Symposium on Interactive {3D} Graphics",
+  year = "2001",
+  organization = "ACM SIGGRAPH",
+  pages =        "121--124",
+}
+
+
+@PhdThesis{zhang_phd,
+  author = 	 {Hansong Zhang},
+  title = 	 {Effective Occlusion Culling for the Interactive Display of Arbitrary Models},
+  school = 	 {Department of Computer Science, UNC-Chapel Hill},
+  year = 	 {1998},
+}
+
+@PhdThesis{wonka_phd,
+  author = 	 {Peter Wonka},
+  title = 	 {Occlusion Culling for Real-Time Rendering of Urban Environments},
+  school = 	 {Institute of Computer Graphics, Vienna University of Technology},
+  year = 	 {2001},
+}
+
+@TechReport{Schumacker69,
+  author =       "R. A. Schumacker and R. Brand and M. Gilliland and W.
+                 Sharp",
+  title =        "Study for Applying Computer-Generated Images to Visual
+                 Simulation",
+  institution =  "U.S. Air Force Human Resources Laboratory",
+  year =         "1969",
+  number =       "AFHRL--TR--69--14",
+}
+
+
+@InProceedings{Carpenter:1984:BAH,
+  author =       "Loren Carpenter",
+  title =        "The {A}-buffer, an Antialiased Hidden Surface Method",
+  pages =        "103--108",
+  booktitle =    "Computer Graphics (SIGGRAPH '84 Proceedings)",
+  volume =       "18",
+  year =         "1984",
+  month =        jul,
+  editor =       "Hank Christiansen",
+  conference =   "held in Minneapolis, Minnesota; 23--27 July 1984",
+  keywords =     "z-buffer, a-buffer, antialiasing, I33 Anti-Aliasing,
+                 I37 Hidden-Surface Removal",
+  annote =       "Carpenter presents a method of constructing
+                 antialiased images in a method which allows
+                 transparency. If flavor, it is very similar to
+                 z-buffer, but subsamples pixels and maintains coverage
+                 masks to allow effective antialiasing.",
+}
+
+
+@InProceedings{Newell:1972:SHS,
+  author =       "Martin E. Newell and R. G. Newell and T. L. Sancha",
+  title =        "A Solution to the Hidden Surface Problem",
+  year =         "1972",
+  booktitle =    "Proceedings of ACM National Conference",
+  keywords =     "hidden surface",
+}
+
+@TechReport{Warnock:1969:HSA,
+  author =       "J. Warnock",
+  title =        "A Hidden-Surface Algorithm for Computer Generated
+                 Half-Tone Pictures",
+  number =       "TR 4--15, NTIS AD-733 671",
+  year =         "1969",
+  institution =  "University of Utah, Computer Science Department",
+  keywords =     "visible",
+}
+
+@InProceedings{Weiler:1977:HSR,
+  author =       "Kevin Weiler and Peter Atherton",
+  title =        "Hidden Surface Removal Using Polygon Area Sorting",
+  booktitle =      "Computer Graphics (SIGGRAPH '77 Proceedings)",
+  conference =   "held in San Jose, California; 20 -- 22 July 1977",
+  month =        jul,
+  year =         "1977",
+  pages =        "214--222",
+  keywords =     "hidden surface removal, hidden line removal",
+}
+
+
+@InProceedings{iones:1998:CGI,
+  author =       "A. Iones and S. Zhukov and A. Krupkin",
+  title =        "On Optimality of {OBBs} for Visibility Tests for
+                 Frustum Culling, Ray Shooting and Collision Detection",
+  pages =        "256--263",
+  ISBN =         "0-8186-8445-3",
+  editor =       "Franz-Erich Wolter and Nicholas M. Patrikalakis",
+  booktitle =    "Proceedings of the Conference on Computer Graphics
+                 International 1998 ({CGI}-98)",
+  month =        jun # " ~22--26",
+  publisher =    "IEEE Computer Society",
+  address =      "Los Alamitos, California",
+  year =         "1998",
+}
+
+
+@Article{Assarsson:2000:OVF,
+  author =       "Ulf Assarsson and Tomas M{\"o}ller",
+  title =        "Optimized View Frustum Culling Algorithms for Bounding
+                 Boxes",
+  journal =      "Journal of Graphics Tools: JGT",
+  volume =       "5",
+  number =       "1",
+  pages =        "9--22",
+  year =         "2000",
+  coden =        "JGTOFD",
+  ISSN =         "1086-7651",
+  bibdate =      "Thu Oct 12 17:08:13 2000",
+  url =          "http://www.acm.org/jgt/papers/AssarssonMoller00/",
+  abstract =     "This paper presents optimizations for faster view
+                 frustum culling (VFC) for axis-aligned bounding box
+                 (AABB) and oriented bounding box (OBB) hierarchies. We
+                 exploit frame-to-frame coherency by caching and by
+                 comparing against previous distances and rotation
+                 angles. By using an octant test, we potentially halve
+                 the number of plane tests needed, and we also evaluate
+                 masking, which is a well-known technique. The
+                 optimizations can be used for arbitrary bounding
+                 volumes, but we present only results for ABBs and OBBs.
+                 In particular, we provide solutions which are 2-11
+                 times faster than other VFC algorithms for AABBs and
+                 OBBs, depending on the circumstances.",
+  acknowledgement = ack-nhfb,
+}
+
+@InProceedings{Wonka:1999:OSF,
+  author =       "Peter Wonka and Dieter Schmalstieg",
+  title =        "Occluder Shadows for Fast Walkthroughs of Urban
+                 Environments",
+  booktitle =      "Computer Graphics Forum (Proceedings of EUROGRAPHICS '99)",
+  month =        sep,
+  year =         "1999",
+  optpublisher =    "Blackwell Publishers",
+  pages =        "51--60",
+  annote =       "This paper describes a new algorithm that employs
+                 image-based rendering for fast occlusion culling in
+                 complex urban environments. It exploits graphics
+                 hardware to render and automatically combine a
+                 relatively large set of occluders. The algorithm is
+                 fast to calculate and therefore also useful for scenes
+                 of moderate complexity and walkthroughs with over 20
+                 frames per second. Occlusion is calculated dynamically
+                 and does not rely on any visibility precalculation or
+                 occluder preselection. Speed-ups of one order of
+                 magnitude can be obtained.",
+}
+
+@Book{Moller99-RTR,
+  author =       "Tomas M{\"o}ller and Eric Haines",
+  year =         "1999",
+  title =        "Real-Time Rendering",
+  publisher =    "A. K. Peters Limited",
+}
+
+@InProceedings{Chrysanthou:1995:SVB,
+  author =       "Yiorgos Chrysanthou and Mel Slater",
+  title =        "Shadow Volume {BSP} Trees for Computation of Shadows
+                 in Dynamic Scenes",
+  editor =       "Pat Hanrahan and Jim Winget",
+  pages =        "45--50",  
+  booktitle =    "1995 Symposium on Interactive {3D} Graphics",
+  year =         "1995",
+  organization = "ACM SIGGRAPH",
+  month =        apr,
+  note =         "ISBN 0-89791-736-7",
+}
+
+@ARTICLE{Crow77,
+AUTHOR={Franklin C. Crow},
+TITLE={Shadow Algorithms for Computer Graphics},
+JOURNAL={Computer Graphics
+(SIGGRAPH '77 Proceedings)},
+VOLUME={11},
+NUMBER={2},
+MONTH={Summer},
+YEAR={1977},
+}
+
+
+@InProceedings{GTHP99,
+  author ="J\'erome Grasset and Olivier Terraz and Jean-Marc Hasenfratz and Dimitri Plemenos",
+  title ="Accurate Scene Display by Using Visibility Maps",
+  booktitle ="Spring Conference on Computer Graphics and its Applications",
+  year ="1999",
+  url ="http://www-imagis.imag.fr/Publications/1999/GTHP99"
+}
+
+
+@Unpublished{cdd_site,
+  author = 	 {Komei Fukuda},
+  title = 	 {Cdd home page},
+  note = 	 {http://www.ifor.math.ethz.ch},
+}
+
+%  note = 	 "http://www.ifor.math.ethz.ch/fukuda/cdd_home/cdd.html",
+
+@Unpublished{nvidia_site,
+  author = 	 {NVIDIA corp.},
+  title = 	 {Graphics hardware specifications.},
+  note = 	 {http://www.nvidia.com},
+}
+
+@Unpublished{ati_site,
+  author = 	 {ATI corp.},
+  title = 	 {Graphics hardware specifications.},
+  note = 	 {http://www.ati.com},
+}
+
+
+%See remarks \cite{Pavlidis:1990:RCS,Wold:1990:RCS}.
+@Article{Cook:1986:SSC,
+  author =       "Robert L. Cook",
+  title =        "Stochastic Sampling in Computer Graphics",
+  journal =      "ACM Transactions on Graphics",
+  volume =       "5",
+  number =       "1",
+  pages =        "51--72",
+  month =        jan,
+  year =         "1986",
+  coden =        "ATGRDF",
+  ISSN =         "0730-0301",
+  bibdate =      "Thu Aug 25 23:39:28 1994",
+  note =         "
+                 Also in Tutorial: Computer Graphics: Image Synthesis,
+                 Computer Society Press, Washington, 1988, pp.
+                 283--304.",
+  url =          "http://www.acm.org/pubs/toc/Abstracts/0730-0301/8927.html",
+  acknowledgement = ack-nhfb,
+  keywords =     "algorithms; antialiasing; depth of field; filtering;
+                 image synthesis; Monte Carlo integration; motion blur;
+                 raster graphics; ray tracing; stochastic sampling",
+  review =       "ACM CR 8709-0784",
+  subject =      "{\bf I.3.3}: Computing Methodologies, COMPUTER
+                 GRAPHICS, Picture/Image Generation, Viewing algorithms.
+                 {\bf G.3}: Mathematics of Computing, PROBABILITY AND
+                 STATISTICS, Probabilistic algorithms (including Monte
+                 Carlo).",
+}
+
+
+@ARTICLE{Cohen85,
+AUTHOR={Michael F. Cohen and Donald P. Greenberg},
+TITLE={The Hemi-Cube: A Radiosity Solution for Complex Environments},
+JOURNAL={Computer Graphics
+(SIGGRAPH '85 Proceedings)},
+VOLUME={19},
+NUMBER={3},
+MONTH={July},
+YEAR={1985},
+PAGES={31-40},
+KEYWORDS={shading, diffuse reflection},
+}
+
+@Article{Sutherland:1974:CTH,
+  author =       "Ivan E. Sutherland and Robert F. Sproull and Robert A.
+                 Schumacker",
+  title =        "A Characterization of Ten Hidden-Surface Algorithms",
+  journal =      "ACM Computing Surveys",
+  volume =       "6",
+  number =       "1",
+  pages =        "1--55",
+  month =        mar,
+  year =         "1974",
+  coden =        "CMSVAN",
+  ISSN =         "0010-4892",
+  bibdate =      "Mon Sep 26 21:02:43 1994",
+  annote =       "A classic paper; describes all the major hidden
+                 surface algorithms of the time, and gives a
+                 classification scheme.",
+  keywords =     "parallel processing; survey; visible surfaces",
+}
+
+
+@Article{Cohen:2002:survey,
+  author =       "D. Cohen-Or and Y. Chrysanthou and C. Silva and F. Durand",
+  title =        " A Survey of Visibility for Walkthrough Applications",
+  year =         "2003",
+  journal =      "IEEE Transactions on Visualization and Computer Graphics",
+  volume = "9",
+  number = "3",
+  pages = "412--431"
+}
+%  note = "Also available as http://www.cs.ucy.ac.cy/\~yiorgos/publications/survey_draft.pdf",
+
+@InProceedings{Whitted:1979:IIM,
+  author =       "T. Whitted",
+  title =        "An improved illumination model for shaded display",
+  pages =        "1--14",
+  booktitle =      "Computer Graphics (Special SIGGRAPH '79 Issue)",
+  volume =       "13",
+  number =       "3",
+  year =         "1979",
+  month =        aug,
+  keywords =     "algorithmic aspects, shading, animation/dynamic
+                 graphics, shaded images, raster graphics",
+}
+
+
+@Book{Szirmay-Kalos:1995a,
+  author =       "L{\'a}szl{\'o} {Szirmay-Kalos ed.} and G{\'a}bor
+                 M{\'a}rton and B. Dobos and T. Horv{\'a}th and P.
+                 Risztics and E. Kov{\'a}cs",
+  title =        "Theory of Three-Dimensional Computer Graphics",
+  note =         "English revision by Ian A. Stroud",
+  publisher =    "Akad{\'e}miai Kiad{\'o}",
+  address =      "Budapest, Hungary",
+  month =        sep,
+  year =         "1995",
+  series =       "Technical Sciences: Advances in Electronics",
+  volume =       "13",
+  ISBN =         "963-05-6911-6",
+  library =      "Uni of Newcastle, Auchmuty Library - 006.6 SZIR",
+  citedby =      "\cite{00000192}",
+}
+
+
+@InProceedings{Catmull:1975:CDC,
+  author =       "Edwin E. Catmull",
+  title =        "Computer Display of Curved Surfaces",
+  booktitle =    "Proceedings of the IEEE Conference on Computer
+                 Graphics, Pattern Recognition, and Data Structure",
+  pages =        "11--17",
+  year =         "1975",
+  month =        may,
+  conference =   "held in Los Angeles; 14-16 May 1975",
+  keywords =     "curves and surfaces, design and modeling, graphics,
+                 algorithms",
+}
+
+@Book{Weisstein:1999:CCE,
+  author =       "Eric W. Weisstein",
+  title =        "The {CRC} Concise Encyclopedia of Mathematics",
+  publisher =    "CRC Press",
+  address =      "2000 N.W. Corporate Blvd., Boca Raton, FL 33431-9868,
+                 USA",
+  pages =        "1969",
+  year =         "1999",
+  ISBN =         "0-8493-9640-9",
+  LCCN =         "QA5.W45 1999",
+  bibdate =      "Tue Apr 13 06:58:01 1999",
+  price =        "US\$79.95",
+  acknowledgement = ack-mg,
+  annote =       "From Michel Goossens: ``This is a marvelous book for
+                 all (of us) who like mathematics. It might be
+                 interesting to note the quote from the start of the
+                 Acknowledgements, where the author spends a whole
+                 paragraph thanking Knuth for inventing \TeX{} (he
+                 started his book some ten years ago in Word \ldots{}),
+                 without which he could never have published his book.
+                 He also thanks Trevorrow (for Oz\TeX) and Drakos and
+                 Ross (for \LaTeX2HTML). His whole book is on the Web
+                 (with {\tt l2h})
+                 \path=http://www.astro.virginia.edu/~eww6n/math/=
+                 (Eric's Treasure Troves of Science), although often the
+                 site is unavailable due to the many downlaod
+                 requests.''",
+}
+
+@InProceedings{EVL-2001-66,
+  year =         "2001",
+  title =        "Searching Triangle Strips Guided by Simplification
+                 Criterion",
+  author =       "O. Belmonte and J. Ribelles and I. Remolar and M.
+                 Chover",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2001-66",
+  abstract =     "Triangle strips are widely used as a method to
+                 accelerate the visualisation process of polygon models
+                 in interactive graphics applications. Another widely
+                 used method to improve drawing speed is the utilisation
+                 of multiresolution models. These models are constructed
+                 based on simplification algorithms. None of the current
+                 algorithms for searching strips contemplates the
+                 posterior simplification of the initial model. In this
+                 paper an algorithm for searching strips is presented.
+                 The triangles forming a strip are selected based on a
+                 simplification criterion according to the average
+                 quadratic error associated with the contraction of
+                 edges so that the model is simplified. In this manner
+                 the strips encountered are conserved as the model is
+                 being simplified. The strips generated in this way may
+                 be used to draw the polygon model in an incremental
+                 form or to transmit it progressively within a computer
+                 network.",
+  editor =       "V. Skala",
+  keywords =     "Triangle strip searching, interactive visualisation,
+                 simplification algorithms, multiresolution models.",
+  booktitle =    "WSCG 2001 Conference Proceedings",
+}
+
+
+@InProceedings{EVL-2001-262,
+  pages =        "91--100",
+  year =         "2001",
+  title =        "Tunneling for Triangle Strips in Continuous
+                 Level-of-Detail Meshes",
+  author =       "A. James Stewart",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2001-262",
+  abstract =     "This paper describes a method of building and
+                 maintaining a good set of triangle strips for both
+                 static and continuous level-of-detail (CLOD) meshes.
+                 For static meshes, the strips are better than those
+                 computed by the classic SGI and STRIPE algorithms. For
+                 CLOD meshes, the strips are maintained incrementally as
+                 the mesh topology changes. The incremental changes are
+                 fast and the number of strips is kept very small.",
+  editor =       "B. Watson and J. W. Buchanan",
+  booktitle =    "Proceedings of Graphics Interface",
+}
+
+
+@InProceedings{EVL-1996-290,
+  pages =        "319--326",
+  year =         "1996",
+  title =        "Optimizing Triangle Strips for Fast Rendering",
+  author =       "Francine Evans and Steven S. Skiena and Amitabh
+                 Varshney",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-1996-290",
+  abstract =     "Almost all scientific visualization involving surfaces
+                 is currently do ne via triangles. The speed at which
+                 such triangulated surfaces can be displayed is crucial
+                 to interactive visualization and is bounded by the rate
+                 at which triangulated data can be sent to the graphics
+                 subsystem for rendering. Partitioning polygonal models
+                 into triangle strips can significantly reduce rendering
+                 times over transmitting each triangle individually. In
+                 this paper, we present new and efficient algorithms for
+                 constructing triangle strips from partially
+                 triangulated models, and experimental results showing
+                 these strips are 10--30\% better than those from
+                 previous codes. Further, we study the impact of larger
+                 buffer sizes and various queuing disciplines on the
+                 effectiveness of triangle strips.",
+  organization = "IEEE",
+  editor =       "Roni Yagel and Gregory M. Nielson",
+  booktitle =    "IEEE Visualization '96",
+}
+
+
+@TechReport{ESV_triangle96,
+  author = 	 {F. Evans and S. Skiena and A. Varshney},
+  title = 	 {Completing sequential triangulations is hard},
+  institution =  {Dept. of Computer Science, State University of New York at Stony Brook},
+  year = 	 {1996},
+}
+
+
+
+@Article{Jones:1971:NAL,
+  author =       "C. B. Jones",
+  title =        "A New Approach to the `Hidden Line' Problem",
+  year =         "1971",
+  month =        aug,
+  journal =      "Computer Journal",
+  volume =       "14",
+  number =       "3",
+  pages =        "232--237",
+  keywords =     "hidden surface",
+}
+
+@InProceedings{Durand_CVPUEP2000,
+  author =       "Fr{\Ž{e}}do Durand and George Drettakis and Jo{\"e}lle
+                 Thollot and Claude Puech",
+  title =        "Conservative Visibility Preprocessing Using Extended
+                 Projections",
+  pages =        "239--248",
+  editor =       "Sheila Hoffmeyer",
+  booktitle =    "Proceedings of the Computer Graphics Conference 2000
+                 ({SIGGRAPH}-00)",
+  month =        jul # " ~23--28",
+  publisher =    "ACMPress",
+  address =      "New York",
+  year =         "2000",
+}
+
+
+@InProceedings{Hudson97,
+author =       "T. Hudson and D. Manocha and J. Cohen and M. Lin and K. Hoff and H. Zhang",
+title =        "Accelerated Occlusion Culling using Shadow Frusta",
+year =         "1997",
+booktitle =    "Proceedings of the Thirteenth ACM Symposium on
+                  Computational Geometry",
+ pages =        "1--10",
+ publisher =    "ACM Press"
+
+}
+
+
+
+@InProceedings{Greene:1996:HPT,
+author =       "Ned Greene",
+title =        "Hierarchical Polygon Tiling with Coverage Masks",
+pages =        "65--74",
+booktitle =    "Proceedings of SIGGRAPH '96",
+year =         "1996",
+month =        aug,
+abstract =     "We present a novel polygon tiling algorithm in which
+recursive subdivision of image space is driven by
+coverage masks that classify a convex
+polygon as
+inside, outside, or intersecting cells in an image
+hierarchy. This approach permits Warnock-style
+subdivision with its
+logarithmic search properties to
+be driven very efficiently by bit-mask operations. The
+resulting hierarchical polygon tiling algorithm
+performs subdivision and
+visibility computations very
+rapidly while only visiting cells in the image
+hierarchy that are crossed by visible
+edges in the
+output image. Visible samples are never overwritten. At
+512x512 resolution, the algorithm tiles as
+rapidly as
+traditional incremental scan conversion, and at high
+resolution (e.g. 4096x4096) it is much
+faster, making
+it well suited to antialiasing by oversampling and
+filtering. For densely occluded scenes, we combine
+hierarchical tiling with
+the {\"h}ierarchical
+visibility{\" }algorithm to enable hierarchical
+object-space culling. When we tested this combination
+on a densely occluded
+model, it computed visibility on
+a 4096x4096 grid as rapidly as hierarchical z-buffering
+tiled a 512x512 grid, and it effectively antialiased
+scenes containing
+hundreds of thousands of visible
+polygons. The algorithm requires strict front-to-back
+traversal of polygons, so we represent a
+scene as a BSP
+tree or as an octree of BSP trees. When maintaining
+depth order of polygons is not convenient,
+we combine
+hierarchical tiling with hierarchical z-buffering,
+resorting to z-buffering only in regions
+of the screen
+where the closest object is not encountered first.",
+}
+
+@InProceedings{thibault87a,
+author =       "William C. Thibault and Bruce F. Naylor",
+title =        "Set Operations on Polyhedra Using Binary Space
+Partitioning Trees",
+pages =        "153--162",
+booktitle =      "Proceedings of SIGGRAPH '87",
+volume =       "21",
+year =         "1987",
+month =        jul,
+keywords =     "polyhedra, set operations, geometric modeling,
+geometric search, point location",
+}
+
+
+
+
+
+@Article{Plantinga85,
+author =       "W. H. Plantinga and C. R. Dyer",
+title =        "An Algorithm for Constructing the Aspect Graph",
+journal =      "CS TR",
+volume =       "627",
+publisher =    "UNIV of Wisconsin --- Madison",
+month =        dec,
+year =         "1985",
+}
+
+@InProceedings{Crawford85,
+author =       "C. G. Crawford",
+title =        "Aspect Graphs and Robot Vision",
+year =         "1985",
+booktitle =    "Proceedings, {CVPR} '85 ({IEEE} Computer Society
+Conference on Computer Vision and Pattern Recognition,
+San Francisco, {CA},
+June 10--13, 1985)",
+publisher =    "IEEE",
+organization = "IEEE",
+series =       "IEEE Publ. 85CH2145-1.",
+institution =  "USNA",
+pages =        "382--384",
+keywords =     "IMAGE PART FORM, LARGE DIMENSIONALITY",
+}
+
+@Article{PLA90,
+author =       "H. Plantinga and C. Dyer",
+title =        "Visibility, Occlusion, and the Aspect Graph",
+journal =      "International Journal of Computer Vision",
+volume =       "5",
+number =       "2",
+year =         "1990",
+pages =        "137--160",
+}
+
+@InProceedings{FOCS86*123,
+author =       "W. H. Plantinga and C. R. Dyer",
+title =        "An Algorithm for Constructing the Aspect Graph",
+pages =        "123--131",
+booktitle =    "27th Annual Symposium on Foundations of Computer
+Science",
+ISBN =         "0-8186-0740-8",
+month =        oct,
+publisher =    "IEEE Computer Society Press",
+address =      "Los Angeles, Ca., USA",
+year =         "1986",
+}
+
+@InProceedings{egger92,
+title =        "The scale space aspect graph",
+author =       "D. W. Eggert and K. W.
+Bowyer and C. R. Dyer and H. I.
+Christensen and D. B. Goldgof",
+booktitle =    "Proceedings. 1992 IEEE Computer Society
+Conference on
+Computer Vision and Pattern Recognition (Cat.
+No.92CH3168-2)",
+pages =        "335--40",
+publisher =    "IEEE Comput. Soc.
+Press Los Alamitos, CA, USA",
+year =         "1992",
+organization = "IEEE",
+}
+
+@Article{EggertDavi1993a,
+author =       "David W. Eggert and Kevin W. Bowyer and Charles R.
+Dyer and Henrik I. Christensen and Dmitry B. Goldgof",
+journal =      "Pattern Analysis and Machine Intelligence",
+title =        "The Scale Space Aspect Graph",
+year =         "1993",
+document-size = "359.5 kbytes",
+url =
+"ftp://ftp.cs.wisc.edu/computer-vision/pami93-eggert.ps.Z",
+month =        nov,
+number =       "11",
+pages =        "1114--1130",
+volume =       "15",
+scope =        "model",
+}
+
+@TechReport{MIT-LCS//MIT/LCS/TR-612,
+author =       "S. Teng",
+title =        "Combinational Aspects of Geometric Graphs",
+institution =  "Massachusetts Institute of Technology,
+Laboratory for
+Computer Science",
+type =         "Technical Report",
+number =       "MIT-LCS//MIT/LCS/TR-612",
+pages =        "13",
+month =        may,
+year =         "1994",
+abstract =     "As a special case of our main
+result, we show that for
+all L$>$0, each k-nearest neighborhood graph in d
+dimensions excludes Kh as a depth in L
+minor if h=W
+(Ld-1). More generally, we prove that the overlap
+graphs defined by Miller, Teng, Thurston
+and Vavais
+[18] have this combinatorial property. By a
+construction of Plotkin, Rao and Smith
+[23], our result
+implies that overlap graphs have {"}good{"} cut-covers,
+answering an open question of Kaklamanis,
+Krizanc and
+Rao [12]. Consequently, overlap graphs can be emulated
+on hypercube graphs with a constant factor
+of slow down
+and on butterfly graphs with a factor of O(log*n) slow
+down. Therefore, computations on overlap
+graphs, such
+as finite-element and finite-difference methods on
+{"}well-conditioned{"} meshes and image
+processing on
+k- nearest neighborhood graphs, can be performed on
+hypercubic parallel machines with linear
+speed-up. Our
+result, in conjunction with a result of Plotkin, Rao
+and Smith, also yields a combinatorial
+proof to that
+overlap graphs have separators of sublinear size. We
+also show that with high probability, the Delaunay
+diagram, the relative
+neighborhood graph and the
+k-nearest neighborhood graph of a random point set
+exclude Kh as a depth L minor if h=W(L d/2
+log n).",
+note =         "Cost is \$12.",
+}
+
+
+
+
+@Book{Heckbert94-GGF,
+  editor =       "Paul Heckbert",
+  year =         "1994",
+  title =        "Graphics {Gems} {IV}",
+  publisher =    "Academic Press Professional",
+  address =      "Boston, MA",
+  keywords =     "Delaunay triangulation, finite elements, meshing,
+                 pixel luminance scaling",
+  comments =     "includes useful C and C++ code related to radiosity
+                 algorithms (Delaunay triangulation and pixel luminance
+                 scaling)",
+}
+
+
+@InCollection{Greene:1994:DIR,
+  author =       "Ned Greene",
+  booktitle =    "Graphics Gems IV",
+  title =        "Detecting Intersection of a Rectangular Solid and a
+                 Convex Polyhedron",
+  publisher =    "Academic Press",
+  address =      "Boston",
+  pages =        "74--82",
+  year =         "1994",
+  keywords =     "collision detection, octree, computational geometry",
+  summary =      "Presents an optimized technique to test for
+                 intersection between a convex polyhedron and a box.
+                 This is useful when comparing bounding boxes against a
+                 viewing frustum in a rendering program, for instance.
+                 Contains pseudocode.",
+}
+
+@InProceedings{Chen:1996:FPA,
+  author =       "{Han-Ming} Chen and {Wen-Teng} Wang",
+  title =        "The Feudal Priority Algorithm on Hidden-Surface
+                 Removal",
+  pages =        "55--64",
+  booktitle =    "Proceedings of SIGGRAPH '96",
+  year =         "1996",
+  month =        aug,
+  abstract =     "Development of a real-time shaded rendering approach
+                 for a frequently changing viewpoint or view vector is
+                 very important in the simulation of 3-D objects in
+                 Computer-Aided Design. A new approach is proposed in
+                 this paper to meet this demand in a very efficient
+                 manner. A pre-processing phase, in which a feudal
+                 priority tree is established for all polygons of an
+                 object, and a post-processing phase, in which a
+                 rendering priority list is searched for from the feudal
+                 priority tree for a new viewpoint or view vector, are
+                 included in our approach. The most time-consuming work
+                 is finished in the pre-processing phase which only has
+                 to be executed once for an object, and the relatively
+                 simple task is left to the post-processing phase, which
+                 is repeated when the viewpoint or view vector is
+                 changed. For the pre-processing phase, a static version
+                 and a dynamic version are proposed in this paper. The
+                 one-way priority relations of all polygons are computed
+                 in the former part of the dynamic pre-processing in a
+                 more efficient way than that in the static
+                 pre-processing, but the latter part of the dynamic
+                 pre-processing is still based on the static
+                 pre-processing. A new concept of {\"a}bsolute
+                 priority{\" }is introduced to systematically reduce the
+                 polygons in which a separating plane is to be searched
+                 for so the probability of finding the separating plane
+                 is much increased. This is the basis to implement
+                 another important concept of {\"s}eparating before
+                 splitting{\" }by which the polygon splittings are much
+                 reduced. Hence the efficiency in the pre-processing and
+                 the post-processing phases is highly increased.",
+}
+
+
+
+
+
+
+@InProceedings{Zhang97,
+  title =        "Visibility Culling Using Hierarchical Occlusion Maps",
+  language =     "en",
+  month =        aug,
+  editor =       "Turner Whitted",
+  series =       "Annual Conference Series",
+  booktitle =    "SIGGRAPH 97 Conference Proceedings",
+  publisher =    "Addison Wesley",
+  pages =        "77--88",
+  year =         "1997",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-1997-147",
+  author =       "Hansong Zhang and Dinesh Manocha and Thomas Hudson and
+                 Kenneth E. {Hoff III}",
+  abstract =     "We present hierarchical occlusion maps (HOM) for
+                 visibility culling on complex models with high depth
+                 complexity. The culling algorithm uses an object space
+                 bounding volume hierarchy and a hierarchy of image
+                 space occlusion maps. Occlusion maps represent the
+                 aggregate of projections of the occluders onto the
+                 image plane. For each frame, the algorithm selects a
+                 small set of objects from the model as occluders and
+                 renders them to form an initial occlusion map, from
+                 which a hierarchy of occlusion maps is built. The
+                 occlusion maps are used to cull away a portion of the
+                 model not visible from the current viewpoint. The
+                 algorithm is applicable to all models and makes no
+                 assumptions about the size, shape, or type of
+                 occluders. It supports approximate culling in which
+                 small holes in or among occluders can be ignored. The
+                 algorithm has been implemented on current graphics
+                 systems and has been applied to large models composed
+                 of hundreds of thousands of polygons. In practice, it
+                 achieves significant speedup in interactive
+                 walkthroughs of models with high depth complexity.",
+  organization = "ACM SIGGRAPH",
+  note =         "ISBN 0-89791-896-7",
+  keywords =     "visibility culling, interactive display, image
+                 pyramid, occlusion culling, hierarchical data
+                 structures",
+}
+
+
+@PhdThesis{Durand99-phd,
+  author =       "Fr{\'{e}}do Durand",
+  month =        jul,
+  year =         "1999",
+  title =        "3{D} Visibility: Analytical Study and Applications",
+  address =      "Grenoble, France",
+  school =       "Universite Joseph Fourier",
+}
+
+
+@InProceedings{EVL-2000-60,
+  pages =        "239--248",
+  year =         "2000",
+  title =        "Conservative Visibility Preprocessing Using Extended
+                 Projections",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2000-60",
+  author =       "Fr{\'{e}}do Durand and George Drettakis and
+                 Jo{\"{e}}lle Thollot and Claude Puech",
+  abstract =     "Visualization of very complex scenes can be
+                 significantly accelerated using occlusion culling. In
+                 this paper we present a visibility preprocessing method
+                 which efficiently computes potentially visible geometry
+                 for volumetric viewing cells. We introduce novel
+                 extended projection operators, which permits efficient
+                 and conservative occlusion culling with respect to all
+                 viewpoints within a cell, and takes into account the
+                 combined occlusion effect of multiple occluders. We use
+                 extended projection of occluders onto a set of
+                 projection planes to create extended occlusion maps; we
+                 show how to efficiently test occludees against these
+                 occlusion maps to determine occlusion with respect to
+                 the entire cell. We also present an improved projection
+                 operator for certain specific but important
+                 configurations. An important advantage of our approach
+                 is that we can re-project extended projections onto a
+                 series of projection planes (via an occlusion sweep),
+                 and accumulate occlusion information from multiple
+                 blockers. This new approach allows the creation of
+                 effective occlusion maps for previously hard-to-treat
+                 scenes such as leaves of trees in a forest. Graphics
+                 hardware is used to accelerate both the extended
+                 projection and reprojection operations. We present a
+                 complete implementation demonstrating significant
+                 speedup with respect to view-frustum culling only,
+                 without the computational overhead of on-line occlusion
+                 culling",
+  keywords =     "Occlusion culling, visibility determination, PVS",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH 2000)",
+}
+
+@InProceedings{scg97*421,
+  author =       "S. Rivi{\`e}re",
+  title =        "Dynamic visibility in polygonal scenes with the
+                 visibility complex",
+  pages =        "421--423",
+  ISBN =         "0-89791-878-9",
+  booktitle =    "Proceedings of the 13th International Annual Symposium
+                 on Computational Geometry ({SCG}-97)",
+  month =        jun # "~4--6",
+  publisher =    "ACM Press",
+  address =      "New York",
+  year =         "1997",
+}
+
+@InProceedings{SWAT::Vegter1990,
+  title =        "The Visibility Diagram: a Data Structure for
+                 Visibility Problems and Motion Planning",
+  author =       "Gert Vegter",
+  booktitle =    "{SWAT} 90, 2nd Scandinavian Workshop on Algorithm
+                 Theory",
+  year =         "1990",
+  series =       "Lecture Notes in Computer Science",
+  volume =       "447",
+  publisher =    "Springer",
+  pages =        "97--110",
+}
+
+@Article{Welzl:1985:CVG,
+  author =       "Emo Welzl",
+  title =        "Constructing the Visibility Graph for $n$-Line
+                 Segments in ${O}(n^2)$ Time",
+  journal =      "Information Processing Letters",
+  volume =       "20",
+  number =       "4",
+  pages =        "167--171",
+  day =          "10",
+  month =        may,
+  year =         "1985",
+  coden =        "IFPLAT",
+  ISSN =         "0020-0190",
+  mrclass =      "68U05",
+  mrnumber =     "86m:68135",
+  bibdate =      "Wed Nov 11 12:16:26 MST 1998",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Leiden State Univ, Inst of Applied Mathematics \&
+                 Computer Science, Leiden, Neth",
+  affiliationaddress = "Leiden State Univ, Inst of Applied Mathematics
+                 \& Computer Science, Leiden, Neth",
+  classification = "723; 921; C1160 (Combinatorial mathematics); C4190
+                 (Other numerical methods)",
+  corpsource =   "Inst. for Inf. Proc., Tech. Univ. of Graz, Austria",
+  journalabr =   "Inf Process Lett",
+  keywords =     "computational geometry; computer programming ---
+                 Algorithms; Graph Theory; graph theory; line segments;
+                 mathematical techniques; n-line segments;
+                 nontransparent obstacles; O(n/sup 2/) time; shortest
+                 path; undirected graph; visibility graph",
+  pubcountry =   "Netherlands A01",
+  treatment =    "T Theoretical or Mathematical",
+}
+
+@InProceedings{EVL-2000-59,
+  pages =        "229--238",
+  year =         "2000",
+  title =        "Conservative Volumetric Visibility with Occluder
+                 Fusion",
+  author =       "Gernot Schaufler and Julie Dorsey and Xavier Decoret
+                 and Fran{\c{c}}ois X. Sillion",
+  url =          "http://visinfo.zib.de/EVlib/Show?EVL-2000-59",
+  abstract =     "Visibility determination is a key requirement in a
+                 wide range of graphics algorithms. This paper
+                 introduces a new approach to the computation of volume
+                 visibility, the detection of occluded portions of space
+                 as seen from a given region. The method is conservative
+                 and classifies regions as occluded only when they are
+                 guaranteed to be invisible. It operates on a discrete
+                 representation of space and uses the opaque interior of
+                 objects as occluders. This choice of occluders
+                 facilitates their extension into adjacent opaque
+                 regions of space, in essence maximizing their size and
+                 impact. Our method efficiently detects and represents
+                 the regions of space hidden by such occluders. It is
+                 the first one to use the property that occluders can
+                 also be extended into empty space provided this space
+                 is itself occluded from the viewing volume. This proves
+                 extremely effective for computing the occlusion by a
+                 set of occluders, effectively realizing occluder
+                 fusion. An auxiliary data structure represents
+                 occlusion in the scene and can then be queried to
+                 answer volume visibility questions. We demonstrate the
+                 applicability to visibility preprocessing for real-time
+                 walkthroughs and to shadow-ray acceleration for
+                 extended light sources in ray tracing, with significant
+                 acceleration in both cases.",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH 2000)",
+}
+
+@Book{Stolfi:1991:OPG,
+  author =       "J. Stolfi",
+  title =        "Oriented Projective Geometry: {A} Framework for
+                 Geometric Computations",
+  publisher =    "Academic Press",
+  year =         "1991",
+}
+
+
+@InProceedings{wonka00,
+  pages =        "71--82",
+  year =         "2000",
+  title =        "Visibility Preprocessing with Occluder Fusion for Urban
+Walkthroughs",
+  author =       "Peter Wonka and Michael Wimmer and Dieter Schmalstieg",
+  booktitle =    "Proceedings of EUROGRAPHICS Workshop on Rendering",
+}
+
+
+@InProceedings{koltun00,
+  year =         "2000",
+  title =        "Virtual Occluders:
+An Efficient Intermediate PVS Representation",
+  author =       "Vladlen Koltun and Yiorgos Chrysanthou and Daniel Cohen-Or",
+  booktitle =    "Proceedings of EUROGRAPHICS Workshop on Rendering",
+}
+
+
+@Article{Cho:1999:IRT,
+  author =       "Franklin S. Cho and David Forsyth",
+  title =        "Interactive ray tracing with the visibility complex",
+  journal =      "Computers and Graphics",
+  volume =       "23",
+  number =       "5",
+  pages =        "703--717",
+  month =        oct,
+  year =         "1999",
+  coden =        "COGRD2",
+  ISSN =         "0097-8493",
+  bibdate =      "Sat Oct 21 14:27:20 MDT 2000",
+  url =          "http://www.elsevier.nl/gej-ng/10/13/20/24/34/34/abstract.html;  http://www.elsevier.nl/gej-ng/10/13/20/24/32/34/article.pdf",
+  acknowledgement = ack-nhfb,
+}
+
+
+@InProceedings{koltun01,
+  year =         "2001",
+  title =        "Hardware-Accelerated From-Region Visibility Using a Dual Ray Space",
+  author =       "Vladlen Koltun and Yiorgos Chrysanthou and Daniel Cohen-Or",
+  booktitle =    "Proceedings of the 12th EUROGRAPHICS Workshop on Rendering",
+}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/want.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/want.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/want.bib	(revision 243)
@@ -0,0 +1,2200 @@
+@article{bb9633,
+        AUTHOR = "Upstill, S.",
+        TITLE = "The Renderman Companion, Addison-Wesley, Reading",
+        JOURNAL = "MA",
+        VOLUME = "89",
+        YEAR = "1989",
+        PAGES = "1989"
+}
+
+@inproceedings{BerDobEpp-SODA-90,
+  title = {{Visibility with a moving point of view}},
+  author = {Marshall W. Bern and David P. Dobkin and David Eppstein and Robert L. Grossman},
+  booktitle = {Proc. 1st Symp. Discrete Algorithms},
+  publisher = {Assoc. Comput. Mach. and Soc. Industrial {\&} Applied Mathematics},
+  pages = {107--118},
+  month = {January},
+  year = {1990}
+}
+
+@article{BerDobEpp-Algo-94,
+  title = {{Visibility with a moving point of view}},
+  author = {Marshall W. Bern and David P. Dobkin and David Eppstein and Robert L. Grossman},
+  journal = {Algorithmica},
+  volume = {11},
+  number = {4},
+  pages = {360--378},
+  month = {April},
+  year = {1994},
+  review = {MR-94j:68307}
+}
+
+@article{MR-94j:68307,
+  author = {Marshall W. Bern and David P. Dobkin and David Eppstein and Robert L. Grossman},
+  reviews = {BerDobEpp-Algo-94},
+  journal = {Mathematical Reviews},
+  publisher = {Amer. Math. Soc.},
+  title = {{Visibility with a moving point of view}},
+  number = {94j:68307},
+  year = {1994}
+}
+
+@article{ma4,
+  author="J. Matousek",
+  title="Efficient partition trees",
+  journal="Discrete and Computational Geometry",
+  year="1992",
+  volume="8",
+  number="",
+  pages="315-334"
+}
+
+@inproceedings{ma92acm,
+  author="J. Matousek",
+  title="Range searching with efficient hierarchical cuttings",
+  booktitle="$8^{th}$ ACM Conf. in Comp. Geom.",
+  address="Berlin",
+  year="1992",
+  pages="276-285"
+}
+
+@article
+ {ma1,
+  author="J. Matousek",
+  title="Range searching with efficient hierarchical cuttings",
+  journal="Discrete and Computational Geometry",
+  year="1993",
+  volume="10",
+  number="",
+  pages="157-182"
+}
+
+@Article{Matousek95,
+title={Approximations and Optimal Geometric Divide-and-Conquer},
+author={Ji{\v{r}}{\'\i} Matou{\v{s}}ek},
+pages={203--208},
+journal=jcss,
+year=1995,
+month=apr,
+volume=50,
+number=2,
+preliminary={STOC::Matousek1991}
+}
+
+@Article{Adelson:1995:GER,
+  author =       "Stephen J. Adelson and Larry F. Hodges",
+  title =        "Generating Exact Ray-Traced Animation Frames by
+                 Reprojection",
+  journal =      "j-IEEE-CGA",
+  volume =       "15",
+  number =       "3",
+  pages =        "43--52",
+  month =        may,
+  year =         "1995",
+  CODEN =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  bibsource =    "Compendex database",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Comput. Res. and Applications, Los Alamos Nat. Lab.,
+                 NM, USA",
+  classification = "723; 723.5; 741.1; 742.2",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Algorithms; Animation; Animation frames; Cameras;
+                 Color; Color image processing; Computer graphics;
+                 Interactive animation; Light sources; Ray tracing;
+                 Reprojection; Spatiotemporal coherence; Three
+                 dimensional; Visualization; Volume visualization",
+}
+
+Article{Dias:1994:RTI,
+  author =       "Maria Lurdes Dias",
+  title =        "Ray tracing interference color: visualizing {Newton}'s
+                 rings",
+  journal =      "j-IEEE-CGA",
+  volume =       "14",
+  number =       "3",
+  pages =        "17--20",
+  month =        may,
+  year =         "1994",
+  CODEN =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  bibsource =    "Compendex database",
+  abstract =     "Generalized Fresnel's reflectance formulas provide the
+                 basis for this ray tracing method, which simulates the
+                 natural phenomenon of interference color. A
+                 visualization of Newton's rings demonstrates its
+                 accuracy.",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Dept. de Fisica, Coimbra Univ., Portugal",
+  classification = "723.2; 723.5; 741.1; 921.6; 931.2",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Algorithms; Color; Color computer graphics; Color
+                 image processing; Computer simulation; Computer vision;
+                 Fresnel's reflectance formula; Interference color;
+                 Light reflection; Mathematical models; Newton's ring;
+                 Polarization; Ray tracing; Reflectance model;
+                 Refractive angle; Refractive index; Thick films; Thin
+                 films; Visualization",
+}
+
+@Article{Meinzer:1991:HRT,
+  author =       "Hans-Peter Meinzer and Kirsten Meetz and Dinu
+                 Scheppelmann and Uwe Engelmann and Hans Jurgen Baur",
+  title =        "The {Heidelberg} Ray Tracing Model",
+  journal =      "j-IEEE-CGA",
+  volume =       "11",
+  number =       "6",
+  pages =        "34--43",
+  month =        nov,
+  year =         "1991",
+  CODEN =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibsource =    "Graphics/siggraph/91.bib",
+  keywords =     "volume rendering",
+}
+
+@Article{Dias:1991:RTI,
+  author =       "Maria Lurdes Dias",
+  title =        "Ray Tracing Interference Color",
+  journal =      "j-IEEE-CGA",
+  volume =       "11",
+  number =       "2",
+  pages =        "54--60",
+  month =        mar,
+  year =         "1991",
+  CODEN =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Wed Jan 29 06:15:39 1997",
+  bibsource =    "Graphics/siggraph/91.bib, Compendex database",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Phys Dept, Univ of Coimbra, Portugal",
+  classification = "723; 741",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Color; Computer Graphics; Constructive Interference;
+                 Destructive Interference; External Reflection; Light
+                 --- Interference; Optical Thickness; Ray Tracing
+                 Interference Color; shading; Thin Film Reflectance",
+}
+
+@Article{Woodwark:1991:RHC,
+  author =       "John Woodwark",
+  title =        "Reconstructing history with computer graphics",
+  journal =      "j-IEEE-CGA",
+  volume =       "11",
+  number =       "1",
+  pages =        "18--20",
+  month =        jan,
+  year =         "1991",
+  CODEN =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  bibsource =    "Graphics/siggraph/91.bib, Compendex database",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Information Geometers, Winchester, UK",
+  annote =       "Corrections on some statements done in haggerty90d
+                 IEEE CGA July 90.",
+  classification = "402; 723; 901",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Applications; Archeology; Architecture --- History;
+                 architecture, archaeology; Churches --- Design;
+                 Computer Graphics; Computer Programming --- Algorithms;
+                 Computer Simulation; Divided Object Space Ray Casting
+                 Algorithm (DORA); Models; Ray Casters; Resistivity
+                 Results; Roman Baths; Roman Temples",
+}
+
+@Article{Mastin:1987:FSO,
+  author =       "Gary A. Mastin and Peter A. Watterberg and John F.
+                 Mareda",
+  title =        "{Fourier} Synthesis of Ocean Scenes",
+  journal =      "j-IEEE-CGA",
+  volume =       "7",
+  number =       "3",
+  pages =        "16--23",
+  month =        mar,
+  year =         "1987",
+  CODEN =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  bibsource =    "Compendex database, Graphics/siggraph/87.bib",
+  acknowledgement = ack-nhfb,
+  affiliationaddress = "Sandia Natl Lab, Albuquerque, NM, USA",
+  classification = "471; 723; 921",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Computer Applications; computer graphics; computer
+                 programming --- Algorithms; mathematical
+                 transformations --- Fourier Transforms; model natural
+                 wave; oceanography; ray tracing; signal filtering and
+                 prediction; white-noise images",
+}
+
+@Article{Amanatides:1987:RCG,
+  author =       "John Amanatides",
+  title =        "Realism in Computer Graphics: a Survey",
+  journal =      "j-IEEE-CGA",
+  volume =       "7",
+  number =       "1",
+  pages =        "44--56",
+  month =        jan,
+  year =         "1987",
+  CODEN =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  bibsource =    "Compendex database, Graphics/siggraph/87.bib",
+  acknowledgement = ack-nhfb,
+  affiliationaddress = "Univ of Toronto, Ont, Can",
+  annote =       "This article surveys most of the major issues to be
+                 dealt with when generating realistic images, and covers
+                 papers up to December 1985. It begins with an overview
+                 of the rendering process and a quick review of visible
+                 surface-determination algorithms. Then, in more detail,
+                 it discusses shading, antialiasing, texture mapping,
+                 shadows, and optical effects and closes with a
+                 discussion of modeling primitives.",
+  classification = "723; 741; 921",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "computer graphics; general survey, bibliography,
+                 tutorial; image processing --- Synthesis; mathematical
+                 techniques --- Algorithms; pixel boundary; ray tracing
+                 geometry; Reviews; sampling; shading geometry; signal
+                 filtering and prediction; texture mapping; visibility
+                 --- Mathematical Models; visibility algorithms",
+}
+
+@Article{Greene:1986:EMO,
+  author =       "Ned Greene",
+  title =        "Environment Mapping and Other Applications of World
+                 Projection",
+  journal =      "j-IEEE-CGA",
+  volume =       "6",
+  number =       "11",
+  pages =        "21--29",
+  month =        nov,
+  year =         "1986",
+  CODEN =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  bibsource =    "Compendex database",
+  acknowledgement = ack-nhfb,
+  affiliationaddress = "New York Inst of Technology, Old Westbury, NY,
+                 USA",
+  classification = "723; 741",
+  conference =   "Graphics Interface 86",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "computer graphics; diffuse surface illumination;
+                 imaging techniques; optics; ray tracing; specular
+                 surface illumination; texture filtering; world
+                 projections",
+  meetingaddress = "Vancouver, BC, Can",
+  meetingdate =  "1986",
+  meetingdate2 = "86",
+}
+
+@Article{Steinberg:1984:SSB,
+  author =       "Herbert A. Steinberg",
+  title =        "A Smooth Surface Based on Biquadratic Patches",
+  journal =      "j-IEEE-CGA",
+  volume =       "4",
+  number =       "9",
+  pages =        "20--23",
+  month =        sep,
+  year =         "1984",
+  CODEN =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  bibsource =    "Compendex database",
+  acknowledgement = ack-nhfb,
+  classification = "723",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "biquadratic patches; computer graphics; I35
+                 biquadratic patches and I37 ray-tracing",
+}
+
+@Article{Coquillart:1984:SDD,
+  author =       "Sabine Coquillart and Michel Gangnet",
+  title =        "Shaded Display of Digital Maps",
+  journal =      "j-IEEE-CGA",
+  volume =       "4",
+  number =       "7",
+  pages =        "35--42",
+  month =        jul,
+  year =         "1984",
+  CODEN =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  bibsource =    "Compendex database, Graphics/siggraph/84.bib",
+  acknowledgement = ack-nhfb,
+  annote =       "Several methods for displaying height fields are
+                 presented. Bilinear interpolation of patches is used to
+                 define the surface. Efficient algorithms, and quite
+                 elegant. Reminiscent of Kajiya's cut planes for
+                 surfaces of revolution.",
+  classification = "405; 723; 741",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "computer graphics --- Applications; digital maps; maps
+                 and mapping; maps, terrain, ray tracing, priority list,
+                 I37 Ray Tracing, I37 Shading, I3m Cartography; priority
+                 lists; ray-tracing techniques; shaded images of
+                 terrain",
+}
+
+@MASTERSTHESIS{ Westin-Thesis,
+    AUTHOR    = "Stephen H. Westin",
+    TITLE     = "Predicting Reflectance Functions from Complex Surfaces",
+    SCHOOL    = "Cornell University",
+    MONTH     = Aug,
+    YEAR      = 1992
+}
+
+@InProceedings{westin92a,
+  author =       "Stephen H. Westin and James R. Arvo and Kenneth E.
+                 Torrance",
+  title =        "Predicting reflectance functions from complex
+                 surfaces",
+  pages =        "255--264",
+  booktitle =      "Computer Graphics (SIGGRAPH '92 Proceedings)",
+  volume =       "26",
+  number =       "2",
+  year =         "1992",
+  month =        jul,
+  editor =       "Edwin E. Catmull",
+  conference =   "held in Chicago, Illinois; 26-31 July 1992",
+  keywords =     "spherical harmonics, monte carlo, anisotropic
+                 reflection, brdf",
+}
+
+@InProceedings{sillion91b,
+  author =       "Francois X. Sillion and James R. Arvo and Stephen H.
+                 Westin and Donald P. Greenberg",
+  title =        "A global illumination solution for general reflectance
+                 distributions",
+  pages =        "187--196",
+  booktitle =      "Computer Graphics (SIGGRAPH '91 Proceedings)",
+  volume =       "25",
+  number =       "4",
+  year =         "1991",
+  month =        jul,
+  editor =       "Thomas W. Sederberg",
+  conference =   "held in Las Vegas, Nevada; 28 July - 2 August 1991",
+  keywords =     "global illumination, brdf, specular reflection,
+                 directional-diffuse, progressive radiosity, spherical
+                 harmonics",
+  annote =       "A general light transfer simulation algorithm for
+                 environments composed of materials with arbitrary
+                 reflectance functions is presented. This algorithm
+                 removes the previous practical restriction to ideal
+                 specular and/or ideal diffuse environments, and
+                 supports complex physically based reflectance
+                 distributions. This is accomplished by extending
+                 previous two-pass ray-casting radiosity approaches to
+                 handle non-uniform intensity distributions, and
+                 resolving all possible energy transfers between sample
+                 points. An implementation is described based on a
+                 spherical harmonic decomposition for encoding both
+                 bidirectional reflectance distribution functions for
+                 materials, and directional intensity distributions for
+                 illuminated surfaces. The method compares favorably
+                 with experimental measurements.",
+}
+
+@Article{Poulin:1991:SSL,
+  author =       "Pierre Poulin and John Amanatides",
+  title =        "Shading and shadowing with linear light sources",
+  journal =      "Computers and Graphics",
+  volume =       "15",
+  number =       "2",
+  pages =        "259--265",
+  year =         "1991",
+  coden =        "COGRD2",
+  ISSN =         "0097-8493",
+  bibdate =      "Wed Feb 5 07:22:58 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Univ of British Columbia",
+  affiliationaddress = "Vancouver, BC, Can",
+  annote =       "Eurographics '90 award paper.",
+  classification = "723; 741; 921",
+  journalabr =   "Comput Graphics (Pergamon)",
+  keywords =     "Computer Graphics --- Three Dimensional Graphics;
+                 Graphic Methods --- Research; Lambert's Laws; Light
+                 Sources; Linear Light Source Shading And Shadowing;
+                 Mathematical Techniques --- Chebyshev Approximation;
+                 Models; Shadowing Algorithms",
+}
+
+@TECHREPORT{ Novins92b,
+    AUTHOR      = "Kevin Novins and James Arvo and David Salesin",
+    TITLE       = "Adaptive Error Bracketing for Controlled-Precision Volume Rendering",
+    INSTITUTION = "Department of Computer Science, Cornell University",
+    NUMBER      = "92-1312",
+    MONTH       = Nov,
+    YEAR        = 1992
+}
+
+@INPROCEEDINGS{ Mitchell90,
+    AUTHOR    = "Don P. Mitchell",
+    TITLE     = "Robust Ray Intersection with Interval Arithmetic",
+    BOOKTITLE = "Proceedings of Graphics Interface '90",
+    YEAR      = 1990,
+    PAGES     = "68--74"
+}
+
+
+@ARTICLE{Gigus90,
+    AUTHOR    = "Ziv Gigus and Jitendra Malik",
+    TITLE     = "Computing the aspect graph for line drawings of polyhedral objects",
+    JOURNAL   = "IEEE Transactions on Pattern Analysis and Machine Intelligence",
+    VOLUME    = 12,
+    NUMBER    = 2,
+    MONTH     = Feb,
+    YEAR      = 1990,
+    PAGES     = "113--122"
+}
+
+@Article{Sung:1992:ASB,
+  author =       "K. Sung",
+  title =        "Area sampling buffer: tracing rays with {Z}-buffer
+                 hardware",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "11",
+  number =       "3",
+  pages =        "C299--C310, C480--C481",
+  month =        "????",
+  year =         "1992",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  classification = "C6130B (Graphics techniques)",
+  conflocation = "Cambridge, UK; 7-11 Sept. 1992",
+  conftitle =    "European Association for Computer Graphics 13th Annual
+                 Conference. EUROGRAPHICS 92",
+  corpsource =   "Dept. of Comput. Sci., Illinois Univ., Urbana, IL,
+                 USA",
+  keywords =     "area sampling; Area sampling; area sampling; buffer
+                 storage; computer graphics; Frame-buffer systems;
+                 frame-buffer systems; geometrical optics;
+                 hardware-assisted ray; Hardware-assisted ray tracing;
+                 image synthesis processes; Image synthesis processes;
+                 image synthesis processes; Light source area; light
+                 source area; Ray tracing; ray tracing; renderer;
+                 Renderer; Sampling area; sampling area; storage
+                 management; tracing; Z-buffer hardware",
+  thesaurus =    "Buffer storage; Computer graphics; Geometrical optics;
+                 Storage management",
+  treatment =    "P Practical",
+}
+
+@PhdThesis{spackman90a,
+  author =       "John Spackman",
+  title =        "Scene Decompositions for Accelerated Ray Tracing",
+  year =         "1990",
+  type =         "Ph.D. Thesis",
+  school =       "University of Bath, UK",
+  annote =       "Available as Bath Computer Science Technical Report
+                 90/33. \\ Ray tracing has come to the fore in the
+                 computer synthesis of realistic images over the last
+                 decade. This algorithm synthesises a particularly high
+                 degree of realism in both the shading and shape of
+                 surfaces. Surface shading calculations incorporate not
+                 only local diffuse and specular radiance but also
+                 global shadowing, multiple reflection and refraction of
+                 view and light attenuation, all according to the laws
+                 of optical physics. Complex object shapes may be
+                 modelled as boolean constructs from exact
+                 specifications of many common geometries. A wide range
+                 of objects may be modelled exactly without resorting to
+                 polyhedral approximation. \\ Early implementations of
+                 ray tracing synthesised some of the most realistic
+                 images up to that date, but imposed an extremely high
+                 computational load for complex scenes. Synthesis times
+                 proved to be linear in object count, and projected
+                 times for scenes of a few thousand objects extended
+                 into months on popular mini-computers. This prevented
+                 the wide-spread application of ray tracing on
+                 non-specialised hardware. Various methods have been
+                 proposed over the last few years to improve the
+                 efficiency of ray tracing for more viable synthesis
+                 times. \\ This thesis addresses scene decompositions
+                 for the acceleration of ray traced image synthesis. The
+                 decomposition of a globally complicated scene into
+                 simpler local regions is shown to reduce the
+                 computational load imposed by ray tracing. Algorithms
+                 are presented for the construction and use of various
+                 types of scene decomposition. Their relative merits are
+                 compared and the ``octtree'' decomposition is shown to
+                 be particularly suitable for accelerating the synthesis
+                 of complex scenes.",
+}
+
+Article{Spackman:1991:SNR,
+  author =       "John Spackman and Philip Willis",
+  title =        "The {SMART} Navigation of a Ray Through an Oct-Tree",
+  journal =      "Computers and Graphics",
+  volume =       "15",
+  number =       "2",
+  pages =        "185--194",
+  year =         "1991",
+  coden =        "COGRD2",
+  ISSN =         "0097-8493",
+  bibdate =      "Wed Feb 5 07:22:58 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Univ of Bath",
+  affiliationaddress = "Avon, Engl",
+  classification = "723; 921",
+  journalabr =   "Comput Graphics (Pergamon)",
+  keywords =     "Computer Graphics; Computer Image Synthesis; Data
+                 Processing --- Data Structures; Digital Differential
+                 Analyzers; Graphic Methods --- Research; Imaging
+                 Techniques --- Research; Mathematical Techniques ---
+                 Trees; Oct Tree Scene Decompositions; octree; Ray
+                 Traced Image Synthesis; Research; Spatial Measure For
+                 Accelerated Ray Tracing (smart); Spatial Object
+                 Coherence",
+}
+
+@InCollection{Skytta:1991:DDM,
+  author =       "Jorma Skytta and Tapio Takala",
+  title =        "A Distributed Data Model for Raytracing",
+  year =         "1991",
+  booktitle =    "Advances in Computer Graphics Hardware III",
+  editor =       "A. A. M. Kuijk",
+  publisher =    "Springer Verlag",
+  pages =        "19--26",
+  address =      "New York",
+  keywords =     "parallelism",
+}
+
+@InProceedings{morris89a,
+  author =       "D. T. Morris and P. M. Dew",
+  title =        "Dynamic Dataflow Algorithms for Ray Tracing {CSG}
+                 Objects",
+  pages =        "452--460",
+  booktitle =    "Parallel Processing for Computer Vision and Display",
+  year =         "1989",
+  editor =       "P. M. Dew and R. A. Earnshaw and T. R. Heywood",
+  publisher =    "Addison-Wesley",
+  annote =       "This paper describes how solid objects may be rendered
+                 by use of dynamic dataflow techniques. Particular
+                 emphasis is given to the ray-tracing algorithm. The
+                 objects are described by constructive solid geometry.
+                 The algorithms are designed to be executed on a
+                 processor farm coupled with a data-driven dataflow
+                 machine. Many of the limitations of previous
+                 approaches, such as the Kedem-Ellis ray-casting machine
+                 are overcome. For example, the size of the objects that
+                 can be drawn directly is increased, the shading
+                 computations are made more efficient and there is
+                 better hardware utilization.",
+}
+
+@Article{Ohta:1990:RBT,
+  author =       "Masataka Ohta and Mamoru Maekawa",
+  title =        "Ray-Bound Tracing for Perfect and Efficient
+                 Anti-Aliasing",
+  journal =      "The Visual Computer",
+  pages =        "125--133",
+  volume =       "6",
+  number =       "3",
+  month =        jun,
+  year =         "1990",
+  keywords =     "ray tracing, antialiasing, coherence, bound",
+  annote =       "A complete detection of whether aliasing occurs in a
+                 given pixel is possible by using the concept of bounded
+                 rays and ray-bound tracing. A coherent set of rays can
+                 be bounded by bounding both their origins (by a sphere)
+                 and directions (by a circle on a unit sphere). By
+                 tracing bounds of rays in a pixel, along the direction
+                 of reflection, refraction or to light sources, it is
+                 possible to obtain an upper bound on the degree of
+                 aliasing in the pixel. Ray bound tracing is possible
+                 against various shapes and with various shading
+                 algorithms.",
+}
+
+@InProceedings{Ohta:1987:RCT,
+  author =       "Masataka Ohta and Mamoru Maekawa",
+  title =        "Ray Coherence Theorem and Constant Time Ray Tracing
+                 Algorithm",
+  pages =        "303--314",
+  booktitle =    "Computer Graphics 1987 (Proceedings of CG
+                 International '87)",
+  year =         "1987",
+  editor =       "Tsiyasu L. Kunii",
+  publisher =    "Springer-Verlag",
+  keywords =     "ray tracing, cull, computational geometry, spherical
+                 geometry, complexity",
+  annote =       "The concept of ray coherence is formalized as a ray
+                 coherence theorem to decrease the amount of computation
+                 in a ray object intersection of the ray tracing
+                 algorithm. Using the theorem, the calculation time of
+                 ray-object intersection in a ray tracing algorithm can
+                 be drastically decreased, by calculating a table which
+                 is used to limit the number of objects which may
+                 intersect with a given ray. The overhead of the
+                 algorithm is so small that it is effective even when
+                 there are only two objects. For more objects, the
+                 computation time of the ray-object intersection remains
+                 almost constant.",
+}
+
+@InProceedings{Hanrahan:1986:UCB,
+  author =       "Pat Hanrahan",
+  title =        "Using Caching and Breadth-First Search to Speed Up
+                 Ray-Tracing",
+  year =         "1986",
+  month =        may,
+  booktitle =    "Proceedings of Graphics Interface '86",
+  publisher =    "Canadian Information Processing Society",
+  pages =        "56--61",
+  address =      "Toronto, Ontario",
+  keywords =     "seed fill, coherence",
+}
+
+@Article{hall83a,
+  author =       "R. A. Hall and D. P. Greenberg",
+  title =        "A Testbed for Realistic Image Synthesis",
+  pages =        "10--20",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "3",
+  number =       "8",
+  year =         "1983",
+  month =        nov,
+  keywords =     "ray tracing cull, I37 Image Synthesis, I37 Surface
+                 Finish, shading, color",
+  annote =       "concerns shading and color more than ray tracing, but
+                 nice pictures! \\ As we have shown here, Cornell
+                 University's testbed image synthesis system has helped
+                 in the development of a number of improvements of
+                 existing ray-tracing techniques. In summary, these
+                 include a hybrid reflection model, a spectral-sampling
+                 method, the incorporation of light sources, and
+                 adaptive tree-depth control. Nevertheless, we point out
+                 again that many of the problems of realistic image
+                 generation through ray tracing have not been solved.
+                 The inherent point-sampling technique is prone to
+                 aliasing, the reflection models proposed do not include
+                 the correct energy formulations, and the computational
+                 expense is currently too high. The use of environmental
+                 image coherence techniques would probably make these
+                 approaches more tractable. It is our hope that the
+                 testbed imaging system will provide an appropriate
+                 environment for further exploration of these
+                 problems.",
+}
+
+InProceedings{Groller:1991:UTS,
+  author =       "E. Groller and W. Purgathofer",
+  title =        "Using Temporal and Spatial Coherence for Accelerating
+                 the Calculation of Animation Sequences",
+  pages =        "103--113",
+  booktitle =    "Eurographics '91",
+  year =         "1991",
+  month =        sep,
+  editor =       "Werner Purgathofer",
+  publisher =    "North-Holland",
+  conference =   "European Computer Graphics Conference and Exhibition;
+                 held in Vienna, Austria; 2-6 September 1991",
+  keywords =     "ray tracing",
+}
+
+@InProceedings{Gigante:1988:ART,
+  author =       "Michael Gigante",
+  title =        "Accelerated Ray Tracing Using Non-Uniform Grids",
+  pages =        "157--163",
+  booktitle =    "Proceedings of Ausgraph '90",
+  year =         "1988",
+  annote =       "A new space-partitioning method for ray tracing
+                 complex environments is described in this paper.
+                 Elements of a scene are placed into a collection of
+                 non-hierarchical, variable-sized voxels. \\ The
+                 creation of this structure is the result of a simple
+                 pre-processing step. In a scheme similar to that used
+                 by uniform grid methods, the non-uniform grid can be
+                 traversed very efficiently. \\ Unlike uniform grid
+                 methods, this method generates voxels with
+                 approximately uniform density of primitives per voxel.
+                 Its performance is less sensitive to the type of scene
+                 and does not fail on scenes with local, high-density
+                 clusters of primitives.",
+}
+
+@Article{deb94,
+  author =       "M. De Berg and D. Halperin and M. Overmars and J.
+                 Snoeyink and M. Van Kreveld",
+  title =        "Efficient ray shooting and hidden surface removal",
+  journal =      "Algorithmica: An International Journal in Computer
+                 Science",
+  volume =       "12",
+  number =       "1",
+  year =         "1994",
+  publisher =    "Springer Verlag, New York",
+  pages =        "30--53",
+  topic =        "visibility",
+}
+
+@TechReport{Kreveld:1992:NRD,
+  author =       "M. J. van Kreveld",
+  title =        "New results on data structures in computational
+                 geometry",
+  type =         "Ph.{D}. {Dissertation}",
+  institution =  "Dept. Comput. Sci., Univ. Utrecht",
+  address =      "Utrecht, Netherlands",
+  year =         "1992",
+  keywords =     "doctoral thesis",
+}
+
+@TechReport{Rushmeier91-RMVR,
+  author =       "Holly E. Rushmeier",
+  year =         "1991",
+  title =        "Radiosity {Methods} for {Volume} {Rendering}",
+  number =       "GIT-GVU-91-01",
+  publisher =    "Graphics, Visualization and Usability Center",
+  institution = "Georgia Institute of Technology",
+  address =      "Atlanata, GA",
+}
+
+@Article{Roth:1982:RCM,
+  author =       "Scott D. Roth",
+  title =        "Ray Casting for Modeling Solids",
+  journal =      "Computer Graphics and Image Processing",
+  volume =       "18",
+  number =       "2",
+  pages =        "109--144",
+  month =        feb,
+  year =         "1982",
+  coden =        "CGIPBG",
+  ISSN =         "0146-664X",
+  bibdate =      "Fri Feb 7 08:36:21 MST 1997",
+  note =         "Also in SIGGRAPH '87, '88, '89 Introduction to Ray
+                 Tracing course notes. The other classic ray tracing
+                 paper.",
+  acknowledgement = ack-nhfb,
+  annote =       "the other classic ray tracing paper \\ This paper
+                 presents ray casting as the methodological basis for a
+                 CAD/CAM solid modeling system. Solid objects are
+                 modeled by combining primitive solids, such as blocks
+                 and cylinders, using the set operators union,
+                 intersection, and difference. To visualize and analyze
+                 the composite solids modeled, virtual light rays are
+                 cast as probes. By virtue of its simplicity, ray
+                 casting is reliable and extensible. The most difficult
+                 mathematical problem is finding line-surface
+                 intersection points. So surfaces such as planes,
+                 quadrics, tori, and probably even parametric surface
+                 patches may bound the primitive solids. The adequacy
+                 and efficiency of ray casting are issues addressed
+                 here. A fast picture generation capability for
+                 interactive modeling is the biggest challenge. New
+                 methods are presented, accompanied by sample pictures
+                 and CPU times, to meet the challenge.",
+  classification = "723",
+  journalabr =   "Comput Graphics Image Process",
+  keywords =     "computer aided design; computer graphics; ray casting;
+                 ray tracing casting intersect CSG, tracing, hidden
+                 line, I35 ray casting for a CAD/CAM solid modeling
+                 system, CSG",
+}
+
+@PhdThesis{Pattanaik:1990:CMG,
+  author =       "Sumanta N. Pattanaik",
+  title =        "Computational Methods for Global Illumination and
+                 Visualisation of Complex 3{D} Environments",
+  year =         "1990",
+  month =        nov,
+  school =       "Birla Institute of Technology \& Science, Computer
+                 Science Department, Pilani, India",
+  keywords =     "adjoint illumination equations, particle model of
+                 light, random walk, importance sampling",
+}
+
+@Article{Pattanaik:1994:FWR,
+  author =       "S. N. Pattanaik and K. Bouatouch",
+  title =        "Fast Wavelet Radiosity Method",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "13",
+  number =       "3",
+  pages =        "C/407--C/420",
+  month =        "????",
+  year =         "1994",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Mon Apr 14 10:23:20 MDT 1997",
+  acknowledgement = ack-nhfb,
+  classification = "C4260 (Computational geometry); C6130B (Graphics
+                 techniques)",
+  conflocation = "Oslo, Norway; 12-16 Sept. 1994",
+  conftitle =    "15th Annual Conference and Exhibition.
+                 EUROGRAPHICS'94",
+  corpsource =   "Campus de Beaulieu, IRISA, Rennes, France",
+  keywords =     "computational geometry; Computer graphics; computer
+                 graphics; decomposition technique; hierarchical;
+                 Hierarchical decomposition technique; inner products;
+                 interpolating wavelets; Interpolating wavelets;
+                 interpolating wavelets; multidimensional;
+                 Multidimensional inner products; optimal adaptive
+                 subdivision; Optimal adaptive subdivision; ray tracing;
+                 wavelet analysis; Wavelet analysis; wavelet radiosity
+                 method; Wavelet radiosity method; wavelet transforms",
+  thesaurus =    "Computational geometry; Ray tracing; Wavelet
+                 transforms",
+  treatment =    "T Theoretical or Mathematical",
+}
+
+@InProceedings{Ferwerda:1997:MVM,
+  author =       "James A. Ferwerda and Sumanta N. Pattanaik and Peter
+                 Shirley and Donald P. Greenberg",
+  title =        "A Model of Visual Masking for Computer Graphics",
+  booktitle =    "SIGGRAPH 97 Conference Proceedings",
+  editor =       "Turner Whitted",
+  series =       "Annual Conference Series",
+  year =         "1997",
+  organization = "ACM SIGGRAPH",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  pages =        "143--152",
+  note =         "ISBN 0-89791-896-7",
+  keywords =     "visual perception, masking, image quality, error
+                 metrics",
+  annote =       "In this paper we develop a computational model of
+                 visual masking based on psychophysical data. The model
+                 predicts how the presence of one visual pattern affects
+                 the detectability of another. The model allows us to
+                 choose texture patterns for computer graphics images
+                 that hide the effects of faceting, banding, aliasing,
+                 noise and other visual artifacts produced by sources of
+                 error in graphics algorithms. We demonstrate the
+                 utility of the model by choosing a texture pattern to
+                 mask faceting artifacts caused by polygonal tesselation
+                 of a at-shaded curved surface. The model predicts how
+                 changes in the contrast, spatial frequency, and
+                 orientation of the texture pattern, or changes in the
+                 tesselation of the surface will alter the masking
+                 effect. The model is general and has uses in geometric
+                 modeling, realistic image synthesis, scientific
+                 visualization, image compression, and image-based
+                 rendering.",
+}
+
+@Article{Levoy:1990:ERT,
+  author =       "Marc Levoy",
+  title =        "Efficient Ray Tracing of Volume Data",
+  journal =      "ACM Transactions on Graphics",
+  volume =       "9",
+  number =       "3",
+  pages =        "245--261",
+  month =        jul,
+  year =         "1990",
+  coden =        "ATGRDF",
+  ISSN =         "0730-0301",
+  bibdate =      "Fri Jan 5 07:58:42 MST 1996",
+  url =          "http://www.acm.org/pubs/toc/Abstracts/0730-0301/78965.html",
+  acknowledgement = ack-nhfb,
+  annote =       "{\em Volume Rendering} is a technique for visualizing
+                 sampled scalar or vector fields of three spatial
+                 dimensions without fitting geometric primitives to the
+                 data. A subset of these techniques generates images by
+                 computing 2-D projections of a colored semitransparent
+                 volume, where the color and opacity at each point are
+                 derived from the data using local operators. Since all
+                 voxels participate in the generation of each image,
+                 rendering time grows linearly with the size of the
+                 dataset. This paper presents a front-to-back
+                 image-order volume-rendering algorithm and discusses
+                 two techniques for improving its performance. The first
+                 technique employs a pyramid of binary volumes to encode
+                 spatial coherence present in the data, and the second
+                 technique uses an opacity threshold to adaptively
+                 terminate ray tracing. Although the actual time saved
+                 depends on the data, speedups of an order of magnitude
+                 have been observed for datasets of useful size and
+                 complexity. Examples from two applications are given:
+                 medical imaging and molecular graphics.",
+  keywords =     "algorithms; design; hierarchical spatial enumeration;
+                 medical imaging; molecular graphics; octree;
+                 performance; ray tracing; scientific visualization;
+                 volume rendering; volume visualization; voxel",
+  subject =      "{\bf I.3.3}: Computing Methodologies, COMPUTER
+                 GRAPHICS, Picture/Image Generation, Display algorithms.
+                 {\bf I.3.5}: Computing Methodologies, COMPUTER
+                 GRAPHICS, Computational Geometry and Object Modeling,
+                 Curve, surface, solid, and object representations. {\bf
+                 I.3.7}: Computing Methodologies, COMPUTER GRAPHICS,
+                 Three-Dimensional Graphics and Realism, Visible
+                 line/surface algorithms.",
+}
+
+@InProceedings{Heckbert92discon,
+  author =       "Paul S. Heckbert",
+  title =        "Discontinuity Meshing for Radiosity",
+  booktitle =    "Third Eurographics Workshop on Rendering",
+  month =        may,
+  year =         "1992",
+  address =      "Bristol, UK",
+  pages =        "203--216",
+  keywords =     "radiosity, adaptive mesh, visibility",
+}
+
+@InProceedings{hashimoto89a,
+  author =       "Akihiko Hashimoto and Taka-aki Akimoto and Kenji Mase
+                 and Yasuhito Suenaga",
+  title =        "Vista Ray-Tracing: High Speed Ray Tracing Using
+                 Perspective Projection Image",
+  pages =        "549--561",
+  booktitle =    "New Advances in Computer Graphics (Proceedings of CG
+                 International '89)",
+  year =         "1989",
+  editor =       "R. A. Earnshaw and B. Wyvill",
+  publisher =    "Springer-Verlag",
+  annote =       "This paper presents a new high speed algorithm of
+                 ray-tracing named Vista Ray-tracing. In Vista
+                 Ray-tracing, time consuming intensity calculations are
+                 done only for ``active'' pixels which really need
+                 precise ray-tracing, while the intensity of
+                 ``moderate'' pixels in calculated by interpolation. The
+                 perspective projection image, or Vista, is generated at
+                 the first stage to be used as a guide map in active
+                 pixel selection. In this paper, a new method for
+                 obtaining Vistas for CSG models of quadratic surface
+                 objects is presented as a key technology. A new texture
+                 mapping algorithm is also presented. Vista Ray-tracing
+                 is actually 16-75 times faster than standard
+                 ray-tracing, and can be even faster if other
+                 acceleration methods are employed. Consequently, Vista
+                 Ray-tracing is very useful for intermediate processes
+                 in making various images for TV animation, movies, high
+                 definition television, printing, etc.",
+}
+
+@Article{Hanrahan:1990:LSL,
+  author =       "Pat Hanrahan and Jim Lawson",
+  editor =       "Forest Baskett",
+  title =        "A Language for Shading and Lighting Calculations",
+  journal =      "Computer Graphics",
+  volume =       "24",
+  number =       "4",
+  pages =        "289--298",
+  month =        aug,
+  year =         "1990",
+  coden =        "CGRADI, CPGPBZ",
+  ISSN =         "0097-8930",
+  conference =   "held in Dallas, Texas; 6--10 August 1990",
+  keywords =     "shading language, little language, illumination,
+                 lighting, rendering",
+}
+
+@Article{Cook:1984:ST,
+  author =       "R. L. Cook",
+  title =        "Shade trees",
+  journal =      "Computer Graphics",
+  volume =       "18",
+  number =       "3",
+  pages =        "223--231",
+  month =        jul,
+  year =         "1984",
+  coden =        "CGRADI, CPGPBZ",
+  ISSN =         "0097-8930",
+  annote =       "Cook developed a special shade tree language for
+                 defining textures and coloration for objects.
+                 Interesting because it separates shading from the rest
+                 of rendering, and allows a library of surface types to
+                 be built up gradually. \\ Ray tracing is one of the
+                 most elegant techniques in computer graphics. Many
+                 phenomena that are difficult or impossible with other
+                 techniques are simple with ray tracing, including
+                 shadows, reflections, and refracted light. Ray
+                 directions, however, have been determined precisely,
+                 and this has limited the capabilities of ray tracing.
+                 By distributing the directions of the rays according to
+                 the analytic function they sample, ray tracing can
+                 incorporate fuzzy phenomena. This provides correct and
+                 easy solutions to some previously unsolved or partially
+                 solved problems, including motion blur, depth of field,
+                 penumbras, translucency, and fuzzy reflections. Motion
+                 blur and depth of field calculations can be integrated
+                 with the visible surface calculations, avoiding the
+                 problems found in previous methods.",
+  conference =   "held in Minneapolis, Minnesota; 23--27 July 1984",
+  keywords =     "texturing, procedural models, languages, I37 Shade
+                 Trees",
+}
+
+@Article{Goldfeather:1989:NRC,
+  author =       "Jack Goldfeather and Steven Molnar and Greg Turk and
+                 Henry Fuchs",
+  title =        "Near Real-Time {CSG} Rendering Using Tree
+                 Normalization and Geometric Pruning",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "9",
+  number =       "3",
+  pages =        "20--28",
+  month =        may,
+  year =         "1989",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Carleton Coll, Dep of Math, Northfield, MN, USA",
+  classification = "723; 741; 921",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Boolean Switching Functions; Computer Aided Design;
+                 Computer Aided Engineering; Computer Graphics ---
+                 Interactive; Constructive Solid Geometry (CSG);
+                 Geometric Pruning; Imaging Techniques; solid modeling;
+                 Surfaces; Tree Normalization",
+}
+
+@Article{Pavlidis:1990:RCS,
+  author =       "Theo Pavlidis",
+  title =        "Re: Comments on ``{Stochastic Sampling in Computer
+                 Graphics}''",
+  journal =      "ACM Transactions on Graphics",
+  volume =       "9",
+  number =       "2",
+  pages =        "233--236",
+  month =        apr,
+  year =         "1990",
+  coden =        "ATGRDF",
+  ISSN =         "0730-0301",
+  bibdate =      "Fri Jan 5 07:58:42 MST 1996",
+  note =         "See \cite{Cook:1986:SSC,Wold:1990:RCS}.",
+  acknowledgement = ack-nhfb,
+}
+
+@InCollection{Whitted88,
+  author =       "Turner Whitted and Robert L. Cook",
+  editor =       "Kenneth I. Joy and Charles W. Grant and Nelson L. Max
+                 and Lansing Hatfield",
+  title =        "A Comprehensive Shading Model",
+  booktitle =    "Tutorial: Computer Graphics: Image Synthesis",
+  pages =        "232--43",
+  publisher =    "Computer Society Press",
+  address =      "Washington, DC",
+  year =         "1988",
+  keywords =     "shading",
+  note =         "also in SIGGRAPH '85 course notes \#11",
+}
+
+@Article{Cook:1986:SSC,
+  author =       "Robert L. Cook",
+  title =        "Stochastic Sampling in Computer Graphics",
+  journal =      "ACM Transactions on Graphics",
+  volume =       "5",
+  number =       "1",
+  pages =        "51--72",
+  month =        jan,
+  year =         "1986",
+  coden =        "ATGRDF",
+  ISSN =         "0730-0301",
+  bibdate =      "Thu Aug 25 23:39:28 1994",
+  note =         "See remarks \cite{Pavlidis:1990:RCS,Wold:1990:RCS}.
+                 Also in Tutorial: Computer Graphics: Image Synthesis,
+                 Computer Society Press, Washington, 1988, pp.
+                 283--304.",
+  url =          "http://www.acm.org/pubs/toc/Abstracts/0730-0301/8927.html",
+  acknowledgement = ack-nhfb,
+  keywords =     "algorithms; antialiasing; depth of field; filtering;
+                 image synthesis; Monte Carlo integration; motion blur;
+                 raster graphics; ray tracing; stochastic sampling",
+  review =       "ACM CR 8709-0784",
+  subject =      "{\bf I.3.3}: Computing Methodologies, COMPUTER
+                 GRAPHICS, Picture/Image Generation, Viewing algorithms.
+                 {\bf G.3}: Mathematics of Computing, PROBABILITY AND
+                 STATISTICS, Probabilistic algorithms (including Monte
+                 Carlo).",
+}
+
+@InProceedings{Torrance87a,
+  author =       "R. L. Cook and K. E. Torrance",
+  title =        "A Reflectance Model for Computer Graphics",
+  year =         "1987",
+  editor =       "W. Richards and S. Ullman",
+  booktitle =    "Image Understanding 1985--86",
+  publisher =    "Ablex",
+  address =      "Norwood, NJ",
+  institution =  "Cornell U",
+  pages =        "1--19",
+  keywords =     "IMAGE OUTPUT",
+}
+
+@TechReport{EVL-1996-11,
+  author =       "Andr{\'e} Hinkenjann and Markus Kubuk and Heinrich
+                 M{\"u}ller",
+  title =        "Answering Line Segment Intersection Queries Based On
+                 Sample Answers",
+  number =       "620/1996",
+  type =         "Research Report",
+  institution =  "University of Dortmund",
+  address =      "Universit{\"a}t Dortmund, 44221 Dortmund, Germany",
+  month =        aug,
+  year =         "1996",
+  abstract =     "Geometric query problems can be solved by
+                 preprocessing the answers for a representative set of
+                 sample queries. An arbitrary query is answered by the
+                 response of a closest sample query. In general, this
+                 answer will not be correct. A framework is presented in
+                 which the quality of approximation of this approach can
+                 be characterized. Futher, efficiency considerations are
+                 performed. They consist in empirical experiments for
+                 the classical line segment intersection query problem,
+                 but also in giving theoretical time and space bounds
+                 describing the trade-off between quality of
+                 approximation and computational complexity. Finally,
+                 approaches to the choice of favorable sample queries
+                 are discussed.",
+  postscript-url = "ftp://euklid.informatik.uni-dortmund.de/pub/reports/ls7/rr-620.ps.gz",
+  evlib-url =    "http://infovis.zib.de:8000/Dienst/UI/2.0/Describe/evl.computationalgeometry%2FEVL-1996-11",
+  evlib-revision = "1st",
+  evlib-postscript-md5 = "14a18f6a52af153a3c3eb1c7037c344c",
+}
+
+@Article{Sbert:1997:OSS,
+  author =       "Mateu Sbert",
+  title =        "Optimal Source Selection in Shooting Random Walk
+                 {Monte Carlo} Radiosity",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "16",
+  number =       "3",
+  pages =        "C301--C308",
+  month =        sep # " 4--8",
+  year =         "1997",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Tue Mar 17 15:44:38 MST 1998",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Universitat de Girona",
+  affiliationaddress = "Girona, Spain",
+  classification = "723.5; 741.1; 921.5; 922.1; 922.2",
+  journalabr =   "Comput Graphics Forum",
+  keywords =     "Computer graphics; Computer simulation; Lighting;
+                 Monte Carlo methods; Optimization; Probability;
+                 Radiosity; Rendering method",
+}
+
+@Article{Choi92,
+  author =       "H. K. Choi and C. M. Kyung",
+  title =        "{PYSHA}: a shadow-testing acceleration scheme for ray
+                 tracing",
+  journal =      "Computer-aided design",
+  volume =       "24",
+  number =       "2",
+  month =        feb,
+  year =         "1992",
+  note =         "hybrid scheme of light buffer and grid subdivision
+                 with cost comparison on the fly",
+}
+
+@article{gt-drssp-97
+, author =	"M. T. Goodrich and R. Tamassia"
+, title =	"Dynamic ray shooting and shortest paths in planar subdivisions via balanced geodesic triangulations"
+, journal =	"J. Algorithms"
+, volume =	23
+, year =	1997
+, pages =	"51--73"
+, update =	"97.07 smid"
+}
+
+@article{ekltmmv-rcerr-91
+, author =	"J. L. Ellis and G. Kedem and T. C. Lyerly and D. G. Thielman and R. J. Marisa and J. P. Menon and H. B. Voelcker"
+, title =	"The ray casting engine and ray representations: a technical summary"
+, journal =	"Internat. J. Comput. Geom. Appl."
+, volume =	1
+, number =	4
+, year =	1991
+, pages =	"347--380"
+, keywords =	"mechanical CAD CAM, solid modeling, parallel computation, ray representation"
+}
+
+@inproceedings{cj-sersi-91
+, author =	"S. W. Cheng and R. Janardan"
+, title =	"Space-efficient ray shooting and intersection searching: algorithms, dynamization and applications"
+, booktitle =	"Proc. 2nd ACM-SIAM Sympos. Discrete Algorithms"
+, year =	1991
+, pages =	"7--16"
+, keywords =	"ray tracing, dynamization, spanning trees of low stabbing number"
+}
+
+@article{cj-arsis-92
+, author =	"S. W. Cheng and R. Janardan"
+, title =	"Algorithms for ray-shooting and intersection searching"
+, journal =	"J. Algorithms"
+, volume =	13
+, year =	1992
+, pages =	"670--692"
+, update =	"93.09 smid"
+}
+
+@techreport{bf-vrs-90
+, author =	"R. Bar-Yehuda and S. Fogel"
+, title =	"Variations on Ray Shooting"
+, type =	"Technical {Report}"
+, number =	639
+, institution =	"Technion IIT"
+, address =	"Haifa, Israel"
+, year =	1990
+, keywords =	"sheaf, ES-trees"
+, update =	"95.01 smid, 93.09 milone+mitchell"
+}
+
+@inproceedings{af-acrsm-97
+, author =	"B. Aronov and S. Fortune"
+, title =	"Average-Case Ray Shooting and Minimum Weight Triangulations"
+, booktitle =	"Proc. 13th Annu. ACM Sympos. Comput. Geom."
+, year =	1997
+, pages =	"203--212"
+, update =	"97.07 efrat"
+}
+
+@inproceedings{b-lsbsp-95
+, author =      "Mark de Berg"
+, title =       "Linear Size Binary Space Partitions for Fat Objects"
+, booktitle =   "Proc. 3rd Annu. European Sympos. Algorithms"
+, series =      "Lecture Notes Comput. Sci."
+, volume =      979
+, publisher =   "Springer-Verlag"
+, year =        1995
+, pages =       "252--263"
+, update =      "97.03 murali+schwarzkopf"
+}
+
+@inproceedings{bg-bspsc-94
+, author =      "M. de Berg and M. de Groot"
+, title =       "Binary space partitions for sets of cubes"
+, booktitle =   "Abstracts 10th European Workshop Comput. Geom."
+, nickname =    "CG'94"
+, year =        1994
+, pages =       "84--88"
+, update =      "94.05 schwarzkopf"
+}
+
+@inproceedings{bgo-nrbsp-94
+, author =      "M. de Berg and M. de Groot and M. Overmars"
+, title =       "New results on binary space partitions in the plane"
+, booktitle =   "Proc. 4th Scand. Workshop Algorithm Theory"
+, series =      "Lecture Notes Comput. Sci."
+, volume =      824
+, publisher =   "Springer-Verlag"
+, year =        1994
+, pages =       "61--72"
+, update =      "95.01 schwarzkopf+smid, 94.05 schwarzkopf"
+}
+
+@inproceedings{bgo-pbsp-93
+, author =      "M. de Berg and M. de Groot and M. Overmars"
+, title =       "Perfect binary space partitions"
+, booktitle =   "Proc. 5th Canad. Conf. Comput. Geom."
+, site =        "Waterloo, Canada"
+, year =        1993
+, pages =       "109--114"
+, precedes =    "bgo-pbsp-97"
+, update =      "97.03 devillers, 93.09 milone+mitchell"
+}
+
+@article{bgo-pbsp-97
+, author =      "M. de Berg and M. de Groot and M. Overmars"
+, title =       "Perfect binary space partitions"
+, journal =     "Comput. Geom. Theory Appl."
+, volume =      7
+, year =        1997
+, pages =       "81--91"
+, succeeds =    "bgo-pbsp-93"
+, update =      "97.03 devillers"
+}
+
+@article{py-ebsph-90
+, author =      "M. S. Paterson and F. F. Yao"
+, title =       "Efficient binary space partitions for hidden-surface removal and solid modeling"
+, journal =     "Discrete Comput. Geom."
+, volume =      5
+, year =        1990
+, pages =       "485--503"
+, succeeds =    "py-bpahs-89"
+}
+
+@inproceedings{py-obspo-90
+, author =      "M. S. Paterson and F. F. Yao"
+, title =       "Optimal binary space partitions for orthogonal objects"
+, booktitle =   "Proc. 1st ACM-SIAM Sympos. Discrete Algorithms"
+, year =        1990
+, pages =       "100--106"
+, precedes =    "py-obspo-92"
+}
+
+@article{py-obspo-92
+, author =      "M. S. Paterson and F. F. Yao"
+, title =       "Optimal binary space partitions for orthogonal objects"
+, journal =     "J. Algorithms"
+, volume =      13
+, year =        1992
+, pages =       "99--113"
+, succeeds =    "py-obspo-90"
+}
+
+
+
+@inproceedings{l-hmelr-83
+, author =      "A. Lingas"
+, title =       "Heuristics for minimum edge length rectangular partitions of rectilinear figures"
+, booktitle =   "Proc. 6th GI Conf. Theoret. Comput. Sci."
+, series =      "Lecture Notes Comput. Sci."
+, volume =      145
+, publisher =   "Springer-Verlag"
+, year =        1983
+, pages =       "199--210"
+, keywords =    "design of algorithms, VLSI design, length, partition, approximation, polygons, geometric graphs, rectangles"
+}
+
+@incollection{s-ghsgc-83
+, author =      "K. J. Supowit"
+, title =       "Grid heuristics for some geometric covering problems"
+, editor =      "F. P. Preparata"
+, booktitle =   "Computational Geometry"
+, series =      "Adv. Comput. Res."
+, volume =      1
+, publisher =   "JAI Press"
+, address =     "Greenwich, CT"
+, year =        1983
+, pages =       "215--233"
+, keywords =    "balls, $d$-dimensional, covering, heuristics"
+}
+
+@inproceedings{lls-nohbs-87
+, author =      "C. Levcopoulos and A. Lingas and J.-R. Sack"
+, title =       "Nearly optimal heuristics for binary search trees with geometric generalizations"
+, booktitle =   "Proc. 14th Internat. Colloq. Automata Lang. Program."
+, series =      "Lecture Notes Comput. Sci."
+, volume =      267
+, publisher =   "Springer-Verlag"
+, year =        1987
+, pages =       "376--385"
+, keywords =    "decomposition, partition, polygons, two-dimensional"
+}
+
+@article{dz-hmlrp-90
+, author =      "D. Du and Y. Zhang"
+, title =       "On heuristics for minimum length rectilinear partitions"
+, journal =     "Algorithmica"
+, volume =      5
+, year =        1990
+, pages =       "111--128"
+}
+
+ceedings{l-fhmlr-86
+, author =      "C. Levcopoulos"
+, title =       "Fast heuristics for minimum length rectangular partitions of polygons"
+, booktitle =   "Proc. 2nd Annu. ACM Sympos. Comput. Geom."
+, year =        1986
+, pages =       "100--108"
+, cites =       "cd-vdbcd-85, f-fapct-85, gz-bprp-85, ia-dsisa-84, ks-mdpo-85, k-ubsir-80, ll-blcpp-84, l-hmelr-83, lprs-melpr-82, l-tspp-77, ps-cgi-85, r-ppis-82, ZZZ"
+, update =      "97.11 bibrelex"
+}
+
+@article{lls-hobst-89
+, author =      "Christos Levcopoulos and Andrzej Lingas and Jorg-R. Sack"
+, title =       "Heuristics For Optimum Binary Search Trees And Minimum Weight Triangulation Problems"
+, journal =     "Theoret. Comput. Sci."
+, volume =      66
+, number =      2
+, month =       aug
+, year =        1989
+, pages =       "181--203"
+, keywords =    "optimum binary search trees, minimum weight triangulation, amortization argument"
+, annote =      "Amortized linear algorithm for GT of semi-circular
+                 polygons."
+, abstract =    "We establish new bounds on the problem of constructing
+                 optimum binary search trees with zero-key access
+                 probabilities (with applications e.g. to point location
+                 problems). We present a linear-time heuristic for
+                 constructing such trees so that their cost is within a
+                 factor of 1 plus epsilon from the optimum cost, where
+                 epsilon is an arbitrary positive constant. Furthermore,
+                 by using an interesting amortization argument, we give
+                 a simple and practical, linear-time implementation of a
+                 known greedy heuristics for such trees. The above
+                 results are obtained in a more general setting, namely,
+                 in the context of minimum length triangulations of so-
+                 called semi-circular polygons. They are carried over to
+                 binary search trees by proving a duality between
+                 optimum (m minus 1)-way search trees and minimum weight
+                 partitions of infinitely-flat semi-circular polygons
+                 into m- gons. With this duality we can also obtain
+                 better heuristics for minimum length partitions of
+                 polygons by using known algorithms for optimum search
+                 trees. (Author abstract) 14 Refs."
+}
+
+@article{dr-hmrst-93
+, author =      "C. C. {De Souza} and C. C. Ribeiro"
+, title =       "Heuristics for the minimum rectilinear {Steiner} tree problem: new algorithms and a computational study"
+, journal =     "Discrete Appl. Math."
+, volume =      45
+, number =      3
+, year =        1993
+, pages =       "205--220"
+, keywords =    "Steiner tree, $L_{1}$ metric, heuristics"
+, update =      "95.09 korneenko"
+}
+
+@InProceedings{Bar-Yehuda90,
+  author =       "R. Bar-Yehuda and S. Fogel",
+  title =        "Good splitters with applications to ray shooting",
+  booktitle =    "Proc. 2nd Canad. Conf. Comput. Geom.",
+  pages =        "81--84",
+  year =         "1990",
+  keywords =     "computational geometry, arrangements",
+}
+
+@InProceedings{Edelsbrunner91,
+  author =       "Herbert Edelsbrunner and Bernard Chazelle and
+                 Michelangelo Grigni and Leonidas Guibas and John
+                 Hershberger and Misha Sharir and Jack Snoeyink",
+  title =        "Ray Shooting in Polygons Using Geodesic
+                 Triangulations",
+  booktitle =    "Proc. 18th Internat. Colloq. Automata Lang. Program.,
+                 Lecture Notes in Computer Science{"} series no. 150",
+  pages =        "661--673",
+  publisher =    "Springer-Verlag",
+  year =         "1991",
+  keywords =     "computational geometry, simple polygon, geodesics",
+  note =         "also as Princeton University, Computer Science
+                 Department, TR-350-91, Sept. 1991",
+}
+
+@TechReport{Guibas89,
+  author =       "L. Guibas and M. Overmars and M. Sharir",
+  title =        "Ray shooting, implicit point location, and related
+                 queries in arrangements of segments{"}",
+  institution =  "Dept. Comput. Sci., New York Univ.",
+  number =       "433",
+  address =      "New York, NY",
+  month =        mar,
+  year =         "1989",
+  keywords =     "random sampling, arrangements, point location",
+}
+
+@Article{Matousek93,
+  author =       "J. Matousek",
+  title =        "On Vertical Ray Shooting in Arrangements",
+  journal =      "Comput. Geom. Theory Appl.",
+  volume =       "2",
+  number =       "5",
+  pages =        "279--285",
+  month =        mar,
+  year =         "1993",
+  keywords =     "computational geometry, zone theorem, cutting,
+                 hyperplane arrangement",
+  note =         "update = 93.09 Held+Matousek+Milone+Mitchell",
+}
+
+@Article{bronsvoort84b,
+  author =       "Willem F. Bronsvoort and Jarke J. van Wijk and
+                 Frederik W. Jansen",
+  title =        "Two Methods for Improving the Efficiency of Ray
+                 Casting in Solid Modeling",
+  pages =        "110--116",
+  journal =      "Computer-Aided Design",
+  volume =       "16",
+  number =       "1",
+  year =         "1984",
+  month =        jan,
+  keywords =     "CSG, I35 Ray Tracing, I35 Solid Modeling",
+  annote =       "enhancements to Roth: scanline interval enclosures,
+                 CSG tree optimization, and recursive screen subdivision
+                 \\ In solid modelling based on constructive solid
+                 geometry and primitive instancing, ray casting is a
+                 very suitable technique for visualization of models on
+                 a raster display. In its present form, it is, however,
+                 too inefficient for interactive use. \\ Two methods for
+                 improving the efficiency are given here. The first uses
+                 scan-line interval enclosures instead of box
+                 enclosures, and also bypasses non-contributing nodes
+                 during each traversal of the CSG (constructive solid
+                 geometry) tree. The second refines the image step by
+                 step by subdivision, thereby avoiding explicit
+                 computation of the intensities of many pixels of the
+                 image. The second method reduces computing time more
+                 than the first, but has the disadvantage that slivers
+                 may occasionally be lost from the image.",
+}
+
+@Article{tvcg-1996-22,
+  author =       "Daniel Cohen-Or and Eran Rich and Uri Lerner and
+                 Victor Shenkar",
+  email =        "daniel@math.tau.ac.il and none and none and none",
+  title =        "A Real-Time Photo-Realistic Visual Flythrough",
+  journal =      "IEEE Transaction on Visualization and Computer
+                 Graphics",
+  volume =       "2",
+  number =       "3",
+  month =        sep,
+  year =         "1996",
+  pages =        "255--264",
+  abstract =     "In this paper we present a comprehensive flythrough
+                 system which generates photo-realistic images in true
+                 real-time. The high performance is due to an innovative
+                 rendering algorithm based on a discrete ray casting
+                 approach, accelerated by ray coherence and
+                 multiresolution traversal. The terrain as well as the
+                 3D objects are represented by a textured mapped
+                 voxel-based model. The system is based on a pure
+                 software algorithm and is thus portable. It was first
+                 implemented on a workstation and then ported to a
+                 general-purpose parallel architecture to achieve
+                 real-time performance.",
+  keywords =     "Terrain visualization, parallel rendering, flight
+                 simulator, visual simulations, voxel-based modeling,
+                 ray casting",
+  tvcg-abstract-url = "http://www.computer.org/pubs/tvcg/abs96.htm#255tg0996",
+}
+
+@InProceedings{dadoun85a,
+        author =       "Nou Dadoun and David G. Kirkpatrick and John P.
+                       Walsh",
+        title =        "The Geometry of Beam Tracing",
+        booktitle =    "Proceedings of the ACM Symposium on Computational
+                       Geometry",
+        pages =        "55--61",
+        year =         "1985",
+        month =        jun,
+        annote =       "the use of BSP trees and hierarchical bounding volumes
+                       for fast beam intersection testing. \\ A solution to
+                       the hidden surface elimination problem called beam
+                       tracing is described. Beam tracing is related to ray
+                       tracing but uses spatial coherence within the scene,
+                       and area coherence within the image to batch
+                       computations. Beam tracing is an object space solution
+                       to the hidden surface problem. \\ Beam tracing is
+                       formulated in terms of its principal subprocesses:
+                       intersection, sorting, and clipping. A hierarchical
+                       scene representation is proposed. This incorporates the
+                       space decomposition idea of the BSP tree [Fuchs, Kedem,
+                       and Naylor, 80] along with the convex polytope
+                       intersection detection technique of [Dobkin and
+                       Kirkpatrick, 83] to interleave and efficiently solve
+                       the intersection and sorting subproblems of beam
+                       tracing.",
+}
+
+
+@InBook{kaplan85a,
+        author =       "M. Kaplan",
+        title =        "Space-Tracing: {A} Constant Time Ray-Tracer",
+        pages =        "149--158",
+        booktitle =    "SIGGRAPH '85 State of the Art in Image Synthesis
+                       seminar notes",
+        year =         "1985",
+        month =        jul,
+        keywords =     "ray tracing cull",
+}
+
+@Book{Samet90,
+        author =       "Hanan Samet",
+        title =        "Applications of Spatial Data Structures",
+        publisher =    "Addison-Wesley",
+        address =      "Reading, Mass.",
+        year =         "1990",
+        keywords =     "quadtree, octree, radiosity",
+        note =         "chapter on ray tracing and efficiency, also discusses
+                       radiosity",
+}
+
+@InProceedings{glassner88d,
+        author =       "Andrew S. Glassner",
+        title =        "Space Subdivision for Fast Ray Tracing",
+        pages =        "159--167",
+        booktitle =    "Tutorial: Computer Graphics: Image Synthesis",
+        year =         "1988",
+        editor =       "Kenneth I. Joy and Charles W. Grant and Nelson L. Max
+                       and Lansing Hatfield",
+        publisher =    "Computer Society Press",
+        annote =       "We have seen that the infamous slowness of ray-tracing
+                       techniques is caused primarily by the time required for
+                       ray-object intersection calculations. We have also seen
+                       a new way of tracing the ray through small subsets of
+                       space at a speed that reduces the number of ray-object
+                       intersections that must be made, thereby cutting the
+                       overall ray-tracing time considerably. \\ This new
+                       algorithm makes possible the ray tracing of complex
+                       scenes by medium- and small-scale computers. It is
+                       hoped that this will enable the power of ray tracing to
+                       be embraced by more people, helping them generate
+                       pictures at the leading edge of computer graphics.",
+}
+
+@TechReport{fussell88a,
+        author =       "Donald Fussell and K. R. Subramanian",
+        title =        "Fast Ray Tracing Using {K}-{D} Trees",
+        institution =  "U. of Texas, Austin, Dept. Of Computer Science",
+        type =         "Technical Report",
+        number =       "TR-88-07",
+        month =        mar,
+        year =         "1988",
+        keywords =     "hierarchies",
+}
+
+@PhdThesis{subramanian90a,
+        author =       "K. R. Subramanian",
+        title =        "Adapting Search Structures to Scene Characteristics
+                       for Ray Tracing",
+        month =        dec,
+        year =         "1990",
+        type =         "Ph.D. Thesis",
+        school =       "Department of Computer Sciences, University of Texas
+                       at Austin",
+        annote =       "We present new results in adapting search structures
+                       to scene characteristics for improving the performance
+                       of ray tracing. A cost model is developed for
+                       evaluating search structures currently being used in
+                       ray tracing. The model has been successfully used to
+                       terminate search structure construction, thus making it
+                       unnecessary to set termination parameters in advance.
+                       The model has also been used with limited success to
+                       compare the performance of different search structures
+                       for a given scene. \\ A detailed experimental study of
+                       some of the important properties of search structures
+                       has been performed. This has resulted in a new adaptive
+                       search structure that is based on {\em k-d} trees, a
+                       multi-dimensional binary search structure which
+                       outperforms existing methods. Its high performance is
+                       primarily due to the fact that it combines the
+                       advantages of such structures based on space
+                       partitioning and those based on bounding volumes. The
+                       greater flexibility of this search structure allows it
+                       to terminate automatically at a point where further
+                       subdivision would result in no additional benefits. \\
+                       Finally, this search structure has been used to render
+                       volume models from scientific applications such as
+                       medical imaging and molecular modeling. Its advantages
+                       over traditional volume rendering techniques have been
+                       demonstrated.",
+}
+
+@TechReport{subramanian90b,
+        author =       "K. R. Subramanian and Donald Fussell",
+        title =        "A Cost Model for Ray Tracing Hierarchies",
+        institution =  "U. of Texas, Austin, Dept. Of Computer Science",
+        type =         "Technical Report",
+        number =       "TR-90-04",
+        month =        mar,
+        year =         "1990",
+        keywords =     "hierarchies",
+}
+
+@TechReport{Subramanian:1990:FAP,
+        author =       "K. R. Subramanian and Donald Fussell",
+        title =        "Factors Affecting Performance of Ray Tracing
+                       Hierarchies",
+        year =         "1990",
+        month =        jul,
+        number =       "R-90-21",
+        type =         "Technical Report",
+        institution =  "Dept. of Computer Sciences, Univ. of Texas at Austin",
+        keywords =     "octree",
+}
+
+@Article{Vanecek:1991:BIM,
+  author =       "G. {Vanecek, Jr.}",
+  title =        "Brep-index: a multidimensional space partitioning
+		 tree",
+  journal =      "Internat. J. Comput. Geom. Appl.",
+  volume =       "1",
+  number =       "3",
+  year =         "1991",
+  pages =        "243--261",
+  keywords =     "classification, Brep, BSP tree, data structures",
+}
+
+@PhdThesis{semwal87a,
+        author =       "S. K. Semwal",
+        title =        "The Slicing Extent Technique for Fast Ray Tracing",
+        year =         "1987",
+        type =         "Ph.D. Thesis",
+        school =       "Department of Computer Science, University of Central
+                       Florida",
+        annote =       "A new technique for image generation using ray tracing
+                       is introduced. The `Slicing Extent Technique'' (SET)
+                       partitions object space with slicing planes
+                       perpendicular to all three axes. Planes are divided
+                       into two dimensional rectangular cells, which contain
+                       pointers to nearby objects. \\ Cell size and the space
+                       slices varies, and is determined by the objects'
+                       locations and orientations. Unlike oct-tree and other
+                       space-partitioning methods, SET is not primarily
+                       concerned with dividing space into mutually exclusive
+                       volume elements (Voxels') and identifying objects
+                       within each voxel. Instead, SET is based on analysis of
+                       projections of objects onto slicing planes. \\ In
+                       comparison to the existing space subdivision methods
+                       for ray tracing, SET avoids tree traversal and exhibits
+                       no anomalous behavior. There is no reorganization when
+                       new objects arrive. Preprocessing to create slices is
+                       inexpensive and produces a finely tuned filter
+                       mechanism which supports rapid ray tracing.",
+}
+
+@TechReport{semwal86a,
+        author =       "S. K. Semwal and J. M. Moshell",
+        title =        "Geometric Issues of the Slicing Extent Technique for
+                       Ray Tracing",
+        year =         "1986",
+        type =         "Technical Report",
+        number =       "CS-TR-86-17",
+        institution =  "Department of Computer Science, University of Central
+                       Florida",
+        annote =       "We introduce a new technique for image generation
+                       using ray tracing. The `Slicing Extent Technique''
+                       (SET) partitions object space with slicing planes
+                       perpendicular to all three axes. Planes are dividied
+                       into two dimensional rectangular cells, which contain
+                       pointers to nearby objects. \\ Cell size and the space
+                       between slices varies, and is determined by objects'
+                       locations and orientations. Unlilke oct-tree and other
+                       space partitioning methods, SET is not primarily
+                       concerned with dividing space into mutually exclusive
+                       volume elements (oxels') and identifying objects
+                       within each voxel. Instead, SET is based on analysis of
+                       projections of objects onto slicing planes. \\ The
+                       analysis of projections onto planes leads to an
+                       interesting geometric problem of `marking the cells''
+                       on the various planes so that no ray-object
+                       intersection goes undetected. In this paper, we show
+                       that our method of `marking the cells'' for spheres
+                       and polyhedras is sufficient in this sense. The nature
+                       of these extents is analyzed. \\ In comparison to the
+                       existing methods for ray tracing, SET avoids tree
+                       traversal. Preprocessing to create slices is
+                       inexpensive and produces a finely tuned filter
+                       mechanism which supports rapid ray tracing. \\ SET
+                       resembles other efforts to speed up ray tracing
+                       inasmuch as a two step process is used. First, an
+                       approximate `filter'' technique eliminates most
+                       possible ray/object collisions. Then an accurate
+                       computation evaluates the remaining possible collisions
+                       and provides information for the generation of
+                       subsequent rays.",
+}
+
+@Article{jevans89b,
+      author =       "David Jevans and Brian Wyvill",
+      title =        "Adaptive voxel subdivision for ray tracing",
+      pages =        "164--172",
+      journal =      "Proceedings of Graphics Interface '89",
+      year =         "1989",
+      month =        jun,
+      conference =   "held in London, Ontario; 19-23 June 1989",
+      keywords =     "spatial subdivision, octree",
+      annote =       "Although regular subdivision has been shown to be
+                     efficient at ray tracing scenes where objects are
+                     evenly distributed, such algorithms perform poorly when
+                     objects are concentrated in a small number of voxels.
+                     In this paper, a method is presented where voxels in a
+                     regular grid are examined and recursively subdivided
+		     depending on object density. This integration of
+		     regular and adaptive spatial subdivision methods allows
+		     images consisting of large regularly distributed
+		     objects and small dense objects to be ray traced
+		     efficiently. The parameters controlling the coarseness
+		     of the voxel grid, depth of adaptive subdivision trees,
+		     and maximum number of polygons per voxel are varied and
+		     their effects on execution time, subdivision time, and
+		     memory use are measured.",
+}
+
+@InProceedings{Jevans:1990:RTS,
+      author =       "David A. J. Jevans",
+      title =        "Ray tracing scenes of varying local complexity",
+      booktitle =    "Proceedings of the 1990 Western Computer Graphics
+		     Symposium",
+      year =         "1990",
+      month =        mar,
+      conference =   "held in Banff, Alberta; 4-8 March 1990",
+      keywords =     "space subdivision, adaptive, cost function",
+}
+
+@InProceedings{Nemoto:1986:ASS,
+      author =       "Keiji Nemoto and Takao Omachi",
+      title =        "An Adaptive Subdivision by Sliding Boundary Surfaces
+		     for Fast Ray Tracing",
+      pages =        "43--48",
+      booktitle =    "Proceedings of Graphics Interface '86",
+      year =         "1986",
+      month =        may,
+      editor =       "M. Green",
+      conference =   "held in Vancouver, B.C.; 26-30 May 1986",
+      keywords =     "adaptive subdivision algorithm on a parallel
+                     architecture, parallel processing",
+      annote =       "They describe a dynamic load-balanced ray tracer. One
+		     of the first load-balanced ray tracers. \\ This paper
+                     presents an adaptive subdivision algorithm for fast ray
+                     tracing implemented on parallel architecture using a
+                     three dimensional computer array. The object space is
+		     divided into several subregions and boundary surfaces
+		     for the subregions are adaptively slid to redistribute
+                     loads of the computers uniformly. Since the shape of
+                     the subregions is preserved as orthogonal
+                     parallelepiped the redistribution overhead can be kept
+                     small. The algorithm is quite simple but can avoid load
+                     concentration to a particular computer. \\ Simulation
+                     results reveal that the adaptive space subdivision
+                     algorithm by sliding boundary surfaces reduces the
+                     computing time to 3/4 - 1/5 as much as that for the
+                     conventional space subdivision algorithm with no
+                     redistribution, which reduces the computing time almost
+                     proportionally to the number of computers.",
+}
+
+@MastersThesis{Jevans90,
+      author =       "David Jevans",
+      title =        "Adaptive Voxel Subdivision for Ray Tracing",
+      school =       "Dept. of Computer Science, Univ. of Calgary",
+      type =         "Master's Thesis",
+      year =         "1990",
+      keywords =     "grid subdivision, hierarchical subdivision",
+      note =         "long version of paper",
+}
+
+@TechReport{naylor86a,
+      author =       "Bruce Naylor and William Thibault",
+      title =        "Application of {BSP} Trees to Ray-Tracing and {CGS}
+		     Evaluation",
+      institution =  "Georgia Institute of Tech., School of Information and
+		     Computer Science",
+      type =         "Technical Report",
+      address =      "Atlanta, Georgia",
+      number =       "GIT-ICS 86/03",
+      month =        feb,
+      year =         "1986",
+      keywords =     "hierarchies, BSP tree, CSG",
+      note =         "true BSP-trees (not just generalized octrees) used for
+		     efficiency",
+}
+
+@MastersThesis{lin87a,
+      author =       "Jimmy Jih-Ming Lin",
+      title =        "Fast Ray Tracing on {BSP}-Trees",
+      year =         "1987",
+      type =         "M.Sc. Thesis",
+      school =       "Department of Computer Science, University of Central
+		     Florida",
+      keywords =     "hierarchies",
+      annote =       "Based on these analyses and experiments, the BSP-Trace
+		     Method may not be the best solution for speeding up the
+		     ray tracing, but it is worthwhile subject for research.
+		     The potential drawbacks of the BSP-Trace which make it
+		     no better than the Octree Method are: \\ (1) The number
+		     of surfaces on the BSP-Tree is typically far more than
+		     the original number of surfaces, because of the
+		     splitting of surfaces into two by other surfaces'
+		     planes; \\ (2) The Octree Method only needs to test
+		     those objects which reside in the selected voxels, and
+		     the BSP-Trace needs to consider the objects in the
+		     whole half-space. \\ [FUJI86] mentioned that the memory
+		     requirement for the octree is very costly, but for the
+		     BSP-Tree, it can be taken care of very efficiently. The
+		     bottleneck of the Octree Method is the time spent on
+		     traveling up and down the Octree [FUJI86], and our
+		     experiments show that this time is around 35\% of the
+		     total time. The solution to reduce the traveling time
+		     is to lower the height of the octree, but meanwhile the
+		     increase in the number of objects contained in the
+		     voxel means more intersections per ray. Thus, a new
+		     data structure for fast ray tracing which combines the
+                     Octree and BSP-Tree is proposed. \\ The new data
+                     structure contains an octree on the top, and every leaf
+                     voxel consists of a BSP-Tree. This will cut down both
+                     the tree traveling time (by lowering the tree height)
+                     and the memory consumed by the octree. Also, if we can
+                     keep the number of objects inside the voxel down, the
+                     increased number of surfaces by using the BSP-Tree is
+		     limited. This thus will reduce the number of
+		     intersection tests made inside the voxel.",
+}
+
+
+@InProceedings{devillers89b,
+        author =       "Olivier Devillers",
+        title =        "Tools to Study the Efficiency of Space Subdivision
+                       Structures for Ray Tracing",
+        pages =        "467--481",
+        booktitle =      "Proceedings of the PIXIM '89",
+        year =         "1989",
+        annote =       "Space Subdivision structures are often used to improve
+                       the performance of ray tracing. The subject of this
+                       article is to study theoretically the effects of the
+                       subdivision on the CPU time. The average number of
+                       regions crossed by a ray is calculated in several cases
+                       of subdivision. \\ With a space subdivision scheme, the
+                       complexity of ray tracing is due to two main factors:
+                       computation of the intersections within a region, and
+                       computation of the sequence of regions intersected by a
+                       given ray. The complexity of these two points is
+                       studied. The distribution of the objects among the
+                       regions is evaluated, and a method to compute the
+                       average number of regions crossed by a ray for a given
+                       method of subdivisions is proposed. This method is
+                       applied to some usual space subdivision techniques:
+                       octree, bounding boxes, grid, and macro-regions.",
+}
+
+@InProceedings{dAmore:1992:OBP,
+  author =       "F. d'Amore and P. G. Franciosa",
+  title =        "On the optimal binary plane partition for sets of
+                 isothetic rectangles",
+  booktitle =    "Proc. 4th Canad. Conf. Comput. Geom.",
+  year =         "1992",
+  pages =        "1--5",
+}
+
+@InProceedings{Chin:1992:FOP,
+  author =       "Norman Chin and Steven Feiner",
+  title =        "Fast object-precision shadow generation for areal
+		 light sources using {BSP} trees",
+  pages =        "21--30",
+  booktitle =    "Computer Graphics (1992 Symposium on Interactive 3D
+		 Graphics)",
+  volume =       "25",
+  number =       "2",
+  year =         "1992",
+  month =        mar,
+  editor =       "David Zeltzer",
+  conference =   "held in Boston; 29 March - 1 April 1992",
+  keywords =     "shadow volume, area light source, penumbra, umbra",
+  annote =       "",
+}
+
+@InProceedings{Chrysanthou:1995:SVB,
+  author =       "Yiorgos Chrysanthou and Mel Slater",
+  title =        "Shadow Volume {BSP} Trees for Computation of Shadows
+                 in Dynamic Scenes",
+  editor =       "Pat Hanrahan and Jim Winget",
+  pages =        "45--50",  
+  booktitle =    "1995 Symposium on Interactive {3D} Graphics",
+  year =         "1995",
+  organization = "ACM SIGGRAPH",
+  month =        apr,
+  note =         "ISBN 0-89791-736-7",
+}
+
+@MastersThesis{macdonald88a,
+  author =       "David MacDonald",
+  title =        "Space Subdivision Algorithms for Ray Tracing",
+  year =         "1988",
+  type =         "M.Sc. Thesis",
+  school =       "Department of Computer Science, University of
+                 Waterloo",
+  annote =       "Ray tracing provides computer rendering of synthetic
+                 images with many realistic qualities, but is
+                 computationally expensive. Ray tracing requires testing
+                 of rays against a scene to see which objects, if any,
+                 are intersected. The high number of such tests required
+                 by typical ray tracers contributes significantly to the
+                 computational expense of ray tracing. \\ An efficient
+                 method of reducing the computation involved in the
+                 intersection tests is to organize the objects composing
+                 the scene into one of several types of hierarchical
+                 data structures. \\ This thesis describes algorithms
+                 for the construction, storage, and traversal of the
+                 space subdivision hierarchy. Methods are suggested for
+                 decreasing computational requirements of the data
+                 structure with respect to these three areas. \\ One
+                 suggested strategy for improving performance in all
+                 three areas (construction, storage, and traversal) is
+                 implemented for the bintree structure. The performance
+                 of these simulations is compared with implementations
+                 of contemporary methods and some efficiency gains are
+                 shown. \\ Further work is suggested, including
+                 adaptation of some of the ideas presented within this
+                 thesis to more general types of hierarchical
+                 structures.",
+}
+
+@TechReport{Quek:1988:ESS,
+  author =       "Lee Hian Quek and D. D. Hearn",
+  title =        "Efficient Space-Subdivision Methods in Ray-Tracing
+                 Algorithms",
+  year =         "1988",
+  month =        nov,
+  number =       "UIUCDCS-R-88-1468",
+  type =         "Report No.",
+  institution =  "Dept. of Computer Science, Univ. of Illinois at
+                 Urbana-Champaign",
+  keywords =     "efficiency",
+  anote  = "Ray tracing provides a simple and powerful tool for the
+generation of highly realistic displays. However, it is a computationally
+expensive approach. A basic ray-tracing algorithm employing no antialiasing
+may require several hours to render a scene of moderate complexity. Methods
+for attaining higher picture quality, such as supersampling, adaptive
+sampling, and distributed sampling, require even longer ray-processing
+times. One method for improving the performance of ray-tracing algorithms is
+to reduce ray-object intersection calculations by employing spatial
+subdivision techniques to group objects in a scene. Here, we consider some
+improvements that can be made to space-subdivision ray tracers by reducing
+ray-traversal calculations and by implementing the algorithms on parallel
+vector architectures.",
+}
+
+@Book{Semwal:1992:RTU,
+  author =       "Sudhanshu Kumar Semwal and Charulata K. Kearney and J.
+                 Michael Moshell",
+  title =        "Ray Tracing Using the Slicing Extent Technique",
+  year =         "1992",
+  publisher =    "International Conference on 3D Graphics (?)",
+  anote = "We present a novel approach to ray tracing called the Slicing
+Extent Technique (SET) and its variations. SET partitions object space with
+slicing planes perpendicular to all three axes. Slicing planes are divided
+into two dimensional rectangular cells, which contain pointers to nearby
+objects. The novelty of SET is that rather than using a collection of
+volumes as an extent, SET uses a collection of planar cells and is based on
+analysis of projections of objects onto slicing planes. These rectangular
+cells are used to quickly traverse through the sparse area of the scene and
+also provide further subdivision in the highly populated dense area. These
+2D cells can also define tighter extents. In comparison to the existing
+space subdivision techniques for ray tracing, SET avoids tree traversal and
+multiple ray-object intersections. It guarantees no increase in image
+generation time when number of cells per slice increase in multiples of
+four. There is no reorganization when new objects arrive and preprocessing
+to create slices is inexpensive.",
+}
+
+TechReport{Wilson92b,
+  author =       "Tom Wilson and Narsingh Deo",
+  title =        "Extent Tracing: Algorithm and Implementation",
+  institution =  "Department of Computer Science, University of Central
+                 Florida",
+  type =         "Technical Report",
+  number =       "CS-TR-92-34",
+  month =        dec,
+  year =         "1992",
+  keywords =     "efficiency",
+  anote = "This paper describes a new ray tracing acceleration algorithm
+called extent tracing. The algorithm works on a structure that is
+conceptually related to a hierarchical tree of extents (HTE), but does not
+require the hierarchy. To speed up extent tracing, spatial subdivision is
+added, resulting in a nonuniform subdivision grid. Implementation details
+and the results of comparisons to some other established acceleration
+techniques are given.",
+}
+
+@TechReport{Wilson92,
+  author =       "Tom Wilson and Narsingh Deo",
+  title =        "Comparing Extent Tracing to Other Ray Tracing
+                 Accelerators",
+  institution =  "Department of Computer Science, University of Central
+                 Florida",
+  type =         "Technical Report",
+  number =       "CS-TR-92-21",
+  month =        sep,
+  year =         "1992",
+  keywords =     "efficiency",
+  anote = "This report examines the feasibility of a new ray-tracing
+acceleration scheme called extent tracing by comparing it to some
+established techniques on established benchmark scenes. The other techniques
+implemented for comparison are binary space-partitioning (BSP) tree,
+hierarchical tree of extents (HTE), octree, and uniform subdivision. The
+statistics used in the comparison are the execution times, memory
+requirements, object intersections per ray, bounding volume intersections
+per ray, and voxels traversed per ray.",
+}
+
+@TechReport{Wilson92a,
+  author =       "Tom Wilson and Narsingh Deo",
+  title =        "Acceleration Schemes for Ray Tracing",
+  institution =  "Department of Computer Science, University of Central
+                 Florida",
+  type =         "Technical Report",
+  number =       "CS-TR-92-22",
+  month =        sep,
+  year =         "1992",
+  keywords =     "efficiency",
+}
+
+@InProceedings{Speer:1985:TEA,
+  author =       "L. R. Speer and T. D. Derose and B. A. Barsky",
+  title =        "A Theoretical and Empirical Analysis of Coherent
+                 Ray-Tracing",
+  booktitle =    "Graphics Interface '85 Proceedings",
+  pages =        "1--8",
+  year =         "1985",
+  editor =       "M. Wein and E. M. Kidd",
+  organization = "Canadian Inf. Process. Soc.",
+  conference =   "held in Montreal, Quebec, Canada; 27--31 May 1985",
+  keywords =     "I37 ray-tracing, I37 image synthesis, I30 picture
+                 processing",
+  annote =       "The use of {\em coherence} has been advocated as a
+                 means of reducing the large computational cost of the
+                 ray-tracing method of image synthesis. This paper
+                 examines the theoretical and empirical performance of a
+                 typical coherent ray-tracing algorithm, one that
+                 exploits the similarity between the intersection trees
+                 generated by successive rays. It is shown that despite
+                 the large degree of coherence present in a scene, the
+                 need to ensure the validity of ray-object intersections
+                 prevents any significant computational savings. This
+                 indicates that other algorithmic methods must be used
+                 in order to substantially reduce the computational cost
+                 of ray-traced imagery.",
+}
+
+@InProceedings{Isler:1991:HSS,
+  author =       "Veysi Isler and Cevdet Aykanat and Bulent
+                 {\"{O}}zgu\c{c}",
+  title =        "A heuristic 3{D} space subdivision algorithm for ray
+                 tracing",
+  pages =        "499--504",
+  booktitle =    "COMPUGRAPHICS '91",
+  volume =       "I",
+  year =         "1991",
+  conference =   "held in Sesimbra, Portugal; 16-20 September 1991",
+}
+
+@Article{Bouville??,
+  author =       "Christian Bouville and Jean-Luc Dubois and Isabelle
+                 Marchal",
+  title =        "A Space Tracing Method Applied to Polygonal Models",
+  journal =      "course paper",
+  year = "???",
+  anote = " The ray-tracing rendering method gives the highest possible
+level of realism that can be attained in computer graphics. Recently many
+alternatives have been reported on ways to speed up this process and
+particularly by means of a space subdivision technique. We propose such an
+algorithm specially adapted to polygonal models. A BSP tree technique is
+used to perform space subdivision and a spatial index allows direct access
+to any cell. A method which minimizes primary ray computations and an
+algorithm which avoids the tracing of a large number of rays towards light
+sources have been studied. Results about time and space required by this
+algorithm are presented.",
+}
+
+@Article{Kalinowski94,
+       author= "Kalinowski J. and Sas J.",
+        title= "Acceleration Techniques for Ray Tracing - Experimental 
+		 Comparison",
+      journal= "MICROCOMPUTER '94 Computer Graphics and Vision",
+      month  = "feb",
+      year   = "1994",
+      pages  = "??-??", 
+      place  = "Zakopane in Poland",
+      note   = "uniform subdivision",
+      anote  = "In this paper the experimental results of applying a series
+of acceleration methods to the ray tracing process are presented. The
+acceleration possibilities at two stages have been distinguished: the stage
+of ray traversal through the scene space and ray-triangle intersection
+testing stage. At the first stage uniform space subdivision has been
+compared with two level n-tree schema. At the stage of ray-triangle
+intersection testing the computational complexity of the set of algorithms
+has been compared and the gains obtained as a result of a series of
+improvements to the ordinary algorithm are presented.",
+}
+
+
+
+@article{vko91,
+  author="M. van Kreveld and H. Overmars",
+  title="Divided k-d Trees",
+  journal="Algorithmica",
+  year="1991",
+  volume="6",
+  number="",
+  pages="840-858"
+}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/bookmame.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/bookmame.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/bookmame.bib	(revision 243)
@@ -0,0 +1,27 @@
+@Book{bib:Samet89a,
+  author =       "H. J. Samet",
+  title =        "Design and analysis of Spatial Data Structures:   
+                 Quadtrees, Octrees, and other Hierarchical Methods",
+  publisher =    "Addison--Wesley",
+  address =      "Redding, MA",
+  year =         "1989",
+}
+
+@Book{Cormen90,
+ author="T.H. Cormen and C.E. Leiserson and R.L. Rivest",
+ title="Introduction to Algorithms",
+ isbn="ISBN 0-262-03141-8 (MIT Press), ISBN-0-07-013143-0 (McGrawHill)",
+ publisher = "MIT Press",
+ year="1990, tenth printing 1993",
+}
+
+@InBook{arvo89a,
+        author =       "James Arvo and David Kirk",
+        title =        "A survey of ray tracing acceleration techniques",
+        pages =        "201--262",
+        booktitle =    "An introduction to ray tracing",
+        year =         "1989",
+        publisher =    "Academic Press",
+}
+
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/minimum.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/minimum.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/minimum.bib	(revision 243)
@@ -0,0 +1,912 @@
+% wanted
+
+@TechReport{fussell88a,
+        author =       "Donald Fussell and K. R. Subramanian",
+        title =        "Fast Ray Tracing Using {K}-{D} Trees",
+        institution =  "U. of Texas, Austin, Dept. Of Computer Science",
+        type =         "Technical Report",
+        number =       "TR-88-07",
+        month =        mar,
+        year =         "1988",
+        keywords =     "hierarchies",
+}
+
+@INPROCEEDINGS{Heckbert92discon,
+AUTHOR={Paul S. Heckbert},
+TITLE={Discontinuity Meshing for Radiosity},
+BOOKTITLE={Third Eurographics Workshop on Rendering},
+MONTH={May},
+YEAR={1992},
+ADDRESS={Bristol, UK},
+PAGES={203-216},
+KEYWORDS={radiosity, adaptive mesh, visibility},
+}
+
+@InProceedings{kaplan85a,
+        author =       "M. Kaplan",
+        title =        "Space-Tracing: {A} Constant Time Ray-Tracer",
+        pages =        "149--158",
+        booktitle =    "SIGGRAPH '85 State of the Art in Image Synthesis seminar
+ notes",
+        year =         "1985",
+        month =        jul,
+        publisher =    "Addison Wesley",
+        keywords =     "ray tracing cull",
+}
+
+
+% collected
+
+@InProceedings{Greene93a,
+  author =       "N. Greene and M. Kass and G. Miller",
+  title =        "Hierarchical {Z}-Buffer Visibility",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH '93)",
+  year =         "1993",
+  pages =        "231--238"
+}
+
+@InProceedings{thibault87a,
+author =       "William C. Thibault and Bruce F. Naylor",
+title =        "Set Operations on Polyhedra Using Binary Space
+Partitioning Trees",
+pages =        "153--162",
+booktitle =      "Proceedings of SIGGRAPH '87",
+volume =       "21",
+year =         "1987",
+month =        jul,
+keywords =     "polyhedra, set operations, geometric modeling,
+geometric search, point location",
+}
+
+@InProceedings{Coorg96b
+, author =	"Coorg, Satyan and Teller, Seth"
+, title =	"Temporally Coherent Conservative Visibility"
+, booktitle =	"Proceedings of the Twelfth Annual ACM Symposium on Computational Geometry"
+, year =	1996
+, optaddress =	"Philadelphia, PA"
+, month =	may
+, documentURL =	"http://graphics.lcs.mit.edu/~satyan/pubs/temporalvis-cg96.ps.Z"
+, pages = "78--87"
+}
+
+@InProceedings{Coorg97,
+  author =       "Satyan Coorg and Seth Teller",
+  title =        "Real-Time Occlusion Culling for Models with Large
+                 Occluders",
+  pages =        "83--90",
+  ISBN =         "0-89791-884-3",
+  booktitle =    "Proceedings of the Symposium on Interactive 3{D}
+                 Graphics",
+  optmonth =        apr # "27--30~",
+  publisher =    "ACM Press",
+  optaddress =      "New York",
+  year =         "1997",
+}
+
+@InProceedings{Rohlf:1994:IPH,
+  author =       "John Rohlf and James Helman",
+  booktitle =    "Proceedings of SIGGRAPH '94",
+  title =        "{IRIS} Performer: {A} High Performance Multiprocessing
+                 Toolkit for Real--{T}ime 3{D} Graphics",
+  pages =        "381--395",
+  month =        jul,
+  year =         "1994",
+}
+
+@InProceedings{Airey90,
+  author =       "Airey, John M. and Rohlf, John H. and {Brooks, Jr.}, Frederick P.",
+  title =        "Towards Image Realism with Interactive Update Rates in
+                 Complex Virtual Building Environments",
+  pages =        "41--50",
+  booktitle =    "1990 Symposium on Interactive 3D Graphics",
+  organization = "ACM SIGGRAPH",
+  year =         "1990",
+  optmonth =        mar,
+  keywords =     "model-space subdivision, potentially visible,
+                 radiosity, adaptive refinement",
+}
+
+@inproceedings{Teller93a
+, author =	"Teller, S. and Hanrahan, P."
+, title =	"Global visibility algorithms for illumination computations"
+, booktitle =	"Proceedings of SIGGRAPH '93"
+, year =	1993
+, pages =	"239--246"
+, keywords =	"hidden surface removal, visibility space, radiosity,
+		 global illumination, algorithmic triage"
+, documentURL =	"http://www.cs.princeton.edu/staff/seth/visglobillum.ps.Z"
+, abstractURL =	"http://www.cs.princeton.edu/gfx/papers/visglob"
+}
+
+@InProceedings{Teller91a
+, author =	"S. J. Teller and C. H. S{\'e}quin"
+, title =	"Visibility Preprocessing For Interactive Walkthroughs"
+, booktitle =	"Proceedings of SIGGRAPH '91"
+, month =	jul
+, year =	1991
+, pages =	"61--69"
+, keywords =     "architectural simulation, linear programming, superset visibility"
+}
+
+@phdthesis{Teller92b
+, author =       "Teller, Seth Jared"
+, title =	"Visibility Computations in Densely Occluded Polyhedral Environments"
+, school =	"Dept. of Computer Science, University of California"
+, address =	"Berkeley"
+, year =	1992
+, keywords =	"graphics, visibility preprocessing, linear programming, spatial decomposition, visibility graphs, Plucker coordinates"
+, documentURL =	 "ftp://tr-ftp.cs.berkeley.edu/pub/tech-reports/csd/csd-92-708/all.ps"
+, note =         "Also available as Technical Report UCB//CSD-92-708"
+}
+
+@article{Yagel95a
+, author =      "Yagel, R. and Ray, W."
+, year =        1995
+, title =       "Visibility Computation for Efficient Walkthrough of Complex Environments"
+, journal =	"Presence: Teleoperators and Virtual Environments"
+, volume =      5
+, number =      1
+, page =        "45-60"
+, documentURL = "http://www.cis.ohio-state.edu/volviz/Papers/1995/presence.ps.gz"
+}
+
+@techreport{Georges95a
+, author	= "Georges, Chris"
+, title 	= "Obscuration Culling on Parallel Graphics Architectures"
+, institution =	"Department of Computer Science, University of N. Carolina, Chapel Hill"
+, number	= "TR95-017"
+, year		= 1995
+, documentURL	= "ftp://ftp.cs.unc.edu/pub/publications/techreports/95-017.ps.Z"
+}
+
+@InProceedings{Chin:1992:FOP,
+  author =       "Norman Chin and Steven Feiner",
+  title =        "Fast object-precision shadow generation for areal
+		 light sources using {BSP} trees",
+  pages =        "21--30",
+  booktitle =    "Computer Graphics (1992 Symposium on Interactive 3D
+		 Graphics)",
+  volume =       "25",
+  number =       "2",
+  year =         "1992",
+  month =        mar,
+  editor =       "David Zeltzer",
+  conference =   "held in Boston; 29 March - 1 April 1992",
+  keywords =     "shadow volume, area light source, penumbra, umbra",
+  annote =       "",
+}
+
+@Article{Moravec:1981:GWT,
+  author =       "Hans P. Moravec",
+  title =        "{3D} Graphics and the Wave Theory",
+  journal =      "Computer Graphics",
+  volume =       "15",
+  number =       "3",
+  pages =        "289--296",
+  month =        aug,
+  year =         "1981",
+  coden =        "CGRADI, CPGPBZ",
+  ISSN =         "0097-8930",
+  annote =       "A general overview of a new way of viewing light for
+                 computer graphics. He suggests using waves as the
+                 basis, and discusses the computational requirements and
+                 new capabilities. illumination by wave fronts, rather
+                 than light rays \\ A continuing trend in computer
+                 representation of three dimensional synthetic scenes is
+                 the ever more accurate modelling of complex
+                 illumination effects. Such effects provide cues
+                 necessary for a convincing illusion of reality. The
+                 best current methods simulate multiple specular
+                 reflections and refractions, but handle at most one
+                 scattering bounce per light ray. They cannot accurately
+                 simulate diffuse light sources, nor indirect lighting
+                 via scattering media, without prohibitive increases in
+                 the already very large computing costs. \\ Conventional
+                 methods depend implicitly on a {\em particle} model;
+                 light propagates in straight and conceptually
+                 infinitely thin rays. This paper argues that a {\em
+                 wave} model has important computational advantages for
+                 the complex situations. In this approach, light is
+                 represented by wave fronts which are stored as two
+                 dimensional arrays of complex numbers. \\ The
+                 propagation of such a front can be simulated by a
+                 linear transform. Several advantages accrue.
+                 Propagations in a direction orthogonal to the plane of
+                 a front are convolutions which can be done by FFT in
+                 $O(n \log n)$ time rather than the $n^{2}$ time for a
+                 similar operation using rays. A typical speedup is
+                 about 10,000. The wavelength of the illumination sets a
+                 resolution limit which prevents unnecessary computation
+                 of elements smaller than will be visible. The generated
+                 wavefronts contain multiplicities of views of the
+                 scene, which can be individually extracted by passing
+                 them through different simulated lenses. Lastly the
+                 wavefront calculations are ideally suited for
+                 implementation on available array processors, which
+                 provide more cost effective calculation for this task
+                 than general purpose computers. \\ The wave method
+                 eliminates the aliasing problem; the wavefronts are
+                 inherently spatially filtered, but substitutes
+                 diffraction effects and depth of focus limitations in
+                 its stead.",
+  conference =   "held in Dallas, Texas; July 1981",
+  keywords =     "I30 wave theory, effects, parallel processing",
+}
+
+
+@Article{Rajkumar:1996:RFBSP,
+  author = 	 {A. Rajkumar and B.F. Naylor and F. Feisullin and L. Rogers},
+  title = 	 {Predicting RF coverage in large environments using
+ray--beam tracing and partitioning tree represented geometry},
+  journal = 	 {Wireless Netwoks},
+  year = 	 {1996},
+  volume = 	 {2},
+  pages = 	 {143--154},
+}
+
+@TechReport{Teller:1998:FC,
+  author = 	 {Seth Teller and John Alex},
+  title = 	 {Frustum casting for progressive, interactive rendering},
+  institution =  {MIT},
+  year = 	 {1998},
+  number = 	 {MIT LCS TR--740},
+  month = 	 {January},
+}
+
+@InProceedings{Lukaszewski98,
+  author =       "A. Lukaszewski and A. Formella",
+  title =        "Fast Penumbra Calculation in Ray Tracing",
+  booktitle =    "Proceedings of WSCG'98, the 6th International
+                 Conference in Central Europe on Computer Graphics and
+                 Visualization '98",
+  pages =        "238--245",
+  month =        feb,
+  year =         "1998",
+  keywords =     "shadow computation, stochastic ray tracing, bounding
+                 volumes",
+}
+
+
+
+@TechReport{Havran97:rep,
+  author = {Havran, V.},
+  title = {Spatial Data Structures for Visibility Computation},
+  institution = {CTU--FEE Prague},
+  number = {DC-PSR-97-05},
+  month = {May},
+  year = {1997},
+  note = {Postgraduate Study Report, 34 pages, also available as
+          ftp://www.cgg.cvut.cz/{}outgoing/havran/minimum/{}dc-psr-97-04.ps.gz},
+}
+
+@PhdThesis{Grant92,
+  author =       "Charles W. Grant",
+  title =        "Visibility Algorithms in Image Synthesis",
+  school =       "U. of California, Davis",
+  year =         "1992",
+  keywords =     "z buffer, ray tracing, shadow, taxonomy",
+  annote =       "partial electronic version available from
+                 grant1@llnl.gov, A successor to
+                 Sutherland-Sproull-Schumacker, Comput. Surv. 74",
+}
+
+@InProceedings{Berg93,
+  author =       "M. de Berg",
+  title =        "Generalized hidden surface removal",
+  pages =        "1--10",
+  ISBN =         "0-89791-582-8",
+  editor =       "ACM-SIGACT ACM-SIGGRAPH",
+  booktitle =    "Proceedings of the 9th Annual Symposium on
+                 Computational Geometry ({SCG} '93)",
+  address =      "San Diego, CA, USA",
+  month =        may,
+  year =         "1993",
+  publisher =    "ACM Press",
+}
+
+@Article{Franklin:1990:POH,
+  author =       "W. Randolph Franklin and Mohan S. Kankanhalli",
+  editor =       "Forest Baskett",
+  title =        "Parallel Object-Space Hidden Surface Removal",
+  journal =      "Computer Graphics",
+  volume =       "24",
+  number =       "4",
+  pages =        "87--94",
+  month =        aug,
+  year =         "1990",
+  coden =        "CGRADI, CPGPBZ",
+  ISSN =         "0097-8930",
+  conference =   "held in Dallas, Texas; 6--10 August 1990",
+}
+
+@Book{Foley90,
+  author =       "James D. Foley and Andries van Dam and Steven K.
+                 Feiner and John F. Hughes",
+  title =        "Computer Graphics: Principles and Practice",
+  edition =      "2nd",
+  pages =        "1174",
+  publisher =    "Addison-Wesley Publishing Co.",
+  address =      "Reading, MA",
+  year =         "1990",
+  mrnumber =     "B.Foley.90",
+  ISBN =         "0-201-12110-7",
+  contents =     "(not listed)",
+}
+
+@InProceedings{Zhang:1997:FBC,
+  author =       "Hansong Zhang and Kenneth E. {Hoff III}",
+  title =        "Fast Backface Culling Using Normal Masks",
+  booktitle =    "1997 Symposium on Interactive {3D} Graphics",
+  pages =        "103--106",
+  year =         "1997",
+  editor =       "Michael Cohen and David Zeltzer",
+  month =        apr,
+  organization = "ACM SIGGRAPH",
+  note =         "ISBN 0-89791-884-3",
+}
+
+@Article{tvcg-1997-21,
+  author =       "Kalpathi R. Subramanian and Bruce F. Naylor",
+  title =        "{Converting Discrete Images to Partitioning Trees}",
+  journal =      "IEEE Transactions on Visualization and Computer
+                 Graphics",
+  volume =       "3",
+  number =       "3",
+  month =        jul,
+  year =         "1997",
+  pages =        "273--?",
+  abstract =     "The discrete space representation of most scientific
+                 datasets (pixels, voxels, etc.), generated through
+                 instruments or by sampling continuously defined fields,
+                 while being simple, is also verbose and structureless.
+                 We propose the use of a particular spatial structure,
+                 the {\em binary space partitioning tree}, or, simply,
+                 {\em partitioning tree}, as a new representation to
+                 perform efficient geometric computation in discretely
+                 defined domains. The ease of performing affine
+                 transformations, set operations between objects, and
+                 correct implementation of transparency (exploiting the
+                 visibility ordering inherent to the representation)
+                 makes the partitioning tree a good candidate for
+                 probing and analyzing medical reconstructions, in such
+                 applications as surgery planning and prostheses design.
+                 The multiresolution characteristics of the
+                 representation can be exploited to perform such
+                 operations at interactive rates by smooth variation of
+                 the amount of geometry. Application to ultrasound data
+                 segmentation and visualization is proposed. The paper
+                 describes methods for constructing partitioning trees
+                 from a discrete image/volume data set. Discrete space
+                 operators developed for edge detection are used to
+                 locate discontinuities in the image from which
+                 lines/planes containing the discontinuities are fitted
+                 by using either the Hough transform or a hyperplane
+                 sort. A multiresolution representation can be generated
+                 by ordering the choice of hyperplanes by the magnitude
+                 of the discontinuities. Various approximations can be
+                 obtained by pruning the tree according to an error
+                 metric. The segmentation of the image into edgeless
+                 regions can yield significant data compression. A
+                 hierarchical encoding schema for both lossless and
+                 lossy encodings is described.",
+  keywords =     "-Partitioning trees, BSP trees, space partitioning,
+                 miltiresolution representations, image reconstruction,
+                 image coding, scientific visualization, MRI
+                 visualization",
+  tvcg-abstract-url = "http://www.computer.org/tvcg/tg1997/v0273abs.htm",
+  tvcg-pdf-url = "http://pdf.computer.org/tg/books/tg1997/pdf/v0273.pdf",
+}
+
+@InProceedings{Murali:1997:CSB,
+  author =       "T. M. Murali and Thomas A. Funkhouser",
+  title =        "Consistent Solid and Boundary Representations from
+                 Arbitrary Polygonal Data",
+  booktitle =    "1997 Symposium on Interactive {3D} Graphics",
+  pages =        "155--162",
+  year =         "1997",
+  editor =       "Michael Cohen and David Zeltzer",
+  month =        apr,
+  organization = "ACM SIGGRAPH",
+  note =         "ISBN 0-89791-884-3",
+}
+
+
+
+@InProceedings{Stewart:1998:AVM,
+  author = 	 {A. J. Stewart and T. Karkanis},
+  title = 	 {Computing the approximate visibility map, with applications to form factors and discontinuity meshing},
+  booktitle =    "Proceedings of the Ninth
+                 Eurographics Workshop on Rendering",
+  pages =        "57--68",
+  year  =        "1998",
+}
+
+
+@Article{Bishop:1998:DPG,
+  author =       "Lars Bishop and Dave Eberly and Turner Whitted and
+                 Mark Finch and Michael Shantz",
+  title =        "Designing a {PC} Game Engine",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "18",
+  number =       "1",
+  pages =        "46--53",
+  month =        jan # "\slash " # feb,
+  year =         "1998",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Thu Feb 26 12:06:17 MST 1998",
+  url =          "http://computer.org/cga/cg1998/g1046abs.htm;
+                 http://dlib.computer.org/cg/books/cg1998/pdf/g1046.pdf",
+  acknowledgement = ack-nhfb,
+}
+
+
+@TechReport{Wimmer:1998:FWIC,
+  author = 	 {M. Wimmer and M. Giegl and D. Schmalstieg},
+  title = 	 {Fast Walkthroughs with Image Caches and Ray Casting},
+  institution =  {Institut f\"ur Computergraphik, TU Wien},
+  year = 	 {1998},
+  number =       {TR-186-2-98-30},
+  month = 	 {December},
+}
+
+@TechReport{Wonka:1999:OSFW,
+  author = 	 {P. Wonka and D. Schmalstieg},
+  title = 	 {Occluder Shadows for Fast Walkthroughs of
+                  Urban Environments},
+
+  institution =  {Institut f\"ur Computergraphik, TU Wien},
+  year = 	 {1999},
+  number =       {TR-186-2-99-03},
+  month = 	 {January},
+}
+
+@TechReport{Szirmay-Kalos98a,
+  author =       "Laszlo Szirmay-Kalos",
+  title =        "Global Ray-bundle Tracing",
+  institution =  "Vienna University of Technology",
+  type =         "Technical Report,",
+  number =       "TR-186-2-98-18",
+  address =      "Vienna",
+  year =         "1998",
+}
+
+@InProceedings{Szirmay-Kalos98b,
+  author =       "Laszlo Szirmay-Kalos and Werner Purgathofer",
+  title =        "Global Ray-bundle Tracing with Hardware Acceleration",
+  booktitle =    "Ninth Eurographics Workshop on Rendering",
+  address =      "Vienna, Austria",
+  month =        jun,
+  year =         "1998",
+  keywords =     "hardware",
+}
+
+@InProceedings{Snyder:1998:VSC,
+  author =       "John Snyder and Jed Lengyel",
+  title =        "Visibility Sorting and Compositing Without Splitting
+                 for Image Layer Decomposition",
+  booktitle =    "SIGGRAPH 98 Conference Proceedings",
+  editor =       "Michael Cohen",
+  series =       "Annual Conference Series",
+  year =         "1998",
+  organization = "ACM SIGGRAPH",
+  publisher =    "Addison Wesley",
+  month =        jul,
+  pages =        "219--230",
+  note =         "ISBN 0-89791-999-8",
+  keywords =     "visibility sorting, compositing, nonsplitting layered
+                 decomposition, occlusion cycle, occlusion graph,
+                 sprite, kd-tree",
+  annote =       "We present an efficient algorithm for visibility
+                 sorting a set of moving geometric objects into a
+                 sequence of image layers which are composited to
+                 produce the final image. Instead of splitting the
+                 geometry as in previous visibility approaches, we
+                 detect mutual occluders and resolve them using an
+                 appropriate image compositing expression or merge them
+                 into a single layer. Such an algorithm has many
+                 applications in computer graphics; we demonstrate two:
+                 rendering acceleration using image interpolation and
+                 visibility-correct depth of field using image blurring.
+                 We propose a new, incremental method for identifying
+                 mutually occluding sets of objects and computing a
+                 visibility sort among these sets. Occlusion queries are
+                 accelerated by testing on convex bounding hulls; less
+                 conservative tests are also discussed. Kd-trees formed
+                 by combinations of directions in object or image space
+                 provide an initial cull on potential occluders, and
+                 incremental collision detection algorithms are adapted
+                 to resolve pairwise occlusions, when necessary. Mutual
+                 occluders are further analyzed to generate an image
+                 compositing expression; in the case of nonbinary
+                 occlusion cycles, an expression can always be generated
+                 without merging the objects into a single layer.
+                 Results demonstrate that the algorithm is practical for
+                 real-time animation of scenes involving hundreds of
+                 objects each comprising hundreds or thousands of
+                 polygons.",
+}
+
+@InProceedings{Plantinga:1990:RTH,
+  author =       "Harry Plantinga and Charles R. Dyer and W. Brent
+                 Seales",
+  title =        "Real-Time Hidden-Line Elimination for a Rotating
+                 Polyhedral Scene Using the Aspect Representation",
+  pages =        "9--16",
+  booktitle =    "Proceedings of Graphics Interface '90",
+  year =         "1990",
+  month =        may,
+  conference =   "held in Halifax, Nova Scotia; 14-18 May 1990",
+}
+
+@PhdThesis{Chrysantho1996a,
+  author =       "Yiorgos Chrysanthou",
+  school =       "QMW, Dept of Computer Science",
+  title =        "Shadow Computation for 3{D} Interaction and
+                 Animation",
+  year =         "1996",
+  keywords =     "Technical Report No. 715",
+  month =        jan,
+  scope =        "ace",
+}
+
+
+
+@PhdThesis{Campbell91,
+  author =       "A. T. {Campbell, III}",
+  title =        "Modeling Global Diffuse Illumination for Image
+                 Synthesis",
+  school =       "CS Dept, University of Texas at Austin",
+  year =         "1991",
+  month =        dec,
+  note =         "Tech. Report TR-91-39",
+  keywords =     "mesh generation, radiosity, penumbra, shadow",
+  pages =        "155",
+  abstract =     "Rapid developments in the design of algorithms for
+                 rendering globally illuminated scenes have taken place
+                 in the past five years. Net energy methods such as
+                 radiosity algorithms have become effective at computing
+                 the energy balance for scenes containing diffusely
+                 reflecting objects. Such methods first break up a scene
+                 description into a large set of elements, or possibly
+                 several levels of elements. Energy transfers among
+                 these elements are then determined using a variety of
+                 means. While much progress has been made in the design
+                 of energy transfer algorithms, little or no attention
+                 has been paid to the proper generation of the mesh of
+                 surface elements. This dissertation presents a
+                 technique for adaptively creating a mesh of surface
+                 elements as the energy transfers are computed. The
+                 method allows large numbers of small elements to be
+                 placed at parts of the scene where the most active
+                 energy transfers occur without requiring that other
+                 parts of the scene be subdivided needlessly to the same
+                 degree. As a result, the computational effort in the
+                 energy transfer computations can be concentrated where
+                 it has the most effect. Since the sources of direct and
+                 indirect illumination in the scene are polygonal
+                 elements, the effects of light sources with finite area
+                 must be computed. Most methods simplify the problem by
+                 approximating the area source with a collection of
+                 point sources. We present an object space algorithm to
+                 model illumination from polygonal light sources
+                 analytically. The result is a collection of
+                 smooth-shaded polygonal facets that may be rendered
+                 from any viewing position. Binary Space Partitioning
+                 trees are used to compute umbra and penumbra boundaries
+                 efficiently. Fast analytic techniques are developed for
+                 illumination calculations. Numerical optimization
+                 methods ensure that the shading function is sampled
+                 finely enough to find all significant illumination
+                 gradations. Illumination calculations are optimized to
+                 concentrate computational effort on parts of the scene
+                 where they are most needed.",
+}
+
+@PhdThesis{Drettakis94-SSRII,
+  author =       "George Drettakis",
+  month =        jan,
+  year =         "1994",
+  title =        "Structured {Sampling} and {Reconstruction} of
+                 {Illumination} for {Image} {Synthesis}",
+  number =       "293",
+  address =      "Toronto, Ontario",
+  school  =  "Department of Computer Science, University of
+                 Toronto",
+  type =         "{CSRI} {Technical} {Report}",
+  comments =     "available via anonymous ftp as:
+                 ftp.csri.toronto.edu:csri-technical-reports/293 and via
+                 the World Wide Web at:
+                 http://safran.imag.fr/Membres/George.Drettakis/pub.html",
+}
+
+@Article{Schroeder:1993:FFB,
+  author =       "P. Schroeder and P. Hanrahan",
+  title =        "On the Form Factor between Two Polygons",
+  journal =      "Computer Graphics",
+  volume =       "27",
+  number =       "{Annual Conference Series}",
+  pages =        "163--164",
+  year =         "1993",
+  bibdate =      "Thu Feb 6 10:16:14 MST 1997",
+  acknowledgement = ack-nhfb,
+  keywords =     "ACM; computer graphics; SIGGRAPH",
+}
+
+@PhdThesis{Funkhouser93phd,
+  author =       "Thomas A. Funkhouser",
+  title =        "Database and Display Algorithms for Interactive
+                 Visualization of Architectural Models",
+  school =       "CS Division, UC Berkeley",
+  year =         "1993",
+  keywords =     "multiresolution, architectural walkthrough",
+}
+
+@Book{Boissonnat98,
+  author =       {J.-D. Boissonnat and M. Yvinec},
+  title =        {Algorithmic Geometry},
+  publisher =    {cambridge University Press},
+  year =         1998,
+  where =        {A19}
+}
+
+
+
+
+@Misc{Chrysanthou:1998:VP,
+  author = 	 {Y. Chrysanthou and D. Cohen-Or and E. Zadicario},
+  title = 	 {Viewspace Partitioning of Densely Occluded Scenes},
+  howpublished = {Abstract of a video presentation,
+at the 13th Annual ACM Symposium on Computational Geometry, Minnesota, pages 413--414},
+  month = 	 {June},
+  year = 	 {1998},
+}
+
+
+@Unpublished{Sagadic,
+  author = 	 {Amela Sagadic},
+  title = 	 {An Algorithm for Invariant Polygon Visibility Orderings},
+  note = 	 {Downloaded from the WWW}
+}
+
+@Unpublished{Teichmann:WV,
+  author = 	 {Marek Teichmann and Seth Teller},
+  title = 	 {A Weak Visibility Algorithm with an Application to an Interactive Walkthrough},
+  note = 	 {Downloaded from the WWW}
+}
+
+@inproceedings{Tanaka91,
+       author =       "Toshimitsu Tanaka and Tokiichiro Takahashi",
+       title =        "Shading with Area Light Sources",
+       booktitle =    "Eurographics '91",
+       publisher =    "North-Holland",
+       pages =        "235--246, 535--537",
+       month =        sep,
+       year =         "1991",
+       annote = "no shadows",
+     }
+
+@InProceedings{Wang98,
+  author = 	 {Yigang Wang and Hujun Bao and Qunsheng Peng},
+  title = 	 {Accelerated Walkthroughs of Virtual Environments Based on
+Visibility Preprocessing and Simplification},
+  booktitle = 	 {Eurographics '98},
+  volume = 	 {17},
+  number = 	 {3},
+  year = 	 {1998},
+  pages = 	 {187--194},
+}
+
+@InProceedings{Nechvile99,
+  author = 	 {Karel Nechv\'\i{}le and Petr Tobola},
+  title = 	 {Local Approach to Dynamic Visibility in a Plane},
+  booktitle = 	 {Proceedings of WSCG'99, the 7th International
+                 Conference in Central Europe on Computer Graphics and
+                 Visualization '99},
+  year = 	 {1999},
+  pages = 	 {202--208},
+}
+@InProceedings{Tobola99,
+  author = 	 {Petr Tobola and Karel Nechv\'\i{}le},
+  title = 	 {Linear Size BSP trees for Scenes with Low Directional Density},
+  booktitle = 	 {Proceedings of WSCG'99, the 7th International
+                 Conference in Central Europe on Computer Graphics and
+                 Visualization '99},
+  year = 	 {1999},
+  pages = 	 {297--304},
+}
+
+@InProceedings{grant85a,
+  author =       "C. W. Grant",
+  title =        "Integrated Analytic Spatial and Temporal Anti-Aliasing
+                 for Polyhedra in 4-Space",
+  pages =        "79--84",
+  booktitle =      "Computer Graphics (SIGGRAPH '85 Proceedings)",
+  volume =       "19",
+  number =       "3",
+  year =         "1985",
+  month =        jul,
+  editor =       "B. A. Barsky",
+  conference =   "held in San Francisco, CA; 22--26 July 1985",
+  keywords =     "I37 anti-aliasing, temporal, I37 anti-aliasing, I37
+                 visible surface algorithms",
+}
+
+@InProceedings{Schilling:1997:TRT,
+  author =       "Andreas Schilling",
+  title =        "Toward Real-Time Photorealistic Rendering: Challenges
+                 and Solutions",
+  booktitle =    "1997 SIGGRAPH / Eurographics Workshop on Graphics
+                 Hardware",
+  editor =       "Steven Molnar and Bengt-Olaf Schneider",
+  year =         "1997",
+  organization = "ACM SIGGRAPH / Eurographics",
+  publisher =    "ACM Press",
+  address =      "New York City, NY",
+  month =        aug,
+  pages =        "7--16",
+  note =         "ISBN 0-89791-961-0",
+  keywords =     "antialiasing, bump mapping, environment mapping,
+                 anisotropic filtering",
+  annote =       "A growing number of real-time applications need
+                 graphics with photorealistic quality, especially in the
+                 field of training (virtual operation, driving and
+                 flight simulation), but also in the areas of design or
+                 ergonomic research. We take a closer look at main
+                 deficiencies of today's real time graphics hardware and
+                 present solutions for several of the identified
+                 problems in the areas of antialiasing and texture-,
+                 bump- and reflection mapping. In the second part of the
+                 paper, a new method for antialiasing bump maps is
+                 explained in more detail.",
+}
+
+@Article{Greene:1994:EAR,
+  author =       "N. Greene and M. Kass",
+  title =        "Error-Bounded Antialiased Rendering of Complex
+                 Environments",
+  journal =      "Computer Graphics",
+  volume =       "28",
+  number =       "{Annual Conference Series}",
+  pages =        "59--66",
+  month =        jul,
+  year =         "1994",
+  coden =        "CGRADI",
+  ISSN =         "0097-8930",
+  bibdate =      "Thu Feb 6 08:30:20 MST 1997",
+  acknowledgement = ack-nhfb,
+  keywords =     "ACM; computer graphics; SIGGRAPH",
+}
+
+@InProceedings{Bartz98,
+  author = 	 {Dirk Bartz and Michael Meissner and Tobias H\"uttner},
+  title = 	 {Extending Graphics Hardware for Occlusion Queries in OpenGL},
+  booktitle = 	 {Proceedings of the 1998 Workshop on Graphics Hardware},
+  pages = 	 {97--104},
+  year  =        {1998},
+}
+
+
+@Article{Clark:1976:HGM,
+  author =       "James H. Clark",
+  title =        "Hierarchical Geometric Models for Visible Surface
+                 Algorithms",
+  journal =      "Communications of the ACM",
+  volume =       "19",
+  number =       "10",
+  pages =        "547--554",
+  month =        oct,
+  year =         "1976",
+  coden =        "CACMA2",
+  ISSN =         "0001-0782",
+  bibdate =      "Tue Mar 25 13:26:09 MST 1997",
+  abstract =     "By using an extension of traditional structure
+                 information, or a geometric hierarchy, five significant
+                 improvements to current techniques of computer picture
+                 production are possible. First, the range of complexity
+                 of an environment is greatly increased while the
+                 visible complexity of any given scene is kept within a
+                 fixed upper limit. Second, a meaningful way is provided
+                 to vary the amount of detail presented in a scene.
+                 Third, ``clipping'' becomes a very fast logarithmic
+                 search for the resolvable parts of the environment
+                 within the field of view. Fourth, frame to frame
+                 coherence and clipping define a graphical ``working
+                 set,'' or fraction of the total structure that should
+                 be present in primary store for immediate access by the
+                 visible surface algorithm. Finally, the geometric
+                 structure suggests a recursive descent, visible surface
+                 algorithm in which the computation time potentially
+                 grows linearly with the visible complexity of the
+                 scene.",
+  acknowledgement = ack-nhfb,
+  classcodes =   "C5540 (Terminals and graphic displays); C6130B
+                 (Graphics techniques)",
+  classification = "723; 921",
+  corpsource =   "Univ. of California, Santa Cruz, CA, USA",
+  journalabr =   "Commun ACM",
+  keywords =     "algorithms; computer graphics; geometric models;
+                 hidden surface; hierarchical data structures; image
+                 processing; mathematical techniques --- Combinatorial
+                 Mathematics; model; visible surface algorithms",
+  treatment =    "A Application; P Practical; T Theoretical or
+                 Mathematical",
+}
+
+@Book{Skiena:1998:ADM,
+  author =       "Steven S. Skiena",
+  title =        "The Algorithm Design Manual",
+  publisher =    "Spring{\-}er-Ver{\-}lag",
+  address =      "Berlin, Germany~/ Heidelberg, Germany~/ London, UK~/
+                 etc.",
+  pages =        "xvi + 486",
+  year =         "1998",
+  ISBN =         "0-387-94860-0",
+  LCCN =         "QA76.9.A43S55 1997",
+  bibdate =      "Tue Feb 10 10:51:27 1998",
+  price =        "US\$54.95",
+  acknowledgement = ack-nhfb,
+}
+
+
+@Book{Blinn:1996:JBC,
+  author =       "Jim Blinn",
+  title =        "{Jim Blinn}'s Corner: {A} Trip Down the Graphics
+                 Pipeline",
+  publisher =    "Morgan Kaufmann Publishers",
+  address =      "Los Altos, CA 94022, USA",
+  pages =        "vii + 214",
+  year =         "1996",
+  ISBN =         "1-55860-387-5",
+  LCCN =         "T385.B585 1996",
+  bibdate =      "Tue Jan 28 14:26:03 1997",
+  note =         "This book is a collection of columns from the journal
+                 IEEE Computer Graphics and Applications.",
+  acknowledgement = ack-nhfb,
+}
+
+@Book{Blinn:1998:JBC,
+  author =       "Jim Blinn",
+  title =        "{Jim Blinn}'s Corner: Dirty Pixels",
+  publisher =    "Morgan Kaufmann Publishers",
+  address =      "Los Altos, CA 94022, USA",
+  pages =        "256",
+  year =         "1998",
+  ISBN =         "1-55860-455-3",
+  LCCN =         "T385.B586 1998",
+  bibdate =      "Tue Jan 28 14:26:03 1997",
+  note =         "This book is a collection of columns from the journal
+                 IEEE Computer Graphics and Applications.",
+  acknowledgement = ack-nhfb,
+}
+
+
+@Book{Prep85,
+  author =       "F. P. Preparata and M. I. Shamos",
+  title =        "Computational Geometry~: An Introduction",
+  publisher =    "Springer-Verlag",
+  year =         "1985",
+}
+
+@ARTICLE{Gigus90,
+    AUTHOR    = "Ziv Gigus and Jitendra Malik",
+    TITLE     = "Computing the aspect graph for line drawings of polyhedral objects",
+    JOURNAL   = "IEEE Transactions on Pattern Analysis and Machine Intelligence",
+    VOLUME    = 12,
+    NUMBER    = 2,
+    MONTH     = Feb,
+    YEAR      = 1990,
+    PAGES     = "113--122"
+}
+
+@Article{Blinn:1998:JBCc,
+  author =       "Jim Blinn",
+  title =        "Jim Blinn's Corner: Ten More Unsolved Problems in
+                 Computer Graphics",
+  journal =      "IEEE Computer Graphics \& Applications",
+  year =         "1998",
+  volume =       "18",
+  number =       "5",
+  month =        sep # " -- " # oct,
+  note =         "ISSN 0272-1716",
+}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/jiri.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/jiri.bib	(revision 277)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/jiri.bib	(revision 277)
@@ -0,0 +1,354 @@
+@Article{wimmer05:gpugems,
+  author = 	 {Michael Wimmer and Ji\v{r}\'\i{} Bittner},
+  title = 	 {Hardware Occlusion Queries Made Useful},
+  journal = 	 {GPU Gems 2: Programming Techniques for High-Performance Graphics and General-Purpose Computation},
+  year = 	 {2005},
+  pages = 	 {91--108},
+  publisher = {Addison Wesley}
+}
+
+@Article{bittner03:jep,
+  author = 	 {Ji\v{r}\'\i{} Bittner and Peter Wonka},
+  title = 	 {Visibility in Computer Graphics},
+  journal = 	 {Environment and Planning B: Planning and Design},
+  year = 	 {2003},
+  volume = 	 {30},
+  number = 	 {5},
+  pages = 	 {729--756},
+  month = 	 sep,
+  publisher = {Pion Ltd}
+}
+
+
+@PhdThesis{bittner:02:phd,
+  author = 	 {Ji\v{r}\'\i{} Bittner},
+  title = 	 {Hierarchical Techniques for Visibility Computations},
+  school = 	 {Czech Technical University in Prague},
+  year = 	 {2002},
+  month = 	 oct,
+}
+
+@Article{bittner:02:cg,
+  author = 	 {Ji\v{r}\'\i{} Bittner and jan P\v{r}ikryl and Pavel Slav\'\i{k}},
+  title = 	 {Exact Regional Visibility using Line Space Partitioning},
+  journal = 	 {Computers \& Graphics},
+  year = 	 {2003},
+  volume = 	 {27},
+  number = 	 {4},
+  pages = 	 {569--580},
+  month = 	 aug,
+}
+
+
+@article{bittner01:jvca,
+  author = "Ji\v{r}\'\i{} Bittner and Vlastimil Havran",
+  title = "Exploiting Coherence in Hierarchical Visibility Algorithms",
+  journal = "Journal of Visualization and Computer Animation, John Wiley \& Sons",
+  year = "2001",
+  volume = "12",
+  pages =  "277--286"
+}
+
+@inproceedings{bittner:2002:SCCG,
+  author = "Ji\v{r}\'\i{} Bittner",
+  title = "Efficient Construction of Visibility Maps using Approximate Occlusion Sweep",
+  booktitle = "Proceedings of Spring Conference on Computer Graphics (SCCG'02)",
+  address = {Budmerice, Slovakia},
+  year = "2002",
+  pages =       "163--171"
+}
+
+
+
+@inproceedings{havran:2002:WSCG,
+  author = "Vlastimil Havran and Ji\v{r}\'\i{} Bittner",
+  title = "On Improving {Kd}-Trees for Ray Shooting",
+  booktitle = "Journal of WSCG (Proceedings of Winter School on Computer Graphics 2001)",
+  address = {Plzen, Czech Republic},
+  year = "2002",
+  month = feb,
+ volume = "10",
+  number = "1--3",
+abstract="Efficient ray shooting algorithm is inherently required by
+many computer graphics algorithms, particularly in image
+synthesis. Practical ray shooting algorithms aiming at the
+average-case complexity use some underlying spatial data structure
+such as $kd$-tree. We show the new termination criteria algorithm that
+improves the space and time complexity of the $kd$-tree
+construction. It provides efficient ray-shooting queries and does not
+require any specific constants from a user. Further, we show how to
+apply a novel clipping algorithm into the $kd$-tree within
+construction phase in order to improve its properties."
+}
+
+
+@inproceedings{bittner:2001:PG,
+  author = "Ji\v{r}\'\i{} Bittner and Peter Wonka and Michael Wimmer",
+  title = "Visibility Preprocessing for Urban Scenes using Line Space Subdivision",
+  booktitle = "Proceedings of Pacific Graphics (PG'01)",
+  address = {Tokyo, Japan},
+  year = "2001",
+  publisher = "IEEE Computer Society",
+  pages =       "276--284"
+}
+
+@inproceedings{bittner:2001:SCCG,
+
+  author = "Ji\v{r}\'\i{} Bittner and Vlastimil Havran",
+  title = "Exploiting Temporal and Spatial Coherence in Hierarchical Visibility Algorithms",
+  booktitle = "Proceedings of Spring Conference on Computer Graphics (SCCG'01)",
+  address = {Budmerice, Slovakia},
+  year = "2001",
+  publisher = "IEEE Computer Society",
+  pages =       "213--220"
+}
+
+@TechReport{Bittner:2001:ERV_long,
+
+  author =      "Ji\v{r}\'\i{} Bittner and Jan P\v{r}ikryl",
+  title =       "Exact Regional Visibility using Line Space Partitioning",
+  year =        "2001",
+  month =       march,
+  pages =       "1--13",
+  keywords =    "visibility, line--space, BSP--tree, kD--tree, Plucker coordinates, projective geometry",
+  number =      "TR-186-2-01-06",
+  institution = "Institute of Computer Graphics and Algorithms,
+                 Vienna University of Technology",
+  address =     "Karlsplatz 13/186/2, A-1040 Vienna, Austria",
+  ftp =         "ftp://ftp.cg.tuwien.ac.at/pub/TR/01/TR-186-2-01-06Paper.ps.gz",
+  note =        "human contact: technical-report@cg.tuwien.ac.at",
+  abstract =    " We present a new technique for exact and output sensitive
+                 determination of  visibility from a polygonal region
+                 in the pla ne. It uses hierarchical partitioning of
+                 {\em line space}, that provid es comprehensive
+                 description of visibility for a set of {\em occlu
+                 ders}.  To the best of our knowledge, it is the first
+                 exact regional visibility algorithm suitable for
+                 visibility preprocessing of large scenes of
+                 unspecific type. We have evaluated the implementation
+                 on scenes with various visibility characteristics."
+                 }
+
+@TechReport{Bittner:2001:ERV,
+
+  author =      "Ji\v{r}\'\i{} Bittner and Jan P\v{r}ikryl",
+  title =       "Exact Regional Visibility using Line Space Partitioning",
+  year =        "2001",
+  month =       march,
+  pages =       "1--13",
+  keywords =    "visibility, line--space, BSP--tree, kD--tree, Plucker coordinates, projective geometry",
+  number =      "TR-186-2-01-06",
+  institution = "Institute of Computer Graphics and Algorithms,
+                 Vienna University of Technology",
+  ftp =         "ftp://ftp.cg.tuwien.ac.at/pub/TR/01/TR-186-2-01-06Paper.ps.gz",
+  note =        "Available as ftp://ftp.cg.tuwien.ac.at/pub/TR/01/TR-186-2-01-06Paper.ps.gz",
+  abstract =    " We present a new technique for exact and output sensitive
+                 determination of  visibility from a polygonal region
+                 in the pla ne. It uses hierarchical partitioning of
+                 {\em line space}, that provid es comprehensive
+                 description of visibility for a set of {\em occlu
+                 ders}.  To the best of our knowledge, it is the first
+                 exact regional visibility algorithm suitable for
+                 visibility preprocessing of large scenes of
+                 unspecific type. We have evaluated the implementation
+                 on scenes with various visibility characteristics."
+                 }
+
+#####################
+
+@inproceedings{havran:2001:EG,
+
+  author = "Vlastimil Havran and Ji\v{r}\'\i{} Bittner",
+  title = "LCTS: Ray Shooting using Longest Common Traversal Sequences",
+  booktitle = "Proceedings of Eurographics (EG'00)",
+  address = {Interlaken, Switzerland},
+  year = "2000",
+  pages =       "59--70"
+}
+
+%%%%%%%%% 1999 %%%%%%%%%%%%%%%%
+
+
+
+@TechReport{bittner99min,
+  author = 	 {Jiri Bittner},
+  title = 	 {Hierarchical Techniques for Visibility Determination},
+  institution =  {Department of Computer Science and Engineering,
+Czech Technical University in Prague},
+  year = 	 {1999},
+  number = 	 {DS-005},
+  month = 	 {March},
+  note = "Also available as http://www.cgg.cvut.cz/\~{}bittner/publications/minimum.ps.gz"
+}
+
+
+@Misc{bittner99eg,
+  author = 	 {Ji\v{r}\'\i{} Bittner and Vlastimil Havran},
+  title = 	 {Exploiting Temporal and Spatial Coherence in Hierarchical Visibility
+ Algorithms},
+  howpublished = {Submitted to the Eurographics'99 conference in Milano},
+  month = 	 {January},
+  year = 	 {1999},
+}
+
+@Misc{havran99wscg,
+  author = 	 {Vlastimil Havran and Ji\v{r}\'\i{} Bittner and
+                 Ji\v{r}\'\i{} \v{Z}\'{a}ra},
+  title = 	 {Constructing Rectilinear BSP Trees for Preffered Ray Sets},
+  howpublished = {Poster presentation at the WSCG'99 conference, Pilsen},
+  month = 	 {February},
+  year = 	 {1999},
+}
+
+@InProceedings{havran99sccg,
+  author = { Vlastimil Havran and Ji\v{r}\'\i{} Bittner},
+  title  = { Rectilinear BSP trees for preferred ray sets },
+  booktitle = { Proceedings of the Spring Conference on Computer Graphics (SCCG'99)}, 
+  address = { Budmerice, Slovakia},
+  year  = 1999,
+  pages = "171--178"
+}
+%  note = "Also available as http://www.cgg.cvut.cz/\~{}bittner/sccg98.ps.gz",
+
+
+@Misc{bittner99wshop,
+  author = 	 {Ji\v{r}\'\i{} Bittner and Vlastimil Havran Tom\'a\v{s}{} Kopal},
+  title = 	 {Visibility Computations in Large 3D Scenes},
+  howpublished = {Poster presentation at the Workshop'99, CTU Prague},
+  month = 	 {January},
+  year = 	 {1999},
+}
+
+%%%%%%%%% 1998 %%%%%%%%%%%%%%%%%%%%%%
+
+@Article{Havran98:d,
+   author = {Havran, V. and Kopal, T. and Bittner, J. and \v{Z}\'{a}ra, J.},
+   title = {FAST ROBUST BSP TREE TRAVERSAL ALGORITHM FOR RAY TRACING},
+   journal = {Journal of Graphics Tools},
+   year = { 1998 },
+   month = dec,
+}
+
+@inproceedings{bittner98b,
+  author = "Ji\v{r}\'\i{} Bittner and Vlastimil Havran and Pavel Slav\'\i{k}",
+  title = "Hierarchical Visibility Culling with Occlusion Trees",
+  booktitle = "Proceedings of Computer Graphics International '98 (CGI'98)",
+  year = "1998",
+  pages = "207--219",
+  publisher = "IEEE",
+  who = "Havran Vlastimil: VIS-0047",
+}
+% note = "Also available as http://www.cgg.cvut.cz/\~{}bittner/paper-copy.ps.gz",
+
+@InProceedings{Havran98:b,
+  author = { Havran, V. and Bittner, J. and \v{Z}\'{a}ra, J.},
+  title  = { Ray Tracing with Rope Trees},
+  booktitle = { Proceedings of 13th Spring Conference on Computer Graphics}, 
+  address = { Budmerice},
+  date  = {April 23--26},
+  year  = 1998,
+  pages = "130--139",
+  note = "Also available as http://www.cgg.cvut.cz/\~{}bittner/sccg98.ps.gz",
+}
+
+
+@InProceedings{bittner98poster,
+  author = {Bittner, J.},
+  title  = {Conservative Hierarchical Visibility with Occlusion Trees},
+  booktitle = {Proceedings of Poster'98},
+  organization = { CTU--FEE },
+  address = {Prague, Czech Republic},
+  pages = {2 pages, IC 03},
+  month = {May},
+  year  = {1998},
+}
+
+
+@InProceedings{Kopal98:b,
+  author = {Kopal, T. and Havran, V. and Bittner, J. and \v{Z}\'{a}ra, J.},
+  title  = {Directionality in Ray Tracing},
+  booktitle = {Proceedings of Poster'98},
+  note = {2nd International Student Conference on Electrical Engineering},
+ organization = { CTU--FEE },
+  address = {Prague, Czech Republic},
+  pages = {2 pages, IC 24},
+  month = {May},
+  year  = {1998},
+}
+
+
+@InProceedings{bittner98wshop,
+   author = {Bittner, J.},
+   title = {Hierarchical Visibility Algorithms},
+   booktitle = {Proceedings of Workshop'98},
+   organization = { CTU--FEE },
+   address = { Prague, Czech Republic },
+   editor= { A. Strejc },
+   month = { February},
+   pages = { 195--196},
+   year  = { 1998 },
+}
+
+
+%%%%%%%%% 1997 %%%%%%%%%%%%%%%%%%%%%%%
+
+@MastersThesis{Bittner:masters97,
+  author = 	 {Bittner, J.},
+  title = 	 {Global Visibility Computations},
+  school = 	 {Department of Computer Science and Engineering, Czech Technical University
+Prague},
+  year = 	 {1997},
+  month = 	 {January},
+  note =  "Also available as http://www.cgg.cvut.cz/\~{}bittner/masters.ps.gz",
+}
+
+@InProceedings{Bittner:gaw97,
+  author = 	 {Bittner, J.},
+  title = 	 {Global Visibility Computations},
+  booktitle =    {Graphics and WEB '97},
+  year =         {1997},
+  organization = {HTW Dresden, Germany},
+  key =          {global visibility, VRML, conservative visibility, spatial
+                  subdivision, visibility computations},
+}
+
+@InProceedings{Bittner:cescg97,
+  author = 	 {Bittner, J.},
+  title = 	 {Global Visibility},
+  booktitle =    {Proceedings of the CESCG '97, April 97, Bratislava and Vienna},
+  year =         {1997},
+  pages = {105--111},
+  key =          {global visibility, VRML, conservative visibility, spatial
+                  subdivision, visibility computations},
+}
+
+@InProceedings{Trefny97,
+  author =       {M. Trefn\'{y} and J. Bittner},
+  title =        {Global Visibility},
+  booktitle =    {Proceedings of The Fifth Internatinal Conference in Central
+                  Europe on Computer Graphics and Visualization '97},
+  key =          {global visibility, VRML, conservative visibility, spatial
+                  subdivision, visibility computations},
+  volume =       {IV},
+  pages =        {691--694},
+  year =         {1997},
+  month =        feb
+}
+
+%%%%%%%%%%%% 1996 %%%%%%%%%%%%%%%%%%%
+@TechReport{Bittner:delft96,
+  author = 	 {Bittner, J.},
+  title = 	 {RECNET - The speech recognition system},
+  institution =  {Technical University, Delft},
+  year = 	 {1996},
+  number =       {TR 96--160},
+  month = 	 {June}
+}
+
+
+
+
+
+
+
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/cge-wanted.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/cge-wanted.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/cge-wanted.bib	(revision 243)
@@ -0,0 +1,669 @@
+
+@inproceedings{BerDobEpp-SODA-90,
+  title = {{Visibility with a moving point of view}},
+  author = {Marshall W. Bern and David P. Dobkin and David Eppstein and Robert L. Grossman},
+  booktitle = {Proc. 1st Symp. Discrete Algorithms},
+  publisher = {Assoc. Comput. Mach. and Soc. Industrial {\&} Applied Mathematics},
+  pages = {107--118},
+  month = {January},
+  year = {1990}
+}
+
+@article{BerDobEpp-Algo-94,
+  title = {{Visibility with a moving point of view}},
+  author = {Marshall W. Bern and David P. Dobkin and David Eppstein and Robert L. Grossman},
+  journal = {Algorithmica},
+  volume = {11},
+  number = {4},
+  pages = {360--378},
+  month = {April},
+  year = {1994},
+  review = {MR-94j:68307}
+}
+
+@article{MR-94j:68307,
+  reviews = {BerDobEpp-Algo-94},
+  journal = {Mathematical Reviews},
+  publisher = {Amer. Math. Soc.},
+  title = {{Visibility with a moving point of view}},
+  number = {94j:68307},
+  year = {1994}
+}
+
+
+
+@Article{Matousek95,
+title={Approximations and Optimal Geometric Divide-and-Conquer},
+author={Ji{\v{r}}{\'\i} Matou{\v{s}}ek},
+pages={203--208},
+journal=jcss,
+year=1995,
+month=apr,
+volume=50,
+number=2,
+preliminary={STOC::Matousek1991}
+}
+
+@article{ma4,
+  author="J. Matousek",
+  title="Efficient partition trees",
+  journal="Discrete and Computational Geometry",
+  year="1992",
+  volume="8",
+  number="",
+  pages="315-334"
+}
+
+@inproceedings{ma92acm,
+  author="J. Matousek",
+  title="Range searching with efficient hierarchical cuttings",
+  booktitle="$8^{th}$ ACM Conf. in Comp. Geom.",
+  address="Berlin",
+  year="1992",
+  pages="276-285"
+}
+
+@article
+ {ma1,
+  author="J. Matousek",
+  title="Range searching with efficient hierarchical cuttings",
+  journal="Discrete and Computational Geometry",
+  year="1993",
+  volume="10",
+  number="",
+  pages="157-182"
+}
+
+@inproceedings{a-rsoas-89
+, author =      "Pankaj K. Agarwal"
+, title =       "Ray shooting and other applications of spanning trees with low stabbing number"
+, booktitle =   "Proc. 5th Annu. ACM Sympos. Comput. Geom."
+, year =        1989
+, pages =       "315--325"
+, precedes =    "a-rsoas-92"
+, update =      "96.05 agarwal, 95.05 korneenko"
+}
+
+@article{a-rsoas-92
+, author =      "Pankaj K. Agarwal"
+, title =       "Ray shooting and other applications of spanning trees with low stabbing number"
+, journal =     "SIAM J. Comput."
+, volume =      21
+, year =        1992
+, pages =       "540--570"
+, keywords =    "ray shooting, visibility, spanning trees, partition trees"
+, succeeds =    "a-rsoas-89"
+, update =      "96.05 agarwal, 95.05 korneenko"
+}
+
+@TECHREPORT{duke.tr:DukeCSTR9122,
+    AUTHOR = "Pankaj K. {Agarwal} and Jiri Matousek.",
+    year = "1991",
+    ABSTRACT = "\indent We present efficient algorithms for 
+        the {\em ray shooting} problem:  Given a
+        collection $\Gamma$ of objects in ${\bf R}^{d}$, build a data structure
+        so that, for a query ray, one can quickly determine the first object of
+        $\Gamma$  hit by the ray.  Using the parametric search technique, we reduce
+        this problem to the {\em segment emptiness} problem.  For various ray shooting
+        problems, we achieve space/query time tradeoffs of the following type:  for
+        some integer $b$ and a parameter $m \,  (n \leq m \leq n^{b})$ the queries are
+        answered in time 
+        $O(\frac{n}{m^{1/b}}\, \mbox {log} ^{O(1)}n)$,
+        with  $O(m^{1+ \epsilon })$ space and preprocessing time $(\varepsilon > 0$ is
+        arbitrarily small but fixed constant).  We get $b = \lfloor d/2
+        \rfloor $ for ray shooting
+        in a convex $d$-polytope defined as an intersection of $n$ half-spaces, $b = d$
+        for an arrangement of $n$ hyperplanes in ${\bf R}^{d}$ and $b = 3$ for an
+        arrangement of $n$ half-planes in ${\bf R}^{3}$.  Our approach also yields
+        fast procedures for finding the first $k$ objects hit by a query ray, for
+        searching nearest and farthest neighbors, and for the hidden surface
+        removal.  All the data structures can be maintained dynamically in amortized
+        time  $O(m^{1+ \epsilon }/n)$ per insert/delete operation. ",
+    LOCATION = "ftp://ftp.cs.duke.edu/dist/techreport/1991/1991-22.ps.Z",
+    NOTE = "Printed copies available from
+          T.R. Librarian,
+          Dept. of Computer Science,
+          Duke University,
+          Box 90129,
+          Durham, NC  27708-0129",
+    PUBLISHER = "Department of Computer Science, Duke University",
+    REPORTNUMBER = "Technical report DUKE--TR--1991--22",
+    TITLE = " Ray Shooting and Parametric Search",
+    SUBMITTER = "surendar@swift.cs.duke.edu (Mon Jul  1 23:53:45 1996)",
+    institution = "Duke University",
+    KEY = "DukeCSTR9122"
+}
+
+@inproceedings{am-rsps-92
+, author =      "Pankaj K. Agarwal and J. Matou{\v s}ek"
+, title =       "Ray shooting and parametric search"
+, booktitle =   "Proc. 24th Annu. ACM Sympos. Theory Comput."
+, year =        1992
+, pages =       "517--526"
+, keywords =    "ray tracing, range search, intersection, partition trees"
+, update =      "96.09 agarwal, 96.05 agarwal"
+}
+
+@article{as-rsacp-96i
+, author =      "P. K. Agarwal and M. Sharir"
+, title =       "Ray shooting amidst convex polygons in {2D}"
+, journal =     "J. Algorithms"
+, volume =      21
+, year =        1996
+, pages =       "508--519"
+, update =      "97.03 agarwal+pocchiola+smid, 96.09 agarwal, 96.05 agarwal"
+}
+
+@inproceedings{as-rsacp-93
+, author =      "Pankaj K. Agarwal and M. Sharir"
+, title =       "Ray Shooting Amidst Convex Polytopes in Three Dimensions"
+, booktitle =   "Proc. 4th ACM-SIAM Sympos. Discrete Algorithms"
+, year =        1993
+, pages =       "260--270"
+, precedes =    "as-rsacp-96ii"
+, update =      "96.05 smid, 93.05 smid"
+}
+
+@inproceedings{af-acrsm-97
+, author =      "B. Aronov and S. Fortune"
+, title =       "Average-Case Ray Shooting and Minimum Weight Triangulations"
+, booktitle =   "Proc. 13th Annu. ACM Sympos. Comput. Geom."
+, year =        1997
+, pages =       "203--212"
+, update =      "97.07 efrat"
+}
+
+@inproceedings{bf-gsars-90
+, author =      "R. Bar-Yehuda and S. Fogel"
+, title =       "Good splitters with applications to ray shooting"
+, booktitle =   "Proc. 2nd Canad. Conf. Comput. Geom."
+, year =        1990
+, pages =       "81--84"
+, keywords =    "ray tracing, arrangements"
+}
+
+@techreport{bf-vrs-90
+, author =      "R. Bar-Yehuda and S. Fogel"
+, title =       "Variations on Ray Shooting"
+, type =        "Technical {Report}"
+, number =      639
+, institution = "Technion IIT"
+, address =     "Haifa, Israel"
+, year =        1990
+, keywords =    "sheaf, ES-trees"
+, update =      "95.01 smid, 93.09 milone+mitchell"
+}
+
+@article{bf-vrs-94
+, author =      "R. Bar-Yehuda and S. Fogel"
+, title =       "Variations on Ray Shooting"
+, journal =     "Algorithmica"
+, volume =      11
+, year =        1994
+, pages =       "133--145"
+, succeeds =    "bf-vrs-90"
+, update =      "95.01 smid, 94.05 matousek"
+}
+
+@inproceedings{bhosk-ershs-91
+, author =      "M. de Berg and D. Halperin and M. Overmars and J. Snoeyink and M. van Kreveld"
+, title =       "Efficient ray shooting and hidden surface removal"
+, booktitle =   "Proc. 7th Annu. ACM Sympos. Comput. Geom."
+, year =        1991
+, pages =       "21--30"
+, keywords =    "ray tracing, hidden surface removal, random sampling"
+, cites =       "as-anspt-91, ako-iqco-91, as-zasha-91, cegpsss-ccclr-90, cegs-lscaa-89, cg-vippg-89, csw-qoubs-90, cj-sersi-91, cs-vppt-89, bo-hsrap-90, de-ssio-87, dk-ladsc-85, e-acg-87, m-aodq-90, m-wcohs-87, os-oshsr-89, p-srs3d-90, p-nrrsi-91, sml-rtatp-88, s-pcg-88, ZZZ"
+, update =      "97.11 bibrelex"
+}
+
+@Article{deb94,
+  author =       "M. De Berg and D. Halperin and M. Overmars and J.
+                 Snoeyink and M. Van Kreveld",
+  title =        "Efficient ray shooting and hidden surface removal",
+  journal =      "Algorithmica: An International Journal in Computer
+                 Science",
+  volume =       "12",
+  number =       "1",
+  year =         "1994",
+  publisher =    "Springer Verlag, New York",
+  pages =        "30--53",
+  topic =        "visibility",
+}
+
+@inproceedings{cegghss-rspug-91
+, author =      "B. Chazelle and H. Edelsbrunner and M. Grigni and L. Guibas and J. Hershberger and M. Sharir and J. Snoeyink"
+, title =       "Ray shooting in polygons using geodesic triangulations"
+, booktitle =   "Proc. 18th Internat. Colloq. Automata Lang. Program."
+, series =      "Lecture Notes Comput. Sci."
+, volume =      510
+, publisher =   "Springer-Verlag"
+, year =        1991
+, pages =       "661--673"
+, keywords =    "ray shooting, simple polygon, geodesics"
+, update =      "93.09 rote"
+}
+
+@article{cegghss-rspug-94
+, author =      "B. Chazelle and H. Edelsbrunner and M. Grigni and L. Guibas and J. Hershberger and M. Sharir and J. Snoeyink"
+, title =       "Ray shooting in polygons using geodesic triangulations"
+, journal =     "Algorithmica"
+, volume =      12
+, year =        1994
+, pages =       "54--68"
+, keywords =    "ray shooting, simple polygon, geodesics"
+, succeeds =    "cegghss-rspug-91"
+, update =      "96.05 pocchiola+ramkumar"
+}
+
+@article{cf-plhur-94
+, author =      "B. Chazelle and J. Friedman"
+, title =       "Point Location among Hyperplanes and Unidirectional Ray-Shooting"
+, journal =     "Comput. Geom. Theory Appl."
+, volume =      4
+, year =        1994
+, pages =       "53--62"
+, update =      "97.11 bibrelex, 95.01 matousek+smid"
+}
+
+@article{cj-arsis-92
+, author =      "S. W. Cheng and R. Janardan"
+, title =       "Algorithms for ray-shooting and intersection searching"
+, journal =     "J. Algorithms"
+, volume =      13
+, year =        1992
+, pages =       "670--692"
+, update =      "93.09 smid"
+}
+
+@inproceedings{cj-sersi-91
+, author =      "S. W. Cheng and R. Janardan"
+, title =       "Space-efficient ray shooting and intersection searching: algorithms, dynamization and applications"
+, booktitle =   "Proc. 2nd ACM-SIAM Sympos. Discrete Algorithms"
+, year =        1991
+, pages =       "7--16"
+, keywords =    "ray tracing, dynamization, spanning trees of low stabbing number"
+}
+
+@inproceedings{cpt-uadpl-93
+, author =      "Y.-J. Chiang and F. P. Preparata and R. Tamassia"
+, title =       "A Unified Approach to Dynamic Point Location, Ray Shooting, and Shortest Paths in Planar Maps"
+, booktitle =   "Proc. 4th ACM-SIAM Sympos. Discrete Algorithms"
+, year =        1993
+, pages =       "44--53"
+, precedes =    "cpt-uadpl-96"
+, update =      "96.05 smid, 93.05 smid"
+}
+
+@article{cpt-uadpl-96
+, author =      "Y.-J. Chiang and F. P. Preparata and R. Tamassia"
+, title =       "A Unified Approach to Dynamic Point Location, Ray Shooting, and Shortest Paths in Planar Maps"
+, journal =     "SIAM J. Comput."
+, volume =      25
+, year =        1996
+, pages =       "207--233"
+, url = "http://www.cs.brown.edu/cgc/papers/cpt-uadpl-96.ps.gz"
+, succeeds =    "cpt-uadpl-93"
+, update =      "97.03 tamassia, 96.05 smid, 95.01 tamassia"
+}
+
+@article{g-airsm-97
+, author =      "M. T. Goodrich"
+, title =       "An improved ray shooting method for constructive solid geometry models via tree contraction"
+, journal =     "Internat. J. Comput. Geom. Appl."
+, volume =      "??"
+, year =        1997
+, note =        "to appear"
+, update =      "97.03 tamassia"
+}
+
+@article{gt-drssp-97
+, author =      "M. T. Goodrich and R. Tamassia"
+, title =       "Dynamic ray shooting and shortest paths in planar subdivisions via balanced geodesic triangulations"
+, journal =     "J. Algorithms"
+, volume =      23
+, year =        1997
+, pages =       "51--73"
+, update =      "97.07 smid"
+}
+
+@inproceedings{gt-drssp-93
+, author =      "M. T. Goodrich and R. Tamassia"
+, title =       "Dynamic ray shooting and shortest paths via balanced geodesic triangulations"
+, booktitle =   "Proc. 9th Annu. ACM Sympos. Comput. Geom."
+, year =        1993
+, pages =       "318--327"
+, update =      "93.09 jones"
+}
+
+@inproceedings{gos-ilsrs-88
+, author =      "L. Guibas and M. Overmars and M. Sharir"
+
+, title =       "Intersecting line segments, ray shooting, and other applications of geometric partitioning techniques"
+, booktitle =   "Proc. 1st Scand. Workshop Algorithm Theory"
+, series =      "Lecture Notes Comput. Sci."
+, volume =      318
+, publisher =   "Springer-Verlag"
+, year =        1988
+, pages =       "64--73"
+}
+
+@techreport{gos-rsipl-89
+, author =      "L. Guibas and M. Overmars and M. Sharir"
+, title =       "Ray shooting, implicit point location, and related queries in arrangements of segments"
+, type =        "Report"
+, number =      433
+, institution = "Dept. Comput. Sci., New York Univ."
+, address =     "New York, NY"
+, month =       mar
+, year =        1989
+, keywords =    "random sampling, ray tracing, arrangements, point location"
+}
+
+@article{k-3vrs2-??
+, author =      "M. J. Katz"
+, title =       "{3-D} vertical ray shooting and {2-D} point enclosure, range searching, and arc shooting amidst convex fat objects"
+, journal =     "Comput. Geom. Theory Appl."
+, note =        "to appear"
+, succeeds =    "k-3vrs2-95"
+, update =      "97.11 katz"
+, year = "1995"
+}
+
+@techreport{k-3vrs2-95
+, author =      "M. J. Katz"
+, title =       "{3-D} vertical ray shooting and {2-D} point enclosure, range searching, and arc shooting amidst convex fat objects"
+, type =        "Research {Report}"
+, number =      2583
+, institution = "INRIA"
+, address =     "BP93, 06902 Sophia-Antipolis, France"
+, year =        1995
+, update =      "97.11 katz, 96.09 smid"
+}
+
+@article{ms-rscp-93
+, author =      "J. Matou{\v s}ek and O. Schwarzkopf"
+, title =       "On ray shooting in convex polytopes"
+, journal =     "Discrete Comput. Geom."
+, volume =      10
+, number =      2
+, year =        1993
+, pages =       "215--232"
+, keywords =    "ray shooting, convex polytope, range searching"
+, comments =    "another part of the results of the conference version is in m-loq-93"
+, succeeds =    "ms-loq-92"
+, update =      "96.09 agarwal, 94.05 schwarzkopf, 94.01 matousek"
+}
+
+@inproceedings{mms-qsrs-94
+, author =      "J. S. B. Mitchell and D. M. Mount and S. Suri"
+, title =       "Query-Sensitive Ray Shooting"
+, booktitle =   "Proc. 10th Annu. ACM Sympos. Comput. Geom."
+, year =        1994
+, pages =       "359--368"
+, update =      "94.09 jones, 94.01 jones"
+}
+
+@techreport{p-nrrsi-91
+, author =      "M. Pellegrini"
+, title =       "New results on ray-shooting and isotopy classes of lines in $3$-dimensional space"
+, year =        1991
+, update =      "97.11 bibrelex"
+}
+
+@inproceedings{p-rsicl-91
+, author =      "M. Pellegrini"
+, title =       "Ray-shooting and isotopy classes of lines in $3$-dimensional space"
+, booktitle =   "Proc. 2nd Workshop Algorithms Data Struct."
+, series =      "Lecture Notes Comput. Sci."
+, volume =      519
+, publisher =   "Springer-Verlag"
+, year =        1991
+, pages =       "20--31"
+, keywords =    "ray tracing, random sampling"
+}
+
+@incollection{p-rsls-97
+, author =      "M. Pellegrini"
+, title =       "Ray shooting and lines in space"
+, chapter =     32
+, editor =      "Jacob E. Goodman and Joseph O'Rourke"
+, booktitle =   "Handbook of Discrete and Computational Geometry"
+, publisher =   "CRC Press LLC"
+, address =     "Boca Raton, FL"
+, year =        1997
+, pages =       "599--614"
+, update =      "97.11 orourke"
+}
+
+@article{p-rst3s-93
+, author =      "M. Pellegrini"
+, title =       "Ray shooting on triangles in $3$-space"
+, journal =     "Algorithmica"
+, volume =      9
+, year =        1993
+, pages =       "471--494"
+, update =      "94.05 matousek"
+}
+
+@inproceedings{p-srs3d-90
+, author =      "M. Pellegrini"
+, title =       "Stabbing and ray shooting in $3$-dimensional space"
+, booktitle =   "Proc. 6th Annu. ACM Sympos. Comput. Geom."
+, year =        1990
+, pages =       "177--186"
+, cites =       "a-dapal-89, a-rsoas-89, ak-frtrc-87, aw-alts-87, bdeg-vmpv-90, cegs-lscaa-89, c-narsc-87, cs-vppt-86, e-acg-87, egs-cmfal-88, emprww-sls-82, eos-calha-86, g-rt-89, gos-rsipl-89, hp-mag-52, hs-ndssg-86, jk-spals-88, m-ai-70, mo-al3sd-88, os-oshsr-89, s-chdch-86, sml-rtatp-88, s-agtd-51, s-pcg-88, ZZZ"
+, update =      "97.11 bibrelex"
+}
+
+@inproceedings{s-rscp-92
+, author =      "O. Schwarzkopf"
+, title =       "Ray shooting in convex polytopes"
+, booktitle =   "Proc. 8th Annu. ACM Sympos. Comput. Geom."
+, year =        1992
+, pages =       "286--295"
+, precedes =    "s-dmcpr-92"
+, cites =       "aesw-emstb-90, am-dhsrr-91, am-rsps-92, bc-hhihr-92, bdsty-arsol-92, bdt-riach-, cegs-sessr-89, cf-plhur-94, c-hsh-85, c-narsc-87, c-racpq-88, cms-frric-92i, cs-arscg-89, dmt-fddtl-92, e-acg-87, gks-ricdv-92, m-ept-91, m-rph-91, m-fppa1-88, m-rmstd-91, m-rmstf-91, m-rmstl-91, s-dmgsm-91, s-sdlpc-91, s-sfira-91, ZZZ"
+, update =      "97.11 bibrelex, 93.05 schwarzkopf"
+}
+
+@TECHREPORT{duke.tr:DukeCSTR9107,
+    AUTHOR = "Pankaj K. {Agarwal} and Micha Sharir.",
+    year = "1991",
+    ABSTRACT = "\indent We present several applications of a 
+        recent space partitioning technique of
+        Chazelle, Sharir and Welzl [13].  Our results include efficient algorithms
+        for output-sensitive hidden surface removal, for ray shooting in two and
+        three dimensions, and for constructing spanning trees with low stabbing
+        number.",
+    LOCATION = "ftp://ftp.cs.duke.edu/dist/techreport/1991/1991-07.ps.Z",
+    NOTE = "Printed copies available from
+          T.R. Librarian,
+          Dept. of Computer Science,
+          Duke University,
+          Box 90129,
+          Durham, NC  27708-0129",
+    PUBLISHER = "Department of Computer Science, Duke University",
+    REPORTNUMBER = "Technical report DUKE--TR--1991--07",
+    TITLE = " Applications of a New Space Partitioning Technique",
+    SUBMITTER = "surendar@swift.cs.duke.edu (Mon Jul  1 23:53:07 1996)",
+    institution = "Duke University",
+    KEY = "DukeCSTR9107"
+}
+
+@article{
+dk-ladsc-85, info="81"
+, author =      "D. P. Dobkin and D. G. Kirkpatrick"
+, title =       "A linear algorithm for determining the separation of convex polyhedra"
+, journal =     "J. Algorithms"
+, volume =      6
+, year =        1985
+, pages =       "381--392"
+, keywords =    "design of algorithms, construction, separation, convex, polyhedra, hierarchical representations"
+}
+
+@InProceedings{dadoun85a,
+        author =       "Nou Dadoun and David G. Kirkpatrick and John P.
+                       Walsh",
+        title =        "The Geometry of Beam Tracing",
+        booktitle =    "Proceedings of the ACM Symposium on Computational
+                       Geometry",
+        pages =        "55--61",
+        year =         "1985",
+        month =        jun,
+        annote =       "the use of BSP trees and hierarchical bounding volumes
+                       for fast beam intersection testing. \\ A solution to
+                       the hidden surface elimination problem called beam
+                       tracing is described. Beam tracing is related to ray
+                       tracing but uses spatial coherence within the scene,
+                       and area coherence within the image to batch
+                       computations. Beam tracing is an object space solution
+                       to the hidden surface problem. \\ Beam tracing is
+                       formulated in terms of its principal subprocesses:
+                       intersection, sorting, and clipping. A hierarchical
+                       scene representation is proposed. This incorporates the
+                       space decomposition idea of the BSP tree [Fuchs, Kedem,
+                       and Naylor, 80] along with the convex polytope
+                       intersection detection technique of [Dobkin and
+                       Kirkpatrick, 83] to interleave and efficiently solve
+                       the intersection and sorting subproblems of beam
+                       tracing.",
+}
+
+@InProceedings{dAmore:1992:OBP,
+  author =       "F. d'Amore and P. G. Franciosa",
+  title =        "On the optimal binary plane partition for sets of
+                 isothetic rectangles",
+  booktitle =    "Proc. 4th Canad. Conf. Comput. Geom.",
+  year =         "1992",
+  pages =        "1--5",
+}
+
+@inproceedings{bgo-pbsp-93
+, author =      "M. de Berg and M. de Groot and M. Overmars"
+, title =       "Perfect binary space partitions"
+, booktitle =   "Proc. 5th Canad. Conf. Comput. Geom."
+, site =        "Waterloo, Canada"
+, year =        1993
+, pages =       "109--114"
+, precedes =    "bgo-pbsp-97"
+, update =      "97.03 devillers, 93.09 milone+mitchell"
+}
+
+@inproceedings{bgo-nrbsp-94
+, author =      "M. de Berg and M. de Groot and M. Overmars"
+, title =       "New results on binary space partitions in the plane"
+, booktitle =   "Proc. 4th Scand. Workshop Algorithm Theory"
+, series =      "Lecture Notes Comput. Sci."
+, volume =      824
+, publisher =   "Springer-Verlag"
+, year =        1994
+, pages =       "61--72"
+, update =      "95.01 schwarzkopf+smid, 94.05 schwarzkopf"
+}
+
+@article{bgo-pbsp-97
+, author =      "M. de Berg and M. de Groot and M. Overmars"
+, title =       "Perfect binary space partitions"
+, journal =     "Comput. Geom. Theory Appl."
+, volume =      7
+, year =        1997
+, pages =       "81--91"
+, succeeds =    "bgo-pbsp-93"
+, update =      "97.03 devillers"
+}
+
+@inproceedings{b-lsbsp-95
+, author =      "Mark de Berg"
+, title =       "Linear Size Binary Space Partitions for Fat Objects"
+, booktitle =   "Proc. 3rd Annu. European Sympos. Algorithms"
+, series =      "Lecture Notes Comput. Sci."
+, volume =      979
+, publisher =   "Springer-Verlag"
+, year =        1995
+, pages =       "252--263"
+, update =      "97.03 murali+schwarzkopf"
+}
+
+@article{ekltmmv-rcerr-91
+, author =	"J. L. Ellis and G. Kedem and T. C. Lyerly and D. G. Thielman and R. J. Marisa and J. P. Menon and H. B. Voelcker"
+, title =	"The ray casting engine and ray representations: a technical summary"
+, journal =	"Internat. J. Comput. Geom. Appl."
+, volume =	1
+, number =	4
+, year =	1991
+, pages =	"347--380"
+, keywords =	"mechanical CAD CAM, solid modeling, parallel computation, ray representation"
+}
+
+@article{py-ebsph-90
+, author =      "M. S. Paterson and F. F. Yao"
+, title =       "Efficient binary space partitions for hidden-surface removal and solid modeling"
+, journal =     "Discrete Comput. Geom."
+, volume =      5
+, year =        1990
+, pages =       "485--503"
+, succeeds =    "py-bpahs-89"
+}
+
+@inproceedings{py-obspo-90
+, author =      "M. S. Paterson and F. F. Yao"
+, title =       "Optimal binary space partitions for orthogonal objects"
+, booktitle =   "Proc. 1st ACM-SIAM Sympos. Discrete Algorithms"
+, year =        1990
+, pages =       "100--106"
+, precedes =    "py-obspo-92"
+}
+
+@article{py-obspo-92
+, author =      "M. S. Paterson and F. F. Yao"
+, title =       "Optimal binary space partitions for orthogonal objects"
+, journal =     "J. Algorithms"
+, volume =      13
+, year =        1992
+, pages =       "99--113"
+, succeeds =    "py-obspo-90"
+}
+
+@TechReport{Kreveld:1992:NRD,
+  author =       "M. J. van Kreveld",
+  title =        "New results on data structures in computational
+                 geometry",
+  type =         "Ph.{D}. {Dissertation}",
+  institution =  "Dept. Comput. Sci., Univ. Utrecht",
+  address =      "Utrecht, Netherlands",
+  year =         "1992",
+  keywords =     "doctoral thesis",
+}
+
+@Article{Vanecek:1991:BIM,
+  author =       "G. {Vanecek, Jr.}",
+  title =        "Brep-index: a multidimensional space partitioning
+		 tree",
+  journal =      "Internat. J. Comput. Geom. Appl.",
+  volume =       "1",
+  number =       "3",
+  year =         "1991",
+  pages =        "243--261",
+  keywords =     "classification, Brep, BSP tree, data structures",
+}
+
+@inproceedings{bg-bspsc-94
+, author =      "M. de Berg and M. de Groot"
+, title =       "Binary space partitions for sets of cubes"
+, booktitle =   "Abstracts 10th European Workshop Comput. Geom."
+, nickname =    "CG'94"
+, year =        1994
+, pages =       "84--88"
+, update =      "94.05 schwarzkopf"
+}
+
+
+@article{vko91,
+  author="M. van Kreveld and H. Overmars",
+  title="Divided k-d Trees",
+  journal="Algorithmica",
+  year="1991",
+  volume="6",
+  number="",
+  pages="840-858"
+}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/cgemame.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/cgemame.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/cgemame.bib	(revision 243)
@@ -0,0 +1,650 @@
+@InCollection{p-rsls-97,
+author =      "M. Pellegrini",
+title =       "Ray shooting and lines in space",
+chapter =     32  ,
+editor =      "Jacob E. Goodman and Joseph O'Rourke",
+booktitle =   "Handbook of Discrete and Computational Geometry",
+publisher =   "CRC Press LLC",
+address =     "Boca Raton, FL",
+year =        1997,
+pages =       "599--614",
+update =      "97.11 orourke",
+who = "Havran Vlastimil: CGE-0046",
+}
+
+@TechReport{Kahan94,
+  author =       "S. Kahan and P. Kelsen",
+  title =        "Constant Time Parallel Indexing of Points in a Triangle",
+  institution =  "Department of Computer Science, University of British
+                  Columbia",
+  number =       "UBC CS TR-94-06",
+  month =        feb,
+  year =         "1994",
+  url =          "http://www.cs.ubc.ca/cgi-bin/tr/1994/TR-94-06",
+  who = "Havran Vlastimil: CGE-0045",
+}
+
+@Booklet{matousek94,
+  author       =   "Matou\v{s}ek, J.",
+  title        =   "Topological Methods in Combinatorics and Geometry",
+  howpublished =   "Lecture Notes",
+  address      =   "Charles University--Praha",
+  year         =    1994,
+  who = "Havran Vlastimil: CGE-0044",
+}
+
+@Article{KalShe94,
+  author =       "L.J. Guibas and J-C. Latombe and S.M. Lavalle and D. Lin and R. Motwani",
+  title =        "Visibility-Based Pursuit-Evasion in a Polygonal Environment",
+  journal =      "Special issue on the CGC Workshop on Computational Geometry, 
+                 International Journal of Computational Geometry and Applications",
+  volume =       "??",
+  year =         "1997",
+  who = "Havran Vlastimil: CGE-0043",
+}
+
+@TechReport{Luebke96:TCHR,
+  author =       "D. Luebke",
+  title =        "Hierarchical Structures For Dynamic Polygonal Simplification",
+  institution =  "Department of Computer Science, University of North
+                 Carolina - Chapel Hill",
+  number =       "TR96-006",
+  month =        feb # " 16",
+  year =         "1996",
+  url =          "ftp://ftp.cs.unc.edu/pub/publications/techreports/96-006.ps.Z",
+  note =         "Wed, 26 Jun 1996 18:07:48 GMT",
+  who = "Havran Vlastimil: CGE-0042",
+}
+
+@TechReport{Erikson96,
+  author =       "Carl Erikson",
+  title =        "Polygonal Simplification: An Overview",
+  institution =  "Department of Computer Science, University of North
+                 Carolina - Chapel Hill",
+  number =       "TR96-016",
+  month =        feb # " 16",
+  year =         "1996",
+  url =          "ftp://ftp.cs.unc.edu/pub/publications/techreports/96-016.ps.Z",
+  note =         "Wed, 26 Jun 1996 18:07:48 GMT",
+  who = "Havran Vlastimil: CGE-0041",
+}
+
+@techreport{TH83
+, author =      "S. Teller and M. Hohmeyer"
+, title =       "Computing the Lines Piercing Four Lines"
+, type =        "Technical {Report}"
+, number =      "UCB/CSD 93/161"
+, institution = "UC Berkeley"
+, month =       apr
+, year =        1993
+, who = "Havran Vlastimil: CGE-0040"
+}
+
+@Article{KalShe94a,
+  author =       "Kalpakis and Sherman",
+  title =        "Probabilistic Analysis of an Enhanced Partitioning
+                 Algorithm for the Steiner Tree Problem",
+  journal =      "NETWORKS: Networks: An International Journal",
+  volume =       "24",
+  year =         "1994",
+  who = "Havran Vlastimil: CGE-0039",
+}
+
+@Article{Blinn:1992:JBCc,
+  author =       "James F. Blinn",
+  title =        "{Jim Blinn}'s Corner --- Uppers and downers: Part 2",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "12",
+  number =       "3",
+  pages =        "80--85",
+  month =        may,
+  year =         "1992",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "California Inst of Technol, CA, USA",
+  classification = "723; 921",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Applications; Computer Graphics; Feynman Diagrams;
+                 Mathematical Techniques --- Tensors",
+  who = "Havran Vlastimil: CGE-0038",
+}
+
+@Article{Blinn:1992:JBCb,
+  author =       "James F. Blinn",
+  title =        "{Jim Blinn}'s Corner --- Uppers and downers",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "12",
+  number =       "2",
+  pages =        "85--91",
+  month =        mar,
+  year =         "1992",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "California Inst of Technol, CA, USA",
+  classification = "723; 921",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Computational Geometry; Computer Graphics;
+                 Mathematical Techniques; Mathematical Techniques ---
+                 Tensors; Matrix Algebra",
+  who = "Havran Vlastimil: CGE-0037",
+}
+
+@Article{RavadaSherman,
+  author =       "S. Ravada and A. T. Sherman",
+  title =        "Experimental evaluation of a partitioning algorithm
+                 for the {Steiner} tree problem in {$R^2$} and {$R^3$}",
+  journal =      "Networks",
+  note =         "(to appear)",
+  year =         "1993",
+  url =          "http://www.cs.umbc.edu/\~{}sherman/Rtopics/Algs/steiner.html",
+  postscript =   "http://www.cs.umbc.edu/pub/REPORTS/cs-93-12.ps",
+  who = "Havran Vlastimil: CGE-0036",
+}
+
+@inproceedings{held:cgi:98,
+  author = "M. Held",
+  title = "Efficient and Reliable Triangulation of Polygons",
+  booktitle = "Proceedings of Computer Graphics International '98 (CGI'98)",
+  year = "1998",
+  month = jun,
+  pages = "633--643",
+  address = "Hannover, Germany",
+  publisher = "IEEE, NY",
+  who = "Havran Vlastimil: CGE-0035",
+}
+
+@Article{Kolingerov:1997:CPL,
+  author =       "Ivana Kolingerov",
+  title =        "Convex polyhedron-line intersection detection using
+                 dual representation",
+  journal =      "The Visual Computer",
+  year =         "1997",
+  volume =       "13",
+  number =       "1",
+  pages =        "42--49",
+  publisher =    "Springer-Verlag",
+  note =         "ISSN 0178-2789",
+  keywords =     "intersection detection, dual representation,
+                 line-polyhedron intersection, convex polyhedron,
+                 computer graphics",
+  annote =       "Duality is a well-known principle of computational
+                 geometry. It is often used for detecting the mutual
+                 position of convex geometrical objects, the dimensions
+                 of which do not differ more than by one; e.g., a convex
+                 polyhedron and a hyperplane or two convex polyhedra of
+                 the same dimensions. In this paper, a new possibility
+                 of usage is shown for objects with dimensions different
+                 by two. The mutual position of a convex polyhedron and
+                 a line is tested. The method works as follows. The line
+                 is described as an intersection of two planes. With a
+                 proper choice of these planes, the original problem of
+                 detecting a polyhedron-line intersection is reduced to
+                 a one-dimensional range search, which is much simpler
+                 to solve. The price to be paid for this reduction is
+                 computationally more demanding preprocessing.",
+  who = "Havran Vlastimil: CGE-0034",
+}
+
+@InCollection{Green95gems,
+  author =       "D. Green and D. Hatch",
+  editor =       "Alan W. Paeth",
+  title =        "Fast Polygon-Cube Intersection Testing",
+  booktitle =    "Graphics Gems V",
+  pages =        "375--379",
+  publisher =    "Academic Press",
+  address =      "Boston MA",
+  year =         "1995",
+  who = "Havran Vlastimil: CGE-0033",
+}
+
+@InProceedings{Barequet:1996:HCR,
+  title =        "History Consideration in Reconstructing Polyhedral
+                 Surfaces from Parallel Slices",
+  author =       "Gill Barequet and Daniel Shapiro and Ayellet Tal",
+  booktitle =    "IEEE Visualization '96",
+  organization = "IEEE",
+  year =         "1996",
+  month =        oct,
+  note =         "ISBN 0-89791-864-9",
+ who = "Havran Vlastimil: CGE-0032",
+}
+
+@InProceedings{SODA::AgarwalP1998,
+  title =        "Exact and Approximation Algorithms for Clustering
+                 (Extended Abstract)",
+  author =       "Pankaj K. Agarwal and Cecilia M. Procopiuc",
+  pages =        "658--667",
+  booktitle =    "Proceedings of the Ninth Annual {ACM}-{SIAM} Symposium
+                 on Discrete Algorithms",
+  month =        "25--27 " # jan,
+  year =         "1998",
+  address =      "San Francisco, California",
+  references =   "\cite{ACMCS::AgarwalS1998}
+                 \cite{ICVLDB::AgrawalGIIS1992}
+                 \cite{JALGO::Bar-IlanKP1993}
+                 \cite{STOC::charikarCFM1997}
+                 \cite{ICVLDB::DiwanRSS1996} \cite{STOC::FederG1988}
+                 \cite{IPL::FowlerPT1981} \cite{TCS::Gonzalez1985}
+                 \cite{IPL::Gonzalez1991} \cite{ALGOR::HwangCL1993}
+                 \cite{ALGOR::HwangLC1993} \cite{ESA::KhullerS1996}
+                 \cite{SODA::LuptonMY1996} \cite{SICOMP::MegiddoS1984}
+                 \cite{ICVLDB::NgH1994} \cite{SODA::Raghavan1997}
+                 \cite{ICVLDB::ShaverAM1997} \cite{STOC::ShmoysTA1997}",
+ who = "Havran Vlastimil: CGE-0031",
+}
+
+@techreport{c-accgc-96
+, author =      "Bernard Chazelle and others"
+, title =       "Application Challenges to Computational Geometry: {CG} Impact Task Force Report"
+, type =        "Technical {Report}"
+, number =      "TR-521-96"
+, institution = "Princeton Univ."
+, month =       apr
+, year =        1996
+, url = "http://www.cs.princeton.edu/~chazelle/taskforce/CGreport.ps"
+, comments =    "Also at \path|http://www.cs.duke.edu/~jeffe/compgeom/taskforce.html|"
+, update =      "98.03 mitchell, 97.03 pocchiola+tamassia, 96.09 orourke"
+, who = "Havran Vlastimil: CGE-0030"
+}
+
+
+@Booklet{matousek94:LN,
+  author       =   "Matou\v{s}ek, J.",
+  title        =   "Lecture notes on combinatorial and algorithmic geometry",
+  howpublished =   "Lecture Notes",
+  address      =   "Charles University--Praha",
+  year         =    1998,
+  who = "Havran Vlastimil: CGE-0029",
+}
+
+@techreport{ae-rsir-97
+, author =      "Pankaj K. Agarwal and Jeff Erickson"
+, title =       "Geometric range searching and its relatives"
+, type =        "Tech.\ Report"
+, number =      "CS-1997-11"
+, institution = "Department of Computer Science"
+, address =     "Duke University"
+, year =        1997
+, update =      "98.03 agarwal"
+, who = "Havran Vlastimil: CGE-0028"
+}
+
+techreport{a-rs-96
+, author =      "Pankaj K. Agarwal"
+, title =       "Range searching"
+, type =        "Report"
+, number =      "CS-1996-05"
+, institution = "Dept. Comput. Sci., Duke Univ."
+, address =     "Durham, NC"
+, year =        1996
+, update =      "96.09 agarwal"
+, who = "Havran Vlastimil: CGE-0027"
+}
+
+@inproceedings{aas-lalsp-97
+, author =      "B. Aronov and Pankaj Agarwal and Micha Sharir"
+, title =       "On Levels in Arrangements of Lines, Segments, Planes, and Triangles"
+, booktitle =   "Proc. 13th Annu. ACM Sympos. Comput. Geom."
+, year =        1997
+, pages =       "30--38"
+, update =      "98.03 mitchell, 97.07 efrat"
+, who = "Havran Vlastimil: CGE-0026"
+}
+
+@incollection{dt-cg-97
+, author =      "D. Dobkin and S. Teller"
+, title =       "Computer graphics"
+, chapter =     42
+, editor =      "Jacob E. Goodman and Joseph O'Rourke"
+, booktitle =   "Handbook of Discrete and Computational Geometry"
+, publisher =   "CRC Press LLC"
+, address =     "Boca Raton, FL"
+, year =        1997
+, pages =       "779--796"
+, update =      "97.11 orourke"
+, who = "Havran Vlastimil: CGE-0025"
+}
+
+@article{aaas-cvgbr-94
+, author =      "Pankaj K. Agarwal and N. Alon and B. Aronov and Subhash Suri"
+, title =       "Can visibility graphs be represented compactly?"
+, journal =     "Discrete Comput. Geom."
+, volume =      12
+, year =        1994
+, pages =       "347--365"
+, update =      "98.03 mitchell, 96.05 agarwal, 95.01 smid"
+, who = "Havran Vlastimil: CGE-0024"
+}
+
+@article{hs-parss-95
+, author =      "J. Hershberger and Subhash Suri"
+, title =       "A Pedestrian Approach to Ray Shooting: {Shoot} a Ray, Take a Walk"
+, journal =     "J. Algorithms"
+, volume =      18
+, year =        1995
+, pages =       "403--431"
+, keywords =    "mesh generation, triangulation, stabbing number"
+, succeeds =    "hs-parss-93"
+, update =      "98.03 mitchell, 96.05 mitchell+pocchiola"
+, annote =      "Special issue of selected papers from the
+4th Symposium on Discrete Algorithms."
+, who = "Havran Vlastimil: CGE-0023"
+}
+
+@article{k-3vrs2-97
+, author =      "M. J. Katz"
+, title =       "{3-D} vertical ray shooting and {2-D} point enclosure, range searching, and arc shooting amidst convex fat objects"
+, journal =     "Comput. Geom. Theory Appl."
+, volume =      8
+, year =        1997
+, pages =       "299--316"
+, update =      "97.11 katz"
+, who = "Havran Vlastimil: CGE-0022"
+}
+
+@article{bgo-nrbsp-97
+, author =      "M. de Berg and M. de Groot and M. Overmars"
+, title =       "New results on binary space partitions in the plane"
+, journal =     "Comput. Geom. Theory Appl."
+, volume =      8
+, year =        1997
+, pages =       "317--333"
+, update =      "97.11 oostrum"
+, who = "Havran Vlastimil: CGE-0021"
+}
+
+@inproceedings{aeg-kbspi-98
+, author =      "Pankaj K. Agarwal and Jeff Erickson and Leonidas J. Guibas"
+, title =       "Kinetic binary space partitions for intersecting segments and disjoint triangles"
+, booktitle =   "Proc. 9th ACM-SIAM Sympos. Discrete Algorithms"
+, journal =     "Proc. 1st Internat. IEE/IEEE Conf. on Genetic Algorithms in Engineering Systems: Innovations and Applications"
+, year =        1998
+, pages =       "107--116"
+, update =      "98.03 agarwal"
+, who = "Havran Vlastimil: CGE-0020"
+}
+
+@inproceedings{ab-hgach-95
+, author =      "David Avis and David Bremner"
+, title =       "How Good are Convex Hull Algorithms?"
+, booktitle =   "Proc. 11th Annu. ACM Sympos. Comput. Geom."
+, year =        1995
+, pages =       "20--28"
+, keywords =    "vertex enumeration, pivoting"
+, cites =       "af-pachv-92, bdh-qach-93, bl-cacp-93, b-icp-83, cgaf-gstlm-94, ck-acp-70, c-ochaa-93, c-lp-83, cs-adpch-88, d-cvem-83, f-crmv0-, gkz-drmd-94, h-sretn-91, k-pptrl-74, km-hgisa-72, l-epcrn-88, lt-sptcc-91, l-rtp-91, mrtt-ddm-53, s-chaop-81, s-chdch-86, y-stgd-90, ZZZ"
+, update =      "98.03 bibrelex, 95.09 mitchell"
+, who = "Havran Vlastimil: CGE-0019",
+}
+
+@techreport{pv-pc-96
+, author =      "M. Pocchiola and G. Vegter"
+, title =       "On polygonal covers"
+, number =      "96-16"
+, institution = "Labo. Inf. Ens"
+, address =     "45 rue d'Ulm 75230 Paris, France"
+, month =       jul
+, year =        1996
+, note =        ""
+, keywords =    "illumination, covering, separation"
+, comments =    ""
+, succeeds =    "pv-ptta-96"
+, update =      "97.03 pocchiola"
+, who = "Havran Vlastimil: CGE-0018",
+}
+
+@inproceedings{pv-ptta-96
+, author =      "Michel Pocchiola and Gert Vegter"
+, title =       "Pseudo-Triangulations: Theory and Applications"
+, booktitle =   "Proc. 12th Annu. ACM Sympos. Comput. Geom."
+, year =        1996
+, pages =       "291--300"
+, cites =       "pv-vc-96, pv-cvgpt-95, b-rsdoh-93, c-cgr-95, f-icd-77, ers-ccsno-90, blsz-om-93, rz-rspu-95, pa-cg-95, gp-ms-83, bcm-anlcg-90"
+, update =      "97.11 bibrelex, 96.05 efrat+pocchiola"
+, who = "Havran Vlastimil: CGE-0017",
+}
+
+@inproceedings{bp-sccpa-96
+, author =      "Chandrajit L. Bajaj and Valerio Pascucci"
+, title =       "Splitting a Complex of Convex Polytopes in any Dimension"
+, booktitle =   "Proc. 12th Annu. ACM Sympos. Comput. Geom."
+, year =        1996
+, pages =       "88--97"
+, cites =       "am-dhsrr-95, am-rsss-94, b-rgsdd-93, bd-cdpr-92, be-mgot-92i, c-oaitd-92, cd-icott-87, dk-fdpi-83, e-acg-87, em-sstcd-90, fm-nsala-91, g-cp-67, hk-prga-92, k-opcbf-95, l-ndgcm-94, lc-mchr3-87, lm-cschu-90, m-cgitr-93, m-rpm-93, m-rsehc-93, mhc-avcev-90, n-cgpt-93, nat-mbtyp-90, pbcf-dimsc-93, pfp-diccb-95, py-ebsph-90, s-lrapi-94, s-rcaic-94, t-cpos-92, tn-sopub-87, v-bimsp-91, ZZZ"
+, update =      "97.11 bibrelex, 96.05 efrat"
+, who = "Havran Vlastimil: CGE-0016",
+}
+
+@incollection{g-dirsc-94
+, author =      "Ned Greene"
+, title =       "Detecting Intersection of a Rectangular Solid and a Convex Polyhedron"
+, editor =      "Paul Heckbert"
+, booktitle =   "Graphics Gems IV"
+, publisher =   "Academic Press"
+, address =     "Boston, MA"
+, year =        1994
+, pages =       "74--82"
+, keywords =    "collision detection, octree, computational geometry"
+, update =      "94.09 heckbert"
+, annote =      "Presents an optimized technique to test for intersection
+between a convex polyhedron and a box. This is useful when comparing
+bounding boxes against a viewing frustum in a rendering program, for
+instance. Contains pseudocode."
+, who = "Havran Vlastimil: CGE-0015",
+}
+
+@techreport{as-eago-96
+, author =      "Pankaj K. Agarwal and Micha Sharir"
+, title =       "Efficient algorithms for geometric optimization"
+, type =        "Tech.\ Report"
+, number =      "CS-1996-19"
+, institution = "Dept. Computer Science, Duke University"
+, year =        1996
+, update =      "97.07 agarwal"
+, who = "Havran Vlastimil: CGE-0014",
+}
+
+@inproceedings{as-rsacp-93
+, author =      "Pankaj K. Agarwal and M. Sharir"
+, title =       "Ray Shooting Amidst Convex Polytopes in Three Dimensions"
+, booktitle =   "Proc. 4th ACM-SIAM Sympos. Discrete Algorithms"
+, year =        1993
+, pages =       "260--270"
+, precedes =    "as-rsacp-96ii"
+, update =      "96.05 smid, 93.05 smid"
+, who = "Havran Vlastimil: CGE-0013",
+}
+
+@article{as-rsacp-96i
+, author =      "P. K. Agarwal and M. Sharir"
+, title =       "Ray shooting amidst convex polygons in {2D}"
+, journal =     "J. Algorithms"
+, volume =      21
+, year =        1996
+, pages =       "508--519"
+, update =      "97.03 agarwal+pocchiola+smid, 96.09 agarwal, 96.05 agarwal"
+, who = "Havran Vlastimil: CGE-0012",
+}
+
+@TechReport{EVL-1996-11,
+  author =       "Andr{\'e} Hinkenjann and Markus Kubuk and Heinrich
+                 M{\"u}ller",
+  title =        "Answering Line Segment Intersection Queries Based On
+                 Sample Answers",
+  number =       "620/1996",
+  type =         "Research Report",
+  institution =  "University of Dortmund",
+  address =      "Universit{\"a}t Dortmund, 44221 Dortmund, Germany",
+  month =        aug,
+  year =         "1996",
+  abstract =     "Geometric query problems can be solved by
+                 preprocessing the answers for a representative set of
+                 sample queries. An arbitrary query is answered by the
+                 response of a closest sample query. In general, this
+                 answer will not be correct. A framework is presented in
+                 which the quality of approximation of this approach can
+                 be characterized. Futher, efficiency considerations are
+                 performed. They consist in empirical experiments for
+                 the classical line segment intersection query problem,
+                but also in giving theoretical time and space bounds
+                 describing the trade-off between quality of
+                 approximation and computational complexity. Finally,
+                 approaches to the choice of favorable sample queries
+                 are discussed.",
+  postscript-url = "ftp://euklid.informatik.uni-dortmund.de/pub/reports/ls7/rr-6
+20.ps.gz",
+  evlib-url =    "http://infovis.zib.de:8000/Dienst/UI/2.0/Describe/evl.computat
+ionalgeometry%2FEVL-1996-11",
+  evlib-revision = "1st",
+  evlib-postscript-md5 = "14a18f6a52af153a3c3eb1c7037c344c",
+  who = "Havran Vlastimil: CGE-0011",
+}
+
+@article{m-vrsa-93
+, author =      "J. Matou{\v s}ek"
+, title =       "On Vertical Ray Shooting in Arrangements"
+, journal =     "Comput. Geom. Theory Appl."
+, volume =      2
+, number =      5
+, month =       mar
+, year =        1993
+, pages =       "279--285"
+, keywords =    "ray shooting, zone theorem, cutting, hyperplane arrangement"
+, update =      "93.09 held+matousek+milone+mitchell"
+,  who = "Havran Vlastimil: CGE-0010",
+}
+
+@incollection{as-atgo-95
+, author =      "P. K. Agarwal and Micha Sharir"
+, title =       "Algorithmic techniques for geometric optimization"
+, booktitle =   "??"
+, series =      "Lecture Notes Comput. Sci."
+, volume =      1000
+, publisher =   "Springer-Verlag"
+, year =        1995
+, pages =       "234--253"
+, update =      "98.03 mitchell, 97.11 bibrelex"
+,  who = "Havran Vlastimil: CGE-0009",
+}
+
+article{h-iarat-96
+, author =      "Philip M. Hubbard"
+, title =       "Improving Accuracy in a Robust Algorithm for Three-Dimensional {Voronoi} Diagrams"
+, journal =     "Journal of Graphics Tools"
+, volume =      1
+, number =      1
+, year =        1996
+, pages =       "33--47"
+, update =      "96.09 held+hubbard"
+, annote =      "Extends \cite{iss-nriac-92}"
+, abstract =    "This paper describes extensions to a previous algorithm that
+                 robustly builds three-dimensional Voronoi diagrams in the
+                 presence of inexact numerical computations.  The extensions
+                 improve the algorithm's accuracy, making its results more
+                 nearly represent the proximity properties of an ideal
+                 Voronoi diagram.  In empirical tests, these extensions have
+                 improved accuracy by more than eight orders of magnitude.
+                 Complete pseudocode for the algorithm appears in an appendix
+                 of this paper."
+,  who = "Havran Vlastimil: CGE-0008",
+}
+
+@article{yn-sbgtc-97
+, author =      "F. Yamaguchi and M. Niizeki"
+, title =       "Some Basic Geometric Test Conditions in Terms of Pluecker Coordinates and Pluecker Coefficients"
+, journal =     "Visual Comput."
+, volume =      13
+, number =      1
+, year =        1997
+, pages =       "29--41"
+, update =      "97.03 held"
+,  who = "Havran Vlastimil: CGE-0007",
+}
+
+@incollection{m-ccpps-91
+, author =      "J. Matou{\v s}ek"
+, title =       "Computing the center of planar point sets"
+, editor =      "J. E. Goodman and R. Pollack and W. Steiger"
+, booktitle =   "Computational Geometry: papers from the DIMACS special year"
+, publisher =   "American Mathematical Society"
+, address =     "Providence"
+, year =        1991
+, pages =       "221--230"
+, keywords =    "centerpoint, parametric search, cutting, k-level"
+, update =      "96.05 agarwal, 93.09 matousek"
+,  who = "Havran Vlastimil: CGE-0006",
+}
+
+@article{m-dcg-96
+, author =      "J. Matou{\v s}ek"
+, title =       "Derandomization in computational geometry"
+, journal =     "J. Algorithms"
+, volume =      20
+, year =        1996
+, pages =       "545--580"
+, update =      "97.03 smid"
+,  who = "Havran Vlastimil: CGE-0005",
+}
+
+@inproceedings{amv-ptcbs-97
+, author =      "P. Agarwal and T. Murali and J. Vitter"
+, title =       "Practical techniques for constructing binary space partitions for orthogonal rectangles"
+, booktitle =   "Proc. 13th Annu. ACM Sympos. Comput. Geom."
+, year =        1997
+, pages =       "382--384"
+, update =      "97.07 efrat"
+, who = "Havran Vlastimil: CGE-0004",
+}
+
+@inproceedings{agm-bspfr-96
+, author =      "P. K. Agarwal and E. F. Grove and T. M. Murali and J. S. Vitter"
+, title =       "Binary Space Partitions for Fat Rectangles"
+, booktitle =   "Proc. 37th Annu. IEEE Sympos. Found. Comput. Sci."
+, site =        "Burlington, VT"
+, month =       oct
+, year =        1996
+, pages =       "482--491"
+, update =      "97.07 smid, 97.03 murali"
+, who = "Havran Vlastimil: CGE-0003",
+}
+
+@inproceedings{agmv-cskbs-97
+, author =      "Pankaj K. Agarwal and Leonidas J. Guibas and T. M. Murali and Jeffrey Scott Vitter"
+, title =       "Cylindrical Static and Kinetic Binary Space Partitions"
+, booktitle =   "Proc. 13th Annu. ACM Sympos. Comput. Geom."
+, year =        1997
+, pages =       "39--48"
+, update =      "97.07 agarwal+efrat"
+, who = "Havran Vlastimil: CGE-0002",
+}
+
+@InProceedings{Agarwal94soda,
+  author =       "Pankaj K. Agarwal and Subhash Suri",
+  title =        "Surface Approximation and Geometric Partitions",
+  booktitle =    "Proc. 5th ACM-SIAM Sympos. Discrete Algorithms",
+  year =         "1994",
+  pages =        "24--33",
+  keywords =     "triangulation, ray shooting",
+  update =       "95.01 mitchell",
+  annote =       "polygonal approximation of terrains within log factor
+                 of optimal",
+  note =         "(Also available as Duke U. CS tech report, URL {ftp://ftp.cs.duke.edu/dist/techreport/1994/1994-21.ps.Z})",
+  who = "Havran Vlastimil: CGE-0001",
+}
+
+@book{bkos-cgaa-97
+, author =      "Mark de Berg and Marc van Kreveld and Mark Overmars and Otfried Schwarzkopf"
+, title =       "Computational Geometry: Algorithms and Applications"
+, publisher =   "Springer-Verlag"
+, address =     "Berlin"
+, year =        1997
+, isbn =        "3-540-61270-X"
+, url = "http://www.cs.ruu.nl/geobook/"
+, keywords =    "textbook"
+, update =      "98.03 agarwal+mitchell, 97.11 oostrum+orourke"
+, who = "Havran Vlastimil: CGE-0087"
+}
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/vismame.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/vismame.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/vismame.bib	(revision 243)
@@ -0,0 +1,1665 @@
+
+@TechReport{EVL-1998-675,
+  author =       "Andr{\'e} Hinkenjann and Heinrich M{\"u}ller",
+  title =        "Determining Visibility between Extended Objects",
+  number =       "675/1998",
+  type =         "Research Report",
+  institution =  "University of Dortmund",
+  address =      "Universit{\"a}t Dortmund, 44221 Dortmund, Germany",
+  month =        aug,
+  year =         "1998",
+  who  = "Havran Vlastimil: VIS-0090",
+}
+
+@TechReport{EVL-1996-10,
+  author =       "Andr{\'e} Hinkenjann and Heinrich M{\"u}ller",
+  title =        "Hierarchical Blocker Trees for Global Visibility
+                 Calculation",
+  number =       "621/1996",
+  type =         "Research Report",
+  institution =  "University of Dortmund",
+  month =        aug,
+  year =         "1996",
+  abstract =     "We present a technique to determine visibility within
+                 geometric scenes, as required for more advanced
+                 rendering approaches in computer graphics. Visibility
+                 types considered are completely visible, completely
+                 blocked and partially blocked. In a preprocessing step,
+                 the given scene is recursively subdivided into a
+                 hierarchy of subscenes. For each resulting subscene, a
+                 so called blocker tree is calculated which holds
+                 information about the visibility type of viewing lines
+                 passing through a bounding box enclosing the scene. The
+                 resulting hierarchical blocker tree is used to answer
+                 queries for the visibility between two subscenes. This
+                 approach is implemented in flatland based on quadtrees,
+                 and analyzed experimentally.",
+  postscript-url = "ftp://euklid.informatik.uni-dortmund.de/pub/reports/ls7/rr-6
+21.ps.gz",
+  evlib-url =    "http://infovis.zib.de:8000/Dienst/UI/2.0/Describe/evl.computat
+ionalgeometry%2FEVL-1996-10",
+  evlib-revision = "1st",
+  evlib-postscript-md5 = "2abfecb868f469b0af855c1167f7dd14",
+  who  = "Havran Vlastimil: VIS-0089",
+}
+
+@inproceedings{addpp-vr-95,
+ author =      "Boris Aronov and Alan R. Davis and Tamal K. Dey and
+                Sudebkumar P. Pal and D. Chithra Prasad",
+ title =       "Visibility with Reflection",
+ booktitle =   "Proc. 11th Annu. ACM Sympos. Comput. Geom.",
+ year =        1995,
+ pages =       "316--325",
+ keywords =    "mirrors",
+ cites =       "addpp-vmr-95, ak-frtrc-87, bo-arcgi-79, dpp-agpvr-95,
+                ea-lacvp-81, fkn-vsgpt-80, ghlst-ltavs-87, g-bp-86,
+                hv-splsp-49,  k-ealdp-89, kw-onupp-91, l-vsp-83, ll-ccagp-86,
+                lpsssstwy-clcsp-88, o-agta-87, rty-ccrt-94, s-rrag-92,
+                s-mlppr-87, s-sldps-90, ZZZ",
+ update =      "98.03 bibrelex, 95.09 mitchell",
+ who  = "Havran Vlastimil: VIS-0088",
+}
+
+@Article{Sharir:1992:SOS,
+  author =       "Micha Sharir and Mark H. Overmars",
+  title =        "A Simple Output-Sensitive Algorithm for Hidden Surface
+                 Removal",
+  journal =      "ACM Transactions on Graphics",
+  volume =       "11",
+  number =       "1",
+  pages =        "1--11",
+  month =        jan,
+  year =         "1992",
+  coden =        "ATGRDF",
+  ISSN =         "0730-0301",
+  bibdate =      "Fri Jan 5 07:58:42 MST 1996",
+  url =          "http://www.acm.org/pubs/toc/Abstracts/0730-0301/112141.html",
+  abstract =     "We derive a simple output-sensitive algorithm for
+                 hidden surface removal in a collection of n triangles
+                 in space for which a (partial) depth order is known. If
+                 $k$ is the combinatorial complexity of the output
+                 visibility map, the method runs in time $O(n\sqrt{k}
+                 \log n)$. The method is extended to work for other
+                 classes of objects as well, sometimes with even
+                 improved time bounds. For example, we obtain an
+                 algorithm that performs hidden surface removal for n
+                 (nonintersecting) balls in time $O(n^{3/2}\log n+k)$",
+  acknowledgement = ack-nhfb,
+  keywords =     "algorithms; hidden surface removal; theory",
+  subject =      "{\bf I.3.7}: Computing Methodologies, COMPUTER
+                 GRAPHICS, Three-Dimensional Graphics and Realism,
+                 Hidden line/surface removal. {\bf F.2.2}: Theory of
+                 Computation, ANALYSIS OF ALGORITHMS AND PROBLEM
+                 COMPLEXITY, Nonnumerical Algorithms and Problems,
+                 Geometrical problems and computations. {\bf I.3.5}:
+                 Computing Methodologies, COMPUTER GRAPHICS,
+                 Computational Geometry and Object Modeling, Geometric
+                 algorithms, languages, and systems.",
+  who  = "Havran Vlastimil: VIS-0087",
+}
+
+@InProceedings{Westermann:1997:VVO,
+  author =       "R{\"{u}}diger Westermann and Thomas Ertl",
+  title =        "The {VSBUFFER}: Visibility Ordering of Unstructured
+                 Volume Primitives by Polygon Drawing",
+  booktitle =    "IEEE Visualization \'97",
+  editor =       "Roni Yagel and Hans Hagen",
+  year =         "1997",
+  organization = "IEEE",
+  month =        nov,
+  pages =        "35--42",
+  who  = "Havran Vlastimil: VIS-0086",
+}
+
+@InProceedings{COZ-gi98,
+  title =        "Visibility Streaming for Network-based Walkthroughs",
+  author =       "Daniel Cohen-Or and Eyal Zadicario",
+  booktitle =    "Graphics Interface",
+  year =         "1998",
+  month =        jun,
+  pages =        "1--7",
+  who  = "Havran Vlastimil: VIS-0085",
+}
+
+@InProceedings{Soler:1996:AEB,
+  author =       "Cyril Soler and Fran{\c{c}}ois Sillion",
+  title =        "Accurate Error Bounds for Multi-Resolution
+                 Visibility",
+  booktitle =    "Eurographics Rendering Workshop 1996",
+  editor =       "Xavier Pueyo and Peter Schr{\"{o}}der",
+  year =         "1996",
+  organization = "Eurographics",
+  publisher =    "Springer Wein",
+  address =      "New York City, NY",
+  month =        jun,
+  pages =        "133--142",
+  note =         "ISBN 3-211-82883-4",
+  keywords =     "error bounds, hierarchical radiosity, multi-resolution
+                 visibility, error-driven refinement, visibility
+                 correlation",
+  annote =       "We propose a general error-driven algorithm to compute
+                 form factors in complex scenes equipped with a suitable
+                 cluster hierarchy. This opens the way for the efficient
+                 approximation of form factors in a controlled manner,
+                 with guaranteed error bounds at every stage of the
+                 calculation. In particular we discuss the issues of
+                 bounding the error in the form factor approximation
+                 using average cluster transmittance, combining
+                 subcluster calculations with proper treatment of
+                 visibility correlation, and the calculation and storage
+                 of the necessary information in the hierarchy. We
+                 present results from a 2D implementation, that
+                 demonstrate the validity of the approach; the form
+                 factor approximations are efficiently bounded by the
+                 user-supplied threshold.",
+  who  = "Havran Vlastimil: VIS-0084",
+}
+
+@Article{Pueyo:1996:OAT,
+  author =       "Xavier Pueyo and Frederic P{\'e}rez and Toni
+                 Sellar{\`e}s and Josep Suy",
+  title =        "An object-oriented approach for teaching visibility
+                 computation algorithms",
+  journal =      "Computers and Graphics",
+  volume =       "20",
+  number =       "4",
+  pages =        "605--610",
+  month =        jul # "--" # aug,
+  year =         "1996",
+  coden =        "COGRD2",
+  ISSN =         "0097-8493",
+  bibdate =      "Wed Feb 5 07:22:58 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Universitat de Girona",
+  affiliationaddress = "Spain",
+  classification = "721.1; 723; 723.5; 921.4",
+  journalabr =   "Comput Graphics (Pergamon)",
+  keywords =     "Abstraction; Algorithms; Computational complexity;
+                 Computational geometry; Computer graphics; Object
+                 recognition; Ray casting; Scan line; Visibility
+                 computation algorithms; Visualization",
+  who  = "Havran Vlastimil: VIS-0083",
+}
+
+@InProceedings{james-cgf-98,
+   author =       "A. James and A.M. Day",
+   title =        "The Priority Face Determination Tree for Hidden Surface
+                  Removal",
+   pages =        "55-71",
+   booktitle =      "Computer Graphics Forum",
+   volume =       "17",
+   number =       "1",
+   year =         "1998",
+   month =        "march",
+   who  = "Havran Vlastimil: VIS-0082",
+}
+
+@inproceedings{james-eguk-98,
+  author = "A. James and A.M. Day",
+  title = "Conflict Neutralization on Binary Space Partitioning
+           (extended abstract)",
+  booktitle = "Eurographics UK Proceedings",
+  year = 1998,
+  month = "march",
+  volume = 16,
+  pages = "225 - 229",
+  who = "Havran Vlastimil: VIS-0081",
+}
+
+@inproceedings{james-eguk-97,
+  author = "A. James and A.M. Day",
+  title = "The Priority Face Determination Tree",
+  booktitle = "Eurographics UK Proceedings",
+  year = 1997,
+  month = "march",
+  volume = 15,
+  pages = "21 - 46",
+  who = "Havran Vlastimil: VIS-0080",
+}
+
+@inproceedings{cohen-egc-98,
+  author = "D. Cohen-Or and G. Fibich and D. Halperin and E. Zadicario",
+  title = "Conservative Visibility and Strong Occlusion for Viewspace
+           Partitioning of Densely Occluded Scenes",
+  booktitle = "EUROGRAPHICS'98",
+  year = "1998",
+  who = "Havran Vlastimil: VIS-0079",
+}
+
+@InCollection{deb93,
+  author =       "M. De Berg",
+  title =        "Ray shooting, Depth Orders and Hidden Surface
+                 Removal",
+  year =         "1993",
+  booktitle =    "Lecture Notes in Computer Science",
+  volume =       "703",
+  publisher =    "Springer Verlag, New York",
+  topic =        "visibility",
+  who = "Havran Vlastimil: VIS-0078",
+}
+
+@InProceedings{Funkhouser98,
+  author =       "Thomas Funkhouser and Ingrid Carlbom and Gary Elko and
+                 Gopal Pingali and Mohan Sondhi and Jim West",
+  title =        "A Beam Tracing Approach to Acoustic Modeling for
+                 Interactive Virtual Environments",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH '98)",
+  pages =        "21--32",
+  month =        jul,
+  year =         "1998",
+  who = "Havran Vlastimil: VIS-0077",
+}
+
+@PhdThesis{Teller92phd,
+  author =       "Seth J. Teller",
+  title =        "Visibility Computations in Densely Occluded Polyhedral
+                 Environments",
+  school =       "CS Division, UC Berkeley",
+  month =        oct,
+  year =         "1992",
+  note =         "Tech. Report UCB/CSD-92-708",
+  keywords =     "computational geometry, architectural walkthrough",
+  who = "Havran Vlastimil: VIS-0076",
+}
+
+@InProceedings{Aliaga:1997:AWU,
+  author =       "Daniel G. Aliaga and Anselmo A. Lastra",
+  title =        "Architectural Walkthroughs Using Portal Textures",
+  booktitle =    "IEEE Visualization \'97",
+  editor =       "Roni Yagel and Hans Hagen",
+  year =         "1997",
+  organization = "IEEE",
+  month =        nov,
+  pages =        "355--362",
+  who = "Havran Vlastimil: VIS-0075",
+}
+
+@InProceedings{Stewart93-OSACS,
+  author =       "A. James Stewart and Sherif Ghali",
+  month =        aug,
+  year =         "1993",
+  title =        "An {Output} {Sensitive} {Algorithm} for the
+                 {Computation} of {Shadow} {Boundaries}",
+  booktitle =    "Canadian Conference on Computational Geometry",
+  pages =        "291--296",
+  who = "Havran Vlastimil: VIS-0074", 
+}
+
+@InProceedings{Kumar:1996:HBF,
+  author =       "Subodh Kumar and Dinesh Manocha and William Garrett
+                 and Ming Lin",
+  title =        "Hierarchical Back-Face Computation",
+  booktitle =    "Eurographics Rendering Workshop 1996",
+  editor =       "Xavier Pueyo and Peter Schr{\"{o}}der",
+  year =         "1996",
+  organization = "Eurographics",
+  publisher =    "Springer Wein",
+  address =      "New York City, NY",
+  month =        jun,
+  pages =        "235--244",
+  note =         "ISBN 3-211-82883-4",
+  annote =       "We present a sub-linear algorithm to compute the set
+                 of back-facing polygons in a polyhedral model. The
+                 algorithm partitions the model into hierarchical
+                 clusters based on the orientations and positions of the
+                 polygons. As a pre-processing step, the algorithm
+                 constructs spatial decompositions with respect to each
+                 cluster. For a sequence of back-face computations, the
+                 algorithm exploits the coherence in view-point movement
+                 to efficiently determine if it is in front of or behind
+                 a cluster. Due to coherence, the algorithm's
+                 performance is linear in the number of clusters on
+                 average. We have applied this algorithm to speed up the
+                 rendering of polyhedral models. On average, we are able
+                 to cull almost half the polygons. The algorithm
+                 accounts for 5 - 10% of the total CPU time per frame on
+                 an SGI Indigo2 Extreme. The overall frame rate is
+                 improved by 40 - 75% as compared to the standard
+                 back-face culilng implemented in hardware.",
+    who = "Havran Vlastimil: VIS-0073",
+}
+
+@InProceedings{Zhang97a,
+  author =       "Hansong Zhang and Kenneth E. Hoff III",
+  month =        "???",
+  year =         "1997",
+  title =        "Accelerated Walkthrough of Large Spline Models",
+  booktitle =    "Symposium on Interactive 3D Graphics, 1997",
+  who  = "Havran Vlastimil: VIS-0072",
+}
+
+@Article{Orti:1996:RDS,
+  author =       "Rachel Orti and Stephane Riviere and Fredo Durand and
+                 Claude Puech",
+  title =        "Radiosity for Dynamic Scenes in Flatland with the
+                 Visibility Complex",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "15",
+  number =       "3",
+  pages =        "C237--C248",
+  month =        sep,
+  year =         "1996",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Tue Mar 17 15:44:38 MST 1998",
+  acknowledgement = ack-nhfb,
+  affiliation =  "iMAGIS\slash GRAVIR - IMAG",
+  affiliationaddress = "Grenoble, Fr",
+  affiliationaddress = "Fr",
+  classification = "723.2; 723.5; 741.1; 741.2; 921.4; C4260
+                 (Computational geometry); C6130B (Graphics
+                 techniques)",
+  conference =   "Proceedings of the 1996 17th Annual Conference and
+                 Exhibition of the European Association for Computer
+                 Graphics, EUROGRAPHICS'96",
+  conflocation = "Poitiers, France; 26-30 Aug. 1996",
+  conftitle =    "European Association for Computer Graphics 17th Annual
+                 Conference and Exhibition. EUROGRAPHICS '96",
+  corpsource =   "IMAG, Grenoble, France",
+  journalabr =   "Comput Graphics Forum",
+  keywords =     "Algorithms; Architectural simulation; Calculations;
+                 Computational geometry; Computer graphics; Computer
+                 simulation; Data structures; Discontinuity mesh; Form
+                 factor; Global illumination; Image synthesis; Lighting;
+                 Lighting design; Radiosity; Static environment; Three
+                 dimensional; Two dimensional; Visibility; Visibility
+                 complex; Visualization",
+  keywords =     "2D method; algorithm; Algorithms; Architectural
+                 simulation; brightness; Calculations; computational
+                 geometry; Computational geometry; computational
+                 geometry; computer graphics; Computer graphics;
+                 Computer simulation; data structure; Data structures;
+                 discontinuity mesh; Discontinuity mesh; discontinuity
+                 mesh; dynamic environments; dynamic scenes; factors;
+                 flatland; form; Form factor; global; Global
+                 illumination; illumination; Image synthesis; image
+                 synthesis; Lighting; lighting; Lighting design;
+                 polygonal scenes; Radiosity; radiosity method; Static
+                 environment; static scenes; Three dimensional; Two
+                 dimensional; visibility; Visibility; visibility;
+                 Visibility complex; visibility complex; Visualization",
+  meetingaddress = "Poitiers, Fr",
+  meetingdate =  "Aug 26--30 1996",
+  meetingdate2 = "08/26--30/96",
+  sponsor =      "CNRS; ERCIM; BARCO; EDF; SUN; et al",
+  sponsororg =   "CNRS; BARCO; Electr. France; et al",
+  treatment =    "T Theoretical or Mathematical",
+  who = "Havran Vlastimil: VIS-0071",
+}
+
+@InProceedings{Kumar97,
+  author =       "Subodh Kumar and  Dinesh Manocha and  Kenneth E. Hoff III and                  Hansong Zhang",
+  month =        "???",
+  year =         "1997",
+  title =        "Accelerated Walkthrough of Large Spline Models",
+  booktitle =    "Symposium on Interactive 3D Graphics, 1997",
+  who  = "Havran Vlastimil: VIS-0070",
+}
+
+@InProceedings{Orti96-UVCRC,
+  author =       "Rachel Orti and Stephane Riviere and Fredo Durand and
+                 Claude Puech",
+  month =        may,
+  year =         "1996",
+  title =        "Using the {Visibility} {Complex} for {Radiosity}
+                 {Computation}",
+  booktitle =    "Lecture Notes in Computer Science (Applied
+                 Computational Geometry: Towards Geometric
+                 Engineering)",
+  volume =       "1148",
+  pages =        "177--190",
+  publisher =    "Springer-Verlag",
+  address =      "Berlin, Germany",
+  who  = "Havran Vlastimil: VIS-0069",
+}
+
+@Article{EVL-1996-194,
+  author =       "R. Yagel and W. Ray",
+  title =        "Visibility Computation for Efficient Walkthrough
+                 Complex Environments",
+  journal =      "PRESENCE",
+  volume =       "5",
+  number =       "1",
+  pages =        "1--16",
+  year =         "1996",
+  language =     "en",
+  abstract =     "In many virtual reality applications as well as
+                 general computer graphics we need to consider large
+                 numbers of objects in order to render one image. In
+                 many cases rendering can be preceded by a culling phase
+                 which employs simple mechanisms to reject most of the
+                 objects. As a result, only a very small portion of the
+                 model has to go through the time consuming process of
+                 hidden object removal. We report on such a culling
+                 mechanism that is based on regular space subdivision
+                 into cells followed by cell classification into
+                 interior, exterior, and wall cells. A special
+                 cell-to-cell visibility algorithm is then activated
+                 between every two non-exterior cells. Only the objects
+                 in the potentially visible set of cells are actually
+                 submitted to the hidden object removal algorithm. We
+                 report on the implementation of the algorithm and its
+                 performance for walkthrough of various environments.",
+  postscript-url = "http://www.cis.ohio-state.edu/volviz/Papers/1995/presence.ps.gz",
+  evlib-url =    "http://visinfo.zib.de:80/Dienst/UI/2.0/Describe/evl.volumerendering%2FEVL-1996-194",
+  postscript-url-md5 = "614ddffe140b1fb6e4b238c7923097aa",
+  evlib-revision = "1st",
+  who = "Havran Vlastimil: VIS-0068",
+}
+
+@TechReport{Krishnan:TR94063:1994,
+  author = "S. Krishnan and D. Manocha",
+  number = "TR94-063",
+  title = "Global Visibility and Hidden Surface Algorithms for Free Form Surfaces",
+  institution = "University of North Carolina, Chapel Hill, NC 27599-3175",
+  year = 1994,
+  month = nov,
+  documentURL = "ftp://ftp.cs.unc.edu/pub/users/manocha/papers/visibility/visib.ps.Z",
+  who = "Havran Vlastimil: VIS-0067",
+}
+
+@Misc{Hoff98,
+  author = "Kenneth E. Hoff III",
+  title = "Faster 3D Game Graphics by Not Drawing What Is Not Seen",
+  documentURL = "http://www.acm.org/crossroads/xrds3-4/faster3d.html",
+  who  = "Havran Vlastimil: VIS-0066",
+}
+
+@InProceedings{Luebke:1995:PMS,
+  author =       "David Luebke and Chris Georges",
+  title =        "Portals and Mirrors: Simple, Fast Evaluation of
+                 Potentially Visible Sets",
+  editor =       "Pat Hanrahan and Jim Winget",
+  pages =        "105--106",
+  booktitle =    "1995 Symposium on Interactive {3D} Graphics",
+  year =         "1995",
+  organization = "ACM SIGGRAPH",
+  month =        apr,
+  who  = "Havran Vlastimil: VIS-0065",
+}
+
+@Misc{Holmes96,
+  author = "John Holmes",
+  title = "Binary Space Partitioning (BSP) Trees",
+  documentURL = "http://www.cis.ufl.edu/~jch/is-final.ps",
+  who  = "Havran Vlastimil: VIS-0064",
+}
+
+@Misc{BSPFAQ,
+  author = "et al",
+  title = "BSP Tree Frequently Asked Questions (FAQ)",
+  documentURL = "http://reality.sgi.com/bspfaq/",
+  who  = "Havran Vlastimil: VIS-0063",
+}
+
+@Misc{Campbel96,
+  author = "A.T. Campbell, III",
+  title = "BSP Trees: An Introduction and an Implementation",
+  year = 1996,
+  month = mar,
+  pages = "8",
+  who  = "Havran Vlastimil: VIS-0062",
+}
+
+@InProceedings{Martinka95a,
+  author =       "Josef Martinka and Ludovit Niepel and Andrej Ferko",
+  title =        "Sweeping Algorithm for Scene Visibility Graph",
+  pages =        "11--16",
+  booktitle =    "Summer school in computer graphics in Bratislava (SCCG95)",
+  year =         "1995",
+  month =        jun,
+  keywords =     "ray tracing",
+  who  = "Havran Vlastimil: VIS-0061",
+}
+
+@InProceedings{Sojka92,
+  author =       "E. Sojka",
+  title =        "Potencial viditelnosti a jeho vypocet",
+  booktitle =    "Winter School of Computer Graphics 1992",
+  year =         "1992",
+  month =        "feb",
+  pages =        "36--46",
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, February 1992",
+  who = "Havran Vlastimil: VIS-0060",
+}
+
+@InProceedings{Fuchs80a,
+  author =       "Fuchs, H. and Kedem, Z. M. and Naylor, B. F.",
+  title =        "On Visible Surface Generation by a Priori Tree Structures",
+  pages =        "124--133",
+  booktitle =      "Computer Graphics (SIGGRAPH '80 Proceedings)",
+  volume =       "14",
+  number =       "3",
+  year =         "1980",
+  month =        jul,
+  keywords =     "graphical data/base/structures, Algorithmic Aspects hidden line/surface removal, surface generation, Three-Dimensional Graphics realism, Applications of Computer Graphics electrical engineering power engineering, Painter's Algorithm",
+  who = "Havran Vlastimil: VIS-0059",
+}
+
+@TechReport{Cazals:3204:1997,
+  author = "F. Cazals and M. Sbert",
+  number = "RR-3204",
+  title = "Some integral geometry tools to estimate the complexity of
+           3D scenes",
+  institution = "The French National Institue for Research in
+                 Computer Science and Control (INRIA)",
+  year = 1997,
+  month = jul,
+  documentURL = "ftp://ftp.inria.fr/INRIA/publication/RR/RR-3204.ps.gz",
+  keywords = "Average case analysis, Stochastic geometry, Computer Graphics",
+  who = "Havran Vlastimil: VIS-0058",
+}
+
+@inproceedings{pv-cvgpt-95,
+  author =      "M. Pocchiola and G. Vegter",
+  title =       "Computing the Visibility Graph via Pseudo-Triangulations",
+  booktitle =   "Proc. 11th Annu. ACM Sympos. Comput. Geom.",
+  year =        1995,
+  pages =       "248--257",
+  keywords =    "topological sweep, visibility complex",
+  cites =       "ce-oails-92, eg-tsa-89, gt-ltasc-85, gm-osacv-91,
+                 hmrt-sjslt-86, ow-nmcvg-88, pv-vc-93, s-ec-86,
+                 w-cvgnl-85, ZZZ",
+  update =      "98.03 bibrelex, 96.05 pocchiola, 95.09 mitchell",
+  who = "Havran Vlastimil: VIS-0057",
+}
+
+@inproceedings{pv-vc-93,
+  author =      "M. Pocchiola and G. Vegter",
+  title =       "The visibility complex",
+  booktitle =   "Proc. 9th Annu. ACM Sympos. Comput. Geom.",
+  year =        1993,
+  pages =       "328--337",
+  precedes =    "pv-vc-96",
+  cites =       "cg-vippg-89, gm-osacv-91, hm-oacvp-91, p-gfr-90, v-vddsv-90,
+                 v-dmvg-91, w-cvgnl-85, ZZZ",
+ update =      "98.03 bibrelex, 97.03 devillers, 93.09 jones",
+ who = "Havran Vlastimil: VIS-0056",
+}
+
+@TechReport{Mount:TR9771,
+  author = "David M. Mount and Fan-Tao Pu",
+  number = "UMIACS-TR-96-71",
+  title = "Stabbing Orthogonal Objects in 3-Space",
+  institution = "University of Maryland Institute for Advanced Computer
+                Studies~Dept. of Computer Science, Univ. of Maryland",
+  year = 1996,
+  month = oct,
+  documentURL = "ftp://ftp.cs.umd.edu/pub/papers/papers/3701/3701.ps.Z",
+  keywords = "Lines in 3-space, Plucker coordinates, approximation algorithms,
+              orthogonal polygons, computer graphics",
+  who = "Havran Vlastimil: VIS-0055",
+}
+
+@TechReport{Miller:CS9615,
+ author =      "Timothy Miller",
+ title =       "Hidden-Surfaces: Combining BSP Trees with Graph-Based Algorithms",
+  institution = "Department of Computer Graphics, Brown University",
+  number =      "CS-96-15",
+  month =       apr,
+  year =        1996,
+  documentURL = "http://www.cs.brown.edu/publications/techreports/reports/CS-96-15.html",
+  who = "Havran Vlastimil: VIS-0054",
+}
+
+@inproceedings{chrysanthou:1996:five,
+   author = "Yiorgos Chrysanthou",
+   title = "A Fast and Accurate Shadow Algorithm for Dynamic Scenes",
+   booktitle = "A symposium of the Framework for Immersive Virtual
+                Environments Working Group",
+  year = "1996",
+  month = oct,
+  pages = "??--??",
+  address = "Geneva, Switzerland",
+  who = "Havran Vlastimil: VIS-0053",
+}
+
+@inproceedings{sadagic:1996:five,
+   author = "Amela Sadagic",
+   title = "Fast Approximate Quantitative Visibility for Complex Scenes",
+   booktitle = "A symposium of the Framework for Immersive Virtual
+                Environments Working Group",
+  year = "1996",
+  month = oct,
+  pages = "??--??",
+  address = "Geneva, Switzerland",
+  who = "Havran Vlastimil: VIS-0052",
+}
+
+@inproceedings{chrysanthou:cgi:98,
+  author = "Chrysanthou, Y. and Cohen-Or, D. and Lischinski, D.",
+  title = "Fast Approximate Quantitative Visibility for Complex Scenes",
+  booktitle = "Proceedings of Computer Graphics International '98 (CGI'98)",
+  year = "1998",
+  month = jun,
+  pages = "23--31",
+  address = "Hannover, Germany",
+  publisher = "IEEE, NY",
+  who = "Havran Vlastimil: VIS-0051",
+}
+
+@inproceedings{barelber:cgi:98,
+  author = "Bar-Lev, A. and Elber, G.",
+  title = "Visibility as an Intrinsic Property of Geometric Models",
+  booktitle = "Proceedings of Computer Graphics International '98 (CGI'98)",
+  year = "1998",
+  month = jun,
+  pages = "198--206",
+  address = "Hannover, Germany",
+  publisher = "IEEE, NY",
+  who = "Havran Vlastimil: VIS-0050",
+}
+
+@inproceedings{hinkenjann:cgi:98,
+  author = "Hinkenjann, A. and Muller, H.",
+  title = "Determining Visibility between Extended Objects",
+  booktitle = "Proceedings of Computer Graphics International '98 (CGI'98)",
+  year = "1998",
+  month = jun,
+  pages = "23--31",
+  address = "Hannover, Germany",
+  publisher = "IEEE, NY",
+  who = "Havran Vlastimil: VIS-0049",
+}
+
+@inproceedings{iones:cgi:98,
+  author = "Iones, A. and Zhukov, S. and Krupkin, A.",
+  title = "On Optimality of OBBs for Visibility Tests for Frustrum Culling,
+           Ray Shooting and Collision Detection",
+  booktitle = "Proceedings of Computer Graphics International '98 (CGI'98)",
+  year = "1998",
+  month = jun,
+  pages = "256--263",
+  address = "Hannover, Germany",
+  publisher = "IEEE, NY",
+  who = "Havran Vlastimil: VIS-0048",
+}
+
+
+@inproceedings{bb12590,
+  AUTHOR = "Shimshoni, I. and Ponce, J.",
+  TITLE = "Finite Resolution Aspect Graphs of Polyhedral Objects",
+  BOOKTITLE = "WQV93",
+  YEAR = "1993",
+  PAGES = "140-150",
+  who = "Havran Vlastimil: VIS-0046",
+}
+
+@inproceedings{devai-star-97,
+  author = "F. D\`{e}vai",
+  title = "On the Computational Requirements of Virtual Reality Systems",
+  booktitle = "State of Art, Eurographics'97",
+  year = 1997,
+  who = "Havran Vlastimil: VIS-0045",
+}
+
+
+@article{bb12595,
+        AUTHOR = "Eggert, D.W. and Bowyer, K.W. and Dyer, C.R. and Christensen, H.I. and Goldgof, D.B.",
+        TITLE = "The Scale Space Aspect Graph",
+        JOURNAL = "PAMI",
+        VOLUME = "15",
+        YEAR = "1993",
+        NUMBER = "11",
+        MONTH = "November",
+        PAGES = "1114-1130",
+  who = "Havran Vlastimil: VIS-0044",
+}
+
+@inproceedings{r-tsvcp-95,
+  author =      "St\'{e}phane Rivi\`{e}re",
+  title =       "Topologically Sweeping the Visibility Complex of
+                 Polygonal Scenes",
+  booktitle =   "Proc. 11th Annu. ACM Sympos. Comput. Geom.",
+  year =        1995,
+  pages =       "C36--C37",
+  keywords =    "visibility graph optimal algorithm, experimental",
+  cites =       "eg-tsa-86, gm-osacv-87, ow-nmcvg-88, pv-savgc-93, pv-vc-93,
+                 pv-cvgpt-95, r-ectac-93, ZZZ",
+  update =      "98.03 bibrelex, 95.09 mitchell",
+  who = "Havran Vlastimil: VIS-0043",
+}
+
+@inproceedings{r-wvcav-97,
+  author =      "St\'ephane Rivi\`ere",
+  title =       "Walking in the Visibility Complex with Applications
+                 to Visibility Polygons and Dynamic Visibility",
+  booktitle =   "Proc. 9th Canad. Conf. Comput. Geom.",
+  year =        1997,
+  pages =       "147--152",
+  update =      "97.11 jones",
+  who = "Havran Vlastimil: VIS-0042",
+}
+
+@inproceedings{r-dvpsv-97,
+ author = "S. Rivi{\`e}re",
+ title = "Dynamic visibility in polygonal scenes with the visibility complex",
+ booktitle = "Proc. 13th Annu. ACM Sympos. Comput. Geom.",
+ year = 1997,
+ pages = "421--423",
+ who = "Havran Vlastimil: VIS-0041",
+}
+
+@Article{Slater:1992a,
+  author =       "M. Slater",
+  title =        "A Comparison of Three Shadow Volume Algorithms",
+  journal =      "The Visual Computer",
+  volume =       "9",
+  number =       "1",
+  pages =        "25--38",
+  year =         "1992",
+  who = "Havran Vlastimil: VIS-0040",
+}
+
+@inproceedings{slater97a,
+ author =      "M. Slater and Y. Chrysanthou",
+ title =       "View Volume Culling Using a Probabilistic Caching
+Scheme",
+ booktitle =   "ACM Virtual Reality Software and Technology VRST'97",
+ year =        1997,
+ month = sep,
+ address =      "Lausanne, Switzerland",
+ pages =       "??-??",
+ who = "Havran Vlastimil: VIS-0039", 
+}
+
+@TechReport{Coorg96a,
+ author =      "Coorg, Satyan and Teller, Seth",
+ title =       "A Spatially and Temporally Coherent Object Space Visibility Algorithm",
+  institution = "Department of Computer Graphics, MIT",
+  number =      "TM-546",
+  month =       feb,
+  year =        1996,
+  documentURL = "http://graphics.lcs.mit.edu/~satyan/pubs/mit-lcs-tm-546.ps.Z",
+  who = "Havran Vlastimil: VIS-0038",
+}
+
+@inproceedings{blais98a,
+ author =      "M. Blais and P. Poulin",
+ title =       "Sampling Visibility in Three-Space",
+ booktitle =   "Proc. of the 1998 Western Computer Graphics Symposium",
+ year =        1998,
+ month = apr,
+ pages =       "45--52",
+ who = "Havran Vlastimil: VIS-0037", 
+}
+
+@Article{Sudarsky:1996:OVA,
+  author =       "Oded Sudarsky and Craig Gotsman",
+  title =        "Output-Sensitive Visibility Algorithms for Dynamic
+                 Scenes with Applications to Virtual Reality",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "15",
+  number =       "3",
+  pages =        "C249--C258",
+  month =        sep,
+  year =         "1996",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Tue Mar 17 15:44:38 MST 1998",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Technion - Israel Inst of Technology",
+  affiliationaddress = "Haifa, Isr",
+  affiliationaddress = "Isr",
+  classification = "722.4; 723.1; 723.2; 723.5; 741.2; 921.4; C6120
+                 (File organisation); C6130B (Graphics techniques);
+                 C6150N (Distributed systems software)",
+  conference =   "Proceedings of the 1996 17th Annual Conference and
+                 Exhibition of the European Association for Computer
+                 Graphics, EUROGRAPHICS'96",
+  conflocation = "Poitiers, France; 26-30 Aug. 1996",
+  conftitle =    "European Association for Computer Graphics 17th Annual
+                 Conference and Exhibition. EUROGRAPHICS '96",
+  corpsource =   "Dept. of Comput. Sci., Israel Inst. of Technol.,
+                 Haifa, Israel",
+  journalabr =   "Comput Graphics Forum",
+  keywords =     "Algorithms; Client server design; Computational
+                 geometry; Computer graphics; Computer simulation; Data
+                 structures; Distributed computer systems; Distributed
+                 multi user virtual environment; Dynamic scenes; Output
+                 sensitive visibility algorithm; Temporal bounding
+                 volumes; Virtual reality; Visibility",
+  keywords =     "Algorithms; auxiliary data structure; Client server
+                 design; client-server systems; communications;
+                 Computational geometry; Computer graphics; Computer
+                 simulation; current position; Data structures;
+                 Distributed computer systems; Distributed multi user
+                 virtual environment; distributed virtual; dynamic
+                 object; dynamic objects; dynamic scenes; Dynamic
+                 scenes; environments; hidden feature removal; model;
+                 multiple; Output sensitive visibility algorithm;
+                 output-sensitive visibility algorithms; overhead;
+                 runtime; scene; spatial data; structures; temporal
+                 bounding volumes; Temporal bounding volumes; temporal
+                 bounding volumes; updated spatial data structure;
+                 virtual reality; Virtual reality; Visibility;
+                 visibility; visible graphic primitives",
+  meetingaddress = "Poitiers, Fr",
+  meetingdate =  "Aug 26--30 1996",
+  meetingdate2 = "08/26--30/96",
+  sponsor =      "CNRS; ERCIM; BARCO; EDF; SUN; et al",
+  sponsororg =   "CNRS; BARCO; Electr. France; et al",
+  treatment =    "T Theoretical or Mathematical",
+  who = "Havran Vlastimil: VIS-0036",
+}
+
+@inproceedings{hmclhz-aocus-97,
+ author =      "T. Hudson and D. Manocha and J. Cohen and M. Lin
+                 and K. Hoff and H. Zhang",
+ title =       "Accelerated Occlusion Culling Using Shadow Frustra",
+ booktitle =   "Proc. 13th Annu. ACM Sympos. Comput. Geom.",
+ year =        1997,
+ pages =       "1--10",
+ update =      "97.07 efrat",
+ who = "Havran Vlastimil: VIS-0035", 
+}
+
+@InProceedings{Durand:1996:VCN,
+  author =       "Fr{\'{e}}do Durand and George Drettakis and Claude
+                 Puech",
+  title =        "The {3D} Visibility Complex: {A} New Approach to the
+                 Problems of Accurate Visibility",
+  booktitle =    "Proceedings of Eurographics Rendering Workshop '96",
+  year =         "1996",
+  publisher =    "Springer",
+  month =        jun,
+  pages =        "245--256",
+  keywords =     "visibility, visibility complex, spatial coherence,
+                 discontinuity meshing, form factor",
+  annote =       "Visibility computations are central in any computer
+                 graphics application. The most common way to reduce
+                 this expense is the use of approximate approaches using
+                 spatial subdivision. More recently analytic approaches
+                 efficently encoding visibility have appeared for 2D
+                 (the visibility complex) and for certain limited cases
+                 in 3D (aspect graph, discontinuity meshes). In this
+                 paper we propose a new way of describing and studying
+                 the visibility of 3D space by a dual space of the 3D
+                 lines, such that all the visibility events are
+                 described. A new data-structure is defined, called the
+                 3D visibility complex, which encapsulates all
+                 visibility events. This structure is global and
+                 complete since it encodes all visibility relations in
+                 3D, and is spatially coherent allowing efficient
+                 visibility queries such as view extraction, aspect
+                 graph, discontinuity mesh, or form factor computation.
+                 A construction algorithm and suitable data structures
+                 are sketched.",
+ who = "Havran Vlastimil: VIS-0034",
+}
+
+@InProceedings{Teller:1991:VPI,
+  author =       "Seth J. Teller and Carlo H. S{\'e}quin",
+  title =        "Visibility preprocessing for interactive
+                 walkthroughs",
+  pages =        "61--69",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH '91)",
+  year =         "1991",
+  keywords =     "architectural simulation, linear programming, superset
+                 visibility",
+  who = "Havran Vlastimil: VIS-0033",
+}
+
+@InProceedings{EVL-1997-163,
+  author =       "Hansong Zhang and Dinesh Manocha and Thomas Hudson and
+                 Kenneth E. {Hoff III}",
+  title =        "Visibility Culling Using Hierarchical Occlusion Maps",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH '97)",
+  pages =        "77--88",
+  year =         "1997",
+  keywords =     "visibility culling, interactive display, image
+                 pyramid, occlusion culling, hierarchical data
+                 structures",
+  language =     "en",
+  abstract =     "We present hierarchical occlusion maps (HOM) for
+                 visibility culling on complex models with high depth
+                 complexity. The culling algorithm uses an object space
+                 bounding volume hierarchy and a hierarchy of image
+                 space occlusion maps. Occlusion maps represent the
+                 aggregate of projections of the occluders onto the
+                 image plane. For each frame, the algorithm selects a
+                 small set of objects from the model as occluders and
+                 renders them to form an initial occlusion map, from
+                 which a hierarchy of occlusion maps is built. The
+                 occlusion maps are used to cull away a portion of the
+                 model not visible from the current viewpoint. The
+                 algorithm is applicable to all models and makes no
+                 assumptions about the size, shape, or type of
+                 occluders. It supports approximate culling in which
+                 small holes in or among occluders can be ignored. The
+                 algorithm has been implemented on current graphics
+                 systems and has been applied to large models composed
+                 of hundreds of thousands of polygons. In practice, it
+                 achieves significant speedup in interactive
+                 walkthroughs of models with high depth complexity.",
+  evlib-url =    "http://visinfo.zib.de:80/Dienst/UI/2.0/Describe/evl.computergraphics%2FEVL-1997-163",
+  evlib-revision = "1st",
+  who = "Havran Vlastimil: VIS-0032",
+}
+
+@InProceedings{Kumar:1996:HVC,
+  author =       "Subodh Kumar and Dinesh Manocha",
+  title =        "Hierarcical Visibility Culling for Spline Models",
+  booktitle =    "Graphics Interface '96",
+  editor =       "Wayne A. Davis and Richard Bartels",
+  year =         "1996",
+  organization = "Canadian Information Processing Society",
+  publisher =    "Canadian Human-Computer Communications Society",
+  month =        may,
+  pages =        "142--150",
+  note =         "ISBN 0-9695338-5-3",
+  keywords =     "NURBS rendering, visibility, backpatch, CAGD,
+                 ONE-tree",
+  annote =       "We present hierarchical algorithms for visibilit
+                 culling of spline models. This includes back-patch
+                 culling, a generalization of back-face culling for
+                 polygons to splines. These algorithms are extended to
+                 trimmed surfaces as well. We propose different spatial
+                 approximations for enclosing the normals of spline
+                 surface and compare them for efficiency and
+                 effectiveness on different graphics systems. We extend
+                 the culling algorithms using hierarchical techniques to
+                 collection of surface patches and combine them with
+                 view-frustum culling to formulate a ONE (Object-Normal
+                 Exclusion)-tree for a given model. The algorithm
+                 traverses the ONE-tree at run time and culls away
+                 portions of the model not visible from the current
+                 viewpoint. These algorithms have been implemented and
+                 applied to a number of large models. In practice, we
+                 are able to speed-up the overall spline rendering
+                 algorithms by about 20 - 30% based on back-patch
+                 culling only and by more than 50% using ONE-trees.",
+  who = "Havran Vlastimil: VIS-0031",
+}        
+
+@InProceedings{SOJKA:1995:FMG,
+  author =       "Eduard SOJKA",
+  title =        "Fields, Maps and Graphs of Properties of a Scene",
+  booktitle =    "Compugraphics '95",
+  pages =        "234--245",
+  year =         "1995",
+  month =        dec,
+  editor =       "Harold P. Santo",
+  note =         "ISBN 972-8342-00-4",
+  who = "Havran Vlastimil: VIS-0030",
+}
+
+@InProceedings{Sojka:1994:GPV,
+  author =       "Eduard Sojka",
+  title =        "Graf potencialu viditelnosti",
+  booktitle =    "Winter School of Computer Graphics 1994",
+  year =         "1994",
+  month =        jan,
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, 19-20 January 1994",
+  keywords =     "graf potencialu viditelnosti, graf aspektu,
+                 viditelnost.",
+  pages = "168--173",
+  annote =       "Clanek podava novy pohled na teorii potencialu
+                 viditelnosti. Tento pohled predpoklada, ze na mnozine
+                 obrazu dane sceny lze zavest relaci ekvivalence. Tato
+                 relace pak indukuje rozklad mnoziny obrazu, ktera je
+                 nekonecna, na konecny pocet trid. Take prostor
+                 obklopujici scenu je dekomponovan na tridy. Ze vsech
+                 bodu jedne tridy vnima pozorovatel ekvivalentni obrazy.
+                 Graf potencialu viditelnosti zachycuje informaci o
+                 techto tridach a vztazich mezi nimi. Predkladana teorie
+                 umoznuje zasadit publikovane pristupy do jednotneho
+                 ramce. Pouziti teorie je ilustrovano na nekolika
+                 prikladech. Graf potencialu viditelnosti muze byt puzit
+                 jako alternativni nebo doplnkovy model sceny a muze byt
+                 uzitecny pri reseni ruznych problemu jako je napriklad
+                 problem viditelnosti, problem navigace ve scene a
+                 problem rozpoznani trojrozmernych objektu.",
+  who = "Havran Vlastimil: VIS-0029",
+}
+
+@InProceedings{Sojka:1995:AGT,
+  author =       "E. Sojka",
+  title =        "Aspect Graphs of Three Dimensional Scenes",
+  booktitle =    "Winter School of Computer Graphics 1995",
+  year =         "1995",
+  month =        feb,
+  pages =        "289--299",
+  note =         "held at University of West Bohemia, Plzen, Czech
+                 Republic, 14-18 February 1995",
+  who = "Havran Vlastimil: VIS-0028",
+}
+
+@Article{Mulmuley:1989:EAH,
+  author =       "Ketan Mulmuley",
+  editor =       "Jeffrey Lane",
+  title =        "An Efficient Algorithm for Hidden Surface Removal",
+  journal =      "Computer Graphics",
+  volume =       "23",
+  number =       "3",
+  pages =        "379--388",
+  month =        jul,
+  year =         "1989",
+  bibsource =    "Graphics/imager/imager.89.bib",
+  conference =   "held in Boston, Massachusetts; 31 July -- 4 August
+                 1989",
+  who = "Havran Vlastimil: VIS-0027",
+}
+
+@InProceedings{Sillion:1995:FBC,
+  author =       "Fran\c{c}ois Sillion and George Drettakis",
+  title =        "Feature-based Control of Visibility Error: {A}
+                 Multi-Resolution Clustering Algorithm for Global
+                 Illumination",
+  pages =        "145--152",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH '95)",
+  year =         "1995",
+  publisher =    "ACM SIGGRAPH/Addison Wesley",
+  month =        aug,
+  who = "Havran Vlastimil: VIS-0026",
+}
+
+@InProceedings{Drettakis:1997:IUG,
+  author =       "George Drettakis and Fran{\c{c}}ois Sillion",
+  title =        "Interactive Update of Global Illumination Using {A}
+                 Line-Space Hierarchy",
+  booktitle =    "SIGGRAPH 97 Conference Proceedings",
+  editor =       "Turner Whitted",
+  series =       "Annual Conference Series",
+  year =         "1997",
+  organization = "ACM SIGGRAPH",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  pages =        "57--64",
+  note =         "ISBN 0-89791-896-7",
+  keywords =     "global illumination, dynamic environments,
+                 hierarchical radiosity, form-factors, interactivity,
+                 frame rate control",
+  annote =       "Interactively manipulating the geometry of complex,
+                 globally illuminated scenes has to date proven an
+                 elusive goal. Previous attempts have failed to provide
+                 interactive updates of global illumination and have not
+                 been able to offer well-adapted algorithms controlling
+                 the frame rate. The need for such interactive updates
+                 of global illumination is becoming increasingly
+                 important as the field of application of radiosity
+                 algorithms widens. To address this need, we present a
+                 novel algorithm which provides interactive update rates
+                 of global illumination for complex scenes with moving
+                 objects. In the context of clustering for hierarchical
+                 radiosity, we introduce the idea of an implicit
+                 line-space hierarchy. This hierarchy is realized by
+                 augmenting the links between hierarchical elements
+                 (clusters or surfaces) with shafts, representing the
+                 set of lines passing through the two linked elements.
+                 We show how line-space traversal allows rapid
+                 identification of modified links, and simultaneous
+                 cleanup of subdivision no longer required after a
+                 geometry move. The traversal of line-space also limits
+                 the amount of work required to update and solve the new
+                 hierarchical system after a move, by identifying the
+                 modified paths in the scene hierarchy. The
+                 implementation of our new algorithm allows interactive
+                 updates of illumination after object motion for scenes
+                 containing several thousand polygons, including global
+                 illumination effects. Finally, the line-space hierarchy
+                 traversal provides a natural control mechanism allowing
+                 the regulation of the tradeoff between image quality
+                 and frame rate.",
+  who = "Havran Vlastimil: VIS-0025",
+}
+
+
+@TechReport{deBerg96traverse,
+  author =       "Mark de Berg and Marc van Kreveld and Rene van Oostrum and Mark Overmars",
+  title =        "Simple traversal of a subdivision without extra storage",
+  institution =  "CS Dept, Utrecht U.",
+  year =         "1996",
+  note =         "UU-CS-1996-17 URL: http:/www.cs.ruu.nl/docs/research/publication/TechList2.",
+  keywords =     "contour map, computational geometry, interval tree, cartography",
+  annote =       "traversing a planar subdivision without mark bits",
+  who = "Havran Vlastimil: VIS-0024",
+}
+
+
+@InProceedings{chrysanthou92a,
+   author =       "Y. Chrysanthou and M. Slater",
+   title =        "Computing dynamic changes to BSP trees",
+   pages =        "321--332",
+   booktitle =      "Computer Graphics Forum (EUROGRAPHICS '92 Proceedings)",
+   volume =       "11",
+   number =       "3",
+   year =         "1992",
+   month =        sep,
+   editor =       "A. Kilgour and L. Kjelldahl",
+   conference =   "held in Cambridge, UK; 7-11 September 1992",
+   keywords =     "binary space partition trees, svbsp, shadows",
+  who  = "Havran Vlastimil: VIS-0023",
+}
+
+@InProceedings{navazo87a, 
+        author =       "Isabel Navazo and Josep Fontdecaba and Pere Brunet",
+        title =        "Extended octtrees, between {CSG} trees and boundary
+                       representations",
+        pages =        "239--247",
+        booktitle =    "Eurographics '87",
+        year =         "1987",
+        month =        aug,
+        editor =       "G. Marechal",
+        publisher =    "North-Holland",
+        conference =   "European Computer Graphics Conference and Exhibition;
+                       held in Amsterdam, The Netherlands; 24 -- 28 August
+                       1987",
+        keywords =     "octree",
+  who  = "Havran Vlastimil: VIS-0022",
+}
+
+@InProceedings{Torres:1990:OBS,
+  author =       "Enric Torres",
+  title =        "Optimization of the Binary Space Partition Algorithm
+                 ({BSP}) for the Visualization of Dynamic Scenes",
+  pages =        "507--518",
+  booktitle =    "Eurographics '90",
+  year =         "1990",
+  month =        sep,   
+  editor =       "C. E. Vandoni and D. A. Duce",
+  publisher =    "North-Holland",
+  conference =   "European Computer Graphics Conference and Exhibition;
+                 held in Montreux, Switzerland; 3 -- 7 September 1990",
+  keywords =     "",
+  annote =       "",
+  who  = "Havran Vlastimil: VIS-0021",
+}
+
+@InProceedings{Chin:1989:NRT,
+  author =       "Norman Chin and Steven Feiner",
+  title =        "Near Real-Time Shadow Generation Using {BSP} Trees",
+  pages =        "99--106",  
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH '89)",
+  year =         "1989",  
+  conference =   "held in Boston, Massachusetts; 31 July -- 4 August
+                 1989",
+  keywords =     "shadows, shadow volumes, BSP, binary space
+                 partitioning", 
+  annote =       "",
+  who  = "Havran Vlastimil: VIS-0020",
+}
+
+@Article{Morer:1995:OPL,
+  author =       "P. Morer and A. M. Garcia-Alonso and J. Flaquer",
+  title =        "Optimization of a Priority List Algorithm for {3-D}
+                 Rendering of Buildings",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "14",
+  number =       "4",
+  pages =        "217--227",
+  month =        oct,
+  year =         "1995",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Fri Sep 13 06:22:32 MDT 1996",
+  acknowledgement = ack-nhfb,
+  classification = "C7440 (Civil and mechanical engineering computing);
+                 C6130B (Graphics techniques); C1180 (Optimisation
+                 techniques)",
+  keywords =     "Priority list algorithm; 3D rendering; 3-D rendering;
+                 Buildings; Architectural scenes; Parallel surfaces;
+                 Instantiation; Visualization algorithms; Hidden surface
+                 removal problem; Implementation policies; Binary space
+                 partition algorithm; Memory space; Optimization
+                 TECHNIQUES",
+  pubcountry =   "UK",
+  thesaurus =    "Architectural CAD; Data visualisation; Engineering
+                 graphics; Hidden feature removal; Optimisation;
+                 Rendering [computer graphics]",
+ who  = "Havran Vlastimil: VIS-0019",
+}
+
+@Article{Gordon:1991:FDB,
+  author =       "Dan Gordon and Shuhong Chen",
+  title =        "Front-to-back display of {BSP} trees",
+  journal =      "IEEE Computer Graphics and Applications",
+  volume =       "11",
+  number =       "5",
+  pages =        "79--85",
+  month =        sep,
+  year =         "1991",
+  coden =        "ICGADZ",
+  ISSN =         "0272-1716",
+  bibdate =      "Sat Jan 25 06:42:48 MST 1997",
+  acknowledgement = ack-nhfb,
+  affiliation =  "Texas A\&M Univ, USA",
+  annote =       "For each scanline, keeps a list of unlit segments. By
+                 displaying front-to-back instead of the traditional
+                 back-to-front, save on the unnecessary display/shading
+                 of hidden polygons. The savings are negligible for
+                 small polygons but increase with the size of the
+                 polygons. Using hardware polygon rendering (instead of
+                 the scanline algorithm) would not make this technique
+                 as interesting.",
+  classification = "723; 921",
+  journalabr =   "IEEE Comput Graphics Appl",
+  keywords =     "Back-to-Front Display; Binary Space Partitioning
+                 Trees; bsp, dynamic screen data structure; Computer
+                 Graphics; Data Structures; Front-to-Back Display; Image
+                 Processing; Interpolation Shading",
+  who = "Havran Vlastimil: VIS-0018",
+}
+
+@InProceedings{Chen:1996:FPA,
+  author =       "{Han-Ming} Chen and {Wen-Teng} Wang",
+  title =        "The Feudal Priority Algorithm on Hidden-Surface
+                 Removal",
+  editor =       "Holly Rushmeier",
+  series =       "Annual Conference Series",
+  pages =        "55--64",
+  booktitle =    "SIGGRAPH 96 Conference Proceedings",
+  year =         "1996",
+  organization = "ACM SIGGRAPH",
+  publisher =    "Addison Wesley",
+  month =        aug,
+  note =         "held in New Orleans, Louisiana, 04-09 August 1996",
+  annote =       "Development of a real-time shaded rendering approach
+                 for a frequently changing viewpoint or view vector is
+                 very important in the simulation of 3-D objects in
+                 Computer-Aided Design. A new approach is proposed in
+                 this paper to meet this demand in a very efficient
+                 manner. A pre-processing phase, in which a feudal
+                 priority tree is established for all polygons of an
+                 object, and a post-processing phase, in which a
+                 rendering priority list is searched for from the feudal
+                 priority tree for a new viewpoint or view vector, are
+                 included in our approach. The most time-consuming work
+                 is finished in the pre-processing phase which only has
+                 to be executed once for an object, and the relatively
+                 simple task is left to the post-processing phase, which
+                 is repeated when the viewpoint or view vector is
+                 changed. For the pre-processing phase, a static version
+                 and a dynamic version are proposed in this paper. The
+                 one-way priority relations of all polygons are computed
+                 in the former part of the dynamic pre-processing in a
+                 more efficient way than that in the static
+                 pre-processing, but the latter part of the dynamic
+                 pre-processing is still based on the static
+                 pre-processing. A new concept of ``absolute priority''
+                 is introduced to systematically reduce the polygons in
+                 which a separating plane is to be searched for so the
+                 probability of finding the separating plane is much
+                 increased. This is the basis to implement another
+                 important concept of ``separating before splitting'' by
+                 which the polygon splittings are much reduced. Hence
+                 the efficiency in the pre-processing and the
+                 post-processing phases is highly increased.",
+  who = "Havran Vlastimil: VIS-0017",
+}
+
+@Article{Loscos:1997:IHS,
+  author =       "Celine Loscos and George Drettakis",
+  title =        "Interactive High-Quality Soft Shadows in Scenes with
+                 Moving Objects",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "16",
+  number =       "3",
+  pages =        "C219--C230",
+  month =        sep # " 4--8",
+  year =         "1997",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Tue Mar 17 15:44:38 MST 1998",
+  acknowledgement = ack-nhfb,
+  affiliation =  "INRIA",
+  affiliationaddress = "Grenoble, Fr",
+  classification = "723.2; 723.5; 741.2",
+  journalabr =   "Comput Graphics Forum",
+  keywords =     "Algorithms; Backprojection structures; Computational
+                 geometry; Discontinuity mesh; Dynamic scenes; Image
+                 quality; Interactive computer graphics; Lighting; Soft
+                 shadows; Three dimensional computer graphics;
+                 Visibility",
+  who = "Havran Vlastimil: VIS-0016",
+}
+
+@InProceedings{Teller:1992:CAA,
+  author =       "Seth J. Teller",
+  title =        "Computing the antipenumbra of an area light source",
+  booktitle =      "Computer Graphics (Proceedings of SIGGRAPH '92)",
+  pages =        "139--148",
+  month =        jul,
+  year =         "1992",
+  conference =   "held in Chicago, Illinois; 26--31 July 1992",
+  keywords =     "radiosity, aspect graph, discontinuity meshing,
+                 stabbing lines, plucker coordinates",
+  who = "Havran Vlastimil: VIS-0015",
+}
+
+@Article{Naylor:1990:MBT,
+  author =       "Bruce Naylor and John Amanatides and William
+                 Thibault",
+  editor =       "Forest Baskett",
+  title =        "Merging {BSP} Trees Yields Polyhedral Set Operations",
+  journal =      "Computer Graphics",
+  volume =       "24",
+  number =       "4",
+  pages =        "115--124",
+  month =        aug,
+  year =         "1990",
+  coden =        "CGRADI, CPGPBZ",
+  ISSN =         "0097-8930",
+  conference =   "held in Dallas, Texas; 6--10 August 1990",
+  who = "Havran Vlastimil: VIS-0014",
+}
+
+@InProceedings{Chrysanthou:1997:IUS,
+  author =       "Yiorgos Chrysanthou and Mel Slater",
+  title =        "Incremental Updates to Scenes Illuminated by Area
+                 Light Sources",
+  booktitle =    "Proceedings of Eurographics Workshop on Rendering",
+  year =         "1997",
+  publisher =    "Springer Verlag",
+  month =        jun,
+  pages =        "103--114",
+  annote =       "An object space algorithm for computing shadows in
+                 dynamic scenes illuminated by area light sources is
+                 presented. A mesh with the shadow boundaries as well as
+                 other discontinuities in the illumination function, is
+                 built in a pre-processing stage and updated on-line
+                 after any interaction resulting in a change in the
+                 scene geometry. The mesh on each polygon is a 2D BSP
+                 tree stored in a winged edge data structure. To
+                 accelerate the mesh construction a number of new ideas
+                 are employed: sorting of the polygons in respect to the
+                 area source, the shadow overlap cube, BSP tree merging
+                 of the shadows. In addition a method for dynamically
+                 changing the BSP representation of the mesh and quickly
+                 identifying the vertices requiring intensity
+                 computations was developed. Preliminary experimental
+                 results indicate the strength and the potential of this
+                 method.",
+  who = "Havran Vlastimil: VIS-0013",
+}
+
+@InProceedings{Daubert:1997:HLS,
+  author =       "Katja Daubert and Hartmut Schirmacher and
+                 Fran{\c{c}}ois X. Sillion and George Drettakis",
+  title =        "Hierarchical Lighting Simulation for Outdoor Scenes",
+  booktitle =    "Eurographics Rendering Workshop 1997",
+  editor =       "Julie Dorsey and Philipp Slusallek",
+  year =         "1997",
+  organization = "Eurographics",
+  publisher =    "Springer Wein",
+  address =      "New York City, NY",
+  month =        jun,
+  pages =        "229--238",
+  note =         "ISBN 3-211-83001-4",
+  annote =       "Lighting algorithms for outdoor scenes suffer from the
+                 sheer geometric and lighting complexity of such
+                 environments. In this paper we introduce an efficient,
+                 hierarchical solution to the problem of outdoor
+                 illumination. Data structures and sampling algorithms
+                 are presented, permitting the integration of complex
+                 and natural objects in a hierarchical radiosity
+                 simulation system. This new approach allows the
+                 hierarchical simulation of radiant energy exchanges in
+                 outdoor scenes for the first time, including terrain
+                 and botanical models as well as sunlight and skylight.
+                 This is accomplished by providing the necessary tools
+                 to treat terrain meshes as a hierarchy of
+                 light-exchanging objects, as well as an efficient
+                 hierarchical representation for the sky dome. In
+                 addition, refinement criteria are adapted to the
+                 particular characteristics of natural lighting. Results
+                 of our implementation are presented including
+                 naturally-lit images of terrain-maps, trees and
+                 buildings.",
+  who = "Havran Vlastimil: VIS-0012",
+}
+
+@InProceedings{Drettakis:1996:AVM,
+  author =       "George Drettakis and Fran{\c{c}}ois Sillion",
+  title =        "Accurate Visibility and Meshing Calculations for
+                 Hierarchical Radiosity",
+  booktitle =    "Eurographics Rendering Workshop 1996",
+  editor =       "Xavier Pueyo and Peter Schr{\"{o}}der",
+  year =         "1996",
+  organization = "Eurographics",
+  publisher =    "Springer Wein",
+  address =      "New York City, NY",
+  month =        jun,
+  pages =        "269--278",
+  note =         "ISBN 3-211-82883-4",
+  annote =       "Precise quality control for hierarchical lighting
+                 simulations is still a hard problem, due in part to the
+                 difficulty of analysing the source of error and to the
+                 close interactions between different components of the
+                 algorithm. In this paper we attempt to address this
+                 issue by examining two of the most central components
+                 of these algorithms: visibility computation and the
+                 mesh. We first present an investigation tool in the
+                 form of a new hierarchical algorithm: this algorithmic
+                 extension encapsulates exact visibility information
+                 with respect to the light source in the form of the
+                 backprojection data structure, and allows the use of
+                 discontinuity meshes in the solution hierarchy. This
+                 tool permits us to study separately the effects of
+                 visibility and meshing error on image quality,
+                 computational expense as well as solution convergence.
+                 Initial experimental results are presented by comparing
+                 standard quadtree-based hierarchical radiosity with
+                 point-sampling visibility to the approaches
+                 incorporating backprojections, discontinuity meshes or
+                 both.",
+  who = "Havran Vlastimil: VIS-0011",
+}
+
+@Article{bib:naylor90,
+  author =       "B. Naylor", 
+  title =        "Binary Space Partitioning Trees as an Alternative
+                 Representation of Polytopes",
+  journal =      "Computer--Aided Design",
+  year =         "1990",
+  pages =        "250--252",
+  who  = "Havran Vlastimil: VIS-0010",
+}
+
+@InProceedings{Naylor:1992:PTI,
+  author =       "Bruce F. Naylor",
+  title =        "Partitioning tree image representation and generation
+                 from 3{D} geometric models",
+  pages =        "201--212",
+  booktitle =    "Proceedings of Graphics Interface '92",
+  year =         "1992",
+  month =        may,
+  conference =   "held in Vancouver, B.C.; 11-15 May 1992",
+  keywords =     "bsp trees",
+  who = "Havran Vlastimil: VIS-0009",
+}
+
+@InProceedings{Naylor:1993:CGP,
+        author =       "Bruce Naylor",
+        title =        "Constructing good partition trees",
+        booktitle =    "Proceedings of Graphics Interface '93",
+        year =         "1993",
+        pages =        "181--191",
+        organization = "Canadian Information Processing Society",
+        address =      "Toronto, Ontario, Canada",
+        month =        may,
+        who  = "Havran Vlastimil: VIS-0008",
+}
+
+@InProceedings{Naylor:1992:ISG,
+  author =       "Bruce F. Naylor",
+  title =        "Interactive solid geometry via partitioning trees",
+  pages =        "11--18",
+  booktitle =    "Proceedings of Graphics Interface '92",
+  year =         "1992",
+  month =        may,
+  conference =   "held in Vancouver, B.C.; 11-15 May 1992",
+  keywords =     "bsp trees",
+  who = "Havran Vlastimil: VIS-0007",
+}
+
+@InProceedings{Durand:1997:VSP,
+  author =       "Fr{\'{e}}do Durand and George Drettakis and Claude
+                 Puech",
+  title =        "The Visibility Skeleton: {A} Powerful and Efficient
+                 Multi-Purpose Global Visibility Tool",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH '97)",
+  year =         "1997",
+  pages =        "89--100",
+  keywords =     "Visibility, Global Visibility, Extremal Stabbing
+                 Lines, Aspect Graph, Global Illumination, Form Factor
+                 Calculation, Discontinuity Meshing, View Calculation",
+  annote =       "Many problems in computer graphics and computer vision
+                 require accurate global visibility information.
+                 Previous approaches have typically been complicated to
+                 implement and numerically unstable, and often too
+                 expensive in storage or computation. The Visibility
+                 Skeleton is a new powerful utility which can
+                 efficiently and accurately answer visibility queries
+                 for the entire scene. The Visibility Skeleton is a
+                 multi-purpose tool, which can solve numerous different
+                 problems. A simple construction algorithm is presented
+                 which only requires the use of well known computer
+                 graphics algorithmic components such as ray-casting and
+                 line/plane intersections. We provide an exhaustive
+                 catalogue of visual events which completely encode all
+                 possible visibility changes of a polygonal scene into a
+                 graph structure. The nodes of the graph are extremal
+                 stabbing lines, and the arcs are critical line swaths.
+                 Our implementation demonstrates the construction of the
+                 Visibility Skeleton for scenes of over a thousand
+                 polygons. We also show its use to compute exact visible
+                 boundaries of a vertex with respect to any polygon in
+                 the scene, the computation of global or on-the-fly
+                 discontinuity meshes by considering any scene polygon
+                 as a source, as well as the extraction of the exact
+                 blocker list between any polygon pair. The algorithm is
+                 shown to be manageable for the scenes tested, both in
+                 storage and in computation time. To address the
+                 potential complexity problems for large scenes,
+                 on-demand or lazy contruction is presented, its
+                 implementation showing encouraging first results.",
+    who = "Havran Vlastimil: VIS-0006",
+}
+
+@InProceedings{Drettakis94-FSAAL,
+  author =       "George Drettakis and Eugene Fiume",
+  year =         "1994",
+  title =        "A {Fast} {Shadow} {Algorithm} for {Area} {Light}
+                 {Sources} {Using} {Backprojection}",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH '94)",
+  pages =        "223--230",
+  keywords =     "shadows, umbra, penumbra, discontinuity meshing,
+                 global illumination, backprojection",
+  comments =     "available via the World Wide Web at:
+                 http://safran.imag.fr/Membres/George.Drettakis/pub.html",
+  who = "Havran Vlastimil: VIS-0005",
+}
+
+
+@InProceedings{Plantinga:1993:CVP,
+  author =       "Harry Plantinga",
+  title =        "Conservative visibility preprocessing for efficient
+                 walkthroughs of 3{D} scenes",
+  booktitle =    "Proceedings of Graphics Interface '93",
+  year =         "1993",
+  pages =        "166--173",
+  organization = "Canadian Information Processing Society",
+  address =      "Toronto, Ontario, Canada",
+  month =        may,
+  who = "Havran Vlastimil: VIS-0003",  
+}
+
+@InProceedings{Teller:1993:GVA,
+  author =       "Seth Teller and Pat Hanrahan",
+  booktitle =    "Computer Graphics Proceedings, Annual Conference
+                 Series, 1993",
+  title =        "Global Visibility Algorithms for Illumination
+                 Computations",
+  pages =        "239--246",
+  year =         "1993",
+  keywords =     "hidden surface removal, visibility space, radiosity,
+                 global illumination, algorithmic triage",
+  annote =       "The most expensive geometric operation in image
+                 synthesis is visibility determination. Classically this
+                 is solved with hidden surface removal algorithms that
+                 render only the parts of the scene visible from a
+                 point. Global illumination calculations, however, may
+                 require information between any two points in the
+                 scene. This paper describes global visibility
+                 algorithms that preprocess polygon databases in order
+                 to accelerate visibility determination during
+                 illumination calculations. These algorithms are
+                 sensitive to the output complexity in visibility space;
+                 that is, how many pairs of objects are mutually
+                 visible. Furthermore, the algorithms are incremental so
+                 that they work well with progressive refinement and
+                 hierarchical methods of image synthesis. The algorithms
+                 are conservative, but exact; that is, when they return
+                 visibility predicates they can be proved true. However
+                 sometimes they do not return either totally visible or
+                 totally invisible, but partially visible, even though
+                 in the same situation a better algorithm might return
+                 the exact answer. In this paper we describe the
+                 algorithms and their implementation, and show that, in
+                 a scene with low average visual complexity, they can
+                 dramatically accelerate conventional radiosity
+                 programs.",
+   who = "Havran Vlastimil: VIS-0002",
+}
+
+@InProceedings{Stewart:1994:FCSb,
+  author =       "A. James Stewart and Sherif Ghali",
+  booktitle =    "Computer Graphics (Proceedings of SIGGRAPH '94)",
+  title =        "Fast Computation of Shadow Boundaries Using Spatial
+                 Coherence and Backprojections",
+  pages =        "231--238",
+  year =         "1994",
+  who = "Havran Vlastimil: VIS-0001",
+}
+
+@Article{Cohen-Or:1995:VDZ,
+  author =       "D. Cohen-Or and A. Shaked",
+  title =        "Visibility and Dead-Zones in Digital Terrain Maps",
+  journal =      "Com{\-}pu{\-}ter Graphics Forum",
+  volume =       "14",
+  number =       "3",
+  pages =        "C/171--C/180",
+  month =        sep,
+  year =         "1995",
+  coden =        "CGFODY",
+  ISSN =         "0167-7055",
+  bibdate =      "Fri Jul 18 14:10:02 1997",
+  acknowledgement = ack-nhfb,
+  classification = "A9110D (Cartography); A9365 (Data and information;
+                 acquisition, processing, storage and dissemination in
+                 geophysics); C4240C (Computational complexity); C4260
+                 (Computational geometry); C6130B (Graphics techniques);
+                 C7340 (Geophysics computing); C7840 (Geography and
+                 cartography computing)",
+  conflocation = "Maastricht, Netherlands; 18 Aug.-1 Sept. 1995",
+  conftitle =    "EUROGRAPHICS '95",
+  corpsource =   "Sch. of Math. Sci., Tel Aviv Univ., Israel",
+  keywords =     "cartography; computational; computational complexity;
+                 Computational geometry; Dead-zones; dead-zones;
+                 detection; digital; Digital elevation map; digital
+                 terrain maps; Digital terrain maps; digital terrain
+                 maps; Discrete cross-sections; discrete cross-sections;
+                 discrete lines of sight; Discrete lines of sight;
+                 discrete lines of sight; elevation map; geographic
+                 information systems; Geographic information systems;
+                 geographic information systems; geometry; hidden area
+                 detection; Hidden area detection; hidden area
+                 detection; hidden feature; multiplication;
+                 Multiplication; multiplication; Polygonal surface
+                 representation; polygonal surface representation;
+                 removal; Surface perimeter; surface perimeter; terrain
+                 modelling; Terrain modelling; terrain modelling;
+                 Testing operations; testing operations; topographic
+                 surface; Topographic surface; topographic surface;
+                 Unit-sized terrain elements; unit-sized terrain
+                 elements; viewpoint; Viewpoint; viewpoint; Visibility;
+                 visibility; visible area; Visible area detection",
+  thesaurus =    "Cartography; Computational complexity; Computational
+                 geometry; Geographic information systems; Hidden
+                 feature removal; Visibility",
+  treatment =    "P Practical",
+  who  = "Havran Vlastimil: VIS-0091",
+}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/vlastaha.bib
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/vlastaha.bib	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/Bib/vlastaha.bib	(revision 243)
@@ -0,0 +1,218 @@
+
+# #######################
+#  Publications in 1998 #
+#    6 pieces		#
+#########################
+
+@misc{Havran98:d,
+   author = {Havran, V. and Kopal, T. and Bittner, J. and \v{Z}\'{a}ra, J.},
+   title = {FAST ROBUST BSP TREE TRAVERSAL ALGORITHM FOR RAY TRACING},
+   note = { 8 pages, Submitted to Journal of Graphics Tools},
+   year = { 1998 },
+   month = jul,
+}
+
+@inproceedings{bittner98b,
+  author = "Bittner, J. and Havran, V. and Slavik, P.",
+  title = "Hierarchical Visibility Culling with Occlusion Trees",
+  booktitle = "Proceedings of Computer Graphics International '98 (CGI'98)",
+  year = "1998",
+  month = jun,
+  pages = "207--219",
+  address = "Hannover, Germany",
+  publisher = "IEEE, New York",
+}
+
+@InProceedings{Kopal98:b,
+  author = {Kopal, T. and Havran, V. and Bittner, J. and \v{Z}\'{a}ra, J.},
+  title  = {Directionality in Ray Tracing},
+  booktitle = {Proceedings of Poster'98},
+  note = {2nd International Student Conference on Electrical Engineering},
+ organization = { CTU--FEE },
+  address = {Prague, Czech Republic},
+  pages = {2 pages, IC 24},
+  month = {May},
+  year  = {1998},
+}
+
+@InProceedings{Havran98:c,
+  author = {Havran, V.},
+  title  = {Constructing Surface Area Binary Space Partitioning with Rope
+            Trees for Ray Tracing},
+  booktitle = {Proceedings of Poster'98},
+  note = {2nd International Student Conference on Electrical Engineering},
+  organization = { CTU--FEE },
+  address = {Prague, Czech Republic},
+  pages = {2 pages, IC 15},
+  month = {May},
+  year  = {1998},
+}
+
+@InProceedings{Havran98:b,
+  author = { Havran, V. and Bittner, J. and \v{Z}\'{a}ra, J.},
+  title  = { Ray Tracing with Rope Trees},
+  booktitle = { Proceedings of 13th Spring Conference on Computer Graphics}, 
+  address = { Budme\v{r}ice},
+  month  = apr,
+  year  = {1998},
+  pages = "130--139",
+}
+
+@InProceedings{Havran98:a,
+   author = {Havran, V.},
+   title = {Statistically Optimized Traversal Algorithm for BSP trees},
+   booktitle = {Proceedings of Workshop'98},
+   organization = { CTU--FEE },
+   address = { Prague, Czech Republic },
+   editor= { A. Strejc },
+   month = { February},
+   pages = { 365--366},
+   year  = { 1998 },
+}
+
+# #######################
+#  Publications in 1997 #
+#    6 pieces		#
+#########################
+
+
+@InProceedings{Havran97:f,
+  author = {Havran, V.},
+  title = {Cache Sensitive Representation for the BSP Tree},
+  booktitle = {Proceedings of Compugraphics'97},
+  note  = {International Conference on Computer Graphics},
+  year  = {1997},
+  month  = dec,
+  pages = { 369--376 },
+  place = {Vilamoura, Algarve, Portugal},
+  anote = {Sixth International Conference on Computational Graphics
+           and Visualization Techniques},
+}
+
+@TechRep{Havran97:rep,
+  author = {Havran, V.},
+  title = {Spatial Data Structures for Visibility Computation},
+  institution = {CTU--FEE Prague},
+  number = {DC-PSR-97-05},
+  month = {May},
+  year = {1997},
+  note = {Postgraduate Study Report, 34 pages, available at 
+          ftp://www.cgg.cvut.cz/outgoing/havran/minimum/dc-psr-97-04.ps.gz},
+}
+
+@InProceedings{Havran97:d,
+  author = {Havran, V.},
+  title  = {Evaluation of BSP trees for ray--tracing},
+  booktitle = {Proceedings of Poster'97}, 
+  note = {1st International Student Conference on Electrical Engineering},
+  address = {Prague, Czech Republic},
+  pages = {2 pages, IC 12},
+  month = {May},
+  year  = {1997},
+}
+
+@InProceedings{Havran97:c,
+  author = "Havran, V. and \v{Z}\'{a}ra, J.",
+  title  = "Evaluation of BSP properties for ray--tracing",
+  booktitle = { Proceedings of 12th Spring Conference on Computer Graphics}, 
+  pages = { 155--162 },
+  address = { Budme\v{r}ice},
+  month  = jun,
+  year  = {1997},
+}
+
+@InProceedings{Havran97:b,
+  author = { Havran, V.},
+  title  = { Parallel Ray-tracer on Shared Memory Multiprocessor
+             Machines Connected via Internet},
+  booktitle = {Proceedings of Workshop'97},
+  organization = { CTU--FEE },
+  address = { Prague, Czech Republic },
+  editor= { A. Strejc },
+  month =  jan,
+  pages = { 321--322 },
+  year  = { 1997 },
+}
+
+@InProceedings{Havran97:a,
+  author = {Havran, V. and \v{S}och, M. and \v{S}imek, P. and Tvrd\'{\i}k, P.},
+  title  = {Parallel Merge Sort on Shared Memory Multicomputer.},
+  booktitle = {Proceedings of Workshop'97}, 
+  pages = {287--288},
+  editor= { A. Strejc},
+  address = {Prague, Czech Republic},
+  organization = { CTU--FEE },
+  month = jan,
+  year = {1997}, 
+}
+
+# #######################
+#  Publications in 1996 #
+#    4 pieces		#
+#########################
+
+
+@InProceedings{Havran96:d,
+  author = {Havran, V.},
+  title = {Parallel Implementation of Ray Tracing on Shared Memory
+           Architecture},
+  booktitle = {Poster Section at SOFSEM'96},
+  month = nov,
+  year = {1996},
+  address = {Milovy, Czech Republic},
+}
+
+@InProceedings{Havran96:c,
+  author = {Havran, V. and \v{Z}\'{a}ra, J.},
+  title = {Some Practical Aspects of Ray Tracing on Shared Memory Machine},
+  booktitle = {Poster Section at Eurographics Workshop on Parallel Rendering},
+  month = aug,
+  year = {1996},
+  address = {Bristol, UK},
+}
+
+@InProceedings{Havran96:b,
+  author = {Havran, V.},
+  title = {Load Balancing Techniques for Ray-tracer on Shared Memory
+           Machine},
+  booktitle = {Proceedings of Poster'96},
+  organization = { CTU--FEE },
+  address = {Prague, Czech Republic},
+  pages = {74--74}, 
+  month = {May},
+  year = {1996},
+}
+
+@MastersThesis{Havran96:a,
+  author = {Havran, V.},
+  title = {The simulation of Optical Effects},
+  month = feb,
+  school = {CTU--FEE, Department of Computer Science and Engineering,
+                 Prague, Czech Republic},
+  year = 1996,
+}
+
+# #######################
+#  Publications in 1995 #
+#    2 pieces		#
+#########################
+
+@InProceedings{Havran95:b,
+  author = {Havran, V. and \v{Z}\'{a}ra, J.},
+  title = {Effective Homogenous Transformation of Large Raster Images},
+  booktitle = {Poster Section at SOFSEM'95},
+  month =  nov,
+  address = {Milovy, Czech Republic},
+  year = 1995,
+}
+
+@InProceedings{Havran95:a,
+  author = {Havran, V. and \v{Z}\'{a}ra, J.},
+  title =  {The simulation of the Real Camera for Rendering},
+  booktitle = { Proceedings of  Workshop'95},
+  organization = {CTU--FEE},
+  address = {Prague, Czech Republic},
+  month = jan,
+  year = {1995}, 
+  pages = {183--184}, 
+}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/multirow.sty
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/multirow.sty	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/multirow.sty	(revision 243)
@@ -0,0 +1,159 @@
+%%
+%% multirow.sty  V1.6 version (5-May-2004)
+%%
+%% Author:  Jerry Leichter <jerrold.leichter@smarts.com>
+%%          Piet van Oostrum <piet@cs.uu.nl>
+%%
+%% This file may be distributed under the terms of the LaTeX Project Public
+%% License, as described in lppl.txt in the base LaTeX distribution.
+%% Either version 1 or, at your option, any later version.
+%%
+%% V1.0 was distributed anonymously, based on a Usenet posting that was
+%%      not intended for stand-alone use.
+%% V1.1 was modified by Piet van Oostrum <piet@cs.uu.nl> to allow it to
+%%      work without bigstrut.sty.
+%% V1.2 was modified by Jerry Leichter for the same goal, but using a
+%%      different approach which will work properly in conjunction with
+%%      bigstrut.sty.
+%% V1.2a was modified by Piet van Oostrum <piet@cs.uu.nl> to use \vskip
+%%    instead of \raise in positioning, avoiding making rows too high
+%%    when the adjustment is large.
+%% V1.3 was modified by Piet van Oostrum to work properly in a p{} column
+%%      (\leavevmode added)
+%% V1.4 was modified by Piet van Oostrum to check for the special case that
+%%      the width is given as an *. In this case the natural
+%%      width of the text argument will be used and the argument
+%%      is processed in LR-mode.
+%% V1.5 was modified by Piet van Oostrum: Added a % after \hbox{#5}\vfill}.
+%%      Added \struts around #5 for better vertical positioning.
+%%      Additional coding for negative value of nrows.
+%% V1.6 was modified by Piet van Oostrum: Replace a space by \relax after
+%%      \advance\@tempdima#4.
+%%
+% Make an entry that will span multiple rows of a table.
+%
+% \multirow{nrows}[bigstruts]{width}[fixup]{text}
+%
+% nrows is the number of rows to span.  It's up to you to leave the other
+%       rows empty, or the stuff created by \multirow will over-write it.
+%       With a positive value of nrows the spanned colomns are this row and
+%       (nrows-1) rows below it. With a negative value of nrows they are
+%       this row and (1-nrows) above it.
+%
+% bigstruts is mainly used if you've used bigstrut.sty.  In that case it
+%       is the total number of uses of \bigstrut within the rows being
+%       spanned.  Count 2 uses for each \bigstrut, 1 for each \bigstrut[x]
+%       where x is either t or b.  The default is 0.
+% width is the width to which the text is to be set, or * to indicate that
+%       the text argument's natural width is to be used.
+%
+% text is the actual text.  If the width was set explicitly, the text will
+%       be set in a parbox of that width; you can use \\ to force linebreaks
+%       where you like.
+%
+%       If the width was given as * the text will be set in LR mode.  If you
+%       want a multiline entry in this case you should use a tabular or array
+%       in the text parameter.
+%
+%       The text is centered vertically within the range spanned by nrows.
+%
+% fixup is a length used for fine tuning:  The text will be raised (or
+%       lowered, if fixup is negative) by that length above (below) wherever
+%       it would otherwise have gone.
+%
+% For example (using both multirow and bigstrut)
+%
+% \newcommand{\minitab}[2][l]{\begin{tabular}{#1}#2\end{tabular}}
+% \begin{tabular}{|c|c|}
+% \hline
+% \multirow{4}{1in}{Common g text} & Column g2a\\
+%       & Column g2b \\
+%       & Column g2c \\
+%       & Column g2d \\
+% \hline
+% \multirow{3}[6]*{Common g text} & Column g2a\bigstrut\\\cline{2-2}
+%       & Column g2b \bigstrut\\\cline{2-2}
+%       & Column g2c \bigstrut\\
+% \hline
+% \multirow{4}[8]{1in}{Common g text} & Column g2a\bigstrut\\\cline{2-2}
+%       & Column g2b \bigstrut\\\cline{2-2}
+%       & Column g2c \bigstrut\\\cline{2-2}
+%       & Column g2d \bigstrut\\
+% \hline
+% \multirow{4}*{\minitab[c]{Common \\ g text}} & Column g2a\\
+%       & Column g2b \\
+%       & Column g2c \\
+%       & Column g2d \\
+% \hline
+% \end{tabular}
+%
+% If any of the spanned rows are unusually large, or if you're using
+% bigstrut.sty and \bigstrut's are used assymetrically about the centerline of
+% the spanned rows, the vertical centering may not come out right.  Use the
+% fixup argument in this case.
+%
+% Just before "text" is expanded, the \multirowsetup macro is expanded to
+% set up any special environment.  Initially, \multirowsetup contains just
+% \raggedright.  It can be redefined with \renewcommand.
+%
+% Bugs:  It's just about impossible to deal correctly with descenders.  The
+% text will be set up centered, but it may then have a baseline that doesn't
+% match the baseline of the stuff beside it, in particular if the stuff
+% beside it has descenders and "text" does not.  This may result in a small
+% missalignment.  About all that can be done is to do a final touchup on
+% "text", using the fixup optional argument.  (Hint:  If you use a measure
+% like .1ex, there's a reasonable chance that the fixup will still be correct
+% if you change the point size.)
+%
+% \multirow is mainly designed for use with table, as opposed to array,
+% environments.  It will not work well in an array environment since the lines
+% have an extra \jot of space between them which it won't account for.  Fixing
+% this is difficult in general, and doesn't seem worth it.  The bigstruts
+% argument can be used to provide a semi-automatic fix:  First set
+% \bigstrutjot to .5\jot.  Then simply repeat nrows as the bigstruts argument.
+% This will be close, but probably not exact; you can use the fixup argument
+% to refine the result.  (If you do this repeatedly, you'll probably want to
+% wrap these steps up in a simple macro.  Note that the modified \bigstrutjot
+% value will not give reasonable results if you have bigstruts and use this
+% argument for its intended purpose elsewhere.  In that case, you might want
+% to set it locally.)
+%
+% If you use \multirow with the colortbl package you have to take
+% precautions if you want to color the column that has the \multirow in it.
+% colortbl works by coloring each cell separately. So if you use \multirow
+% with a positive nrows value, colortbl will first color the top cell, then
+% \multirow will typeset nrows cells starting with this cell, and later
+% colortbl will color the other cells, effectively hiding the text in that
+% area. This can be solved by putting the \multirow is the last row with a
+% negative nrows value.
+% Example:
+%  
+%  \begin{tabular}{l>{\columncolor{yellow}}l}
+%    aaaa & \\
+%    cccc & \\
+%    dddd & \multirow{-3}*{bbbb}\\
+%  \end{tabular}
+%
+\def\multirowsetup{\raggedright} 
+\def\multirow#1{\relax\@ifnextchar
+  [{\@multirow{#1}}{\@multirow{#1}[0]}}
+\def\@multirow#1[#2]#3{\@ifnextchar [{\@xmultirow{#1}[#2]{#3}}%
+  {\@xmultirow{#1}[#2]{#3}[0pt]}}
+\def\@xmultirow#1[#2]#3[#4]#5{\@tempcnta=#1%
+  \@tempdima\@tempcnta\ht\@arstrutbox
+  \advance\@tempdima\@tempcnta\dp\@arstrutbox
+  \ifnum\@tempcnta<0\@tempdima=-\@tempdima\fi
+  \advance\@tempdima#2\bigstrutjot
+  \if*#3\setbox0\vtop to \@tempdima{\vfill\multirowsetup
+    \hbox{\strut#5\strut}\vfill}%
+  \else
+      \setbox0\vtop to \@tempdima{\hsize#3\@parboxrestore
+                \vfill \multirowsetup \strut#5\strut\par\vfill}%
+  \fi
+  \ht0\z@\dp0\z@
+  \ifnum\@tempcnta<0\advance\@tempdima-\dp\@arstrutbox
+  \else\@tempdima=\ht\@arstrutbox
+     \ifnum#2>0 \advance\@tempdima\bigstrutjot \fi
+  \fi
+  \advance\@tempdima#4\relax\leavevmode\vtop{\vskip-\@tempdima\box0\vss}}
+\@ifundefined{bigstrutjot}{\newdimen\bigstrutjot \bigstrutjot\jot}{}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/plots/makefile
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/plots/makefile	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/plots/makefile	(revision 243)
@@ -0,0 +1,32 @@
+
+FIG := $(shell ls *.fig)
+
+EPS := $(shell ls *.eps) ${FIG:.fig=.eps}
+
+PDF = ${EPS:.eps=.pdf} ${FIG:.fig=.pdf}
+
+
+DEFAULT: $(EPS) $(PDF)
+
+pdf:
+	@make $(PDF)
+
+eps:
+	@make $(EPS)
+
+clean:
+	rm -f ${FIG:.fig=.eps} $(PDF)
+
+
+.SUFFIXES: .fig .eps .pdf
+
+.fig.eps: 
+	@echo "Converting $< to $@ ..."
+	@fig2dev -L eps $< $@
+	@echo "done."
+
+.eps.pdf: 
+	@echo "Converting $< to $@ ..."
+	@epstopdf $<
+	@echo "done."
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/rotating.sty
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/rotating.sty	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/rotating.sty	(revision 243)
@@ -0,0 +1,211 @@
+%%
+%% This is file `rotating.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% rotating.dtx  (with options: `package')
+%% Copyright (C) 1994 Sebastian Rahtz and Leonor Barroca. All
+%% rights reserved.  Permission is granted to to customize the
+%% declarations in this file to serve the needs of your installation.
+%% However, no permission is granted to distribute a modified version of
+%% this file under its original name.
+%% 
+\def\RInfo{1997/09/26, v2.13}
+%% File: rotating.dtx Copyright (C) 1995--1999
+\ProvidesPackage{rotating}[\RInfo\space Rotation package]
+\NeedsTeXFormat{LaTeX2e}
+\newif\if@rot@twoside
+\DeclareOption{clockwise}{% this is for compatibility
+ \AtBeginDocument{\setkeys{Grot}{units=360}}%
+}
+\DeclareOption{counterclockwise}{%
+ \AtBeginDocument{\setkeys{Grot}{units=-360}}%
+}
+\DeclareOption{figuresleft}{%
+  \@rot@twosidefalse
+  \def\rot@LR{0}%
+}
+\DeclareOption{figuresright}{%
+ \@rot@twosidefalse
+ \def\rot@LR{-1}%
+}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{graphics}}
+\ExecuteOptions{clockwise}
+\if@twoside
+  \@rot@twosidetrue
+\else
+  \@rot@twosidefalse
+\fi
+\def\rot@LR{-1}
+\ProcessOptions
+\RequirePackage{graphicx}
+\RequirePackage{ifthen}
+\def\rotdriver#1{\makeatletter\input{#1.def}\makeatother}
+\newcounter{r@tfl@t}
+\setcounter{r@tfl@t}{0}
+\def\sideways{%
+  \Grot@setangle{90}%
+  \setbox\z@\hbox\bgroup\ignorespaces}
+\def\endsideways{%
+  \unskip\egroup
+  \Grot@x\z@
+  \Grot@y\z@
+  \Grot@box
+}
+\def\turn#1{%
+  \Grot@setangle{#1}%
+  \setbox\z@\hbox\bgroup\ignorespaces}
+\def\endturn{%
+  \unskip\egroup
+  \Grot@x\z@
+  \Grot@y\z@
+  \Grot@box
+}
+\def\rotate#1{%
+  \Grot@setangle{#1}%
+  \setbox\z@\hbox\bgroup\ignorespaces}
+\def\endrotate{%
+  \unskip\egroup
+  \Grot@x\z@
+  \Grot@y\z@
+  \wd0\z@\dp0\z@\ht0\z@
+  \Grot@box
+}
+\def\turnbox#1#2{%
+  \Grot@setangle{#1}%
+  \setbox\z@\hbox{{#2}}%
+  \Grot@x\z@\Grot@y\z@
+  \wd0\z@\dp0\z@\ht0\z@
+  \Grot@box
+}
+\newsavebox\rot@float@box
+\def\@rotfloat#1{%
+  \@ifnextchar[%
+    {\@xrotfloat{#1}}%
+    {\edef\@tempa{\noexpand\@xrotfloat{#1}[\csname fps@#1\endcsname]}\@tempa}%
+}
+\def\@xrotfloat#1[#2]{%
+  \@float{#1}[#2]%
+  \begin{lrbox}\rot@float@box
+  \begin{minipage}\textheight
+ }
+\def\end@rotfloat{%
+   \end{minipage}\end{lrbox}%
+   \global\addtocounter{r@tfl@t}{1}%
+   \rot@label{RF\ther@tfl@t}%
+   \message{Adding sideways figure on }%
+   \def\R@@page{\pageref{RF\ther@tfl@t}}%
+   \wd\rot@float@box\z@
+   \ht\rot@float@box\z@
+   \dp\rot@float@box\z@
+   \vbox to \textheight{%
+    \setkeys{Grot}{units=360}%
+    \if@rot@twoside
+      \def\R@@page{\pageref{RF\ther@tfl@t}}%
+    \else
+      \let\R@@page\rot@LR
+    \fi
+    \ifthenelse{\isodd{\R@@page}}{%
+    \message{right hand page}%
+    \vfill
+    \centerline{\rotatebox{90}{\box\rot@float@box}}%
+         }{%
+    \message{left hand page}%
+    \centerline{\rotatebox{-90}{\box\rot@float@box}}%
+     \vfill
+         }%
+ }%
+   \end@float
+}
+\def\sidewaysfigure{\@rotfloat{figure}}
+\let\endsidewaysfigure\end@rotfloat
+\def\sidewaystable{\@rotfloat{table}}
+\let\endsidewaystable\end@rotfloat
+\def\@rotdblfloat{%
+  \if@twocolumn\let\reserved@a\@rotdbflt\else\let\reserved@a\@rotfloat\fi
+  \reserved@a}
+\def\@rotdbflt#1{\@ifnextchar[{\@rotxdblfloat{#1}}{\@rotxdblfloat{#1}[tp]}}
+\def\@rotxdblfloat#1[#2]{%
+  \hsize\textwidth\linewidth\textwidth
+  \@float{#1}[#2]%
+  \begin{lrbox}\rot@float@box
+  \begin{minipage}\textheight
+}
+\def\end@rotdblfloat{%
+   \end{minipage}\end{lrbox}%
+   \global\addtocounter{r@tfl@t}{1}%
+   \rot@label{RF\ther@tfl@t}%
+   \message{Adding sideways figure on }%
+   \def\R@@page{\pageref{RF\ther@tfl@t}}%
+   \@tempdima\ht\rot@float@box
+   \advance\@tempdima by \dp\rot@float@box
+\typeout{BOX wd: \the\wd\rot@float@box, ht: \the\ht\rot@float@box, dp: \the\dp\rot@float@box: so shift by .5 of \the\@tempdima}%
+   \wd\rot@float@box\z@
+   \ht\rot@float@box\z@
+   \dp\rot@float@box\z@
+   \vbox to \textheight{%
+    \setkeys{Grot}{units=360}%
+    \if@rot@twoside
+      \def\R@@page{\pageref{RF\ther@tfl@t}}%
+    \else
+      \let\R@@page\rot@LR
+    \fi
+    \ifthenelse{\isodd{\R@@page}}{%
+    \message{right hand page}%
+    \vfill
+    \hbox to\textwidth{\hfill\rotatebox{90}{\box\rot@float@box}\hfill}%
+         }{%
+    \message{left hand page}%
+    \hbox to \textwidth{\hfill\rotatebox{-90}{\box\rot@float@box}\hfill}%
+     \vfill
+         }%
+ }%
+   \end@dblfloat
+}
+\newenvironment{sidewaystable*}
+               {\@rotdblfloat{table}}
+               {\end@rotdblfloat}
+\newenvironment{sidewaysfigure*}
+               {\@rotdblfloat{figure}}
+               {\end@rotdblfloat}
+
+\long\def \r@protected@write#1#2#3{%
+      \begingroup
+       \let\therpage\relax
+       #2%
+       \let\protect\@unexpandable@protect
+       \edef\reserved@a{\write#1{#3}}%
+       \reserved@a
+      \endgroup
+      \if@nobreak\ifvmode\nobreak\fi\fi
+}
+\def\therpage{\arabic{page}}
+\def\rot@label#1{\@bsphack
+  \r@protected@write\@auxout{}%
+         {\string\newlabel{#1}{{\@currentlabel}{\therpage}}}%
+  \@esphack}
+\def\rotcaption{\refstepcounter\@captype\@dblarg{\@rotcaption\@captype}}
+\long\def\@rotcaption#1[#2]#3{%
+\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+ \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
+  \par
+  \begingroup
+    \@parboxrestore
+    \normalsize
+    \@makerotcaption{\csname fnum@#1\endcsname}{#3}%
+  \endgroup}
+\long\def\@makerotcaption#1#2{%
+ \setbox\@tempboxa\hbox{#1: #2}%
+ \ifdim \wd\@tempboxa > .8\vsize
+    \rotatebox{90}{%
+    \begin{minipage}{.8\textheight}#1: #2\end{minipage}%
+    }\par
+ \else%
+    \rotatebox{90}{\box\@tempboxa}%
+ \fi
+ \hspace{12pt}%
+}
+\endinput
+%%
+%% End of file `rotating.sty'.
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/images/makefile
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/images/makefile	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/images/makefile	(revision 243)
@@ -0,0 +1,103 @@
+
+PNG := $(shell ls *.png)
+
+JPG := $(shell ls *.jpg)
+
+GIF := $(shell ls *.gif)
+
+FIG := $(shell ls *.fig)
+
+OEPS := $(shell ls *.eps)
+
+EPS = ${PNG:.png=.eps} ${JPG:.jpg=.eps} ${GIF:.gif=.eps} ${FIG:.fig=.eps} 
+PDF = ${PNG:.png=.pdf} ${JPG:.jpg=.pdf} ${GIF:.gif=.pdf} ${FIG:.fig=.pdf} \
+	${OEPS:.eps=.pdf}
+
+
+DEFAULT: $(PDF) $(EPS)
+
+pdf:
+	@make $(PDF)
+
+eps:
+	@make $(EPS)
+
+
+.SUFFIXES: .fig .png .jpg .gif .eps .pdf  
+
+.fig.eps: 
+	@echo "Converting $< to $@ ..."
+	@fig2dev -L eps $< $@
+	@echo "done."
+
+# .fig.pdf: 
+# 	@echo "Converting $< to $@ ..."
+# 	@make $*.eps
+# 	@epstopdf -nogs $*.eps | \
+# 	ps2pdf -dPDFSETTINGS=/prepress \
+# 	-dAutoFilterColorImages=true \
+# 	-dEncodeColorImages=false \
+# 	- $@
+# 	@echo "done."
+
+# .png.pdf:
+# 	@echo "Converting $< to $@ ..."
+# 	@convert $< $@
+# 	@echo "done."
+
+# .jpg.pdf:
+# 	@echo "Converting $< to $@ ..."
+# 	@convert $< $@
+# 	@echo "done."
+
+# .gif.pdf:
+# 	@echo "Converting $< to $@ ..."
+# 	@convert $< $@
+# 	@echo "done."
+
+.png.eps:
+	@echo "Converting $< to $@ ..."
+#	@convert $< eps2:$@
+	@rm -f $@
+	@pngtopnm $< | pnmtops -noturn  > $@
+#-rle
+	@echo "done."
+
+.jpg.eps:
+	@echo "Converting $< to $@ ..."
+	@rm -f $@
+	@jpegtopnm $< | pnmtops -noturn  > $@
+#	@convert $< eps2:$@
+	@echo "done."
+
+.gif.eps:
+	@echo "Converting $< to $@ ..."
+#	@convert $< eps2:$@
+	@rm -f $@
+	@giftopnm $< | pnmtops -noturn  > $@
+	@echo "done."
+
+# the last rule should be used only for figs...
+.eps.pdf: 
+	@echo "Converting $< to $@ ..."
+	@epstopdf $<
+#	@epstopdf -nogs $*.eps | \
+#	ps2pdf -dPDFSETTINGS=/screen \
+#	- $@
+
+	@echo "done."
+
+
+clean:
+	rm -f $(EPS) $(PDF)
+
+#.eps.pdf:
+#	@echo "Converting $< to $@ ..."
+#	@epstopdf $<
+#	@echo "done."
+
+#.ps.pdf:
+#	@echo "Converting $< to $@ ..."
+#	@epstopdf $<
+#	@echo "done."
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/ifpdf.sty
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/ifpdf.sty	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/ifpdf.sty	(revision 243)
@@ -0,0 +1,8 @@
+
+\newif\ifpdf
+\ifx\pdfoutput\undefined
+\pdffalse % we are not running PDFLaTeX
+\else
+\pdfoutput=1 % we are running PDFLaTeX
+\pdftrue
+\fi
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/mutual.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/mutual.tex	(revision 284)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/mutual.tex	(revision 284)
@@ -0,0 +1,527 @@
+\chapter{Mutual Visibility Verification}
+
+\label{chap:mutual}
+
+The aggressive visibility sampling discussed in the previous chapter is
+a good candidate if a fast visibility solution is required (e.g.
+during the development cycle). However for final solution (production)
+we should either be sure that there can be no visible error due to the
+preprocessed visibility or the error is sufficiently small and thus
+not noticeable.
+
+The mutual visibility verification starts with identifying a minimal
+set of object/view cell pairs which are classified as mutually
+invisible. We process the objects sequentially and for every given
+object we determine the view cells which form the boundary of the
+invisible view cell set.
+
+This boundary it is based on the current view cell visibility
+classifications. We assume that there is a defined connectivity
+between the view cells which is the case for both BSP-tree or kD-tree
+based view cells. Then given a PVS consisting of visible view cells
+(with respect to an object) we can find all the neighbors of the
+visible view cells which are invisible. In order words a view cell
+belongs to this boundary if it is classified invisible and has at
+least one visible neighbor. If all view cells from this boundary are
+proven invisible, no other view cell (behind this boundary) can be
+visible. If the verification determines some view cells as visible,
+the current invisible boundary is extended and the verification is
+applied on the new view cells forming the boundary.
+
+The basic operation of the verification is mutual visibility test
+between an object and a view cell. This test works with a bounding
+volume of the object and the boundary of the view cell. In the most
+general case both are defined bound by a convex polyhedron, in a
+simpler case both are defined by an axis aligned bounding box.
+
+Below, we describe three different mutual visibility verification
+algorithms. The first algorithm which is described in most detail
+computes exact visibility. The second one is a conservative algorithm
+and the third one is an approximate algorithm with a guaranteed error
+bound.
+
+
+\section{Exact Verifier}
+
+The exact mutual visibility verifier computes exact visibility between
+two polyhedrons in the scene. This is computed by testing visibility
+between all pairs of potentially visible polygons of these
+polyhedrons.  For each pair of tested polygons the computation is
+localized into the shaft defined by their convex hull. This shaft is
+used to determine the set of relevant occluders~\cite{Haines94}.
+
+\subsection{Occlusion tree}
+\label{sec:rot3d_ot}
+
+ The occlusion tree for the visibility from region problem is a 5D BSP
+tree maintaining a collection of the 5D blocker
+polyhedra~\cite{bittner:02:phd}. The tree is constructed for each
+source polygon $P_S$ and represents all rays emerging from $P_S$. Each
+node $N$ of the tree represents a subset of line space ${\mathcal
+Q^*_N}$. The root of the tree represents the whole problem-relevant
+line set ${\mathcal L}_R$. If $N$ is an interior node, it is
+associated with a \plucker plane $\pplane_N$.  Left child of $N$
+represents ${\mathcal Q^*_N} \cap \pplane^-_N$, right child ${\mathcal
+Q^*_N} \cap \pplane^+_N$, where $\pplane^-_N$ and $\pplane^+_N$ are
+halfspaces induced by $\pplane_N$.
+
+ Leaves of the occlusion tree are classified $in$ or $out$. If $N$ is
+an $out$-leaf, ${\mathcal Q^*_N}$ represents unoccluded rays emerging
+from the source polygon $P_S$. If $N$ is an $in$-leaf, it is
+associated with an occluder $O_N$ that blocks the corresponding set of
+rays ${\mathcal Q^*_N}$. Additionally $N$ stores a fragment of the
+blocker polyhedron $B_N$ representing ${\mathcal Q^*_N}$. The
+intersection of $B_N$ and the \plucker quadric corresponds to a set of
+stabbers ${\cal S}_N$ through which $O_N$ is visible from $P_S$. A 2D
+example of an occlusion tree is shown at Figure~\ref{fig:ot}.
+
+\begin{figure}[htb]
+\centerline{
+\includegraphics[width=0.9\textwidth,draft=\DRAFTFIGS]{figs/ot1}}
+\caption{A 2D example of an occlusion tree. Rays intersecting scene polygons
+are represented by polyhedra P1, P2 and P3. The occlusion tree represents a union
+of the polyhedra. Note that P2 has been split during the insertion process.}
+\label{fig:ot}
+\end{figure}
+
+
+%%  Consider a source polygon and a single occluder such as in
+%% Figure~\ref{lines3}-(a). The corresponding elementary occlusion tree
+%% has interior nodes associated with \plucker hyperplanes corresponding
+%% to edges of the two polygons. 
+
+
+\subsection{Occlusion tree construction}
+
+\label{sec:rot3d_construct}
+
+ The occlusion tree is constructed incrementally by inserting blocker
+polyhedra in the order given by the size of the polygons. When
+processing a polygon $P_j$ the algorithm inserts a polyhedron
+$B_{P_SP_j}$ representing the feasible line set between the source
+polygon $P_S$ and the polygon $P_j$. The polyhedron is split into
+fragments that represent either occluded or unoccluded rays.
+
+ We describe two methods that can be used to insert a blocker
+polyhedron into the occlusion tree. The first method inserts the
+polyhedron by splitting it using hyperplanes encountered during the
+traversal of the tree. The second method identifies hyperplanes that
+split the polyhedron and uses them later for the construction of
+polyhedron fragments in leaf nodes.
+
+
+
+\subsubsection{Insertion with splitting}
+
+\label{sec:rot3_insertwithsplit}
+
+ The polyhedron insertion algorithm maintains two variables --- the
+current node $N_c$ and the current polyhedron fragment
+$B_c$. Initially $N_c$ is set to the root of the tree and $B_c$ equals
+to $B_{P_SP_j}$. The insertion of a polyhedron in the tree proceeds as
+follows: If $N_c$ is an interior node, we determine the position of
+$B_c$ and the hyperplane $\pplane_{N_c}$ associated with $N_c$. If
+$B_c$ lies in the positive halfspace induced by $\pplane_{N_c}$ the
+algorithm continues in the right subtree.  Similarly, if $B_c$ lies in
+the negative halfspace induced by $\pplane_{N_c}$,  the algorithm
+continues in the left subtree. If $B_c$ intersects both halfspaces, it
+is split by $\pplane_{N_{c}}$ into two parts $B^+_{c}$ and $B^-_{c}$
+and the algorithm proceeds in both subtrees of $N_c$ with relevant
+fragments of $B_{c}$.
+
+If $N_{c}$ is a leaf node then we make a decision depending on its
+classification.  If $N_{c}$ is an $out$-leaf then $B_{c}$ is visible
+and $N_c$ is replaced by the elementary occlusion tree of $B_{c}$. If
+$N_{c}$ is an $in$-leaf it corresponds to already occluded rays and no
+modification to the tree necessary. Otherwise we need to {\em merge}
+$B_{c}$ into the tree. The merging replaces $N_{c}$ by the elementary
+occlusion tree of $B_c$ and inserts the old fragment $B_{N_{c}}$ in
+the new subtree.
+
+\subsubsection{Insertion without splitting}
+\label{sec:insertion_nosplit}
+
+ The above described polyhedron insertion algorithm requires that the
+polyhedron is split by the hyperplanes encountered during the
+traversal of the occlusion tree. Another possibility is an algorithm
+that only tests the position of the polyhedron with respect to the
+hyperplane and remembers the hyperplanes that split the polyhedron on
+the path from the root to the leaves. Reaching a leaf node these
+hyperplanes are used to construct the corresponding polyhedron
+fragment using a polyhedron enumeration algorithm.
+
+ The splitting-free polyhedron insertion algorithm proceeds as
+follows: we determine the position of the blocker polyhedron and the
+hyperplane $\pplane_{N_c}$ associated with the current node $N_c$. If
+$B_c$ lies in the positive halfspace induced by $\pplane_{N_c}$ the
+algorithm continues in the right subtree.  Similarly if $B_c$ lies in
+the negative halfspace induced by $\pplane_{N_c}$  the algorithm
+continues in the left subtree. If $B_c$ intersects both halfspaces the
+algorithm proceeds in both subtrees of $N_c$ and $\pplane_{N_c}$ is
+added to the list of splitting hyperplanes with a correct sign for
+each subtree. Reaching an $out$-leaf the list of splitting hyperplanes
+and the associated signs correspond to halfspaces bounding the
+corresponding polyhedron fragment. The polyhedron enumeration
+algorithm is  applied using these halfspaces and the original
+halfspaces defining the blocker polyhedron. Note that it is possible
+that no feasible polyhedron exists since the intersection of
+halfspaces is empty. Such a case occurs due to the conservative
+traversal of the tree that only tests the position of the inserted
+polyhedron with respect to the splitting hyperplanes. If the fragment
+is not empty, the tree is extended as described in the previous
+section.
+
+Reaching an $in$-leaf the polygon positional test is applied. If the
+inserted polygon is closer than the polygon associated with the leaf,
+the polyhedron fragment is constructed and it is merged in the tree as
+described in the previous section. The splitting-free polyhedron
+insertion algorithm has the following properties:
+
+\begin{itemize}
+\item If the polyhedron reaches only $in$-leaves the 5D set operations
+  on the polyhedron are avoided completely.
+\item If the polyhedron reaches only a few leaves the application of the
+  polyhedron enumeration algorithm is potentially more efficient than
+  the sequential splitting. On the contrary, when reaching many
+  $out$-leaves the splitting-free method makes less use of coherence,
+  i.e. the polyhedron enumeration algorithm is applied independently
+  in each leaf even if the corresponding polyhedra are bound by
+  coherent sets of hyperplanes.
+\item An existing implementation of the polyhedron enumeration
+algorithm can be used~\cite{cdd_site,lrs_site}.
+\end{itemize}
+
+
+ The polyhedron enumeration algorithm constructs the polyhedron as an
+intersection of a set of halfspaces. The polyhedron is described as a
+set of {\em vertices} and {\em rays} and their adjacency to the
+hyperplanes bounding the polyhedron~\cite{Fukuda:1996:DDM,avis96}. The
+adjacency information is used to construct a 1D skeleton of the
+polyhedron that is required for computation of the intersection with
+the \plucker quadric.
+
+
+
+\subsection{Visibility test}
+
+\label{sec:rot3d_vistest}
+
+ The visibility test classifies visibility of a given polygon with respect
+to the source polygon. The test can be used to classify visibility of
+a polyhedral region by applying it on the boundary faces of the region
+and combining the resulting visibility states.
+
+%\subsection{Exact visibility test}
+
+ The exact visibility test for a given polyhedral region proceeds as
+follows: for each face of the region facing the given source polygon
+we construct a blocker polyhedron. The blocker polyhedron is then
+tested for visibility by the traversal of the occlusion tree. The
+visibility test proceeds as the algorithms described in
+Section~\ref{sec:rot3d_construct}, but no modifications to the tree
+are performed. If the polyhedron is classified as visible in all
+reached leaves, the current face is fully visible. If the polyhedron
+is invisible in all reached leaves, the face is invisible. Otherwise
+it is partially visible since some rays connecting the face and the
+source polygon are occluded and some are unoccluded. The visibility of
+the whole region can computed using a combination of visibility states
+of its boundary faces according to
+Table~\ref{table:vis_states}. However, since we are interested only in
+verification of mutual invisibility as soon as we find a first visible
+fragment the test can be terminated.
+
+\begin{table}[htb]
+\begin{center}
+\begin{tabular}{|c|c||c|}
+\hline
+Fragment A & Fragment B & A $\cup$ B \\
+\hline
+\hline
+F & F & F\\
+\hline
+I & I & I\\
+\hline
+I & F & P\\
+\hline
+F & I & P\\
+\hline
+P & $*$ & P\\
+\hline
+$*$ & P & P\\ 
+\hline
+\end{tabular}
+\begin{tabular}{cl}
+I  & -- invisible\\
+P    & -- partially visible\\
+F  & -- fully visible\\
+$*$  & -- any of the I,P,F states
+\end{tabular}
+\end{center}
+\caption{Combining visibility states of two fragments.}
+\label{table:vis_states}
+\end{table}
+
+
+% \subsection{Conservative visibility test}
+
+% \label{sec:rot3_conserva}
+
+%  The conservative visibility test provides a fast estimation of
+% visibility of the given region since it does not require the 5D
+% polyhedra enumeration. Visibility of the given face of the region is
+% determined by a traversal of the occlusion tree and testing the
+% position of the corresponding blocker polyhedron with respect to the
+% encountered hyperplanes as described in
+% Section~\ref{sec:insertion_nosplit}.  If the blocker polyhedron
+% reaches only $in$-leaves and the face is behind the polygon(s)
+% associated with the leaves, the face is classified invisible
+% . Otherwise, it is conservatively classified as visible.  The
+% visibility of the whole region is determined using a combination of
+% visibility of its faces as mentioned in the previous section.
+
+\subsection{Optimizations}
+
+\label{sec:rot3d_optimizations}
+
+ Below we discuss several optimization techniques that can be used to
+improve the performance of the algorithm. The optimizations do not
+alter the accuracy of the visibility algorithm.
+ 
+% \subsection{Occluder sorting}
+
+%  Occluder sorting aims to increase the accuracy of the front-to-back
+% ordering determined by the approximate occlusion sweep. Higher
+% accuracy of the ordering decreases the number of the late merging of
+% blocker polyhedra in the tree.  Recall that the merging extends the
+% occlusion tree by a blocker polyhedron corresponding to an occluder
+% that hides an already processed occluder.
+
+%  The occluder sorting is applied when reaching a leaf node of the
+% spatial hierarchy during the approximate occlusion sweep. Given a leaf
+% node $N$ the occluder sorting proceeds as follows:
+
+% \begin{enumerate}
+% \item Determine a ray $r$ piercing the center of the source polygon
+% $P_S$ and the node $N$.
+% \item Compute intersections of $r$ and all supporting planes of the
+% polygons associated with $N$.
+% \item Sort the polygons according to the front-to-back order of the
+% corresponding intersection points along $r$.
+% \end{enumerate}
+
+% The occluder sorting provides an exact priority order within the given
+% leaf in the case that the polygons are pierced by the computed ray $r$
+% and they do not intersect.
+
+
+\subsubsection{Visibility estimation}
+
+ The visibility estimation aims to eliminate the polyhedron
+enumeration in the leaves of the occlusion tree. If we find out that
+the currently processed polygon is potentially visible in the given
+leaf-node (it is an $out$-leaf or it is an $in$-leaf and the
+positional test reports the polygon as the closest), we estimate its
+visibility by shooting random rays. We can use the current occlusion
+tree to perform ray shooting in line space.  We select a random ray
+connecting the source polygon and the currently processed
+polygon. This ray is mapped to a \plucker point and this point is
+tested for inclusion in halfspaces defined by the \plucker planes
+splitting the polyhedron on the path from to root to the given
+leaf. If the point is contained in all tested halfspaces the
+corresponding ray is unoccluded and the algorithm inserts the blocker
+polyhedron into the tree. Otherwise it continues by selecting another
+random ray until a predefined number of rays was tested.
+
+ The insertion of the blocker polyhedron devotes further
+discussion. Since the polyhedron was not enumerated we do not know
+which of its bounding hyperplanes really bound the polyhedron fragment
+and which are redundant for the given leaf.  Considering all
+hyperplanes defining the blocker polyhedron could lead to inclusion of
+many redundant nodes in the tree. We used a simple conservative
+algorithm that tests if the given hyperplane is bounding the
+(unconstructed) polyhedron fragment. For each hyperplane $H_i$
+bounding the blocker polyhedron the algorithm tests the position of
+extremal lines embedded in this hyperplane with respect to each
+hyperplane splitting the polyhedron. If mappings of all extremal lines
+lay in the same open halfspace defined by a splitting hyperplane,
+hyperplane $H_i$ does not bound the current polyhedron fragment and
+thus it can be culled.
+
+
+\subsubsection{Visibility merging}
+
+ Visibility merging aims to propagate visibility classifications from
+the leaves of the occlusion tree up into the interior nodes of the
+hierarchy. Visibility merging is connected with the approximate
+occlusion sweep, which simplifies the treatment of the depth of the
+scene polygons.
+
+The algorithm classifies an interior node of the occlusion tree as
+occluded ($in$) if the following conditions hold:
+
+\begin{itemize}
+\item Both its children are $in$-nodes.
+\item The occluders associated with both children are strictly closer than
+  the closest unswept node of the spatial hierarchy.
+\end{itemize}
+
+ The first condition ensures that both child nodes correspond to
+occluded nodes. The second condition ensures that any unprocessed
+occluder is behind the occluders associated with the children. Using
+this procedure the effective depth of the occlusion becomes
+progressively smaller if more and more rays become occluded.
+
+
+
+\section{Conservative Verifier}
+
+A conservative verifier is a faster alternative to the exact
+visibility verifier described above. The verifier is an extension of
+the strong occlusion algorithm of Cohen-Or et
+al.~\cite{cohen-egc-98}. In particular our verifier refines the search
+for a strong occluder by using a hierarchical subdivision of space of
+lines connecting the two regions tested for mutual
+visibility. Initially the shaft bounding the the tested regions is
+constructed. Rays bounding the shaft are traced through the scene and
+we compute all intersections with the scene objects between the tested
+regions. The the algorithm proceeds as follows:
+
+\begin{itemize}
+\item In the case that any ray does not intersect any object the
+tested regions are classified as visibility and the algorithm
+terminates.
+\item If the rays intersect the same convex object (at any
+depth) this object is a strong occluder with respect to the shaft and
+thus it also hides all rays in the corresponding shaft.
+\item If the rays do not intersect a single convex object four new
+shafts are constructed by splitting both regions in half and the
+process is repeated recursively.
+\end{itemize}
+
+If the subdivision does not terminate till reaching a predefined
+subdivision depth, we conservatively classify the tested regions as
+mutually visible. The conservative verifier is illustrated at
+Figure~\ref{fig:conservative_sampling}.
+
+\begin{figure}[htb]
+\centerline{
+\includegraphics[width=0.7\textwidth,draft=\DRAFTFIGS]{figs/conservative_sampling}}
+\caption{An example of the conservative visibility verification. The figure shows two
+  tested regions (the view cell and the object) and several
+  occluders. For sake of clarity we only show samples which are
+  boundaries of shafts on one path of the line space subdivision tree.
+  The subdivision terminates at the yellow shaft since a single strong
+  occluder has been found. }
+\label{fig:conservative_sampling}
+\end{figure}
+
+
+\section{Error Bound Approximate Verifier}
+
+The approximate verifier will be based on the similar idea as the
+conservative one. However it will behave differently in the finer
+subdivision of the ray shafts. The idea is to use the above algorithm
+as far as the shafts get small enough that we can neglect objects
+which can be seen through such a shaft. Even if not all rays inside
+the shaft are not blocked by scene objects, a pixel error induced due
+to omission of objects potential visible behind the shaft will be
+below a given threshold.
+
+For the computation of the maximal error due to the current shaft we
+assume that one tested region is a view cell, whereas the other is an
+object bounding box or cell of the spatial hierarchy. The threshold is
+computed as follows: We first triangulate the farthest intersection
+points in the shaft as seen from the view cell side of the shaft. Then
+for each computed triangle we calculate a point in the view cell which
+maximizes the projected area of the triangle (see
+Figure~\ref{fig:approximate_sampling}).  The conservative estimate of
+the maximal error is then given by a sum of the computed projected
+areas. If this error is below a specified threshold we terminate the
+subdivision of the current shaft.
+
+%We calculate a point in the view cell which
+%maximizes the projected area of the object with respect to the shaft
+%. The conservative estimate
+%of the maximal error is then given by the computed projected area. 
+
+\begin{figure}[htb]
+\centerline{
+\includegraphics[width=0.7\textwidth,draft=\DRAFTFIGS]{figs/approximate_sampling2}}
+\caption{An example of the approximate error bound visibility verification. The figure shows two
+  tested regions (the view cell and the object) and two
+  occluders. Due to the 2D nature of the example the triangulation is depicted as
+  the red line segment. The maximal error for the possible viewpoints in the shaft
+  corresponds to the angle $\alpha$.
+}
+\label{fig:approximate_sampling}
+\end{figure}
+
+%Option: - if there is sufficient number of samples from 1 + 2 and some
+%of their statistic (local spatial and directional density + distances
+%to the visible objects), maybe an error estimate could only be derived
+%from there values.
+
+% a) is perhaps the most interesting since this has not been done so far at all. I though about different methods how to do that (e.g. maintaining a triangulated front visible layer), but I always found some problem. I believe that the method which is almost implemented now is solid and I just wonder what performance it will achieve.
+
+% The basic idea is the following:
+
+% Use 2 plane parametrization for describing all lines intersecting the object and the view cell. The line sets will be described by aligned rectangles on the two planes which allows to construct convex shafts bounded always by only 4 lines. After determing the initial rectangles bounding the whole line set perform recursive subdivsion as follows:
+
+% 1. Cast the 4 corner rays and deterine ALL intersections with the occluding objects
+
+% 2. If any ray is unoccluded termite the whole test with VISIBLE and extend the PVS of the object with the new view cell (and possibly more if the rays goes further). Start the verification for the new view cells in the occluded layer.
+
+% 3. If all 4 rays pierce the same convex mesh, (or mesh triangle for non convex meshes) terminate this branch with INVISIBLE. Note the terminating mesh need not be the front most one.
+
+% 4. Triangulate the depth of the shaft as seen from the viecell side of the shaft and compute the maximal projected area of the 2 computed triangles. This determines the maximal pixel error we can make by terminating this branch as invisible.
+% Note that here it would be the best to selected those intersections for the rays which have the most similar depths to better estimate the maximal error, i.e. the "depth triangles" need not be formed by the first visible layer.
+
+% 5. If 4 does not terminate subdivide either the view cell or the object rectangle depending on the sample depths and error computed.
+
+% It is actually quite simple to create a conservative variant of the algorithm: subdivide only to a given depth and avoid test 4. Then the samples can only be terminated by a "STRONG occluder" which hides the whole shaft. This is similar to Dannys method, but here a hierarchical shaft subdivision is performed which should deliver much more accuracy.
+
+
+% > Partly: area subdivision algorithm does not only cast "corner" rays, but maintains lists of the triangles for the given area. However the basic idea is the same: subdivide the set or rays until there is a trivial decision (a single convex object intersected by all corner rays) or the error is too small. The second criterion is different from the from-poin t setup, since the error cannot be evaluated in a single projection plane.
+% > That is why this triangulation would be done: Imagine that the 4 corner rays of a shaft intersect some object(s) in the scene. Now connect these intersection points by creating two triangles. These triangles do not exist in the scene, but define the largest possible windows through which we can see further in the shaft. Now it is easy to find two points at the origin of the shaft which maximize the projected area of the two triangles. The sum of these areas gives a conservative estimate of the spatial angle error which can be made by not subdividing the shaft any further.
+% > Is this description clearer?
+
+
+% partly - I just don't see it in front of me now. How is the result influenced by which triangles are chosen? Is it so that the nearer the intersections, the bigger the error?
+
+
+
+\section{Summary}
+
+\label{sec:rot3d_summary}
+
+ This chapter presented a mutual visibility verification algorithms, which determine
+ whether two regions in the scene are visible.
+
+ First, we have described an exact visibility algorithm which is a
+simple of modification of an algorithm for computing from-region
+visibility in polygonal scenes. The key idea is a hierarchical
+subdivision of the problem-relevant line set using \plucker
+coordinates and the occlusion tree.  \plucker coordinates allow to
+perform operations on sets of lines by means of set theoretical
+operations on the 5D polyhedra. The occlusion tree is used to maintain
+a union of the polyhedra that represent lines occluded from the given
+region (polygon). We described two algorithms for construction of the
+occlusion tree by incremental insertion of blocker polyhedra. The
+occlusion tree was used to test visibility of a given polygon or
+region with respect to the source polygon/region. We proposed several
+optimization of the algorithm that make the approach applicable to
+large scenes. The principal advantage of the exact method over the
+conservative and the approximate ones is that it does not rely on
+various tuning parameters that are characterizing many conservative or
+approximate algorithms. On the other hand the exactness of the method
+requires higher computational demands and implementation effort.
+
+Second, we have described a conservative verifier which is an
+extension of the algorithm based on strong occluders. The conservative
+verifier requires a specification of the shaft size at which the
+tested regions are conservatively classified as visible.
+
+Third, we have described an approximate error bound verifier which
+extends the conservative verifier by using automatic termination
+criteria based on the estimation of maximal error for the given shaft.
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/pdfpages.sty
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/pdfpages.sty	(revision 277)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/pdfpages.sty	(revision 277)
@@ -0,0 +1,455 @@
+%%
+%% This is file `pdfpages.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% pdfpages.dtx  (with options: `package')
+%% 
+%% This is a pdfLaTeX package for including pages
+%% of external PDF documents.
+%% 
+%% This file is part of the pdfpages package.
+%% 
+%%
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{pdfpages}[2001/04/10 v0.1h4 Include pages of external PDF documents (AM)]
+\begingroup
+\@ifundefined{pdfoutput}
+    {\PackageError{pdfpages}
+            {You're either not using pdfLaTeX\MessageBreak
+             or have turn off PDF output.\MessageBreak
+             `pdfpages' works only with pdfLaTeX\MessageBreak
+             and PDF output}
+            {Use `pdflatex' instead of `latex'\MessageBreak
+             and set output to PDF (use: \pdfoutput = 1)!}
+     \expandafter\endinput
+    }{}
+\ifnum\pdfoutput=0
+    \PackageError{pdfpages}
+            {You don't produce PDF output, which\MessageBreak
+             is required for the `pdfpages' package}
+            {Set output to PDF. (use: \pdfoutput = 1)}
+    \expandafter\endinput
+\fi
+\endgroup
+\def\AM@ifdriverlater{\@ifl@ter{def}}
+\AtBeginDocument{%
+  \AM@ifdriverlater{pdftex}{2000/05/12}{}{%
+      \PackageError{pdfpages}{%
+           You have an old `pdftex.def'.\MessageBreak%
+           There is no multipage support\MessageBreak%
+           in `pdftex.def' < 0.02u.\MessageBreak%
+           Update your `pdftex.def'}
+           {Update your `pdftex.def'!}}
+  \AM@ifdriverlater{pdftex}{2000/09/14}{}{%
+      \PackageWarning{pdfpages}{%
+           You have an old `pdftex.def'.\MessageBreak%
+           There might be problems with\MessageBreak%
+           the `trim' and `clip' options.\MessageBreak%
+           Update your `pdftex.def'!\MessageBreak}}
+}% AtBeginDocument
+\RequirePackage{ifthen, graphicx, eso-pic, calc}
+\newcommand{\AM@draft}{false}
+\DeclareOption{draft}{\def\AM@draft{true}}
+\DeclareOption{final}{\def\AM@draft{false}}
+\ProcessOptions
+\newboolean{AM@openright}\setboolean{AM@openright}{false}
+\newboolean{AM@frame}\setboolean{AM@frame}{false}
+\newboolean{AM@landscape}\setboolean{AM@landscape}{false}
+\newboolean{AM@turn}\setboolean{AM@turn}{true}
+\newboolean{AM@thread}\setboolean{AM@thread}{false}
+\newboolean{AM@link}\setboolean{AM@link}{false}
+\newboolean{AM@linktodoc}\setboolean{AM@linktodoc}{false}
+\newboolean{AM@compatibility}\setboolean{AM@compatibility}{false}
+\newcommand{\AM@xoffset}{0pt}\newcommand{\AM@yoffset}{0pt}
+\newcommand{\AM@deltax}{0pt}\newcommand{\AM@deltay}{0pt}
+\newcommand{\AM@xpos}{0pt}\newcommand{\AM@ypos}{0pt}
+\newcommand{\AM@rotate}{0}
+\newcommand{\AM@lscape@roti}{0}\newcommand{\AM@lscape@rotii}{0}
+\newcommand{\AM@pagecommand}{\thispagestyle{empty}}
+\newcommand{\AM@fbox}{}\newcommand{\AM@ph}{}
+\newcommand{\AM@pagestemp}{1}
+\newcommand{\AM@page}{}
+\newcommand{\AM@pagei}{}\newcommand{\AM@pageii}{}
+\newcommand{\AM@pageiii}{}\newcommand{\AM@pageiv}{}
+\newcommand{\AM@@smallpage}{}\newcommand{\AM@smallpage}{\AM@@smallpage}
+\newcommand{\AM@firstpage}{1}\newcommand{\AM@lastpage}{1}
+\newcommand{\AM@nup}{1}
+\newcommand{\AM@linkname}{}
+\newcommand{\AM@threadname}{}
+\newcommand{\AM@linkfit}{fitr}
+\newcommand{\AM@linktodocfit}{/Fit}
+\newcommand{\AM@setunit}{\setlength{\unitlength}{1pt}}
+\newif\ifAM@thumbpdf
+\newif\ifAM@pdflscape
+\newcommand{\AM@setlscape}{}
+\AtBeginDocument{%
+  \@ifpackageloaded{thumbpdf}{\AM@thumbpdftrue}{\AM@thumbpdffalse}%
+  \@ifpackageloaded{pdflscape}{\AM@pdflscapetrue}{\AM@pdflscapefalse}%
+  \ifAM@thumbpdf
+    \ifAM@pdflscape
+      \def\AM@setlscape{\PLS@Rotate{90}}%
+    \else
+      \def\AM@setlscape{\pdfpageattr{/Rotate 90}\AM@thumbpdfwarning}\fi
+  \else
+    \def\AM@setlscape{\pdfpageattr{/Rotate 90}}\fi}
+\newif\ifAM@thumbpdfwarning
+\newcommand{\AM@thumbpdfwarning}{%
+  \ifAM@thumbpdfwarning\else\global\AM@thumbpdfwarningtrue
+  \PackageWarning{pdfpages}{%
+    You are using `thumbpdf.sty' but not\MessageBreak
+    `pdflscape.sty'. \MessageBreak
+    Please include `pdflscape.sty' in  your document\MessageBreak
+    to get a pleasant PDF document with thumbs.\MessageBreak}\fi}
+\newcommand*{\includepdfset}[1]{\setkeys{Gin}{#1}}
+\newcommand*{\includepdf}[2][]{%
+  \begingroup% setkey
+  \filename@parse{#2}
+  \@ifundefined{filename@ext}
+    {\def\AM@linkfilename{#2.pdf}}
+    {\def\AM@linkfilename{#2}}%
+  \def\AM@linkname{#2}%
+  \def\AM@threadname{#2}%
+  \setkeys{Gin}{draft=\AM@draft, #1}%
+  \ifthenelse{\boolean{AM@compatibility}}
+    {\def\AM@pagestemp{\AM@firstpage-\AM@lastpage}}{}%
+  \ifthenelse{\boolean{AM@frame}}
+         {\let\AM@fbox\fbox}{\let\AM@fbox\relax}%
+  \expandafter\AM@pagenumbers\expandafter{\AM@pagestemp}%
+  \ifthenelse{\boolean{AM@openright}}{\AM@openright}{}%
+  \AM@setphantom
+  \AM@filluppagelist
+  \setlength{\fboxsep}{0pt}%
+  \whiledo{\not\boolean{endofpagelist}}{%
+    \newpage
+    \ifthenelse{\boolean{AM@turn}}
+      {\ifthenelse{\boolean{AM@landscape}}
+         {\ifthenelse{\equal{1}{\AM@nup}}{\AM@setlscape}{}%
+          \ifthenelse{\equal{4}{\AM@nup}}{\AM@setlscape}{}}
+         {\ifthenelse{\equal{2}{\AM@nup}}{\AM@setlscape}{}}%
+      }{}%
+    \AM@getpages{\AM@nup}%
+      \ifthenelse{\equal{1}{\AM@nup}}{%
+         \def\AM@@smallpage{%
+           \includegraphics[page=\AM@page, angle=\AM@lscape@rotii,
+                            angle=\AM@rotate, #1]{#2}}%
+         \AddToShipoutPicture{\AM@setunit%
+           \let\AM@page\AM@pagei\AM@isphantom
+           \AM@output{0}{\AM@smallpage}}%
+        }{}%
+      \ifthenelse{\equal{2}{\AM@nup}}{%
+        \def\AM@@smallpage{%
+          \includegraphics[page=\AM@page, angle=90,
+                           angle=\AM@lscape@roti, angle=\AM@rotate,
+                           scale=.7071, #1]{#2}}%
+        \AddToShipoutPicture{\AM@setunit%
+          \ifthenelse{\boolean{AM@landscape}}
+            {\let\AM@page\AM@pagei\AM@isphantom
+             \AM@output{1}{\AM@smallpage}%
+             \let\AM@page\AM@pageii\AM@isphantom
+             \AM@output{2}{\AM@smallpage}}
+            {\let\AM@page\AM@pagei\AM@isphantom
+             \AM@output{2}{\AM@smallpage}%
+             \let\AM@page\AM@pageii\AM@isphantom
+             \AM@output{1}{\AM@smallpage}}}%
+      }{}%
+      \ifthenelse{\equal{4}{\AM@nup}}{%
+        \def\AM@@smallpage{%
+          \includegraphics[page=\AM@page, angle=\AM@lscape@rotii,
+                           angle=\AM@rotate, scale=.5, #1]{#2}}%
+        \AddToShipoutPicture{\AM@setunit%
+          \ifthenelse{\boolean{AM@landscape}}
+            {\let\AM@page\AM@pagei\AM@isphantom
+             \AM@output{5}{\AM@smallpage}%
+             \let\AM@page\AM@pageii\AM@isphantom
+             \AM@output{3}{\AM@smallpage}%
+             \let\AM@page\AM@pageiii\AM@isphantom
+             \AM@output{6}{\AM@smallpage}%
+             \let\AM@page\AM@pageiv\AM@isphantom
+             \AM@output{4}{\AM@smallpage}}
+            {\let\AM@page\AM@pagei\AM@isphantom
+             \AM@output{3}{\AM@smallpage}%
+             \let\AM@page\AM@pageii\AM@isphantom
+             \AM@output{4}{\AM@smallpage}%
+             \let\AM@page\AM@pageiii\AM@isphantom
+             \AM@output{5}{\AM@smallpage}%
+             \let\AM@page\AM@pageiv\AM@isphantom
+             \AM@output{6}{\AM@smallpage}}}%
+     }{}%
+    \AM@pagecommand
+    \hskip0pt
+    \newpage
+    \ifAM@pdflscape\PLS@Rotate{0}\fi
+    \ClearShipoutPicture
+  }% whiledo
+  \endgroup% setkey
+  \ClearShipoutPicture
+}% includepdf
+\newif\ifphantompage
+\newcommand{\AM@isphantom}{%
+  \expandafter\ifx\expandafter\\\AM@page\\%
+    \let\AM@page\AM@phantompage
+    \let\AM@ph\phantom
+    \phantompagefalse
+  \else
+    \let\AM@ph\relax
+    \phantompagetrue
+  \fi}
+\newcommand{\AM@hyper}{%
+  \ifphantompage
+  \ifthenelse{\boolean{AM@link}}{%
+    \pdfdest name {\AM@linkname.\AM@page}%
+             \AM@linkfit}{}%
+  \fi
+  \ifthenelse{\boolean{AM@linktodoc}}{%
+    \@tempcntb\AM@page\relax
+    \advance\@tempcntb by -1
+    \pdfannot width \wd\@tempboxa
+              height \ht\@tempboxa
+              depth \dp\@tempboxa
+              {/Subtype /Link /Border [0 0 0]
+               /A << /S /GoToR /F (\AM@linkfilename)
+                     /D [\the\@tempcntb \AM@linktodocfit]
+                     /NewWindow true >>}}{}%}%
+  \ifphantompage
+  \ifthenelse{\boolean{AM@thread}}{%
+      \pdfthread width \wd\@tempboxa
+                 height \ht\@tempboxa
+                 depth \dp\@tempboxa
+                 name {\AM@threadname}}{}%
+  \fi}%
+\newcommand{\AM@output}[2]{%
+  \setbox\@tempboxa=\hbox{\AM@fbox{#2}}%
+  \def\AM@add{+}%
+  \if@twoside\ifodd\value{page}\else\def\AM@add{-}\fi\fi
+  \ifcase#1 % nup=1
+    \def\AM@xpos{.5\paperwidth - .5\wd\@tempboxa \AM@add\AM@xoffset}%
+    \def\AM@ypos{.5\paperheight - .5\ht\@tempboxa - .5\dp\@tempboxa
+                 \AM@add\AM@yoffset}%
+  \or % nup=2
+    \def\AM@xpos{.5\paperwidth - .5\wd\@tempboxa \AM@add\AM@xoffset}%
+    \def\AM@ypos{.5\paperheight + \AM@deltay*\real{.5} + \AM@yoffset
+                 - .5\fboxrule}%
+  \or
+    \def\AM@xpos{.5\paperwidth - .5\wd\@tempboxa \AM@add\AM@xoffset}%
+    \def\AM@ypos{.5\paperheight - \ht\@tempboxa - \dp\@tempboxa
+                 - \AM@deltay*\real{.5} + \AM@yoffset + .5\fboxrule}%
+  \or % nup=4
+    \def\AM@xpos{.5\paperwidth - \wd\@tempboxa \AM@add\AM@xoffset
+                 + .5\fboxrule - \AM@deltax*\real{.5}}%
+    \def\AM@ypos{.5\paperheight + \AM@deltay*\real{.5} + \AM@yoffset
+                 - .5\fboxrule}%
+  \or
+    \def\AM@xpos{.5\paperwidth \AM@add\AM@xoffset
+                 - .5\fboxrule + \AM@deltax*\real{.5}}%
+    \def\AM@ypos{.5\paperheight + \AM@deltay*\real{.5} + \AM@yoffset
+                 - .5\fboxrule}%
+  \or
+    \def\AM@xpos{.5\paperwidth - \wd\@tempboxa \AM@add\AM@xoffset
+                 + .5\fboxrule - \AM@deltax*\real{.5}}%
+    \def\AM@ypos{.5\paperheight - \ht\@tempboxa - \dp\@tempboxa
+                 - \AM@deltay*\real{.5} + \AM@yoffset + .5\fboxrule}%
+  \or
+    \def\AM@xpos{.5\paperwidth \AM@add\AM@xoffset
+                 - .5\fboxrule + \AM@deltax*\real{.5}}%
+    \def\AM@ypos{.5\paperheight - \ht\@tempboxa - \dp\@tempboxa
+                 - \AM@deltay*\real{.5} + \AM@yoffset + .5\fboxrule}%
+  \fi
+  \setlength{\@tempdima}{\AM@xpos}%
+  \edef\AM@xpos{\strip@pt\@tempdima}%
+  \setlength{\@tempdima}{\AM@ypos}%
+  \edef\AM@ypos{\strip@pt\@tempdima}%
+  \put(\AM@xpos,\AM@ypos){%
+    \AM@ph{\raisebox{\dp\@tempboxa}{%
+      \AM@hyper
+      \box\@tempboxa}}}%
+} % AM@output
+\newcommand{\AM@pagelist}{}
+\newcommand{\saveAM@pagelist}{}
+\newboolean{endofpagelist}
+\newcommand{\AM@pagenumbers}{1}
+\def\AM@pagenumbers#1{%
+  \AM@@pagenumbers#1,\END
+  \let\saveAM@pagelist\AM@pagelist
+  \edef\AM@pagelist{\saveAM@pagelist\noexpand\END}%
+}
+\newcommand{\AM@@pagenumbers}{}
+\def\AM@@pagenumbers#1,#2{%
+  \AM@pagearea#1-\END
+  \ifx#2\END \def\AM@next{\relax}%
+    \else \def\AM@next{\AM@@pagenumbers #2}%
+  \fi
+  \AM@next
+}
+\newcommand{\AM@pagearea}{}
+\def\AM@pagearea#1-#2\END{%
+  \ifx\\#2\\%
+    \AM@addtopagelist{#1}%
+  \else
+    \AM@last#2
+    \@tempcnta=#1
+    \whiledo{\@tempcnta<\@tempcntb}{%
+      \AM@addtopagelist{\the\@tempcnta}%
+      \advance\@tempcnta by 1
+    }%
+  \fi}
+\newcommand{\AM@last}{}
+\def\AM@last#1-{%
+  \@tempcntb=#1 \advance\@tempcntb by 1
+  \def\lastpage{#1}%
+}
+\newcommand{\AM@addtopagelist}{}
+\def\AM@addtopagelist#1{%
+  \let\saveAM@pagelist\AM@pagelist
+  \edef\AM@pagelist{\saveAM@pagelist#1,}%
+}
+\newcommand{\AM@openright}{}
+\def\AM@openright{\expandafter\AM@@openright\AM@pagelist}
+\newcommand{\AM@@openright}{}
+\def\AM@@openright#1\END{%
+  \edef\AM@pagelist{,#1\noexpand\END}%
+}
+\newcommand{\AM@getpages}{}
+\def\AM@getpages#1{%
+  \ifcase#1
+    \or
+    \expandafter\AM@getipages\AM@pagelist \or
+    \expandafter\AM@getiipages\AM@pagelist \or\or
+    \expandafter\AM@getivpages\AM@pagelist \fi
+}
+
+\newcommand{\AM@getipages}{}
+\def\AM@getipages#1,#2\END{%
+  \def\AM@pagei{#1}%
+  %remove page from list
+  \def\AM@pagelist{#2\END}%
+  % checking end of list
+  \ifx\\#2\\\setboolean{endofpagelist}{true}\fi
+}
+\newcommand{\AM@getiipages}{}
+\def\AM@getiipages#1,#2,#3\END{%
+  \def\AM@pagei{#1}%
+  \def\AM@pageii{#2}%
+  %remove pages from list
+  \def\AM@pagelist{#3\END}%
+  % checking end of list
+  \ifx\\#3\\\setboolean{endofpagelist}{true}\fi
+}
+\newcommand{\AM@getivpages}{}
+\def\AM@getivpages#1,#2,#3,#4,#5\END{%
+  \def\AM@pagei{#1}%
+  \def\AM@pageii{#2}%
+  \def\AM@pageiii{#3}%
+  \def\AM@pageiv{#4}%
+  %remove pages from list
+  \def\AM@pagelist{#5\END}%
+  % checking end of list
+  \ifx\\#5\\\setboolean{endofpagelist}{true}\fi
+}
+\newcommand{\AM@countpagelist}{}
+\def\AM@countpagelist{%
+  \@tempcnta=0 \expandafter\AM@@countpagelist\AM@pagelist}
+\newcommand{\AM@@countpagelist}{}
+\def\AM@@countpagelist#1,#2{%
+  \ifx#2\END\def\AM@next{\relax}%
+    \else\def\AM@next{\AM@@countpagelist #2}%
+  \fi
+  \advance\@tempcnta by 1
+  \AM@next
+}
+\newcommand{\AM@filluppagelist}{}
+\def\AM@filluppagelist{%
+  \AM@countpagelist
+  \@tempcntb=\@tempcnta
+  \divide\@tempcntb by \AM@nup%
+  \multiply\@tempcntb by \AM@nup%
+  \advance\@tempcnta by -\@tempcntb
+  \ifnum\@tempcnta=0
+    \else
+      \advance\@tempcnta by -\AM@nup%
+      \multiply\@tempcnta by -1
+  \fi
+  \expandafter\AM@removeend\AM@pagelist
+  \whiledo{\@tempcnta > 0}{%
+    \let\saveAM@pagelist\AM@pagelist
+    \edef\AM@pagelist{\saveAM@pagelist ,}%
+    \advance\@tempcnta by -1
+  }%
+  \let\saveAM@pagelist\AM@pagelist
+  \edef\AM@pagelist{\saveAM@pagelist\noexpand\END}%
+}
+\newcommand{\AM@removeend}{}
+\def\AM@removeend#1\END{%
+  \let\saveAM@pagelist\AM@pagelist
+  \edef\AM@pagelist{#1}%
+}
+\newcommand{\AM@setphantom}{}
+\def\AM@setphantom{\expandafter\AM@@setphantom\AM@pagelist}
+\newcommand{\AM@@setphantom}{}
+\def\AM@@setphantom#1,#2\END{%
+  \ifx\\#1\\ \def\AM@next{\AM@@setphantom#2\END}%
+  \else
+    \edef\AM@phantompage{#1}%
+    \def\AM@next{\relax}%
+  \fi
+  \AM@next
+}
+\define@key{Gin}{pages}{\def\AM@pagestemp{#1}}
+\define@key{Gin}{nup}{\def\AM@nup{#1}}
+\define@key{Gin}{deltax}{\AM@parse@deltax#1 \\}
+\define@key{Gin}{deltay}{\AM@parse@deltay#1 \\}
+\define@key{Gin}{offset}{\AM@parse@offset#1 \\}
+\define@key{Gin}{frame}[true]{\setboolean{AM@frame}{#1}}
+\define@key{Gin}{openright}[true]{\setboolean{AM@openright}{#1}}
+\define@key{Gin}{pagecommand}{\renewcommand{\AM@pagecommand}{#1}}
+\define@key{Gin}{rotate}{\def\AM@rotate{#1}}
+\define@key{Gin}{landscape}[true]{\setboolean{AM@landscape}{#1}%
+                                  \def\AM@lscape@roti{-90}%
+                                  \def\AM@lscape@rotii{90}}
+\define@key{Gin}{turn}[true]{\setboolean{AM@turn}{#1}}
+\define@key{Gin}{firstpage}{\def\AM@firstpage{#1}%
+                            \setboolean{AM@compatibility}{true}}
+\define@key{Gin}{lastpage}{\def\AM@lastpage{#1}%
+                           \setboolean{AM@compatibility}{true}}
+\define@key{Gin}{thread}[true]{\setboolean{AM@thread}{#1}}
+\define@key{Gin}{threadname}{\def\AM@threadname{#1}}
+\define@key{Gin}{link}[true]{\setboolean{AM@link}{#1}}
+\define@key{Gin}{linkfit}{\def\AM@linkfit{#1}}
+\define@key{Gin}{linkname}{\def\AM@linkname{#1}}
+\define@key{Gin}{linktodoc}[true]{\setboolean{AM@linktodoc}{#1}}
+\define@key{Gin}{linktodocfit}{\def\AM@linktodocfit{#1}}
+\define@key{Gin}{linkfilename}{\pdfstringdef\AM@linkfilename{#1}}
+\def\AM@parse@deltax#1 #2\\{\AMGin@defaultbp\AM@deltax{#1}}
+\def\AM@parse@deltay#1 #2\\{\AMGin@defaultbp\AM@deltay{#1}}
+\def\AM@parse@offset#1 #2 #3\\{%
+  \AMGin@defaultbp\AM@xoffset{#1}%
+  \AMGin@defaultbp\AM@yoffset{#2}}
+\def\AMGin@defaultbp#1#2{%
+  \afterassignment\AMGin@def@bp\dimen@#2bp\relax{#1}{#2}}
+\def\AMGin@def@bp#1\relax#2#3{%
+   \if!#1!%
+     \def#2{#3bp}%
+    \else
+      \dimen@.99626\dimen@
+      \edef#2{\strip@pt\dimen@ bp}%
+    \fi}
+\endinput
+%%
+%% End of file `pdfpages.sty'.
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/sampling.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/sampling.tex	(revision 288)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/sampling.tex	(revision 288)
@@ -0,0 +1,544 @@
+\chapter{Global Visibility Sampling}
+
+\label{chap:sampling}
+
+The proposed visibility preprocessing framework consists of two major
+steps.
+
+\begin{itemize}
+\item The first step is an aggressive visibility sampling which gives
+initial estimate about global visibility in the scene. The sampling
+itself involves several strategies which will be described bellow.
+The important property of the aggressive sampling step is that it
+provides a fast progressive solution to global visibility and thus it
+can be easily integrated into the game development cycle. The
+aggressive sampling will terminate when the average contribution of new
+ray samples falls below a predefined threshold.
+
+\item The second step is mutual visibility verification. This step
+turns the previous aggressive visibility solution into either exact,
+conservative or error bound aggressive solution. The choice of the
+particular verifier is left on the user in order to select the best
+one for a particular scene, application context and time
+constrains. For example, in scenes like a forest an error bound
+aggressive visibility can be the best compromise between the resulting
+size of the PVS (and frame rate) and the visual quality. The exact or
+conservative algorithm can however be chosen for urban scenes where
+omission of even small objects can be more distracting for the
+user. The mutual visibility verification will be described in the next
+chapter.
+
+\end{itemize}
+
+In traditional visibility preprocessing the view space is
+subdivided into view cells and for each view cell the set of visible
+objects --- potentially visible set (PVS) is computed. This framework
+has been used for conservative, aggressive and exact algorithms.
+
+We propose a different strategy which has several advantages for
+sampling based aggressive visibility preprocessing. The strategy is
+based on the following fundamental ideas:
+\begin{itemize}
+\item Compute progressive global visibility instead of sequential from-region visibility
+\item Replace the roles of view cells and objects for some parts of the computation
+\end{itemize}
+
+Both these points will be addressed in this chapter in more detail.
+
+\section{Related work}
+\label{VFR3D_RELATED_WORK}
+
+Below we briefly discuss the related work on visibility preprocessing
+in several application areas. In particular we focus on computing
+from-region which has been a core of most previous visibility
+preprocessing techniques.
+
+
+\subsection{Aspect graph}
+
+The first algorithms dealing with from-region visibility belong to the
+area of computer vision. The {\em aspect
+  graph}~\cite{Gigus90,Plantinga:1990:RTH, Sojka:1995:AGT} partitions
+the view space into cells that group viewpoints from which the
+projection of the scene is qualitatively equivalent. The aspect graph
+is a graph describing the view of the scene (aspect) for each cell of
+the partitioning. The major drawback of this approach is that for
+polygonal scenes with $n$ polygons there can be $\Theta(n^9)$ cells in
+the partitioning for unrestricted view space. A {\em scale space}
+aspect graph~\cite{bb12595,bb12590} improves robustness of the method
+by merging similar features according to the given scale.
+
+
+\subsection{Potentially visible sets}
+
+
+ In the computer graphics community Airey~\cite{Airey90} introduced
+the concept of {\em potentially visible sets} (PVS).  Airey assumes
+the existence of a natural subdivision of the environment into
+cells. For models of building interiors these cells roughly correspond
+to rooms and corridors.  For each cell the PVS is formed by cells
+visible from any point of that cell.  Airey uses ray shooting to
+approximate visibility between cells of the subdivision and so the
+computed PVS is not conservative.
+
+This concept was further elaborated by Teller et
+al.~\cite{Teller92phd,Teller:1991:VPI} to establish a conservative
+PVS.  The PVS is constructed by testing the existence of a stabbing
+line through a sequence of polygonal portals between cells. Teller
+proposed an exact solution to this problem using \plucker
+coordinates~\cite{Teller:1992:CAA} and a simpler and more robust
+conservative solution~\cite{Teller92phd}.  The portal based methods
+are well suited to static densely occluded environments with a
+particular structure.  For less structured models they can face a
+combinatorial explosion of complexity~\cite{Teller92phd}. Yagel and
+Ray~\cite{Yagel95a} present an algorithm, that uses a regular spatial
+subdivision. Their approach is not sensitive to the structure of the
+model in terms of complexity, but its efficiency is altered by the
+discrete representation of the scene.
+
+Plantinga proposed a PVS algorithm based on a conservative viewspace
+partitioning by evaluating visual
+events~\cite{Plantinga:1993:CVP}. The construction of viewspace
+partitioning was further studied by Chrysanthou et
+al.~\cite{Chrysanthou:1998:VP}, Cohen-Or et al.~\cite{cohen-egc-98}
+and Sadagic~\cite{Sadagic}.  Sudarsky and
+Gotsman~\cite{Sudarsky:1996:OVA} proposed an output-sensitive
+visibility algorithm for dynamic scenes.  Cohen-Or et
+al.~\cite{COZ-gi98} developed a conservative algorithm determining
+visibility of an $\epsilon$-neighborhood of a given viewpoint that was
+used for network based walkthroughs.
+
+Conservative algorithms for computing PVS developed by Durand et
+al.~\cite{EVL-2000-60} and Schaufler et al.~\cite{EVL-2000-59}  make
+use of several simplifying assumptions to avoid the usage of 4D data
+structures.  Wang et al.~\cite{Wang98} proposed an algorithm that
+precomputes visibility within beams originating from the restricted
+viewpoint region. The approach is very similar to the 5D subdivision
+for ray tracing~\cite{Simiakakis:1994:FAS} and so it exhibits similar
+problems, namely inadequate memory and preprocessing complexities.
+Specialized algorithms for computing PVS in \m25d scenes were proposed
+by Wonka et al.~\cite{wonka00}, Koltun et al.~\cite{koltun01}, and
+Bittner et al.~\cite{bittner:2001:PG}.
+
+The exact mutual visibility method presented later in the report is
+based on method exploting \plucker coordinates of
+lines~\cite{bittner:02:phd,nirenstein:02:egwr,haumont2005:egsr}. This
+algorithm uses \plucker coordinates to compute visibility in shafts
+defined by each polygon in the scene.
+
+
+\subsection{Rendering of shadows}
+
+
+The from-region visibility problems include the computation of soft
+shadows due to an areal light source. Continuous algorithms for
+real-time soft shadow generation were studied by Chin and
+Feiner~\cite{Chin:1992:FOP}, Loscos and
+Drettakis~\cite{Loscos:1997:IHS}, and
+Chrysanthou~\cite{Chrysantho1996a} and Chrysanthou and
+Slater~\cite{Chrysanthou:1997:IUS}. Discrete solutions have been
+proposed by Nishita~\cite{Nishita85}, Brotman and
+Badler~\cite{Brotman:1984:GSS}, and Soler and Sillion~\cite{SS98}. An
+exact algorithm computing an antipenumbra of an areal light source was
+developed by Teller~\cite{Teller:1992:CAA}.
+
+
+\subsection{Discontinuity meshing}
+
+
+Discontinuity meshing is used in the context of the radiosity global
+illumination algorithm or computing soft shadows due to areal light
+sources.  First approximate discontinuity meshing algorithms were
+studied by Campbell~\cite{Campbell:1990:AMG, Campbell91},
+Lischinski~\cite{lischinski92a}, and Heckbert~\cite{Heckbert92discon}.
+More elaborate methods were developed by
+Drettakis~\cite{Drettakis94-SSRII, Drettakis94-FSAAL}, and Stewart and
+Ghali~\cite{Stewart93-OSACS, Stewart:1994:FCSb}. These methods are
+capable of creating a complete discontinuity mesh that encodes all
+visual events involving the light source.
+
+The classical radiosity is based on an evaluation of form factors
+between two patches~\cite{Schroder:1993:FFB}. The visibility
+computation is a crucial step in the form factor
+evaluation~\cite{Teller:1993:GVA,Haines94,Teller:1994:POL,
+Nechvile:1996:FFE,Teichmann:WV}. Similar visibility computation takes
+place in the scope of hierarchical radiosity
+algorithms~\cite{Soler:1996:AEB, Drettakis:1997:IUG, Daubert:1997:HLS}.
+
+
+
+\subsection{Global visibility}
+
+ The aim of {\em global visibility} computations is to capture and
+describe visibility in the whole scene~\cite{Durand:1996:VCN}. The
+global visibility algorithms are typically based on some form of {\em
+line space subdivision} that partitions lines or rays into equivalence
+classes according to their visibility classification. Each class
+corresponds to a continuous set of rays with a common visibility
+classification. The techniques differ mainly in the way how the line
+space subdivision is computed and maintained. A practical application
+of most of the proposed global visibility structures for 3D scenes is
+still an open problem.  Prospectively these techniques provide an
+elegant method for ray shooting acceleration --- the ray shooting
+problem can be reduced to a point location in the line space
+subdivision.
+
+
+Pocchiola and Vegter introduced the visibility complex~\cite{pv-vc-93}
+that describes global visibility in 2D scenes. The visibility complex
+has been applied to solve various 2D visibility
+problems~\cite{r-tsvcp-95,r-wvcav-97, r-dvpsv-97,Orti96-UVCRC}.  The
+approach was generalized to 3D by Durand et
+al.~\cite{Durand:1996:VCN}. Nevertheless, no implementation of the 3D
+visibility complex is currently known. Durand et
+al.~\cite{Durand:1997:VSP} introduced the {\em visibility skeleton}
+that is a graph describing a skeleton of the 3D visibility
+complex. The visibility skeleton was verified experimentally and  the
+results indicate that its $O(n^4\log n)$ worst case complexity is much
+better in practice. Pu~\cite{Pu98-DSGIV} developed a similar method to
+the one presented in this chapter. He uses a BSP tree in \plucker
+coordinates to represent a global visibility map for a given set of
+polygons. The computation is performed considering all rays piercing
+the scene and so the method exhibits unacceptable memory complexity
+even for scenes of moderate size. Recently, Duguet and
+Drettakis~\cite{duguet:02:sig} developed a robust variant of the
+visibility skeleton algorithm that uses robust epsilon-visibility
+predicates.
+
+ Discrete methods aiming to describe visibility in a 4D data structure
+were presented by Chrysanthou et al.~\cite{chrysanthou:cgi:98} and
+Blais and Poulin~\cite{blais98a}.  These data structures are closely
+related to the {\em lumigraph}~\cite{Gortler:1996:L,buehler2001} or
+{\em light field}~\cite{Levoy:1996:LFR}. An interesting discrete
+hierarchical visibility algorithm for two-dimensional scenes was
+developed by Hinkenjann and M\"uller~\cite{EVL-1996-10}. One of the
+biggest problems of the discrete solution space data structures is
+their memory consumption required to achieve a reasonable
+accuracy. Prospectively, the scene complexity
+measures~\cite{Cazals:3204:1997} provide a useful estimate on the
+required sampling density and the size of the solution space data
+structure.
+
+
+\subsection{Other applications}
+
+ Certain from-point visibility problems determining visibility over a
+period of time can be transformed to a static from-region visibility
+problem. Such a transformation is particularly useful for antialiasing
+purposes~\cite{grant85a}. The from-region visibility can also be used
+in the context of simulation of the sound
+propagation~\cite{Funkhouser98}. The sound propagation algorithms
+typically require lower resolution than the algorithms simulating the
+propagation of light, but they need to account for simulation of
+attenuation, reflection and time delays.
+
+\section{Algorithm Description}
+
+This section first describes the setup of the global visibility
+sampling algorithm. In particular we describe the view cell
+representation and the novel concept of from-object based
+visibility. The we outline the different visibility sampling
+strategies.
+
+\subsection{View Space Partitioning}
+
+
+
+
+Before the visibility computation itself, we subdivide the space of
+all possible viewpoints and viewing directions into view cells. A good
+partition of the scene into view cells is an essential part of every
+visibility system. If they are chosen too large, the PVS (Potentially
+Visible Set)  of a view cells is too large for efficient culling. If
+they are chosen too small or without consideration, then neighbouring
+view cells contain redundant PVS information, hence boosting the PVS
+computation and storage costs for the scene. In the left image of
+figure~\ref{fig:vienna_viewcells} we see view cells of the Vienna
+model, generated by triangulation of the streets.  In the closeup
+(right image) we can see that each triangle is extruded to a given
+height to form a view cell prism.
+
+\begin{figure}[htb]
+  \centerline{
+    \includegraphics[height=0.35\textwidth,draft=\DRAFTFIGS]{images/vienna_viewcells_01}
+     \includegraphics[height=0.35\textwidth,draft=\DRAFTFIGS]{images/vienna_viewcells_07}
+    }
+
+  \caption{(left) Vienna view cells. (right) The view cells are prisms with a triangular base. }
+  \label{fig:vienna_viewcells}
+\end{figure}
+
+In order to efficiently use view cells with our sampling method, we
+require a view cell representation which is
+
+\begin{itemize}
+\item optimized for view cell - ray intersection.
+\item flexible, i.e., it can represent arbitrary geometry.
+\item naturally suited for a hierarchical approach. %(i.e., there is a root view cell containing all others)
+\end{itemize}
+
+We meet these requirements by employing spatial subdivisions (i.e.,
+KD trees and BSP trees), to store the view cells. The initial view
+cells are associated with the leaves. The reason why we chose BSP
+trees as view cell representation  is that they are very
+flexible. View cells forming arbitrary closed meshes can be closely
+matched.  Therefore we are able to find a view cells with only a few
+view ray-plane intersections.  Furthermore, the hierarchical
+structures can be exploited as hierarchy of view cells. Interior nodes
+form larger view cells containing the children. If necessary, a leaf
+can be easily subdivided into smaller view cells.
+
+Currently we consider three different approaches to generate the
+initial view cell BSP tree.  The third method is not restricted to BSP
+trees, but BSP trees are preferred  because of their greater
+flexibility.
+
+
+
+\begin{itemize}
+
+\item A number of input view cells is given in advance, and we insert them into
+a BSP tree (i.e., we are changing their representation for a fast BSP tree lookup). As input
+view cell any closed mesh can be applied. The only requirement is
+that the any two view cells do not overlap.  The view cell
+polygons are extracted, storing a pointer to the parent view cell
+with the polygon. The BSP is build from these polygons using
+some global optimizations like tree balancing or least splits. The 
+polygons guide the split process as they are filtered down the tree. 
+The subdivision terminates when there is only one polygon left, which is coincident 
+to the last split plane. Then two leaves are created and the view cell pointer 
+(stored with the polygon) is inserted into the leaf representing the inside of the view cell. 
+One input view cell can be associated with many leaves in case
+a view cell was split during the traversal. On the other hand, each leafs corresponds
+to exactly one or no view cell.
+
+However, sometimes a good set of view
+cells is not available. Or the scene is changed frequently, and the
+designer does not want to create new view cells on each change.  In
+such a case one of the following two methods should rather be chosen,
+which generate view cells automatically.
+
+
+\item We apply a BSP tree subdivision to the scene geometry. Whenever
+the subdivision terminates in a leaf, a view cell is associated with
+the leaf node.  This simple approach is justified because it places
+the view cell borders  along some discontinuities in the visibility
+function.
+
+\begin{figure}[htb]
+  \centerline{
+    \includegraphics[height=0.35\textwidth,draft=\DRAFTFIGS]{figs/viewcell_part}
+      }
+  \caption{A good view cell partition with respect to the sample rays piercing the scene objects
+  and the view cell minimizes the number of rays
+  piercing more than one view cell. During subdivision, this can be achieved by aligning
+  the split plane with one of the long sides of occluder $O$. }
+  \label{fig:viewcell_part}
+\end{figure}
+
+\item  The view cell generation can be guided by the sampling
+process. We start with with a single initial view cell representing
+the whole space. If a given threshold is reached during the
+preprocessing (e.g., the view cell is pierced by too many rays
+resulting in a large PVS), the view cell is subdivided into smaller
+cells using some criteria.
+
+\begin{table}
+\centering \footnotesize
+\begin{tabular}{|l|c|c|c|}
+  \hline\hline
+  Input & Vienna view cells selection & Vienna view cells full & Vienna simple scene\\\hline\hline
+  method & insert input viewcells & insert input view cells & generate from scene polygons\\\hline\hline
+  \#view cells & 105 & 16447 & 4867\\\hline\hline
+  \#input polygons & 525 & 82235 & 16151\\\hline\hline
+  BSP tree generation time & 0.016s & 10.328s & 0.61s\\\hline\hline
+  %%view cell insertion time & 0.016s & 7.984s \\\hline\hline
+  \#nodes & 1137 & 597933 & 9733\\\hline\hline
+  \#interior nodes & 568 & 298966 & 4866\\\hline\hline
+  \#leaf nodes  & 569 & 298967& 4867\\\hline\hline
+  \#splits & 25 & 188936 & 2010\\\hline\hline
+  max tree depth & 13 & 27 & 17\\\hline\hline
+  avg tree depth & 9.747 & 21.11 & 12.48\\\hline\hline 
+ \end{tabular}
+ \caption{Statistics for the view cell BSP tree. In the first column we insert a selection of given view cells from the Vienna scene
+ into a BSP tree. In the second column we do the same for the full Vienna view cell set. In the third column we generate 
+ new view cells using a BSP tree subdivision of the Vienna simple scene. The termination criterion was to stop subdivision if there are  
+ 3 or less polygons per node.}\label{tab:viewcell_bsp}
+\end{table}
+
+
+In order to evaluate the best split plane, we first have to define the
+characteristics of a good view cell partition:  The view cells should
+be quite large, while their PVS stays rather small.  The PVS of each
+two view cells should be as distinct as possible, otherwise they could
+be merged into a larger view cell if the PVSs are too similar.  E.g.,
+for a building, the perfect view cells are usually the single rooms
+connected by portals.
+
+Hence we can define some useful criteria for the split: 1) the number
+of rays should be roughly equal among the new view cells. 2) The split
+plane should be chosen in a way that the ray sets are disjoint, i.e.,
+the number of rays contributing to more than one cell should be
+minimized. 3) For BSP trees, the split plane should be aligned with
+some scene geometry which is large enough to contribute a lot of
+occlusion power. This criterion can be naturally combined with the
+second one.  As termination criterion we can choose the minimum PVS /
+piercing ray size or the maximal tree depth. An illustration of
+a good and a bad choice of a split plane is given in figure~\ref{fig:viewcell_part}.
+\end{itemize}
+
+
+
+Some statistics about the first two methods (i.e., the insertion of the view cells into the BSP tree, 
+and the automatic generation from the scene polygons using a BSP tree subdivision) is given in table~\ref{tab:viewcell_bsp}.
+We used a selection from given view cells for the Vienna scene for the first column,
+the full set for the second column, and the Vienna simple scene geometry for the
+automatic view cell generation. The measurements were conducted on a PC with 3.4GHz 
+P4 CPU.
+
+% In the future we aim to extend the view cell construction by using
+% feedback from the PVS computation: the view cells which contain many
+% visibility changes will be subdivided further and neighboring view
+% cells with similar PVSs will be merged. We want to gain a more precise
+% information about visibility by selectively storing rays with the
+% view cells and computing visibility statistics for subsets of rays
+% which intersect subregions of the given view cell.
+
+\subsection{From-Object Based Visibility}
+
+ Our framework is based on the idea of sampling visibility by casting
+casting rays through the scene and collecting their contributions. A
+visibility sample is computed by casting a ray from an object towards
+the view cells and computing the nearest intersection with the scene
+objects. All view cells pierced by the ray segment can the object and
+thus the object can be added to their PVS. If the ray is terminated at
+another scene object the PVS of the pierced view cells can also be
+extended by this terminating object. Thus a single ray can make a
+number of contributions to the progressively computed PVSs. A ray
+sample piercing $n$ view cells which is bound by two distinct objects
+contributes by at most $2*n$ entries to the current PVSs. Apart from
+this performance benefit there is also a benefit in terms of the
+sampling density: Assuming that the view cells are usually much larger
+than the objects (which is typically the case) starting the sampling
+deterministically from the objects increases the probability of small
+objects being captured in the PVS.
+
+At this phase of the computation we not only start the samples from
+the objects, but we also store the PVS information centered at the
+objects. Instead of storing a PVS consisting of objects visible from
+view cells, every object maintains a PVS consisting of potentially
+visible view cells. While these representations contain exactly the
+same information as we shall see later the object centered PVS is
+better suited for the importance sampling phase as well as the
+visibility verification phase.
+
+
+\subsection{Naive Randomized Sampling}
+
+The naive global visibility sampling works as follows: At every pass
+of the algorithm visits scene objects sequentially. For every scene
+object we randomly choose a point on its surface. Then a ray is cast
+from the selected point according to the randomly chosen direction
+(see Figure~\ref{fig:sampling}). We use a uniform distribution of the
+ray directions with respect to the half space given by the surface
+normal. Using this strategy the samples at deterministically placed at
+every object, with a randomization of the location on the object
+surface. The uniformly distributed direction is a simple and fast
+strategy to gain initial visibility information.
+
+\begin{figure}%[htb]
+  \centerline{
+    \includegraphics[width=0.4\textwidth, draft=\DRAFTFIGS]{figs/sampling}
+  }
+  
+%\label{tab:online_culling_example}
+  \caption{Three objects and a set of view cells corresponding to leaves
+    of an axis aligned BSP tree. The figure depicts several random
+    samples cast from a selected object (shown in red). Note that most
+    samples contribute to more view cells.  }
+  \label{fig:sampling}
+\end{figure}
+
+The described algorithm accounts for the irregular distribution of the
+objects: more samples are placed at locations containing more
+objects. Additionally every object is sampled many times depending on
+the number of passes in which this sampling strategy is applied. This
+increases the chance of even a small object being captured in the PVS
+of the view cells from which it is visible.
+
+Each ray sample can contribute by a associating a number of view cells
+with the object from which the sample was cast. If the ray does not
+leave the scene it also contributes by associating the pierced view
+cells to the terminating object. Thus as the ray samples are cast we
+can measure the average contribution of a certain number of most
+recent samples.  If this contribution falls below a predefined
+constant we move on to the next sampling strategy, which aim to
+discover more complicated visibility relations.
+ 
+
+\subsection{Accounting for View Cell Distribution}
+
+ The first modification to the basic algorithm accounts for irregular
+distribution of the view cells. Such a case is common for example in
+urban scenes where the view cells are mostly distributed in a
+horizontal direction and more view cells are placed at denser parts of
+the city. The modification involves replacing the uniformly
+distributed ray direction by directions distributed according to the
+local view cell directional density. This means placing more samples at
+directions where more view cells are located: We select a random
+view cell which lies at the half space given by the surface normal at the
+chosen point. We pick a random point inside the view cell and cast a
+ray towards this point.
+
+
+\subsection{Accounting for Visibility Events}
+
+ Visibility events correspond to appearance and disappearance of
+objects with respect to a moving view point. In polygonal scenes the
+events defined by event surfaces defined by three distinct scene
+edges. Depending on the edge configuration we distinguish between
+vertex-edge events (VE) and triple edge (EEE) events. The VE surfaces
+are planar planes whereas the EEE are in general quadratic surfaces.
+
+ To account for these events we explicitly place samples passing by
+the object edges which are directed to edges and/or vertices of other
+objects. In this way we perform stochastic sampling at boundaries of
+the visibility complex~\cite{Durand:1996:VCN}.
+
+The first strategy starts similarly to the above described sampling
+methods: we randomly select an object and a point on its surface. Then
+we randomly pickup an object from its PVS. If we have mesh
+connectivity information we select a random silhouette edge from this
+object and cast a sample which is tangent to that object at the
+selected edge.
+
+The second strategy works as follows: we randomly pickup two objects
+which are likely to see each other. Then we determine a ray which is
+tangent to both objects. For simple meshes the determination of such
+rays can be computed geometrically, for more complicated ones it is
+based again on random sampling. The selection of the two objects works
+as follows: first we randomly select the first object and a random
+non-empty view cell for which we know that it can see the object. Then
+we randomly select an object associated with that view cell as the
+second object.
+
+
+ 
+\section{Summary}
+
+This chapter described the global visibility sampling algorithm which
+forms a core of the visibility preprocessing framework. The global
+visibility sampling computes aggressive visibility, i.e. it computes a
+subset of the exact PVS for each view cell. The aggressive sampling
+provides a fast progressive solution and thus it can be easily
+integrated into the game development cycle. The sampling itself
+involves several strategies which aim to progressively discover more
+visibility relationships in the scene.
+
+The methods presented in this chapter give a good initial estimate
+about visibility in the scene, which can be verified by the mutual
+visibility algorithms described in the next chapter.
+
+
+
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pullup.txt
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pullup.txt	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pullup.txt	(revision 243)
@@ -0,0 +1,11 @@
+void     NV_PureKdTreeRenderAction::KdTreeNode::MakeParentsVisible() 
+{ 
+     register KdTreeNode * pTempNode     = m_pParent; 
+ 
+     while ((pTempNode) && (!pTempNode->m_bVisible)) 
+     { 
+          //pTempNode->m_bCut          = FALSE; 
+          pTempNode->m_bVisible     = TRUE; 
+          pTempNode     = pTempNode->m_pParent; 
+     } 
+} 
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/actualcode.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/actualcode.tex	(revision 251)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/actualcode.tex	(revision 251)
@@ -0,0 +1,105 @@
+\input default.mac
+\keya{}\leftline{void\symbol{}\ \normal{}NV_PureKdTreeRenderAction\symbol{}::\normal{}TraverseNode\symbol{}(\normal{}KdTreeNode\symbol{}\ *\normal{}pCurrNode\symbol{}) }
+\leftline{ 1:\ \ \ $\{$ }
+\leftline{ 2:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}pCurrNode\symbol{}->\normal{}m_bLeaf\symbol{}) }
+\leftline{ 3:\ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{ 4:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \comment{}//\ this\ has\ a\ frame\ counter\ to\ prevent\ double\ rendering }
+\symbol{}\leftline{ 5:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}pCurrNode\symbol{}->\normal{}RenderGeometry\symbol{}(); }
+\leftline{ 6:\ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{ 7:\ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{} }
+\leftline{ 8:\ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{ 9:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}Point3f\symbol{}\ \ \ \ \ \ \normal{}ptViewpoint\symbol{}\ \ =\ \normal{}GetState\symbol{}()->\normal{}GetCamera\symbol{}()->\normal{}GetPosition\symbol{}(); }
+\leftline{10:\ \ \  }
+\leftline{11:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \comment{}//----\ insert\ the\ children\ in\ the\ reverse\ order\ as\ they\ shall\ be\ dealt\ with }
+\symbol{}\leftline{12:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}ptViewpoint\symbol{}[\normal{}pCurrNode\symbol{}->\normal{}m_iSplitAxis\symbol{}]\ >\ \normal{}pCurrNode\symbol{}->\normal{}m_fSplitValue\symbol{}) }
+\leftline{13:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{14:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}m_TraverseStack.Push\symbol{}(\normal{}pCurrNode\symbol{}->\normal{}m_pLeftChild\symbol{}); }
+\leftline{15:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}m_TraverseStack.Push\symbol{}(\normal{}pCurrNode\symbol{}->\normal{}m_pRightChild\symbol{}); }
+\leftline{16:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{17:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{} }
+\leftline{18:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{19:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}m_TraverseStack.Push\symbol{}(\normal{}pCurrNode\symbol{}->\normal{}m_pRightChild\symbol{}); }
+\leftline{20:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}m_TraverseStack.Push\symbol{}(\normal{}pCurrNode\symbol{}->\normal{}m_pLeftChild\symbol{}); }
+\leftline{21:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{22:\ \ \ \ \ \ \ \ \ \ $\}$\ \comment{}//\ no\ leaf }
+\symbol{}\leftline{23:\ \ \ $\}$ }
+\leftline{24:\ \ \  }
+\leftline{25:\ \ \  }
+\comment{}\leftline{26:\ \ \ //----\ the\ actual\ render\ algorithm }
+\keya{}\leftline{27:\ \ \ void\symbol{}\ \ \ \normal{}NV_PureKdTreeRenderAction\symbol{}::\normal{}RenderSorted\symbol{}() }
+\leftline{28:\ \ \ $\{$ }
+\leftline{29:\ \ \ \ \ \ \ \ \ \ \normal{}KdTreeNode\symbol{}\ \ \ \ *\ \normal{}pCurrNode\symbol{}; }
+\leftline{30:\ \ \ \ \ \ \ \ \ \ \keya{}int\symbol{}\ \ \ \ \ \ \normal{}iTestCounter\symbol{}\ \ \ \ =\ \normal{}0\symbol{}; }
+\leftline{31:\ \ \  }
+\leftline{32:\ \ \ \ \ \ \ \ \ \ \comment{}//----\ clear\ the\ two\ needed\ datastructures }
+\symbol{}\leftline{33:\ \ \ \ \ \ \ \ \ \ \normal{}m_TraverseStack.Clear\symbol{}(); }
+\leftline{34:\ \ \ \ \ \ \ \ \ \ \normal{}m_NVTestQueue.Clear\symbol{}(); }
+\leftline{35:\ \ \  }
+\leftline{36:\ \ \ \ \ \ \ \ \ \ \comment{}//----\ generate\ the\ occlusion\ queries }
+\symbol{}\leftline{37:\ \ \ \ \ \ \ \ \ \ \normal{}glGenOcclusionQueriesNV\symbol{}(\normal{}m_nNumNodes\symbol{},\ \normal{}m_pOcclusionQueries\symbol{}); }
+\leftline{38:\ \ \  }
+\leftline{39:\ \ \ \ \ \ \ \ \ \ \comment{}//----\ take\ the\ root\ as\ a\ start }
+\symbol{}\leftline{40:\ \ \ \ \ \ \ \ \ \ \normal{}m_pKdTree\symbol{}->\normal{}m_iPlaneMask\symbol{}\ \ \ \ \ \ \ =\ \normal{}0x3f\symbol{};\ \ \ \ \ \ \ \comment{}//\ =\ 0011\ 1111\ which\ means\ that\ at\ the\ beginning,\ all\ six\ planes\ have\ to\ frustum\ culled }
+\symbol{}\leftline{41:\ \ \ \ \ \ \ \ \ \ \normal{}m_TraverseStack.Push\symbol{}(\normal{}m_pKdTree\symbol{}); }
+\leftline{42:\ \ \  }
+\leftline{43:\ \ \ \ \ \ \ \ \ \ \comment{}//----\ the\ loop }
+\symbol{}\leftline{44:\ \ \ \ \ \ \ \ \ \ \keya{}while\symbol{}\ ((!\normal{}m_TraverseStack.Empty\symbol{}())\ ||\ (!\normal{}m_NVTestQueue.Empty\symbol{}())) }
+\leftline{45:\ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{46:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}bool\symbol{}\ \normal{}result_available\symbol{}; }
+\leftline{47:\ \ \  }
+\leftline{48:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}while\symbol{}\ (!\normal{}m_NVTestQueue.Empty\symbol{}()\ \&\&\  }
+\leftline{49:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\normal{}m_TraverseStack.Empty\symbol{}()\ || }
+\leftline{50:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\normal{}result_available\symbol{}\ =\ \normal{}ResultAvailable\symbol{}(\normal{}m_NVTestQueue.GetFirst\symbol{}()->\normal{}m_nTest\symbol{})) }
+\leftline{51:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ) }
+\leftline{52:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ) }
+\leftline{53:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{54:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}pCurrNode\symbol{}\ =\ \normal{}m_NVTestQueue.GetFirst\symbol{}();\ \normal{}m_NVTestQueue.RemoveFirst\symbol{}(); }
+\leftline{55:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \  }
+\leftline{56:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \comment{}//\ the\ next\ line\ is\ only\ interesting\ if\ we\ want\ to\ avoid\ double\ rendering\ already\ here: }
+\symbol{}\leftline{57:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \comment{}//bool\ was_visible\ =\ pCurrNode->m_bVisible\ \&\&\ (m_nLastVisitedId\ ==\ (GetCurrentFrame()\ -\ 1)); }
+\symbol{}\leftline{58:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \  }
+\leftline{59:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \comment{}//\ update\ visibility\ classification\ (this\ is\ the\ wait\ variety!) }
+\symbol{}\leftline{60:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}pCurrNode\symbol{}->\normal{}m_bVisible\symbol{}\ =\ \normal{}GetVisiblePixels\symbol{}(\normal{}pCurrNode\symbol{}->\normal{}m_nTest\symbol{})\ >\ \normal{}Settings\symbol{}::\normal{}Global\symbol{}()->\normal{}get_nvocc_pixel_treshold\symbol{}(); }
+\leftline{61:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}pCurrNode\symbol{}->\normal{}m_nLastVisitedId\symbol{}\ =\ \normal{}GetCurrentFrame\symbol{}(); }
+\leftline{62:\ \ \  }
+\leftline{63:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}pCurrNode\symbol{}->\normal{}m_bVisible\symbol{})\ \comment{}//\ \&\&\ !was_visible)\ \ \ \ \ \ //\ note:\ could\ prevent\ double\ rendering\ already\ here! }
+\symbol{}\leftline{64:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{65:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}pCurrNode\symbol{}->\normal{}MakeParentsVisible\symbol{}(); }
+\leftline{66:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}TraverseNode\symbol{}(\normal{}pCurrNode\symbol{}); }
+\leftline{67:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$\ \comment{}//\ visible }
+\symbol{}\leftline{68:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{69:\ \ \  }
+\leftline{70:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \comment{}//----\ the\ second\ part\ manages\ the\ distance\ heap }
+\symbol{}\leftline{71:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (!\normal{}m_TraverseStack.Empty\symbol{}()) }
+\leftline{72:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{73:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \comment{}//----\ get\ the\ element\ with\ the\ lowest\ distance }
+\symbol{}\leftline{74:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}pCurrNode\symbol{}\ \ \ =\ \normal{}m_TraverseStack.Pop\symbol{}();\ \ \ \ \ \ \ \ \ \ \  }
+\leftline{75:\ \ \  }
+\leftline{76:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \comment{}//\ question:\ what\ is\ the\ difference\ if\ we\ do\ frustum\ culling\ only\ after\ setting\ visibility? }
+\symbol{}\leftline{77:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}pCurrNode\symbol{}->\normal{}IsWithinViewFrustum\symbol{}()) }
+\leftline{78:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{79:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}bool\symbol{}\ \normal{}was_visible\symbol{}\ =\ \normal{}pCurrNode\symbol{}->\normal{}m_bVisible\symbol{}\ \&\&\ (\normal{}pCurrNode\symbol{}->\normal{}m_nLastVisitedId\symbol{}\ ==\ (\normal{}GetCurrentFrame\symbol{}()\ -\ \normal{}1\symbol{})); }
+\leftline{80:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \  }
+\leftline{81:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \comment{}//\ note:\ this\ is\ actually\ only\ done\ for\ internal\ nodes\ and\ could\ be\ skipped\ for\ leaf\ nodes }
+\symbol{}\leftline{82:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \comment{}//\ in\ which\ case\ leaf\ node\ double\ rendering\ could\ be\ prevented\ here\ (see\ above) }
+\symbol{}\leftline{83:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}pCurrNode\symbol{}->\normal{}m_bVisible\symbol{}\ =\ \normal{}FALSE\symbol{}; }
+\leftline{84:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}pCurrNode\symbol{}->\normal{}m_nLastVisitedId\symbol{}\ =\ \normal{}GetCurrentFrame\symbol{}(); }
+\leftline{85:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \  }
+\leftline{86:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}pCurrNode\symbol{}->\normal{}m_bLeaf\symbol{}\ ||\ !\normal{}was_visible\symbol{}) }
+\leftline{87:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{88:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}pCurrNode\symbol{}->\normal{}m_pSuccessor\symbol{}->\normal{}IssueNVTest\symbol{}(\normal{}m_pOcclusionQueries\symbol{}[\normal{}iTestCounter\symbol{}]))\ ++\normal{}iTestCounter\symbol{}; }
+\leftline{89:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}m_NVTestQueue.Append\symbol{}(\normal{}pCurrNode\symbol{}); }
+\leftline{90:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{91:\ \ \  }
+\leftline{92:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}was_visible\symbol{}) }
+\leftline{93:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{94:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}TraverseNode\symbol{}(\normal{}pCurrNode\symbol{}); }
+\leftline{95:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{96:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{97:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{98:\ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{99:\ \ \  }
+\leftline{100:\ \ \ \ \ \ \ \ \ \ \comment{}//----\ tell\ the\ driver\ that\ the\ occlusion\ queries\ won't\ be\ needed\ any\ more }
+\symbol{}\leftline{101:\ \ \ \ \ \ \ \ \ \ \normal{}glDeleteOcclusionQueriesNV\symbol{}(\normal{}m_nNumNodes\symbol{},\ \normal{}m_pOcclusionQueries\symbol{}); }
+\leftline{102:\ \ \  }
+\leftline{103:\ \ \ $\}$
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/c2tex.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/c2tex.tex	(revision 269)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/c2tex.tex	(revision 269)
@@ -0,0 +1,532 @@
+\input default.mac
+\symbol{}\leftline{ }
+\comment{}\leftline{ 1:\ \ \ /************************************************************************** }
+\leftline{ 2:\ \ \ c2tex\ -\ Konverze\ C++\ do\ TeXu }
+\leftline{ 3:\ \ \ Jiri\ Bittner,\ Cerven\ 1996 }
+\leftline{ 4:\ \ \ **************************************************************************/\symbol{} }
+\leftline{ 5:\ \ \  }
+\keyb{}\leftline{ 6:\ \ \ \#include\symbol{}\ <\normal{}stdlib.h\symbol{}> }
+\keyb{}\leftline{ 7:\ \ \ \#include\symbol{}\ <\normal{}stdio.h\symbol{}> }
+\keyb{}\leftline{ 8:\ \ \ \#include\symbol{}\ <\normal{}string.h\symbol{}> }
+\keyb{}\leftline{ 9:\ \ \ \#include\symbol{}\ <\normal{}iostream.h\symbol{}> }
+\keyb{}\leftline{10:\ \ \ \#include\symbol{}\ <\normal{}fstream.h\symbol{}> }
+\leftline{11:\ \ \  }
+\leftline{12:\ \ \  }
+\keyb{}\leftline{13:\ \ \ \#define\symbol{}\ \ \ \ \ \ \ \ \normal{}KEYWORD1\symbol{}\ \ \ \ \ \ \ \normal{}1\symbol{}\ \ \ \ \ \comment{}//\ kody\ pro\ jednotlive\ znacky }
+\keyb{}\leftline{14:\ \ \ \#define\symbol{}\ \ \ \ \ \ \ \ \normal{}KEYWORD2\symbol{}\ \ \ \ \ \ \ \normal{}2\symbol{} }
+\keyb{}\leftline{15:\ \ \ \#define\symbol{}\ \ \ \ \ \ \ \ \normal{}SYMBOL\symbol{}\ \ \ \ \ \ \ \ \ \normal{}3\symbol{} }
+\keyb{}\leftline{16:\ \ \ \#define\symbol{}\ \ \ \ \ \ \ \ \normal{}COMMENT\symbol{}\ \ \ \ \ \ \ \ \normal{}4\symbol{} }
+\keyb{}\leftline{17:\ \ \ \#define\symbol{}\ \ \ \ \ \ \ \ \normal{}NORMAL\symbol{}\ \ \ \ \ \ \ \ \ \normal{}5\symbol{} }
+\leftline{18:\ \ \  }
+\keyb{}\leftline{19:\ \ \ \#define\symbol{}\ \ \ \ \ \ \ \ \normal{}WORD\symbol{}\ \ \ \normal{}10\symbol{} }
+\leftline{20:\ \ \  }
+\keyb{}\leftline{21:\ \ \ \#define\symbol{}\ \ \ \ \ \ \ \ \normal{}S_LEN\symbol{}\ \ \normal{}256\symbol{} }
+\leftline{22:\ \ \  }
+\keya{}\leftline{23:\ \ \ int\symbol{}\ \normal{}usePascal\symbol{}=\normal{}0\symbol{}; }
+\leftline{24:\ \ \  }
+\keya{}\leftline{25:\ \ \ char\symbol{}\ \normal{}comment_1b\symbol{}='/',\normal{}comment_2b\symbol{}='*',\normal{}comment_1e\symbol{}='*',\normal{}comment_2e\symbol{}='/'; }
+\leftline{26:\ \ \  }
+\keya{}\leftline{27:\ \ \ class\symbol{}\ \normal{}BaseC\symbol{} }
+\leftline{28:\ \ \ $\{$ }
+\leftline{29:\ \ \  }
+\leftline{30:\ \ \ $\}$; }
+\leftline{31:\ \ \  }
+\leftline{32:\ \ \  }
+\keya{}\leftline{33:\ \ \ typedef\symbol{}\ \keya{}double\symbol{}\ \normal{}Real\symbol{}; }
+\leftline{34:\ \ \  }
+\leftline{35:\ \ \  }
+\keya{}\leftline{36:\ \ \ class\symbol{}\ \normal{}OptionsC\symbol{}\ :\ \keya{}public\symbol{}\ \normal{}BaseC\symbol{} }
+\leftline{37:\ \ \ $\{$ }
+\keya{}\leftline{38:\ \ \ public\symbol{}: }
+\leftline{39:\ \ \  }
+\leftline{40:\ \ \ \ \ \keya{}int\symbol{}\ \ \ \ \normal{}number\symbol{}; }
+\leftline{41:\ \ \ \ \ \keya{}char\symbol{}\ **\normal{}strings\symbol{}; }
+\leftline{42:\ \ \ \ \  }
+\comment{}\leftline{43:\ \ \ //\ \ OptionsC()\ $\{$\ number=0;\ $\}$ }
+\symbol{}\leftline{44:\ \ \ \ \ \normal{}OptionsC\symbol{}(\keya{}int\symbol{}\ \normal{}n\symbol{},\keya{}char\symbol{}\ **\normal{}a\symbol{})\ $\{$\ \normal{}init\symbol{}(\normal{}n\symbol{},\normal{}a\symbol{});\ $\}$ }
+\leftline{45:\ \ \  }
+\leftline{46:\ \ \ \ \ \keya{}void\symbol{}\ \normal{}init\symbol{}(\keya{}int\symbol{}\ \normal{}n\symbol{},\keya{}char\symbol{}\ **\normal{}s\symbol{})\ $\{$\ \normal{}number\symbol{}=\normal{}n\symbol{};\ \normal{}strings\symbol{}=\normal{}s\symbol{};\ $\}$ }
+\leftline{47:\ \ \ \ \ \keya{}int\symbol{}\ \normal{}isOption\symbol{}(\keya{}char\symbol{}\ *\normal{}string\symbol{}); }
+\leftline{48:\ \ \ \ \ \keya{}int\symbol{}\ \normal{}isOption\symbol{}(\keya{}char\symbol{}\ *\normal{}string\symbol{},\keya{}int\symbol{}\ *\normal{}number\symbol{}); }
+\leftline{49:\ \ \ \ \ \keya{}int\symbol{}\ \normal{}getParam\symbol{}(\keya{}char\symbol{}\ *\normal{}s\symbol{},\keya{}int\symbol{}\ \normal{}n\symbol{}=\normal{}1\symbol{}); }
+\leftline{50:\ \ \  }
+\leftline{51:\ \ \ \ \ \keya{}int\symbol{}\ \normal{}getOptionValue\symbol{}(\keya{}char\symbol{}\ *\normal{}string\symbol{},\keya{}int\symbol{}\ *\normal{}result\symbol{}); }
+\leftline{52:\ \ \ \ \ \keya{}int\symbol{}\ \normal{}getOptionValue\symbol{}(\keya{}char\symbol{}\ *\normal{}string\symbol{},\normal{}Real\symbol{}\ *\normal{}r\symbol{}); }
+\leftline{53:\ \ \ \ \ \keya{}int\symbol{}\ \normal{}getOptionValue\symbol{}(\keya{}char\symbol{}\ *\normal{}string\symbol{},\keya{}char\symbol{}\ *\normal{}result\symbol{}); }
+\leftline{54:\ \ \  }
+\leftline{55:\ \ \ $\}$; }
+\leftline{56:\ \ \  }
+\leftline{57:\ \ \  }
+\keya{}\leftline{58:\ \ \ class\symbol{}\ \normal{}LexanC\symbol{}:\ \keya{}public\symbol{}\ \normal{}BaseC\symbol{} }
+\leftline{59:\ \ \ $\{$ }
+\keya{}\leftline{60:\ \ \ public\symbol{}: }
+\normal{}\leftline{61:\ \ \ FILE\symbol{}\ *\normal{}file\symbol{}; }
+\leftline{62:\ \ \  }
+\keya{}\leftline{63:\ \ \ int\symbol{}\ \ \ \ \normal{}nsep\symbol{},\normal{}nkey\symbol{}[\normal{}2\symbol{}]; }
+\keya{}\leftline{64:\ \ \ char\symbol{}\ \ \ *\normal{}separators\symbol{}; }
+\keya{}\leftline{65:\ \ \ char\symbol{}\ \ \ **\normal{}key\symbol{}[\normal{}2\symbol{}]; }
+\leftline{66:\ \ \  }
+\normal{}\leftline{67:\ \ \ LexanC\symbol{}()$\{$\normal{}init\symbol{}("\normal{}default.lex\symbol{}");$\}$ }
+\leftline{68:\ \ \  }
+\keya{}\leftline{69:\ \ \ int\symbol{}\ \ \ \ \normal{}isSeparator\symbol{}(\keya{}int\symbol{}\ \normal{}c\symbol{})$\{$\ \keya{}return\symbol{}\ \normal{}strchr\symbol{}(\normal{}separators\symbol{},\normal{}c\symbol{})!=\normal{}NULL\symbol{};\ $\}$ }
+\keya{}\leftline{70:\ \ \ int\symbol{}\ \ \ \ \normal{}isKey\symbol{}(\keya{}char\symbol{}\ *\normal{}s\symbol{}); }
+\leftline{71:\ \ \  }
+\keya{}\leftline{72:\ \ \ int\symbol{}\ \ \ \ \normal{}init\symbol{}(\keya{}const\symbol{}\ \keya{}char\symbol{}\ *\normal{}lexname\symbol{}); }
+\keya{}\leftline{73:\ \ \ int\symbol{}\ \ \ \ \normal{}open\symbol{}(\keya{}const\symbol{}\ \keya{}char\symbol{}\ *\normal{}filename\symbol{}); }
+\leftline{74:\ \ \  }
+\keya{}\leftline{75:\ \ \ int\symbol{}\ \ \ \ \normal{}readWord\symbol{}(\normal{}FILE\symbol{}\ *\normal{}f\symbol{},\keya{}char\symbol{}\ *\normal{}string\symbol{}); }
+\leftline{76:\ \ \  }
+\keya{}\leftline{77:\ \ \ int\symbol{}\ \ \ \ \normal{}read\symbol{}(\keya{}char\symbol{}\ *\normal{}string\symbol{}); }
+\keya{}\leftline{78:\ \ \ void\symbol{}\ \ \ \normal{}close\symbol{}()$\{$\normal{}fclose\symbol{}(\normal{}file\symbol{});$\}$ }
+\leftline{79:\ \ \  }
+\keya{}\leftline{80:\ \ \ virtual\symbol{}\ \ \ \ \ \ \ \ \normal{}ostream\symbol{}\&\ \keya{}operator\symbol{}>>(\normal{}ostream\symbol{}\ \&\normal{}s\symbol{})\ $\{$\  }
+\leftline{81:\ \ \ \ \ \ \ \ \ \ \normal{}s\symbol{}<<\normal{}nsep\symbol{}<<"\\normal{}n\symbol{}"<<\normal{}nkey\symbol{}[\normal{}0\symbol{}]<<"\\normal{}n\symbol{}"<<\normal{}nkey\symbol{}[\normal{}1\symbol{}]<<"\\normal{}n\symbol{}"; }
+\leftline{82:\ \ \ \ \ \ \ \ \ \ \keya{}return\symbol{}\ \normal{}s\symbol{}; }
+\leftline{83:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{84:\ \ \ \~{}\normal{}LexanC\symbol{}()$\{$\normal{}fclose\symbol{}(\normal{}file\symbol{});$\}$ }
+\leftline{85:\ \ \ $\}$; }
+\leftline{86:\ \ \  }
+\keya{}\leftline{87:\ \ \ class\symbol{}\ \normal{}TexC\symbol{}:\ \keya{}public\symbol{}\ \normal{}BaseC\symbol{} }
+\leftline{88:\ \ \ $\{$ }
+\keya{}\leftline{89:\ \ \ public\symbol{}: }
+\leftline{90:\ \ \ \ \ \normal{}FILE\symbol{}\ *\normal{}file\symbol{}; }
+\leftline{91:\ \ \ \ \ \keya{}int\symbol{}\ \normal{}numbers\symbol{}; }
+\leftline{92:\ \ \ \ \ \keya{}int\symbol{}\ \normal{}lnumber\symbol{}; }
+\leftline{93:\ \ \ \ \  }
+\leftline{94:\ \ \ \ \ \normal{}TexC\symbol{}()$\{$\normal{}numbers\symbol{}=\normal{}0\symbol{};\ \normal{}init\symbol{}("\normal{}output.tex\symbol{}");$\}$ }
+\leftline{95:\ \ \ \ \ \normal{}TexC\symbol{}(\keya{}int\symbol{}\ \normal{}n\symbol{},\ \keya{}const\symbol{}\ \keya{}char\symbol{}\ *\normal{}s\symbol{})$\{$ }
+\leftline{96:\ \ \ \ \ \ \ \normal{}lnumber\symbol{}=\normal{}0\symbol{}; }
+\leftline{97:\ \ \ \ \ \ \ \normal{}numbers\symbol{}=\normal{}n\symbol{};\ \normal{}init\symbol{}(\normal{}s\symbol{});$\}$ }
+\leftline{98:\ \ \ \ \  }
+\leftline{99:\ \ \ \ \ \keya{}int\symbol{}\ \normal{}init\symbol{}(\keya{}const\symbol{}\ \keya{}char\symbol{}\ *\normal{}filename\symbol{}); }
+\leftline{100:\ \ \ \ \ \keya{}int\symbol{}\ \normal{}write\symbol{}(\keya{}const\symbol{}\ \keya{}int\symbol{}\ \normal{}code\symbol{},\keya{}const\symbol{}\ \keya{}char\symbol{}\ *\normal{}string\symbol{}); }
+\leftline{101:\ \ \ \ \ \~{}\normal{}TexC\symbol{}()\ $\{$\ \comment{}/*\ fprintf(file,"\n\\bye\n");\ */\symbol{}\ \normal{}fclose\symbol{}(\normal{}file\symbol{});$\}$ }
+\leftline{102:\ \ \  }
+\leftline{103:\ \ \ $\}$; }
+\leftline{104:\ \ \  }
+\leftline{105:\ \ \  }
+\leftline{106:\ \ \  }
+\leftline{107:\ \ \  }
+\leftline{108:\ \ \  }
+\leftline{109:\ \ \  }
+\leftline{110:\ \ \  }
+\leftline{111:\ \ \  }
+\keya{}\leftline{112:\ \ \ int\symbol{}\ \normal{}OptionsC\symbol{}::\normal{}isOption\symbol{}(\keya{}char\symbol{}\ *\normal{}s\symbol{}) }
+\leftline{113:\ \ \ $\{$ }
+\keya{}\leftline{114:\ \ \ int\symbol{}\ \normal{}found\symbol{}=\normal{}0\symbol{}; }
+\leftline{115:\ \ \ \  }
+\leftline{116:\ \ \ \ \keya{}for\symbol{}\ (\keya{}int\symbol{}\ \normal{}i\symbol{}=\normal{}1\symbol{};\normal{}i\symbol{}<\normal{}number\symbol{};\normal{}i\symbol{}++) }
+\leftline{117:\ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}strcmp\symbol{}(\normal{}s\symbol{},\normal{}strings\symbol{}[\normal{}i\symbol{}])==\normal{}0\symbol{})\ $\{$\ \normal{}found\symbol{}\ =\ \normal{}i\symbol{};\ \keya{}break\symbol{};$\}$ }
+\leftline{118:\ \ \  }
+\leftline{119:\ \ \ \ \keya{}return\symbol{}\ \normal{}found\symbol{}; }
+\leftline{120:\ \ \ $\}$ }
+\leftline{121:\ \ \  }
+\keya{}\leftline{122:\ \ \ int\symbol{}\ \normal{}OptionsC\symbol{}::\normal{}isOption\symbol{}(\keya{}char\symbol{}\ *\normal{}s\symbol{},\keya{}int\symbol{}\ *\normal{}n\symbol{}) }
+\leftline{123:\ \ \ $\{$ }
+\keya{}\leftline{124:\ \ \ int\symbol{}\ \normal{}found\symbol{}=\normal{}0\symbol{}; }
+\leftline{125:\ \ \  }
+\keya{}\leftline{126:\ \ \ for\symbol{}\ (\keya{}int\symbol{}\ \normal{}i\symbol{}=\normal{}1\symbol{};\normal{}i\symbol{}<\normal{}number\symbol{};\normal{}i\symbol{}++) }
+\leftline{127:\ \ \ \ \ \keya{}if\symbol{}\ (\normal{}strcmp\symbol{}(\normal{}s\symbol{},\normal{}strings\symbol{}[\normal{}i\symbol{}])==\normal{}0\symbol{}) }
+\leftline{128:\ \ \ \ \ \ \ $\{$ }
+\leftline{129:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}i\symbol{}+\normal{}1\symbol{}<\normal{}number\symbol{}) }
+\leftline{130:\ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{131:\ \ \ \ \ \ \ \ \ \ \ \ *\normal{}n\symbol{}=\normal{}atoi\symbol{}(\normal{}strings\symbol{}[\normal{}i\symbol{}+\normal{}1\symbol{}]); }
+\leftline{132:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}found\symbol{}\ =\ \normal{}i\symbol{}; }
+\leftline{133:\ \ \ \ \ \ \ \ \ \ \ \ \keya{}break\symbol{}; }
+\leftline{134:\ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{135:\ \ \ \ \ \ \ $\}$ }
+\leftline{136:\ \ \  }
+\keya{}\leftline{137:\ \ \ return\symbol{}\ \normal{}found\symbol{}; }
+\leftline{138:\ \ \ $\}$ }
+\leftline{139:\ \ \  }
+\leftline{140:\ \ \  }
+\comment{}\leftline{141:\ \ \ //\ search\ for\ occurence\ of\ non-option }
+\keya{}\leftline{142:\ \ \ int\symbol{}\ \normal{}OptionsC\symbol{}::\normal{}getParam\symbol{}(\keya{}char\symbol{}\ *\normal{}s\symbol{},\keya{}int\symbol{}\ \normal{}n\symbol{}) }
+\leftline{143:\ \ \ $\{$ }
+\keya{}\leftline{144:\ \ \ int\symbol{}\ \normal{}i\symbol{},\normal{}k\symbol{}=\normal{}1\symbol{},\normal{}found\symbol{}=\normal{}0\symbol{}; }
+\leftline{145:\ \ \  }
+\keya{}\leftline{146:\ \ \ for\symbol{}\ (\normal{}i\symbol{}=\normal{}1\symbol{};\normal{}i\symbol{}<\normal{}number\symbol{};\normal{}i\symbol{}++) }
+\leftline{147:\ \ \ \ \ \keya{}if\symbol{}\ (\normal{}strings\symbol{}[\normal{}i\symbol{}][\normal{}0\symbol{}]!='-') }
+\leftline{148:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}k\symbol{}==\normal{}n\symbol{})\ $\{$\ \normal{}found\symbol{}=\normal{}1\symbol{};\ \keya{}break\symbol{};$\}$ }
+\leftline{149:\ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{} }
+\leftline{150:\ \ \ \ \ \ \ \ \ \ \ \normal{}k\symbol{}++; }
+\leftline{151:\ \ \  }
+\keya{}\leftline{152:\ \ \ if\symbol{}\ (\normal{}found\symbol{})\ \normal{}strcpy\symbol{}(\normal{}s\symbol{},\normal{}strings\symbol{}[\normal{}i\symbol{}]); }
+\leftline{153:\ \ \  }
+\keya{}\leftline{154:\ \ \ return\symbol{}\ \normal{}found\symbol{}; }
+\leftline{155:\ \ \ $\}$ }
+\leftline{156:\ \ \  }
+\leftline{157:\ \ \  }
+\leftline{158:\ \ \  }
+\keya{}\leftline{159:\ \ \ int\symbol{}\ \normal{}OptionsC\symbol{}::\normal{}getOptionValue\symbol{}(\keya{}char\symbol{}\ *\normal{}s\symbol{},\keya{}int\symbol{}\ *\normal{}result\symbol{}) }
+\leftline{160:\ \ \ $\{$ }
+\keya{}\leftline{161:\ \ \ int\symbol{}\ \normal{}found\symbol{}=\normal{}0\symbol{}; }
+\keya{}\leftline{162:\ \ \ char\symbol{}\ *\normal{}pp\symbol{}; }
+\leftline{163:\ \ \  }
+\keya{}\leftline{164:\ \ \ for\symbol{}\ (\keya{}int\symbol{}\ \normal{}i\symbol{}=\normal{}1\symbol{};\normal{}i\symbol{}<\normal{}number\symbol{};\normal{}i\symbol{}++) }
+\leftline{165:\ \ \ \ \ $\{$ }
+\leftline{166:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}strstr\symbol{}(\normal{}strings\symbol{}[\normal{}i\symbol{}],\normal{}s\symbol{})) }
+\leftline{167:\ \ \ \ \ \ \ $\{$ }
+\leftline{168:\ \ \ \ \ \ \ \ \ \normal{}pp\symbol{}=\normal{}strings\symbol{}[\normal{}i\symbol{}]+\normal{}strlen\symbol{}(\normal{}s\symbol{}); }
+\leftline{169:\ \ \ \ \ \ \ \ \ *\normal{}result\symbol{}=\normal{}atoi\symbol{}(\normal{}pp\symbol{}); }
+\leftline{170:\ \ \ \ \ \ \ \ \ \normal{}found\symbol{}\ =\ \normal{}i\symbol{}; }
+\leftline{171:\ \ \ \ \ \ \ \ \ \keya{}break\symbol{}; }
+\leftline{172:\ \ \ \ \ \ \ $\}$ }
+\leftline{173:\ \ \ \ \ $\}$ }
+\keya{}\leftline{174:\ \ \ return\symbol{}\ \normal{}found\symbol{}; }
+\leftline{175:\ \ \ $\}$ }
+\leftline{176:\ \ \  }
+\keya{}\leftline{177:\ \ \ int\symbol{} }
+\normal{}\leftline{178:\ \ \ OptionsC\symbol{}::\normal{}getOptionValue\symbol{}(\keya{}char\symbol{}\ *\normal{}s\symbol{},\normal{}Real\symbol{}\ *\normal{}result\symbol{}) }
+\leftline{179:\ \ \ $\{$ }
+\keya{}\leftline{180:\ \ \ int\symbol{}\ \normal{}found\symbol{}=\normal{}0\symbol{}; }
+\keya{}\leftline{181:\ \ \ char\symbol{}\ *\normal{}pp\symbol{}; }
+\leftline{182:\ \ \  }
+\keya{}\leftline{183:\ \ \ for\symbol{}\ (\keya{}int\symbol{}\ \normal{}i\symbol{}=\normal{}1\symbol{};\normal{}i\symbol{}<\normal{}number\symbol{};\normal{}i\symbol{}++) }
+\leftline{184:\ \ \ \ \ $\{$ }
+\leftline{185:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}strstr\symbol{}(\normal{}strings\symbol{}[\normal{}i\symbol{}],\normal{}s\symbol{})) }
+\leftline{186:\ \ \ \ \ \ \ $\{$ }
+\leftline{187:\ \ \ \ \ \ \ \ \ \normal{}pp\symbol{}=\normal{}strings\symbol{}[\normal{}i\symbol{}]+\normal{}strlen\symbol{}(\normal{}s\symbol{}); }
+\leftline{188:\ \ \ \ \ \ \ \ \ *\normal{}result\symbol{}=\normal{}atof\symbol{}(\normal{}pp\symbol{}); }
+\leftline{189:\ \ \ \ \ \ \ \ \ \normal{}found\symbol{}\ =\ \normal{}i\symbol{}; }
+\leftline{190:\ \ \ \ \ \ \ \ \ \keya{}break\symbol{}; }
+\leftline{191:\ \ \ \ \ \ \ $\}$ }
+\leftline{192:\ \ \ \ \ $\}$ }
+\keya{}\leftline{193:\ \ \ return\symbol{}\ \normal{}found\symbol{}; }
+\leftline{194:\ \ \ $\}$ }
+\leftline{195:\ \ \  }
+\keya{}\leftline{196:\ \ \ int\symbol{}\ \normal{}OptionsC\symbol{}::\normal{}getOptionValue\symbol{}(\keya{}char\symbol{}\ *\normal{}s\symbol{},\keya{}char\symbol{}\ *\normal{}result\symbol{}) }
+\leftline{197:\ \ \ $\{$ }
+\keya{}\leftline{198:\ \ \ int\symbol{}\ \normal{}found\symbol{}=\normal{}0\symbol{}; }
+\keya{}\leftline{199:\ \ \ char\symbol{}\ *\normal{}pp\symbol{}; }
+\leftline{200:\ \ \  }
+\keya{}\leftline{201:\ \ \ for\symbol{}\ (\keya{}int\symbol{}\ \normal{}i\symbol{}=\normal{}1\symbol{};\normal{}i\symbol{}<\normal{}number\symbol{};\normal{}i\symbol{}++) }
+\leftline{202:\ \ \ \ \ $\{$ }
+\leftline{203:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}strstr\symbol{}(\normal{}strings\symbol{}[\normal{}i\symbol{}],\normal{}s\symbol{})) }
+\leftline{204:\ \ \ \ \ \ \ $\{$ }
+\leftline{205:\ \ \ \ \ \ \ \ \ \normal{}pp\symbol{}=\normal{}strings\symbol{}[\normal{}i\symbol{}]+\normal{}strlen\symbol{}(\normal{}s\symbol{}); }
+\leftline{206:\ \ \ \ \ \ \ \ \ \normal{}strcpy\symbol{}(\normal{}result\symbol{},\normal{}pp\symbol{}); }
+\leftline{207:\ \ \ \ \ \ \ \ \ \normal{}found\symbol{}\ =\ \normal{}i\symbol{}; }
+\leftline{208:\ \ \ \ \ \ \ \ \ \keya{}break\symbol{}; }
+\leftline{209:\ \ \ \ \ \ \ $\}$ }
+\leftline{210:\ \ \ \ \ $\}$ }
+\keya{}\leftline{211:\ \ \ return\symbol{}\ \normal{}found\symbol{}; }
+\leftline{212:\ \ \ $\}$ }
+\leftline{213:\ \ \  }
+\leftline{214:\ \ \  }
+\keya{}\leftline{215:\ \ \ int\symbol{}\ \normal{}TexC\symbol{}::\normal{}write\symbol{}(\keya{}const\symbol{}\ \keya{}int\symbol{}\ \normal{}code\symbol{},\keya{}const\symbol{}\ \keya{}char\symbol{}\ *\normal{}string\symbol{}) }
+\leftline{216:\ \ \ $\{$ }
+\keya{}\leftline{217:\ \ \ static\symbol{}\ \keya{}int\symbol{}\ \normal{}line\symbol{}=\normal{}1\symbol{}; }
+\keya{}\leftline{218:\ \ \ static\symbol{}\ \keya{}int\symbol{}\ \normal{}i\symbol{}=\normal{}0\symbol{}; }
+\keya{}\leftline{219:\ \ \ const\symbol{}\ \keya{}char\symbol{}\ *\normal{}sp\symbol{}; }
+\leftline{220:\ \ \  }
+\keya{}\leftline{221:\ \ \ switch\symbol{}(\normal{}code\symbol{})\ $\{$ }
+\leftline{222:\ \ \ \ \  }
+\leftline{223:\ \ \ \ \keya{}case\symbol{}\ \normal{}KEYWORD1\symbol{}\ :\ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\normal{}keya\symbol{}$\{$$\}$");\ \keya{}break\symbol{}; }
+\leftline{224:\ \ \ \ \keya{}case\symbol{}\ \normal{}KEYWORD2\symbol{}\ :\ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\normal{}keyb\symbol{}$\{$$\}$");\ \keya{}break\symbol{}; }
+\leftline{225:\ \ \ \ \keya{}case\symbol{}\ \normal{}COMMENT\symbol{}\ \ :\ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\normal{}comment\symbol{}$\{$$\}$");\ \keya{}break\symbol{}; }
+\leftline{226:\ \ \ \ \keya{}case\symbol{}\ \normal{}SYMBOL\symbol{}\ \ \ :\ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\normal{}symbol\symbol{}$\{$$\}$");\ \keya{}break\symbol{}; }
+\leftline{227:\ \ \ \ \keya{}case\symbol{}\ \normal{}NORMAL\symbol{}\ \ \ :\ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\normal{}normal\symbol{}$\{$$\}$");\ \keya{}break\symbol{}; }
+\leftline{228:\ \ \ $\}$ }
+\leftline{229:\ \ \ \  }
+\leftline{230:\ \ \ \ \keya{}for\symbol{}(\normal{}sp\symbol{}=\normal{}string\symbol{};*\normal{}sp\symbol{}!=\normal{}0\symbol{};\normal{}sp\symbol{}++,\normal{}i\symbol{}++) }
+\leftline{231:\ \ \ \ \ \ $\{$ }
+\leftline{232:\ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}line\symbol{})\ $\{$ }
+\leftline{233:\ \ \ \ \ \ \ \ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\normal{}leftline\symbol{}$\{$");\ \normal{}line\symbol{}=\normal{}0\symbol{}; }
+\leftline{234:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}strstr\symbol{}(\normal{}string\symbol{},\ "\keya{}Algorithm\symbol{}")\ ==\ \normal{}string\symbol{}) }
+\leftline{235:\ \ \ \ \ \ \ \ \ \ \ \normal{}lnumber\symbol{}\ =\ \normal{}0\symbol{}; }
+\leftline{236:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}numbers\symbol{}\ \&\&\ \normal{}lnumber\symbol{}) }
+\leftline{237:\ \ \ \ \ \ \ \ \ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\normal{}\%2d\symbol{}:\\\ \\\ \\\ ",\normal{}lnumber\symbol{}); }
+\leftline{238:\ \ \ \ \ \ \ \ \ \ \normal{}lnumber\symbol{}++; }
+\leftline{239:\ \ \ \ \ \ \ \ $\}$ }
+\leftline{240:\ \ \ \ \ \ \ \  }
+\leftline{241:\ \ \ \ \ \ \ \ \keya{}switch\symbol{}(*\normal{}sp\symbol{})\ $\{$ }
+\leftline{242:\ \ \ \ \ \ \ \ \ \  }
+\keyb{}\leftline{243:\ \ \ \#define\symbol{}\ \normal{}TAB_SIZE\symbol{}\ \ \ \ \ \ \ \normal{}8\symbol{} }
+\leftline{244:\ \ \ \ \ \ \ \ \keya{}case\symbol{}\ '\\normal{}t\symbol{}'\ :\ \ \ \ \ \ \  }
+\leftline{245:\ \ \ \ \ \ \ \ \ \ \comment{}//\ \ \ \ \ \ \ \ \ \ \ fprintf(file,"\\tab");\ break; }
+\symbol{}\leftline{246:\ \ \ \ \ \ \ \ \ \ \keya{}int\symbol{}\ \normal{}n\symbol{},\normal{}j\symbol{}; }
+\leftline{247:\ \ \ \ \ \ \ \ \ \ \normal{}n\symbol{}=((\normal{}i\symbol{}/\normal{}TAB_SIZE\symbol{})+\normal{}1\symbol{})*\normal{}TAB_SIZE\symbol{}-\normal{}i\symbol{}; }
+\leftline{248:\ \ \ \ \ \ \ \ \ \ \keya{}for\symbol{}(\normal{}j\symbol{}=\normal{}0\symbol{};\normal{}j\symbol{}<\normal{}n\symbol{};\normal{}j\symbol{}++)\ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\ "); }
+\leftline{249:\ \ \ \ \ \ \ \ \ \ \keya{}break\symbol{}; }
+\leftline{250:\ \ \ \ \ \ \ \ \ \  }
+\leftline{251:\ \ \ \ \ \ \ \ \ \  }
+\leftline{252:\ \ \ \ \ \ \ \ \keya{}case\symbol{}\ '\\normal{}n\symbol{}':\ \ \ \ \ \ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\ $\}$\\normal{}n\symbol{}"); }
+\leftline{253:\ \ \ \ \ \ \ \ \ \ \normal{}line\symbol{}=\normal{}1\symbol{};\ \normal{}i\symbol{}=\normal{}0\symbol{}; }
+\leftline{254:\ \ \ \ \ \ \ \ \ \ \keya{}break\symbol{}; }
+\leftline{255:\ \ \ \ \ \ \ \ \keya{}case\symbol{}\ '\ '\ :\ \ \ \ \ \ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\ "); }
+\leftline{256:\ \ \ \ \ \ \ \ \ \keya{}break\symbol{}; }
+\leftline{257:\ \ \ \ \ \ \ \ \ \keya{}case\symbol{}\ '\&'\ :\ \ \ \ \ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\&");\ \keya{}break\symbol{}; }
+\leftline{258:\ \ \ \ \ \ \ \ \ \keya{}case\symbol{}\ '\normal{}\#\symbol{}'\ :\ \ \ \ \ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\normal{}\#\symbol{}");\ \keya{}break\symbol{}; }
+\leftline{259:\ \ \ \ \ \ \ \ \ \ \comment{}//\ \ \ \ \ \ case\ '_'\ :\ \ \ \ fprintf(file,"\\_$\{$$\}$");\ break; }
+\symbol{}\leftline{260:\ \ \ \ \ \ \ \ \ \keya{}case\symbol{}\ '\normal{}_\symbol{}'\ :\ \ \ \ \ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\normal{}_\symbol{}");\ \keya{}break\symbol{}; }
+\leftline{261:\ \ \ \ \ \ \ \ \ \keya{}case\symbol{}\ '\^{}'\ :\ \ \ \ \ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\^{}$\{$$\}$");\ \keya{}break\symbol{}; }
+\leftline{262:\ \ \ \ \ \ \ \ \ \keya{}case\symbol{}\ '\normal{}\%\symbol{}'\ :\ \ \ \ \ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\normal{}\%\%\symbol{}");\ \keya{}break\symbol{}; }
+\leftline{263:\ \ \ \ \ \ \ \ \ \keya{}case\symbol{}\ '$\{$'\ :\ \ \ \ \ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\normal{}$\symbol{}\\$\{$\normal{}$\symbol{}");\ \keya{}break\symbol{}; }
+\leftline{264:\ \ \ \ \ \ \ \ \ \keya{}case\symbol{}\ '$\}$'\ :\ \ \ \ \ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\normal{}$\symbol{}\\$\}$\normal{}$\symbol{}");\ \keya{}break\symbol{}; }
+\leftline{265:\ \ \ \ \ \ \ \ \ \ \comment{}//\ \ case\ '\\'\ :\ \ \ \ \ \ \ fprintf(file,"$\\backslash$");\ break; }
+\symbol{}\leftline{266:\ \ \ \ \ \ \ \ \ \ \comment{}//\ \ case\ '$'\ :\ \ \ \ \ \ \ \ fprintf(file,"\\$");\ break; }
+\symbol{}\leftline{267:\ \ \ \ \ \ \ \comment{}//\ \ case\ '<'\ :\ \ \ \ \ fprintf(file,"\\<");\ break; }
+\symbol{}\leftline{268:\ \ \ \ \ \ \ \comment{}//\ \ case\ '>'\ :\ \ \ \ \ fprintf(file,"\\>");\ break; }
+\symbol{}\leftline{269:\ \ \  }
+\leftline{270:\ \ \ \ \ \keya{}case\symbol{}\ '\~{}'\ :\ \ \ \normal{}fprintf\symbol{}(\normal{}file\symbol{},"\\\~{}$\{$$\}$");\ \keya{}break\symbol{}; }
+\leftline{271:\ \ \ \ \ \ \ \ \  }
+\leftline{272:\ \ \ \ \ \ \  }
+\leftline{273:\ \ \ \ \ \keya{}default\symbol{}\ \ :\ \ \ \normal{}fputc\symbol{}(*\normal{}sp\symbol{},\normal{}file\symbol{}); }
+\leftline{274:\ \ \ \ \ $\}$ }
+\leftline{275:\ \ \ $\}$ }
+\keya{}\leftline{276:\ \ \ return\symbol{}\ \normal{}1\symbol{}; }
+\leftline{277:\ \ \ $\}$ }
+\leftline{278:\ \ \  }
+\leftline{279:\ \ \  }
+\keya{}\leftline{280:\ \ \ int\symbol{}\ \ \ \ \normal{}LexanC\symbol{}::\normal{}isKey\symbol{}(\keya{}char\symbol{}\ *\normal{}s\symbol{}) }
+\leftline{281:\ \ \ $\{$ }
+\keya{}\leftline{282:\ \ \ int\symbol{}\ \normal{}i\symbol{},\normal{}j\symbol{}; }
+\leftline{283:\ \ \  }
+\keya{}\leftline{284:\ \ \ for\symbol{}\ (\normal{}i\symbol{}=\normal{}0\symbol{};\normal{}i\symbol{}<\normal{}2\symbol{};\normal{}i\symbol{}++) }
+\leftline{285:\ \ \ \ \keya{}for\symbol{}(\normal{}j\symbol{}=\normal{}0\symbol{};\normal{}j\symbol{}<\normal{}nkey\symbol{}[\normal{}i\symbol{}];\normal{}j\symbol{}++) }
+\leftline{286:\ \ \ \ \ \keya{}if\symbol{}(\normal{}strcmp\symbol{}(\normal{}s\symbol{},\normal{}key\symbol{}[\normal{}i\symbol{}][\normal{}j\symbol{}])==\normal{}0\symbol{})\ \keya{}return\symbol{}\ \normal{}i\symbol{}+\normal{}1\symbol{}; }
+\leftline{287:\ \ \  }
+\keya{}\leftline{288:\ \ \ return\symbol{}\ \normal{}0\symbol{}; }
+\leftline{289:\ \ \ $\}$ }
+\leftline{290:\ \ \  }
+\leftline{291:\ \ \  }
+\keya{}\leftline{292:\ \ \ int\symbol{}\ \ \ \ \normal{}LexanC\symbol{}::\normal{}readWord\symbol{}(\normal{}FILE\symbol{}\ *\normal{}f\symbol{},\keya{}char\symbol{}\ *\normal{}s\symbol{}) }
+\leftline{293:\ \ \ $\{$ }
+\keya{}\leftline{294:\ \ \ int\symbol{}\ \ \ \ \normal{}i\symbol{}=\normal{}0\symbol{}; }
+\keya{}\leftline{295:\ \ \ int\symbol{}\ \ \ \ \normal{}c\symbol{}; }
+\leftline{296:\ \ \  }
+\keya{}\leftline{297:\ \ \ do\symbol{} }
+\leftline{298:\ \ \ $\{$ }
+\leftline{299:\ \ \ \ \ \ \ \ \ \ \normal{}c\symbol{}=\normal{}fgetc\symbol{}(\normal{}f\symbol{}); }
+\leftline{300:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}c\symbol{}==\normal{}EOF\symbol{})\ \keya{}return\symbol{}\ \normal{}0\symbol{}; }
+\leftline{301:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (!\normal{}isSeparator\symbol{}(\normal{}c\symbol{}))\ \keya{}break\symbol{}; }
+\leftline{302:\ \ \ $\}$\ \keya{}while\symbol{}(\normal{}1\symbol{}); }
+\leftline{303:\ \ \  }
+\leftline{304:\ \ \  }
+\keya{}\leftline{305:\ \ \ do\symbol{} }
+\leftline{306:\ \ \ $\{$ }
+\leftline{307:\ \ \ \ \ \ \ \ \ \ \normal{}s\symbol{}[\normal{}i\symbol{}++]=\normal{}c\symbol{}; }
+\leftline{308:\ \ \ \ \ \ \ \ \ \ \normal{}c\symbol{}=\normal{}fgetc\symbol{}(\normal{}f\symbol{}); }
+\leftline{309:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}c\symbol{}==\normal{}EOF\symbol{})\ \keya{}break\symbol{}; }
+\leftline{310:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}isSeparator\symbol{}(\normal{}c\symbol{}))\ \keya{}break\symbol{}; }
+\leftline{311:\ \ \ $\}$\ \keya{}while\symbol{}(\normal{}1\symbol{}); }
+\leftline{312:\ \ \  }
+\normal{}\leftline{313:\ \ \ s\symbol{}[\normal{}i\symbol{}]=\normal{}0\symbol{}; }
+\keya{}\leftline{314:\ \ \ return\symbol{}\ \normal{}1\symbol{}; }
+\leftline{315:\ \ \ $\}$ }
+\leftline{316:\ \ \  }
+\leftline{317:\ \ \  }
+\keya{}\leftline{318:\ \ \ int\symbol{}\ \ \ \ \normal{}LexanC\symbol{}::\normal{}init\symbol{}(\keya{}const\symbol{}\ \keya{}char\symbol{}\ *\normal{}lexname\symbol{}) }
+\leftline{319:\ \ \ $\{$ }
+\normal{}\leftline{320:\ \ \ FILE\symbol{}\ *\normal{}f\symbol{}; }
+\leftline{321:\ \ \  }
+\keya{}\leftline{322:\ \ \ if\symbol{}\ ((\normal{}f\symbol{}=\normal{}fopen\symbol{}(\normal{}lexname\symbol{},"\normal{}rt\symbol{}"))==\normal{}NULL\symbol{})\ \keya{}return\symbol{}\ \normal{}0\symbol{}; }
+\leftline{323:\ \ \  }
+\leftline{324:\ \ \  }
+\keyb{}\leftline{325:\ \ \ \#define\symbol{}\ \ \ \ \ \ \ \ \normal{}NKEY\symbol{}\ \ \normal{}512\symbol{} }
+\leftline{326:\ \ \  }
+\normal{}\leftline{327:\ \ \ separators\symbol{}\ =\ \keya{}new\symbol{}\ \keya{}char\symbol{}[\normal{}256\symbol{}]; }
+\normal{}\leftline{328:\ \ \ key\symbol{}[\normal{}0\symbol{}]\ \ \ =\ \keya{}new\symbol{}\ \keya{}char\symbol{}*[\normal{}NKEY\symbol{}]; }
+\normal{}\leftline{329:\ \ \ key\symbol{}[\normal{}1\symbol{}]\ \ \ =\ \keya{}new\symbol{}\ \keya{}char\symbol{}*[\normal{}NKEY\symbol{}]; }
+\leftline{330:\ \ \  }
+\normal{}\leftline{331:\ \ \ nsep\symbol{}=\normal{}0\symbol{}; }
+\normal{}\leftline{332:\ \ \ separators\symbol{}[\normal{}nsep\symbol{}++]='\ '; }
+\normal{}\leftline{333:\ \ \ separators\symbol{}[\normal{}nsep\symbol{}++]='\\normal{}n\symbol{}'; }
+\normal{}\leftline{334:\ \ \ separators\symbol{}[\normal{}nsep\symbol{}++]='\\normal{}t\symbol{}'; }
+\leftline{335:\ \ \  }
+\normal{}\leftline{336:\ \ \ fgets\symbol{}(\normal{}separators\symbol{}+\normal{}nsep\symbol{},\normal{}100\symbol{},\normal{}f\symbol{}); }
+\normal{}\leftline{337:\ \ \ nsep\symbol{}=\normal{}strlen\symbol{}(\normal{}separators\symbol{}); }
+\leftline{338:\ \ \  }
+\keya{}\leftline{339:\ \ \ int\symbol{}\ \normal{}i\symbol{}=\normal{}0\symbol{},\normal{}type\symbol{}=\normal{}0\symbol{}; }
+\keya{}\leftline{340:\ \ \ char\symbol{}\ \normal{}s\symbol{}[\normal{}64\symbol{}]; }
+\leftline{341:\ \ \  }
+\keya{}\leftline{342:\ \ \ while\symbol{}(\normal{}readWord\symbol{}(\normal{}f\symbol{},\normal{}s\symbol{})) }
+\leftline{343:\ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{344:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}strcmp\symbol{}(\normal{}s\symbol{},"\normal{}KEYWORDS2\symbol{}")==\normal{}0\symbol{})\  }
+\leftline{345:\ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{346:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}printf\symbol{}("\normal{}KEYWORDS2\symbol{}\\normal{}n\symbol{}"); }
+\leftline{347:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}nkey\symbol{}[\normal{}type\symbol{}]=\normal{}i\symbol{};\  }
+\leftline{348:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}type\symbol{}++;\  }
+\leftline{349:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}i\symbol{}=\normal{}0\symbol{};\ \  }
+\leftline{350:\ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{351:\ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{} }
+\leftline{352:\ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{353:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}printf\symbol{}("\normal{}\%s\symbol{}\\normal{}n\symbol{}",\normal{}s\symbol{});\ \ \ \  }
+\leftline{354:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}key\symbol{}[\normal{}type\symbol{}][\normal{}i\symbol{}]=\keya{}new\symbol{}\ \keya{}char\symbol{}[\normal{}strlen\symbol{}(\normal{}s\symbol{})+\normal{}1\symbol{}]; }
+\leftline{355:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}strcpy\symbol{}(\normal{}key\symbol{}[\normal{}type\symbol{}][\normal{}i\symbol{}],\normal{}s\symbol{}); }
+\leftline{356:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}i\symbol{}++; }
+\leftline{357:\ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{358:\ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{359:\ \ \  }
+\normal{}\leftline{360:\ \ \ nkey\symbol{}[\normal{}type\symbol{}]=\normal{}i\symbol{};\  }
+\leftline{361:\ \ \  }
+\normal{}\leftline{362:\ \ \ fclose\symbol{}(\normal{}f\symbol{}); }
+\leftline{363:\ \ \  }
+\leftline{364:\ \ \ \  }
+\keya{}\leftline{365:\ \ \ return\symbol{}\ \normal{}1\symbol{}; }
+\leftline{366:\ \ \ $\}$ }
+\leftline{367:\ \ \  }
+\keya{}\leftline{368:\ \ \ int\symbol{}\ \ \ \ \normal{}LexanC\symbol{}::\normal{}open\symbol{}(\keya{}const\symbol{}\ \keya{}char\symbol{}\ *\normal{}filename\symbol{}) }
+\leftline{369:\ \ \ $\{$ }
+\normal{}\leftline{370:\ \ \ file\symbol{}=\normal{}fopen\symbol{}(\normal{}filename\symbol{},"\normal{}rt\symbol{}"); }
+\keya{}\leftline{371:\ \ \ return\symbol{}\ \normal{}file\symbol{}!=\normal{}NULL\symbol{}; }
+\leftline{372:\ \ \ $\}$ }
+\leftline{373:\ \ \  }
+\keya{}\leftline{374:\ \ \ int\symbol{}\ \ \ \ \normal{}LexanC\symbol{}::\normal{}read\symbol{}(\keya{}char\symbol{}\ *\normal{}s\symbol{}) }
+\leftline{375:\ \ \ $\{$ }
+\keya{}\leftline{376:\ \ \ int\symbol{}\ \ \ \ \normal{}i\symbol{}=\normal{}0\symbol{}; }
+\keya{}\leftline{377:\ \ \ int\symbol{}\ \ \ \ \normal{}type\symbol{}=\normal{}EOF\symbol{}; }
+\keya{}\leftline{378:\ \ \ int\symbol{}\ \ \ \ \normal{}wasSlash\symbol{}=\normal{}0\symbol{}; }
+\keya{}\leftline{379:\ \ \ static\symbol{}\ \keya{}int\symbol{}\ \ \ \ \ \normal{}c\symbol{}=-\normal{}2\symbol{}; }
+\leftline{380:\ \ \  }
+\keya{}\leftline{381:\ \ \ if\symbol{}\ (\normal{}c\symbol{}==-\normal{}2\symbol{})\ \ \normal{}c\symbol{}=\normal{}fgetc\symbol{}(\normal{}file\symbol{}); }
+\leftline{382:\ \ \  }
+\keya{}\leftline{383:\ \ \ if\symbol{}\ (\normal{}c\symbol{}==\normal{}EOF\symbol{})\ \keya{}return\symbol{}\ \normal{}c\symbol{}; }
+\leftline{384:\ \ \  }
+\keya{}\leftline{385:\ \ \ do\symbol{}$\{$ }
+\keya{}\leftline{386:\ \ \ if\symbol{}\ (\normal{}isSeparator\symbol{}(\normal{}c\symbol{}))\ $\{$ }
+\leftline{387:\ \ \ \ \ \ \ \ \ \ \normal{}type\symbol{}=\normal{}SYMBOL\symbol{}; }
+\leftline{388:\ \ \ \ \ \ \ \ \ \ \normal{}s\symbol{}[\normal{}i\symbol{}++]=\normal{}c\symbol{}; }
+\leftline{389:\ \ \  }
+\leftline{390:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}(\normal{}wasSlash\symbol{})\ $\{$ }
+\leftline{391:\ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}(\normal{}c\symbol{}==\normal{}comment_1b\symbol{})\ \ \comment{}//\ line\ comment }
+\symbol{}\leftline{392:\ \ \ \ \ \ \ \ \ \ \ \ \ \ $\{$\  }
+\leftline{393:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}i\symbol{}>\normal{}2\symbol{})\ $\{$\ \normal{}c\symbol{}=\normal{}s\symbol{}[\normal{}i\symbol{}-\normal{}2\symbol{}];\ \normal{}fseek\symbol{}(\normal{}file\symbol{},-\normal{}1\symbol{},\normal{}SEEK_CUR\symbol{});\ \normal{}s\symbol{}[\normal{}i\symbol{}-\normal{}2\symbol{}]=\normal{}0\symbol{};\  }
+\leftline{394:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}return\symbol{}\ \normal{}type\symbol{};\ $\}$ }
+\leftline{395:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}fgets\symbol{}(\normal{}s\symbol{}+\normal{}i\symbol{},\normal{}S_LEN\symbol{},\normal{}file\symbol{});\  }
+\leftline{396:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}c\symbol{}=\normal{}fgetc\symbol{}(\normal{}file\symbol{}); }
+\leftline{397:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}return\symbol{}\ \normal{}COMMENT\symbol{}; }
+\leftline{398:\ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{399:\ \ \ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{} }
+\leftline{400:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}(\normal{}c\symbol{}==\normal{}comment_2b\symbol{})\ \ \comment{}//\ line\ comment }
+\symbol{}\leftline{401:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\{$\  }
+\leftline{402:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}i\symbol{}>\normal{}2\symbol{})\ $\{$\ \normal{}c\symbol{}=\normal{}s\symbol{}[\normal{}i\symbol{}-\normal{}2\symbol{}];\ \normal{}fseek\symbol{}(\normal{}file\symbol{},-\normal{}1\symbol{},\normal{}SEEK_CUR\symbol{});\ \normal{}s\symbol{}[\normal{}i\symbol{}-\normal{}2\symbol{}]=\normal{}0\symbol{};\  }
+\leftline{403:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}return\symbol{}\ \normal{}type\symbol{};\ $\}$ }
+\leftline{404:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}c\symbol{}=\normal{}fgetc\symbol{}(\normal{}file\symbol{}); }
+\leftline{405:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}(\normal{}c\symbol{}!=\normal{}EOF\symbol{}) }
+\leftline{406:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\{$ }
+\leftline{407:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}s\symbol{}[\normal{}i\symbol{}++]=\normal{}c\symbol{}; }
+\leftline{408:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}int\symbol{}\ \normal{}count\symbol{}=\normal{}1\symbol{}; }
+\leftline{409:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}do\symbol{}$\{$ }
+\leftline{410:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}c\symbol{}=\normal{}fgetc\symbol{}(\normal{}file\symbol{}); }
+\leftline{411:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}(\normal{}c\symbol{}==\normal{}EOF\symbol{})\ \keya{}break\symbol{}; }
+\leftline{412:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}s\symbol{}[\normal{}i\symbol{}++]=\normal{}c\symbol{}; }
+\leftline{413:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}s\symbol{}[\normal{}i\symbol{}-\normal{}2\symbol{}]==\normal{}comment_1e\symbol{}\ \&\&\ \normal{}s\symbol{}[\normal{}i\symbol{}-\normal{}1\symbol{}]==\normal{}comment_2e\symbol{})\ \normal{}count\symbol{}--; }
+\leftline{414:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}s\symbol{}[\normal{}i\symbol{}-\normal{}2\symbol{}]==\normal{}comment_1b\symbol{}\ \&\&\normal{}s\symbol{}[\normal{}i\symbol{}-\normal{}1\symbol{}]==\normal{}comment_2b\symbol{})\ \normal{}count\symbol{}++; }
+\leftline{415:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$\ \keya{}while\symbol{}(\normal{}count\symbol{}!=\normal{}0\symbol{}); }
+\leftline{416:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{417:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}s\symbol{}[\normal{}i\symbol{}]=\normal{}0\symbol{}; }
+\leftline{418:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}c\symbol{}=\normal{}fgetc\symbol{}(\normal{}file\symbol{}); }
+\leftline{419:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \keya{}return\symbol{}\ \normal{}COMMENT\symbol{}; }
+\leftline{420:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{421:\ \ \ \ \ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{422:\ \ \ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{} }
+\leftline{423:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}wasSlash\symbol{}=(\normal{}c\symbol{}==\normal{}comment_1b\symbol{});\  }
+\leftline{424:\ \ \ $\}$\ \keya{}else\symbol{} }
+\leftline{425:\ \ \ \ \ \keya{}if\symbol{}\ (\normal{}c\symbol{}=='')\ $\{$ }
+\leftline{426:\ \ \ \ \ \ \ if\ (i>=1)\ $\{$ }
+\leftline{427:\ \ \ \ \ \ \ \ \ s[i]=0; }
+\leftline{428:\ \ \ \ \ \ \ \ \ return\ type; }
+\leftline{429:\ \ \ \ \ \ \ $\}$ }
+\leftline{430:\ \ \ \ \ \ \ c=fgetc(file); }
+\leftline{431:\ \ \ \ \ \ \ while(c!='\symbol{}')\ $\{$ }
+\leftline{432:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}c\symbol{}==\normal{}EOF\symbol{})\ \keya{}break\symbol{}; }
+\leftline{433:\ \ \ \ \ \ \ \ \ \normal{}s\symbol{}[\normal{}i\symbol{}++]=\normal{}c\symbol{}; }
+\leftline{434:\ \ \ \ \ \ \ \ \ \normal{}c\symbol{}=\normal{}fgetc\symbol{}(\normal{}file\symbol{}); }
+\leftline{435:\ \ \ \ \ \ \ $\}$ }
+\leftline{436:\ \ \ \ \ \ \ \normal{}s\symbol{}[\normal{}i\symbol{}]=\normal{}0\symbol{}; }
+\leftline{437:\ \ \ \ \ \ \ \normal{}c\symbol{}=\normal{}fgetc\symbol{}(\normal{}file\symbol{}); }
+\leftline{438:\ \ \ \ \ \ \ \keya{}return\symbol{}\ \normal{}WORD\symbol{}; }
+\leftline{439:\ \ \ \ \ $\}$\ \keya{}else\symbol{}\ $\{$ }
+\leftline{440:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}type\symbol{}==\normal{}EOF\symbol{})\ \normal{}type\symbol{}=\normal{}WORD\symbol{}; }
+\leftline{441:\ \ \ \ \ \ \ \keya{}break\symbol{}; }
+\leftline{442:\ \ \ \ \ $\}$ }
+\leftline{443:\ \ \ $\}$\ \keya{}while\symbol{}((\normal{}c\symbol{}=\normal{}fgetc\symbol{}(\normal{}file\symbol{}))!=\normal{}EOF\symbol{}); }
+\leftline{444:\ \ \ \  }
+\keya{}\leftline{445:\ \ \ if\symbol{}\ (\normal{}c\symbol{}!=\normal{}EOF\symbol{}) }
+\keya{}\leftline{446:\ \ \ if\symbol{}\ (\normal{}type\symbol{}==\normal{}WORD\symbol{}) }
+\leftline{447:\ \ \ $\{$ }
+\keya{}\leftline{448:\ \ \ do\symbol{} }
+\leftline{449:\ \ \ $\{$ }
+\normal{}\leftline{450:\ \ \ s\symbol{}[\normal{}i\symbol{}++]=\normal{}c\symbol{}; }
+\normal{}\leftline{451:\ \ \ c\symbol{}=\normal{}fgetc\symbol{}(\normal{}file\symbol{}); }
+\keya{}\leftline{452:\ \ \ if\symbol{}\ (\normal{}c\symbol{}==\normal{}EOF\symbol{})\ \keya{}break\symbol{}; }
+\leftline{453:\ \ \ $\}$\ \keya{}while\symbol{}(!\normal{}isSeparator\symbol{}(\normal{}c\symbol{})); }
+\leftline{454:\ \ \  }
+\normal{}\leftline{455:\ \ \ s\symbol{}[\normal{}i\symbol{}]=\normal{}0\symbol{}; }
+\keya{}\leftline{456:\ \ \ int\symbol{}\ \normal{}k\symbol{}=\normal{}isKey\symbol{}(\normal{}s\symbol{}); }
+\keya{}\leftline{457:\ \ \ if\symbol{}\ (\normal{}k\symbol{}==\normal{}0\symbol{})\ \keya{}return\symbol{}\ \normal{}NORMAL\symbol{}; }
+\keya{}\leftline{458:\ \ \ return\symbol{}\ \normal{}k\symbol{}; }
+\leftline{459:\ \ \ $\}$ }
+\leftline{460:\ \ \  }
+\normal{}\leftline{461:\ \ \ s\symbol{}[\normal{}i\symbol{}]=\normal{}0\symbol{}; }
+\keya{}\leftline{462:\ \ \ return\symbol{}\ \normal{}type\symbol{}; }
+\leftline{463:\ \ \  }
+\leftline{464:\ \ \ $\}$ }
+\leftline{465:\ \ \  }
+\keya{}\leftline{466:\ \ \ int\symbol{}\ \normal{}TexC\symbol{}::\normal{}init\symbol{}(\keya{}const\symbol{}\ \keya{}char\symbol{}\ *\normal{}filename\symbol{}) }
+\leftline{467:\ \ \ $\{$ }
+\normal{}\leftline{468:\ \ \ file\symbol{}=\normal{}fopen\symbol{}(\normal{}filename\symbol{},"\normal{}wt\symbol{}"); }
+\normal{}\leftline{469:\ \ \ fprintf\symbol{}(\normal{}file\symbol{},"\\\normal{}input\symbol{}\ \normal{}default.mac\symbol{}\\normal{}n\symbol{}"); }
+\keya{}\leftline{470:\ \ \ return\symbol{}\ \normal{}file\symbol{}!=\normal{}NULL\symbol{}; }
+\leftline{471:\ \ \ $\}$ }
+\leftline{472:\ \ \  }
+\leftline{473:\ \ \  }
+\keya{}\leftline{474:\ \ \ void\symbol{}\ \normal{}Help\symbol{}() }
+\leftline{475:\ \ \ $\{$ }
+\leftline{476:\ \ \ \ \ \normal{}printf\symbol{}("\normal{}Syntax\symbol{}\ :\ \normal{}c2tex\symbol{}\ \normal{}in_file\symbol{}\ [\normal{}out_file\symbol{}]\ [-\normal{}usePascal\symbol{}]\ [-\normal{}numbers\symbol{}]\\normal{}n\symbol{}\\normal{}n\symbol{}"); }
+\leftline{477:\ \ \ \ \ \normal{}printf\symbol{}("\normal{}Default\symbol{}\ \normal{}out_file\symbol{}\ \normal{}is\symbol{}\ \normal{}output.tex.\symbol{}\\normal{}n\symbol{}"); }
+\leftline{478:\ \ \ \ \ \normal{}printf\symbol{}("-\normal{}usePascal\symbol{}\ \ \ \ \ \normal{}use\symbol{}\ \normal{}usePascal\symbol{}\ \normal{}comments\symbol{}\ (*\ *)\normal{}.\symbol{}\\normal{}n\symbol{}"); }
+\leftline{479:\ \ \ \ \ \normal{}printf\symbol{}("-\normal{}numbers\symbol{}\ \ \ \ \normal{}print\symbol{}\ \normal{}line\symbol{}\ \normal{}numbers.\symbol{}\\normal{}n\symbol{}"); }
+\leftline{480:\ \ \ \ \ \normal{}exit\symbol{}(\normal{}1\symbol{}); }
+\leftline{481:\ \ \ $\}$ }
+\leftline{482:\ \ \  }
+\keya{}\leftline{483:\ \ \ int\symbol{}\ \normal{}main\symbol{}(\keya{}int\symbol{}\ \normal{}argc\symbol{},\ \keya{}char\symbol{}\ **\normal{}argv\symbol{}) }
+\leftline{484:\ \ \ $\{$ }
+\keya{}\leftline{485:\ \ \ char\symbol{}\ \ \ \normal{}s\symbol{}[\normal{}16384\symbol{}];\ \comment{}//\ docasny\ buffer }
+\symbol{}\leftline{486:\ \ \  }
+\normal{}\leftline{487:\ \ \ OptionsC\symbol{}\ \normal{}options\symbol{}(\normal{}argc\symbol{},\normal{}argv\symbol{}); }
+\leftline{488:\ \ \ \  }
+\leftline{489:\ \ \ \ \keya{}if\symbol{}\ (\normal{}argc\symbol{}<\normal{}2\symbol{})\ \normal{}Help\symbol{}(); }
+\leftline{490:\ \ \ \ \keya{}if\symbol{}\ (\normal{}argc\symbol{}>=\normal{}3\symbol{}\ \&\&\ (*\normal{}argv\symbol{}[\normal{}2\symbol{}]!='-')\ ) }
+\leftline{491:\ \ \ \ \ \ \normal{}strcpy\symbol{}(\normal{}s\symbol{},\normal{}argv\symbol{}[\normal{}2\symbol{}]); }
+\leftline{492:\ \ \ \ \keya{}else\symbol{} }
+\leftline{493:\ \ \ \ \ \ \normal{}strcpy\symbol{}(\normal{}s\symbol{},"\normal{}output.tex\symbol{}"); }
+\leftline{494:\ \ \ \  }
+\leftline{495:\ \ \ \ \keya{}if\symbol{}\ (\normal{}options.isOption\symbol{}("-\normal{}usePascal\symbol{}"))\ $\{$ }
+\leftline{496:\ \ \ \ \ \ \ \normal{}usePascal\symbol{}=\normal{}1\symbol{}; }
+\leftline{497:\ \ \ \ \ \ \ \normal{}comment_1b\symbol{}='('; }
+\leftline{498:\ \ \ \ \ \ \ \normal{}comment_2b\symbol{}='*'; }
+\leftline{499:\ \ \ \ \ \ \ \normal{}comment_1e\symbol{}='*'; }
+\leftline{500:\ \ \ \ \ \ \ \normal{}comment_2e\symbol{}=')'; }
+\leftline{501:\ \ \ \ $\}$ }
+\leftline{502:\ \ \  }
+\leftline{503:\ \ \ \ \keya{}int\symbol{}\ \normal{}numbers\symbol{}; }
+\leftline{504:\ \ \ \  }
+\leftline{505:\ \ \ \ \normal{}numbers\symbol{}\ =\ \normal{}options.isOption\symbol{}("-\normal{}numbers\symbol{}"); }
+\leftline{506:\ \ \ \  }
+\leftline{507:\ \ \ \  }
+\leftline{508:\ \ \ \ \ \normal{}LexanC\symbol{}\ \ \ \ \ \ \ \normal{}lexan\symbol{}; }
+\leftline{509:\ \ \ \ \ \normal{}TexC\symbol{}\ \normal{}tex\symbol{}(\normal{}numbers\symbol{},\ \normal{}s\symbol{}); }
+\leftline{510:\ \ \ \ \ \normal{}lexan.open\symbol{}(\normal{}argv\symbol{}[\normal{}1\symbol{}]); }
+\leftline{511:\ \ \  }
+\leftline{512:\ \ \ \ \ \keya{}int\symbol{}\ \ \normal{}t\symbol{}; }
+\leftline{513:\ \ \ \ \ \normal{}cout\symbol{}<<\normal{}tex.numbers\symbol{}; }
+\leftline{514:\ \ \  }
+\leftline{515:\ \ \ \ \  }
+\leftline{516:\ \ \ \ \ \keya{}while\symbol{}((\normal{}t\symbol{}=\normal{}lexan.read\symbol{}(\normal{}s\symbol{}))!=\normal{}EOF\symbol{}) }
+\leftline{517:\ \ \ \ \ \ \ $\{$ }
+\leftline{518:\ \ \ \ \ \ \ \ \ \comment{}//printf("Type\ :\ \%d\ -\ \%s\n",t,s); }
+\symbol{}\leftline{519:\ \ \ \ \ \ \ \ \ \normal{}printf\symbol{}("\normal{}\%s\symbol{}",\normal{}s\symbol{}); }
+\leftline{520:\ \ \ \ \ \ \ \ \ \normal{}tex.write\symbol{}(\normal{}t\symbol{},\normal{}s\symbol{}); }
+\leftline{521:\ \ \ \ \ \ \ \ \ \comment{}//getchar(); }
+\symbol{}\leftline{522:\ \ \ \ \ \ \ $\}$ }
+\leftline{523:\ \ \  }
+\keya{}\leftline{524:\ \ \ return\symbol{}\ \normal{}0\symbol{}; }
+\leftline{525:\ \ \ $\}$ }
+\leftline{526:\ \ \  }
+\leftline{527:\ \ \  }
+\leftline{528:\ \ \  }
+\leftline{529:\ \ \  }
+\leftline{530:\ \ \  }
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/actualcode.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/actualcode.cpp	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/actualcode.cpp	(revision 243)
@@ -0,0 +1,104 @@
+void NV_PureKdTreeRenderAction::TraverseNode(KdTreeNode *pCurrNode)
+{
+	if (pCurrNode->m_bLeaf)
+	{
+		// this has a frame counter to prevent double rendering
+		pCurrNode->RenderGeometry();
+	}
+	else
+	{
+		Point3f	ptViewpoint	= GetState()->GetCamera()->GetPosition();
+
+		//---- insert the children in the reverse order as they shall be dealt with
+		if (ptViewpoint[pCurrNode->m_iSplitAxis] > pCurrNode->m_fSplitValue)
+		{
+			m_TraverseStack.Push(pCurrNode->m_pLeftChild);
+			m_TraverseStack.Push(pCurrNode->m_pRightChild);
+		}
+		else
+		{
+			m_TraverseStack.Push(pCurrNode->m_pRightChild);
+			m_TraverseStack.Push(pCurrNode->m_pLeftChild);
+		}
+	} // no leaf
+}
+
+
+//---- the actual render algorithm
+void	NV_PureKdTreeRenderAction::RenderSorted()
+{
+	KdTreeNode	* pCurrNode;
+	int			iTestCounter	= 0;
+
+	//---- clear the two needed datastructures
+	m_TraverseStack.Clear();
+	m_NVTestQueue.Clear();
+
+	//---- generate the occlusion queries
+	glGenOcclusionQueriesNV(m_nNumNodes, m_pOcclusionQueries);
+
+	//---- take the root as a start
+	m_pKdTree->m_iPlaneMask	= 0x3f;	// = 0011 1111 which means that at the beginning, all six planes have to frustum culled
+	m_TraverseStack.Push(m_pKdTree);
+
+	//---- the loop
+	while ((!m_TraverseStack.Empty()) || (!m_NVTestQueue.Empty()))
+	{
+		bool result_available;
+
+		while (!m_NVTestQueue.Empty() && 
+					(m_TraverseStack.Empty() ||
+					 (result_available = ResultAvailable(m_NVTestQueue.GetFirst()->m_nTest))
+					)
+			   )
+		{
+			pCurrNode = m_NVTestQueue.GetFirst(); m_NVTestQueue.RemoveFirst();
+			
+			// the next line is only interesting if we want to avoid double rendering already here:
+			//bool was_visible = pCurrNode->m_bVisible && (m_nLastVisitedId == (GetCurrentFrame() - 1));
+			
+			// update visibility classification (this is the wait variety!)
+			pCurrNode->m_bVisible = GetVisiblePixels(pCurrNode->m_nTest) > Settings::Global()->get_nvocc_pixel_treshold();
+			pCurrNode->m_nLastVisitedId = GetCurrentFrame();
+
+			if (pCurrNode->m_bVisible) // && !was_visible)	// note: could prevent double rendering already here!
+			{
+				pCurrNode->MakeParentsVisible();
+				TraverseNode(pCurrNode);
+			} // visible
+		}
+
+		//---- the second part manages the distance heap
+		if (!m_TraverseStack.Empty())
+		{
+			//---- get the element with the lowest distance
+			pCurrNode	= m_TraverseStack.Pop();			
+
+			// question: what is the difference if we do frustum culling only after setting visibility?
+			if (pCurrNode->IsWithinViewFrustum())
+			{
+				bool was_visible = pCurrNode->m_bVisible && (pCurrNode->m_nLastVisitedId == (GetCurrentFrame() - 1));
+				
+				// note: this is actually only done for internal nodes and could be skipped for leaf nodes
+				// in which case leaf node double rendering could be prevented here (see above)
+				pCurrNode->m_bVisible = FALSE;
+				pCurrNode->m_nLastVisitedId = GetCurrentFrame();
+				
+				if (pCurrNode->m_bLeaf || !was_visible)
+				{
+					if (pCurrNode->m_pSuccessor->IssueNVTest(m_pOcclusionQueries[iTestCounter])) ++iTestCounter;
+					m_NVTestQueue.Append(pCurrNode);
+				}
+
+				if (was_visible)
+				{
+					TraverseNode(pCurrNode);
+				}
+			}
+		}
+	}
+
+	//---- tell the driver that the occlusion queries won't be needed any more
+	glDeleteOcclusionQueriesNV(m_nNumNodes, m_pOcclusionQueries);
+
+}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/c2tex.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/c2tex.cpp	(revision 255)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/c2tex.cpp	(revision 255)
@@ -0,0 +1,531 @@
+
+/**************************************************************************
+c2tex - Konverze C++ do TeXu
+Jiri Bittner, Cerven 1996
+**************************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <iostream.h>
+#include <fstream.h>
+
+
+#define	KEYWORD1	1	// kody pro jednotlive znacky
+#define	KEYWORD2	2
+#define	SYMBOL		3
+#define	COMMENT        4
+#define	NORMAL		5
+
+#define	WORD	10
+
+#define	S_LEN	256
+
+int usePascal=0;
+
+char comment_1b='/',comment_2b='*',comment_1e='*',comment_2e='/';
+
+class BaseC
+{
+
+};
+
+
+typedef double Real;
+
+
+class OptionsC : public BaseC
+{
+public:
+
+  int    number;
+  char **strings;
+  
+//  OptionsC() { number=0; }
+  OptionsC(int n,char **a) { init(n,a); }
+
+  void init(int n,char **s) { number=n; strings=s; }
+  int isOption(char *string);
+  int isOption(char *string,int *number);
+  int getParam(char *s,int n=1);
+
+  int getOptionValue(char *string,int *result);
+  int getOptionValue(char *string,Real *r);
+  int getOptionValue(char *string,char *result);
+
+};
+
+
+class LexanC: public BaseC
+{
+public:
+FILE *file;
+
+int 	nsep,nkey[2];
+char	*separators;
+char	**key[2];
+
+LexanC(){init("default.lex");}
+
+int	isSeparator(int c){ return strchr(separators,c)!=NULL; }
+int	isKey(char *s);
+
+int	init(const char *lexname);
+int 	open(const char *filename);
+
+int	readWord(FILE *f,char *string);
+
+int	read(char *string);
+void 	close(){fclose(file);}
+
+virtual	ostream& operator>>(ostream &s) { 
+	s<<nsep<<"\n"<<nkey[0]<<"\n"<<nkey[1]<<"\n";
+	return s;
+					}
+~LexanC(){fclose(file);}
+};
+
+class TexC: public BaseC
+{
+public:
+  FILE *file;
+  int numbers;
+  int lnumber;
+  
+  TexC(){numbers=0; init("output.tex");}
+  TexC(int n, const char *s){
+    lnumber=0;
+    numbers=n; init(s);}
+  
+  int init(const char *filename);
+  int write(const int code,const char *string);
+  ~TexC() { /* fprintf(file,"\n\\bye\n"); */ fclose(file);}
+
+};
+
+
+
+
+
+
+
+
+int OptionsC::isOption(char *s)
+{
+int found=0;
+ 
+ for (int i=1;i<number;i++)
+   if (strcmp(s,strings[i])==0) { found = i; break;}
+
+ return found;
+}
+
+int OptionsC::isOption(char *s,int *n)
+{
+int found=0;
+
+for (int i=1;i<number;i++)
+  if (strcmp(s,strings[i])==0)
+    {
+      if (i+1<number)
+	{
+	  *n=atoi(strings[i+1]);
+	  found = i;
+	  break;
+	}
+    }
+
+return found;
+}
+
+
+// search for occurence of non-option
+int OptionsC::getParam(char *s,int n)
+{
+int i,k=1,found=0;
+
+for (i=1;i<number;i++)
+  if (strings[i][0]!='-')
+    if (k==n) { found=1; break;}
+       else
+	 k++;
+
+if (found) strcpy(s,strings[i]);
+
+return found;
+}
+
+
+
+int OptionsC::getOptionValue(char *s,int *result)
+{
+int found=0;
+char *pp;
+
+for (int i=1;i<number;i++)
+  {
+    if (strstr(strings[i],s))
+    {
+      pp=strings[i]+strlen(s);
+      *result=atoi(pp);
+      found = i;
+      break;
+    }
+  }
+return found;
+}
+
+int
+OptionsC::getOptionValue(char *s,Real *result)
+{
+int found=0;
+char *pp;
+
+for (int i=1;i<number;i++)
+  {
+    if (strstr(strings[i],s))
+    {
+      pp=strings[i]+strlen(s);
+      *result=atof(pp);
+      found = i;
+      break;
+    }
+  }
+return found;
+}
+
+int OptionsC::getOptionValue(char *s,char *result)
+{
+int found=0;
+char *pp;
+
+for (int i=1;i<number;i++)
+  {
+    if (strstr(strings[i],s))
+    {
+      pp=strings[i]+strlen(s);
+      strcpy(result,pp);
+      found = i;
+      break;
+    }
+  }
+return found;
+}
+
+
+int TexC::write(const int code,const char *string)
+{
+static int line=1;
+static int i=0;
+const char *sp;
+
+switch(code) {
+  
+ case KEYWORD1 : fprintf(file,"\\keya{}"); break;
+ case KEYWORD2 : fprintf(file,"\\keyb{}"); break;
+ case COMMENT  : fprintf(file,"\\comment{}"); break;
+ case SYMBOL   : fprintf(file,"\\symbol{}"); break;
+ case NORMAL   : fprintf(file,"\\normal{}"); break;
+}
+ 
+ for(sp=string;*sp!=0;sp++,i++)
+   {
+     if (line) {
+       fprintf(file,"\\leftline{"); line=0;
+       if (strstr(string, "Algorithm") == string)
+	 lnumber = 0;
+       if (numbers && lnumber)
+	 fprintf(file,"%2d:\\ \\ \\ ",lnumber);
+       lnumber++;
+     }
+     
+     switch(*sp) {
+       
+#define TAB_SIZE	8
+     case '\t' :	
+       //		fprintf(file,"\\tab"); break;
+       int n,j;
+       n=((i/TAB_SIZE)+1)*TAB_SIZE-i;
+       for(j=0;j<n;j++) fprintf(file,"\\ ");
+       break;
+       
+       
+     case '\n': 	fprintf(file," }\n");
+       line=1; i=0;
+       break;
+     case ' ' :	fprintf(file,"\\ ");
+      break;
+      case '&' :	fprintf(file,"\\&"); break;
+      case '#' :	fprintf(file,"\\#"); break;
+	//      case '_' :	fprintf(file,"\\_{}"); break;
+      case '_' :	fprintf(file,"_"); break;
+      case '^' :	fprintf(file,"\\^{}"); break;
+      case '%' :	fprintf(file,"\\%%"); break;
+      case '{' :	fprintf(file,"$\\{$"); break;
+      case '}' :	fprintf(file,"$\\}$"); break;
+	//  case '\\' :	fprintf(file,"$\\backslash$"); break;
+	//  case '$' :	fprintf(file,"\\$"); break;
+    //  case '<' :	fprintf(file,"\\<"); break;
+    //  case '>' :	fprintf(file,"\\>"); break;
+
+  case '~' :	fprintf(file,"\\~{}"); break;
+      
+    
+  default  :	fputc(*sp,file);
+  }
+}
+return 1;
+}
+
+
+int	LexanC::isKey(char *s)
+{
+int i,j;
+
+for (i=0;i<2;i++)
+ for(j=0;j<nkey[i];j++)
+  if(strcmp(s,key[i][j])==0) return i+1;
+
+return 0;
+}
+
+
+int 	LexanC::readWord(FILE *f,char *s)
+{
+int	i=0;
+int	c;
+
+do
+{
+	c=fgetc(f);
+	if (c==EOF) return 0;
+	if (!isSeparator(c)) break;
+} while(1);
+
+
+do
+{
+	s[i++]=c;
+	c=fgetc(f);
+	if (c==EOF) break;
+	if (isSeparator(c)) break;
+} while(1);
+
+s[i]=0;
+return 1;
+}
+
+
+int	LexanC::init(const char *lexname)
+{
+FILE *f;
+
+if ((f=fopen(lexname,"rt"))==NULL) return 0;
+
+
+#define 	NKEY	512
+
+separators = new char[256];
+key[0]   = new char*[NKEY];
+key[1]   = new char*[NKEY];
+
+nsep=0;
+separators[nsep++]=' ';
+separators[nsep++]='\n';
+separators[nsep++]='\t';
+
+fgets(separators+nsep,100,f);
+nsep=strlen(separators);
+
+int i=0,type=0;
+char s[64];
+
+while(readWord(f,s))
+	{
+	if (strcmp(s,"KEYWORDS2")==0) 
+	{
+	    printf("KEYWORDS2\n");
+	    nkey[type]=i; 
+	    type++; 
+	    i=0;  
+	}
+	else
+	{
+		printf("%s\n",s);	
+		key[type][i]=new char[strlen(s)+1];
+		strcpy(key[type][i],s);
+		i++;
+	}
+	}
+
+nkey[type]=i; 
+
+fclose(f);
+
+ 
+return 1;
+}
+
+int 	LexanC::open(const char *filename)
+{
+file=fopen(filename,"rt");
+return file!=NULL;
+}
+
+int	LexanC::read(char *s)
+{
+int	i=0;
+int	type=EOF;
+int	wasSlash=0;
+static	int	c=-2;
+
+if (c==-2)  c=fgetc(file);
+
+if (c==EOF) return c;
+
+do{
+if (isSeparator(c)) {
+	type=SYMBOL;
+	s[i++]=c;
+
+	if(wasSlash) {
+	  if(c==comment_1b)  // line comment
+	    { 
+	      if (i>2) { c=s[i-2]; fseek(file,-1,SEEK_CUR); s[i-2]=0; 
+	      return type; }
+	      fgets(s+i,S_LEN,file); 
+	      c=fgetc(file);
+	      return COMMENT;
+	    }
+	  else
+	    if(c==comment_2b)  // line comment
+	      { 
+		if (i>2) { c=s[i-2]; fseek(file,-1,SEEK_CUR); s[i-2]=0; 
+		return type; }
+		c=fgetc(file);
+		if(c!=EOF)
+		  {
+		    s[i++]=c;
+		    int count=1;
+			do{
+			  c=fgetc(file);
+			  if(c==EOF) break;
+			  s[i++]=c;
+			  if (s[i-2]==comment_1e && s[i-1]==comment_2e) count--;
+			  if (s[i-2]==comment_1b &&s[i-1]==comment_2b) count++;
+			} while(count!=0);
+		      }
+		    s[i]=0;
+		    c=fgetc(file);
+		    return COMMENT;
+		  }
+	    }
+	  else
+	    wasSlash=(c==comment_1b);	
+} else
+  if (c=='`') {
+    if (i>=1) {
+      s[i]=0;
+      return type;
+    }
+    c=fgetc(file);
+    while(c!='`') {
+      if (c==EOF) break;
+      s[i++]=c;
+      c=fgetc(file);
+    }
+    s[i]=0;
+    c=fgetc(file);
+    return WORD;
+  } else {
+    if (type==EOF) type=WORD;
+    break;
+  }
+} while((c=fgetc(file))!=EOF);
+ 
+if (c!=EOF)
+if (type==WORD)
+{
+do
+{
+s[i++]=c;
+c=fgetc(file);
+if (c==EOF) break;
+} while(!isSeparator(c));
+
+s[i]=0;
+int k=isKey(s);
+if (k==0) return NORMAL;
+return k;
+}
+
+s[i]=0;
+return type;
+
+}
+
+int TexC::init(const char *filename)
+{
+file=fopen(filename,"wt");
+fprintf(file,"\\input default.mac\n");
+return file!=NULL;
+}
+
+
+void Help()
+{
+  printf("Syntax : c2tex in_file [out_file] [-usePascal] [-numbers]\n\n");
+  printf("Default out_file is output.tex.\n");
+  printf("-usePascal     use usePascal comments (* *).\n");
+  printf("-numbers    print line numbers.\n");
+  exit(1);
+}
+
+int main(int argc, char **argv)
+{
+char	s[16384]; // docasny buffer
+
+OptionsC options(argc,argv);
+ 
+ if (argc<2) Help();
+ if (argc>=3 && (*argv[2]!='-') )
+   strcpy(s,argv[2]);
+ else
+   strcpy(s,"output.tex");
+ 
+ if (options.isOption("-usePascal")) {
+    usePascal=1;
+    comment_1b='(';
+    comment_2b='*';
+    comment_1e='*';
+    comment_2e=')';
+ }
+
+ int numbers;
+ 
+ numbers = options.isOption("-numbers");
+ 
+ 
+  LexanC	lexan;
+  TexC	tex(numbers, s);
+  lexan.open(argv[1]);
+
+  int	t;
+  cout<<tex.numbers;
+
+  
+  while((t=lexan.read(s))!=EOF)
+    {
+      //printf("Type : %d - %s\n",t,s);
+      printf("%s",s);
+      tex.write(t,s);
+      //getchar();
+    }
+
+return 0;
+}
+
+
+
+
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode.tex	(revision 251)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode.tex	(revision 251)
@@ -0,0 +1,57 @@
+\input default.mac
+\comment{}\leftline{//----\ initialisation }
+\normal{}\leftline{ 1:\ \ \ Stack.Push\symbol{}(\normal{}kDTree.Root\symbol{}); }
+\comment{}\leftline{ 2:\ \ \ //----\ while\ there\ are\ some\ nodes\ in\ the\ stack\ or\ the\ query\ queue }
+\keya{}\leftline{ 3:\ \ \ while\symbol{}\ (!\normal{}Stack.Empty\symbol{}()\ \normal{}$\symbol{}||\normal{}$\symbol{}\ !\normal{}QueryQueue.Empty\symbol{}())\ $\{$ }
+\leftline{ 4:\ \ \ \ \ \comment{}//----\ PART\ 1:\ processing\ finished\ occlusion\ queries }
+\symbol{}\leftline{ 5:\ \ \ \ \ \keya{}while\symbol{}\ (!\normal{}QueryQueue.Empty\symbol{}()\ \&\& }
+\leftline{ 6:\ \ \ \ \ \ \ \ \ \ \ (\normal{}ResultAvailable\symbol{}(\normal{}QueryQueue.Front\symbol{}())\ \normal{}$\symbol{}||\normal{}$\symbol{}\ \normal{}Stack.Empty\symbol{}()))\ $\{$ }
+\leftline{ 7:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (!\normal{}ResultAvailable\symbol{}(\normal{}QueryQueue.Front\symbol{}()))\ $\{$ }
+\leftline{ 8:\ \ \ \ \ \ \ \ \ \comment{}//---\ result\ is\ not\ available\ and\ the\ stack\ is\ empty }
+\symbol{}\leftline{ 9:\ \ \ \ \ \ \ \ \ \comment{}//---\ check\ if\ we\ can\ do\ some\ conservative\ decision }
+\symbol{}\leftline{10:\ \ \ \ \ \ \ \ \ \normal{}N\symbol{}\ =\ \normal{}QueryQueue.GetLeastCostNode\symbol{}(); }
+\leftline{11:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}N.renderingCost\symbol{}\ <\ \normal{}MaxRenderCost\symbol{})\ $\{$ }
+\leftline{12:\ \ \ \ \ \ \ \ \ \ \normal{}RenderSubtree\symbol{}(\normal{}N\symbol{}); }
+\leftline{13:\ \ \ \ \ \ \ \ \ \ \normal{}QueryQueue.DequeLeastCostNode\symbol{}(); }
+\leftline{14:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ we\ do\ not\ change\ N's\ visibility\ classfication\ - }
+\symbol{}\leftline{15:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ N\ remains\ in\ the\ cut\ for\ the\ next\ frame }
+\symbol{}\leftline{16:\ \ \ \ \ \ \ \ \ $\}$\ \keya{}else\symbol{} }
+\leftline{17:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ wait\ for\ the\ availability\ of\ the\ result }
+\symbol{}\leftline{18:\ \ \ \ \ \ \ \ \ \ \keya{}while\symbol{}\ (!\normal{}QueryQueue.ResultAvailable\symbol{})\ \normal{}Wait\symbol{}(); }
+\leftline{19:\ \ \ \ \ \ \ $\}$\ \keya{}else\symbol{}\ $\{$ }
+\leftline{20:\ \ \ \ \ \ \ \ \ \normal{}N\symbol{}\ =\ \normal{}QueryQueue.Dequeue\symbol{}(); }
+\leftline{21:\ \ \ \ \ \ \ \ \ \comment{}//--\ check\ the\ result\ of\ the\ query }
+\symbol{}\leftline{22:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\ \normal{}N.visiblePixels\symbol{}\ \normal{}$\symbol{}>\normal{}$\symbol{}\ \normal{}VisibilityThreshold\symbol{}\ )\ \ $\{$ }
+\leftline{23:\ \ \ \ \ \ \ \ \ \ \normal{}N.visibility\symbol{}\ =\ \normal{}VISIBLE\symbol{}; }
+\leftline{24:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}IsLeaf\symbol{}(\normal{}N\symbol{})) }
+\leftline{25:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Render\symbol{}(\normal{}N\symbol{}); }
+\leftline{26:\ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{}\ $\{$ }
+\leftline{27:\ \ \ \ \ \ \ \ \ \ \ \ \comment{}//--\ pull\ down }
+\symbol{}\leftline{28:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Stack.Push\symbol{}(\normal{}FarChild\symbol{}(\normal{}N\symbol{}));\ \normal{}Stack.Push\symbol{}(\normal{}CloseChild\symbol{}(\normal{}N\symbol{})); }
+\leftline{29:\ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{30:\ \ \ \ \ \ \ \ \ $\}$\ \keya{}else\symbol{}\ $\{$ }
+\leftline{31:\ \ \ \ \ \ \ \ \ \ \normal{}N.visibility\symbol{}\ =\ \normal{}INVISIBLE\symbol{}; }
+\leftline{32:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ pull\ up }
+\symbol{}\leftline{33:\ \ \ \ \ \ \ \ \ \ \normal{}PullUpInvisibility\symbol{}(\normal{}N\symbol{}); }
+\leftline{34:\ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{35:\ \ \ \ \ \ \ $\}$ }
+\leftline{36:\ \ \ \ \ $\}$ }
+\leftline{37:\ \ \ \ \  }
+\leftline{38:\ \ \ \ \ \comment{}//----\ PART\ 2:\ kd-tree\ traversal }
+\symbol{}\leftline{39:\ \ \ \ \ \keya{}if\symbol{}\ (!\normal{}Stack.Empty\symbol{}())\ $\{$ }
+\leftline{40:\ \ \ \ \ \ \ \normal{}N\symbol{}\ =\ \normal{}Stack.Pop\symbol{}(); }
+\leftline{41:\ \ \ \ \ \ \ \normal{}N.lastVisited\symbol{}\ =\ \normal{}frameID\symbol{}; }
+\leftline{42:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}InsideViewFrustum\symbol{}(\normal{}N\symbol{}))\ $\{$ }
+\leftline{43:\ \ \ \ \ \ \ \ \ \comment{}//--\ skip\ testing\ of\ all\ nodes\ above\ the\ cut }
+\symbol{}\leftline{44:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (!\normal{}IsAboveTheCut\symbol{}(\normal{}N\symbol{}))\ $\{$ }
+\leftline{45:\ \ \ \ \ \ \ \ \ \ \normal{}IssueOcclustionQuery\symbol{}(\normal{}N\symbol{});\ \normal{}QueryQueue.Enqueue\symbol{}(\normal{}N\symbol{}); }
+\leftline{46:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}WasVisible\symbol{}(\normal{}N\symbol{})\ \normal{}$\symbol{}\&\&\normal{}$\symbol{}\ \normal{}IsLeaf\symbol{}(\normal{}N\symbol{})) }
+\leftline{47:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Render\symbol{}(\normal{}N\symbol{}); }
+\leftline{48:\ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{}\ $\{$ }
+\leftline{49:\ \ \ \ \ \ \ \ \ \ \ \ \comment{}//--\ go\ down\ the\ kD-tree }
+\symbol{}\leftline{50:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Stack.Push\symbol{}(\normal{}FarChild\symbol{}(\normal{}N\symbol{}));\ \normal{}Stack.Push\symbol{}(\normal{}CloseChild\symbol{}(\normal{}N\symbol{}));\  }
+\leftline{51:\ \ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{52:\ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{53:\ \ \ \ \ \ \ $\}$ }
+\leftline{54:\ \ \ \ \ $\}$ }
+\leftline{55:\ \ \ $\}$ }
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode_batching.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode_batching.cpp	(revision 251)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode_batching.cpp	(revision 251)
@@ -0,0 +1,60 @@
+Algorithm: Traversal of the kD-tree applying batching of multiple queries
+TraversalStack.Push(kDTree.Root);
+while ( not TraversalStack.Empty() or
+        not QueryQueue.Empty() ) {
+  //---- PART 1: processing finished occlusion queries
+  while ( not QueryQueue.Empty() and
+	  (ResultAvailable(QueryQueue.Front()) or
+	   TraversalStack.Empty()) ) {
+    N = QueryQueue.Dequeue();
+    // wait if result not available
+    visiblePixels = GetOcclussionQueryResult(N);
+    if ( visiblePixels > VisibilityThreshold ) {
+      PullUpVisibility(N);
+      TraverseNode(N);
+    }
+  }
+  //---- PART 2: kd-tree traversal
+  if ( not TraversalStack.Empty() ) {
+    N = TraversalStack.Pop();
+    if ( InsideViewFrustum(N) ) {
+      // identify previously visible nodes
+      wasVisible = N.visible && (N.lastVisited == frameID -1);
+      // identify previously opened nodes
+      opened = wasVisible && !IsLeaf(N);
+      // reset node's visibility classification
+      N.visible = false;
+      // update node's visited flag
+      N.lastVisited = frameID;
+      // skip testing all previously opened nodes
+      if ( !opened ) {
+		  // add to the pending queue instead of immediate query
+		  if (PendingQueue.size() < n)
+			  PendingQueue.Enqueue(N);
+		  else
+		  {
+			  IssueMultipleOcclusionQueries(PendingQueue);
+			  AddToQueryQueue(PendingQueue, QueryQueue);
+			  PendingQueue.clear();
+		  }
+      }
+      // traverse a node unless it was invisible
+      if ( wasVisible )
+	TraverseNode(N);
+    }
+  }
+
+  // add rest to query queue
+  IssueMultipleOcclusionQueries(PendingQueue);
+  AddToQueryQueue(PendingQueue, QueryQueue);
+  PendingQueue.clear();
+}
+TraverseNode(N) {
+  if ( IsLeaf(N) )
+    Render(N);
+  else
+    TraversalStack.PushChildren(N);
+}
+PullUpVisibility(N) {
+  while (!N.visible) { N.visible = true; N = N.parent; }
+}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/CVS/Repository
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/CVS/Repository	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/CVS/Repository	(revision 243)
@@ -0,0 +1,1 @@
+bittner/papers/EG.04/code
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/CVS/Root
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/CVS/Root	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/CVS/Root	(revision 243)
@@ -0,0 +1,1 @@
+bittner@zwirn:/usr/local/cvsroot
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/CVS/Entries
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/CVS/Entries	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/CVS/Entries	(revision 243)
@@ -0,0 +1,10 @@
+/actualcode.cpp/1.1/Sat Jan 31 00:06:56 2004//
+/c2tex/1.2/Sun Feb  1 21:26:24 2004/-kb/
+/c2tex.cpp/1.2/Sun Feb  1 21:25:48 2004//
+/default.lex/1.2/Sat Jan 31 09:10:56 2004//
+/pseudocode.cpp/1.2/Thu Jan 29 20:15:32 2004//
+/pseudocode.tex/1.1/Sun Feb  1 21:26:24 2004//
+/makefile/1.4/Mon Feb  2 23:18:56 2004//
+/pseudocode2.cpp/1.6/Wed May  5 13:59:42 2004//
+/pseudocode2.tex/1.8/Wed May  5 13:59:44 2004//
+D
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/default.lex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/default.lex	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/default.lex	(revision 243)
@@ -0,0 +1,14 @@
+{}[]()=+-*/:;<>|&,~!^?'"\
+
+asm auto break case catch cdecl char class const continue default
+delete double do else enum extern far float for friend goto huge
+if interrupt int long near new operator pascal private protected
+public register return short signed sizeof static struct switch
+template this throw try typedef union unsigned virtual void
+volatile while yield foreach then begin end Algorithm and or not
+
+KEYWORDS2
+#define #elif #else #endif #error #ifdef #ifndef #if #include
+#line #pragma #undef elif inline warn
+
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode.cpp	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode.cpp	(revision 243)
@@ -0,0 +1,56 @@
+//---- initialisation
+Stack.Push(kDTree.Root);
+//---- while there are some nodes in the stack or the query queue
+while (!Stack.Empty() $||$ !QueryQueue.Empty()) {
+  //---- PART 1: processing finished occlusion queries
+  while (!QueryQueue.Empty() &&
+	 (ResultAvailable(QueryQueue.Front()) $||$ Stack.Empty())) {
+    if (!ResultAvailable(QueryQueue.Front())) {
+      //--- result is not available and the stack is empty
+      //--- check if we can do some conservative decision
+      N = QueryQueue.GetLeastCostNode();
+      if (N.renderingCost < MaxRenderCost) {
+	RenderSubtree(N);
+	QueryQueue.DequeLeastCostNode();
+	//-- we do not change N's visibility classfication -
+	//-- N remains in the cut for the next frame
+      } else
+	//-- wait for the availability of the result
+	while (!QueryQueue.ResultAvailable) Wait();
+    } else {
+      N = QueryQueue.Dequeue();
+      //-- check the result of the query
+      if ( N.visiblePixels $>$ VisibilityThreshold )  {
+	N.visibility = VISIBLE;
+	if (IsLeaf(N))
+	  Render(N);
+	else {
+	  //-- pull down
+	  Stack.Push(FarChild(N)); Stack.Push(CloseChild(N));
+	}
+      } else {
+	N.visibility = INVISIBLE;
+	//-- pull up
+	PullUpInvisibility(N);
+      }
+    }
+  }
+  
+  //---- PART 2: kd-tree traversal
+  if (!Stack.Empty()) {
+    N = Stack.Pop();
+    N.lastVisited = frameID;
+    if (InsideViewFrustum(N)) {
+      //-- skip testing of all nodes above the cut
+      if (!IsAboveTheCut(N)) {
+	IssueOcclustionQuery(N); QueryQueue.Enqueue(N);
+	if (WasVisible(N) $&&$ IsLeaf(N))
+	  Render(N);
+	else {
+	  //-- go down the kD-tree
+	  Stack.Push(FarChild(N)); Stack.Push(CloseChild(N)); 
+	}
+      }
+    }
+  }
+}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode2.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode2.tex	(revision 251)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode2.tex	(revision 251)
@@ -0,0 +1,48 @@
+\input default.mac
+\keya{}\leftline{Algorithm\symbol{}:\ \normal{}Traversal\symbol{}\ \normal{}of\symbol{}\ \normal{}the\symbol{}\ \normal{}kD\symbol{}-\normal{}tree\symbol{} }
+\normal{}\leftline{ 1:\ \ \ TraversalStack.Push\symbol{}(\normal{}kDTree.Root\symbol{}); }
+\keya{}\leftline{ 2:\ \ \ while\symbol{}\ (\ \keya{}not\symbol{}\ \normal{}TraversalStack.Empty\symbol{}()\ \keya{}or\symbol{} }
+\leftline{ 3:\ \ \ \ \ \ \ \ \ \ \ \keya{}not\symbol{}\ \normal{}QueryQueue.Empty\symbol{}()\ )\ $\{$ }
+\leftline{ 4:\ \ \ \ \ \comment{}//----\ PART\ 1:\ processing\ finished\ occlusion\ queries }
+\symbol{}\leftline{ 5:\ \ \ \ \ \keya{}while\symbol{}\ (\ \keya{}not\symbol{}\ \normal{}QueryQueue.Empty\symbol{}()\ \keya{}and\symbol{} }
+\leftline{ 6:\ \ \ \ \ \ \ \ \ \ \ \ (\normal{}ResultAvailable\symbol{}(\normal{}QueryQueue.Front\symbol{}())\ \keya{}or\symbol{} }
+\leftline{ 7:\ \ \ \ \ \ \ \ \ \ \ \ \ \normal{}TraversalStack.Empty\symbol{}())\ )\ $\{$ }
+\leftline{ 8:\ \ \ \ \ \ \ \normal{}N\symbol{}\ =\ \normal{}QueryQueue.Dequeue\symbol{}(); }
+\leftline{ 9:\ \ \ \ \ \ \ \comment{}//\ wait\ if\ result\ not\ available }
+\symbol{}\leftline{10:\ \ \ \ \ \ \ \normal{}visiblePixels\symbol{}\ =\ \normal{}GetOcclussionQueryResult\symbol{}(\normal{}N\symbol{}); }
+\leftline{11:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (\ \normal{}visiblePixels\symbol{}\ >\ \normal{}VisibilityThreshold\symbol{}\ )\ $\{$ }
+\leftline{12:\ \ \ \ \ \ \ \ \ \normal{}PullUpVisibility\symbol{}(\normal{}N\symbol{}); }
+\leftline{13:\ \ \ \ \ \ \ \ \ \normal{}TraverseNode\symbol{}(\normal{}N\symbol{}); }
+\leftline{14:\ \ \ \ \ \ \ $\}$ }
+\leftline{15:\ \ \ \ \ $\}$ }
+\leftline{16:\ \ \ \ \ \comment{}//----\ PART\ 2:\ kd-tree\ traversal }
+\symbol{}\leftline{17:\ \ \ \ \ \keya{}if\symbol{}\ (\ \keya{}not\symbol{}\ \normal{}TraversalStack.Empty\symbol{}()\ )\ $\{$ }
+\leftline{18:\ \ \ \ \ \ \ \normal{}N\symbol{}\ =\ \normal{}TraversalStack.Pop\symbol{}(); }
+\leftline{19:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (\ \normal{}InsideViewFrustum\symbol{}(\normal{}N\symbol{})\ )\ $\{$ }
+\leftline{20:\ \ \ \ \ \ \ \ \ \comment{}//\ identify\ previously\ visible\ nodes }
+\symbol{}\leftline{21:\ \ \ \ \ \ \ \ \ \normal{}wasVisible\symbol{}\ =\ \normal{}N.visible\symbol{}\ \&\&\ (\normal{}N.lastVisited\symbol{}\ ==\ \normal{}frameID\symbol{}\ -\normal{}1\symbol{}); }
+\leftline{22:\ \ \ \ \ \ \ \ \ \comment{}//\ identify\ previously\ opened\ nodes }
+\symbol{}\leftline{23:\ \ \ \ \ \ \ \ \ \normal{}opened\symbol{}\ =\ \normal{}wasVisible\symbol{}\ \&\&\ !\normal{}IsLeaf\symbol{}(\normal{}N\symbol{}); }
+\leftline{24:\ \ \ \ \ \ \ \ \ \comment{}//\ reset\ node's\ visibility\ classification }
+\symbol{}\leftline{25:\ \ \ \ \ \ \ \ \ \normal{}N.visible\symbol{}\ =\ \normal{}false\symbol{}; }
+\leftline{26:\ \ \ \ \ \ \ \ \ \comment{}//\ update\ node's\ visited\ flag }
+\symbol{}\leftline{27:\ \ \ \ \ \ \ \ \ \normal{}N.lastVisited\symbol{}\ =\ \normal{}frameID\symbol{}; }
+\leftline{28:\ \ \ \ \ \ \ \ \ \comment{}//\ skip\ testing\ all\ previously\ opened\ nodes }
+\symbol{}\leftline{29:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\ !\normal{}opened\symbol{}\ )\ $\{$ }
+\leftline{30:\ \ \ \ \ \ \ \ \ \ \normal{}IssueOcclusionQuery\symbol{}(\normal{}N\symbol{});\ \normal{}QueryQueue.Enqueue\symbol{}(\normal{}N\symbol{}); }
+\leftline{31:\ \ \ \ \ \ \ \ \ $\}$ }
+\leftline{32:\ \ \ \ \ \ \ \ \ \comment{}//\ traverse\ a\ node\ unless\ it\ was\ invisible }
+\symbol{}\leftline{33:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\ \normal{}wasVisible\symbol{}\ ) }
+\leftline{34:\ \ \ \ \ \ \ \ \ \ \normal{}TraverseNode\symbol{}(\normal{}N\symbol{}); }
+\leftline{35:\ \ \ \ \ \ \ $\}$ }
+\leftline{36:\ \ \ \ \ $\}$ }
+\leftline{37:\ \ \ $\}$ }
+\normal{}\leftline{38:\ \ \ TraverseNode\symbol{}(\normal{}N\symbol{})\ $\{$ }
+\leftline{39:\ \ \ \ \ \keya{}if\symbol{}\ (\ \normal{}IsLeaf\symbol{}(\normal{}N\symbol{})\ ) }
+\leftline{40:\ \ \ \ \ \ \ \normal{}Render\symbol{}(\normal{}N\symbol{}); }
+\leftline{41:\ \ \ \ \ \keya{}else\symbol{} }
+\leftline{42:\ \ \ \ \ \ \ \normal{}TraversalStack.PushChildren\symbol{}(\normal{}N\symbol{}); }
+\leftline{43:\ \ \ $\}$ }
+\normal{}\leftline{44:\ \ \ PullUpVisibility\symbol{}(\normal{}N\symbol{})\ $\{$ }
+\leftline{45:\ \ \ \ \ \keya{}while\symbol{}\ (!\normal{}N.visible\symbol{})\ $\{$\ \normal{}N.visible\symbol{}\ =\ \normal{}true\symbol{};\ \normal{}N\symbol{}\ =\ \normal{}N.parent\symbol{};\ $\}$ }
+\leftline{46:\ \ \ $\}$ }
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/makefile
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/makefile	(revision 255)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/makefile	(revision 255)
@@ -0,0 +1,34 @@
+PAS := $(shell ls *.pas)
+
+CPP := $(shell ls *.cpp)
+
+TEX = ${PAS:.pas=.tex} ${CPP:.cpp=.tex}
+
+C2TEX = ./c2tex.exe
+
+
+DEFAULT: $(C2TEX) $(TEX)
+
+
+clean:
+	rm -f $(TEX)
+
+
+$(C2TEX):
+	g++ c2tex.cpp -o c2tex
+
+
+.SUFFIXES: .pas .cpp .tex
+
+
+
+.pas.tex: $(C2TEX)
+	@echo "Converting $< to $@ ..."
+	@$(C2TEX) $< $@ -pascal -numbers
+	@echo "done."
+
+.cpp.tex: $(C2TEX)
+	@echo "Converting $< to $@ ..."
+	@$(C2TEX) $< $@ -numbers
+	@echo "done."
+
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode2.cpp
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode2.cpp	(revision 243)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/code/pseudocode2.cpp	(revision 243)
@@ -0,0 +1,47 @@
+Algorithm: Traversal of the kD-tree
+TraversalStack.Push(kDTree.Root);
+while ( not TraversalStack.Empty() or
+        not QueryQueue.Empty() ) {
+  //---- PART 1: processing finished occlusion queries
+  while ( not QueryQueue.Empty() and
+	  (ResultAvailable(QueryQueue.Front()) or
+	   TraversalStack.Empty()) ) {
+    N = QueryQueue.Dequeue();
+    // wait if result not available
+    visiblePixels = GetOcclussionQueryResult(N);
+    if ( visiblePixels > VisibilityThreshold ) {
+      PullUpVisibility(N);
+      TraverseNode(N);
+    }
+  }
+  //---- PART 2: kd-tree traversal
+  if ( not TraversalStack.Empty() ) {
+    N = TraversalStack.Pop();
+    if ( InsideViewFrustum(N) ) {
+      // identify previously visible nodes
+      wasVisible = N.visible && (N.lastVisited == frameID -1);
+      // identify previously opened nodes
+      opened = wasVisible && !IsLeaf(N);
+      // reset node's visibility classification
+      N.visible = false;
+      // update node's visited flag
+      N.lastVisited = frameID;
+      // skip testing all previously opened nodes
+      if ( !opened ) {
+	IssueOcclusionQuery(N); QueryQueue.Enqueue(N);
+      }
+      // traverse a node unless it was invisible
+      if ( wasVisible )
+	TraverseNode(N);
+    }
+  }
+}
+TraverseNode(N) {
+  if ( IsLeaf(N) )
+    Render(N);
+  else
+    TraversalStack.PushChildren(N);
+}
+PullUpVisibility(N) {
+  while (!N.visible) { N.visible = true; N = N.parent; }
+}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/report.tex
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/report.tex	(revision 277)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/report.tex	(revision 277)
@@ -0,0 +1,205 @@
+% ---------------------------------------------------------------------------
+% Author guideline and sample document for EG publication using LaTeX2e input
+% D.Fellner, v1.00, Oct 28, 2003
+
+\documentclass[a4paper,times]{report}
+
+% prepare for electronic version of your document
+\usepackage{times}
+\usepackage{a4wide}
+\usepackage{pdfpages}
+\usepackage{float}
+
+% For backwards compatibility to old LaTeX type font selection.
+% Uncomment if your document adheres to LaTeX2e recommendations.
+\let\rm=\rmfamily    \let\sf=\sffamily    \let\tt=\ttfamily
+\let\it=\itshape     \let\sl=\slshape     \let\sc=\scshape
+\let\bf=\bfseries
+
+% end of prologue
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\def\papername{Scientific Description of Algorithms for WP3 (Visibility)}
+\def\paperkeywords{Visibility}
+
+%deklarace tucneho fontu pro matematickou sazbu
+\DeclareSymbolFont{mathbold}{OML}{cmm}{b}{it}
+\DeclareMathAlphabet\mbi{OML}{cmm}{b}{it}
+\def\mc#1{\multicolumn{1}{|c|}{#1}}
+\def\mlc#1{\begin{tabular}{c}#1\end{tabular}}
+
+\def\m25d{2${1 \over 2}$D}
+\def\plucker{Pl\"ucker\ }
+\def\nvoq{NV\_occlusion\_query}
+\def\arboq{ARB\_occlusion\_query}
+\def\hpot{HP\_occlusion\_test}
+\def\ppoint{\hat{\bpi}}
+\def\pplane{\hat{\bomega}}
+
+\DeclareMathAlphabet\mbi{OML}{cmm}{b}{it}
+
+\DeclareSymbolFont{mathboldrg}{OML}{cmbrm}{b}{it}
+\DeclareMathAlphabet\mbrg{OML}{cmbrm}{b}{it}
+
+\DeclareSymbolFont{mathboldr}{OT1}{cmr}{bx}{n}
+\DeclareMathAlphabet\mbr{OT1}{cmr}{bx}{n}  
+
+\DeclareMathSymbol{\pv}{\mathord}{mathboldr}{114}  
+
+%preddefinovane symboly pro tucnou sazbu recke abecedy
+%pouzitelne pouze v matematickem rezimu
+\DeclareMathSymbol{\bGamma}{\mathord}{mathbold}{0}  
+\DeclareMathSymbol{\bDelta}{\mathord}{mathbold}{1}  
+\DeclareMathSymbol{\bTheta}{\mathord}{mathbold}{2}  
+\DeclareMathSymbol{\bLambda}{\mathord}{mathbold}{3}  
+\DeclareMathSymbol{\bXi}{\mathord}{mathbold}{4}  
+\DeclareMathSymbol{\bPi}{\mathord}{mathbold}{5}  
+\DeclareMathSymbol{\bSigma}{\mathord}{mathbold}{6}  
+\DeclareMathSymbol{\bUpsilon}{\mathord}{mathbold}{7}  
+\DeclareMathSymbol{\bPhi}{\mathord}{mathbold}{8}
+\DeclareMathSymbol{\bPsi}{\mathord}{mathbold}{9}  
+\DeclareMathSymbol{\bOmega}{\mathord}{mathbold}{10}  
+
+
+\DeclareMathSymbol{\balpha}{\mathord}{mathbold}{11}
+\DeclareMathSymbol{\bbeta}{\mathord}{mathbold}{12}
+\DeclareMathSymbol{\bgamma}{\mathord}{mathbold}{13}
+\DeclareMathSymbol{\bdelta}{\mathord}{mathbold}{14}
+\DeclareMathSymbol{\bepsilon}{\mathord}{mathbold}{15}
+\DeclareMathSymbol{\bzeta}{\mathord}{mathbold}{16}
+\DeclareMathSymbol{\beta}{\mathord}{mathbold}{17}
+\DeclareMathSymbol{\btheta}{\mathord}{mathbold}{18}  
+\DeclareMathSymbol{\biota}{\mathord}{mathbold}{19}  
+\DeclareMathSymbol{\bkappa}{\mathord}{mathbold}{20}  
+\DeclareMathSymbol{\blambda}{\mathord}{mathbold}{21}  
+\DeclareMathSymbol{\bmu}{\mathord}{mathbold}{22}  
+\DeclareMathSymbol{\bnu}{\mathord}{mathbold}{23}  
+\DeclareMathSymbol{\bxi}{\mathord}{mathbold}{24}  
+\DeclareMathSymbol{\bpi}{\mathord}{mathbold}{25}  
+\DeclareMathSymbol{\brho}{\mathord}{mathbold}{26}  
+\DeclareMathSymbol{\bsigma}{\mathord}{mathbold}{27}  
+\DeclareMathSymbol{\btau}{\mathord}{mathbold}{28}  
+\DeclareMathSymbol{\bupsilon}{\mathord}{mathbold}{29}  
+\DeclareMathSymbol{\bphi}{\mathord}{mathbold}{30}  
+\DeclareMathSymbol{\bchi}{\mathord}{mathbold}{31}  
+\DeclareMathSymbol{\bpsi}{\mathord}{mathbold}{32}  
+\DeclareMathSymbol{\bomega}{\mathord}{mathbold}{33}  
+\DeclareMathSymbol{\bvarepsilon}{\mathord}{mathbold}{34}  
+\DeclareMathSymbol{\bvartheta}{\mathord}{mathbold}{35}  
+\DeclareMathSymbol{\bvarpi}{\mathord}{mathbold}{36}  
+\DeclareMathSymbol{\bvarrho}{\mathord}{mathbold}{37}  
+\DeclareMathSymbol{\bvarsigma}{\mathord}{mathbold}{38}  
+\DeclareMathSymbol{\bvarphi}{\mathord}{mathbold}{39}  
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% INCLUDING IMAGES ON/OFF
+\def\DRAFTFIGS{false}
+\def\DRAFTIMAGES{false}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Latin-2: Pøíli¹ Ÿlu»ouèký kùò úpìl ïábelské ódy.
+%% Win1250?: 'Pøíli± µlu ouèký kùò pìl ïábelské ódy.'
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\usepackage{thumbpdf}
+\usepackage{alltt}
+\usepackage{times}
+\usepackage{hhline}
+\usepackage{multirow}
+%\usepackage{mathptm}
+%\usepackage{algorithmic}
+%\usepackage{algorithm}
+\usepackage{url}
+\usepackage{rotating}
+
+\usepackage{ifpdf}
+\ifpdf
+\usepackage{graphicx}
+\DeclareGraphicsExtensions{.pdf,.png,.gif,.jpg}
+\else
+\usepackage{graphicx}
+%\usepackage[dvips]{graphicx}
+\DeclareGraphicsExtensions{.eps,.png,.gif,.jpg}
+\fi
+
+
+\makeindex
+
+%-------------------------------------------------------------------------
+\begin{document}
+\setcounter{tocdepth}{1}
+\includepdf[pages=1-2]{cover.pdf}
+\pagenumbering{roman}
+\tableofcontents
+\pagenumbering{arabic}
+
+
+% ---------------------------------------------------------------------
+% EG author guidelines plus sample file for EG publication using LaTeX2e input
+% D.Fellner, v1.00, Oct 28, 2003
+
+
+\title
+      {\papername}
+
+% for anonymous conference submission please enter your SUBMISSION ID
+% instead of the author's name (and leave the affiliation blank) !!
+\author{Ji\v{r}\'\i{} Bittner, Oliver Mattausch, Michael Wimmer\\
+        Institute of Computer Graphics and Algorithms, Vienna University of Technology\\
+}
+
+
+
+
+% ------------------------------------------------------------------------
+
+% if the Editors-in-Chief have given you the data, you may uncomment
+% the following five lines and insert it here
+%
+% \volume{23}   % the volume in which the issue will be published;
+% \issue{2}     % the issue number of the publication
+% \pStartPage{201}      % set starting page
+
+
+
+%\maketitle
+
+\include{introduction}
+
+\include{analysis}
+
+\include{online}
+
+\include{sampling}
+
+\include{mutual}
+
+
+
+%Use bibtex to produce references
+%\bibliographystyle{unsrt}
+%\bibliographystyle{plain}
+%\bibliographystyle{abbrv}
+%\bibliographystyle{alpha}
+%\bibliographystyle{abbrvnat}
+\bibliographystyle{is-alpha}
+\bibliography{Bib/jiri,Bib/renmame,Bib/rtmame,Bib/cgemame,Bib/vismame,Bib/bookmame,Bib/minimum,Bib/new}
+
+
+
+%% the main contribution of the paper is that it schedules occlusion
+%% queries in an order minimizing the overhead to to latency, and uses
+%% temporal and spatial coherence to do so.  (16:05:46) salzrat:
+%% (basically what we said at the end of the introduction, there it is in
+%% the correct order of importance, because it states the new
+%% contribution first) (16:06:12) salzrat: if we stress the scheduling
+%% more, then the other thing will not be so obviously a reuse of the
+%% other paper
+
+\end{document}
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/everyshi.sty
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/everyshi.sty	(revision 277)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/everyshi.sty	(revision 277)
@@ -0,0 +1,101 @@
+%%
+%% This is file `everyshi.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% everyshi.dtx  (with options: `package')
+%% 
+%% Copyright (C) [1994..1999] by Martin Schroeder. All rights reserved.
+%% 
+%% This file is part of the EveryShi package
+%% 
+%% This program may be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License, either version 1.0 of this
+%% license, or (at your option) any later version.
+%% The latest version of this license is in
+%%    CTAN:macros/latex/base/lppl.txt.
+%% 
+%% Happy users are requested to send me a postcard. :-)
+%% 
+%% The EveryShi package contains these files:
+%% 
+%%       everyshi.asc
+%%       everyshi.dtx
+%%       everyshi.dvi
+%%       everyshi.ins
+%%       everyshi.bug
+%% 
+%% Error Reports in case of UNCHANGED versions to
+%% 
+%%                         Martin Schr"oder
+%%                         Cr"usemannallee 3
+%%                         D-28213 Bremen
+%%                         Martin.Schroeder@ACM.org
+%% 
+%% File: everyshi.dtx Copyright (C) 1994 Martin Schr\"oder
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{everyshi}
+         [1999/06/08 v2.03 EveryShipout Package (MS)]
+%% \CharacterTable
+%% {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%  Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%  Digits        \0\1\2\3\4\5\6\7\8\9
+%%  Exclamation   \!     Double quote  \"     Hash (number) \#
+%%  Dollar        \$     Percent       \%     Ampersand     \&
+%%  Acute accent  \'     Left paren    \(     Right paren   \)
+%%  Asterisk      \*     Plus          \+     Comma         \,
+%%  Minus         \-     Point         \.     Solidus       \/
+%%  Colon         \:     Semicolon     \;     Less than     \<
+%%  Equals        \=     Greater than  \>     Question mark \?
+%%  Commercial at \@     Left bracket  \[     Backslash     \\
+%%  Right bracket \]     Circumflex    \^     Underscore    \_
+%%  Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%  Right brace   \}     Tilde         \~}
+%%
+%% \iffalse meta-comment
+%% ===================================================================
+%%  @LaTeX-package-file{
+%%     author          = {Martin Schr\"oder},
+%%     version         = "2.03",
+%%     date            = "8 June 1999",
+%%     filename        = "everyshi.sty",
+%%     address         = {Martin Schr\"oder
+%%                        Cr\"usemannallee 3
+%%                        D-28213 Bremen
+%%     telephone       = "+49-421-2239425",
+%%     email           = "Martin.Schroeder@ACM.org",
+%%     pgp-Key         = "2048 bit / KeyID 292814E5",
+%%     pgp-fingerprint = "7E86 6EC8 97FA 2995 82C3  FEA5 2719 090E",
+%%     docstring       = "LaTeX package which defines a new hook
+%%                        \EveryShipout.
+%%  }
+%% ===================================================================
+%% \fi
+
+\let\@EveryShipout@Hook\@empty
+\newcommand{\EveryShipout}{\g@addto@macro\@EveryShipout@Hook}
+\newcommand{\@EveryShipout@Shipout}{%
+   \afterassignment\@EveryShipout@Test
+   \global\setbox\@cclv= %
+   }
+\newcommand{\@EveryShipout@Test}{%
+   \ifvoid\@cclv\relax
+      \aftergroup\@EveryShipout@Output
+   \else
+      \@EveryShipout@Output
+   \fi%
+   }
+\newcommand{\@EveryShipout@Output}{%
+   \@EveryShipout@Hook%
+   \@EveryShipout@Org@Shipout\box\@cclv%
+   }
+\newcommand{\@EveryShipout@Org@Shipout}{}
+\newcommand*{\@EveryShipout@Init}{%
+   \let\@EveryShipout@Org@Shipout\shipout
+   \let\shipout\@EveryShipout@Shipout
+   }
+\AtBeginDocument{\@EveryShipout@Init}
+\endinput
+%%
+%% End of file `everyshi.sty'.
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/makefile
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/makefile	(revision 248)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/makefile	(revision 248)
@@ -0,0 +1,224 @@
+# ================================================================
+# $Id: makefile,v 1.8 2004/05/07 00:55:51 bittner Exp $
+# ================================================================
+#/** @author Jiri Bittner */
+
+### For Tex Files #####
+####################
+PROJECT   = report
+#####################
+
+BACKUPPATH = ./backup
+SHELL=/bin/sh
+
+##########################################
+
+
+
+#########################################
+PRINT      = lpr -Pduplex
+
+MAKE      = make
+TAR       = tar
+
+DVI       =$(PROJECT).dvi
+PS        =$(PROJECT).ps
+PDF       =$(PROJECT).pdf
+HP        =$(PROJECT).hp
+BIB       =$(PROJECT).bbl
+DEPEND    =  *.tex
+DEPALL    = $(DEPEND) *.ps
+ZIP = zip
+MAKE_GLOSSARY=./makeglossary
+
+default:
+		make pdf
+
+$(DVI):	$(DEPEND) 
+	@make code
+	@make epsimages
+	-latex $(PROJECT)
+
+noimages:
+	-latex $(PROJECT)
+
+$(PS):	$(DVI)
+	@dvips -t a4 -o$(PS) $(DVI)
+
+$(MAKE_GLOSSARY):
+	gcc -o $(MAKE_GLOSSARY) $(MAKE_GLOSSARY).c
+
+
+gloss:	$(MAKE_GLOSSARY)
+	$(MAKE_GLOSSARY) $(PROJECT)
+
+$(PROJECT).gls: $(PROJECT).tex
+	make gloss
+
+$(BIB):	$(PDF)
+	bibtex $(PROJECT)
+
+bibl:	
+	make $(BIB)
+
+reb:	$(DEPEND) # $(PROJECT).gls
+	-latex $(PROJECT)
+	make bibl
+	-latex $(PROJECT)
+
+
+f:	$(DEPEND)
+	@rm $(DVI)
+	make $(DVI)
+
+show:   
+	$(MAKE) $(DVI)
+	@xdvi -shrinkbutton3 6 -shrinkbutton4 9 -s 9   $(DVI) &
+
+sshow:   
+	$(MAKE) $(DVI)
+	@xdvi -s 7   $(DVI) &
+
+#-mgs3 1100x600
+
+pshow:   
+	$(MAKE) $(PDF)
+	@acroread $(PDF) &
+
+kshow:   
+	$(MAKE) $(DVI)
+	@kdvi $(DVI) &
+
+tar: 
+	@if(test -e core) then rm core; fi
+	@$(TAR) Zcvf  "$(BACKUPPATH)/$(PROJECT)`date +%d.%b-%H.%M`.tar.Z" *
+
+zip:
+	@if(test -e core) then rm core; fi
+	@$(ZIP) -r "$(BACKUPPATH)/$(PROJECT)`date +%d.%b-%H.%M`.zip" *  -x backup/*
+
+ziptex:
+	@if(test -e core) then rm core; fi
+	@$(ZIP) "$(BACKUPPATH)/$(PROJECT)-tex`date +%d.%b-%H.%M`.zip" makefile *.tex *.bib *.mac *.sty *.cls *.bst Bib/*.bib code/* figs/* images/* plots/* -x backup/*
+
+
+clean: 	
+	-@rm -f *~ *.log *.dvi *.aux *.toc \
+	$(PROJECT).blg $(PROJECT).bbl $(PROJECT).out $(PROJECT).tpt \
+	$(PROJECT).brf
+	@if(test -e core) then rm core; fi 
+	@if(test -e $(MAKE_GLOSSARY)) then rm $(MAKE_GLOSSARY); fi 
+	@make -C images clean
+	@make -C figs clean
+	@make -C plots clean
+
+cleanall: 	
+	@make clean
+	@if(test -e $(PS)) then rm $(PS); fi  		
+	@if(test -e $(PDF)) then rm $(PDF); fi
+
+ps:     
+	make $(PS)
+
+pspdf: $(DVI)
+	dvips -Ppdf -G0 -t A4 -o$(PS) $(DVI)
+	ps2pdf -dMaxSubsetPct=100 -dCompatibilityLevel=1.3 \
+          -dSubsetFonts=true -dEmbedAllFonts=true \
+          -dAutoFilterColorImages=false \
+          -dAutoFilterGrayImages=false \
+          -dColorImageFilter=/FlateEncode \
+          -dGrayImageFilter=/FlateEncode \
+          -dMonoImageFilter=/FlateEncode $(PS) $(PDF)
+
+pdf:	
+	make $(PDF)
+
+fpdf:	
+	@rm -f $(PDF)
+	@make $(PDF)
+
+.PHONY: pdfimages
+pdfimages:
+	@make -C figs pdf
+	@make -C plots pdf
+	@make -C images pdf
+
+.PHONY: epsimages
+epsimages:
+	@make -C figs eps
+	@make -C plots eps
+	@make -C images eps
+
+
+.PHONY: images
+images:
+	@make pdfimages
+	@make epsimages
+
+.PHONY: code
+code:
+	@make -C code
+
+
+$(PDF): $(DEPEND)
+	@make code
+	@make pdfimages
+	@pdflatex $(PROJECT)
+
+pdfthumb:
+	@make pdf
+	@thumbpdf $(PROJECT)
+	@make fpdf
+
+
+
+
+#dvipdf $(DVI)
+
+lps:
+	@make $(DVI)
+	@dvips -o$(PS) $(DVI)
+
+4ps:     $(DEPALL) ps
+	rm -f 4$(PS)
+	pstops  '4:0@.5(0,0.45h)+1@.5(0,0)+2@0.5(0.5w,0.45h)+3@0.5(0.5w,0)' \
+	< $(PS) > 4$(PS)
+
+hp:      $(PS)
+	gs -q -dNOPAUSE -sPAPERSIZE=a4 -sOutputFile=$(HP) -sDEVICE=ljet4 -r600 $(PS)
+
+rotate: $(PS)
+	  @pstops -w1h -h1w '0L(1h,0)' $(PS) rotated-$(PS)
+
+print:	
+	$(MAKE) $(DVI)
+	@dvips -o$(PS) $(DVI)
+	$(PRINT) $(PS)
+
+help:
+	@echo "------------------------------------------------------"
+	@echo "implicit - rebuids the dvi"
+	@echo "reb      - rebuilds it twice"
+	@echo "show     - rebulds and runs xdvi"
+	@echo "tar      - makes a backup"
+	@echo "clean    - delets *~ *.log *.dvi *.aux *.toc"
+	@echo "ps       - generates ps from dvi"
+	@echo "print    - generates ps and sends it to the printer"
+	@echo "------------------------------------------------------"
+
+
+login:
+	cvs -d :pserver:$(CVSNAME)@sgi.felk.cvut.cz:/usr.sgi/CVS_archive login
+
+update:
+	@echo "Updating in . ..."
+	@export CVS_RSH=ssh ; cvs -z 8 update
+	@echo "done."
+	@echo
+
+commit:
+#	@echo "Type in the comment terminated by ENTER, Ctrl-Z, ENTER."
+	@echo "Commiting ...."
+	@export CVS_RSH=ssh ; cvs -z 8 commit -m ""
+	@echo "done."
+	@echo
Index: /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/eso-pic.sty
===================================================================
--- /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/eso-pic.sty	(revision 277)
+++ /GTP-Internal/trunk/Lib/Vis/docs/SciReport/SciReport/eso-pic.sty	(revision 277)
@@ -0,0 +1,85 @@
+%%
+%% This is file `eso-pic.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% eso-pic.dtx  (with options: `package')
+%% 
+%% Copyright (C) 1998 by Rolf Niepraschk. All rights reserved.
+%% 
+%% This file is part of the eso-pic package
+%% 
+%% Error Reports in case of UNCHANGED versions to niepraschk@ptb.de
+%% 
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+%%
+%% \iffalse meta-comment
+%% ===================================================================
+%%  @LaTeX-package-file{
+%%    author         = {Rolf Niepraschk},
+%%    version        = "0.5",
+%%    date           = "11 July 1998",
+%%    filename       = "eso-pic.sty",
+%%    address        = "",
+%%    telephone      = "",
+%%    email          = "niepraschk@ptb.de",
+%%    codetable      = "ISO/ASCII",
+%%    keywords       = "LaTeX2e, \shipout, picture",
+%%    dependences    = "everyshi",
+%%    supported      = "yes",
+%%    docstring      = "LaTeX package which makes it easy to add some
+%%                      picture commands to every page."
+%%  }
+%% ===================================================================
+%% \fi
+%%
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/01/25]
+\ProvidesPackage{eso-pic}
+   [1998/07/11 v0.5 eso-pic -- extension to `everyshi' (RN)]
+
+\RequirePackage{everyshi}[1995/01/25]
+
+\newcommand{\@ShipoutPicture@Hook}{}
+\newcommand{\AddToShipoutPicture}{\g@addto@macro\@ShipoutPicture@Hook}
+\newcommand{\ClearShipoutPicture}{\let\@ShipoutPicture@Hook\@empty}
+\newcommand{\@ShipoutPicture}{%
+  \ifx\@ShipoutPicture@Hook\@empty
+  \else
+    \bgroup
+      \@tempdima=1in
+      \@tempcnta=\@tempdima
+      \@tempcntb=-\@tempdima
+      \advance\@tempcntb\paperheight
+      \global\setbox\@cclv\vbox{%
+      \vbox{%
+        \unitlength=1sp%
+        \begin{picture}(0,0)(\@tempcnta,\@tempcntb)%
+          \let\protect\relax\@ShipoutPicture@Hook%
+        \end{picture}}%
+        \box\@cclv%
+      }%
+    \egroup
+  \fi
+}
+
+\EveryShipout{\@ShipoutPicture}
+\endinput
+%%
+%% End of file `eso-pic.sty'.
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/stdafx.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/stdafx.h	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/stdafx.h	(revision 629)
@@ -0,0 +1,12 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#pragma once
+
+
+#include <iostream>
+#include <tchar.h>
+
+// TODO: reference additional headers your program requires here
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/DataTypes.c
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/DataTypes.c	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/DataTypes.c	(revision 629)
@@ -0,0 +1,225 @@
+//Copyright and Disclaimer:
+//This code is copyright Vienna University of Technology, 2004.
+
+#include <memory.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include "DataTypes.h"
+#include "MathStuff.h"
+
+const struct Object OBJECT_NULL = { 0, 0 };
+const struct VecPoint VECPOINT_NULL = { 0, 0 };
+const struct VecPlane VECPLANE_NULL = { 0, 0 };
+
+void copyVector3(Vector3 result, const Vector3 input) {
+	result[0] = input[0]; 
+	result[1] = input[1];
+	result[2] = input[2];
+}
+
+void addVector3(Vector3 result, const Vector3 a, const Vector3 b) {
+	int i;
+	for(i = 0; i < 3; i++) {
+		result[i] = a[i]+b[i];
+	}
+}
+
+void diffVector3(Vector3 result, const Vector3 a, const Vector3 b) {
+	int i;
+	for(i = 0; i < 3; i++) {
+		result[i] = a[i]-b[i];
+	}
+}
+
+void copyVector3Values(Vector3 result, const double x, const double y, const double z) {
+	result[0] = x; 
+	result[1] = y;
+	result[2] = z;
+}
+
+void copyMatrix(Matrix4x4 result, const Matrix4x4 input) {
+	if(input != result) {
+		memcpy(result,input,4*4*sizeof(double));
+	}
+}
+
+void planesSetSize(struct VecPlane* p, const int size) {
+	if(0 != p) {
+		if(size == p->size) {
+			return;
+		}
+		p->plane = (struct Plane*)realloc(p->plane,size*sizeof(struct Plane));
+		p->size = size;
+	}
+}
+
+void emptyVecPlane(struct VecPlane* p) {
+	planesSetSize(p,0);
+}
+
+void vecPointSetSize(struct VecPoint* poly, const int size) {
+	if(0 != poly) {
+		if(size == poly->size) {
+			return;
+		}
+		poly->points = (Vector3*)realloc(poly->points,size*sizeof(Vector3));
+		poly->size = size;
+	}
+}
+
+void emptyVecPoint(struct VecPoint* poly) {
+	vecPointSetSize(poly,0);
+}
+
+void append2VecPoint(struct VecPoint* poly, const Vector3 p) {
+	if(0 != poly) {
+		int size = poly->size;
+		vecPointSetSize(poly,size+1);
+		copyVector3(poly->points[size],p);
+	}
+}
+
+void copyVecPoint(struct VecPoint* poly, const struct VecPoint poly2) {
+	if(0 != poly) {
+		int i;
+		vecPointSetSize(poly,poly2.size);
+		for(i= 0; i < poly2.size; i++) {
+			copyVector3(poly->points[i],poly2.points[i]);
+		}
+	}
+}
+
+void swapVecPoint(struct VecPoint* poly1, struct VecPoint* poly2) {
+	if(0 != poly1 && 0 != poly2 && poly1 != poly2) {
+		{
+			Vector3* points = poly1->points;
+			poly1->points = poly2->points;
+			poly2->points = points;
+		}
+		{
+			int size = poly1->size;
+			poly1->size = poly2->size;
+			poly2->size = size;
+		}
+	}
+}
+
+void objectSetSize(struct Object* obj, const int size) {
+	if(0 != obj) {
+		int i;
+		if(size == obj->size) {
+			return;
+		}
+		//dispose if shrinking
+		for(i = size; i < obj->size; i++) {
+			emptyVecPoint( &(obj->poly[i]) ); 
+		}
+		//allocate new place
+		obj->poly = (struct VecPoint*)realloc(obj->poly,size*sizeof(struct VecPoint));
+		//initialize new place
+		for(i = obj->size; i < size; i++) {
+			obj->poly[i] = VECPOINT_NULL;
+		}
+		obj->size = size;
+	}
+}
+
+void emptyObject(struct Object* obj) {
+	objectSetSize(obj,0);
+}
+
+void copyObject(struct Object* obj, const struct Object objIn) {
+	if(0 != obj) {
+		int i;
+		objectSetSize(obj,objIn.size);
+		for(i = 0; i < objIn.size; i++) {
+			copyVecPoint( &(obj->poly[i]), objIn.poly[i]);
+		}
+	}
+}
+
+void append2Object(struct Object* obj, const struct VecPoint poly) {
+	if(0 != obj) {
+		int size = obj->size;
+		objectSetSize(obj,size+1);
+		copyVecPoint( &(obj->poly[size]) ,poly);
+	}
+}
+
+
+void convObject2VecPoint(struct VecPoint* points,const struct Object obj) {
+	if(0 != points) {
+		int i, j;
+		emptyVecPoint(points);
+		for(i = 0; i < obj.size; i++) {
+			struct VecPoint* p = &(obj.poly[i]);
+			for(j = 0; j < p->size; j++) {
+				append2VecPoint(points,p->points[j]);
+			}
+		}
+	}
+}
+
+void calcAABoxPoints(Vector3x8 points, const struct AABox b) {
+    //generate 8 corners of the box
+	copyVector3Values(points[0],b.min[0],b.min[1],b.min[2]);//     7+------+6
+	copyVector3Values(points[1],b.max[0],b.min[1],b.min[2]);//     /|     /|
+	copyVector3Values(points[2],b.max[0],b.max[1],b.min[2]);//    / |    / |
+	copyVector3Values(points[3],b.min[0],b.max[1],b.min[2]);//   / 4+---/--+5
+	copyVector3Values(points[4],b.min[0],b.min[1],b.max[2]);// 3+------+2 /    y   z
+	copyVector3Values(points[5],b.max[0],b.min[1],b.max[2]);//  | /    | /     |  /
+	copyVector3Values(points[6],b.max[0],b.max[1],b.max[2]);//  |/     |/      |/
+	copyVector3Values(points[7],b.min[0],b.max[1],b.max[2]);// 0+------+1      *---x
+}
+
+void calcAABoxPlanes(struct VecPlane* planes, const struct AABox b) {
+	if(0 != planes) {
+		struct Plane *p;
+		planesSetSize(planes,6);
+		
+		//bottom plane
+		p = &(planes->plane[0]);
+		copyVector3Values(p->n,0,-1,0);
+		p->d = absDouble(b.min[1]);
+
+		//top plane
+		p = &(planes->plane[1]);
+		copyVector3Values(p->n,0,1,0);
+		p->d = absDouble(b.max[1]);
+
+		//left plane
+		p = &(planes->plane[2]);
+		copyVector3Values(p->n,-1,0,0);
+		p->d = absDouble(b.min[0]);
+
+		//right plane
+		p = &(planes->plane[3]);
+		copyVector3Values(p->n,1,0,0);
+		p->d = absDouble(b.max[0]);
+
+		//back plane
+		p = &(planes->plane[4]);
+		copyVector3Values(p->n,0,0,-1);
+		p->d = absDouble(b.min[2]);
+
+		//front plane
+		p = &(planes->plane[5]);
+		copyVector3Values(p->n,0,0,1);
+		p->d = absDouble(b.max[2]);
+
+	}
+}
+
+double getPlaneCoeff(struct Plane* plane, int i)
+{
+	if(i < 3) return plane->n[i];
+	return plane->d;
+}
+
+void setPlaneCoeff(double coeff, struct Plane* plane, int i)
+{
+	if(i < 3) 
+		plane->n[i] = coeff;
+	else 
+		plane->d = coeff;
+}
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Geometry.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Geometry.h	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Geometry.h	(revision 629)
@@ -0,0 +1,141 @@
+#ifndef NO_PRAGMA_ONCE
+#pragma once
+#endif
+
+#ifndef GEOMETRY_H
+#define GEOMETRY_H
+
+extern "C"
+{
+	#include "MathStuff.h"
+}
+
+/** Represents a drawable geometry. It can draw simple objects (teapot,
+	torus, shere. It also contains the object transformation and 
+	the material .An AAB is used as bouning volume.
+*/
+class Geometry
+{
+public:
+	Geometry();
+	Geometry(Vector3 translation, float xRot, float yRot, float zRot, float scale, int objectType);
+	//! renders this geometry
+	void Render();
+	
+	//! sets rotations in degree : executed in the order x, y, and z rotation
+	void SetRotations(float xRot, float yRot, float zRot);
+	//! sets the rotation matrix
+	void SetTranslation(Vector3 translation);
+	//! a uniform scale
+	void SetScale(float scale);
+	//! returns current scale
+	float GetScale();
+
+	//! returns translation
+	void GetTranslation(Vector3 translation);
+	//! returns rotation
+	void GetRotations(float &xRot, float &yRot, float &zRot);
+
+	// --- material settings
+	void SetAmbientColor(float ambientR,   float ambientG,  float ambientB);
+	void SetDiffuseColor(float diffuseR,   float diffuseG,  float diffuseB);
+	void SetSpecularColor(float specularR, float specularG, float specularB);
+
+	const AABox& GetBoundingVolume();
+		
+	//! last visited flag, important for rendering each geometry only once
+	void SetLastVisited(int lastVisited);
+	//! returns lastvisited flag
+	int GetLastVisited();
+
+	// --- sets the object type to one of teapot, torus, sphere
+	void SetObjectType(int type);
+
+	enum{TEAPOT, TORUS, SPHERE, NUM_OBJECTS};
+	
+	static int sDisplayList[NUM_OBJECTS];
+	
+	//! cleans static members
+	static void CleanUp();
+	//! returns the triangle count of the specified object type
+	static int CountTriangles(int objectType);
+	//! initialises display lists
+	static void ResetLists(); 
+
+protected:
+	//! generates the display list this a object
+	void GenerateList();
+
+	//! calculates accumulated transformation matrix
+	void CalcTransform();
+	//! applies tranformations
+	void Transform();
+
+	// --- statistics
+	static int CountTorusTriangles();
+	static int CountSphereTriangles();
+	static int CountTeapotTriangles();
+
+	//!
+	static void CreateTorus(float innerRadius, float outerRadius, int precision);
+
+	//! calculates the bounding volume of this geometry
+	void CalcBoundingVolume();
+	// the size of the bounging box is calculated using the radius of the sphere
+	void CalcSphereBoundingVolume();
+	// the standard bounding volume calculation having an array of vertices
+	void CalcBoundingVolume(float *vertices, const int num_vertices);
+
+	// initialises static members
+	static bool Init();
+
+	// --- drawing routines
+	static void RenderTeapot();
+	static void RenderSphere();
+	static void RenderTorus();
+
+	// --- transformations
+	float mXRotation;
+	float mYRotation;
+	float mZRotation;
+	
+	float mScale;
+
+	Vector3 mTranslation;
+	
+	//! accumulated transform matrix 
+	Matrix4x4 mTransform;
+
+	// --- material
+	float mAmbientColor[3];
+	float mDiffuseColor[3];
+	float mSpecularColor[3];
+
+	AABox mBoundingBox;
+	//! type of the rendered object (teapot, sphere ...)
+	int mObjectType;
+	
+	int mLastVisited;
+
+	// --- static members
+
+	static bool sIsInitialised;
+
+	static float const sphere_radius;
+	
+	static int num_torus_indices;
+	static int num_torus_vertices;
+	static int num_torus_normals;
+
+	static float *torus_vertices;
+	static float *torus_normals;
+	static int *torus_indices;
+
+	static const int torus_precision;
+	static const int sphere_precision;
+	static const float torus_inner_radius;
+	static const float torus_outer_radius;
+};
+
+
+#endif // GEOMETRY_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/teapot.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/teapot.h	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/teapot.h	(revision 629)
@@ -0,0 +1,3071 @@
+#ifndef TEAPOT_H
+#define TEAPOT_H
+
+const int num_teapot_indices = 2781;
+const int num_teapot_vertices = 1364;
+const int num_teapot_normals = 1364;
+
+float teapot_vertices [] = {
+							0.0663056, 0.117825, 2.10688e-008,
+							0.0672, 0.1152, 2.05994e-008,
+							0.0639726, 0.117825, 0.0178043,
+							0.0648356, 0.1152, 0.0180445,
+							0.0573666, 0.117825, 0.0336931,
+							0.0581404, 0.1152, 0.0341476,
+							0.0470769, 0.117825, 0.0470769,
+							0.047712, 0.1152, 0.047712,
+							0.033693, 0.117825, 0.0573666,
+							0.0341476, 0.1152, 0.0581404,
+							0.0178043, 0.117825, 0.0639726,
+							0.0180444, 0.1152, 0.0648356,
+							0, 0.117825, 0.0663056,
+							0, 0.1152, 0.0672,
+							0.0664444, 0.1194, 2.13504e-008,
+							0.0641066, 0.1194, 0.0178416,
+							0.0574868, 0.1194, 0.0337636,
+							0.0471755, 0.1194, 0.0471756,
+							0.0337636, 0.1194, 0.0574868,
+							0.0178416, 0.1194, 0.0641066,
+							0, 0.1194, 0.0664444,
+							0.06735, 0.119925, 2.14443e-008,
+							0.0649803, 0.119925, 0.0180847,
+							0.0582702, 0.119925, 0.0342238,
+							0.0478185, 0.119925, 0.0478185,
+							0.0342238, 0.119925, 0.0582702,
+							0.0180847, 0.119925, 0.0649803,
+							0, 0.119925, 0.06735,
+							0.0687556, 0.1194, 2.13504e-008,
+							0.0663364, 0.1194, 0.0184622,
+							0.0594863, 0.1194, 0.034938,
+							0.0488164, 0.1194, 0.0488164,
+							0.034938, 0.1194, 0.0594863,
+							0.0184621, 0.1194, 0.0663364,
+							0, 0.1194, 0.0687556,
+							0.0703944, 0.117825, 2.10688e-008,
+							0.0679176, 0.117825, 0.0189022,
+							0.0609042, 0.117825, 0.0357708,
+							0.0499801, 0.117825, 0.0499801,
+							0.0357708, 0.117825, 0.0609042,
+							0.0189022, 0.117825, 0.0679176,
+							0, 0.117825, 0.0703944,
+							0.072, 0.1152, 2.05994e-008,
+							0.0694667, 0.1152, 0.0193333,
+							0.0622933, 0.1152, 0.0365867,
+							0.05112, 0.1152, 0.05112,
+							0.0365867, 0.1152, 0.0622933,
+							0.0193333, 0.1152, 0.0694667,
+							0, 0.1152, 0.072,
+							-0.0178043, 0.117825, 0.0639726,
+							-0.0180444, 0.1152, 0.0648356,
+							-0.033693, 0.117825, 0.0573666,
+							-0.0341476, 0.1152, 0.0581404,
+							-0.0470769, 0.117825, 0.0470769,
+							-0.047712, 0.1152, 0.047712,
+							-0.0573666, 0.117825, 0.033693,
+							-0.0581404, 0.1152, 0.0341476,
+							-0.0639726, 0.117825, 0.0178043,
+							-0.0648356, 0.1152, 0.0180445,
+							-0.0663056, 0.117825, 2.10688e-008,
+							-0.0672, 0.1152, 2.05994e-008,
+							-0.0178416, 0.1194, 0.0641066,
+							-0.0337636, 0.1194, 0.0574867,
+							-0.0471756, 0.1194, 0.0471756,
+							-0.0574867, 0.1194, 0.0337636,
+							-0.0641066, 0.1194, 0.0178416,
+							-0.0664444, 0.1194, 2.13504e-008,
+							-0.0180847, 0.119925, 0.0649803,
+							-0.0342238, 0.119925, 0.0582702,
+							-0.0478185, 0.119925, 0.0478185,
+							-0.0582702, 0.119925, 0.0342238,
+							-0.0649803, 0.119925, 0.0180847,
+							-0.06735, 0.119925, 2.14443e-008,
+							0, 0.1194, 0.0687556,
+							-0.0184621, 0.1194, 0.0663364,
+							-0.034938, 0.1194, 0.0594863,
+							-0.0488164, 0.1194, 0.0488164,
+							-0.0594863, 0.1194, 0.034938,
+							-0.0663364, 0.1194, 0.0184621,
+							-0.0687556, 0.1194, 2.13504e-008,
+							0, 0.117825, 0.0703944,
+							-0.0189022, 0.117825, 0.0679176,
+							-0.0357708, 0.117825, 0.0609042,
+							-0.0499801, 0.117825, 0.0499801,
+							-0.0609042, 0.117825, 0.0357708,
+							-0.0679176, 0.117825, 0.0189022,
+							-0.0703944, 0.117825, 2.10688e-008,
+							-0.0193333, 0.1152, 0.0694667,
+							-0.0365867, 0.1152, 0.0622933,
+							-0.05112, 0.1152, 0.05112,
+							-0.0622933, 0.1152, 0.0365867,
+							-0.0694667, 0.1152, 0.0193333,
+							-0.072, 0.1152, 2.05994e-008,
+							-0.0663055, 0.117825, 2.10688e-008,
+							-0.0639726, 0.117825, -0.0178043,
+							-0.0648356, 0.1152, -0.0180444,
+							-0.0573666, 0.117825, -0.033693,
+							-0.0581404, 0.1152, -0.0341475,
+							-0.0470769, 0.117825, -0.0470769,
+							-0.047712, 0.1152, -0.047712,
+							-0.033693, 0.117825, -0.0573666,
+							-0.0341476, 0.1152, -0.0581404,
+							-0.0178043, 0.117825, -0.0639726,
+							-0.0180444, 0.1152, -0.0648356,
+							0, 0.117825, -0.0663055,
+							0, 0.1152, -0.0672,
+							-0.0664444, 0.1194, 2.13504e-008,
+							-0.0641066, 0.1194, -0.0178416,
+							-0.0574867, 0.1194, -0.0337636,
+							-0.0471756, 0.1194, -0.0471756,
+							-0.0337636, 0.1194, -0.0574868,
+							-0.0178416, 0.1194, -0.0641066,
+							0, 0.1194, -0.0664444,
+							-0.0649803, 0.119925, -0.0180847,
+							-0.0582702, 0.119925, -0.0342238,
+							-0.0478185, 0.119925, -0.0478185,
+							-0.0342238, 0.119925, -0.0582702,
+							-0.0180847, 0.119925, -0.0649803,
+							0, 0.119925, -0.06735,
+							-0.0663364, 0.1194, -0.0184621,
+							-0.0594863, 0.1194, -0.034938,
+							-0.0488164, 0.1194, -0.0488164,
+							-0.034938, 0.1194, -0.0594863,
+							-0.0184621, 0.1194, -0.0663364,
+							0, 0.1194, -0.0687556,
+							-0.0703944, 0.117825, 2.10688e-008,
+							-0.0679176, 0.117825, -0.0189022,
+							-0.0609042, 0.117825, -0.0357708,
+							-0.0499801, 0.117825, -0.0499801,
+							-0.0357708, 0.117825, -0.0609042,
+							-0.0189022, 0.117825, -0.0679176,
+							0, 0.117825, -0.0703944,
+							-0.0694667, 0.1152, -0.0193333,
+							-0.0622933, 0.1152, -0.0365867,
+							-0.05112, 0.1152, -0.05112,
+							-0.0365867, 0.1152, -0.0622933,
+							-0.0193333, 0.1152, -0.0694667,
+							0, 0.1152, -0.072,
+							0.0178043, 0.117825, -0.0639726,
+							0.0180444, 0.1152, -0.0648356,
+							0.033693, 0.117825, -0.0573666,
+							0.0341476, 0.1152, -0.0581404,
+							0.0470769, 0.117825, -0.0470769,
+							0.047712, 0.1152, -0.047712,
+							0.0573666, 0.117825, -0.033693,
+							0.0581404, 0.1152, -0.0341475,
+							0.0639726, 0.117825, -0.0178043,
+							0.0648356, 0.1152, -0.0180444,
+							0.0663055, 0.117825, 2.10688e-008,
+							0.0178416, 0.1194, -0.0641066,
+							0.0337636, 0.1194, -0.0574867,
+							0.0471756, 0.1194, -0.0471756,
+							0.0574868, 0.1194, -0.0337636,
+							0.0641066, 0.1194, -0.0178415,
+							0.0664444, 0.1194, 2.13504e-008,
+							0.0180847, 0.119925, -0.0649803,
+							0.0342238, 0.119925, -0.0582702,
+							0.0478185, 0.119925, -0.0478185,
+							0.0582702, 0.119925, -0.0342238,
+							0.0649803, 0.119925, -0.0180847,
+							0.0184621, 0.1194, -0.0663364,
+							0.034938, 0.1194, -0.0594863,
+							0.0488164, 0.1194, -0.0488164,
+							0.0594863, 0.1194, -0.034938,
+							0.0663364, 0.1194, -0.0184621,
+							0.0687556, 0.1194, 2.13504e-008,
+							0.0189022, 0.117825, -0.0679176,
+							0.0357708, 0.117825, -0.0609042,
+							0.0499801, 0.117825, -0.0499801,
+							0.0609042, 0.117825, -0.0357708,
+							0.0679176, 0.117825, -0.0189022,
+							0.0703944, 0.117825, 2.10688e-008,
+							0.0193333, 0.1152, -0.0694667,
+							0.0365867, 0.1152, -0.0622933,
+							0.05112, 0.1152, -0.05112,
+							0.0622933, 0.1152, -0.0365867,
+							0.0694667, 0.1152, -0.0193333,
+							0.0779444, 0.102617, 1.83493e-008,
+							0.075202, 0.102617, 0.0209295,
+							0.0694667, 0.1152, 0.0193333,
+							0.0674364, 0.102617, 0.0396073,
+							0.0622933, 0.1152, 0.0365867,
+							0.0553406, 0.102617, 0.0553406,
+							0.0396073, 0.102617, 0.0674364,
+							0.0365867, 0.1152, 0.0622933,
+							0.0209296, 0.102617, 0.0752019,
+							0.0193334, 0.1152, 0.0694667,
+							0, 0.102617, 0.0779444,
+							0.0835556, 0.0901333, 1.61171e-008,
+							0.0806156, 0.0901333, 0.0224362,
+							0.072291, 0.0901333, 0.0424586,
+							0.0593244, 0.0901334, 0.0593245,
+							0.0424586, 0.0901333, 0.072291,
+							0.0224362, 0.0901333, 0.0806156,
+							0, 0.0901333, 0.0835556,
+							0.0885, 0.07785, 1.39207e-008,
+							0.0853861, 0.07785, 0.0237639,
+							0.0765689, 0.07785, 0.0449711,
+							0.062835, 0.07785, 0.062835,
+							0.0449711, 0.07785, 0.0765689,
+							0.0237639, 0.07785, 0.0853861,
+							0, 0.07785, 0.0885,
+							0.0924444, 0.0658667, 1.17779e-008,
+							0.0891918, 0.0658667, 0.024823,
+							0.0799816, 0.0658667, 0.0469755,
+							0.0656356, 0.0658667, 0.0656356,
+							0.0469755, 0.0658667, 0.0799816,
+							0.0248231, 0.0658667, 0.0891918,
+							0, 0.0658667, 0.0924444,
+							0.0950556, 0.0542833, 9.7066e-009,
+							0.091711, 0.0542833, 0.0255242,
+							0.0822407, 0.0542833, 0.0483023,
+							0.0674895, 0.0542833, 0.0674895,
+							0.0483023, 0.0542833, 0.0822406,
+							0.0255242, 0.0542833, 0.091711,
+							0, 0.0542833, 0.0950556,
+							0.096, 0.0432, 7.72476e-009,
+							0.0926222, 0.0432, 0.0257778,
+							0.0830578, 0.0432, 0.0487822,
+							0.06816, 0.0432, 0.06816,
+							0.0487822, 0.0432, 0.0830578,
+							0.0257778, 0.0432, 0.0926222,
+							0, 0.0432, 0.096,
+							0, 0.102617, 0.0779444,
+							-0.0209295, 0.102617, 0.075202,
+							-0.0193333, 0.1152, 0.0694667,
+							-0.0396073, 0.102617, 0.0674364,
+							-0.0365867, 0.1152, 0.0622933,
+							-0.0553405, 0.102617, 0.0553405,
+							-0.0674364, 0.102617, 0.0396073,
+							-0.0622933, 0.1152, 0.0365867,
+							-0.075202, 0.102617, 0.0209296,
+							-0.0694667, 0.1152, 0.0193334,
+							-0.0779444, 0.102617, 1.83493e-008,
+							0, 0.0901333, 0.0835555,
+							-0.0224362, 0.0901333, 0.0806156,
+							-0.0424586, 0.0901333, 0.072291,
+							-0.0593244, 0.0901334, 0.0593244,
+							-0.072291, 0.0901334, 0.0424586,
+							-0.0806156, 0.0901333, 0.0224362,
+							-0.0835555, 0.0901333, 1.61171e-008,
+							-0.0237639, 0.07785, 0.0853861,
+							-0.0449711, 0.07785, 0.0765689,
+							-0.062835, 0.07785, 0.062835,
+							-0.0765689, 0.07785, 0.0449711,
+							-0.0853861, 0.07785, 0.0237639,
+							-0.0885, 0.07785, 1.39207e-008,
+							0, 0.0658667, 0.0924444,
+							-0.024823, 0.0658667, 0.0891918,
+							-0.0469755, 0.0658667, 0.0799816,
+							-0.0656356, 0.0658667, 0.0656356,
+							-0.0799816, 0.0658667, 0.0469755,
+							-0.0891918, 0.0658667, 0.0248231,
+							-0.0924444, 0.0658667, 1.17779e-008,
+							0, 0.0542833, 0.0950556,
+							-0.0255242, 0.0542833, 0.091711,
+							-0.0483023, 0.0542833, 0.0822407,
+							-0.0674894, 0.0542834, 0.0674894,
+							-0.0822406, 0.0542834, 0.0483023,
+							-0.091711, 0.0542833, 0.0255242,
+							-0.0950556, 0.0542833, 9.70661e-009,
+							-0.0257778, 0.0432, 0.0926222,
+							-0.0487822, 0.0432, 0.0830578,
+							-0.06816, 0.0432, 0.06816,
+							-0.0830578, 0.0432, 0.0487822,
+							-0.0926222, 0.0432, 0.0257778,
+							-0.096, 0.0432, 7.72476e-009,
+							-0.0779444, 0.102617, 1.83493e-008,
+							-0.075202, 0.102617, -0.0209295,
+							-0.0694667, 0.1152, -0.0193333,
+							-0.0674364, 0.102617, -0.0396073,
+							-0.0622933, 0.1152, -0.0365866,
+							-0.0553406, 0.102617, -0.0553406,
+							-0.0396073, 0.102617, -0.0674364,
+							-0.0365867, 0.1152, -0.0622933,
+							-0.0209296, 0.102617, -0.0752019,
+							-0.0193334, 0.1152, -0.0694667,
+							0, 0.102617, -0.0779444,
+							-0.0835556, 0.0901333, 1.61171e-008,
+							-0.0806156, 0.0901333, -0.0224362,
+							-0.072291, 0.0901333, -0.0424586,
+							-0.0593244, 0.0901333, -0.0593244,
+							-0.0424586, 0.0901333, -0.072291,
+							-0.0224362, 0.0901333, -0.0806156,
+							0, 0.0901333, -0.0835556,
+							-0.0853861, 0.07785, -0.0237639,
+							-0.0765689, 0.07785, -0.0449711,
+							-0.062835, 0.07785, -0.062835,
+							-0.0449711, 0.07785, -0.0765689,
+							-0.0237639, 0.07785, -0.0853861,
+							0, 0.07785, -0.0885,
+							-0.0924444, 0.0658666, 1.17779e-008,
+							-0.0891918, 0.0658666, -0.024823,
+							-0.0799816, 0.0658666, -0.0469755,
+							-0.0656356, 0.0658666, -0.0656356,
+							-0.0469755, 0.0658666, -0.0799816,
+							-0.0248231, 0.0658666, -0.0891918,
+							0, 0.0658666, -0.0924444,
+							-0.0950556, 0.0542833, 9.7066e-009,
+							-0.091711, 0.0542833, -0.0255242,
+							-0.0822407, 0.0542833, -0.0483023,
+							-0.0674894, 0.0542833, -0.0674894,
+							-0.0483023, 0.0542833, -0.0822407,
+							-0.0255242, 0.0542833, -0.091711,
+							0, 0.0542833, -0.0950556,
+							-0.0926222, 0.0432, -0.0257778,
+							-0.0830578, 0.0432, -0.0487822,
+							-0.06816, 0.0432, -0.06816,
+							-0.0487822, 0.0432, -0.0830578,
+							-0.0257778, 0.0432, -0.0926222,
+							0, 0.0432, -0.096,
+							0.0209295, 0.102617, -0.075202,
+							0.0193333, 0.1152, -0.0694667,
+							0.0396073, 0.102617, -0.0674364,
+							0.0365867, 0.1152, -0.0622933,
+							0.0553406, 0.102617, -0.0553406,
+							0.0674364, 0.102617, -0.0396073,
+							0.0622933, 0.1152, -0.0365867,
+							0.0752019, 0.102617, -0.0209295,
+							0.0694667, 0.1152, -0.0193333,
+							0.0779444, 0.102617, 1.83493e-008,
+							0.0224362, 0.0901333, -0.0806156,
+							0.0424586, 0.0901333, -0.072291,
+							0.0593244, 0.0901333, -0.0593244,
+							0.072291, 0.0901333, -0.0424586,
+							0.0806156, 0.0901333, -0.0224362,
+							0.0835556, 0.0901333, 1.61171e-008,
+							0.0237639, 0.07785, -0.0853861,
+							0.0449711, 0.07785, -0.0765689,
+							0.062835, 0.07785, -0.062835,
+							0.0765689, 0.07785, -0.0449711,
+							0.0853861, 0.07785, -0.0237639,
+							0.024823, 0.0658666, -0.0891918,
+							0.0469755, 0.0658666, -0.0799816,
+							0.0656356, 0.0658666, -0.0656356,
+							0.0799816, 0.0658666, -0.0469755,
+							0.0891918, 0.0658666, -0.0248231,
+							0.0924444, 0.0658666, 1.17779e-008,
+							0.0255242, 0.0542833, -0.091711,
+							0.0483023, 0.0542833, -0.0822407,
+							0.0674894, 0.0542833, -0.0674894,
+							0.0822407, 0.0542833, -0.0483023,
+							0.091711, 0.0542833, -0.0255242,
+							0.0950556, 0.0542833, 9.7066e-009,
+							0.0257778, 0.0432, -0.0926222,
+							0.0487822, 0.0432, -0.0830578,
+							0.06816, 0.0432, -0.06816,
+							0.0830578, 0.0432, -0.0487822,
+							0.0926222, 0.0432, -0.0257778,
+							0.0942222, 0.0332833, 5.95152e-009,
+							0.090907, 0.0332833, 0.0253004,
+							0.0815197, 0.0332833, 0.0478788,
+							0.0668978, 0.0332833, 0.0668978,
+							0.0478789, 0.0332833, 0.0815197,
+							0.0253004, 0.0332833, 0.090907,
+							0, 0.0332833, 0.0942222,
+							0.0897778, 0.0250667, 4.48227e-009,
+							0.0866189, 0.0250667, 0.024107,
+							0.0776744, 0.0250667, 0.0456204,
+							0.0637422, 0.0250667, 0.0637422,
+							0.0456204, 0.0250667, 0.0776744,
+							0.024107, 0.0250667, 0.0866189,
+							0, 0.0250667, 0.0897778,
+							0.084, 0.01845, 3.29912e-009,
+							0.0810445, 0.01845, 0.0225556,
+							0.0726756, 0.01845, 0.0426844,
+							0.05964, 0.01845, 0.05964,
+							0.0426845, 0.01845, 0.0726755,
+							0.0225556, 0.01845, 0.0810444,
+							0, 0.01845, 0.084,
+							0.0782222, 0.0133334, 2.38419e-009,
+							0.07547, 0.0133333, 0.0210041,
+							0.0676767, 0.0133333, 0.0397485,
+							0.0555378, 0.0133333, 0.0555378,
+							0.0397485, 0.0133333, 0.0676767,
+							0.0210041, 0.0133333, 0.07547,
+							0, 0.0133333, 0.0782222,
+							0.0737778, 0.00961668, 1.7196e-009,
+							0.0711819, 0.00961668, 0.0198107,
+							0.0638315, 0.00961668, 0.03749,
+							0.0523822, 0.00961668, 0.0523822,
+							0.0374901, 0.00961668, 0.0638314,
+							0.0198107, 0.00961668, 0.0711819,
+							0, 0.00961668, 0.0737778,
+							0.072, 0.0072, 1.28746e-009,
+							0.0694667, 0.0072, 0.0193333,
+							0.0622933, 0.00719999, 0.0365867,
+							0.05112, 0.00719999, 0.05112,
+							0.0365867, 0.00719999, 0.0622933,
+							0.0193334, 0.00719999, 0.0694667,
+							0, 0.00719999, 0.072,
+							-0.0253004, 0.0332833, 0.090907,
+							-0.0478788, 0.0332833, 0.0815197,
+							-0.0668978, 0.0332833, 0.0668978,
+							-0.0815197, 0.0332833, 0.0478789,
+							-0.090907, 0.0332833, 0.0253004,
+							-0.0942222, 0.0332833, 5.95152e-009,
+							-0.024107, 0.0250667, 0.0866189,
+							-0.0456204, 0.0250667, 0.0776744,
+							-0.0637422, 0.0250667, 0.0637422,
+							-0.0776744, 0.0250667, 0.0456204,
+							-0.0866189, 0.0250667, 0.024107,
+							-0.0897778, 0.0250667, 4.48227e-009,
+							-0.0225556, 0.01845, 0.0810445,
+							-0.0426844, 0.01845, 0.0726756,
+							-0.05964, 0.01845, 0.05964,
+							-0.0726755, 0.01845, 0.0426845,
+							-0.0810444, 0.01845, 0.0225556,
+							-0.084, 0.01845, 3.29912e-009,
+							-0.0210041, 0.0133333, 0.07547,
+							-0.0397485, 0.0133333, 0.0676767,
+							-0.0555378, 0.0133333, 0.0555378,
+							-0.0676767, 0.0133333, 0.0397485,
+							-0.07547, 0.0133333, 0.0210041,
+							-0.0782222, 0.0133334, 2.38419e-009,
+							-0.0198107, 0.00961668, 0.0711819,
+							-0.03749, 0.00961667, 0.0638315,
+							-0.0523822, 0.00961668, 0.0523822,
+							-0.0638314, 0.00961668, 0.0374901,
+							-0.0711819, 0.00961668, 0.0198107,
+							-0.0737778, 0.00961668, 1.7196e-009,
+							-0.0193333, 0.00719999, 0.0694667,
+							-0.0365867, 0.00719999, 0.0622933,
+							-0.05112, 0.00719999, 0.05112,
+							-0.0622933, 0.00719999, 0.0365867,
+							-0.0694667, 0.0072, 0.0193334,
+							-0.072, 0.0072, 1.28746e-009,
+							-0.090907, 0.0332833, -0.0253004,
+							-0.0815197, 0.0332833, -0.0478788,
+							-0.0668978, 0.0332833, -0.0668978,
+							-0.0478789, 0.0332833, -0.0815197,
+							-0.0253004, 0.0332833, -0.090907,
+							0, 0.0332833, -0.0942222,
+							-0.0866189, 0.0250667, -0.024107,
+							-0.0776744, 0.0250667, -0.0456204,
+							-0.0637422, 0.0250667, -0.0637422,
+							-0.0456204, 0.0250667, -0.0776744,
+							-0.024107, 0.0250667, -0.0866189,
+							0, 0.0250667, -0.0897778,
+							-0.0810445, 0.01845, -0.0225556,
+							-0.0726756, 0.01845, -0.0426844,
+							-0.05964, 0.01845, -0.05964,
+							-0.0426845, 0.01845, -0.0726755,
+							-0.0225556, 0.01845, -0.0810444,
+							0, 0.01845, -0.084,
+							-0.07547, 0.0133334, -0.0210041,
+							-0.0676767, 0.0133334, -0.0397485,
+							-0.0555378, 0.0133334, -0.0555378,
+							-0.0397485, 0.0133334, -0.0676767,
+							-0.0210041, 0.0133334, -0.07547,
+							0, 0.0133334, -0.0782222,
+							-0.0711819, 0.00961669, -0.0198107,
+							-0.0638315, 0.00961669, -0.03749,
+							-0.0523822, 0.00961669, -0.0523822,
+							-0.0374901, 0.00961669, -0.0638314,
+							-0.0198107, 0.00961669, -0.0711819,
+							0, 0.00961669, -0.0737778,
+							-0.0694667, 0.0072, -0.0193333,
+							-0.0622933, 0.00720001, -0.0365867,
+							-0.05112, 0.00720001, -0.05112,
+							-0.0365867, 0.00720001, -0.0622933,
+							-0.0193334, 0.00720001, -0.0694667,
+							0, 0.00720001, -0.072,
+							0.0253004, 0.0332833, -0.090907,
+							0.0478788, 0.0332833, -0.0815197,
+							0.0668978, 0.0332833, -0.0668978,
+							0.0815197, 0.0332833, -0.0478789,
+							0.090907, 0.0332833, -0.0253004,
+							0.024107, 0.0250667, -0.0866189,
+							0.0456204, 0.0250667, -0.0776744,
+							0.0637422, 0.0250667, -0.0637422,
+							0.0776744, 0.0250667, -0.0456204,
+							0.0866189, 0.0250667, -0.024107,
+							0.0225556, 0.01845, -0.0810445,
+							0.0426844, 0.01845, -0.0726756,
+							0.05964, 0.01845, -0.05964,
+							0.0726755, 0.01845, -0.0426845,
+							0.0810444, 0.01845, -0.0225556,
+							0.0210041, 0.0133334, -0.07547,
+							0.0397485, 0.0133334, -0.0676767,
+							0.0555378, 0.0133334, -0.0555378,
+							0.0676767, 0.0133334, -0.0397485,
+							0.07547, 0.0133334, -0.0210041,
+							0.0198107, 0.00961669, -0.0711819,
+							0.03749, 0.00961669, -0.0638315,
+							0.0523822, 0.00961669, -0.0523822,
+							0.0638314, 0.00961669, -0.0374901,
+							0.0711819, 0.00961668, -0.0198107,
+							0.0193333, 0.00720001, -0.0694667,
+							0.0365867, 0.00720001, -0.0622933,
+							0.05112, 0.00720001, -0.05112,
+							0.0622933, 0.00720001, -0.0365867,
+							0.0694667, 0.0072, -0.0193334,
+							-0.0923778, 0.09715, 1.73718e-008,
+							-0.0768, 0.0972, 1.73807e-008,
+							-0.0924979, 0.0979463, 0.00600001,
+							-0.0764444, 0.098, 0.00600001,
+							-0.0927984, 0.099937, 0.00960001,
+							-0.0755556, 0.1, 0.00960001,
+							-0.0931889, 0.102525, 0.0108,
+							-0.0744, 0.1026, 0.0108,
+							-0.0935794, 0.105113, 0.0096,
+							-0.0732444, 0.1052, 0.0096,
+							-0.0938798, 0.107104, 0.006,
+							-0.0723556, 0.1072, 0.006,
+							-0.094, 0.1079, 1.9294e-008,
+							-0.072, 0.108, 1.93119e-008,
+							-0.105422, 0.0968, 1.73092e-008,
+							-0.105909, 0.0975704, 0.00600001,
+							-0.107128, 0.0994963, 0.00960001,
+							-0.108711, 0.102, 0.0108,
+							-0.110295, 0.104504, 0.0096,
+							-0.111513, 0.10643, 0.006,
+							-0.112, 0.1072, 1.91688e-008,
+							-0.1158, 0.09585, 1.71393e-008,
+							-0.116556, 0.09655, 0.00600001,
+							-0.118444, 0.0983, 0.00960001,
+							-0.1209, 0.100575, 0.0108,
+							-0.123356, 0.10285, 0.0096,
+							-0.125244, 0.1046, 0.006,
+							-0.126, 0.1053, 1.88291e-008,
+							-0.123378, 0.094, 1.68085e-008,
+							-0.124313, 0.094563, 0.00600001,
+							-0.12665, 0.0959704, 0.00960001,
+							-0.129689, 0.0978, 0.0108,
+							-0.132728, 0.0996296, 0.0096,
+							-0.135065, 0.101037, 0.006,
+							-0.136, 0.1016, 1.81675e-008,
+							-0.128022, 0.09095, 1.62631e-008,
+							-0.129058, 0.091287, 0.00600001,
+							-0.131646, 0.0921296, 0.00960001,
+							-0.135011, 0.093225, 0.0108,
+							-0.138376, 0.0943204, 0.0096,
+							-0.140965, 0.095163, 0.006,
+							-0.142, 0.0955, 1.70767e-008,
+							-0.1296, 0.0864, 1.54495e-008,
+							-0.130667, 0.0864, 0.00600001,
+							-0.133333, 0.0864, 0.00960001,
+							-0.1368, 0.0864, 0.0108,
+							-0.140267, 0.0864, 0.0096,
+							-0.142933, 0.0864, 0.006,
+							-0.144, 0.0864, 1.54495e-008,
+							-0.0938798, 0.107104, -0.00599999,
+							-0.0723556, 0.1072, -0.00599999,
+							-0.0935794, 0.105113, -0.0096,
+							-0.0732444, 0.1052, -0.0096,
+							-0.0931889, 0.102525, -0.0108,
+							-0.0744, 0.1026, -0.0108,
+							-0.0927983, 0.099937, -0.00959999,
+							-0.0755556, 0.1, -0.00959999,
+							-0.0924979, 0.0979463, -0.00599998,
+							-0.0764444, 0.098, -0.00599998,
+							-0.0923778, 0.09715, 1.73718e-008,
+							-0.112, 0.1072, 1.91688e-008,
+							-0.111513, 0.10643, -0.00599999,
+							-0.110295, 0.104504, -0.00959999,
+							-0.108711, 0.102, -0.0108,
+							-0.107128, 0.0994963, -0.00959999,
+							-0.105909, 0.0975704, -0.00599998,
+							-0.105422, 0.0968, 1.73092e-008,
+							-0.125244, 0.1046, -0.00599999,
+							-0.123356, 0.10285, -0.0096,
+							-0.1209, 0.100575, -0.0108,
+							-0.118444, 0.0983, -0.00959999,
+							-0.116556, 0.09655, -0.00599998,
+							-0.136, 0.1016, 1.81675e-008,
+							-0.135065, 0.101037, -0.00599999,
+							-0.132728, 0.0996296, -0.0096,
+							-0.129689, 0.0978, -0.0108,
+							-0.12665, 0.0959704, -0.00959999,
+							-0.124313, 0.094563, -0.00599998,
+							-0.123378, 0.094, 1.68085e-008,
+							-0.142, 0.0955, 1.70767e-008,
+							-0.140965, 0.095163, -0.00599999,
+							-0.138376, 0.0943204, -0.0096,
+							-0.135011, 0.093225, -0.0108,
+							-0.131646, 0.0921296, -0.00959999,
+							-0.129058, 0.091287, -0.00599998,
+							-0.128022, 0.09095, 1.62631e-008,
+							-0.142933, 0.0864, -0.00599999,
+							-0.140267, 0.0864, -0.0096,
+							-0.1368, 0.0864, -0.0108,
+							-0.133333, 0.0864, -0.00959999,
+							-0.130667, 0.0864, -0.00599998,
+							-0.128778, 0.0802, 1.43409e-008,
+							-0.129801, 0.079871, 0.00600001,
+							-0.132358, 0.0790484, 0.00960001,
+							-0.135683, 0.0779792, 0.0108,
+							-0.139008, 0.0769099, 0.0096,
+							-0.141566, 0.0760873, 0.006,
+							-0.142589, 0.0757583, 1.35466e-008,
+							-0.126222, 0.0728, 1.30176e-008,
+							-0.127118, 0.0722568, 0.00600001,
+							-0.129356, 0.0708988, 0.00960001,
+							-0.132267, 0.0691333, 0.0108,
+							-0.135177, 0.0673679, 0.0096,
+							-0.137416, 0.0660099, 0.00599999,
+							-0.138311, 0.0654667, 1.17063e-008,
+							-0.1218, 0.0648, 1.15871e-008,
+							-0.122489, 0.0641167, 0.00600001,
+							-0.124211, 0.0624083, 0.00960001,
+							-0.12645, 0.0601875, 0.0108,
+							-0.128689, 0.0579667, 0.0096,
+							-0.130411, 0.0562583, 0.00599999,
+							-0.1311, 0.055575, 9.93757e-009,
+							-0.115378, 0.0568, 1.01566e-008,
+							-0.115786, 0.0560099, 0.00600001,
+							-0.116807, 0.0540345, 0.0096,
+							-0.118133, 0.0514667, 0.0108,
+							-0.11946, 0.0488987, 0.0096,
+							-0.120481, 0.0469234, 0.00599999,
+							-0.120889, 0.0461333, 8.24927e-009,
+							-0.106822, 0.0494, 8.8334e-009,
+							-0.106881, 0.0484957, 0.00600001,
+							-0.107027, 0.0462349, 0.00960001,
+							-0.107217, 0.0432958, 0.0108,
+							-0.107407, 0.0403568, 0.0096,
+							-0.107553, 0.038096, 0.00599999,
+							-0.107611, 0.0371916, 6.65038e-009,
+							-0.0956444, 0.0421333, 0.00600001,
+							-0.0947556, 0.0394667, 0.0096,
+							-0.0936, 0.036, 0.0108,
+							-0.0924444, 0.0325333, 0.0096,
+							-0.0915556, 0.0298667, 0.00599999,
+							-0.0912, 0.0288, 5.14984e-009,
+							-0.141566, 0.0760873, -0.00599999,
+							-0.139008, 0.0769099, -0.0096,
+							-0.135683, 0.0779792, -0.0108,
+							-0.132358, 0.0790484, -0.00959999,
+							-0.129801, 0.079871, -0.00599998,
+							-0.137416, 0.0660099, -0.006,
+							-0.135177, 0.0673679, -0.0096,
+							-0.132267, 0.0691333, -0.0108,
+							-0.129356, 0.0708988, -0.00959999,
+							-0.127118, 0.0722568, -0.00599998,
+							-0.130411, 0.0562583, -0.006,
+							-0.128689, 0.0579667, -0.0096,
+							-0.12645, 0.0601875, -0.0108,
+							-0.124211, 0.0624083, -0.00959999,
+							-0.122489, 0.0641167, -0.00599998,
+							-0.120481, 0.0469234, -0.006,
+							-0.11946, 0.0488988, -0.0096,
+							-0.118133, 0.0514667, -0.0108,
+							-0.116807, 0.0540346, -0.00959999,
+							-0.115786, 0.0560099, -0.00599998,
+							-0.107553, 0.038096, -0.006,
+							-0.107407, 0.0403568, -0.0096,
+							-0.107217, 0.0432958, -0.0108,
+							-0.107027, 0.0462349, -0.00959999,
+							-0.106881, 0.0484957, -0.00599998,
+							-0.0915556, 0.0298667, -0.006,
+							-0.0924444, 0.0325333, -0.0096,
+							-0.0936, 0.036, -0.0108,
+							-0.0947556, 0.0394667, -0.00959999,
+							-0.0956445, 0.0421333, -0.00599998,
+							0.0988222, 0.0708667, 1.2672e-008,
+							0.0816, 0.0684, 1.22309e-008,
+							0.0994741, 0.0684099, 0.0125926,
+							0.0816, 0.0654667, 0.0132,
+							0.101104, 0.0622679, 0.0201482,
+							0.0816, 0.0581333, 0.02112,
+							0.103222, 0.0542833, 0.0226667,
+							0.0816, 0.0486, 0.02376,
+							0.105341, 0.0462987, 0.0201481,
+							0.0816, 0.0390666, 0.02112,
+							0.10697, 0.0401568, 0.0125926,
+							0.0816, 0.0317333, 0.0132,
+							0.107622, 0.0377, 6.74128e-009,
+							0.0816, 0.0288, 5.14984e-009,
+							0.108978, 0.0773333, 1.38283e-008,
+							0.109926, 0.0754568, 0.0110741,
+							0.112296, 0.0707654, 0.0177185,
+							0.115378, 0.0646667, 0.0199333,
+							0.118459, 0.0585679, 0.0177185,
+							0.12083, 0.0538765, 0.0110741,
+							0.121778, 0.052, 9.29832e-009,
+							0.1146, 0.0864, 1.54495e-008,
+							0.115667, 0.0851333, 0.00910001,
+							0.118333, 0.0819667, 0.01456,
+							0.1218, 0.07785, 0.01638,
+							0.125267, 0.0737333, 0.01456,
+							0.127933, 0.0705667, 0.00909999,
+							0.129, 0.0693, 1.23918e-008,
+							0.118222, 0.0966667, 1.72853e-008,
+							0.119407, 0.0959654, 0.00712594,
+							0.12237, 0.0942123, 0.0114015,
+							0.126222, 0.0919333, 0.0128267,
+							0.130074, 0.0896543, 0.0114015,
+							0.133037, 0.0879012, 0.00712592,
+							0.134222, 0.0872, 1.55926e-008,
+							0.122378, 0.106733, 1.90854e-008,
+							0.123859, 0.106479, 0.00560742,
+							0.127563, 0.105843, 0.00897186,
+							0.132378, 0.105017, 0.0100933,
+							0.137193, 0.10419, 0.00897185,
+							0.140896, 0.103554, 0.00560741,
+							0.142378, 0.1033, 1.84715e-008,
+							0.1296, 0.1152, 2.05994e-008,
+							0.131733, 0.1152, 0.00500001,
+							0.137067, 0.1152, 0.00800001,
+							0.144, 0.1152, 0.00900001,
+							0.150933, 0.1152, 0.008,
+							0.156267, 0.1152, 0.005,
+							0.1584, 0.1152, 2.05994e-008,
+							0.107622, 0.0377, 6.74128e-009,
+							0.10697, 0.0401568, -0.0125926,
+							0.0816, 0.0317333, -0.0132,
+							0.105341, 0.0462988, -0.0201482,
+							0.0816, 0.0390667, -0.02112,
+							0.103222, 0.0542833, -0.0226667,
+							0.0816, 0.0486, -0.02376,
+							0.101104, 0.0622679, -0.0201481,
+							0.0816, 0.0581334, -0.02112,
+							0.0994741, 0.0684099, -0.0125926,
+							0.0816, 0.0654667, -0.0132,
+							0.0988222, 0.0708667, 1.2672e-008,
+							0.121778, 0.052, 9.29832e-009,
+							0.12083, 0.0538765, -0.0110741,
+							0.118459, 0.0585679, -0.0177185,
+							0.115378, 0.0646667, -0.0199333,
+							0.112296, 0.0707654, -0.0177185,
+							0.109926, 0.0754568, -0.011074,
+							0.127933, 0.0705667, -0.0091,
+							0.125267, 0.0737333, -0.01456,
+							0.1218, 0.07785, -0.01638,
+							0.118333, 0.0819667, -0.01456,
+							0.115667, 0.0851333, -0.00909997,
+							0.134222, 0.0872, 1.55926e-008,
+							0.133037, 0.0879012, -0.00712592,
+							0.130074, 0.0896543, -0.0114015,
+							0.126222, 0.0919333, -0.0128267,
+							0.12237, 0.0942123, -0.0114015,
+							0.119407, 0.0959654, -0.0071259,
+							0.118222, 0.0966667, 1.72853e-008,
+							0.142378, 0.1033, 1.84715e-008,
+							0.140896, 0.103554, -0.0056074,
+							0.137193, 0.10419, -0.00897185,
+							0.132378, 0.105017, -0.0100933,
+							0.127563, 0.105843, -0.00897184,
+							0.123859, 0.106479, -0.00560739,
+							0.122378, 0.106733, 1.90854e-008,
+							0.156267, 0.1152, -0.00499999,
+							0.150933, 0.1152, -0.00799999,
+							0.144, 0.1152, -0.00899999,
+							0.137067, 0.1152, -0.00799999,
+							0.131733, 0.1152, -0.00499998,
+							0.131956, 0.1167, 2.08676e-008,
+							0.134228, 0.116732, 0.00485187,
+							0.139908, 0.116813, 0.00776297,
+							0.147292, 0.116919, 0.00873334,
+							0.154676, 0.117024, 0.00776297,
+							0.160356, 0.117105, 0.00485185,
+							0.162628, 0.117137, 2.09458e-008,
+							0.134044, 0.1176, 2.10285e-008,
+							0.136309, 0.117659, 0.0044815,
+							0.141972, 0.117807, 0.00717038,
+							0.149333, 0.118, 0.00806668,
+							0.156695, 0.118193, 0.00717038,
+							0.162357, 0.118341, 0.00448149,
+							0.164622, 0.1184, 2.11716e-008,
+							0.1356, 0.1179, 2.10822e-008,
+							0.137744, 0.117975, 0.00400002,
+							0.143106, 0.118162, 0.00640002,
+							0.150075, 0.118406, 0.00720001,
+							0.157044, 0.11865, 0.00640001,
+							0.162406, 0.118838, 0.00400001,
+							0.16455, 0.118912, 2.12632e-008,
+							0.136356, 0.1176, 2.10285e-008,
+							0.138298, 0.117674, 0.00351854,
+							0.143154, 0.117859, 0.00562965,
+							0.149467, 0.1181, 0.00633335,
+							0.155779, 0.118341, 0.00562964,
+							0.160635, 0.118526, 0.00351853,
+							0.162578, 0.1186, 2.12074e-008,
+							0.136044, 0.1167, 2.08676e-008,
+							0.137735, 0.116751, 0.00314817,
+							0.141963, 0.116878, 0.00503706,
+							0.147458, 0.117044, 0.00566668,
+							0.152954, 0.117209, 0.00503705,
+							0.157181, 0.117337, 0.00314816,
+							0.158872, 0.117387, 2.09906e-008,
+							0.1344, 0.1152, 2.05994e-008,
+							0.135822, 0.1152, 0.00300002,
+							0.139378, 0.1152, 0.00480002,
+							0.144, 0.1152, 0.00540002,
+							0.148622, 0.1152, 0.00480002,
+							0.152178, 0.1152, 0.00300001,
+							0.1536, 0.1152, 2.05994e-008,
+							0.160356, 0.117105, -0.00485184,
+							0.154676, 0.117024, -0.00776296,
+							0.147292, 0.116919, -0.00873333,
+							0.139908, 0.116813, -0.00776295,
+							0.134228, 0.116732, -0.00485183,
+							0.162357, 0.118341, -0.00448147,
+							0.156695, 0.118193, -0.00717036,
+							0.149333, 0.118, -0.00806666,
+							0.141972, 0.117807, -0.00717036,
+							0.136309, 0.117659, -0.00448146,
+							0.162406, 0.118837, -0.00399998,
+							0.157044, 0.11865, -0.00639999,
+							0.150075, 0.118406, -0.00719999,
+							0.143106, 0.118162, -0.00639998,
+							0.137744, 0.117975, -0.00399998,
+							0.160635, 0.118526, -0.0035185,
+							0.155779, 0.118341, -0.00562961,
+							0.149467, 0.1181, -0.00633332,
+							0.143154, 0.117859, -0.00562961,
+							0.138298, 0.117674, -0.00351849,
+							0.157181, 0.117337, -0.00314813,
+							0.152954, 0.117209, -0.00503702,
+							0.147458, 0.117044, -0.00566665,
+							0.141963, 0.116878, -0.00503701,
+							0.137735, 0.116751, -0.00314812,
+							0.152178, 0.1152, -0.00299998,
+							0.148622, 0.1152, -0.00479998,
+							0.144, 0.1152, -0.00539998,
+							0.139378, 0.1152, -0.00479998,
+							0.135822, 0.1152, -0.00299997,
+							0.0133778, 0.1501, 2.684e-008,
+							0, 0.1512, 2.70367e-008,
+							0.0129094, 0.1501, 0.00360378,
+							0, 0.1512, 2.70367e-008,
+							0.0115817, 0.1501, 0.00681272,
+							0, 0.1512, 2.70367e-008,
+							0.00951072, 0.1501, 0.00951074,
+							0.00681272, 0.1501, 0.0115817,
+							0.00360377, 0.1501, 0.0129094,
+							0, 0.1501, 0.0133778,
+							0.0174222, 0.1472, 2.63214e-008,
+							0.0168122, 0.1472, 0.00469302,
+							0.0150829, 0.1472, 0.00887204,
+							0.0123858, 0.1472, 0.0123858,
+							0.00887205, 0.1472, 0.0150829,
+							0.00469303, 0.1472, 0.0168122,
+							0, 0.1472, 0.0174222,
+							0.0156, 0.1431, 2.55883e-008,
+							0.0150536, 0.1431, 0.00420141,
+							0.0135049, 0.1431, 0.00794312,
+							0.0110895, 0.1431, 0.0110895,
+							0.00794312, 0.1431, 0.0135049,
+							0.00420141, 0.1431, 0.0150536,
+							0, 0.1431, 0.0156,
+							0.0113778, 0.1384, 2.47478e-008,
+							0.0109789, 0.1384, 0.00306257,
+							0.00984863, 0.1384, 0.00579109,
+							0.00808622, 0.1384, 0.00808624,
+							0.00579109, 0.1384, 0.00984864,
+							0.00306257, 0.1384, 0.0109789,
+							0, 0.1384, 0.0113778,
+							0.00822222, 0.1337, 2.39074e-008,
+							0.00793338, 0.1337, 0.00221015,
+							0.00711523, 0.1337, 0.00418109,
+							0.00584028, 0.1337, 0.0058403,
+							0.00418108, 0.1337, 0.00711524,
+							0.00221014, 0.1337, 0.0079334,
+							0, 0.1337, 0.00822224,
+							0.0096, 0.1296, 2.31743e-008,
+							0.00926222, 0.1296, 0.0025778,
+							0.00830578, 0.1296, 0.00487824,
+							0.006816, 0.1296, 0.00681602,
+							0.00487823, 0.1296, 0.00830579,
+							0.00257779, 0.1296, 0.00926224,
+							0, 0.1296, 0.00960002,
+							0, 0.1501, 0.0133778,
+							-0.00360375, 0.1501, 0.0129094,
+							-0.0068127, 0.1501, 0.0115817,
+							-0.00951072, 0.1501, 0.00951074,
+							-0.0115817, 0.1501, 0.00681274,
+							-0.0129094, 0.1501, 0.00360379,
+							-0.0133778, 0.1501, 2.684e-008,
+							0, 0.1472, 0.0174222,
+							-0.004693, 0.1472, 0.0168122,
+							-0.00887203, 0.1472, 0.0150829,
+							-0.0123858, 0.1472, 0.0123858,
+							-0.0150829, 0.1472, 0.00887207,
+							-0.0168122, 0.1472, 0.00469305,
+							-0.0174222, 0.1472, 2.63214e-008,
+							-0.00420139, 0.1431, 0.0150536,
+							-0.0079431, 0.1431, 0.0135049,
+							-0.0110895, 0.1431, 0.0110895,
+							-0.0135049, 0.1431, 0.00794314,
+							-0.0150536, 0.1431, 0.00420143,
+							-0.0156, 0.1431, 2.55883e-008,
+							0, 0.1384, 0.0113778,
+							-0.00306255, 0.1384, 0.010979,
+							-0.00579108, 0.1384, 0.00984865,
+							-0.00808623, 0.1384, 0.00808624,
+							-0.00984862, 0.1384, 0.00579111,
+							-0.0109789, 0.1384, 0.00306259,
+							-0.0113778, 0.1384, 2.47478e-008,
+							0, 0.1337, 0.00822224,
+							-0.00221013, 0.1337, 0.00793341,
+							-0.00418107, 0.1337, 0.00711525,
+							-0.00584028, 0.1337, 0.0058403,
+							-0.00711522, 0.1337, 0.0041811,
+							-0.00793338, 0.1337, 0.00221017,
+							-0.00822222, 0.1337, 2.39074e-008,
+							-0.00257778, 0.1296, 0.00926224,
+							-0.00487822, 0.1296, 0.0083058,
+							-0.006816, 0.1296, 0.00681602,
+							-0.00830577, 0.1296, 0.00487825,
+							-0.00926222, 0.1296, 0.00257781,
+							-0.0096, 0.1296, 2.31743e-008,
+							-0.0133778, 0.1501, 2.684e-008,
+							-0.0129094, 0.1501, -0.00360373,
+							-0.0115817, 0.1501, -0.00681268,
+							-0.00951073, 0.1501, -0.00951071,
+							-0.00681272, 0.1501, -0.0115816,
+							-0.00360377, 0.1501, -0.0129094,
+							0, 0.1501, -0.0133778,
+							-0.0174222, 0.1472, 2.63214e-008,
+							-0.0168122, 0.1472, -0.00469298,
+							-0.0150829, 0.1472, -0.00887201,
+							-0.0123858, 0.1472, -0.0123858,
+							-0.00887205, 0.1472, -0.0150829,
+							-0.00469303, 0.1472, -0.0168122,
+							0, 0.1472, -0.0174222,
+							-0.0150536, 0.1431, -0.00420136,
+							-0.0135049, 0.1431, -0.00794309,
+							-0.0110895, 0.1431, -0.0110895,
+							-0.00794312, 0.1431, -0.0135049,
+							-0.00420141, 0.1431, -0.0150536,
+							0, 0.1431, -0.0156,
+							-0.0113778, 0.1384, 2.47478e-008,
+							-0.0109789, 0.1384, -0.00306252,
+							-0.00984862, 0.1384, -0.00579105,
+							-0.00808622, 0.1384, -0.0080862,
+							-0.00579108, 0.1384, -0.0098486,
+							-0.00306256, 0.1384, -0.0109789,
+							0, 0.1384, -0.0113778,
+							-0.00822222, 0.1337, 2.39074e-008,
+							-0.00793338, 0.1337, -0.00221011,
+							-0.00711523, 0.1337, -0.00418104,
+							-0.00584028, 0.1337, -0.00584025,
+							-0.00418108, 0.1337, -0.0071152,
+							-0.00221014, 0.1337, -0.00793336,
+							0, 0.1337, -0.0082222,
+							-0.00926222, 0.1296, -0.00257775,
+							-0.00830578, 0.1296, -0.0048782,
+							-0.006816, 0.1296, -0.00681598,
+							-0.00487823, 0.1296, -0.00830575,
+							-0.00257779, 0.1296, -0.0092622,
+							0, 0.1296, -0.00959998,
+							0.00360375, 0.1501, -0.0129094,
+							0.0068127, 0.1501, -0.0115817,
+							0.00951073, 0.1501, -0.00951071,
+							0.0115817, 0.1501, -0.0068127,
+							0.0129094, 0.1501, -0.00360375,
+							0.0133778, 0.1501, 2.684e-008,
+							0.004693, 0.1472, -0.0168122,
+							0.00887203, 0.1472, -0.0150829,
+							0.0123858, 0.1472, -0.0123858,
+							0.0150829, 0.1472, -0.00887203,
+							0.0168122, 0.1472, -0.004693,
+							0.0174222, 0.1472, 2.63214e-008,
+							0.00420139, 0.1431, -0.0150536,
+							0.0079431, 0.1431, -0.0135049,
+							0.0110895, 0.1431, -0.0110895,
+							0.0135049, 0.1431, -0.00794311,
+							0.0150536, 0.1431, -0.00420139,
+							0.00306255, 0.1384, -0.0109789,
+							0.00579107, 0.1384, -0.0098486,
+							0.00808622, 0.1384, -0.0080862,
+							0.00984861, 0.1384, -0.00579106,
+							0.0109789, 0.1384, -0.00306254,
+							0.0113778, 0.1384, 2.47478e-008,
+							0.00221013, 0.1337, -0.00793336,
+							0.00418106, 0.1337, -0.00711521,
+							0.00584028, 0.1337, -0.00584025,
+							0.00711522, 0.1337, -0.00418105,
+							0.00793338, 0.1337, -0.00221012,
+							0.00822222, 0.1337, 2.39074e-008,
+							0.00257778, 0.1296, -0.0092622,
+							0.00487822, 0.1296, -0.00830576,
+							0.006816, 0.1296, -0.00681598,
+							0.00830577, 0.1296, -0.00487821,
+							0.00926222, 0.1296, -0.00257777,
+							0.0168444, 0.126533, 2.26259e-008,
+							0.0162518, 0.126533, 0.00452306,
+							0.0145736, 0.126533, 0.00855948,
+							0.0119595, 0.126533, 0.0119596,
+							0.00855948, 0.126533, 0.0145736,
+							0.00452306, 0.126533, 0.0162518,
+							0, 0.126533, 0.0168444,
+							0.0275555, 0.124267, 2.22206e-008,
+							0.026586, 0.124267, 0.00739918,
+							0.0238406, 0.124267, 0.0140023,
+							0.0195644, 0.124267, 0.0195644,
+							0.0140023, 0.124267, 0.0238406,
+							0.0073992, 0.124267, 0.026586,
+							0, 0.124267, 0.0275555,
+							0.0396, 0.1224, 2.18868e-008,
+							0.0382067, 0.1224, 0.0106333,
+							0.0342613, 0.1224, 0.0201227,
+							0.028116, 0.1224, 0.028116,
+							0.0201227, 0.1224, 0.0342613,
+							0.0106334, 0.1224, 0.0382067,
+							0, 0.1224, 0.0396,
+							0.0508444, 0.120533, 2.1553e-008,
+							0.0490554, 0.120533, 0.0136527,
+							0.0439898, 0.120533, 0.0258365,
+							0.0360995, 0.120533, 0.0360995,
+							0.0258365, 0.120533, 0.0439898,
+							0.0136527, 0.120533, 0.0490554,
+							0, 0.120533, 0.0508444,
+							0.0591555, 0.118267, 2.11477e-008,
+							0.0570741, 0.118267, 0.0158844,
+							0.0511805, 0.118267, 0.0300598,
+							0.0420004, 0.118267, 0.0420004,
+							0.0300598, 0.118267, 0.0511805,
+							0.0158844, 0.118267, 0.0570741,
+							0, 0.118267, 0.0591555,
+							0.0624, 0.1152, 2.05994e-008,
+							0.0602044, 0.1152, 0.0167556,
+							0.0539876, 0.1152, 0.0317084,
+							0.044304, 0.1152, 0.044304,
+							0.0317085, 0.1152, 0.0539875,
+							0.0167556, 0.1152, 0.0602044,
+							0, 0.1152, 0.0624,
+							-0.00452304, 0.126533, 0.0162518,
+							-0.00855946, 0.126533, 0.0145736,
+							-0.0119595, 0.126533, 0.0119596,
+							-0.0145735, 0.126533, 0.0085595,
+							-0.0162518, 0.126533, 0.00452308,
+							-0.0168444, 0.126533, 2.26259e-008,
+							-0.00739916, 0.124267, 0.026586,
+							-0.0140023, 0.124267, 0.0238407,
+							-0.0195644, 0.124267, 0.0195644,
+							-0.0238406, 0.124267, 0.0140023,
+							-0.026586, 0.124267, 0.00739922,
+							-0.0275555, 0.124267, 2.22206e-008,
+							-0.0106333, 0.1224, 0.0382067,
+							-0.0201227, 0.1224, 0.0342613,
+							-0.028116, 0.1224, 0.028116,
+							-0.0342613, 0.1224, 0.0201227,
+							-0.0382067, 0.1224, 0.0106334,
+							-0.0396, 0.1224, 2.18868e-008,
+							-0.0136527, 0.120533, 0.0490554,
+							-0.0258365, 0.120533, 0.0439898,
+							-0.0360995, 0.120533, 0.0360995,
+							-0.0439898, 0.120533, 0.0258365,
+							-0.0490554, 0.120533, 0.0136527,
+							-0.0508444, 0.120533, 2.1553e-008,
+							-0.0158843, 0.118267, 0.0570741,
+							-0.0300597, 0.118267, 0.0511805,
+							-0.0420004, 0.118267, 0.0420004,
+							-0.0511805, 0.118267, 0.0300598,
+							-0.0570741, 0.118267, 0.0158844,
+							-0.0591555, 0.118267, 2.11477e-008,
+							-0.0167555, 0.1152, 0.0602044,
+							-0.0317084, 0.1152, 0.0539876,
+							-0.044304, 0.1152, 0.044304,
+							-0.0539875, 0.1152, 0.0317085,
+							-0.0602044, 0.1152, 0.0167556,
+							-0.0624, 0.1152, 2.05994e-008,
+							-0.0162518, 0.126533, -0.00452302,
+							-0.0145736, 0.126533, -0.00855945,
+							-0.0119595, 0.126533, -0.0119595,
+							-0.00855948, 0.126533, -0.0145735,
+							-0.00452306, 0.126533, -0.0162517,
+							0, 0.126533, -0.0168444,
+							-0.026586, 0.124267, -0.00739915,
+							-0.0238406, 0.124267, -0.0140023,
+							-0.0195644, 0.124267, -0.0195644,
+							-0.0140023, 0.124267, -0.0238406,
+							-0.0073992, 0.124267, -0.026586,
+							0, 0.124267, -0.0275555,
+							-0.0382067, 0.1224, -0.0106333,
+							-0.0342613, 0.1224, -0.0201226,
+							-0.028116, 0.1224, -0.028116,
+							-0.0201227, 0.1224, -0.0342613,
+							-0.0106334, 0.1224, -0.0382066,
+							0, 0.1224, -0.0396,
+							-0.0490554, 0.120533, -0.0136526,
+							-0.0439898, 0.120533, -0.0258365,
+							-0.0360995, 0.120533, -0.0360995,
+							-0.0258365, 0.120533, -0.0439898,
+							-0.0136527, 0.120533, -0.0490554,
+							0, 0.120533, -0.0508444,
+							-0.0570741, 0.118267, -0.0158843,
+							-0.0511805, 0.118267, -0.0300597,
+							-0.0420004, 0.118267, -0.0420004,
+							-0.0300598, 0.118267, -0.0511805,
+							-0.0158844, 0.118267, -0.0570741,
+							0, 0.118267, -0.0591555,
+							-0.0602044, 0.1152, -0.0167555,
+							-0.0539876, 0.1152, -0.0317084,
+							-0.044304, 0.1152, -0.044304,
+							-0.0317085, 0.1152, -0.0539875,
+							-0.0167556, 0.1152, -0.0602044,
+							0, 0.1152, -0.0624,
+							0.00452304, 0.126533, -0.0162517,
+							0.00855946, 0.126533, -0.0145735,
+							0.0119595, 0.126533, -0.0119595,
+							0.0145735, 0.126533, -0.00855947,
+							0.0162518, 0.126533, -0.00452304,
+							0.00739916, 0.124267, -0.026586,
+							0.0140023, 0.124267, -0.0238406,
+							0.0195644, 0.124267, -0.0195644,
+							0.0238406, 0.124267, -0.0140023,
+							0.026586, 0.124267, -0.00739919,
+							0.0106333, 0.1224, -0.0382067,
+							0.0201227, 0.1224, -0.0342613,
+							0.028116, 0.1224, -0.028116,
+							0.0342613, 0.1224, -0.0201227,
+							0.0382067, 0.1224, -0.0106334,
+							0.0136527, 0.120533, -0.0490554,
+							0.0258365, 0.120533, -0.0439898,
+							0.0360995, 0.120533, -0.0360995,
+							0.0439898, 0.120533, -0.0258365,
+							0.0490554, 0.120533, -0.0136527,
+							0.0158843, 0.118267, -0.0570741,
+							0.0300597, 0.118267, -0.0511805,
+							0.0420004, 0.118267, -0.0420004,
+							0.0511805, 0.118267, -0.0300598,
+							0.0570741, 0.118267, -0.0158844,
+							0.0167555, 0.1152, -0.0602044,
+							0.0317084, 0.1152, -0.0539876,
+							0.044304, 0.1152, -0.044304,
+							0.0539875, 0.1152, -0.0317085,
+							0.0602044, 0.1152, -0.0167556,
+							0.0290833, 0.000283333, 5.06639e-011,
+							0, 0, 0,
+							0.02806, 0.000283335, -0.00780941,
+							0.0251625, 0.000283336, -0.0147786,
+							0.0206492, 0.000283337, -0.0206492,
+							0.0147787, 0.000283338, -0.0251625,
+							0.00780945, 0.000283338, -0.02806,
+							0, 0.000283338, -0.0290833,
+							0.0490667, 0.00106667, 1.90735e-010,
+							0.0473403, 0.00106667, -0.0131753,
+							0.0424518, 0.00106667, -0.0249331,
+							0.0348373, 0.00106667, -0.0348373,
+							0.0249332, 0.00106667, -0.0424517,
+							0.0131754, 0.00106667, -0.0473402,
+							0, 0.00106667, -0.0490667,
+							0.06165, 0.00225, 4.02331e-010,
+							0.0594808, 0.00225, -0.0165542,
+							0.0533387, 0.00225001, -0.0313273,
+							0.0437715, 0.00225001, -0.0437715,
+							0.0313274, 0.00225001, -0.0533386,
+							0.0165542, 0.00225001, -0.0594808,
+							0, 0.00225001, -0.06165,
+							0.0685333, 0.00373333, 6.67572e-010,
+							0.066122, 0.00373334, -0.0184025,
+							0.059294, 0.00373334, -0.0348251,
+							0.0486587, 0.00373334, -0.0486587,
+							0.0348251, 0.00373334, -0.059294,
+							0.0184026, 0.00373334, -0.066122,
+							0, 0.00373334, -0.0685333,
+							0.0714167, 0.00541667, 9.68575e-010,
+							0.0689039, 0.00541667, -0.0191767,
+							0.0617887, 0.00541667, -0.0362902,
+							0.0507058, 0.00541668, -0.0507058,
+							0.0362903, 0.00541668, -0.0617886,
+							0.0191768, 0.00541668, -0.0689038,
+							0, 0.00541668, -0.0714167,
+							0.0694667, 0.0072, -0.0193333,
+							0.0622933, 0.00720001, -0.0365866,
+							0.0365867, 0.00720001, -0.0622933,
+							0.0193334, 0.00720001, -0.0694666,
+							0, 0.000283338, -0.0290833,
+							-0.0078094, 0.000283338, -0.02806,
+							-0.0147786, 0.000283338, -0.0251625,
+							-0.0206492, 0.000283337, -0.0206492,
+							-0.0251624, 0.000283336, -0.0147787,
+							-0.02806, 0.000283335, -0.00780945,
+							-0.0290833, 0.000283333, 5.06639e-011,
+							0, 0.00106667, -0.0490667,
+							-0.0131753, 0.00106667, -0.0473402,
+							-0.0249331, 0.00106667, -0.0424518,
+							-0.0348373, 0.00106667, -0.0348373,
+							-0.0424517, 0.00106667, -0.0249332,
+							-0.0473402, 0.00106667, -0.0131754,
+							-0.0490667, 0.00106667, 1.90735e-010,
+							-0.0165542, 0.00225001, -0.0594808,
+							-0.0313273, 0.00225001, -0.0533387,
+							-0.0437715, 0.00225001, -0.0437715,
+							-0.0533386, 0.00225001, -0.0313274,
+							-0.0594808, 0.00225, -0.0165542,
+							-0.06165, 0.00225, 4.02331e-010,
+							0, 0.00373334, -0.0685333,
+							-0.0184024, 0.00373334, -0.066122,
+							-0.0348251, 0.00373334, -0.059294,
+							-0.0486587, 0.00373334, -0.0486587,
+							-0.059294, 0.00373334, -0.0348251,
+							-0.0661219, 0.00373334, -0.0184026,
+							-0.0685333, 0.00373333, 6.67572e-010,
+							0, 0.00541667, -0.0714167,
+							-0.0191767, 0.00541668, -0.0689039,
+							-0.0362902, 0.00541667, -0.0617887,
+							-0.0507058, 0.00541667, -0.0507058,
+							-0.0617886, 0.00541667, -0.0362903,
+							-0.0689038, 0.00541667, -0.0191768,
+							-0.0714167, 0.00541666, 9.68575e-010,
+							-0.0193333, 0.00720001, -0.0694667,
+							-0.0365866, 0.00720001, -0.0622933,
+							-0.0622933, 0.00720001, -0.0365867,
+							-0.0694666, 0.0072, -0.0193334,
+							-0.0290833, 0.000283334, 5.0664e-011,
+							-0.02806, 0.000283332, 0.00780941,
+							-0.0251625, 0.000283331, 0.0147786,
+							-0.0206492, 0.00028333, 0.0206492,
+							-0.0147787, 0.000283329, 0.0251625,
+							-0.00780945, 0.000283329, 0.02806,
+							0, 0.000283329, 0.0290833,
+							-0.0490667, 0.00106667, 1.90735e-010,
+							-0.0473403, 0.00106667, 0.0131753,
+							-0.0424518, 0.00106666, 0.0249331,
+							-0.0348374, 0.00106666, 0.0348374,
+							-0.0249332, 0.00106666, 0.0424517,
+							-0.0131754, 0.00106666, 0.0473402,
+							0, 0.00106666, 0.0490667,
+							-0.0594808, 0.00225, 0.0165542,
+							-0.0533387, 0.00224999, 0.0313273,
+							-0.0437715, 0.00224999, 0.0437715,
+							-0.0313274, 0.00224999, 0.0533386,
+							-0.0165542, 0.00224999, 0.0594808,
+							0, 0.00224999, 0.06165,
+							-0.0685333, 0.00373334, 6.67572e-010,
+							-0.066122, 0.00373333, 0.0184025,
+							-0.059294, 0.00373333, 0.0348251,
+							-0.0486587, 0.00373333, 0.0486587,
+							-0.0348251, 0.00373333, 0.059294,
+							-0.0184026, 0.00373333, 0.066122,
+							0, 0.00373333, 0.0685333,
+							-0.0714167, 0.00541667, 9.68576e-010,
+							-0.0689039, 0.00541667, 0.0191767,
+							-0.0617887, 0.00541666, 0.0362902,
+							-0.0507058, 0.00541666, 0.0507058,
+							-0.0362903, 0.00541666, 0.0617886,
+							-0.0191768, 0.00541666, 0.0689038,
+							0, 0.00541666, 0.0714167,
+							-0.0694667, 0.0072, 0.0193333,
+							-0.0622933, 0.00719999, 0.0365866,
+							-0.05112, 0.00719999, 0.05112,
+							-0.0365867, 0.00719999, 0.0622933,
+							-0.0193334, 0.00719999, 0.0694666,
+							0.00780941, 0.000283329, 0.02806,
+							0.0147786, 0.000283329, 0.0251625,
+							0.0206492, 0.00028333, 0.0206492,
+							0.0251625, 0.000283331, 0.0147787,
+							0.02806, 0.000283332, 0.00780945,
+							0.0290833, 0.000283334, 5.0664e-011,
+							0.0131753, 0.00106666, 0.0473403,
+							0.0249331, 0.00106666, 0.0424518,
+							0.0348374, 0.00106666, 0.0348374,
+							0.0424517, 0.00106666, 0.0249332,
+							0.0473402, 0.00106666, 0.0131754,
+							0.0490667, 0.00106667, 1.90735e-010,
+							0.0165542, 0.00224999, 0.0594808,
+							0.0313273, 0.00224999, 0.0533387,
+							0.0437715, 0.00224999, 0.0437715,
+							0.0533386, 0.00224999, 0.0313274,
+							0.0594808, 0.00225, 0.0165542,
+							0.0184025, 0.00373333, 0.066122,
+							0.0348251, 0.00373333, 0.059294,
+							0.0486587, 0.00373333, 0.0486587,
+							0.059294, 0.00373333, 0.0348251,
+							0.066122, 0.00373333, 0.0184026,
+							0.0685333, 0.00373334, 6.67572e-010,
+							0.0191767, 0.00541666, 0.0689039,
+							0.0362902, 0.00541666, 0.0617887,
+							0.0507058, 0.00541666, 0.0507058,
+							0.0617886, 0.00541666, 0.0362903,
+							0.0689038, 0.00541667, 0.0191768,
+							0.0714167, 0.00541667, 9.68576e-010,
+							0.0193333, 0.00719999, 0.0694667,
+							0.0365866, 0.00719999, 0.0622933,
+							0.05112, 0.00719999, 0.05112,
+							0.0622933, 0.00719999, 0.0365867,
+							0.0694666, 0.0072, 0.0193334,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							-0.06165, 0.00225, 4.02331e-010,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0.06165, 0.00225, 4.02331e-010,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0, 0, 0,
+							0.006816, 0.1296, 0.00681602,
+							0.00487823, 0.1296, 0.00830579,
+							0.00257779, 0.1296, 0.00926224,
+							0, 0.1296, 0.00960002,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0.00830577, 0.1296, -0.00487821,
+							0.00487822, 0.1296, -0.00830576,
+							0.00257778, 0.1296, -0.0092622,
+							0, 0.1296, -0.00959998,
+							-0.00257779, 0.1296, -0.0092622,
+							-0.00487823, 0.1296, -0.00830575,
+							-0.00830578, 0.1296, -0.0048782,
+							-0.00257778, 0.1296, 0.00926224,
+							-0.00487822, 0.1296, 0.0083058,
+							-0.006816, 0.1296, 0.00681602,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0, 0.1512, 2.70367e-008,
+							0.156267, 0.1152, -0.00499999,
+							0.131733, 0.1152, -0.00499998,
+							0.1296, 0.1152, 2.05994e-008,
+							0.137067, 0.1152, 0.00800001,
+							-0.094, 0.1079, 1.9294e-008,
+							-0.096, 0.0432, 7.72476e-009,
+							-0.0897778, 0.0250667, 4.48227e-009,
+							0.0897778, 0.0250667, 4.48227e-009,
+							-0.084, 0.01845, 3.29912e-009,
+							0.084, 0.01845, 3.29912e-009,
+							-0.0782222, 0.0133334, 2.38419e-009,
+							0.0782222, 0.0133334, 2.38419e-009,
+							-0.0737778, 0.00961668, 1.7196e-009,
+							0.0737778, 0.00961668, 1.7196e-009,
+							0.0926222, 0.0432, 0.0257778,
+							0.072, 0.1152, 2.05994e-008,
+							0.05112, 0.1152, -0.05112,
+							0, 0.1152, -0.072,
+							-0.05112, 0.1152, -0.05112,
+							-0.072, 0.1152, 2.05994e-008,
+							0, 0.1152, 0.072,
+							-0.05112, 0.1152, 0.05112,
+							-0.0687556, 0.1194, 2.13504e-008,
+							0.05112, 0.1152, 0.05112,
+							0, 0.117825, 0.0663056,
+							-0.0396, 0.1224, 2.18868e-008,
+							0.0396, 0.1224, 2.18868e-008};
+
+float teapot_normals[] = {
+							-0.987635, -0.156768, 0,
+							-0.902861, -0.429933, 0,
+							-0.953562, -0.156989, -0.257047,
+							-0.871509, -0.430441, -0.234929,
+							-0.854265, -0.157281, -0.495474,
+							-0.780517, -0.431109, -0.4527,
+							-0.698293, -0.157393, -0.698294,
+							-0.637936, -0.431366, -0.637936,
+							-0.495474, -0.157281, -0.854265,
+							-0.4527, -0.431109, -0.780517,
+							-0.257047, -0.156989, -0.953562,
+							-0.234929, -0.430441, -0.871509,
+							0, -0.156767, -0.987636,
+							0, -0.429933, -0.902861,
+							-0.880022, 0.474932, 0,
+							-0.849414, 0.475466, -0.228973,
+							-0.76067, 0.476166, -0.441189,
+							-0.621695, 0.476435, -0.621695,
+							-0.441189, 0.476166, -0.76067,
+							-0.228972, 0.475466, -0.849414,
+							0, 0.474932, -0.880022,
+							0, 1, 0,
+							-3.12489e-007, 1, -4.53013e-008,
+							-4.74898e-007, 1, -2.15741e-007,
+							0, 1, 0,
+							-1.19502e-007, 1, -2.57504e-007,
+							-5.01339e-008, 1, -1.37835e-007,
+							0, 1, 0,
+							0.556738, 0.830688, 0,
+							0.537013, 0.831061, 0.14476,
+							0.480481, 0.83155, 0.278679,
+							0.392564, 0.831738, 0.392564,
+							0.278679, 0.83155, 0.480481,
+							0.14476, 0.831061, 0.537012,
+							0, 0.830688, 0.556738,
+							0.783289, 0.621658, 0,
+							0.755869, 0.622211, 0.203756,
+							0.67669, 0.622937, 0.39248,
+							0.552994, 0.623214, 0.552994,
+							0.39248, 0.622936, 0.676691,
+							0.203756, 0.62221, 0.755869,
+							0, 0.621658, 0.783289,
+							0.90286, 0.429934, 0,
+							0.871509, 0.430442, 0.234929,
+							0.780517, 0.431109, 0.4527,
+							0.637935, 0.431366, 0.637936,
+							0.4527, 0.431109, 0.780517,
+							0.234929, 0.430441, 0.87151,
+							0, 0.429934, 0.90286,
+							0.257047, -0.156989, -0.953562,
+							0.234929, -0.430441, -0.871509,
+							0.495474, -0.157281, -0.854265,
+							0.4527, -0.431109, -0.780517,
+							0.698293, -0.157393, -0.698294,
+							0.637936, -0.431366, -0.637936,
+							0.854265, -0.157281, -0.495474,
+							0.780517, -0.431109, -0.4527,
+							0.953562, -0.156989, -0.257047,
+							0.871509, -0.430441, -0.234929,
+							0.987636, -0.156767, 0,
+							0.902861, -0.429933, 0,
+							0.228973, 0.475465, -0.849414,
+							0.441188, 0.476167, -0.760669,
+							0.621695, 0.476434, -0.621696,
+							0.76067, 0.476167, -0.441188,
+							0.849414, 0.475466, -0.228972,
+							0.880022, 0.474932, 0,
+							4.53013e-008, 1, -3.12489e-007,
+							2.15741e-007, 1, -4.74898e-007,
+							0, 1, 0,
+							2.57504e-007, 1, -1.19502e-007,
+							1.37835e-007, 1, -5.01339e-008,
+							0, 1, 0,
+							0, 0.830689, 0.556737,
+							-0.14476, 0.831061, 0.537012,
+							-0.278679, 0.83155, 0.480481,
+							-0.392563, 0.831738, 0.392563,
+							-0.480482, 0.83155, 0.27868,
+							-0.537012, 0.831061, 0.14476,
+							-0.556738, 0.830688, 0,
+							0, 0.621658, 0.783289,
+							-0.203756, 0.62221, 0.755869,
+							-0.39248, 0.622937, 0.67669,
+							-0.552993, 0.623215, 0.552993,
+							-0.67669, 0.622937, 0.39248,
+							-0.755869, 0.62221, 0.203756,
+							-0.783289, 0.621658, 0,
+							-0.234929, 0.430442, 0.871509,
+							-0.4527, 0.431109, 0.780517,
+							-0.637935, 0.431366, 0.637936,
+							-0.780517, 0.431109, 0.4527,
+							-0.87151, 0.430441, 0.234929,
+							-0.90286, 0.429934, 0,
+							0.987636, -0.156767, 0,
+							0.953562, -0.156989, 0.257047,
+							0.871509, -0.430441, 0.234929,
+							0.854265, -0.15728, 0.495474,
+							0.780517, -0.431109, 0.4527,
+							0.698294, -0.157393, 0.698293,
+							0.637936, -0.431366, 0.637936,
+							0.495474, -0.157281, 0.854265,
+							0.4527, -0.431109, 0.780517,
+							0.257047, -0.156989, 0.953562,
+							0.234929, -0.430441, 0.871509,
+							0, -0.156767, 0.987636,
+							0, -0.429933, 0.902861,
+							0.880022, 0.474934, 0,
+							0.849413, 0.475467, 0.228972,
+							0.760669, 0.476167, 0.441188,
+							0.621695, 0.476436, 0.621695,
+							0.441188, 0.476167, 0.760669,
+							0.228972, 0.475466, 0.849414,
+							0, 0.474934, 0.880022,
+							3.12489e-007, 1, 4.53013e-008,
+							4.74898e-007, 1, 2.15741e-007,
+							0, 1, 0,
+							1.19502e-007, 1, 2.57504e-007,
+							5.01339e-008, 1, 1.37835e-007,
+							0, 1, 0,
+							-0.537013, 0.831061, -0.14476,
+							-0.480482, 0.83155, -0.27868,
+							-0.392566, 0.831735, -0.392566,
+							-0.27868, 0.83155, -0.480482,
+							-0.14476, 0.831061, -0.537012,
+							0, 0.830688, -0.556738,
+							-0.783289, 0.621657, 0,
+							-0.755869, 0.62221, -0.203756,
+							-0.676691, 0.622936, -0.39248,
+							-0.552994, 0.623215, -0.552993,
+							-0.392481, 0.622936, -0.676691,
+							-0.203756, 0.622209, -0.75587,
+							0, 0.621657, -0.783289,
+							-0.871509, 0.430442, -0.234929,
+							-0.780517, 0.431109, -0.4527,
+							-0.637936, 0.431366, -0.637935,
+							-0.4527, 0.431109, -0.780517,
+							-0.234929, 0.430441, -0.87151,
+							0, 0.429934, -0.90286,
+							-0.257047, -0.156989, 0.953562,
+							-0.234929, -0.430441, 0.871509,
+							-0.495474, -0.15728, 0.854265,
+							-0.4527, -0.431109, 0.780517,
+							-0.698294, -0.157393, 0.698293,
+							-0.637936, -0.431366, 0.637936,
+							-0.854265, -0.157281, 0.495474,
+							-0.780517, -0.431109, 0.4527,
+							-0.953562, -0.156989, 0.257047,
+							-0.871509, -0.430442, 0.234928,
+							-0.987636, -0.156767, 0,
+							-0.228972, 0.475467, 0.849413,
+							-0.441188, 0.476167, 0.760669,
+							-0.621695, 0.476436, 0.621695,
+							-0.76067, 0.476167, 0.441188,
+							-0.849414, 0.475466, 0.228972,
+							-0.880022, 0.474934, 0,
+							-4.53013e-008, 1, 3.12489e-007,
+							-2.15741e-007, 1, 4.74898e-007,
+							0, 1, 0,
+							-2.57504e-007, 1, 1.19502e-007,
+							-1.37835e-007, 1, 5.01339e-008,
+							0.14476, 0.831061, -0.537013,
+							0.27868, 0.83155, -0.480482,
+							0.392566, 0.831735, -0.392566,
+							0.480482, 0.83155, -0.27868,
+							0.537012, 0.831061, -0.14476,
+							0.556738, 0.830688, 0,
+							0.203756, 0.62221, -0.755869,
+							0.392481, 0.622936, -0.67669,
+							0.552994, 0.623215, -0.552993,
+							0.676691, 0.622936, -0.39248,
+							0.75587, 0.622209, -0.203756,
+							0.783289, 0.621657, 0,
+							0.234929, 0.430442, -0.871509,
+							0.4527, 0.431109, -0.780517,
+							0.637936, 0.431366, -0.637935,
+							0.780517, 0.431109, -0.4527,
+							0.87151, 0.430441, -0.234928,
+							0.906828, 0.421501, 0,
+							0.875348, 0.422003, 0.235963,
+							0.871509, 0.430442, 0.234929,
+							0.783966, 0.422664, 0.4547,
+							0.780517, 0.43111, 0.4527,
+							0.640758, 0.422917, 0.640758,
+							0.4547, 0.422664, 0.783966,
+							0.4527, 0.43111, 0.780517,
+							0.235964, 0.422003, 0.875348,
+							0.234929, 0.430442, 0.871509,
+							0, 0.421501, 0.906828,
+							0.918633, 0.395111, 0,
+							0.886771, 0.395595, 0.239043,
+							0.794229, 0.39623, 0.460653,
+							0.649156, 0.396474, 0.649157,
+							0.460653, 0.39623, 0.794229,
+							0.239043, 0.395595, 0.886771,
+							0, 0.395111, 0.918633,
+							0.937749, 0.347314, 0,
+							0.905271, 0.347757, 0.244029,
+							0.810853, 0.34834, 0.470295,
+							0.662761, 0.348563, 0.662761,
+							0.470295, 0.34834, 0.810853,
+							0.24403, 0.347757, 0.90527,
+							0, 0.347314, 0.937749,
+							0.96234, 0.271848, 0,
+							0.929073, 0.272213, 0.250446,
+							0.832247, 0.272693, 0.482704,
+							0.680271, 0.272877, 0.680271,
+							0.482704, 0.272693, 0.832247,
+							0.250446, 0.272213, 0.929073,
+							0, 0.271848, 0.96234,
+							0.987204, 0.15946, 0,
+							0.953145, 0.159686, 0.256935,
+							0.85389, 0.159982, 0.495256,
+							0.697986, 0.160096, 0.697986,
+							0.495256, 0.159982, 0.853889,
+							0.256935, 0.159686, 0.953145,
+							0, 0.15946, 0.987204,
+							1, 0, 0,
+							0.965535, -2.69333e-008, 0.260275,
+							0.865031, -2.6582e-008, 0.501718,
+							0.707107, -1.58051e-008, 0.707107,
+							0.501718, -5.72888e-009, 0.865031,
+							0.260275, -7.99313e-010, 0.965535,
+							0, 0, 1,
+							0, 0.421501, 0.906828,
+							-0.235963, 0.422003, 0.875348,
+							-0.234928, 0.430442, 0.871509,
+							-0.4547, 0.422664, 0.783966,
+							-0.4527, 0.43111, 0.780517,
+							-0.640758, 0.422917, 0.640758,
+							-0.783966, 0.422664, 0.454701,
+							-0.780517, 0.43111, 0.4527,
+							-0.875348, 0.422003, 0.235964,
+							-0.871509, 0.430442, 0.234929,
+							-0.906828, 0.421501, 0,
+							0, 0.395111, 0.918633,
+							-0.239043, 0.395595, 0.886771,
+							-0.460653, 0.39623, 0.794229,
+							-0.649157, 0.396474, 0.649157,
+							-0.794229, 0.39623, 0.460653,
+							-0.886771, 0.395595, 0.239043,
+							-0.918633, 0.395111, 0,
+							-0.244029, 0.347757, 0.905271,
+							-0.470295, 0.34834, 0.810853,
+							-0.662761, 0.348563, 0.662761,
+							-0.810853, 0.34834, 0.470295,
+							-0.90527, 0.347757, 0.24403,
+							-0.937749, 0.347314, 0,
+							0, 0.271848, 0.96234,
+							-0.250446, 0.272213, 0.929073,
+							-0.482703, 0.272693, 0.832248,
+							-0.680271, 0.272877, 0.680271,
+							-0.832247, 0.272693, 0.482704,
+							-0.929073, 0.272213, 0.250446,
+							-0.96234, 0.271848, 0,
+							0, 0.159461, 0.987204,
+							-0.256935, 0.159686, 0.953145,
+							-0.495256, 0.159983, 0.853889,
+							-0.697986, 0.160096, 0.697986,
+							-0.853889, 0.159982, 0.495256,
+							-0.953145, 0.159686, 0.256935,
+							-0.987204, 0.159461, 0,
+							-0.260274, -7.9931e-010, 0.965535,
+							-0.501718, -5.72887e-009, 0.865031,
+							-0.707107, -1.58051e-008, 0.707107,
+							-0.865031, -2.6582e-008, 0.501718,
+							-0.965535, -2.69333e-008, 0.260275,
+							0.410365, 0.911921, 0,
+							-0.906828, 0.421501, 0,
+							-0.875348, 0.422003, -0.235963,
+							-0.871509, 0.430442, -0.234928,
+							-0.783966, 0.422664, -0.4547,
+							-0.780517, 0.43111, -0.4527,
+							-0.640758, 0.422917, -0.640758,
+							-0.454701, 0.422664, -0.783966,
+							-0.4527, 0.43111, -0.780517,
+							-0.235964, 0.422003, -0.875348,
+							-0.234929, 0.430442, -0.871509,
+							0, 0.421501, -0.906828,
+							-0.918633, 0.395111, 0,
+							-0.886771, 0.395595, -0.239043,
+							-0.794229, 0.39623, -0.460653,
+							-0.649157, 0.396474, -0.649156,
+							-0.460653, 0.39623, -0.794229,
+							-0.239043, 0.395595, -0.886771,
+							0, 0.395111, -0.918633,
+							-0.905271, 0.347757, -0.244029,
+							-0.810853, 0.34834, -0.470295,
+							-0.662761, 0.348563, -0.662761,
+							-0.470295, 0.34834, -0.810853,
+							-0.24403, 0.347757, -0.90527,
+							0, 0.347314, -0.937749,
+							-0.96234, 0.271847, 0,
+							-0.929073, 0.272213, -0.250446,
+							-0.832248, 0.272693, -0.482703,
+							-0.680271, 0.272877, -0.680271,
+							-0.482704, 0.272693, -0.832247,
+							-0.250446, 0.272213, -0.929073,
+							0, 0.271847, -0.96234,
+							-0.987204, 0.15946, 0,
+							-0.953145, 0.159685, -0.256935,
+							-0.85389, 0.159982, -0.495256,
+							-0.697986, 0.160096, -0.697986,
+							-0.495256, 0.159982, -0.853889,
+							-0.256935, 0.159685, -0.953145,
+							0, 0.15946, -0.987204,
+							-0.965535, 2.69333e-008, -0.260274,
+							-0.865031, 2.6582e-008, -0.501718,
+							-0.707107, 1.58051e-008, -0.707107,
+							-0.501718, 5.72888e-009, -0.865031,
+							-0.260275, 7.99313e-010, -0.965535,
+							0, 0 , -1,
+							0.235963, 0.422003, -0.875348,
+							0.234928, 0.430442, -0.871509,
+							0.4547, 0.422664, -0.783966,
+							0.4527, 0.43111, -0.780517,
+							0.640758, 0.422917, -0.640758,
+							0.783966, 0.422664, -0.4547,
+							0.780517, 0.43111, -0.4527,
+							0.875348, 0.422003, -0.235964,
+							0.871509, 0.430442, -0.234929,
+							0.906828, 0.421501, 0,
+							0.239043, 0.395595, -0.886771,
+							0.460653, 0.39623, -0.794229,
+							0.649157, 0.396474, -0.649156,
+							0.794229, 0.39623, -0.460653,
+							0.886771, 0.395595, -0.239043,
+							0.918633, 0.395111, 0,
+							0.244029, 0.347757, -0.905271,
+							0.470295, 0.34834, -0.810853,
+							0.662761, 0.348563, -0.662761,
+							0.810853, 0.34834, -0.470295,
+							0.90527, 0.347757, -0.24403,
+							0.250446, 0.272213, -0.929073,
+							0.482704, 0.272693, -0.832247,
+							0.680271, 0.272877, -0.680271,
+							0.832247, 0.272693, -0.482704,
+							0.929073, 0.272213, -0.250446,
+							0.96234, 0.271847, 0,
+							0.256935, 0.159685, -0.953145,
+							0.495256, 0.159982, -0.85389,
+							0.697986, 0.160096, -0.697986,
+							0.853889, 0.159982, -0.495256,
+							0.953145, 0.159685, -0.256935,
+							0.987204, 0.15946, 0,
+							0.260274, 7.9931e-010, -0.965535,
+							0.501718, 5.72887e-009, -0.865031,
+							0.707107, 1.58051e-008, -0.707107,
+							0.865031, 2.6582e-008, -0.501718,
+							0.965535, 2.69333e-008, -0.260275,
+							0.938373, -0.345625, -3.10672e-010,
+							0.905874, -0.346066, 0.244192,
+							0.811396, -0.346647, 0.470609,
+							0.663205, -0.346869, 0.663205,
+							0.47061, -0.346647, 0.811395,
+							0.244192, -0.346066, 0.905874,
+							0, -0.345625, 0.938373,
+							0.811257, -0.584689, -4.41262e-009,
+							0.782908, -0.585247, 0.211045,
+							0.700957, -0.58598, 0.406555,
+							0.572843, -0.586261, 0.572843,
+							0.406555, -0.58598, 0.700957,
+							0.211045, -0.585247, 0.782908,
+							0, -0.584689, 0.811257,
+							0.6981, -0.716, -1.94916e-008,
+							0.673539, -0.716506, 0.181563,
+							0.602839, -0.717169, 0.349647,
+							0.492597, -0.717423, 0.492597,
+							0.349647, -0.717169, 0.602839,
+							0.181563, -0.716506, 0.673539,
+							0, -0.716, 0.6981,
+							0.636383, -0.771373, -5.3452e-008,
+							0.61392, -0.771826, 0.165491,
+							0.549392, -0.772419, 0.318648,
+							0.448897, -0.772647, 0.448897,
+							0.318648, -0.772419, 0.549392,
+							0.165492, -0.771826, 0.61392,
+							0, -0.771373, 0.636383,
+							0.675056, -0.737767, -1.05865e-007,
+							0.651275, -0.738254, 0.175561,
+							0.582878, -0.738893, 0.338069,
+							0.476275, -0.739138, 0.476275,
+							0.338069, -0.738893, 0.582878,
+							0.175561, -0.738254, 0.651275,
+							0, -0.737767, 0.675056,
+							1, 0, 0,
+							0.965535, -2.69332e-008, 0.260274,
+							0.865031, -2.65819e-008, 0.501718,
+							0.707107, -1.5805e-008, 0.707107,
+							0.501718, -5.72887e-009, 0.865031,
+							0.260275, -7.99311e-010, 0.965535,
+							0, 0, 1,
+							-0.244192, -0.346066, 0.905874,
+							-0.470609, -0.346647, 0.811396,
+							-0.663205, -0.346869, 0.663205,
+							-0.811395, -0.346647, 0.47061,
+							-0.905874, -0.346066, 0.244193,
+							-0.938373, -0.345625, -3.10672e-010,
+							-0.211045, -0.585247, 0.782908,
+							-0.406555, -0.58598, 0.700957,
+							-0.572843, -0.586261, 0.572843,
+							-0.700957, -0.58598, 0.406555,
+							-0.782908, -0.585247, 0.211045,
+							-0.811257, -0.584689, -4.41262e-009,
+							-0.181563, -0.716506, 0.673539,
+							-0.349647, -0.717169, 0.602839,
+							-0.492597, -0.717423, 0.492597,
+							-0.602839, -0.717169, 0.349647,
+							-0.673539, -0.716506, 0.181563,
+							-0.6981, -0.716, -1.94916e-008,
+							-0.165491, -0.771826, 0.61392,
+							-0.318648, -0.772419, 0.549393,
+							-0.448897, -0.772647, 0.448897,
+							-0.549392, -0.772419, 0.318648,
+							-0.61392, -0.771826, 0.165492,
+							-0.636383, -0.771373, -5.3452e-008,
+							-0.175561, -0.738254, 0.651275,
+							-0.338069, -0.738893, 0.582878,
+							-0.476275, -0.739138, 0.476275,
+							-0.582878, -0.738893, 0.338069,
+							-0.651275, -0.738254, 0.175561,
+							-0.675056, -0.737767, -1.05865e-007,
+							-0.260274, -7.99309e-010, 0.965535,
+							-0.501718, -5.72886e-009, 0.865031,
+							-0.707107, -1.5805e-008, 0.707107,
+							-0.865031, -2.65819e-008, 0.501718,
+							-0.965535, -2.69333e-008, 0.260275,
+							-1, 0, 0,
+							-0.905874, -0.346066, -0.244192,
+							-0.811396, -0.346647, -0.470609,
+							-0.663205, -0.346869, -0.663205,
+							-0.47061, -0.346647, -0.811395,
+							-0.244192, -0.346066, -0.905874,
+							0, -0.345625, -0.938373,
+							-0.782908, -0.585247, -0.211045,
+							-0.700957, -0.58598, -0.406555,
+							-0.572843, -0.586261, -0.572843,
+							-0.406555, -0.58598, -0.700957,
+							-0.211045, -0.585247, -0.782908,
+							0, -0.584689, -0.811257,
+							-0.673539, -0.716506, -0.181563,
+							-0.602839, -0.717169, -0.349647,
+							-0.492597, -0.717423, -0.492597,
+							-0.349647, -0.717169, -0.602839,
+							-0.181563, -0.716506, -0.673539,
+							0, -0.716, -0.6981,
+							-0.61392, -0.771826, -0.165491,
+							-0.549392, -0.77242, -0.318647,
+							-0.448897, -0.772647, -0.448897,
+							-0.318648, -0.77242, -0.549392,
+							-0.165492, -0.771826, -0.61392,
+							0, -0.771373, -0.636383,
+							-0.651275, -0.738254, -0.175561,
+							-0.582877, -0.738894, -0.338069,
+							-0.476274, -0.739138, -0.476274,
+							-0.338069, -0.738894, -0.582877,
+							-0.175561, -0.738255, -0.651275,
+							0, -0.737767, -0.675055,
+							-0.965535, 2.69333e-008, -0.260274,
+							-0.865031, 2.6582e-008, -0.501718,
+							-0.707107, 1.58051e-008, -0.707107,
+							-0.501718, 5.7289e-009, -0.865031,
+							-0.260275, 7.99315e-010, -0.965535,
+							0, 0 , -1,
+							0.244192, -0.346066, -0.905874,
+							0.470609, -0.346647, -0.811396,
+							0.663205, -0.346869, -0.663205,
+							0.811395, -0.346647, -0.47061,
+							0.905874, -0.346066, -0.244192,
+							0.211045, -0.585247, -0.782908,
+							0.406555, -0.58598, -0.700957,
+							0.572843, -0.586261, -0.572843,
+							0.700957, -0.58598, -0.406555,
+							0.782908, -0.585247, -0.211045,
+							0.181563, -0.716506, -0.673539,
+							0.349647, -0.717169, -0.602839,
+							0.492597, -0.717423, -0.492597,
+							0.602839, -0.717169, -0.349647,
+							0.673539, -0.716506, -0.181563,
+							0.165491, -0.771826, -0.61392,
+							0.318647, -0.77242, -0.549392,
+							0.448897, -0.772647, -0.448897,
+							0.549392, -0.77242, -0.318648,
+							0.61392, -0.771826, -0.165492,
+							0.175561, -0.738255, -0.651275,
+							0.338069, -0.738894, -0.582877,
+							0.476274, -0.739138, -0.476274,
+							0.582877, -0.738894, -0.338069,
+							0.651275, -0.738254, -0.175561,
+							0.260274, 7.99314e-010, -0.965535,
+							0.501718, 5.72889e-009, -0.865031,
+							0.707107, 1.58051e-008, -0.707107,
+							0.865031, 2.6582e-008, -0.501718,
+							0.965535, 2.69333e-008, -0.260275,
+							0.0104645, -0.999945, 0,
+							0 , -1, 0,
+							0.0104255, -0.954681, 0.297447,
+							2.56825e-008, -0.95448, 0.298276,
+							0.00846391, -0.708083, 0.706078,
+							1.14879e-007, -0.707106, 0.707108,
+							-2.9238e-009, -8.98486e-008, 1,
+							8.16344e-015, -8.94074e-008, 1,
+							-0.00997561, 0.707961, 0.706181,
+							5.80084e-008, 0.707107, 0.707107,
+							-0.0140841, 0.95459, 0.297589,
+							1.94189e-007, 0.95448, 0.298275,
+							-0.0149982, 0.999888, 0,
+							0, 1, 0,
+							0.0510697, -0.998695, 0,
+							0.0510028, -0.953615, 0.296676,
+							0.0415993, -0.706917, 0.706072,
+							-2.78701e-009, -9.11701e-008, 1,
+							-0.0493858, 0.704244, 0.708239,
+							-0.0701018, 0.951466, 0.299663,
+							-0.07479, 0.997199, 0,
+							0.14834, -0.988936, 0,
+							0.148104, -0.941964, 0.30128,
+							0.119688, -0.688399, 0.715389,
+							7.13598e-009, -8.17051e-008, 1,
+							-0.141352, 0.675015, 0.724137,
+							-0.204668, 0.927128, 0.313917,
+							-0.219512, 0.97561, 0,
+							0.364399, -0.931243, 0,
+							0.359682, -0.875088, 0.323804,
+							0.275915, -0.604128, 0.747597,
+							1.54202e-008, -6.37972e-008, 1,
+							-0.313659, 0.564289, 0.763672,
+							-0.474611, 0.807244, 0.350859,
+							-0.514496, 0.857493, 0,
+							0.767382, -0.64119, 0,
+							0.727532, -0.577566, 0.37029,
+							0.497151, -0.35353, 0.792374,
+							1.10972e-008, -5.53164e-008, 1,
+							-0.519904, 0.300684, 0.799556,
+							-0.810111, 0.441475, 0.385771,
+							-0.882353, 0.470588, 0,
+							1, 0, 0,
+							0.923077, -3.76483e-008, 0.384616,
+							0.599999, -4.20741e-008, 0.8,
+							0, -4.47037e-008, 1,
+							-0.600001, -5.17421e-008, 0.799999,
+							-0.923077, -4.14964e-008, 0.384614,
+							-1, 0, 0,
+							-0.014084, 0.95459, -0.297589,
+							5.67983e-008, 0.95448, -0.298275,
+							-0.00997558, 0.707961, -0.706182,
+							-4.84905e-008, 0.707107, -0.707107,
+							5.84773e-010, 8.94956e-008 , -1,
+							-8.16344e-015, 8.94074e-008 , -1,
+							0.0084637, -0.708085, -0.706076,
+							3.66172e-008, -0.707108, -0.707106,
+							0.0104256, -0.954682, -0.297445,
+							7.36826e-009, -0.95448, -0.298274,
+							0.0104646, -0.999945, 0,
+							-0.07479, 0.997199, 0,
+							-0.0701018, 0.951466, -0.299663,
+							-0.0493858, 0.704243, -0.708239,
+							-8.36107e-009, 8.41192e-008 , -1,
+							0.0415994, -0.706919, -0.70607,
+							0.0510028, -0.953616, -0.296674,
+							0.0510696, -0.998695, 0,
+							-0.204668, 0.927128, -0.313917,
+							-0.141352, 0.675015, -0.724137,
+							-7.13598e-009, 8.17051e-008 , -1,
+							0.119688, -0.688401, -0.715387,
+							0.148104, -0.941964, -0.301278,
+							-0.514495, 0.857493, 0,
+							-0.47461, 0.807244, -0.350859,
+							-0.313658, 0.564289, -0.763673,
+							-9.25216e-009, 7.40412e-008 , -1,
+							0.275916, -0.60413, -0.747595,
+							0.359681, -0.875089, -0.323802,
+							0.364399, -0.931243, 0,
+							-0.882353, 0.470589, 0,
+							-0.810111, 0.441477, -0.385771,
+							-0.519903, 0.300684, -0.799556,
+							-1.01322e-008, 5.82809e-008 , -1,
+							0.497153, -0.353532, -0.792373,
+							0.727532, -0.577567, -0.370288,
+							0.767381, -0.641191, 0,
+							-0.923077, 4.14963e-008, -0.384615,
+							-0.6, 5.17421e-008, -0.8,
+							0, 4.47037e-008 , -1,
+							0.600002, 4.2074e-008, -0.799999,
+							0.923078, 3.76482e-008, -0.384614,
+							0.972045, 0.234794, 0,
+							0.895972, 0.219226, 0.38623,
+							0.57987, 0.145888, 0.801541,
+							-1.56774e-008, -4.06593e-008, 1,
+							-0.577708, -0.153129, 0.801751,
+							-0.890548, -0.23959, 0.386678,
+							-0.965311, -0.261102, 0,
+							0.913811, 0.406139, 0,
+							0.842942, 0.38439, 0.376421,
+							0.548194, 0.264706, 0.793356,
+							-1.8594e-008, -5.87553e-008, 1,
+							-0.534196, -0.289235, 0.794341,
+							-0.807437, -0.452559, 0.378465,
+							-0.869653, -0.493664, 0,
+							0.83205, 0.5547, 0,
+							0.772293, 0.530527, 0.349435,
+							0.515845, 0.379263, 0.768156,
+							-2.48164e-008, -6.43889e-008, 1,
+							-0.486434, -0.411777, 0.770598,
+							-0.700515, -0.619694, 0.353919,
+							-0.743581, -0.668646, 0,
+							0.722373, 0.691503, 0,
+							0.676612, 0.666255, 0.31353,
+							0.471519, 0.495195, 0.729693,
+							-2.71577e-008, -7.53755e-008, 1,
+							-0.433172, -0.52092, 0.73553,
+							-0.589822, -0.740319, 0.322549,
+							-0.617031, -0.786939, 0,
+							0.580972, 0.813923, 0,
+							0.548733, 0.784249, 0.289562,
+							0.396971, 0.593617, 0.700024,
+							-2.572e-008, -8.77449e-008, 1,
+							-0.367048, -0.602921, 0.708352,
+							-0.485318, -0.820874, 0.301051,
+							-0.504835, -0.863216, 0,
+							0.390503, 0.867784, 0.307341,
+							0.285351, 0.634113, 0.718663,
+							-2.36665e-008, -9.72958e-008, 1,
+							-0.285351, -0.634114, 0.718661,
+							-0.390503, -0.867784, 0.30734,
+							-0.410365, -0.911921, 0,
+							-0.890548, -0.23959, -0.386679,
+							-0.577707, -0.153129, -0.801752,
+							1.08654e-008, 5.5622e-008 , -1,
+							0.579872, 0.145888, -0.801539,
+							0.895973, 0.219227, -0.386228,
+							-0.807437, -0.452558, -0.378466,
+							-0.534196, -0.289235, -0.794341,
+							2.27516e-008, 5.19016e-008 , -1,
+							0.548196, 0.264707, -0.793355,
+							0.842943, 0.384391, -0.376419,
+							-0.700515, -0.619694, -0.353919,
+							-0.486433, -0.411777, -0.770599,
+							2.48164e-008, 6.43889e-008 , -1,
+							0.515847, 0.379264, -0.768154,
+							0.772293, 0.530528, -0.349433,
+							-0.589822, -0.740319, -0.322549,
+							-0.433171, -0.520919, -0.735531,
+							2.71577e-008, 7.53755e-008 , -1,
+							0.47152, 0.495196, -0.729691,
+							0.676612, 0.666255, -0.313529,
+							-0.485318, -0.820874, -0.301052,
+							-0.367047, -0.60292, -0.708353,
+							2.88747e-008, 8.75411e-008 , -1,
+							0.396972, 0.593619, -0.700022,
+							0.548733, 0.784249, -0.289561,
+							-0.390503, -0.867784, -0.30734,
+							-0.285351, -0.634113, -0.718662,
+							2.36665e-008, 9.72958e-008 , -1,
+							0.285351, 0.634114, -0.718661,
+							0.390503, 0.867785, -0.307339,
+							-0.333935, 0.942596, 0,
+							0, 1, 0,
+							-0.291732, 0.855995, 0.426808,
+							-0.0157731, 0.886804, 0.461877,
+							-0.135103, 0.53438, 0.834377,
+							-0.0291362, 0.514277, 0.857129,
+							0.110195, 0.0292375, 0.99348,
+							4.3732e-009, -8.94073e-008, 1,
+							0.348602, -0.464039, 0.814337,
+							0.0673463, -0.513328, 0.855546,
+							0.492146, -0.767551, 0.410679,
+							0.134339, -0.878875, 0.457746,
+							0.528678, -0.848822, 0,
+							0.158678, -0.98733, 0,
+							-0.731055, 0.682318, 0,
+							-0.64585, 0.656206, 0.390219,
+							-0.31251, 0.484842, 0.816864,
+							0.215359, 0.108813, 0.970454,
+							0.627608, -0.260237, 0.733747,
+							0.813963, -0.465103, 0.348055,
+							0.854063, -0.52017, 0,
+							-0.920582, 0.39055, 0,
+							-0.835236, 0.412221, 0.363943,
+							-0.451322, 0.38916, 0.803034,
+							0.214084, 0.180281, 0.960035,
+							0.705425, -0.0805069, 0.704198,
+							0.913262, -0.239978, 0.329185,
+							0.957826, -0.287348, 0,
+							-0.948683, 0.316228, 0,
+							-0.842821, 0.34961, 0.409177,
+							-0.452672, 0.347535, 0.821162,
+							0.113546, 0.191909, 0.974822,
+							0.60461, -0.0547987, 0.794634,
+							0.880145, -0.253261, 0.401503,
+							0.947589, -0.319493, 0,
+							-0.874591, 0.484861, 0,
+							-0.723794, 0.476715, 0.498864,
+							-0.365377, 0.375544, 0.851743,
+							0.0260102, 0.151516, 0.988113,
+							0.417243, -0.185123, 0.88974,
+							0.70819, -0.506054, 0.492318,
+							0.787582, -0.61621, 0,
+							-0.600001, 0.799999, 0,
+							-0.497164, 0.711095, 0.497165,
+							-0.267367, 0.443286, 0.855577,
+							0, -4.47006e-008, 1,
+							0.250514, -0.54278, 0.801644,
+							0.366221, -0.855433, 0.36622,
+							0.384615, -0.923077, 0,
+							0.528678, -0.848822, 0,
+							0.492146, -0.767551, -0.41068,
+							0.134339, -0.878875, -0.457747,
+							0.348602, -0.464038, -0.814337,
+							0.0673462, -0.513327, -0.855546,
+							0.110195, 0.0292377, -0.99348,
+							-4.3732e-009, 8.94073e-008 , -1,
+							-0.135104, 0.534382, -0.834376,
+							-0.0291362, 0.514278, -0.857128,
+							-0.291732, 0.855996, -0.426806,
+							-0.0157731, 0.886804, -0.461876,
+							-0.333935, 0.942596, 0,
+							0.854063, -0.52017, 0,
+							0.813963, -0.465103, -0.348056,
+							0.627607, -0.260237, -0.733748,
+							0.215359, 0.108813, -0.970454,
+							-0.312512, 0.484843, -0.816862,
+							-0.645851, 0.656206, -0.390218,
+							0.913262, -0.239977, -0.329185,
+							0.705424, -0.0805064, -0.704199,
+							0.214084, 0.180281, -0.960035,
+							-0.451324, 0.38916, -0.803032,
+							-0.835237, 0.412221, -0.363941,
+							0.947589, -0.319493, 0,
+							0.880144, -0.253261, -0.401503,
+							0.60461, -0.0547981, -0.794635,
+							0.113546, 0.191909, -0.974822,
+							-0.452675, 0.347535, -0.821161,
+							-0.842822, 0.34961, -0.409175,
+							-0.948683, 0.316228, 0,
+							0.787582, -0.61621, 0,
+							0.70819, -0.506053, -0.492318,
+							0.417243, -0.185122, -0.88974,
+							0.0260103, 0.151516, -0.988113,
+							-0.365379, 0.375545, -0.851742,
+							-0.723796, 0.476715, -0.498861,
+							-0.874591, 0.484861, 0,
+							0.36622, -0.855433, -0.36622,
+							0.250514, -0.54278, -0.801644,
+							0, 4.47006e-008 , -1,
+							-0.267368, 0.443289, -0.855575,
+							-0.497165, 0.711096, -0.497162,
+							-0.467888, 0.883788, 0,
+							-0.387053, 0.824948, 0.411887,
+							-0.215548, 0.655025, 0.72421,
+							-0.00489616, 0.343259, 0.939228,
+							0.269127, -0.23781, 0.933283,
+							0.442187, -0.761825, 0.473385,
+							0.463425, -0.886136, 0,
+							-0.306008, 0.952029, 0,
+							-0.253998, 0.928137, 0.272115,
+							-0.14959, 0.863647, 0.481391,
+							-0.0195232, 0.746219, 0.665414,
+							0.218115, 0.441118, 0.870541,
+							0.612385, -0.337374, 0.714957,
+							0.694135, -0.719844, 0,
+							0, 1, 0,
+							-0.0182315, 0.999613, -0.0210205,
+							-0.0369304, 0.999286, 0.00796664,
+							-0.0348909, 0.997622, 0.059444,
+							-0.00787177, 0.994104, 0.108145,
+							0.0539575, 0.992309, 0.111405,
+							0.106533, 0.994309, 0,
+							0.913813, 0.406135, 0,
+							0.507716, 0.52532, -0.682835,
+							0.148478, 0.676273, -0.721533,
+							-0.0300304, 0.787464, -0.615629,
+							-0.144372, 0.876436, -0.459366,
+							-0.223743, 0.943891, -0.242919,
+							-0.253109, 0.967438, 0,
+							0.789351, -0.613942, 0,
+							0.577415, -0.400033, -0.711734,
+							0.241288, -0.0136421, -0.970358,
+							-0.0103803, 0.344669, -0.938667,
+							-0.199105, 0.663018, -0.72164,
+							-0.316295, 0.875642, -0.364979,
+							-0.349987, 0.936755, 0,
+							0.6, -0.8, 0,
+							0.483629, -0.690899, -0.537366,
+							0.247465, -0.40568, -0.879878,
+							0, 4.47028e-008 , -1,
+							-0.236617, 0.486025, -0.841304,
+							-0.378646, 0.824393, -0.420717,
+							-0.410365, 0.911921, 0,
+							0.442188, -0.761824, -0.473386,
+							0.269127, -0.237807, -0.933284,
+							-0.0048962, 0.343262, -0.939227,
+							-0.215548, 0.655028, -0.724208,
+							-0.387053, 0.82495, -0.411884,
+							0.612385, -0.337369, -0.714959,
+							0.218114, 0.441124, -0.870538,
+							-0.0195232, 0.746221, -0.665412,
+							-0.14959, 0.863648, -0.481389,
+							-0.253997, 0.928138, -0.272112,
+							0.0539562, 0.992309, -0.111404,
+							-0.00787199, 0.994104, -0.108144,
+							-0.0348909, 0.997622, -0.0594425,
+							-0.0369306, 0.999286, -0.00796709,
+							-0.0182318, 0.999613, 0.0210199,
+							-0.223743, 0.943891, 0.242919,
+							-0.144372, 0.876437, 0.459364,
+							-0.0300305, 0.787466, 0.615626,
+							0.148478, 0.676276, 0.721529,
+							0.507717, 0.525323, 0.682832,
+							-0.316294, 0.875642, 0.364979,
+							-0.199104, 0.663019, 0.72164,
+							-0.0103804, 0.344672, 0.938666,
+							0.241289, -0.0136406, 0.970357,
+							0.577417, -0.400034, 0.711732,
+							-0.378646, 0.824393, 0.420718,
+							-0.236617, 0.486023, 0.841305,
+							0, -4.47028e-008, 1,
+							0.247466, -0.405682, 0.879877,
+							0.48363, -0.690899, 0.537365,
+							0.249998, 0.968246, 0,
+							0.001257, 0.999999, 0,
+							0.241077, 0.968356, 0.0645611,
+							0.00120899, 0.999999, 0.000335259,
+							0.215548, 0.968509, 0.124615,
+							0.00108352, 0.999999, 0.000626407,
+							0.175886, 0.96857, 0.175886,
+							0.124616, 0.968509, 0.215548,
+							0.0645611, 0.968356, 0.241077,
+							0, 0.968246, 0.249998,
+							0.989204, 0.146548, 0,
+							0.955495, 0.146755, 0.255913,
+							0.856312, 0.147029, 0.495088,
+							0.699411, 0.147135, 0.699411,
+							0.495089, 0.147029, 0.856312,
+							0.255914, 0.146754, 0.955495,
+							0, 0.146548, 0.989204,
+							0.780869, -0.624695, 0,
+							0.753687, -0.625441, 0.201937,
+							0.674735, -0.626493, 0.390178,
+							0.550895, -0.62692, 0.550896,
+							0.390179, -0.626493, 0.674734,
+							0.201938, -0.625441, 0.753688,
+							0, -0.624695, 0.780869,
+							0.747409, -0.664364, 0,
+							0.721243, -0.665116, 0.193465,
+							0.645526, -0.66618, 0.373497,
+							0.527081, -0.666611, 0.527081,
+							0.373498, -0.66618, 0.645526,
+							0.193466, -0.665116, 0.721243,
+							0, -0.664364, 0.747409,
+							0.950775, -0.309882, 0,
+							0.917897, -0.310647, 0.246906,
+							0.822132, -0.311772, 0.476337,
+							0.671753, -0.312241, 0.671754,
+							0.476338, -0.311771, 0.822132,
+							0.246907, -0.310647, 0.917897,
+							0, -0.309882, 0.950775,
+							0.6, 0.8, 0,
+							0.578783, 0.800417, 0.15602,
+							0.517905, 0.800964, 0.300385,
+							0.423156, 0.801173, 0.423156,
+							0.300386, 0.800964, 0.517904,
+							0.156021, 0.800416, 0.578784,
+							0, 0.799999, 0.600001,
+							0, 0.968246, 0.249998,
+							-0.064561, 0.968356, 0.241077,
+							-0.124615, 0.968509, 0.215548,
+							-0.175885, 0.968571, 0.175885,
+							-0.215548, 0.968509, 0.124616,
+							-0.241076, 0.968356, 0.064561,
+							-0.249998, 0.968246, 0,
+							0, 0.146549, 0.989203,
+							-0.255913, 0.146755, 0.955495,
+							-0.495088, 0.14703, 0.856312,
+							-0.699411, 0.147136, 0.699411,
+							-0.856311, 0.14703, 0.495089,
+							-0.955495, 0.146755, 0.255914,
+							-0.989203, 0.146549, 0,
+							-0.201937, -0.625441, 0.753688,
+							-0.390178, -0.626493, 0.674735,
+							-0.550895, -0.62692, 0.550896,
+							-0.674734, -0.626493, 0.390179,
+							-0.753687, -0.625441, 0.201939,
+							-0.780869, -0.624695, 0,
+							0, -0.664364, 0.747409,
+							-0.193465, -0.665116, 0.721244,
+							-0.373497, -0.66618, 0.645527,
+							-0.527081, -0.666611, 0.527081,
+							-0.645526, -0.66618, 0.373498,
+							-0.721243, -0.665116, 0.193466,
+							-0.747409, -0.664364, 0,
+							0, -0.309883, 0.950775,
+							-0.246906, -0.310648, 0.917897,
+							-0.476336, -0.311773, 0.822132,
+							-0.671753, -0.312242, 0.671753,
+							-0.822131, -0.311773, 0.476338,
+							-0.917897, -0.310648, 0.246907,
+							-0.950775, -0.309883, 0,
+							-0.15602, 0.800417, 0.578784,
+							-0.300385, 0.800964, 0.517905,
+							-0.423156, 0.801173, 0.423156,
+							-0.517904, 0.800964, 0.300386,
+							-0.578783, 0.800417, 0.15602,
+							-0.6, 0.8, 0,
+							-0.249998, 0.968246, 0,
+							-0.241077, 0.968356, -0.064561,
+							-0.215548, 0.968509, -0.124615,
+							-0.175885, 0.968571, -0.175885,
+							-0.124616, 0.968509, -0.215548,
+							-0.064561, 0.968356, -0.241077,
+							0, 0.968246, -0.249998,
+							-0.989204, 0.146547, 0,
+							-0.955496, 0.146753, -0.255912,
+							-0.856312, 0.147028, -0.495088,
+							-0.699411, 0.147134, -0.699411,
+							-0.495089, 0.147028, -0.856312,
+							-0.255914, 0.146753, -0.955495,
+							0, 0.146547, -0.989204,
+							-0.753688, -0.625441, -0.201937,
+							-0.674735, -0.626494, -0.390178,
+							-0.550896, -0.62692, -0.550895,
+							-0.390179, -0.626494, -0.674734,
+							-0.201938, -0.625441, -0.753687,
+							0, -0.624695, -0.780869,
+							-0.747409, -0.664364, 0,
+							-0.721244, -0.665116, -0.193465,
+							-0.645526, -0.66618, -0.373497,
+							-0.527081, -0.666612, -0.527081,
+							-0.373498, -0.66618, -0.645526,
+							-0.193466, -0.665116, -0.721243,
+							0, -0.664364, -0.747409,
+							-0.950776, -0.30988, 0,
+							-0.917898, -0.310645, -0.246906,
+							-0.822133, -0.31177, -0.476337,
+							-0.671754, -0.312239, -0.671754,
+							-0.476338, -0.31177, -0.822132,
+							-0.246907, -0.310646, -0.917898,
+							0, -0.309881, -0.950775,
+							-0.578783, 0.800417, -0.15602,
+							-0.517905, 0.800964, -0.300384,
+							-0.423155, 0.801174, -0.423155,
+							-0.300386, 0.800964, -0.517904,
+							-0.15602, 0.800417, -0.578783,
+							0, 0.8, -0.6,
+							0.064561, 0.968356, -0.241077,
+							0.124615, 0.968509, -0.215548,
+							0.175885, 0.968571, -0.175885,
+							0.215549, 0.968509, -0.124616,
+							0.241077, 0.968356, -0.064561,
+							0.249998, 0.968246, 0,
+							0.255913, 0.146754, -0.955496,
+							0.495088, 0.147028, -0.856312,
+							0.699411, 0.147134, -0.699411,
+							0.856312, 0.147028, -0.495089,
+							0.955495, 0.146753, -0.255914,
+							0.989204, 0.146547, 0,
+							0.201937, -0.625441, -0.753687,
+							0.390178, -0.626494, -0.674735,
+							0.550896, -0.62692, -0.550895,
+							0.674734, -0.626494, -0.390179,
+							0.753687, -0.625441, -0.201938,
+							0.193465, -0.665116, -0.721243,
+							0.373497, -0.66618, -0.645526,
+							0.527081, -0.666612, -0.527081,
+							0.645526, -0.66618, -0.373498,
+							0.721244, -0.665116, -0.193466,
+							0.747409, -0.664364, 0,
+							0.246906, -0.310646, -0.917898,
+							0.476337, -0.31177, -0.822133,
+							0.671754, -0.312239, -0.671754,
+							0.822133, -0.31177, -0.476338,
+							0.917898, -0.310646, -0.246907,
+							0.950776, -0.30988, 0,
+							0.15602, 0.800417, -0.578783,
+							0.300384, 0.800964, -0.517905,
+							0.423155, 0.801174, -0.423155,
+							0.517904, 0.800964, -0.300386,
+							0.578783, 0.800417, -0.15602,
+							0.268354, 0.96332, 0,
+							0.258757, 0.963421, 0.0697519,
+							0.231413, 0.963552, 0.134219,
+							0.189037, 0.963603, 0.189037,
+							0.13422, 0.963552, 0.231413,
+							0.0697519, 0.963421, 0.258756,
+							0, 0.96332, 0.268354,
+							0.168031, 0.985782, 0,
+							0.162012, 0.985822, 0.0436728,
+							0.144879, 0.985875, 0.0840299,
+							0.118345, 0.985895, 0.118345,
+							0.0840302, 0.985875, 0.144879,
+							0.0436728, 0.985822, 0.162011,
+							0, 0.985782, 0.168031,
+							0.14834, 0.988936, 0,
+							0.143025, 0.988968, 0.0385546,
+							0.127899, 0.989009, 0.0741814,
+							0.104474, 0.989025, 0.104474,
+							0.0741816, 0.989009, 0.127899,
+							0.0385547, 0.988968, 0.143025,
+							0, 0.988936, 0.148341,
+							0.193633, 0.981074, 0,
+							0.186698, 0.981127, 0.0503274,
+							0.166959, 0.981197, 0.0968359,
+							0.136382, 0.981224, 0.136382,
+							0.0968361, 0.981197, 0.166958,
+							0.0503276, 0.981127, 0.186699,
+							0, 0.981074, 0.193633,
+							0.390291, 0.920691, 0,
+							0.376377, 0.920895, 0.101458,
+							0.336655, 0.921161, 0.19526,
+							0.275023, 0.921262, 0.275023,
+							0.19526, 0.921161, 0.336655,
+							0.101459, 0.920894, 0.376377,
+							0, 0.920691, 0.390291,
+							1, 0, 0,
+							0.965535, -2.6932e-008, 0.260274,
+							0.865031, -2.65808e-008, 0.501718,
+							0.707107, -1.58043e-008, 0.707107,
+							0.501719, -5.72865e-009, 0.865031,
+							0.260276, -7.99283e-010, 0.965534,
+							0, 0, 1,
+							-0.0697519, 0.963421, 0.258757,
+							-0.134219, 0.963552, 0.231413,
+							-0.189037, 0.963603, 0.189037,
+							-0.231413, 0.963552, 0.13422,
+							-0.258756, 0.963421, 0.0697519,
+							-0.268354, 0.96332, 0,
+							-0.0436727, 0.985822, 0.162012,
+							-0.0840298, 0.985875, 0.144879,
+							-0.118345, 0.985895, 0.118345,
+							-0.144879, 0.985875, 0.0840302,
+							-0.162011, 0.985822, 0.0436728,
+							-0.168031, 0.985782, 0,
+							-0.0385546, 0.988968, 0.143025,
+							-0.0741813, 0.989009, 0.127899,
+							-0.104474, 0.989025, 0.104474,
+							-0.127899, 0.989009, 0.0741816,
+							-0.143025, 0.988968, 0.0385547,
+							-0.14834, 0.988936, 0,
+							-0.0503274, 0.981127, 0.186698,
+							-0.0968359, 0.981197, 0.166959,
+							-0.136382, 0.981224, 0.136382,
+							-0.166958, 0.981197, 0.0968361,
+							-0.186699, 0.981127, 0.0503276,
+							-0.193633, 0.981074, 0,
+							-0.101458, 0.920895, 0.376377,
+							-0.19526, 0.921161, 0.336655,
+							-0.275023, 0.921262, 0.275023,
+							-0.336655, 0.921161, 0.19526,
+							-0.376377, 0.920894, 0.101459,
+							-0.390291, 0.920691, 0,
+							-0.260274, -7.99271e-010, 0.965535,
+							-0.501718, -5.72859e-009, 0.865031,
+							-0.707107, -1.58043e-008, 0.707107,
+							-0.865031, -2.65808e-008, 0.501719,
+							-0.965534, -2.69321e-008, 0.260276,
+							-1, 0, 0,
+							-0.258757, 0.963421, -0.0697518,
+							-0.231413, 0.963552, -0.134219,
+							-0.189037, 0.963603, -0.189037,
+							-0.13422, 0.963552, -0.231413,
+							-0.0697518, 0.963421, -0.258756,
+							0, 0.96332, -0.268354,
+							-0.162012, 0.985822, -0.0436727,
+							-0.144879, 0.985875, -0.0840298,
+							-0.118345, 0.985895, -0.118345,
+							-0.0840302, 0.985875, -0.144879,
+							-0.0436727, 0.985822, -0.162011,
+							0, 0.985782, -0.168031,
+							-0.143025, 0.988968, -0.0385546,
+							-0.127899, 0.989009, -0.0741813,
+							-0.104474, 0.989025, -0.104474,
+							-0.0741816, 0.989009, -0.127899,
+							-0.0385547, 0.988968, -0.143025,
+							0, 0.988936, -0.14834,
+							-0.186698, 0.981127, -0.0503273,
+							-0.166959, 0.981197, -0.0968358,
+							-0.136382, 0.981224, -0.136382,
+							-0.0968361, 0.981197, -0.166958,
+							-0.0503276, 0.981127, -0.186699,
+							0, 0.981074, -0.193633,
+							-0.376377, 0.920895, -0.101458,
+							-0.336655, 0.921161, -0.19526,
+							-0.275023, 0.921262, -0.275023,
+							-0.19526, 0.921161, -0.336655,
+							-0.101459, 0.920894, -0.376377,
+							0, 0.920691, -0.390291,
+							-0.965535, 2.6932e-008, -0.260274,
+							-0.865031, 2.65807e-008, -0.501718,
+							-0.707107, 1.58043e-008, -0.707107,
+							-0.501719, 5.72864e-009, -0.865031,
+							-0.260276, 7.99283e-010, -0.965534,
+							0, 0 , -1,
+							0.0697518, 0.963421, -0.258757,
+							0.134219, 0.963552, -0.231413,
+							0.189037, 0.963603, -0.189037,
+							0.231413, 0.963552, -0.13422,
+							0.258756, 0.963421, -0.0697518,
+							0.0436727, 0.985822, -0.162012,
+							0.0840298, 0.985875, -0.144879,
+							0.118345, 0.985895, -0.118345,
+							0.144879, 0.985875, -0.0840302,
+							0.162011, 0.985822, -0.0436727,
+							0.0385546, 0.988968, -0.143025,
+							0.0741813, 0.989009, -0.127899,
+							0.104474, 0.989025, -0.104474,
+							0.127899, 0.989009, -0.0741816,
+							0.143025, 0.988968, -0.0385547,
+							0.0503274, 0.981127, -0.186698,
+							0.0968359, 0.981197, -0.166959,
+							0.136382, 0.981224, -0.136382,
+							0.166958, 0.981197, -0.0968361,
+							0.186699, 0.981127, -0.0503276,
+							0.101458, 0.920895, -0.376377,
+							0.19526, 0.921161, -0.336655,
+							0.275023, 0.921262, -0.275023,
+							0.336655, 0.921161, -0.19526,
+							0.376377, 0.920894, -0.101459,
+							0.260274, 7.99271e-010, -0.965535,
+							0.501718, 5.72859e-009, -0.865031,
+							0.707107, 1.58043e-008, -0.707107,
+							0.865031, 2.65807e-008, -0.501719,
+							0.965534, 2.6932e-008, -0.260276,
+							0.0226746, -0.999743, -1.91575e-007,
+							0.00017586 , -1, -1.78936e-007,
+							0.0218614, -0.999744, -0.00589325,
+							0.0195486, -0.999745, -0.0113383,
+							0.0159681, -0.999745, -0.0159682,
+							0.0113382, -0.999745, -0.0195487,
+							0.0058931, -0.999744, -0.0218616,
+							0, -0.999743, -0.0226747,
+							0.0623783, -0.998053, -2.05165e-007,
+							0.0601415, -0.998058, -0.0162122,
+							0.0537792, -0.998066, -0.0311921,
+							0.0439291, -0.998068, -0.0439292,
+							0.031192, -0.998066, -0.0537793,
+							0.0162121, -0.998058, -0.0601416,
+							0, -0.998053, -0.0623784,
+							0.141421, -0.98995, -2.16354e-007,
+							0.136353, -0.989978, -0.0367563,
+							0.121933, -0.990016, -0.0707209,
+							0.0996006, -0.99003, -0.0996008,
+							0.070721, -0.990016, -0.121933,
+							0.0367563, -0.989978, -0.136353,
+							0, -0.98995, -0.141421,
+							0.328521, -0.944497, -2.21665e-007,
+							0.316788, -0.944644, -0.0853952,
+							0.283332, -0.944838, -0.164332,
+							0.231454, -0.944912, -0.231454,
+							0.164333, -0.944838, -0.283331,
+							0.0853954, -0.944644, -0.316788,
+							0, -0.944497, -0.328521,
+							0.770022, -0.638017, -1.57624e-007,
+							0.743044, -0.638566, -0.200299,
+							0.665183, -0.639286, -0.385806,
+							0.543581, -0.639561, -0.543581,
+							0.385806, -0.639286, -0.665182,
+							0.2003, -0.638566, -0.743044,
+							0, -0.638017, -0.770022,
+							0.965535, 2.69333e-008, -0.260274,
+							0.865031, 2.6582e-008, -0.501718,
+							0.501719, 5.7289e-009, -0.865031,
+							0.260276, 7.9932e-010, -0.965534,
+							0, -0.999743, -0.0226747,
+							-0.00589307, -0.999744, -0.0218616,
+							-0.0113382, -0.999745, -0.0195487,
+							-0.015968, -0.999745, -0.0159682,
+							-0.0195486, -0.999745, -0.0113384,
+							-0.0218614, -0.999744, -0.00589328,
+							-0.0226746, -0.999743, -1.91575e-007,
+							0, -0.998053, -0.0623784,
+							-0.016212, -0.998058, -0.0601416,
+							-0.0311919, -0.998066, -0.0537794,
+							-0.0439291, -0.998068, -0.0439292,
+							-0.0537792, -0.998066, -0.0311922,
+							-0.0601415, -0.998058, -0.0162123,
+							-0.0623783, -0.998053, -2.05165e-007,
+							-0.0367561, -0.989978, -0.136353,
+							-0.0707208, -0.990016, -0.121933,
+							-0.0996006, -0.99003, -0.0996008,
+							-0.121932, -0.990016, -0.0707211,
+							-0.136353, -0.989978, -0.0367565,
+							-0.141421, -0.98995, -2.16354e-007,
+							0, -0.944497, -0.32852,
+							-0.0853949, -0.944644, -0.316788,
+							-0.164332, -0.944838, -0.283331,
+							-0.231454, -0.944912, -0.231454,
+							-0.283331, -0.944838, -0.164333,
+							-0.316788, -0.944644, -0.0853956,
+							-0.32852, -0.944497, -2.21665e-007,
+							0, -0.638018, -0.770021,
+							-0.200298, -0.638567, -0.743043,
+							-0.385805, -0.639287, -0.665182,
+							-0.543581, -0.639562, -0.543581,
+							-0.665181, -0.639287, -0.385806,
+							-0.743043, -0.638567, -0.2003,
+							-0.770021, -0.638018, -1.57625e-007,
+							-0.260274, 7.99307e-010, -0.965535,
+							-0.501718, 5.72886e-009, -0.865031,
+							-0.865031, 2.65819e-008, -0.501719,
+							-0.965534, 2.69333e-008, -0.260276,
+							-0.0226746, -0.999743, -1.91442e-007,
+							-0.0218614, -0.999744, 0.00589289,
+							-0.0195486, -0.999745, 0.011338,
+							-0.0159681, -0.999745, 0.0159679,
+							-0.0113382, -0.999745, 0.0195484,
+							-0.0058931, -0.999744, 0.0218612,
+							0, -0.999743, 0.0226744,
+							-0.0623783, -0.998053, -2.04538e-007,
+							-0.0601415, -0.998058, 0.0162119,
+							-0.0537793, -0.998066, 0.0311918,
+							-0.0439291, -0.998068, 0.0439289,
+							-0.031192, -0.998066, 0.0537791,
+							-0.0162121, -0.998058, 0.0601414,
+							0, -0.998053, 0.0623782,
+							-0.136353, -0.989978, 0.0367559,
+							-0.121932, -0.990016, 0.0707206,
+							-0.0996006, -0.99003, 0.0996005,
+							-0.0707209, -0.990016, 0.121932,
+							-0.0367563, -0.989978, 0.136353,
+							0, -0.98995, 0.141421,
+							-0.328521, -0.944497, -2.1827e-007,
+							-0.316789, -0.944644, 0.0853949,
+							-0.283332, -0.944838, 0.164332,
+							-0.231455, -0.944911, 0.231454,
+							-0.164333, -0.944837, 0.283332,
+							-0.0853956, -0.944644, 0.316789,
+							0, -0.944497, 0.328521,
+							-0.770023, -0.638016, -1.53325e-007,
+							-0.743045, -0.638564, 0.200299,
+							-0.665184, -0.639284, 0.385806,
+							-0.543582, -0.63956, 0.543582,
+							-0.385807, -0.639284, 0.665183,
+							-0.2003, -0.638564, 0.743045,
+							0, -0.638016, 0.770023,
+							-0.965535, -2.69333e-008, 0.260274,
+							-0.865031, -2.6582e-008, 0.501718,
+							-0.707107, -1.58051e-008, 0.707107,
+							-0.501719, -5.7289e-009, 0.865031,
+							-0.260276, -7.9932e-010, 0.965534,
+							0.00589307, -0.999744, 0.0218612,
+							0.0113382, -0.999745, 0.0195484,
+							0.0159681, -0.999745, 0.0159679,
+							0.0195486, -0.999745, 0.011338,
+							0.0218614, -0.999744, 0.00589292,
+							0.0226746, -0.999743, -1.91442e-007,
+							0.016212, -0.998058, 0.0601414,
+							0.0311919, -0.998066, 0.0537791,
+							0.0439291, -0.998068, 0.0439289,
+							0.0537792, -0.998066, 0.0311918,
+							0.0601415, -0.998058, 0.016212,
+							0.0623783, -0.998053, -2.04538e-007,
+							0.0367561, -0.989978, 0.136353,
+							0.0707208, -0.990016, 0.121932,
+							0.0996006, -0.99003, 0.0996005,
+							0.121932, -0.990016, 0.0707208,
+							0.136353, -0.989978, 0.0367561,
+							0.0853951, -0.944644, 0.316789,
+							0.164332, -0.944838, 0.283332,
+							0.231455, -0.944911, 0.231454,
+							0.283332, -0.944837, 0.164333,
+							0.316789, -0.944644, 0.0853954,
+							0.328521, -0.944497, -2.1827e-007,
+							0.200299, -0.638564, 0.743045,
+							0.385806, -0.639284, 0.665184,
+							0.543582, -0.63956, 0.543582,
+							0.665183, -0.639284, 0.385807,
+							0.743045, -0.638565, 0.2003,
+							0.770023, -0.638016, -1.53325e-007,
+							0.260274, -7.99307e-010, 0.965535,
+							0.501718, -5.72886e-009, 0.865031,
+							0.707107, -1.58051e-008, 0.707107,
+							0.865031, -2.65819e-008, 0.501719,
+							0.965534, -2.69333e-008, 0.260276,
+							0.000169553 , -1, 4.55269e-005,
+							0.000151615 , -1, 8.7758e-005,
+							0.000123845 , -1, 0.000123666,
+							8.79365e-005 , -1, 0.000151436,
+							4.57054e-005 , -1, 0.000169374,
+							0 , -1, 0.000175681,
+							-4.57057e-005 , -1, 0.000169374,
+							-8.79367e-005 , -1, 0.000151436,
+							-0.000123845 , -1, 0.000123666,
+							-0.000151615 , -1, 8.77577e-005,
+							-0.000169553 , -1, 4.55266e-005,
+							-0.00017586 , -1, -1.78936e-007,
+							-0.141421, -0.98995, -2.18023e-007,
+							0 , -1, -0.000176026,
+							-4.57022e-005 , -1, -0.000169719,
+							-8.79303e-005 , -1, -0.000151783,
+							-0.000123836 , -1, -0.000124015,
+							-0.000151604 , -1, -8.81092e-005,
+							-0.00016954 , -1, -4.58813e-005,
+							-0.000175847 , -1, -1.78936e-007,
+							0.141421, -0.98995, -2.18023e-007,
+							0.000175847 , -1, -1.78936e-007,
+							0.000169541 , -1, -4.58811e-005,
+							0.000151604 , -1, -8.81091e-005,
+							0.000123836 , -1, -0.000124015,
+							8.79306e-005 , -1, -0.000151783,
+							4.57025e-005 , -1, -0.000169719,
+							0.423155, 0.801174, 0.423155,
+							0.300386, 0.800964, 0.517905,
+							0.15602, 0.800417, 0.578784,
+							0, 0.8, 0.6,
+							0.000884181, 0.999999, 0.000884182,
+							0.0006461, 0.999999, 0.00107175,
+							0.000305924, 0.999999, 0.00121748,
+							0, 0.999999, 0.001257,
+							0.00125688, 0.999999, 0,
+							0.00121716, 0.999999, -0.000305839,
+							0.00107193, 0.999999, -0.000646202,
+							0.00088386, 0.999999, -0.00088386,
+							0.000626479, 0.999999, -0.00108364,
+							0.000335298, 0.999999, -0.00120914,
+							0, 0.999999, -0.00125688,
+							-0.000305839, 0.999999, -0.00121716,
+							-0.000646202, 0.999999, -0.00107193,
+							-0.00088386, 0.999999, -0.00088386,
+							-0.00108364, 0.999999, -0.000626479,
+							-0.00120914, 0.999999, -0.000335298,
+							-0.00125688, 0.999999, 0,
+							0.517904, 0.800965, -0.300385,
+							0.300384, 0.800965, -0.517904,
+							0.15602, 0.800418, -0.578782,
+							0, 0.800001, -0.599999,
+							-0.15602, 0.800418, -0.578783,
+							-0.300385, 0.800965, -0.517903,
+							-0.517904, 0.800965, -0.300384,
+							-0.15602, 0.800417, 0.578783,
+							-0.300384, 0.800964, 0.517905,
+							-0.423155, 0.801174, 0.423155,
+							0, 0.999999, 0.00125701,
+							-0.000335262, 0.999999, 0.00120901,
+							-0.000626413, 0.999999, 0.00108353,
+							-0.00088419, 0.999999, 0.00088419,
+							-0.00107176, 0.999999, 0.000646106,
+							-0.00121749, 0.999999, 0.000305927,
+							-0.00125701, 0.999999, 0,
+							0.366221, -0.855433, -0.36622,
+							-0.497164, 0.711096, -0.497162,
+							-0.6, 0.8, 0,
+							-0.267367, 0.443287, 0.855577,
+							-0.0149983, 0.999888, 0,
+							-1, 0, 0,
+							-0.811257, -0.584689, -4.21204e-009,
+							0.811257, -0.584689, -4.21204e-009,
+							-0.6981, -0.716, -1.86057e-008,
+							0.6981, -0.716, -1.86057e-008,
+							-0.636383, -0.771373, -5.10224e-008,
+							0.636383, -0.771373, -5.10224e-008,
+							-0.675056, -0.737767, -1.01053e-007,
+							0.675056, -0.737767, -1.01053e-007,
+							0.965535, -2.6933e-008, 0.260274,
+							0.902861, 0.429933, 0,
+							0.637936, 0.431366, -0.637936,
+							0, 0.429933, -0.902861,
+							-0.637936, 0.431366, -0.637936,
+							-0.902861, 0.429933, 0,
+							0, 0.429933, 0.902861,
+							-0.637936, 0.431366, 0.637936,
+							-0.556737, 0.830689, 0,
+							0.637936, 0.431366, 0.637936,
+							0, -0.156768, -0.987635,
+							-0.148341, 0.988936, 0,
+							0.148341, 0.988936, 0};
+
+int  teapot_indices[] = {	
+							1122, 1243, 1272, 1242, 1273, 1241, 1274, 1240, 
+						1275, 1239, 1276, 1238, 1277, 1205, 1278, 1204, 
+						1279, 1203, 1280, 1202, 1281, 1201, 1282, 1200, 
+						1283, 1199, -1, 1243, 1249, 1242, 1248, 1241, 1247, 
+						1240, 1246, 1239, 1245, 1238, 1244, 1205, 1212, 
+						1204, 1211, 1203, 1210, 1202, 1209, 1201, 1208, 
+						1200, 1207, 1199, 1206, -1, 1249, 1136, 1248, 1254, 
+						1247, 1253, 1246, 1252, 1245, 1251, 1244, 1250, 
+						1212, 1218, 1211, 1217, 1210, 1216, 1209, 1215, 
+						1208, 1214, 1207, 1213, 1206, 1180, -1, 1136, 1260, 
+						1254, 1259, 1253, 1258, 1252, 1257, 1251, 1256, 
+						1250, 1255, 1218, 1225, 1217, 1224, 1216, 1223, 
+						1215, 1222, 1214, 1221, 1213, 1220, 1180, 1219, 
+						-1, 1260, 1266, 1259, 1265, 1258, 1264, 1257, 1263, 
+						1256, 1262, 1255, 1261, 1225, 1232, 1224, 1231, 
+						1223, 1230, 1222, 1229, 1221, 1228, 1220, 1227, 
+						1219, 1226, -1, 1266, 384, 1265, 1271, 1264, 1270, 
+						1263, 1269, 1262, 1268, 1261, 1267, 1232, 390, 
+						1231, 1237, 1230, 1236, 1229, 1235, 1228, 1234, 
+						1227, 1233, 1226, 426, -1, 462, 1188, 1195, 1189, 
+						1196, 1190, 459, 1191, 1197, 1192, 1198, 1193, 
+						426, 1194, -1, 1188, 1181, 1189, 1182, 1190, 1183, 
+						1191, 1184, 1192, 1185, 1193, 1186, 1194, 1187, 
+						-1, 1181, 1142, 1182, 1175, 1183, 1176, 1184, 1177, 
+						1185, 1178, 1186, 1179, 1187, 1284, -1, 1142, 1168, 
+						1175, 1169, 1176, 1170, 1177, 1171, 1178, 1172, 
+						1179, 1173, 1284, 1174, -1, 1168, 1161, 1169, 1162, 
+						1170, 1163, 1171, 1164, 1172, 1165, 1173, 1166, 
+						1174, 1167, -1, 1161, 1285, 1162, 1286, 1163, 1287, 
+						1164, 1288, 1165, 1289, 1166, 1290, 1167, 1291, 
+						-1, 384, 1150, 1157, 1151, 1158, 1152, 490, 1153, 
+						1159, 1154, 1160, 1155, 462, 1156, -1, 1150, 1143, 
+						1151, 1144, 1152, 1145, 1153, 1146, 1154, 1147, 
+						1155, 1148, 1156, 1149, -1, 1143, 1292, 1144, 1137, 
+						1145, 1138, 1146, 1139, 1147, 1140, 1148, 1141, 
+						1149, 1142, -1, 1292, 1129, 1137, 1130, 1138, 1131, 
+						1139, 1132, 1140, 1133, 1141, 1134, 1142, 1135, 
+						-1, 1129, 1121, 1130, 1123, 1131, 1124, 1132, 1125, 
+						1133, 1126, 1134, 1127, 1135, 1128, -1, 1121, 1293, 
+						1123, 1294, 1124, 1295, 1125, 1296, 1126, 1297, 
+						1127, 1298, 1128, 1285, -1, 902, 1024, 901, 1023, 
+						900, 1022, 899, 1021, 898, 1020, 897, 1019, 
+						862, 983, 861, 982, 860, 981, 859, 980, 
+						858, 979, 857, 978, 856, 977, -1, 856, 849, 
+						857, 850, 858, 851, 1299, 852, 1300, 853, 
+						1301, 854, 1302, 855, -1, 849, 842, 850, 843, 
+						851, 844, 852, 845, 853, 846, 854, 847, 
+						855, 848, -1, 842, 835, 843, 836, 844, 837, 
+						845, 838, 846, 839, 847, 840, 848, 841, 
+						-1, 835, 828, 836, 829, 837, 830, 838, 831, 
+						839, 832, 840, 833, 841, 834, -1, 828, 818, 
+						829, 820, 830, 822, 831, 824, 832, 825, 
+						833, 826, 834, 827, -1, 818, 819, 820, 821, 
+						822, 823, 824, 1303, 825, 1304, 826, 1305, 
+						827, 1306, -1, 1307, 948, 1308, 947, 1309, 946, 
+						1310, 945, 1311, 944, 1312, 943, 1313, 909, 
+						1314, 908, 1315, 907, 1316, 906, 1317, 905, 
+						1318, 904, 1319, 903, -1, 948, 954, 947, 953, 
+						946, 952, 945, 951, 944, 950, 943, 949, 
+						909, 916, 908, 915, 907, 914, 906, 913, 
+						905, 912, 904, 911, 903, 910, -1, 954, 835, 
+						953, 959, 952, 958, 951, 957, 950, 956, 
+						949, 955, 916, 922, 915, 921, 914, 920, 
+						913, 919, 912, 918, 911, 917, 910, 882, 
+						-1, 835, 965, 959, 964, 958, 963, 957, 962, 
+						956, 961, 955, 960, 922, 929, 921, 928, 
+						920, 927, 919, 926, 918, 925, 917, 924, 
+						882, 923, -1, 965, 971, 964, 970, 963, 969, 
+						962, 968, 961, 967, 960, 966, 929, 936, 
+						928, 935, 927, 934, 926, 933, 925, 932, 
+						924, 931, 923, 930, -1, 971, 856, 970, 976, 
+						969, 975, 968, 974, 967, 973, 966, 972, 
+						936, 942, 935, 941, 934, 940, 933, 939, 
+						932, 938, 931, 937, 930, 902, -1, 856, 977, 
+						976, 1095, 1320, 1094, 974, 1093, 1321, 1092, 
+						1322, 1091, 1323, 1060, 1324, 1059, 1325, 1058, 
+						939, 1057, 1326, 1056, 937, 1055, 902, 1024, 
+						-1, 1302, 890, 1327, 891, 1328, 892, 1329, 893, 
+						900, 894, 901, 895, 902, 896, -1, 890, 883, 
+						891, 884, 892, 885, 893, 886, 894, 887, 
+						895, 888, 896, 889, -1, 883, 841, 884, 877, 
+						885, 878, 886, 879, 887, 880, 888, 881, 
+						889, 882, -1, 841, 870, 877, 871, 878, 872, 
+						879, 873, 880, 874, 881, 875, 882, 876, 
+						-1, 870, 863, 871, 864, 872, 865, 873, 866, 
+						874, 867, 875, 868, 876, 869, -1, 863, 1330, 
+						864, 1331, 865, 1332, 866, 1333, 867, 1334, 
+						868, 1335, 869, 1336, -1, 787, 780, 813, 808, 
+						814, 809, 815, 810, 816, 811, 817, 812, 
+						781, 774, 782, 775, 783, 776, 784, 777, 
+						785, 778, 786, 779, 787, 780, -1, 774, 767, 
+						775, 768, 776, 769, 777, 770, 778, 771, 
+						779, 772, 780, 773, -1, 767, 760, 768, 761, 
+						769, 762, 770, 763, 771, 764, 772, 765, 
+						773, 766, 803, 798, 804, 799, 805, 800, 
+						806, 801, 807, 802, 767, 760, -1, 767, 774, 
+						807, 812, 806, 811, 805, 810, 804, 809, 
+						803, 808, 773, 780, -1, 760, 753, 761, 754, 
+						762, 755, 763, 756, 764, 757, 765, 758, 
+						766, 759, 798, 793, 799, 794, 800, 795, 
+						801, 796, 802, 797, 760, 753, -1, 759, 752, 
+						793, 788, 794, 789, 795, 790, 796, 791, 
+						797, 792, 753, 746, -1, 752, 703, 788, 741, 
+						789, 742, 790, 743, 791, 744, 792, 745, 
+						746, 697, 747, 698, 748, 699, 749, 700, 
+						750, 701, 751, 702, 752, 703, -1, 752, 759, 
+						751, 758, 750, 757, 749, 756, 748, 755, 
+						747, 754, 746, 753, -1, 703, 734, 1337, 735, 
+						742, 736, 743, 737, 744, 738, 1338, 739, 
+						1339, 740, -1, 734, 727, 735, 728, 736, 729, 
+						737, 730, 738, 731, 739, 732, 740, 733, 
+						-1, 727, 682, 728, 722, 729, 723, 730, 724, 
+						731, 725, 732, 726, 733, 676, -1, 682, 716, 
+						722, 717, 723, 718, 724, 719, 725, 720, 
+						726, 721, 676, 669, -1, 716, 704, 717, 705, 
+						718, 707, 719, 709, 720, 711, 721, 713, 
+						669, 715, -1, 704, 668, 705, 706, 707, 708, 
+						709, 710, 711, 712, 713, 714, 715, 656, 
+						-1, 1339, 690, 698, 691, 1340, 692, 700, 693, 
+						701, 694, 702, 695, 703, 696, -1, 690, 683, 
+						691, 684, 692, 685, 693, 686, 694, 687, 
+						695, 688, 696, 689, -1, 683, 676, 684, 677, 
+						685, 678, 686, 679, 687, 680, 688, 681, 
+						689, 682, -1, 676, 669, 677, 670, 678, 671, 
+						679, 672, 680, 673, 681, 674, 682, 675, 
+						-1, 669, 655, 670, 657, 671, 659, 672, 661, 
+						673, 663, 674, 665, 675, 667, -1, 655, 656, 
+						657, 658, 659, 660, 661, 662, 663, 664, 
+						665, 666, 667, 668, -1, 624, 618, 650, 645, 
+						651, 646, 652, 647, 653, 648, 654, 649, 
+						266, 612, -1, 266, 612, 619, 613, 620, 614, 
+						621, 615, 622, 616, 623, 617, 624, 618, 
+						-1, 612, 605, 613, 606, 614, 607, 615, 608, 
+						616, 609, 617, 610, 618, 611, 645, 640, 
+						646, 641, 647, 642, 648, 643, 649, 644, 
+						612, 605, -1, 605, 598, 606, 599, 607, 600, 
+						608, 601, 609, 602, 610, 603, 611, 604, 
+						640, 635, 641, 636, 642, 637, 643, 638, 
+						644, 639, 605, 598, -1, 604, 597, 635, 630, 
+						636, 631, 637, 632, 638, 633, 639, 634, 
+						598, 591, -1, 597, 590, 630, 625, 631, 626, 
+						632, 627, 633, 628, 634, 629, 591, 584, 
+						-1, 590, 541, 625, 579, 626, 580, 627, 581, 
+						628, 582, 629, 583, 584, 535, 585, 536, 
+						586, 537, 587, 538, 588, 539, 589, 540, 
+						590, 541, -1, 590, 597, 589, 596, 588, 595, 
+						587, 594, 586, 593, 585, 592, 584, 591, 
+						-1, 597, 604, 596, 603, 595, 602, 594, 601, 
+						593, 600, 592, 599, 591, 598, -1, 541, 572, 
+						579, 573, 580, 574, 581, 575, 582, 576, 
+						583, 577, 535, 578, -1, 572, 565, 573, 566, 
+						574, 567, 575, 568, 576, 569, 577, 570, 
+						578, 571, -1, 565, 520, 566, 560, 567, 561, 
+						568, 562, 569, 563, 570, 564, 571, 514, 
+						-1, 520, 553, 560, 554, 561, 555, 562, 556, 
+						563, 557, 564, 558, 514, 559, -1, 553, 505, 
+						554, 542, 555, 544, 556, 546, 557, 548, 
+						558, 550, 559, 552, -1, 505, 506, 542, 543, 
+						544, 545, 546, 547, 548, 549, 550, 551, 
+						552, 494, -1, 535, 528, 536, 529, 537, 530, 
+						538, 531, 539, 532, 540, 533, 541, 534, 
+						-1, 528, 521, 529, 522, 530, 523, 531, 524, 
+						532, 525, 533, 526, 534, 527, -1, 521, 514, 
+						522, 515, 523, 516, 524, 517, 525, 518, 
+						526, 519, 527, 520, -1, 514, 507, 515, 508, 
+						516, 509, 517, 510, 518, 511, 519, 512, 
+						520, 513, -1, 507, 493, 508, 495, 509, 497, 
+						510, 499, 511, 501, 512, 503, 513, 1341, 
+						-1, 493, 494, 495, 496, 497, 498, 499, 500, 
+						501, 502, 503, 504, 1341, 506, -1, 216, 349, 
+						348, 467, 347, 466, 346, 465, 345, 464, 
+						344, 463, 310, 432, 309, 431, 308, 430, 
+						307, 429, 306, 428, 305, 427, 1342, 396, 
+						-1, 349, 356, 467, 472, 466, 471, 465, 470, 
+						464, 469, 463, 468, 432, 438, 431, 437, 
+						430, 436, 429, 435, 428, 434, 427, 433, 
+						396, 402, -1, 356, 363, 472, 477, 471, 476, 
+						470, 475, 469, 474, 468, 473, 438, 444, 
+						437, 443, 436, 442, 435, 441, 434, 440, 
+						433, 439, 402, 408, -1, 363, 370, 477, 482, 
+						476, 481, 475, 480, 474, 479, 473, 478, 
+						444, 450, 443, 449, 442, 448, 441, 447, 
+						440, 446, 439, 445, 408, 414, -1, 370, 377, 
+						482, 487, 481, 486, 480, 485, 479, 484, 
+						478, 483, 450, 456, 449, 455, 448, 454, 
+						447, 453, 446, 452, 445, 451, 414, 420, 
+						-1, 377, 384, 487, 492, 486, 491, 485, 490, 
+						484, 489, 483, 488, 456, 462, 455, 461, 
+						454, 460, 453, 459, 452, 458, 451, 457, 
+						420, 426, -1, 1342, 396, 265, 395, 264, 394, 
+						263, 393, 262, 392, 261, 391, 222, 355, 
+						221, 354, 220, 353, 219, 352, 218, 351, 
+						217, 350, 216, 349, -1, 396, 1343, 395, 401, 
+						394, 400, 393, 399, 392, 398, 391, 397, 
+						355, 362, 354, 361, 353, 360, 352, 359, 
+						351, 358, 350, 357, 349, 1344, -1, 1343, 1345, 
+						401, 407, 400, 406, 399, 405, 398, 404, 
+						397, 403, 362, 369, 361, 368, 360, 367, 
+						359, 366, 358, 365, 357, 364, 1344, 1346, 
+						-1, 1345, 1347, 407, 413, 406, 412, 405, 411, 
+						404, 410, 403, 409, 369, 376, 368, 375, 
+						367, 374, 366, 373, 365, 372, 364, 371, 
+						1346, 1348, -1, 1347, 1349, 413, 419, 412, 418, 
+						411, 417, 410, 416, 409, 415, 376, 383, 
+						375, 382, 374, 381, 373, 380, 372, 379, 
+						371, 378, 1348, 1350, -1, 1349, 426, 419, 425, 
+						418, 424, 417, 423, 416, 422, 415, 421, 
+						383, 390, 382, 389, 381, 388, 380, 387, 
+						379, 386, 378, 385, 1350, 384, -1, 42, 320, 
+						319, 318, 317, 316, 174, 315, 314, 313, 
+						312, 311, 137, 277, 276, 275, 274, 273, 
+						134, 272, 271, 270, 269, 268, 92, 267, 
+						-1, 320, 326, 318, 325, 316, 324, 315, 323, 
+						313, 322, 311, 321, 277, 284, 275, 283, 
+						273, 282, 272, 281, 270, 280, 268, 279, 
+						267, 278, -1, 326, 195, 325, 331, 324, 330, 
+						323, 329, 322, 328, 321, 327, 284, 290, 
+						283, 289, 282, 288, 281, 287, 280, 286, 
+						279, 285, 278, 246, -1, 195, 337, 331, 336, 
+						330, 335, 329, 334, 328, 333, 327, 332, 
+						290, 297, 289, 296, 288, 295, 287, 294, 
+						286, 293, 285, 292, 246, 291, -1, 337, 343, 
+						336, 342, 335, 341, 334, 340, 333, 339, 
+						332, 338, 297, 304, 296, 303, 295, 302, 
+						294, 301, 293, 300, 292, 299, 291, 298, 
+						-1, 343, 216, 342, 348, 341, 347, 340, 346, 
+						339, 345, 338, 344, 304, 310, 303, 309, 
+						302, 308, 301, 307, 300, 306, 299, 305, 
+						298, 1342, -1, 222, 254, 261, 255, 262, 256, 
+						263, 257, 264, 258, 265, 259, 1342, 260, 
+						-1, 254, 247, 255, 248, 256, 249, 257, 250, 
+						258, 251, 259, 252, 260, 253, -1, 247, 201, 
+						248, 241, 249, 242, 250, 243, 251, 244, 
+						252, 245, 253, 246, -1, 201, 234, 241, 235, 
+						242, 236, 243, 237, 244, 238, 245, 239, 
+						246, 240, -1, 234, 223, 235, 224, 236, 226, 
+						237, 228, 238, 229, 239, 231, 240, 233, 
+						-1, 223, 48, 224, 225, 226, 227, 228, 89, 
+						229, 230, 231, 232, 233, 92, -1, 216, 209, 
+						1351, 210, 218, 211, 219, 212, 220, 213, 
+						221, 214, 222, 215, -1, 209, 202, 210, 203, 
+						211, 204, 212, 205, 213, 206, 214, 207, 
+						215, 208, -1, 202, 195, 203, 196, 204, 197, 
+						205, 198, 206, 199, 207, 200, 208, 201, 
+						-1, 195, 188, 196, 189, 197, 190, 198, 191, 
+						199, 192, 200, 193, 201, 194, -1, 188, 177, 
+						189, 178, 190, 180, 191, 182, 192, 183, 
+						193, 185, 194, 187, -1, 177, 42, 178, 179, 
+						180, 181, 182, 45, 183, 184, 185, 186, 
+						187, 48, -1, 1, 148, 147, 146, 145, 144, 
+						143, 142, 141, 140, 139, 138, 105, 104, 
+						103, 102, 101, 100, 99, 98, 97, 96, 
+						95, 94, 60, 93, -1, 148, 154, 146, 153, 
+						144, 152, 142, 151, 140, 150, 138, 149, 
+						104, 112, 102, 111, 100, 110, 98, 109, 
+						96, 108, 94, 107, 93, 106, -1, 154, 21, 
+						153, 159, 152, 158, 151, 157, 150, 156, 
+						149, 155, 112, 118, 111, 117, 110, 116, 
+						109, 115, 108, 114, 107, 113, 106, 72, 
+						-1, 21, 165, 159, 164, 158, 163, 157, 162, 
+						156, 161, 155, 160, 118, 124, 117, 123, 
+						116, 122, 115, 121, 114, 120, 113, 119, 
+						72, 79, -1, 165, 171, 164, 170, 163, 169, 
+						162, 168, 161, 167, 160, 166, 124, 131, 
+						123, 130, 122, 129, 121, 128, 120, 127, 
+						119, 126, 79, 125, -1, 171, 1352, 170, 176, 
+						169, 175, 168, 1353, 167, 173, 166, 172, 
+						131, 1354, 130, 136, 129, 135, 128, 1355, 
+						127, 133, 126, 132, 125, 1356, -1, 1357, 80, 
+						87, 81, 88, 82, 1358, 83, 90, 84, 
+						91, 85, 1356, 86, -1, 80, 73, 81, 74, 
+						82, 75, 83, 76, 84, 77, 85, 78, 
+						86, 1359, -1, 73, 27, 74, 67, 75, 68, 
+						76, 69, 77, 70, 78, 71, 1359, 72, 
+						-1, 27, 20, 67, 61, 68, 62, 69, 63, 
+						70, 64, 71, 65, 72, 66, -1, 20, 12, 
+						61, 49, 62, 51, 63, 53, 64, 55, 
+						65, 57, 66, 59, -1, 12, 13, 49, 50, 
+						51, 52, 53, 54, 55, 56, 57, 58, 
+						59, 60, -1, 1352, 35, 43, 36, 44, 37, 
+						1360, 38, 46, 39, 47, 40, 1357, 41, 
+						-1, 35, 28, 36, 29, 37, 30, 38, 31, 
+						39, 32, 40, 33, 41, 34, -1, 28, 21, 
+						29, 22, 30, 23, 31, 24, 32, 25, 
+						33, 26, 34, 27, -1, 21, 14, 22, 15, 
+						23, 16, 24, 17, 25, 18, 26, 19, 
+						27, 20, -1, 14, 0, 15, 2, 16, 4, 
+						17, 6, 18, 8, 19, 10, 20, 1361, 
+						-1, 0, 1, 2, 3, 4, 5, 6, 7, 
+						8, 9, 10, 11, 1361, 13, -1, 1024, 1055, 
+						1061, 1062, 1068, 1069, 1075, 1076, 1082, 1083, 
+						1089, 1090, -1, 1089, 1088, 1082, 1081, 1075, 1074, 
+						1068, 1067, 1061, 1030, 1024, 1023, -1, 1030, 1067, 
+						1036, 1073, 1042, 1079, 1048, 1085, 1054, -1, 1085, 
+						1079, 1086, 1080, 1087, 1081, 1088, -1, 1081, 1080, 
+						1074, 1073, 1067, -1, 1080, 1079, 1073, -1, 1055, 1056, 
+						1062, 1063, 1069, 1070, 1076, 1077, 1083, 1084, 
+						1090, 1116, -1, 1056, 1057, 1063, 1064, 1070, 1071, 
+						1077, 1078, 1084, 1111, 1116, 1117, -1, 1057, 1058, 
+						1064, 1065, 1071, 1072, 1078, 1106, 1111, 1112, 
+						1117, 1118, -1, 1058, 1059, 1065, 1066, 1072, 1101, 
+						1106, 1107, 1112, 1113, 1118, 1119, -1, 1059, 1060, 
+						1066, 1096, 1101, 1102, 1107, 1108, 1113, 1114, 
+						1119, 1120, -1, 1060, 1091, 1096, 1097, 1102, 1103, 
+						1108, 1109, 1114, 1115, 1120, 1012, -1, 1091, 1092, 
+						1097, 1098, 1103, 1104, 1109, 1110, 1115, 1005, 
+						1012, 1013, -1, 1092, 1093, 1098, 1099, 1104, 1105, 
+						1110, 998, 1005, 1006, 1013, 1014, -1, 998, 1105, 
+						991, 1100, 984, 1095, 977, -1, 1095, 1100, 1094, 
+						1099, 1093, -1, 1100, 1105, 1099, -1, 984, 977, 985, 
+						978, 986, 979, 987, 980, 988, 981, 989, 
+						982, 990, 983, 1025, 1019, 1026, 1020, 1027, 
+						1021, 1028, 1022, 1029, 1023, 1030, -1, 1030, 1362, 
+						1029, 1035, 1028, 1034, 1027, 1033, 1026, 1032, 
+						1025, 1031, 990, 997, 989, 996, 988, 995, 
+						987, 994, 986, 993, 985, 992, 984, 1363, 
+						-1, 1362, 1042, 1035, 1041, 1034, 1040, 1033, 1039, 
+						1032, 1038, 1031, 1037, 997, 1004, 996, 1003, 
+						995, 1002, 994, 1001, 993, 1000, 992, 999, 
+						1363, 998, -1, 998, 999, 1006, 1007, 1014, 1015, 
+						-1, 999, 1000, 1007, 1008, 1015, 1016, -1, 1000, 1001, 
+						1008, 1009, 1016, 1017, -1, 1001, 1002, 1009, 1010, 
+						1017, 1018, -1, 1002, 1003, 1010, 1011, 1018, 1049, 
+						-1, 1003, 1004, 1011, 1043, 1049, 1050, -1, 1004, 1037, 
+						1043, 1044, 1050, 1051, -1, 1037, 1038, 1044, 1045, 
+						1051, 1052, -1, 1038, 1039, 1045, 1046, 1052, 1053, 
+						-1, 1039, 1040, 1046, 1047, 1053, 1054, -1, 1054, 1047, 
+						1048, 1041, 1042, -1, 1041, 1047, 1040, -1, 			
+	};
+
+#endif // TEAPOT_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/MathStuff.c
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/MathStuff.c	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/MathStuff.c	(revision 629)
@@ -0,0 +1,1041 @@
+//Copyright and Disclaimer:
+//This code is copyright Vienna University of Technology, 2004.
+
+#include <memory.h>
+#include <math.h>
+#include <float.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <stdio.h>
+#include "MathStuff.h"
+
+#ifndef M_PI
+#define M_PI (double)3.14159265358979323846
+#endif
+
+const double DOUBLE_MAX = DBL_MAX;
+const double PI = M_PI;
+const double PI_2 = M_PI/2;
+const double PI_180 = M_PI/180;
+const Vector3 ZERO = {0.0, 0.0, 0.0};
+const Vector3 UNIT_X = {1.0, 0.0, 0.0};
+const Vector3 UNIT_Y = {0.0, 1.0, 0.0};
+const Vector3 UNIT_Z = {0.0, 0.0, 1.0};
+
+const Matrix4x4 IDENTITY = {1.0, 0.0, 0.0, 0.0, 
+							0.0, 1.0, 0.0, 0.0,
+							0.0, 0.0, 1.0, 0.0,
+							0.0, 0.0, 0.0, 1.0};
+
+double maximum(const double a, const double b) {
+	return ( (a > b)? (a):(b) );
+
+}
+
+void clamp(double* value, const double min, const double max) {
+	if( (*value) > max) {
+		(*value) = max;
+	}
+	else {
+		if( (*value) < min) {
+			(*value) = min;
+		}
+	}
+}
+
+double absDouble(const double a) {
+	return ( (a < 0.0)? (-a):(a) );
+}
+
+double signDouble(const double a) {
+	return ( (a < 0.0)? (-1.0f): ( (a == 0.0)? (0.0f):(1.0f) ) );
+}
+
+double coTan(const double vIn) {
+	return (double)-tan(vIn+PI_2);
+}
+
+double relativeEpsilon(const double a, const double epsilon) {
+	double relEpsilon = maximum(absDouble(a*epsilon),epsilon);
+	return relEpsilon;
+}
+
+int alike(const double a, const double b, const double epsilon) {
+	if(a == b) {
+		return 1;
+	}
+	{
+		double relEps = relativeEpsilon(a,epsilon);
+		return (a-relEps <= b) && (b <= a+relEps);
+	}
+}
+
+
+
+int alikeVector3(const Vector3 a, const Vector3 b, const double epsilon) {
+	return 
+		alike(a[0],b[0],epsilon) &&
+		alike(a[1],b[1],epsilon) &&
+		alike(a[2],b[2],epsilon);
+}
+
+void linCombVector3(Vector3 result, const Vector3 pos, const Vector3 dir, const double t) {
+	int i;
+	for(i = 0; i < 3; i++) {
+		result[i] = pos[i]+t*dir[i];
+	}
+}
+
+double squaredLength(const Vector3 vec) {
+	int i;
+	double tmp = 0.0;
+	for(i = 0; i < 3; i++) {
+		tmp += vec[i]*vec[i];
+	}
+	return tmp;
+}
+
+void normalize(Vector3 vec) {
+	int i;
+	const double len = (double)(1.0/sqrt(squaredLength(vec)));
+	for(i = 0; i < 3; i++) {
+		vec[i] *= len;
+	}
+}
+
+void copyNormalize(Vector3 vec, const Vector3 input) {
+	copyVector3(vec,input),
+	normalize(vec);
+}
+
+/*	| a1 a2 |
+	| b1 b2 | calculate the determinent of a 2x2 matrix*/
+double det2x2(const double a1, const double a2,
+			const double b1, const double b2) {
+	return a1*b2 - b1*a2;
+}
+
+/*	| a1 a2 a3 |
+	| b1 b2 b3 |
+	| c1 c2 c3 | calculate the determinent of a 3x3 matrix*/
+double det3x3(const double a1, const double a2, const double a3,
+			  const double b1, const double b2, const double b3,
+			  const double c1, const double c2, const double c3) {
+	return a1*det2x2(b2,b3,c2,c3) - b1*det2x2(a2,a3,c2,c3) +
+			c1*det2x2(a2,a3,b2,b3);
+}
+void cross(Vector3 result, const Vector3 a, const Vector3 b) {
+	result[0] =  det2x2(a[1],b[1],a[2],b[2]);
+	result[1] = -det2x2(a[0],b[0],a[2],b[2]);
+	result[2] =  det2x2(a[0],b[0],a[1],b[1]);
+}
+
+double dot(const Vector3 a, const Vector3 b) {
+	return a[0]*b[0]+a[1]*b[1]+a[2]*b[2];
+}
+
+void look(Matrix4x4 output, const Vector3 pos, const Vector3 dir, const Vector3 up) {
+	Vector3 dirN;
+	Vector3 upN;
+	Vector3 lftN;
+
+	cross(lftN,dir,up);
+	normalize(lftN);
+
+	cross(upN,lftN,dir);
+	normalize(upN);
+	copyNormalize(dirN,dir);
+
+	output[ 0] = lftN[0];
+	output[ 1] = upN[0];
+	output[ 2] = -dirN[0];
+	output[ 3] = 0.0;
+
+	output[ 4] = lftN[1];
+	output[ 5] = upN[1];
+	output[ 6] = -dirN[1];
+	output[ 7] = 0.0;
+
+	output[ 8] = lftN[2];
+	output[ 9] = upN[2];
+	output[10] = -dirN[2];
+	output[11] = 0.0;
+
+	output[12] = -dot(lftN,pos);
+	output[13] = -dot(upN,pos);
+	output[14] = dot(dirN,pos);
+	output[15] = 1.0;
+}
+
+void makeScaleMtx(Matrix4x4 output, const double x, const double y, const double z) {
+	output[ 0] = x;
+	output[ 1] = 0.0;
+	output[ 2] = 0.0;
+	output[ 3] = 0.0;
+
+	output[ 4] = 0.0;
+	output[ 5] = y;
+	output[ 6] = 0.0;
+	output[ 7] = 0.0;
+
+	output[ 8] = 0.0;
+	output[ 9] = 0.0;
+	output[10] = z;
+	output[11] = 0.0;
+
+	output[12] = 0.0;
+	output[13] = 0.0;
+	output[14] = 0.0;
+	output[15] = 1.0;
+}
+
+void makeTranslationMtx(Matrix4x4 output, Vector3 translation) {
+	output[ 0] = 1.0;
+	output[ 1] = 0.0;
+	output[ 2] = 0.0;
+	output[ 3] = 0;//translation[0];
+
+	output[ 4] = 0.0;
+	output[ 5] = 1.0;
+	output[ 6] = 0.0;
+	output[ 7] = 0;//translation[1];
+
+	output[ 8] = 0.0;
+	output[ 9] = 0.0;
+	output[10] = 1.0;
+	output[11] = 0;//translation[2];
+
+	output[12] = translation[0];//0.0;
+	output[13] = translation[1];//0.0;
+	output[14] = translation[2];//0.0;
+	output[15] = 1.0;
+}
+
+void makeRotationZMtx(Matrix4x4 output, const double rad)
+{
+	output[ 0] = cos(rad);
+	output[ 1] = sin(rad);
+	output[ 2] = 0.0;
+	output[ 3] = 0.0;
+
+	output[ 4] = -sin(rad);
+	output[ 5] = cos(rad);
+	output[ 6] = 0.0;
+	output[ 7] = 0.0;
+
+	output[ 8] = 0.0;
+	output[ 9] = 0.0;
+	output[10] = 1.0;
+	output[11] = 0.0;
+
+	output[12] = 0.0;
+	output[13] = 0.0;
+	output[14] = 0.0;
+	output[15] = 1.0;
+}
+
+void makeRotationXMtx(Matrix4x4 output, const double rad)
+{
+	output[ 0] = 1.0;
+	output[ 1] = 0.0;
+	output[ 2] = 0.0;
+	output[ 3] = 0.0;
+
+	output[ 4] = 0.0;
+	output[ 5] = cos(rad);
+	output[ 6] = sin(rad);
+	output[ 7] = 0.0;
+
+	output[ 8] = 0.0;
+	output[ 9] = -sin(rad);
+	output[10] = cos(rad);
+	output[11] = 0.0;
+
+	output[12] = 0.0;
+	output[13] = 0.0;
+	output[14] = 0.0;
+	output[15] = 1.0;
+}
+
+void makeRotationYMtx(Matrix4x4 output, const double rad)
+{
+	output[ 0] = cos(rad);
+	output[ 1] = 0.0;
+	output[ 2] = -sin(rad);
+	output[ 3] = 0.0;
+
+	output[ 4] = 0.0;
+	output[ 5] = 1.0;
+	output[ 6] = 0.0;
+	output[ 7] = 0.0;
+
+	output[ 8] = sin(rad);
+	output[ 9] = 0.0;
+	output[10] = cos(rad);
+	output[11] = 0.0;
+
+	output[12] = 0.0;
+	output[13] = 0.0;
+	output[14] = 0.0;
+	output[15] = 1.0;
+}
+
+void scaleTranslateToFit(Matrix4x4 output, const Vector3 vMin, const Vector3 vMax) {
+	output[ 0] = 2/(vMax[0]-vMin[0]);
+	output[ 4] = 0;
+	output[ 8] = 0;
+	output[12] = -(vMax[0]+vMin[0])/(vMax[0]-vMin[0]);
+
+	output[ 1] = 0;
+	output[ 5] = 2/(vMax[1]-vMin[1]);
+	output[ 9] = 0;
+	output[13] = -(vMax[1]+vMin[1])/(vMax[1]-vMin[1]);
+
+	output[ 2] = 0;
+	output[ 6] = 0;
+	output[10] = 2/(vMax[2]-vMin[2]);
+	output[14] = -(vMax[2]+vMin[2])/(vMax[2]-vMin[2]);
+
+	output[ 3] = 0;
+	output[ 7] = 0;
+	output[11] = 0;
+	output[15] = 1;
+}
+
+void perspectiveRad(Matrix4x4 output, const double vFovy, const double vAspect,
+						  const double vNearDis, const double vFarDis) {
+	const double f = coTan(vFovy/2);
+	const double dif = 1/(vNearDis-vFarDis);
+
+	output[ 0] = f/vAspect;
+	output[ 4] = 0;
+	output[ 8] = 0;
+	output[12] = 0;
+
+	output[ 1] = 0;
+	output[ 5] = f;
+	output[ 9] = 0;
+	output[13] = 0;
+
+	output[ 2] = 0;
+	output[ 6] = 0;
+	output[10] = (vFarDis+vNearDis)*dif;
+	output[14] = 2*vFarDis*vNearDis*dif;
+
+	output[ 3] = 0;
+	output[ 7] = 0;
+	output[11] = -1;
+	output[15] = 0;
+}
+
+void perspectiveDeg(Matrix4x4 output, const double vFovy, const double vAspect,
+					const double vNearDis, const double vFarDis) {
+	perspectiveRad(output,vFovy*PI_180,vAspect,vNearDis,vFarDis);
+}
+
+void invert(Matrix4x4 output, const Matrix4x4 i) {
+	double a11 =  det3x3(i[5],i[6],i[7],i[9],i[10],i[11],i[13],i[14],i[15]);
+	double a21 = -det3x3(i[1],i[2],i[3],i[9],i[10],i[11],i[13],i[14],i[15]);
+	double a31 =  det3x3(i[1],i[2],i[3],i[5],i[6],i[7],i[13],i[14],i[15]);
+	double a41 = -det3x3(i[1],i[2],i[3],i[5],i[6],i[7],i[9],i[10],i[11]);
+
+	double a12 = -det3x3(i[4],i[6],i[7],i[8],i[10],i[11],i[12],i[14],i[15]);
+	double a22 =  det3x3(i[0],i[2],i[3],i[8],i[10],i[11],i[12],i[14],i[15]);
+	double a32 = -det3x3(i[0],i[2],i[3],i[4],i[6],i[7],i[12],i[14],i[15]);
+	double a42 =  det3x3(i[0],i[2],i[3],i[4],i[6],i[7],i[8],i[10],i[11]);
+
+	double a13 =  det3x3(i[4],i[5],i[7],i[8],i[9],i[11],i[12],i[13],i[15]);
+	double a23 = -det3x3(i[0],i[1],i[3],i[8],i[9],i[11],i[12],i[13],i[15]);
+	double a33 =  det3x3(i[0],i[1],i[3],i[4],i[5],i[7],i[12],i[13],i[15]);
+	double a43 = -det3x3(i[0],i[1],i[3],i[4],i[5],i[7],i[8],i[9],i[11]);
+
+	double a14 = -det3x3(i[4],i[5],i[6],i[8],i[9],i[10],i[12],i[13],i[14]);
+	double a24 =  det3x3(i[0],i[1],i[2],i[8],i[9],i[10],i[12],i[13],i[14]);
+	double a34 = -det3x3(i[0],i[1],i[2],i[4],i[5],i[6],i[12],i[13],i[14]);
+	double a44 =  det3x3(i[0],i[1],i[2],i[4],i[5],i[6],i[8],i[9],i[10]);
+
+	double det = (i[0]*a11) + (i[4]*a21) + (i[8]*a31) + (i[12]*a41);
+	double oodet = 1/det;
+
+	output[ 0] = a11*oodet;
+	output[ 1] = a21*oodet;
+	output[ 2] = a31*oodet;
+	output[ 3] = a41*oodet;
+
+	output[ 4] = a12*oodet;
+	output[ 5] = a22*oodet;
+	output[ 6] = a32*oodet;
+	output[ 7] = a42*oodet;
+
+	output[ 8] = a13*oodet;
+	output[ 9] = a23*oodet;
+	output[10] = a33*oodet;
+	output[11] = a43*oodet;
+
+	output[12] = a14*oodet;
+	output[13] = a24*oodet;
+	output[14] = a34*oodet;
+	output[15] = a44*oodet;
+}
+
+void multUnSave(Matrix4x4 output, const Matrix4x4 a, const Matrix4x4 b) {
+	const int SIZE = 4;
+	int iCol;
+	for(iCol = 0; iCol < SIZE; iCol++) {
+		const int cID = iCol*SIZE;
+		int iRow;
+		for(iRow = 0; iRow < SIZE; iRow++) {
+			const int id = iRow+cID;
+			int k;
+			output[id] = a[iRow]*b[cID];
+			for(k = 1; k < SIZE; k++) {
+				output[id] += a[iRow+k*SIZE]*b[k+cID];
+			}
+		}
+	}
+}
+
+void mult(Matrix4x4 output, const Matrix4x4 a, const Matrix4x4 b) {
+	if(a == output) {
+		Matrix4x4 tmpA;
+		copyMatrix(tmpA,a);
+		if(b == output) {
+			multUnSave(output,tmpA,tmpA);
+		}
+		else {
+			multUnSave(output,tmpA,b);
+		}
+	}
+	else {
+		if(b == output) {
+			Matrix4x4 tmpB;
+			copyMatrix(tmpB,b);
+			multUnSave(output,a,tmpB);
+		}
+		else {
+			multUnSave(output,a,b);
+		}
+	}
+}
+
+void mulHomogenPoint(Vector3 output, const Matrix4x4 m, const Vector3 v) {
+	//if v == output -> overwriting problems -> so store in temp
+	double x = m[0]*v[0] + m[4]*v[1] + m[ 8]*v[2] + m[12];
+	double y = m[1]*v[0] + m[5]*v[1] + m[ 9]*v[2] + m[13];
+	double z = m[2]*v[0] + m[6]*v[1] + m[10]*v[2] + m[14];
+	double w = m[3]*v[0] + m[7]*v[1] + m[11]*v[2] + m[15];
+
+	output[0] = x/w;
+	output[1] = y/w;
+	output[2] = z/w;
+}
+
+void appendToCubicHull(Vector3 min, Vector3 max, const Vector3 v) {
+	int j;
+	for(j = 0; j < 3; j++) {
+		if(v[j] < min[j]) {
+			min[j] = v[j];
+		}
+		else if(v[j] > max[j]) {
+			max[j] = v[j];
+		}
+	}
+}
+
+void calcCubicHull(Vector3 min, Vector3 max, const Vector3* ps, const int size) {
+	if(size > 0) {
+		int i;
+		copyVector3(min,ps[0]);
+		copyVector3(max,ps[0]);
+		for(i = 1; i < size; i++) {
+			appendToCubicHull(min,max,ps[i]);
+		}
+	}
+}
+
+void calcViewFrustumWorldCoord(Vector3x8 points, const Matrix4x4 invEyeProjView) {
+	const struct AABox box = {
+		{-1, -1, -1},
+		{1, 1, 1}
+	};
+	int i;
+	calcAABoxPoints(points,box); //calc unit cube corner points
+	for(i = 0; i < 8; i++) {
+		mulHomogenPoint(points[i],invEyeProjView,points[i]); //camera to world frame
+	}
+	//viewFrustumWorldCoord[0] == near-bottom-left
+	//viewFrustumWorldCoord[1] == near-bottom-right
+	//viewFrustumWorldCoord[2] == near-top-right
+	//viewFrustumWorldCoord[3] == near-top-left
+	//viewFrustumWorldCoord[4] == far-bottom-left
+	//viewFrustumWorldCoord[5] == far-bottom-right
+	//viewFrustumWorldCoord[6] == far-top-right
+	//viewFrustumWorldCoord[7] == far-top-left
+}
+
+void calcViewFrustObject(struct Object* obj, const Vector3x8 p) {
+	int i;
+	Vector3* ps;
+	objectSetSize(obj,6);
+	for(i = 0; i < 6; i++) {
+		vecPointSetSize(&obj->poly[i],4);
+	}
+	//near poly ccw
+	ps = obj->poly[0].points;
+	for(i = 0; i < 4; i++) {
+		copyVector3(ps[i],p[i]);
+	}
+	//far poly ccw
+	ps = obj->poly[1].points;
+	for(i = 4; i < 8; i++) {
+		copyVector3(ps[i-4],p[11-i]);
+	}
+	//left poly ccw
+	ps = obj->poly[2].points;
+	copyVector3(ps[0],p[0]);
+	copyVector3(ps[1],p[3]);
+	copyVector3(ps[2],p[7]);
+	copyVector3(ps[3],p[4]);
+	//right poly ccw
+	ps = obj->poly[3].points;
+	copyVector3(ps[0],p[1]);
+	copyVector3(ps[1],p[5]);
+	copyVector3(ps[2],p[6]);
+	copyVector3(ps[3],p[2]);
+	//bottom poly ccw
+	ps = obj->poly[4].points;
+	copyVector3(ps[0],p[4]);
+	copyVector3(ps[1],p[5]);
+	copyVector3(ps[2],p[1]);
+	copyVector3(ps[3],p[0]);
+	//top poly ccw
+	ps = obj->poly[5].points;
+	copyVector3(ps[0],p[6]);
+	copyVector3(ps[1],p[7]);
+	copyVector3(ps[2],p[3]);
+	copyVector3(ps[3],p[2]);
+}
+
+void transformVecPoint(struct VecPoint* poly, const Matrix4x4 xForm) {
+	if(0 != poly) {
+		int i;
+		for(i = 0; i < poly->size; i++) {
+			mulHomogenPoint(poly->points[i],xForm,poly->points[i]);
+		}
+	}
+}
+
+void transformObject(struct Object* obj, const Matrix4x4 xForm) {
+	if(0 != obj) {
+		int i;
+		for(i = 0; i < obj->size; i++) {
+			transformVecPoint( &(obj->poly[i]) ,xForm);
+		}
+	}
+}
+
+void calcObjectCubicHull(Vector3 min, Vector3 max, const struct Object obj) {
+	if(0 < obj.size) {
+		int i;
+		calcCubicHull(min,max,obj.poly[0].points,obj.poly[0].size);
+		for(i = 1; i < obj.size; i++) {
+			struct VecPoint* p = &(obj.poly[i]);
+			int j;
+			for(j = 0; j < p->size; j++) {
+				appendToCubicHull(min,max,p->points[j]);
+			}
+		}
+	}
+}
+
+int findSamePointInVecPoint(const struct VecPoint poly, const Vector3 p) {
+	int i;
+	for(i = 0; i < poly.size; i++) {
+		if(alikeVector3(poly.points[i],p,(double)0.001)) {
+			return i;
+		}
+	}
+	return -1;
+}
+
+int findSamePointInObjectAndSwapWithLast(struct Object *inter, const Vector3 p) {
+	int i;
+	if(0 == inter) {
+		return -1;
+	}
+	if(1 > inter->size) {
+		return -1;
+	}
+	for(i = inter->size; i > 0; i--) {
+		struct VecPoint* poly = &(inter->poly[i-1]);
+		if(2 == poly->size) {
+			const int nr = findSamePointInVecPoint(*poly,p);
+			if(0 <= nr) {
+				//swap with last
+				swapVecPoint(poly, &(inter->poly[inter->size-1]) );
+				return nr;
+			}
+		}
+	}
+	return -1;
+}
+
+void appendIntersectionVecPoint(struct Object* obj, struct Object* inter) {
+	struct VecPoint *polyOut;
+	struct VecPoint *polyIn;
+	int size = obj->size;
+	int i;
+	//you need at least 3 sides for a polygon
+	if(3 > inter->size) {
+		return;
+	}
+	//compact inter: remove poly.size != 2 from end on forward
+	for(i = inter->size; 0 < i; i--) {
+		if(2 == inter->poly[i-1].size) {
+			break;
+		}
+	}
+	objectSetSize(inter,i);
+	//you need at least 3 sides for a polygon
+	if(3 > inter->size) {
+		return;
+	}
+	//make place for one additional polygon in obj
+	objectSetSize(obj,size+1);
+	polyOut = &(obj->poly[size]);
+	//we have line segments in each poly of inter 
+	//take last linesegment as first and second point
+	polyIn = &(inter->poly[inter->size-1]);
+	append2VecPoint(polyOut,polyIn->points[0]);
+	append2VecPoint(polyOut,polyIn->points[1]);
+	//remove last poly from inter, because it is already saved
+	objectSetSize(inter,inter->size-1);
+
+	//iterate over inter until their is no line segment left
+	while(0 < inter->size) {
+		//pointer on last point to compare
+		Vector3 *lastPt = &(polyOut->points[polyOut->size-1]);
+		//find same point in inter to continue polygon
+		const int nr = findSamePointInObjectAndSwapWithLast(inter,*lastPt);
+		if(0 <= nr) {
+			//last line segment
+			polyIn = &(inter->poly[inter->size-1]);
+			//get the other point in this polygon and save into polyOut
+			append2VecPoint(polyOut,polyIn->points[(nr+1)%2]);
+		}
+		//remove last poly from inter, because it is already saved or degenerated
+		objectSetSize(inter,inter->size-1);
+	}
+	//last point can be deleted, because he is the same as the first (closes polygon)
+	vecPointSetSize(polyOut,polyOut->size-1);
+}
+
+double pointPlaneDistance(const struct Plane A, const Vector3 p) {
+	return dot(A.n,p)+(A.d);
+}
+
+int pointBeforePlane(const struct Plane A, const Vector3 p) {
+	return pointPlaneDistance(A,p) > 0.0;
+}
+
+int intersectPlaneEdge(Vector3 output, const struct Plane A, const Vector3 a, const Vector3 b) {
+	Vector3 diff;
+	double t;
+	diffVector3(diff,b,a);
+	t = dot(A.n,diff);
+	if(0.0 == t)
+		return 0;
+	t = (A.d-dot(A.n,a))/t;
+	if(t < 0.0 || 1.0 < t)
+		return 0;
+	linCombVector3(output,a,diff,t);
+	return 1;
+}
+
+void clipVecPointByPlane(const struct VecPoint poly, const struct Plane A, struct VecPoint* polyOut, struct VecPoint* interPts) {
+	int i;
+	int *outside = 0;
+	if(poly.size < 3 || 0 == polyOut) {
+		return;
+	}
+	outside = (int*)realloc(outside,sizeof(int)*poly.size);
+	//for each point
+	for(i = 0; i < poly.size; i++) {
+		outside[i] = pointBeforePlane(A,poly.points[i]);
+	}
+	for(i = 0; i < poly.size; i++) {
+		int idNext = (i+1) % poly.size;
+		//both outside -> save none
+		if(outside[i] && outside[idNext]) {
+			continue;
+		}
+		//outside to inside -> calc intersection save intersection and save i+1
+		if(outside[i]) {
+			Vector3 inter;
+			if(intersectPlaneEdge(inter,A,poly.points[i],poly.points[idNext])) {
+				append2VecPoint(polyOut,inter);
+				if(0 != interPts) {
+					append2VecPoint(interPts,inter);
+				}
+			}
+			append2VecPoint(polyOut,poly.points[idNext]);
+			continue;
+		}
+		//inside to outside -> calc intersection save intersection
+		if(outside[idNext]) {
+			Vector3 inter;
+			if(intersectPlaneEdge(inter,A,poly.points[i],poly.points[idNext])) {
+				append2VecPoint(polyOut,inter);
+				if(0 != interPts) {
+					append2VecPoint(interPts,inter);
+				}
+			}
+			continue;
+		}
+		//both inside -> save point i+1
+		append2VecPoint(polyOut,poly.points[idNext]);
+	}
+	outside = (int*)realloc(outside,0);
+}
+
+void clipObjectByPlane(const struct Object obj, const struct Plane A, struct Object* objOut) {
+	int i;
+	struct Object inter = OBJECT_NULL;
+	struct Object objIn = OBJECT_NULL;
+	if(0 == obj.size || 0 == objOut)
+		return;
+	if(obj.poly == objOut->poly) {
+		//need to copy object if input and output are the same
+		copyObject(&objIn,obj);
+	}
+	else {
+		objIn = obj;
+	}
+	emptyObject(objOut);
+
+	for(i = 0; i < objIn.size; i++)
+	{
+		int size = objOut->size;
+		objectSetSize(objOut,size+1);
+		objectSetSize(&inter,size+1);
+		clipVecPointByPlane(objIn.poly[i],A, &(objOut->poly[size]) , &(inter.poly[size]));
+		//if whole poly was clipped away -> delete empty poly
+		if(0 == objOut->poly[size].size) {
+			objectSetSize(objOut,size);
+			objectSetSize(&inter,size);
+		}
+	}
+	//add a polygon of all intersection points with plane to close the object
+	appendIntersectionVecPoint(objOut,&inter);
+	emptyObject(&inter);
+	emptyObject(&objIn);
+}
+
+
+void clipObjectByAABox(struct Object* obj, const struct AABox box) {
+	struct VecPlane planes = VECPLANE_NULL;
+	int i;
+	if(0 == obj) {
+		return;
+	}
+	
+	calcAABoxPlanes(&planes,box);
+	for(i = 0; i < planes.size; i++) {
+		clipObjectByPlane(*obj,planes.plane[i],obj);
+	}
+
+	emptyVecPlane(&planes);
+}
+
+int clipTest(const double p, const double q, double* u1, double* u2) {
+	// Return value is 'true' if line segment intersects the current test
+	// plane.  Otherwise 'false' is returned in which case the line segment
+	// is entirely clipped.
+	if(0 == u1 || 0 == u2) {
+		return 0;
+	}
+	if(p < 0.0) {
+		double r = q/p;
+		if(r > (*u2)) {
+			return 0;
+		}
+		else {
+			if(r > (*u1)) {
+				(*u1) = r;
+			}
+			return 1;
+		}
+	}
+	else {
+		if(p > 0.0)	{
+			double r = q/p;
+			if(r < (*u1)) {
+				return 0;
+			}
+			else {
+				if(r < (*u2)) {
+					(*u2) = r;
+				}
+				return 1;
+			}
+		}
+		else {
+			return q >= 0.0;
+		}
+	}
+}
+
+int intersectionLineAABox(Vector3 v, const Vector3 p, const Vector3 dir, const struct AABox b) {
+	double t1 = 0.0;
+	double t2 = DOUBLE_MAX;
+	int intersect =
+		clipTest(-dir[2],p[2]-b.min[2],&t1,&t2) && clipTest(dir[2],b.max[2]-p[2],&t1,&t2) &&
+		clipTest(-dir[1],p[1]-b.min[1],&t1,&t2) && clipTest(dir[1],b.max[1]-p[1],&t1,&t2) &&
+		clipTest(-dir[0],p[0]-b.min[0],&t1,&t2) && clipTest(dir[0],b.max[0]-p[0],&t1,&t2);
+	if(!intersect) {
+		return 0;
+	}
+	intersect = 0;
+	if(0 <= t1) {
+		linCombVector3(v,p,dir,t1);
+		intersect = 1;
+	}
+	if(0 <= t2) {
+		linCombVector3(v,p,dir,t2);
+		intersect = 1;
+	}
+	return intersect;
+}
+
+
+void includeObjectLightVolume(struct VecPoint* points, const struct Object obj,
+							  const Vector3 lightDir, const struct AABox sceneAABox) {
+	if(0 != points) {
+		int i, size;
+		Vector3 ld;
+		copyVector3Values(ld,-lightDir[0],-lightDir[1],-lightDir[2]);
+		convObject2VecPoint(points,obj);
+		size = points->size;
+		//for each point add the point on the ray in -lightDir
+		//intersected with the sceneAABox
+		for(i = 0; i < size; i++) {
+			Vector3 pt;
+			if(intersectionLineAABox(pt,points->points[i],ld,sceneAABox) ) {
+				append2VecPoint(points,pt);
+			}
+		}
+	}
+}
+
+void calcFocusedLightVolumePoints(struct VecPoint* points, const Matrix4x4 invEyeProjView,
+								  const Vector3 lightDir,const struct AABox sceneAABox) {
+	Vector3x8 pts;
+	struct Object obj = OBJECT_NULL;
+
+	calcViewFrustumWorldCoord(pts,invEyeProjView);
+	calcViewFrustObject(&obj, pts);
+	clipObjectByAABox(&obj,sceneAABox);
+	includeObjectLightVolume(points,obj,lightDir,sceneAABox);
+	emptyObject(&obj);
+}
+
+void calcViewFrustumPlanes(struct VecPlane* planes, const Matrix4x4 eyeProjView) {
+	if(0 != planes) {
+		int i;
+		
+		planesSetSize(planes, 6);
+	
+		//---- extract the plane equations
+		for (i = 0; i < 4; i++)	{
+			setPlaneCoeff(eyeProjView[i * 4 + 3] - eyeProjView[i * 4 + 0], planes->plane + 0, i);   // right plane
+			setPlaneCoeff(eyeProjView[i * 4 + 3] + eyeProjView[i * 4 + 0], planes->plane + 1, i);	// left plane
+			setPlaneCoeff(eyeProjView[i * 4 + 3] + eyeProjView[i * 4 + 1], planes->plane + 2, i);	// bottom plane
+			setPlaneCoeff(eyeProjView[i * 4 + 3] - eyeProjView[i * 4 + 1], planes->plane + 3, i);	// top plane
+			setPlaneCoeff(eyeProjView[i * 4 + 3] - eyeProjView[i * 4 + 2], planes->plane + 4, i);	// far plane
+			setPlaneCoeff(eyeProjView[i * 4 + 3] + eyeProjView[i * 4 + 2], planes->plane + 5, i);	// near plane
+		}
+
+		//---- normalize the coefficients
+		for (i = 0; i < 6; i++)	{
+			float invLength = 1;
+			float length = (float)sqrt(squaredLength(planes->plane[i].n));
+
+			if(length) invLength	= 1.0f / length;
+
+			planes->plane[i].n[0] *= invLength;
+			planes->plane[i].n[1] *= invLength;
+			planes->plane[i].n[2] *= invLength;
+			
+			planes->plane[i].d *= invLength;
+		}
+	}
+}
+
+int calcAABNearestVertexIdx(Vector3 clipPlaneNormal) {
+	int	index;
+
+	//     7+------+6
+	//     /|     /|
+	//    / |    / |
+	//   / 4+---/--+5
+	// 3+------+2 /    y   z
+	//  | /    | /     |  /
+	//  |/     |/      |/
+	// 0+------+1      *---x
+	if (clipPlaneNormal[0] <= 0.0f) {
+		index	= (clipPlaneNormal[1] <= 0.0f) ? 0 : 3;
+	}
+	else {
+		index	= (clipPlaneNormal[1] <= 0.0f) ? 1 : 2;
+	}
+
+	return (clipPlaneNormal[2] <= 0.0f) ? index : 4 + index;
+}
+
+int calcAABFarthestVertexIdx(Vector3 clipPlaneNormal) {
+	int index;
+
+	if (clipPlaneNormal[0] > 0.0f) {
+		index	= (clipPlaneNormal[1] > 0.0f) ? 0 : 3;
+	}
+	else {
+		index	= (clipPlaneNormal[1] > 0.0f) ? 1 : 2;
+	}
+
+	return (clipPlaneNormal[2] > 0.0f) ? index : 4 + index;
+}
+
+void calcAABNPVertexIndices(int *vertexIndices, const struct VecPlane planes) {
+	int i;
+	for (i = 0; i < 6; i++)	
+	{
+		vertexIndices[i * 2 + 0] = calcAABNearestVertexIdx(planes.plane[i].n);	// n-vertex
+		vertexIndices[i * 2 + 1] = calcAABFarthestVertexIdx(planes.plane[i].n); // p-vertex
+	}
+}
+
+void combineAABoxes(struct AABox *a, const struct AABox b) {
+	appendToCubicHull(a->min, a->max, b.min);
+	appendToCubicHull(a->min, a->max, b.max);
+}
+
+double calcAABoxVolume(const struct AABox aab)
+{
+	return (aab.max[0] - aab.min[0]) * 
+		   (aab.max[1] - aab.min[1]) * 
+		   (aab.max[2] - aab.min[2]);
+}
+
+
+void calcAABoxCenter(Vector3 vec, const struct AABox aab)
+{
+	diffVector3(vec, aab.max, aab.min);
+	vec[0] *= 0.5f; vec[1] *= 0.5f; vec[2] *= 0.5f;
+	
+	addVector3(vec, aab.min, vec);
+}
+
+
+double calcAABoxSurface(const struct AABox aab)
+{
+	return 2 * (aab.max[0] - aab.min[0]) * (aab.max[1] - aab.min[1]) +
+		   2 * (aab.max[0] - aab.min[0]) * (aab.max[2] - aab.min[2]) +
+		   2 * (aab.max[1] - aab.min[1]) * (aab.max[2] - aab.min[2]);
+}
+
+void clipAABoxByAABox(struct AABox *aab, const struct AABox enclosed)
+{
+	int i;
+	for(i=0; i < 3; i++)
+	{
+		if(aab->min[i] < enclosed.min[i])
+			aab->min[i] = enclosed.min[i];
+		if(aab->max[i] > enclosed.max[i])
+			aab->max[i] = enclosed.max[i];
+	}
+}
+
+
+void rotateVectorZ(Vector3 v, double rad)
+{
+	Vector3 temp;
+
+	temp[0] = v[0]*cos(rad) - v[1]*sin(rad);
+	temp[1] = v[0]*sin(rad) + v[1]*cos(rad);
+	temp[2] = v[2];
+
+	copyVector3(v, temp);
+}
+
+
+void rotateVectorX(Vector3 v, double rad)
+{
+	Vector3 temp;
+	
+	temp[0] = v[0];
+	temp[1] = v[1]*cos(rad) - v[2]*sin(rad);
+	temp[2] = v[1]*sin(rad) + v[2]*cos(rad);
+	
+	copyVector3(v, temp);
+}
+
+
+void rotateVectorY(Vector3 v, double rad)
+{
+	Vector3 temp;
+
+	temp[0] = v[2]*sin(rad) + v[0]*cos(rad);
+	temp[1] = v[1]; 
+	temp[2] = v[2]*cos(rad) - v[0]*sin(rad);
+
+	copyVector3(v, temp);
+}
+
+
+
+void rotateVector(Vector3 result, const Vector3 input, const float rad, const Vector3 axis)
+{
+	// using quaternions (vector and scalar part)
+	float s = (float)cos(rad * 0.5);
+	float h = (float)sin(rad * 0.5);
+	float p_v_dot;
+
+	Vector3 hvec = {axis[0] * h, axis[1]* h, axis[2] * h};
+	Vector3 hvec2;
+	Vector3 hvec3;
+
+	cross(hvec2, hvec, input);
+	cross(hvec3, hvec, hvec2);
+
+	p_v_dot = (float)dot(input, hvec);
+
+	result[0] = s * s * input[0] + hvec[0] * p_v_dot + 
+					 2.0f * s * hvec2[0] + hvec3[0];
+
+	result[1] = s * s * input[1] + hvec[1] * p_v_dot + 
+					 2.0f * s *hvec2[1] + hvec3[1];
+
+	result[2] = s * s * input[2] + hvec[2] * p_v_dot + 
+					 2.0f * s *hvec2[2] + hvec3[2];
+
+}
+
+
+void vectorNormal(Vector3 result, const Vector3 vec)
+{
+	result[0] = 0.0f;
+	result[1] = 0.0f;
+	result[2] = 0.0f;
+
+	// to avoid 0-vector: look if at least one component is not 0)
+	if((vec[0] != 0.0f) || (vec[1] != 0.0f))
+	{
+		result[0] = -vec[1];
+		result[1] = vec[0];
+	}	
+	else
+	{
+		result[0] = -vec[2];
+		result[1] = vec[0];
+	}
+}
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/DataTypes.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/DataTypes.h	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/DataTypes.h	(revision 629)
@@ -0,0 +1,86 @@
+//Copyright and Disclaimer:
+//This code is copyright Vienna University of Technology, 2004.
+
+#ifndef DATATYPES_H
+#define DATATYPES_H
+
+typedef double Vector3[3];
+
+typedef Vector3 Vector3x8[8];
+
+//Plane defined through normal vector n and distance to origin d
+struct Plane {
+	Vector3 n;
+	double d;
+};
+
+//a dynamic array of planes
+struct VecPlane {
+	struct Plane* plane;
+	int size;
+};
+
+//a dynamic array 3d points
+struct VecPoint {
+	Vector3* points;
+	int size;
+};
+
+//a dynamic array of point list each point list is a polygon
+struct Object {
+	struct VecPoint* poly;
+	int size;
+};
+
+//Axis-Aligned Bounding Box defined through the two extreme points
+struct AABox {
+	Vector3 min;
+	Vector3 max;
+};
+
+//4x4 matrix
+typedef double Matrix4x4[16];
+
+//initialisation objects (because we have no constructors)
+extern const struct Object OBJECT_NULL;
+extern const struct VecPoint VECPOINT_NULL;
+extern const struct VecPlane VECPLANE_NULL;
+
+//copy the 3 values of the input vector into the output vector
+extern void copyVector3(Vector3, const Vector3);
+//copy the 3 values of the input vector into the output vector
+extern void copyVector3Values(Vector3, const double, const double, const double);
+//copy the 3 values of the substraction of the two input vectors into the output vector
+extern void diffVector3(Vector3, const Vector3, const Vector3);
+//copy the 3 values of the addition of the two input vectors into the output vector
+extern void addVector3(Vector3 result, const Vector3, const Vector3);
+
+//copy the 16 values of the input matrix into the output matrix
+extern void copyMatrix(Matrix4x4, const Matrix4x4);
+
+extern void vecPointSetSize(struct VecPoint*, const int);
+extern void emptyVecPoint(struct VecPoint*);
+extern void swapVecPoint(struct VecPoint*, struct VecPoint*);
+extern void copyVecPoint(struct VecPoint*, const struct VecPoint);
+extern void append2VecPoint(struct VecPoint*, const Vector3);
+
+extern void emptyVecPlane(struct VecPlane*);
+
+extern void objectSetSize(struct Object*, const int);
+extern void emptyObject(struct Object*);
+extern void copyObject(struct Object*, const struct Object);
+//makes 1 VecPoint out of all the VecPoints of an object
+extern void convObject2VecPoint(struct VecPoint* points, const struct Object);
+
+//calculates the 8 corner points of the given AABox
+extern void calcAABoxPoints(Vector3x8 points, const struct AABox b);
+//calculates the 6 planes of the given AABox
+extern void calcAABoxPlanes(struct VecPlane*, const struct AABox);
+// allocates size planes and sets size variable
+extern void planesSetSize(struct VecPlane* p, const int size);
+// access plane per index
+extern double getPlaneCoeff(struct Plane* plane, int i);
+// set plane coefficienr per index
+extern void setPlaneCoeff(double coeff, struct Plane* plane, int i);
+
+#endif // DATATYPES
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Timers.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Timers.cpp	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Timers.cpp	(revision 629)
@@ -0,0 +1,141 @@
+#include <time.h>
+
+
+#ifdef HRTIME
+#include <hrtime.h>
+#endif
+
+#ifdef _WIN32
+
+#include <windows.h>
+#include <sys/types.h>
+#include <sys/timeb.h>
+#include <time.h>
+#include <resource.h>
+
+#else
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/times.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#endif
+
+
+#include "Timers.h"
+
+/*real time or user time*/
+
+#define REAL_TIME 
+
+
+// global file streams
+/*ofstream debugs("debug.log");*/
+
+static int hasHRTimer = 0;
+
+#ifdef  _MSC_VER
+static LARGE_INTEGER hrFreq;
+#endif
+
+
+#ifdef HRTIME
+struct hrtime_struct *hrTimer = NULL;
+#endif
+
+void initTiming()
+{
+#ifdef  _MSC_VER
+     hasHRTimer = QueryPerformanceFrequency(&hrFreq);
+#else
+#ifdef HRTIME
+     if (hrtime_is_present()) 
+     {
+	  hrtime_init();
+	  hasHRTimer = (0 == get_hrtime_struct(0, &hrTimer));
+	  debugs<<"Using UNIX hires timer"<<endl;
+     } else 
+     {
+	  debugs<<"No UNIX hires timer"<<endl;
+     }
+#endif
+#endif
+}
+
+void finishTiming()
+{
+#ifdef HRTIME
+     if (hasHRTimer == 1)
+	  free_hrtime_struct(hrTimer);
+#endif
+  
+}
+
+
+long
+getTime()
+{
+#ifndef  _MSC_VER
+
+#ifdef REAL_TIME
+
+  static struct timeval _tstart;
+  static struct timezone tz;
+
+  gettimeofday(&_tstart,&tz);
+  return (long)(1000000*_tstart.tv_sec + _tstart.tv_usec);
+
+#else
+  
+  if (hasHRTimer == 0) {
+
+    static struct rusage r;
+    getrusage(RUSAGE_SELF,&r);
+    return r.ru_utime.tv_usec+1000000*r.ru_utime.tv_sec;
+  } else {
+#ifdef HRTIME
+    hrtime_t dest;
+    get_hrutime(hrTimer, &dest);
+    return (long) (dest/500.0);
+#else
+    return 0;
+#endif
+  }
+#endif
+  
+#else
+  
+  if (hasHRTimer == 1) {
+    LARGE_INTEGER counter;
+    QueryPerformanceCounter(&counter);
+    // return in usec
+    return (long) (1000000*counter.QuadPart/(hrFreq.QuadPart));
+  } else {
+    static struct _timeb mtime;
+    _ftime(&mtime);
+    
+    return 1000*(1000*mtime.time + mtime.millitm);
+  }
+#endif
+}
+
+
+// return time diff. in ms
+double
+timeDiff(long time1,long time2) // in ms
+{
+  const double clk=1.0E-3; // ticks per second
+  long t=time2-time1;
+  
+  return ((t<0)?-t:t)*clk;
+}
+
+char
+*timeString()
+{
+  time_t t;
+  time(&t);
+  return ctime(&t);
+}
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/MathStuff.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/MathStuff.h	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/MathStuff.h	(revision 629)
@@ -0,0 +1,134 @@
+//Copyright and Disclaimer:
+//This code is copyright Vienna University of Technology, 2004.
+
+/*
+a few simple mathematical routines; not the most efficient ones, but easy to understand.
+*/
+
+#ifndef MathStuffH
+#define MathStuffH
+
+#include "DataTypes.h"
+
+//PI
+extern const double PI;
+//PI/2
+extern const double PI_2;
+//PI/180
+extern const double PI_180;
+
+//vector = (0,0,0)
+extern const Vector3 ZERO;
+//vector = (1,0,0)
+extern const Vector3 UNIT_X;
+//vector = (0,1,0)
+extern const Vector3 UNIT_Y;
+//vector = (0,0,1)
+extern const Vector3 UNIT_Z;
+
+//[1,0,0,0]
+//[0,1,0,0]
+//[0,0,1,0]
+//[0,0,0,1]
+extern const Matrix4x4 IDENTITY;
+
+//absolut value of double
+extern double absDouble(const double);
+//signum of double
+extern double signDouble(const double);
+//clamp value in between min and max borders
+extern void clamp(double* value, const double min, const double max);
+//result = pos+t*dir
+extern void linCombVector3(Vector3 result, const Vector3 pos, const Vector3 dir, const double t);
+extern double dot(const Vector3, const Vector3);
+extern void cross(Vector3, const Vector3, const Vector3);
+extern void normalize(Vector3);
+extern double squaredLength(const Vector3);
+
+//[x,0,0,0]
+//[0,y,0,0]
+//[0,0,z,0]
+//[0,0,0,1]
+extern void makeScaleMtx(Matrix4x4 output, const double x, const double y, const double z);
+//rotation around x axis
+extern void makeRotationXMtx(Matrix4x4 output, const double rad);
+//rotation around y axis
+extern void makeRotationYMtx(Matrix4x4 output, const double rad);
+//rotation around z axis
+extern void makeRotationZMtx(Matrix4x4 output, const double rad);
+//translation
+extern void makeTranslationMtx(Matrix4x4 output, Vector3 translation);
+
+//output = a*b (matrix product)
+extern void mult(Matrix4x4 output, const Matrix4x4 a, const Matrix4x4 b);
+//output = i^(-1)
+extern void invert(Matrix4x4 output, const Matrix4x4 i);
+//output = look from position:pos into direction:dir with up-vector:up
+extern void look(Matrix4x4 output, const Vector3 pos, const Vector3 dir, const Vector3 up);
+//make a scaleTranslate matrix that includes the two values vMin and vMax
+extern void scaleTranslateToFit(Matrix4x4 output, const Vector3 vMin, const Vector3 vMax);
+//output is initialized with the same result as glPerspective vFovy in degrees
+extern void perspectiveDeg(Matrix4x4 output, const double vFovy, const double vAspect,
+	const double vNearDis, const double vFarDis);
+
+//calc matrix-vector product; input has assumed homogenous component w = 1
+//before the output is  written homogen division is performed (w = 1)
+extern void mulHomogenPoint(Vector3 output, const Matrix4x4 m, const Vector3 v);
+//min and max are the two extreme points of an AABB containing all the points
+extern void calcCubicHull(Vector3 min, Vector3 max, const Vector3* ps, const int size);
+//calculates the world coordinates of the view frustum corner points
+//input matrix is the (eyeProj*eyeView)^(-1) matrix
+extern void calcViewFrustumWorldCoord(Vector3x8, const Matrix4x4);
+// mulHomogenPoint each point of VecPoint
+extern void transformVecPoint(struct VecPoint* , const Matrix4x4);
+// transformVecPoint each VecPoint of Object
+extern void transformObject(struct Object*, const Matrix4x4);
+//min and max are the two extreme points of an AABB containing all the points of the object
+extern void calcObjectCubicHull(Vector3 min, Vector3 max, const struct Object);
+
+//calculates the six polygons defining an view frustum
+extern void calcViewFrustObject(struct Object*, const Vector3x8);
+//the given object is clipped by the given AABox; the object is assumed closed
+//and is closed after the clipping
+extern void clipObjectByAABox(struct Object*, const struct AABox);
+//extrudes the object into -lightDir and clippes by the AABox the defining points are returned
+extern void includeObjectLightVolume(struct VecPoint* points, const struct Object,
+	const Vector3 lightDir, const struct AABox sceneAABox);
+//calculates the ViewFrustum Object	clippes this Object By the sceneAABox and
+//extrudes the object into -lightDir and clippes by the AABox the defining points are returned
+extern void calcFocusedLightVolumePoints(struct VecPoint* points,const Matrix4x4 invEyeProjView,
+	const Vector3 lightDir,const struct AABox sceneAABox);
+// calculates the index of the nearest vertex in the AAB vertex set
+// obtainened by calcAABoxPoints according to the normal vector of a clip plane
+extern int calcAABNearestVertexIdx(Vector3 clipPlaneNormal);
+// calculates the index of the farthest vertex in the AAB vertex set
+// obtainened by calcAABoxPoints according to the normal vector of a clip plane
+extern int calcAABFarthestVertexIdx(Vector3 clipPlaneNormal);
+
+extern double pointPlaneDistance(const struct Plane A, const Vector3 p);
+
+extern int pointBeforePlane(const struct Plane A, const Vector3 p);
+// calculates the view frustum planes of the frustum defined by the eyeProjView matrix
+extern void calcViewFrustumPlanes(struct VecPlane* planes, const Matrix4x4 eyeProjView);
+// calculates the np-indices of an aab for a set of 6 clipping planes
+// the indices are stored in the form (n0, p0, n1, p1, ..., n11, p11) in the array vertexIdx 
+extern void calcAABNPVertexIndices(int *vertexIndices, const struct VecPlane planes);
+// combines two AABs, stores result in a
+extern void combineAABoxes(struct AABox *a, const struct AABox b);
+// calculates volume of this aab
+extern double calcAABoxVolume(const struct AABox aab);
+// calculates surface of this aab
+double calcAABoxSurface(const struct AABox aab);
+// clips box aab by box enclosed
+extern void clipAABoxByAABox(struct AABox *aab, const struct AABox enclosed);
+// computes world position center of an aab
+extern void calcAABoxCenter(Vector3 vec, const struct AABox aab);
+
+extern void rotateVectorX(Vector3 v, double rad);
+extern void rotateVectorY(Vector3 v, double rad);
+extern void rotateVectorZ(Vector3 v, double rad);
+// rotates vector around axis(must be unit vector)
+extern void rotateVector(Vector3 result, const Vector3 input, const float rad, const Vector3 axis);
+// generates normal vector of a vector
+extern void vectorNormal(Vector3 result, const Vector3 vec);
+#endif
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Timers.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Timers.h	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Timers.h	(revision 629)
@@ -0,0 +1,54 @@
+// ================================================================
+// $Id: Timers.h,v, 1.1.1.1 2004/10/12 12:49:13 matt Exp $
+// ****************************************************************
+// 
+/** \file time.h
+
+Various time measuring routines
+
+@author Jiri Bittner
+*/
+
+#ifndef __TIMERS_H
+#define __TIMERS_H
+
+void initTiming();
+
+void finishTiming();
+
+long getTime();
+
+double timeDiff(long t1,long t2);
+
+char * timeString();
+
+
+/** Example of usage:
+see timers.h for diffirent possibilities of what is really measured..
+
+
+InitTiming();
+
+long t1, t2, t3;
+
+t1 = GetTime();
+
+Algortihm1();
+
+t2 = GetTime();
+
+Algorithm2();
+
+t3 = GetTime();
+
+
+cout<<"Algorithm 1"<<TimeDiff(t1, t2)<<"[ms]"<<endl;
+cout<<"Algorithm 2"<<TimeDiff(t2, t3)<<"[ms]"<<endl;
+
+
+FinishTiming();
+
+*/
+
+
+#endif
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/RenderTraverser.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/RenderTraverser.cpp	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/RenderTraverser.cpp	(revision 629)
@@ -0,0 +1,473 @@
+#include "RenderTraverser.h"
+#include "glInterface.h"
+#include "Timers.h"
+
+extern "C"
+{
+	#include "MathStuff.h"
+}
+
+
+RenderTraverser::RenderTraverser(): mFrameID(1), mVisibilityThreshold(0),
+mHierarchyRoot(NULL), mOcclusionQueries(NULL), mCurrentTestIdx(0), mIsQueryMode(false),
+mNumTraversedNodes(0), mNumQueryCulledNodes(0), mNumFrustumCulledNodes(0),
+mRenderTime(0), mNumRenderedGeometry(0), mUseOptimization(true)
+{
+}
+
+RenderTraverser::~RenderTraverser()
+{
+	if(mOcclusionQueries) 
+		delete [] mOcclusionQueries;
+}
+
+void RenderTraverser::Render(int mode)
+{
+	mDistanceQueue.push(mHierarchyRoot);
+
+	long startTime = getTime();
+
+	Preprocess();
+
+	switch(mode)
+	{
+		case RENDER_CULL_FRUSTUM:
+			RenderCullFrustum();
+            break;
+		case RENDER_STOP_AND_WAIT:
+			RenderStopAndWait();
+			break;
+		case RENDER_COHERENT:
+			RenderCoherentWithQueue();
+			break;
+		default:
+			RenderCullFrustum();
+			break;
+	}
+
+	mFrameID ++;
+	ResetQueries();
+
+	long endTime = getTime();
+	mRenderTime = endTime - startTime;
+
+	finishTiming();
+}
+
+/**
+	This is the standard render traversal algorithm doing only frustum culling
+*/
+void RenderTraverser::RenderCullFrustum()
+{
+	while(!mDistanceQueue.empty())
+	{
+		HierarchyNode *node = mDistanceQueue.top();
+		mDistanceQueue.pop();
+	
+		// interesting for the visualization, so rest and set
+		node->SetVisible(false);
+		mNumTraversedNodes ++;
+
+		bool intersects;
+	
+		if(InsideViewFrustum(node, intersects))
+		{
+			// update node's visited flag => needed for rendering
+			// so set it also here
+			node->SetLastVisited(mFrameID);
+			node->SetVisible(true);
+			TraverseNode(node);
+		}
+		else
+		{
+			mNumFrustumCulledNodes ++;
+		}
+	}
+}
+
+void RenderTraverser::RenderStopAndWait()
+{
+	while(! mDistanceQueue.empty())
+	{
+		HierarchyNode *node = mDistanceQueue.top();
+		mDistanceQueue.pop();
+		mNumTraversedNodes ++;
+		// interesting for the visualization, so rest and set
+		node->SetVisible(false);
+
+		bool intersects;
+		
+		if(InsideViewFrustum(node, intersects))
+		{
+			// update node's visited flag
+			node->SetLastVisited(mFrameID);
+
+			// for near plane intersecting abbs possible 
+			// wrong results => skip occlusion query
+			if(intersects)
+			{
+				node->SetVisible(true);
+				TraverseNode(node);
+			}
+			else
+			{
+				IssueOcclusionQuery(node, false);
+				
+				// wait if result not available
+				int visiblePixels = GetOcclusionQueryResult(node);
+				
+				// node visible
+				if(visiblePixels > mVisibilityThreshold)
+				{
+					node->SetVisible(true);
+					TraverseNode(node);
+				}
+				else
+				{
+					mNumQueryCulledNodes ++;
+				}
+			}					
+		}
+		else
+		{
+			mNumFrustumCulledNodes ++;
+		}
+	}
+}
+
+void RenderTraverser::RenderCoherentWithQueue()
+{
+	QueryQueue queryQueue;
+
+	//-- PART 1: process finished occlusion queries
+	while(!mDistanceQueue.empty() || !queryQueue.empty())
+	{
+		while(!queryQueue.empty() && 
+			  (ResultAvailable(queryQueue.front()) || mDistanceQueue.empty()))
+		{
+			HierarchyNode *node = queryQueue.front();
+			queryQueue.pop();
+			
+			// wait until result available
+			int visiblePixels = GetOcclusionQueryResult(node);
+
+			if(visiblePixels > mVisibilityThreshold)
+			{
+				PullUpVisibility(node);
+				TraverseNode(node);
+			}
+			else
+			{
+				mNumQueryCulledNodes ++;
+			}
+		}	
+
+		//-- PART 2: hierarchical traversal
+		if(! mDistanceQueue.empty())
+		{
+			HierarchyNode *node = mDistanceQueue.top();
+
+			mDistanceQueue.pop();
+	
+			mNumTraversedNodes ++;
+
+			bool intersects;
+			
+			if(InsideViewFrustum(node, intersects))
+			{
+				// for near plane intersecting bounding box possible 
+				// wrong results => skip occlusion query
+				if(intersects)
+				{
+					// update node's visited flag
+					node->SetLastVisited(mFrameID);
+					node->SetVisible(true);
+					PullUpVisibility(node);
+					TraverseNode(node);
+				}
+				else
+				{		
+					// identify previously visible nodes
+					bool wasVisible = node->Visible() && (node->LastVisited() == mFrameID - 1);
+					
+					// identify nodes that we cannot skip queries for
+					bool leafOrWasInvisible = (node->LastVisited() != mFrameID) && (!wasVisible || node->IsLeaf());
+
+					// reset node's visibility classification 
+					node->SetVisible(false);
+
+					// update node's visited flag
+					node->SetLastVisited(mFrameID);
+					
+					// skip testing previously visible interior nodes
+					if(leafOrWasInvisible)
+					{
+						IssueOcclusionQuery(node, wasVisible);
+						queryQueue.push(node);
+					}
+					
+					// always traverse a node if it was visible
+					if(wasVisible)
+						TraverseNode(node);
+				}
+			}
+			else
+			{
+				// for stats
+				mNumFrustumCulledNodes ++;
+			}
+		}
+	}
+}
+	
+void RenderTraverser::TraverseNode(HierarchyNode *node)
+{
+	if(node->IsLeaf())
+		mNumRenderedGeometry += node->Render();
+	else 
+	{
+		// for non leafs this renders only the bounding volume (if the flag is set)
+		//node->Render();
+		mDistanceQueue.push(node->GetLeftChild());
+		mDistanceQueue.push(node->GetRightChild());
+	}
+}
+
+void RenderTraverser::RenderVisualization()
+{
+	mDistanceQueue.push(mHierarchyRoot);
+
+	while(!	mDistanceQueue.empty())
+	{
+		HierarchyNode *node = mDistanceQueue.top();
+		mDistanceQueue.pop();
+
+		// identify previously visible nodes
+		bool wasVisible = node->Visible() && (node->LastVisited() == mFrameID - 1);
+
+		if(wasVisible)
+			TraverseNode(node);
+		else
+		{
+			// also render culled nodes
+			glColor3f(1.0,0.0,0.0);
+			node->RenderBoundingVolumeForVisualization();		
+		}
+	}
+}
+
+
+void RenderTraverser::PullUpVisibility(HierarchyNode *node)
+{
+	while(node && !node->Visible())
+	{
+		node->SetVisible(true);
+		node = node->GetParent();
+	}
+}
+
+bool RenderTraverser::ResultAvailable(HierarchyNode *node)
+{
+	int result;
+
+	glGetQueryivARB(node->GetOcclusionQuery(),
+					GL_QUERY_RESULT_AVAILABLE_ARB, &result);
+
+	return (result == GL_TRUE);
+}
+
+void RenderTraverser::SetHierarchy(HierarchyNode *sceneRoot)
+{
+	mHierarchyRoot = sceneRoot;
+
+	// not valid anymore for new hierarchy => delete
+	delete [] mOcclusionQueries;
+	mOcclusionQueries = NULL;
+}
+
+HierarchyNode *RenderTraverser::GetHierarchy()
+{
+	return mHierarchyRoot;
+}
+
+int RenderTraverser::GetOcclusionQueryResult(HierarchyNode *node)
+{
+	unsigned int result;
+	
+	glGetQueryObjectuivARB(node->GetOcclusionQuery(), GL_QUERY_RESULT_ARB, &result);
+
+	return (int)result;
+}
+
+
+void RenderTraverser::Switch2GLQueryState()
+{	
+	// boolean used to avoid unnecessary state changes
+	if(!mIsQueryMode)
+	{
+		glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+		glDepthMask(GL_FALSE);
+		glDisable(GL_LIGHTING);
+		mIsQueryMode = true;
+	}
+}
+
+
+void RenderTraverser::Switch2GLRenderState()
+{
+	// boolean used to avoid unnecessary state changes
+	if(mIsQueryMode)
+	{
+		// switch back to rendermode		
+		glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+		glDepthMask(GL_TRUE);
+		glEnable(GL_LIGHTING);
+		mIsQueryMode = false;
+	}
+}
+
+void RenderTraverser::IssueOcclusionQuery(HierarchyNode *node, const bool wasVisible)
+{
+	// get next available test id
+	unsigned int occlusionQuery = mOcclusionQueries[mCurrentTestIdx++];
+	
+	node->SetOcclusionQuery(occlusionQuery);
+	// do the actual occlusion query for this node
+	glBeginQueryARB(GL_SAMPLES_PASSED_ARB, occlusionQuery);
+	
+	// if leaf and was visible => will be rendered anyway, thus we
+	// can also test with the real geometry 
+	if(node->IsLeaf() && wasVisible && mUseOptimization)
+	{
+		mNumRenderedGeometry += node->Render();
+	}
+	else
+	{
+		// change state so the bounding box gets not actually rendered on the screen
+		Switch2GLQueryState();
+		node->RenderBoundingVolume();
+		Switch2GLRenderState();
+	}
+
+	glEndQueryARB(GL_SAMPLES_PASSED_ARB);
+}
+
+void RenderTraverser::Preprocess()
+{
+	if(!mOcclusionQueries)
+	{
+		mOcclusionQueries = new unsigned int[mHierarchyRoot->GetNumHierarchyNodes()];
+	}
+
+	// view frustum planes for view frustum culling
+	calcViewFrustumPlanes(&mClipPlanes, mProjViewMatrix);
+	calcAABNPVertexIndices(mNPVertexIndices, mClipPlanes);
+	// generate ids for occlusion test
+	glGenQueriesARB(mHierarchyRoot->GetNumHierarchyNodes(), mOcclusionQueries);
+	mCurrentTestIdx = 0;
+
+	// reset statistics
+	mNumTraversedNodes = 0;
+	mNumQueryCulledNodes = 0;
+	mNumFrustumCulledNodes = 0;
+	mNumRenderedGeometry = 0;
+}
+
+
+void RenderTraverser::ResetQueries()
+{
+	// tell the driver that the occlusion queries won't be needed any more
+	glDeleteQueriesARB(mHierarchyRoot->GetNumHierarchyNodes(), mOcclusionQueries);
+}
+
+
+void RenderTraverser::SetViewpoint(Vector3 const &viewpoint)
+{
+	copyVector3(mViewpoint, viewpoint);
+}
+	
+
+void RenderTraverser::SetProjViewMatrix(Matrix4x4 const &projViewMatrix)
+{
+	copyMatrix(mProjViewMatrix, projViewMatrix);
+}
+
+
+bool RenderTraverser::InsideViewFrustum(HierarchyNode *node, bool &intersects)
+{
+	Vector3x8 vertices;
+	
+	bool intersect = false;
+
+	calcAABoxPoints(vertices, node->GetBoundingVolume());
+
+	// simply test all 6 vertices
+	for (int i = 0; i < 6; i++)
+	{		
+		// test the n-vertex
+		// note: the calcAABNearestVertexId should be preprocessed
+		if(!pointBeforePlane(mClipPlanes.plane[i], vertices[mNPVertexIndices[i * 2]]))
+		{
+			// outside
+			return false;
+		}
+	}
+
+	// test if bounding box is intersected by nearplane (using the p-vertex)
+	intersects = (!pointBeforePlane(mClipPlanes.plane[5], vertices[mNPVertexIndices[11]]));
+
+	// -- get vector from viewpoint to center of bounding volume
+	Vector3 vec;
+	calcAABoxCenter(vec, node->GetBoundingVolume());
+	diffVector3(vec, vec, mViewpoint);
+
+	// compute distance from nearest point to viewpoint
+	diffVector3(vec, vertices[calcAABNearestVertexIdx(vec)], mViewpoint);
+	node->SetDistance(squaredLength(vec));
+	
+	return true;
+}
+
+
+void RenderTraverser::SetVisibilityThreshold(int threshold)
+{
+	mVisibilityThreshold = threshold;
+}
+
+long RenderTraverser::GetRenderTime()
+{
+	return mRenderTime;
+}
+
+int RenderTraverser::GetNumTraversedNodes()
+{
+	return mNumTraversedNodes;
+}
+
+int RenderTraverser::GetNumQueryCulledNodes()
+{
+	return mNumQueryCulledNodes;
+}
+
+int RenderTraverser::GetNumFrustumCulledNodes()
+{
+	return mNumFrustumCulledNodes;
+}
+
+
+int RenderTraverser::GetNumRenderedGeometry()
+{
+	return mNumRenderedGeometry;
+}
+
+
+int RenderTraverser::GetVisibilityThreshold()
+{
+	return mVisibilityThreshold;
+}
+
+void RenderTraverser::SetUseOptimization(bool useOptimization)
+{
+	mUseOptimization = useOptimization;
+	printf("using opt %d\n", mUseOptimization);
+}
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/glut.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/glut.h	(revision 10)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/glut.h	(revision 10)
@@ -0,0 +1,743 @@
+#ifndef __glut_h__
+#define __glut_h__
+
+/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998, 2000. */
+
+/* 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. */
+
+#ifdef _WIN32
+
+/* GLUT 3.7 now tries to avoid including <windows.h>
+   to avoid name space pollution, but Win32's <GL/gl.h> 
+   needs APIENTRY and WINGDIAPI defined properly. */
+# if 0
+   /* This would put tons of macros and crap in our clean name space. */
+#  define  WIN32_LEAN_AND_MEAN
+#  include <windows.h>
+# else
+   /* XXX This is from Win32's <windef.h> */
+#  ifndef APIENTRY
+#   define GLUT_APIENTRY_DEFINED
+    /* Cygwin and MingW32 are two free GNU-based Open Source compilation
+       environments for Win32.  Note that __CYGWIN32__ is deprecated
+       in favor of simply __CYGWIN__. */
+#   if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__CYGWIN__)
+#    ifdef i386
+#     define APIENTRY __attribute__ ((stdcall)) 
+#    else
+#     define APIENTRY
+#    endif
+#   else
+#    if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
+#     define APIENTRY    __stdcall
+#    else
+#     define APIENTRY
+#    endif
+#   endif
+#  endif
+   /* XXX This is from Win32's <winnt.h> */
+#  ifndef CALLBACK
+#   if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__CYGWIN__)
+#    define CALLBACK __attribute__ ((stdcall)) 
+#   else
+#    if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
+#     define CALLBACK __stdcall
+#    else
+#     define CALLBACK
+#    endif
+#   endif
+#  endif
+   /* XXX This is from Win32's <wingdi.h> and <winnt.h> */
+#  ifndef WINGDIAPI
+#   define GLUT_WINGDIAPI_DEFINED
+#   if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__CYGWIN__)
+#    define WINGDIAPI
+#   else
+#    define WINGDIAPI __declspec(dllimport)
+#   endif
+#  endif
+#  if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__CYGWIN__)
+    /* Rely on Cygwin32/MingW32 <stddef.h> to set wchar_t. */
+    /* XXX Warning.  The Cygwin32/MingW32 definition for wchar_t
+       is an "int" instead of the "short" used by Windows. */
+#   include <stddef.h>
+#  else
+    /* XXX This is from Win32's <ctype.h> */
+#   ifndef _WCHAR_T_DEFINED
+typedef unsigned short wchar_t;
+#    define _WCHAR_T_DEFINED
+#   endif
+#  endif
+# endif
+
+/* To disable automatic library usage for GLUT, define GLUT_NO_LIB_PRAGMA
+   in your compile preprocessor options. */
+# if !defined(GLUT_BUILDING_LIB) && !defined(GLUT_NO_LIB_PRAGMA)
+#  pragma comment (lib, "winmm.lib")      /* link with Windows MultiMedia lib */
+/* To enable automatic SGI OpenGL for Windows library usage for GLUT,
+   define GLUT_USE_SGI_OPENGL in your compile preprocessor options.  */
+#  ifdef GLUT_USE_SGI_OPENGL
+#   pragma comment (lib, "opengl.lib") /* link with SGI OpenGL for Windows lib */
+#   pragma comment (lib, "glu.lib")    /* link with SGI OpenGL Utility lib */
+#   pragma comment (lib, "glut.lib")   /* link with Win32 GLUT for SGI OpenGL lib */
+#  else
+#   pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */
+#   pragma comment (lib, "glu32.lib")    /* link with Microsoft OpenGL Utility lib */
+#   pragma comment (lib, "glut32.lib")   /* link with Win32 GLUT lib */
+#  endif
+# endif
+
+/* To disable supression of annoying warnings about floats being promoted
+   to doubles, define GLUT_NO_WARNING_DISABLE in your compile preprocessor
+   options. */
+# if defined(_MSC_VER) && !defined(GLUT_NO_WARNING_DISABLE)
+#  pragma warning (disable:4244)  /* Disable bogus VC++ 4.2 conversion warnings. */
+#  pragma warning (disable:4305)  /* VC++ 5.0 version of above warning. */
+# endif
+
+/* Win32 has an annoying issue where there are multiple C run-time
+   libraries (CRTs).  If the executable is linked with a different CRT
+   from the GLUT DLL, the GLUT DLL will not share the same CRT static
+   data seen by the executable.  In particular, atexit callbacks registered
+   in the executable will not be called if GLUT calls its (different)
+   exit routine).  GLUT is typically built with the
+   "/MD" option (the CRT with multithreading DLL support), but the Visual
+   C++ linker default is "/ML" (the single threaded CRT).
+
+   One workaround to this issue is requiring users to always link with
+   the same CRT as GLUT is compiled with.  That requires users supply a
+   non-standard option.  GLUT 3.7 has its own built-in workaround where
+   the executable's "exit" function pointer is covertly passed to GLUT.
+   GLUT then calls the executable's exit function pointer to ensure that
+   any "atexit" calls registered by the application are called if GLUT
+   needs to exit.
+
+   Note that the __glut*WithExit routines should NEVER be called directly.
+   To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */
+
+/* XXX This is from Win32's <process.h> */
+# if !defined(_MSC_VER) && !defined(__cdecl)
+   /* Define __cdecl for non-Microsoft compilers. */
+#  define __cdecl
+#  define GLUT_DEFINED___CDECL
+# endif
+# ifndef _CRTIMP
+#  ifdef _NTSDK
+    /* Definition compatible with NT SDK */
+#   define _CRTIMP
+#  else
+    /* Current definition */
+#   ifdef _DLL
+#    define _CRTIMP __declspec(dllimport)
+#   else
+#    define _CRTIMP
+#   endif
+#  endif
+#  define GLUT_DEFINED__CRTIMP
+# endif
+
+/* GLUT API entry point declarations for Win32. */
+# ifdef GLUT_BUILDING_LIB
+#  define GLUTAPI __declspec(dllexport)
+# else
+#  ifdef _DLL
+#   define GLUTAPI __declspec(dllimport)
+#  else
+#   define GLUTAPI extern
+#  endif
+# endif
+
+/* GLUT callback calling convention for Win32. */
+# define GLUTCALLBACK __cdecl
+
+#endif  /* _WIN32 */
+
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _WIN32
+# ifndef GLUT_BUILDING_LIB
+#if     _MSC_VER >= 1200
+extern _CRTIMP __declspec(noreturn) void   __cdecl exit(int);
+#else
+extern _CRTIMP void   __cdecl exit(int);
+#endif
+//extern _CRTIMP void __cdecl exit(int);
+# endif
+#else
+/* non-Win32 case. */
+/* Define APIENTRY and CALLBACK to nothing if we aren't on Win32. */
+# define APIENTRY
+# define GLUT_APIENTRY_DEFINED
+# define CALLBACK
+/* Define GLUTAPI and GLUTCALLBACK as below if we aren't on Win32. */
+# define GLUTAPI extern
+# define GLUTCALLBACK
+/* Prototype exit for the non-Win32 case (see above). */
+extern void exit(int);
+#endif
+
+/**
+ GLUT API revision history:
+ 
+ GLUT_API_VERSION is updated to reflect incompatible GLUT
+ API changes (interface changes, semantic changes, deletions,
+ or additions).
+ 
+ GLUT_API_VERSION=1  First public release of GLUT.  11/29/94
+
+ GLUT_API_VERSION=2  Added support for OpenGL/GLX multisampling,
+ extension.  Supports new input devices like tablet, dial and button
+ box, and Spaceball.  Easy to query OpenGL extensions.
+
+ GLUT_API_VERSION=3  glutMenuStatus added.
+
+ GLUT_API_VERSION=4  glutInitDisplayString, glutWarpPointer,
+ glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic
+ video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc,
+ glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat,
+ glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!).
+**/
+#ifndef GLUT_API_VERSION  /* allow this to be overriden */
+#define GLUT_API_VERSION		3
+#endif
+
+/**
+ GLUT implementation revision history:
+ 
+ GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT
+ API revisions and implementation revisions (ie, bug fixes).
+
+ GLUT_XLIB_IMPLEMENTATION=1  mjk's first public release of
+ GLUT Xlib-based implementation.  11/29/94
+
+ GLUT_XLIB_IMPLEMENTATION=2  mjk's second public release of
+ GLUT Xlib-based implementation providing GLUT version 2 
+ interfaces.
+
+ GLUT_XLIB_IMPLEMENTATION=3  mjk's GLUT 2.2 images. 4/17/95
+
+ GLUT_XLIB_IMPLEMENTATION=4  mjk's GLUT 2.3 images. 6/?/95
+
+ GLUT_XLIB_IMPLEMENTATION=5  mjk's GLUT 3.0 images. 10/?/95
+
+ GLUT_XLIB_IMPLEMENTATION=7  mjk's GLUT 3.1+ with glutWarpPoitner.  7/24/96
+
+ GLUT_XLIB_IMPLEMENTATION=8  mjk's GLUT 3.1+ with glutWarpPoitner
+ and video resize.  1/3/97
+
+ GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines.
+
+ GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release.
+
+ GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling.
+
+ GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 beta with GameGLUT support.
+
+ GLUT_XLIB_IMPLEMENTATION=14 mjk's GLUT 3.7 beta with f90gl friend interface.
+
+ GLUT_XLIB_IMPLEMENTATION=15 mjk's GLUT 3.7 beta sync'ed with Mesa <GL/glut.h>
+
+ GLUT_XLIB_IMPLEMENTATION=16 mjk's GLUT 3.8 
+**/
+#ifndef GLUT_XLIB_IMPLEMENTATION  /* Allow this to be overriden. */
+#define GLUT_XLIB_IMPLEMENTATION	16
+#endif
+
+/* Display mode bit masks. */
+#define GLUT_RGB			0
+#define GLUT_RGBA			GLUT_RGB
+#define GLUT_INDEX			1
+#define GLUT_SINGLE			0
+#define GLUT_DOUBLE			2
+#define GLUT_ACCUM			4
+#define GLUT_ALPHA			8
+#define GLUT_DEPTH			16
+#define GLUT_STENCIL			32
+#if (GLUT_API_VERSION >= 2)
+#define GLUT_MULTISAMPLE		128
+#define GLUT_STEREO			256
+#endif
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_LUMINANCE			512
+#endif
+
+/* Mouse buttons. */
+#define GLUT_LEFT_BUTTON		0
+#define GLUT_MIDDLE_BUTTON		1
+#define GLUT_RIGHT_BUTTON		2
+
+/* Mouse button  state. */
+#define GLUT_DOWN			0
+#define GLUT_UP				1
+
+#if (GLUT_API_VERSION >= 2)
+/* function keys */
+#define GLUT_KEY_F1			1
+#define GLUT_KEY_F2			2
+#define GLUT_KEY_F3			3
+#define GLUT_KEY_F4			4
+#define GLUT_KEY_F5			5
+#define GLUT_KEY_F6			6
+#define GLUT_KEY_F7			7
+#define GLUT_KEY_F8			8
+#define GLUT_KEY_F9			9
+#define GLUT_KEY_F10			10
+#define GLUT_KEY_F11			11
+#define GLUT_KEY_F12			12
+/* directional keys */
+#define GLUT_KEY_LEFT			100
+#define GLUT_KEY_UP			101
+#define GLUT_KEY_RIGHT			102
+#define GLUT_KEY_DOWN			103
+#define GLUT_KEY_PAGE_UP		104
+#define GLUT_KEY_PAGE_DOWN		105
+#define GLUT_KEY_HOME			106
+#define GLUT_KEY_END			107
+#define GLUT_KEY_INSERT			108
+#endif
+
+/* Entry/exit  state. */
+#define GLUT_LEFT			0
+#define GLUT_ENTERED			1
+
+/* Menu usage  state. */
+#define GLUT_MENU_NOT_IN_USE		0
+#define GLUT_MENU_IN_USE		1
+
+/* Visibility  state. */
+#define GLUT_NOT_VISIBLE		0
+#define GLUT_VISIBLE			1
+
+/* Window status  state. */
+#define GLUT_HIDDEN			0
+#define GLUT_FULLY_RETAINED		1
+#define GLUT_PARTIALLY_RETAINED		2
+#define GLUT_FULLY_COVERED		3
+
+/* Color index component selection values. */
+#define GLUT_RED			0
+#define GLUT_GREEN			1
+#define GLUT_BLUE			2
+
+#ifdef _WIN32
+/* Stroke font constants (use these in GLUT program). */
+#define GLUT_STROKE_ROMAN		((void*)0)
+#define GLUT_STROKE_MONO_ROMAN		((void*)1)
+
+/* Bitmap font constants (use these in GLUT program). */
+#define GLUT_BITMAP_9_BY_15		((void*)2)
+#define GLUT_BITMAP_8_BY_13		((void*)3)
+#define GLUT_BITMAP_TIMES_ROMAN_10	((void*)4)
+#define GLUT_BITMAP_TIMES_ROMAN_24	((void*)5)
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_BITMAP_HELVETICA_10	((void*)6)
+#define GLUT_BITMAP_HELVETICA_12	((void*)7)
+#define GLUT_BITMAP_HELVETICA_18	((void*)8)
+#endif
+#else
+/* Stroke font opaque addresses (use constants instead in source code). */
+GLUTAPI void *glutStrokeRoman;
+GLUTAPI void *glutStrokeMonoRoman;
+
+/* Stroke font constants (use these in GLUT program). */
+#define GLUT_STROKE_ROMAN		(&glutStrokeRoman)
+#define GLUT_STROKE_MONO_ROMAN		(&glutStrokeMonoRoman)
+
+/* Bitmap font opaque addresses (use constants instead in source code). */
+GLUTAPI void *glutBitmap9By15;
+GLUTAPI void *glutBitmap8By13;
+GLUTAPI void *glutBitmapTimesRoman10;
+GLUTAPI void *glutBitmapTimesRoman24;
+GLUTAPI void *glutBitmapHelvetica10;
+GLUTAPI void *glutBitmapHelvetica12;
+GLUTAPI void *glutBitmapHelvetica18;
+
+/* Bitmap font constants (use these in GLUT program). */
+#define GLUT_BITMAP_9_BY_15		(&glutBitmap9By15)
+#define GLUT_BITMAP_8_BY_13		(&glutBitmap8By13)
+#define GLUT_BITMAP_TIMES_ROMAN_10	(&glutBitmapTimesRoman10)
+#define GLUT_BITMAP_TIMES_ROMAN_24	(&glutBitmapTimesRoman24)
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_BITMAP_HELVETICA_10	(&glutBitmapHelvetica10)
+#define GLUT_BITMAP_HELVETICA_12	(&glutBitmapHelvetica12)
+#define GLUT_BITMAP_HELVETICA_18	(&glutBitmapHelvetica18)
+#endif
+#endif
+
+/* glutGet parameters. */
+#define GLUT_WINDOW_X			((GLenum) 100)
+#define GLUT_WINDOW_Y			((GLenum) 101)
+#define GLUT_WINDOW_WIDTH		((GLenum) 102)
+#define GLUT_WINDOW_HEIGHT		((GLenum) 103)
+#define GLUT_WINDOW_BUFFER_SIZE		((GLenum) 104)
+#define GLUT_WINDOW_STENCIL_SIZE	((GLenum) 105)
+#define GLUT_WINDOW_DEPTH_SIZE		((GLenum) 106)
+#define GLUT_WINDOW_RED_SIZE		((GLenum) 107)
+#define GLUT_WINDOW_GREEN_SIZE		((GLenum) 108)
+#define GLUT_WINDOW_BLUE_SIZE		((GLenum) 109)
+#define GLUT_WINDOW_ALPHA_SIZE		((GLenum) 110)
+#define GLUT_WINDOW_ACCUM_RED_SIZE	((GLenum) 111)
+#define GLUT_WINDOW_ACCUM_GREEN_SIZE	((GLenum) 112)
+#define GLUT_WINDOW_ACCUM_BLUE_SIZE	((GLenum) 113)
+#define GLUT_WINDOW_ACCUM_ALPHA_SIZE	((GLenum) 114)
+#define GLUT_WINDOW_DOUBLEBUFFER	((GLenum) 115)
+#define GLUT_WINDOW_RGBA		((GLenum) 116)
+#define GLUT_WINDOW_PARENT		((GLenum) 117)
+#define GLUT_WINDOW_NUM_CHILDREN	((GLenum) 118)
+#define GLUT_WINDOW_COLORMAP_SIZE	((GLenum) 119)
+#if (GLUT_API_VERSION >= 2)
+#define GLUT_WINDOW_NUM_SAMPLES		((GLenum) 120)
+#define GLUT_WINDOW_STEREO		((GLenum) 121)
+#endif
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_WINDOW_CURSOR		((GLenum) 122)
+#endif
+#define GLUT_SCREEN_WIDTH		((GLenum) 200)
+#define GLUT_SCREEN_HEIGHT		((GLenum) 201)
+#define GLUT_SCREEN_WIDTH_MM		((GLenum) 202)
+#define GLUT_SCREEN_HEIGHT_MM		((GLenum) 203)
+#define GLUT_MENU_NUM_ITEMS		((GLenum) 300)
+#define GLUT_DISPLAY_MODE_POSSIBLE	((GLenum) 400)
+#define GLUT_INIT_WINDOW_X		((GLenum) 500)
+#define GLUT_INIT_WINDOW_Y		((GLenum) 501)
+#define GLUT_INIT_WINDOW_WIDTH		((GLenum) 502)
+#define GLUT_INIT_WINDOW_HEIGHT		((GLenum) 503)
+#define GLUT_INIT_DISPLAY_MODE		((GLenum) 504)
+#if (GLUT_API_VERSION >= 2)
+#define GLUT_ELAPSED_TIME		((GLenum) 700)
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+#define GLUT_WINDOW_FORMAT_ID		((GLenum) 123)
+#endif
+
+#if (GLUT_API_VERSION >= 2)
+/* glutDeviceGet parameters. */
+#define GLUT_HAS_KEYBOARD		((GLenum) 600)
+#define GLUT_HAS_MOUSE			((GLenum) 601)
+#define GLUT_HAS_SPACEBALL		((GLenum) 602)
+#define GLUT_HAS_DIAL_AND_BUTTON_BOX	((GLenum) 603)
+#define GLUT_HAS_TABLET			((GLenum) 604)
+#define GLUT_NUM_MOUSE_BUTTONS		((GLenum) 605)
+#define GLUT_NUM_SPACEBALL_BUTTONS	((GLenum) 606)
+#define GLUT_NUM_BUTTON_BOX_BUTTONS	((GLenum) 607)
+#define GLUT_NUM_DIALS			((GLenum) 608)
+#define GLUT_NUM_TABLET_BUTTONS		((GLenum) 609)
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+#define GLUT_DEVICE_IGNORE_KEY_REPEAT   ((GLenum) 610)
+#define GLUT_DEVICE_KEY_REPEAT          ((GLenum) 611)
+#define GLUT_HAS_JOYSTICK		((GLenum) 612)
+#define GLUT_OWNS_JOYSTICK		((GLenum) 613)
+#define GLUT_JOYSTICK_BUTTONS		((GLenum) 614)
+#define GLUT_JOYSTICK_AXES		((GLenum) 615)
+#define GLUT_JOYSTICK_POLL_RATE		((GLenum) 616)
+#endif
+
+#if (GLUT_API_VERSION >= 3)
+/* glutLayerGet parameters. */
+#define GLUT_OVERLAY_POSSIBLE           ((GLenum) 800)
+#define GLUT_LAYER_IN_USE		((GLenum) 801)
+#define GLUT_HAS_OVERLAY		((GLenum) 802)
+#define GLUT_TRANSPARENT_INDEX		((GLenum) 803)
+#define GLUT_NORMAL_DAMAGED		((GLenum) 804)
+#define GLUT_OVERLAY_DAMAGED		((GLenum) 805)
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+/* glutVideoResizeGet parameters. */
+#define GLUT_VIDEO_RESIZE_POSSIBLE	((GLenum) 900)
+#define GLUT_VIDEO_RESIZE_IN_USE	((GLenum) 901)
+#define GLUT_VIDEO_RESIZE_X_DELTA	((GLenum) 902)
+#define GLUT_VIDEO_RESIZE_Y_DELTA	((GLenum) 903)
+#define GLUT_VIDEO_RESIZE_WIDTH_DELTA	((GLenum) 904)
+#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA	((GLenum) 905)
+#define GLUT_VIDEO_RESIZE_X		((GLenum) 906)
+#define GLUT_VIDEO_RESIZE_Y		((GLenum) 907)
+#define GLUT_VIDEO_RESIZE_WIDTH		((GLenum) 908)
+#define GLUT_VIDEO_RESIZE_HEIGHT	((GLenum) 909)
+#endif
+
+/* glutUseLayer parameters. */
+#define GLUT_NORMAL			((GLenum) 0)
+#define GLUT_OVERLAY			((GLenum) 1)
+
+/* glutGetModifiers return mask. */
+#define GLUT_ACTIVE_SHIFT               1
+#define GLUT_ACTIVE_CTRL                2
+#define GLUT_ACTIVE_ALT                 4
+
+/* glutSetCursor parameters. */
+/* Basic arrows. */
+#define GLUT_CURSOR_RIGHT_ARROW		0
+#define GLUT_CURSOR_LEFT_ARROW		1
+/* Symbolic cursor shapes. */
+#define GLUT_CURSOR_INFO		2
+#define GLUT_CURSOR_DESTROY		3
+#define GLUT_CURSOR_HELP		4
+#define GLUT_CURSOR_CYCLE		5
+#define GLUT_CURSOR_SPRAY		6
+#define GLUT_CURSOR_WAIT		7
+#define GLUT_CURSOR_TEXT		8
+#define GLUT_CURSOR_CROSSHAIR		9
+/* Directional cursors. */
+#define GLUT_CURSOR_UP_DOWN		10
+#define GLUT_CURSOR_LEFT_RIGHT		11
+/* Sizing cursors. */
+#define GLUT_CURSOR_TOP_SIDE		12
+#define GLUT_CURSOR_BOTTOM_SIDE		13
+#define GLUT_CURSOR_LEFT_SIDE		14
+#define GLUT_CURSOR_RIGHT_SIDE		15
+#define GLUT_CURSOR_TOP_LEFT_CORNER	16
+#define GLUT_CURSOR_TOP_RIGHT_CORNER	17
+#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER	18
+#define GLUT_CURSOR_BOTTOM_LEFT_CORNER	19
+/* Inherit from parent window. */
+#define GLUT_CURSOR_INHERIT		100
+/* Blank cursor. */
+#define GLUT_CURSOR_NONE		101
+/* Fullscreen crosshair (if available). */
+#define GLUT_CURSOR_FULL_CROSSHAIR	102
+#endif
+
+/* GLUT initialization sub-API. */
+GLUTAPI void APIENTRY glutInit(int *argcp, char **argv);
+#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
+GLUTAPI void APIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int));
+#ifndef GLUT_BUILDING_LIB
+static void APIENTRY glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); }
+#define glutInit glutInit_ATEXIT_HACK
+#endif
+#endif
+GLUTAPI void APIENTRY glutInitDisplayMode(unsigned int mode);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI void APIENTRY glutInitDisplayString(const char *string);
+#endif
+GLUTAPI void APIENTRY glutInitWindowPosition(int x, int y);
+GLUTAPI void APIENTRY glutInitWindowSize(int width, int height);
+GLUTAPI void APIENTRY glutMainLoop(void);
+
+/* GLUT window sub-API. */
+GLUTAPI int APIENTRY glutCreateWindow(const char *title);
+#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
+GLUTAPI int APIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int));
+#ifndef GLUT_BUILDING_LIB
+static int APIENTRY glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); }
+#define glutCreateWindow glutCreateWindow_ATEXIT_HACK
+#endif
+#endif
+GLUTAPI int APIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height);
+GLUTAPI void APIENTRY glutDestroyWindow(int win);
+GLUTAPI void APIENTRY glutPostRedisplay(void);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
+GLUTAPI void APIENTRY glutPostWindowRedisplay(int win);
+#endif
+GLUTAPI void APIENTRY glutSwapBuffers(void);
+GLUTAPI int APIENTRY glutGetWindow(void);
+GLUTAPI void APIENTRY glutSetWindow(int win);
+GLUTAPI void APIENTRY glutSetWindowTitle(const char *title);
+GLUTAPI void APIENTRY glutSetIconTitle(const char *title);
+GLUTAPI void APIENTRY glutPositionWindow(int x, int y);
+GLUTAPI void APIENTRY glutReshapeWindow(int width, int height);
+GLUTAPI void APIENTRY glutPopWindow(void);
+GLUTAPI void APIENTRY glutPushWindow(void);
+GLUTAPI void APIENTRY glutIconifyWindow(void);
+GLUTAPI void APIENTRY glutShowWindow(void);
+GLUTAPI void APIENTRY glutHideWindow(void);
+#if (GLUT_API_VERSION >= 3)
+GLUTAPI void APIENTRY glutFullScreen(void);
+GLUTAPI void APIENTRY glutSetCursor(int cursor);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI void APIENTRY glutWarpPointer(int x, int y);
+#endif
+
+/* GLUT overlay sub-API. */
+GLUTAPI void APIENTRY glutEstablishOverlay(void);
+GLUTAPI void APIENTRY glutRemoveOverlay(void);
+GLUTAPI void APIENTRY glutUseLayer(GLenum layer);
+GLUTAPI void APIENTRY glutPostOverlayRedisplay(void);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
+GLUTAPI void APIENTRY glutPostWindowOverlayRedisplay(int win);
+#endif
+GLUTAPI void APIENTRY glutShowOverlay(void);
+GLUTAPI void APIENTRY glutHideOverlay(void);
+#endif
+
+/* GLUT menu sub-API. */
+GLUTAPI int APIENTRY glutCreateMenu(void (GLUTCALLBACK *func)(int));
+#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
+GLUTAPI int APIENTRY __glutCreateMenuWithExit(void (GLUTCALLBACK *func)(int), void (__cdecl *exitfunc)(int));
+#ifndef GLUT_BUILDING_LIB
+static int APIENTRY glutCreateMenu_ATEXIT_HACK(void (GLUTCALLBACK *func)(int)) { return __glutCreateMenuWithExit(func, exit); }
+#define glutCreateMenu glutCreateMenu_ATEXIT_HACK
+#endif
+#endif
+GLUTAPI void APIENTRY glutDestroyMenu(int menu);
+GLUTAPI int APIENTRY glutGetMenu(void);
+GLUTAPI void APIENTRY glutSetMenu(int menu);
+GLUTAPI void APIENTRY glutAddMenuEntry(const char *label, int value);
+GLUTAPI void APIENTRY glutAddSubMenu(const char *label, int submenu);
+GLUTAPI void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value);
+GLUTAPI void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu);
+GLUTAPI void APIENTRY glutRemoveMenuItem(int item);
+GLUTAPI void APIENTRY glutAttachMenu(int button);
+GLUTAPI void APIENTRY glutDetachMenu(int button);
+
+/* GLUT window callback sub-API. */
+GLUTAPI void APIENTRY glutDisplayFunc(void (GLUTCALLBACK *func)(void));
+GLUTAPI void APIENTRY glutReshapeFunc(void (GLUTCALLBACK *func)(int width, int height));
+GLUTAPI void APIENTRY glutKeyboardFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y));
+GLUTAPI void APIENTRY glutMouseFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y));
+GLUTAPI void APIENTRY glutMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
+GLUTAPI void APIENTRY glutPassiveMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
+GLUTAPI void APIENTRY glutEntryFunc(void (GLUTCALLBACK *func)(int state));
+GLUTAPI void APIENTRY glutVisibilityFunc(void (GLUTCALLBACK *func)(int state));
+GLUTAPI void APIENTRY glutIdleFunc(void (GLUTCALLBACK *func)(void));
+GLUTAPI void APIENTRY glutTimerFunc(unsigned int millis, void (GLUTCALLBACK *func)(int value), int value);
+GLUTAPI void APIENTRY glutMenuStateFunc(void (GLUTCALLBACK *func)(int state));
+#if (GLUT_API_VERSION >= 2)
+GLUTAPI void APIENTRY glutSpecialFunc(void (GLUTCALLBACK *func)(int key, int x, int y));
+GLUTAPI void APIENTRY glutSpaceballMotionFunc(void (GLUTCALLBACK *func)(int x, int y, int z));
+GLUTAPI void APIENTRY glutSpaceballRotateFunc(void (GLUTCALLBACK *func)(int x, int y, int z));
+GLUTAPI void APIENTRY glutSpaceballButtonFunc(void (GLUTCALLBACK *func)(int button, int state));
+GLUTAPI void APIENTRY glutButtonBoxFunc(void (GLUTCALLBACK *func)(int button, int state));
+GLUTAPI void APIENTRY glutDialsFunc(void (GLUTCALLBACK *func)(int dial, int value));
+GLUTAPI void APIENTRY glutTabletMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
+GLUTAPI void APIENTRY glutTabletButtonFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y));
+#if (GLUT_API_VERSION >= 3)
+GLUTAPI void APIENTRY glutMenuStatusFunc(void (GLUTCALLBACK *func)(int status, int x, int y));
+GLUTAPI void APIENTRY glutOverlayDisplayFunc(void (GLUTCALLBACK *func)(void));
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI void APIENTRY glutWindowStatusFunc(void (GLUTCALLBACK *func)(int state));
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+GLUTAPI void APIENTRY glutKeyboardUpFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y));
+GLUTAPI void APIENTRY glutSpecialUpFunc(void (GLUTCALLBACK *func)(int key, int x, int y));
+GLUTAPI void APIENTRY glutJoystickFunc(void (GLUTCALLBACK *func)(unsigned int buttonMask, int x, int y, int z), int pollInterval);
+#endif
+#endif
+#endif
+
+/* GLUT color index sub-API. */
+GLUTAPI void APIENTRY glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue);
+GLUTAPI GLfloat APIENTRY glutGetColor(int ndx, int component);
+GLUTAPI void APIENTRY glutCopyColormap(int win);
+
+/* GLUT state retrieval sub-API. */
+GLUTAPI int APIENTRY glutGet(GLenum type);
+GLUTAPI int APIENTRY glutDeviceGet(GLenum type);
+#if (GLUT_API_VERSION >= 2)
+/* GLUT extension support sub-API */
+GLUTAPI int APIENTRY glutExtensionSupported(const char *name);
+#endif
+#if (GLUT_API_VERSION >= 3)
+GLUTAPI int APIENTRY glutGetModifiers(void);
+GLUTAPI int APIENTRY glutLayerGet(GLenum type);
+#endif
+
+/* GLUT font sub-API */
+GLUTAPI void APIENTRY glutBitmapCharacter(void *font, int character);
+GLUTAPI int APIENTRY glutBitmapWidth(void *font, int character);
+GLUTAPI void APIENTRY glutStrokeCharacter(void *font, int character);
+GLUTAPI int APIENTRY glutStrokeWidth(void *font, int character);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI int APIENTRY glutBitmapLength(void *font, const unsigned char *string);
+GLUTAPI int APIENTRY glutStrokeLength(void *font, const unsigned char *string);
+#endif
+
+/* GLUT pre-built models sub-API */
+GLUTAPI void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutWireCube(GLdouble size);
+GLUTAPI void APIENTRY glutSolidCube(GLdouble size);
+GLUTAPI void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+GLUTAPI void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+GLUTAPI void APIENTRY glutWireDodecahedron(void);
+GLUTAPI void APIENTRY glutSolidDodecahedron(void);
+GLUTAPI void APIENTRY glutWireTeapot(GLdouble size);
+GLUTAPI void APIENTRY glutSolidTeapot(GLdouble size);
+GLUTAPI void APIENTRY glutWireOctahedron(void);
+GLUTAPI void APIENTRY glutSolidOctahedron(void);
+GLUTAPI void APIENTRY glutWireTetrahedron(void);
+GLUTAPI void APIENTRY glutSolidTetrahedron(void);
+GLUTAPI void APIENTRY glutWireIcosahedron(void);
+GLUTAPI void APIENTRY glutSolidIcosahedron(void);
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+/* GLUT video resize sub-API. */
+GLUTAPI int APIENTRY glutVideoResizeGet(GLenum param);
+GLUTAPI void APIENTRY glutSetupVideoResizing(void);
+GLUTAPI void APIENTRY glutStopVideoResizing(void);
+GLUTAPI void APIENTRY glutVideoResize(int x, int y, int width, int height);
+GLUTAPI void APIENTRY glutVideoPan(int x, int y, int width, int height);
+
+/* GLUT debugging sub-API. */
+GLUTAPI void APIENTRY glutReportErrors(void);
+#endif
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+/* GLUT device control sub-API. */
+/* glutSetKeyRepeat modes. */
+#define GLUT_KEY_REPEAT_OFF		0
+#define GLUT_KEY_REPEAT_ON		1
+#define GLUT_KEY_REPEAT_DEFAULT		2
+
+/* Joystick button masks. */
+#define GLUT_JOYSTICK_BUTTON_A		1
+#define GLUT_JOYSTICK_BUTTON_B		2
+#define GLUT_JOYSTICK_BUTTON_C		4
+#define GLUT_JOYSTICK_BUTTON_D		8
+
+GLUTAPI void APIENTRY glutIgnoreKeyRepeat(int ignore);
+GLUTAPI void APIENTRY glutSetKeyRepeat(int repeatMode);
+GLUTAPI void APIENTRY glutForceJoystickFunc(void);
+
+/* GLUT game mode sub-API. */
+/* glutGameModeGet. */
+#define GLUT_GAME_MODE_ACTIVE           ((GLenum) 0)
+#define GLUT_GAME_MODE_POSSIBLE         ((GLenum) 1)
+#define GLUT_GAME_MODE_WIDTH            ((GLenum) 2)
+#define GLUT_GAME_MODE_HEIGHT           ((GLenum) 3)
+#define GLUT_GAME_MODE_PIXEL_DEPTH      ((GLenum) 4)
+#define GLUT_GAME_MODE_REFRESH_RATE     ((GLenum) 5)
+#define GLUT_GAME_MODE_DISPLAY_CHANGED  ((GLenum) 6)
+
+GLUTAPI void APIENTRY glutGameModeString(const char *string);
+GLUTAPI int APIENTRY glutEnterGameMode(void);
+GLUTAPI void APIENTRY glutLeaveGameMode(void);
+GLUTAPI int APIENTRY glutGameModeGet(GLenum mode);
+#endif
+
+#ifdef __cplusplus
+}
+
+#endif
+
+#ifdef GLUT_APIENTRY_DEFINED
+# undef GLUT_APIENTRY_DEFINED
+# undef APIENTRY
+#endif
+
+#ifdef GLUT_WINGDIAPI_DEFINED
+# undef GLUT_WINGDIAPI_DEFINED
+# undef WINGDIAPI
+#endif
+
+#ifdef GLUT_DEFINED___CDECL
+# undef GLUT_DEFINED___CDECL
+# undef __cdecl
+#endif
+
+#ifdef GLUT_DEFINED__CRTIMP
+# undef GLUT_DEFINED__CRTIMP
+# undef _CRTIMP
+#endif
+
+#endif                  /* __glut_h__ */
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/glew.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/glew.h	(revision 10)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/glew.h	(revision 10)
@@ -0,0 +1,9113 @@
+/*
+** The OpenGL Extension Wrangler Library
+** Copyright (C) 2004, 2003, 2002, Milan Ikits <milan ikits[at]ieee org>
+** Copyright (C) 2004, 2003, 2002, Marcelo E. Magallon <mmagallo[at]debian org>
+** Copyright (C) 2002, Lev Povalahev
+** All rights reserved.
+** 
+** Redistribution and use in source and binary forms, with or without 
+** modification, are permitted provided that the following conditions are met:
+** 
+** * Redistributions of source code must retain the above copyright notice, 
+**   this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright notice, 
+**   this list of conditions and the following disclaimer in the documentation 
+**   and/or other materials provided with the distribution.
+** * The name of the author may be used to endorse or promote products 
+**   derived from this software without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+** THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+** License Applicability. Except to the extent portions of this file are
+** made subject to an alternative license as permitted in the SGI Free
+** Software License B, Version 1.1 (the "License"), the contents of this
+** file are subject only to the provisions of the License. You may not use
+** this file except in compliance with the License. You may obtain a copy
+** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
+** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
+** 
+** http://oss.sgi.com/projects/FreeB
+** 
+** Note that, as provided in the License, the Software is distributed on an
+** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
+** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
+** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
+** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
+** 
+** Original Code. The Original Code is: OpenGL Sample Implementation,
+** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
+** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
+** Copyright in any portions created by third parties is as indicated
+** elsewhere herein. All Rights Reserved.
+** 
+** Additional Notice Provisions: This software was created using the
+** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has
+** not been independently verified as being compliant with the OpenGL(R)
+** version 1.2.1 Specification.
+*/
+
+#ifndef __glew_h__
+#define __glew_h__
+#define __GLEW_H__
+
+#if defined(__gl_h_) || defined(__GL_H__)
+#error gl.h included before glew.h
+#endif
+#if defined(__glext_h_) || defined(__GLEXT_H_)
+#error glext.h included before glew.h
+#endif
+#if defined(__gl_ATI_h_)
+#error glATI.h included before glew.h
+#endif
+
+#define __gl_h_
+#define __GL_H__
+#define __glext_h_
+#define __GLEXT_H_
+#define __gl_ATI_h_
+#define __GLX_glx_h__
+
+#if defined(_WIN32)
+
+/*
+ * GLEW does not include <windows.h> to avoid name space pollution.
+ * GL needs GLAPI and GLAPIENTRY, GLU needs APIENTRY, CALLBACK, and wchar_t
+ * defined properly.
+ */
+/* <windef.h> */
+#ifndef APIENTRY
+#define GLEW_APIENTRY_DEFINED
+#  if defined(__CYGWIN__) || defined(__MINGW32__)
+#    define APIENTRY __stdcall
+#  elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
+#    define APIENTRY __stdcall
+#  else
+#    define APIENTRY
+#  endif
+#endif
+#ifndef GLAPI
+#  if defined(__CYGWIN__) || defined(__MINGW32__)
+#    define GLAPI extern
+#  endif
+#endif
+/* <winnt.h> */
+#ifndef CALLBACK
+#define GLEW_CALLBACK_DEFINED
+#  if defined(__CYGWIN__) || defined(__MINGW32__)
+#    define CALLBACK __attribute__ ((__stdcall__))
+#  elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
+#    define CALLBACK __stdcall
+#  else
+#    define CALLBACK
+#  endif
+#endif
+/* <wingdi.h> and <winnt.h> */
+#ifndef WINGDIAPI
+#define GLEW_WINGDIAPI_DEFINED
+#define WINGDIAPI __declspec(dllimport)
+#endif
+/* <ctype.h> */
+#if defined(_MSC_VER) && !defined(_WCHAR_T_DEFINED)
+typedef unsigned short wchar_t;
+#  define _WCHAR_T_DEFINED
+#endif
+/* <stddef.h> */
+#if !defined(_W64)
+#  if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
+#    define _W64 __w64
+#  else
+#    define _W64
+#  endif
+#endif
+#if !defined(_PTRDIFF_T_DEFINED) && !defined(_PTRDIFF_T_)
+#  ifdef _WIN64
+typedef __int64 ptrdiff_t;
+#  else
+typedef _W64 int ptrdiff_t;
+#  endif
+#  define _PTRDIFF_T_DEFINED
+#  define _PTRDIFF_T_
+#endif
+
+#ifndef GLAPI
+#  if defined(__CYGWIN__) || defined(__MINGW32__)
+#    define GLAPI extern
+#  else
+#    define GLAPI WINGDIAPI
+#  endif
+#endif
+
+#ifndef GLAPIENTRY
+#define GLAPIENTRY APIENTRY
+#endif
+
+/*
+ * GLEW_STATIC needs to be set when using the static version.
+ * GLEW_BUILD is set when building the DLL version.
+ */
+#ifdef GLEW_STATIC
+#  define GLEWAPI extern
+#else
+#  ifdef GLEW_BUILD
+#    define GLEWAPI extern __declspec(dllexport)
+#  else
+#    define GLEWAPI extern __declspec(dllimport)
+#  endif
+#endif
+
+#else /* _UNIX */
+
+/*
+ * Needed for ptrdiff_t in turn needed by VBO.  This is defined by ISO
+ * C.  On my system, this amounts to _3 lines_ of included code, all of
+ * them pretty much harmless.  If you know of a way of detecting 32 vs
+ * 64 _targets_ at compile time you are free to replace this with
+ * something that's portable.  For now, _this_ is the portable solution.
+ * (mem, 2004-01-04)
+ */
+
+#include <stddef.h>
+
+#define GLEW_APIENTRY_DEFINED
+#define APIENTRY
+#define GLEWAPI extern
+
+/* <glu.h> */
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+#ifndef GLAPIENTRY
+#define GLAPIENTRY
+#endif
+
+#endif /* _WIN32 */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ----------------------------- GL_VERSION_1_1 ---------------------------- */
+
+#ifndef GL_VERSION_1_1
+#define GL_VERSION_1_1 1
+
+typedef unsigned int GLenum;
+typedef unsigned char GLboolean;
+typedef unsigned int GLbitfield;
+typedef signed char GLbyte;
+typedef short GLshort;
+typedef int GLint;
+typedef int GLsizei;
+typedef unsigned char GLubyte;
+typedef unsigned short GLushort;
+typedef unsigned int GLuint;
+typedef float GLfloat;
+typedef float GLclampf;
+typedef double GLdouble;
+typedef double GLclampd;
+typedef void GLvoid;
+
+#define GL_ACCUM 0x0100
+#define GL_LOAD 0x0101
+#define GL_RETURN 0x0102
+#define GL_MULT 0x0103
+#define GL_ADD 0x0104
+#define GL_NEVER 0x0200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+#define GL_CURRENT_BIT 0x00000001
+#define GL_POINT_BIT 0x00000002
+#define GL_LINE_BIT 0x00000004
+#define GL_POLYGON_BIT 0x00000008
+#define GL_POLYGON_STIPPLE_BIT 0x00000010
+#define GL_PIXEL_MODE_BIT 0x00000020
+#define GL_LIGHTING_BIT 0x00000040
+#define GL_FOG_BIT 0x00000080
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_ACCUM_BUFFER_BIT 0x00000200
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_VIEWPORT_BIT 0x00000800
+#define GL_TRANSFORM_BIT 0x00001000
+#define GL_ENABLE_BIT 0x00002000
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_HINT_BIT 0x00008000
+#define GL_EVAL_BIT 0x00010000
+#define GL_LIST_BIT 0x00020000
+#define GL_TEXTURE_BIT 0x00040000
+#define GL_SCISSOR_BIT 0x00080000
+#define GL_ALL_ATTRIB_BITS 0x000fffff
+#define GL_POINTS 0x0000
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_STRIP 0x0003
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_QUADS 0x0007
+#define GL_QUAD_STRIP 0x0008
+#define GL_POLYGON 0x0009
+#define GL_ZERO 0
+#define GL_ONE 1
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+#define GL_TRUE 1
+#define GL_FALSE 0
+#define GL_CLIP_PLANE0 0x3000
+#define GL_CLIP_PLANE1 0x3001
+#define GL_CLIP_PLANE2 0x3002
+#define GL_CLIP_PLANE3 0x3003
+#define GL_CLIP_PLANE4 0x3004
+#define GL_CLIP_PLANE5 0x3005
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_2_BYTES 0x1407
+#define GL_3_BYTES 0x1408
+#define GL_4_BYTES 0x1409
+#define GL_DOUBLE 0x140A
+#define GL_NONE 0
+#define GL_FRONT_LEFT 0x0400
+#define GL_FRONT_RIGHT 0x0401
+#define GL_BACK_LEFT 0x0402
+#define GL_BACK_RIGHT 0x0403
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_LEFT 0x0406
+#define GL_RIGHT 0x0407
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_AUX0 0x0409
+#define GL_AUX1 0x040A
+#define GL_AUX2 0x040B
+#define GL_AUX3 0x040C
+#define GL_NO_ERROR 0
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_OPERATION 0x0502
+#define GL_STACK_OVERFLOW 0x0503
+#define GL_STACK_UNDERFLOW 0x0504
+#define GL_OUT_OF_MEMORY 0x0505
+#define GL_2D 0x0600
+#define GL_3D 0x0601
+#define GL_3D_COLOR 0x0602
+#define GL_3D_COLOR_TEXTURE 0x0603
+#define GL_4D_COLOR_TEXTURE 0x0604
+#define GL_PASS_THROUGH_TOKEN 0x0700
+#define GL_POINT_TOKEN 0x0701
+#define GL_LINE_TOKEN 0x0702
+#define GL_POLYGON_TOKEN 0x0703
+#define GL_BITMAP_TOKEN 0x0704
+#define GL_DRAW_PIXEL_TOKEN 0x0705
+#define GL_COPY_PIXEL_TOKEN 0x0706
+#define GL_LINE_RESET_TOKEN 0x0707
+#define GL_EXP 0x0800
+#define GL_EXP2 0x0801
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+#define GL_COEFF 0x0A00
+#define GL_ORDER 0x0A01
+#define GL_DOMAIN 0x0A02
+#define GL_CURRENT_COLOR 0x0B00
+#define GL_CURRENT_INDEX 0x0B01
+#define GL_CURRENT_NORMAL 0x0B02
+#define GL_CURRENT_TEXTURE_COORDS 0x0B03
+#define GL_CURRENT_RASTER_COLOR 0x0B04
+#define GL_CURRENT_RASTER_INDEX 0x0B05
+#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06
+#define GL_CURRENT_RASTER_POSITION 0x0B07
+#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08
+#define GL_CURRENT_RASTER_DISTANCE 0x0B09
+#define GL_POINT_SMOOTH 0x0B10
+#define GL_POINT_SIZE 0x0B11
+#define GL_POINT_SIZE_RANGE 0x0B12
+#define GL_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_LINE_SMOOTH 0x0B20
+#define GL_LINE_WIDTH 0x0B21
+#define GL_LINE_WIDTH_RANGE 0x0B22
+#define GL_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_LINE_STIPPLE 0x0B24
+#define GL_LINE_STIPPLE_PATTERN 0x0B25
+#define GL_LINE_STIPPLE_REPEAT 0x0B26
+#define GL_LIST_MODE 0x0B30
+#define GL_MAX_LIST_NESTING 0x0B31
+#define GL_LIST_BASE 0x0B32
+#define GL_LIST_INDEX 0x0B33
+#define GL_POLYGON_MODE 0x0B40
+#define GL_POLYGON_SMOOTH 0x0B41
+#define GL_POLYGON_STIPPLE 0x0B42
+#define GL_EDGE_FLAG 0x0B43
+#define GL_CULL_FACE 0x0B44
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_LIGHTING 0x0B50
+#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51
+#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52
+#define GL_LIGHT_MODEL_AMBIENT 0x0B53
+#define GL_SHADE_MODEL 0x0B54
+#define GL_COLOR_MATERIAL_FACE 0x0B55
+#define GL_COLOR_MATERIAL_PARAMETER 0x0B56
+#define GL_COLOR_MATERIAL 0x0B57
+#define GL_FOG 0x0B60
+#define GL_FOG_INDEX 0x0B61
+#define GL_FOG_DENSITY 0x0B62
+#define GL_FOG_START 0x0B63
+#define GL_FOG_END 0x0B64
+#define GL_FOG_MODE 0x0B65
+#define GL_FOG_COLOR 0x0B66
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_TEST 0x0B71
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_ACCUM_CLEAR_VALUE 0x0B80
+#define GL_STENCIL_TEST 0x0B90
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_MATRIX_MODE 0x0BA0
+#define GL_NORMALIZE 0x0BA1
+#define GL_VIEWPORT 0x0BA2
+#define GL_MODELVIEW_STACK_DEPTH 0x0BA3
+#define GL_PROJECTION_STACK_DEPTH 0x0BA4
+#define GL_TEXTURE_STACK_DEPTH 0x0BA5
+#define GL_MODELVIEW_MATRIX 0x0BA6
+#define GL_PROJECTION_MATRIX 0x0BA7
+#define GL_TEXTURE_MATRIX 0x0BA8
+#define GL_ATTRIB_STACK_DEPTH 0x0BB0
+#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1
+#define GL_ALPHA_TEST 0x0BC0
+#define GL_ALPHA_TEST_FUNC 0x0BC1
+#define GL_ALPHA_TEST_REF 0x0BC2
+#define GL_DITHER 0x0BD0
+#define GL_BLEND_DST 0x0BE0
+#define GL_BLEND_SRC 0x0BE1
+#define GL_BLEND 0x0BE2
+#define GL_LOGIC_OP_MODE 0x0BF0
+#define GL_INDEX_LOGIC_OP 0x0BF1
+#define GL_COLOR_LOGIC_OP 0x0BF2
+#define GL_AUX_BUFFERS 0x0C00
+#define GL_DRAW_BUFFER 0x0C01
+#define GL_READ_BUFFER 0x0C02
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_INDEX_CLEAR_VALUE 0x0C20
+#define GL_INDEX_WRITEMASK 0x0C21
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_INDEX_MODE 0x0C30
+#define GL_RGBA_MODE 0x0C31
+#define GL_DOUBLEBUFFER 0x0C32
+#define GL_STEREO 0x0C33
+#define GL_RENDER_MODE 0x0C40
+#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50
+#define GL_POINT_SMOOTH_HINT 0x0C51
+#define GL_LINE_SMOOTH_HINT 0x0C52
+#define GL_POLYGON_SMOOTH_HINT 0x0C53
+#define GL_FOG_HINT 0x0C54
+#define GL_TEXTURE_GEN_S 0x0C60
+#define GL_TEXTURE_GEN_T 0x0C61
+#define GL_TEXTURE_GEN_R 0x0C62
+#define GL_TEXTURE_GEN_Q 0x0C63
+#define GL_PIXEL_MAP_I_TO_I 0x0C70
+#define GL_PIXEL_MAP_S_TO_S 0x0C71
+#define GL_PIXEL_MAP_I_TO_R 0x0C72
+#define GL_PIXEL_MAP_I_TO_G 0x0C73
+#define GL_PIXEL_MAP_I_TO_B 0x0C74
+#define GL_PIXEL_MAP_I_TO_A 0x0C75
+#define GL_PIXEL_MAP_R_TO_R 0x0C76
+#define GL_PIXEL_MAP_G_TO_G 0x0C77
+#define GL_PIXEL_MAP_B_TO_B 0x0C78
+#define GL_PIXEL_MAP_A_TO_A 0x0C79
+#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0
+#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1
+#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2
+#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3
+#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4
+#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5
+#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6
+#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7
+#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8
+#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9
+#define GL_UNPACK_SWAP_BYTES 0x0CF0
+#define GL_UNPACK_LSB_FIRST 0x0CF1
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_PACK_SWAP_BYTES 0x0D00
+#define GL_PACK_LSB_FIRST 0x0D01
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_MAP_COLOR 0x0D10
+#define GL_MAP_STENCIL 0x0D11
+#define GL_INDEX_SHIFT 0x0D12
+#define GL_INDEX_OFFSET 0x0D13
+#define GL_RED_SCALE 0x0D14
+#define GL_RED_BIAS 0x0D15
+#define GL_ZOOM_X 0x0D16
+#define GL_ZOOM_Y 0x0D17
+#define GL_GREEN_SCALE 0x0D18
+#define GL_GREEN_BIAS 0x0D19
+#define GL_BLUE_SCALE 0x0D1A
+#define GL_BLUE_BIAS 0x0D1B
+#define GL_ALPHA_SCALE 0x0D1C
+#define GL_ALPHA_BIAS 0x0D1D
+#define GL_DEPTH_SCALE 0x0D1E
+#define GL_DEPTH_BIAS 0x0D1F
+#define GL_MAX_EVAL_ORDER 0x0D30
+#define GL_MAX_LIGHTS 0x0D31
+#define GL_MAX_CLIP_PLANES 0x0D32
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_PIXEL_MAP_TABLE 0x0D34
+#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35
+#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36
+#define GL_MAX_NAME_STACK_DEPTH 0x0D37
+#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38
+#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_INDEX_BITS 0x0D51
+#define GL_RED_BITS 0x0D52
+#define GL_GREEN_BITS 0x0D53
+#define GL_BLUE_BITS 0x0D54
+#define GL_ALPHA_BITS 0x0D55
+#define GL_DEPTH_BITS 0x0D56
+#define GL_STENCIL_BITS 0x0D57
+#define GL_ACCUM_RED_BITS 0x0D58
+#define GL_ACCUM_GREEN_BITS 0x0D59
+#define GL_ACCUM_BLUE_BITS 0x0D5A
+#define GL_ACCUM_ALPHA_BITS 0x0D5B
+#define GL_NAME_STACK_DEPTH 0x0D70
+#define GL_AUTO_NORMAL 0x0D80
+#define GL_MAP1_COLOR_4 0x0D90
+#define GL_MAP1_INDEX 0x0D91
+#define GL_MAP1_NORMAL 0x0D92
+#define GL_MAP1_TEXTURE_COORD_1 0x0D93
+#define GL_MAP1_TEXTURE_COORD_2 0x0D94
+#define GL_MAP1_TEXTURE_COORD_3 0x0D95
+#define GL_MAP1_TEXTURE_COORD_4 0x0D96
+#define GL_MAP1_VERTEX_3 0x0D97
+#define GL_MAP1_VERTEX_4 0x0D98
+#define GL_MAP2_COLOR_4 0x0DB0
+#define GL_MAP2_INDEX 0x0DB1
+#define GL_MAP2_NORMAL 0x0DB2
+#define GL_MAP2_TEXTURE_COORD_1 0x0DB3
+#define GL_MAP2_TEXTURE_COORD_2 0x0DB4
+#define GL_MAP2_TEXTURE_COORD_3 0x0DB5
+#define GL_MAP2_TEXTURE_COORD_4 0x0DB6
+#define GL_MAP2_VERTEX_3 0x0DB7
+#define GL_MAP2_VERTEX_4 0x0DB8
+#define GL_MAP1_GRID_DOMAIN 0x0DD0
+#define GL_MAP1_GRID_SEGMENTS 0x0DD1
+#define GL_MAP2_GRID_DOMAIN 0x0DD2
+#define GL_MAP2_GRID_SEGMENTS 0x0DD3
+#define GL_TEXTURE_1D 0x0DE0
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0
+#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1
+#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2
+#define GL_SELECTION_BUFFER_POINTER 0x0DF3
+#define GL_SELECTION_BUFFER_SIZE 0x0DF4
+#define GL_TEXTURE_WIDTH 0x1000
+#define GL_TEXTURE_HEIGHT 0x1001
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_TEXTURE_BORDER_COLOR 0x1004
+#define GL_TEXTURE_BORDER 0x1005
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+#define GL_LIGHT0 0x4000
+#define GL_LIGHT1 0x4001
+#define GL_LIGHT2 0x4002
+#define GL_LIGHT3 0x4003
+#define GL_LIGHT4 0x4004
+#define GL_LIGHT5 0x4005
+#define GL_LIGHT6 0x4006
+#define GL_LIGHT7 0x4007
+#define GL_AMBIENT 0x1200
+#define GL_DIFFUSE 0x1201
+#define GL_SPECULAR 0x1202
+#define GL_POSITION 0x1203
+#define GL_SPOT_DIRECTION 0x1204
+#define GL_SPOT_EXPONENT 0x1205
+#define GL_SPOT_CUTOFF 0x1206
+#define GL_CONSTANT_ATTENUATION 0x1207
+#define GL_LINEAR_ATTENUATION 0x1208
+#define GL_QUADRATIC_ATTENUATION 0x1209
+#define GL_COMPILE 0x1300
+#define GL_COMPILE_AND_EXECUTE 0x1301
+#define GL_CLEAR 0x1500
+#define GL_AND 0x1501
+#define GL_AND_REVERSE 0x1502
+#define GL_COPY 0x1503
+#define GL_AND_INVERTED 0x1504
+#define GL_NOOP 0x1505
+#define GL_XOR 0x1506
+#define GL_OR 0x1507
+#define GL_NOR 0x1508
+#define GL_EQUIV 0x1509
+#define GL_INVERT 0x150A
+#define GL_OR_REVERSE 0x150B
+#define GL_COPY_INVERTED 0x150C
+#define GL_OR_INVERTED 0x150D
+#define GL_NAND 0x150E
+#define GL_SET 0x150F
+#define GL_EMISSION 0x1600
+#define GL_SHININESS 0x1601
+#define GL_AMBIENT_AND_DIFFUSE 0x1602
+#define GL_COLOR_INDEXES 0x1603
+#define GL_MODELVIEW 0x1700
+#define GL_PROJECTION 0x1701
+#define GL_TEXTURE 0x1702
+#define GL_COLOR 0x1800
+#define GL_DEPTH 0x1801
+#define GL_STENCIL 0x1802
+#define GL_COLOR_INDEX 0x1900
+#define GL_STENCIL_INDEX 0x1901
+#define GL_DEPTH_COMPONENT 0x1902
+#define GL_RED 0x1903
+#define GL_GREEN 0x1904
+#define GL_BLUE 0x1905
+#define GL_ALPHA 0x1906
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE_ALPHA 0x190A
+#define GL_BITMAP 0x1A00
+#define GL_POINT 0x1B00
+#define GL_LINE 0x1B01
+#define GL_FILL 0x1B02
+#define GL_RENDER 0x1C00
+#define GL_FEEDBACK 0x1C01
+#define GL_SELECT 0x1C02
+#define GL_FLAT 0x1D00
+#define GL_SMOOTH 0x1D01
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+#define GL_S 0x2000
+#define GL_T 0x2001
+#define GL_R 0x2002
+#define GL_Q 0x2003
+#define GL_MODULATE 0x2100
+#define GL_DECAL 0x2101
+#define GL_TEXTURE_ENV_MODE 0x2200
+#define GL_TEXTURE_ENV_COLOR 0x2201
+#define GL_TEXTURE_ENV 0x2300
+#define GL_EYE_LINEAR 0x2400
+#define GL_OBJECT_LINEAR 0x2401
+#define GL_SPHERE_MAP 0x2402
+#define GL_TEXTURE_GEN_MODE 0x2500
+#define GL_OBJECT_PLANE 0x2501
+#define GL_EYE_PLANE 0x2502
+#define GL_NEAREST 0x2600
+#define GL_LINEAR 0x2601
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_CLAMP 0x2900
+#define GL_REPEAT 0x2901
+#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001
+#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002
+#define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_POINT 0x2A01
+#define GL_POLYGON_OFFSET_LINE 0x2A02
+#define GL_POLYGON_OFFSET_FILL 0x8037
+#define GL_ALPHA4 0x803B
+#define GL_ALPHA8 0x803C
+#define GL_ALPHA12 0x803D
+#define GL_ALPHA16 0x803E
+#define GL_LUMINANCE4 0x803F
+#define GL_LUMINANCE8 0x8040
+#define GL_LUMINANCE12 0x8041
+#define GL_LUMINANCE16 0x8042
+#define GL_LUMINANCE4_ALPHA4 0x8043
+#define GL_LUMINANCE6_ALPHA2 0x8044
+#define GL_LUMINANCE8_ALPHA8 0x8045
+#define GL_LUMINANCE12_ALPHA4 0x8046
+#define GL_LUMINANCE12_ALPHA12 0x8047
+#define GL_LUMINANCE16_ALPHA16 0x8048
+#define GL_INTENSITY 0x8049
+#define GL_INTENSITY4 0x804A
+#define GL_INTENSITY8 0x804B
+#define GL_INTENSITY12 0x804C
+#define GL_INTENSITY16 0x804D
+#define GL_R3_G3_B2 0x2A10
+#define GL_RGB4 0x804F
+#define GL_RGB5 0x8050
+#define GL_RGB8 0x8051
+#define GL_RGB10 0x8052
+#define GL_RGB12 0x8053
+#define GL_RGB16 0x8054
+#define GL_RGBA2 0x8055
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGBA8 0x8058
+#define GL_RGB10_A2 0x8059
+#define GL_RGBA12 0x805A
+#define GL_RGBA16 0x805B
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE 0x8060
+#define GL_TEXTURE_INTENSITY_SIZE 0x8061
+#define GL_PROXY_TEXTURE_1D 0x8063
+#define GL_PROXY_TEXTURE_2D 0x8064
+#define GL_TEXTURE_PRIORITY 0x8066
+#define GL_TEXTURE_RESIDENT 0x8067
+#define GL_TEXTURE_BINDING_1D 0x8068
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_VERTEX_ARRAY 0x8074
+#define GL_NORMAL_ARRAY 0x8075
+#define GL_COLOR_ARRAY 0x8076
+#define GL_INDEX_ARRAY 0x8077
+#define GL_TEXTURE_COORD_ARRAY 0x8078
+#define GL_EDGE_FLAG_ARRAY 0x8079
+#define GL_VERTEX_ARRAY_SIZE 0x807A
+#define GL_VERTEX_ARRAY_TYPE 0x807B
+#define GL_VERTEX_ARRAY_STRIDE 0x807C
+#define GL_NORMAL_ARRAY_TYPE 0x807E
+#define GL_NORMAL_ARRAY_STRIDE 0x807F
+#define GL_COLOR_ARRAY_SIZE 0x8081
+#define GL_COLOR_ARRAY_TYPE 0x8082
+#define GL_COLOR_ARRAY_STRIDE 0x8083
+#define GL_INDEX_ARRAY_TYPE 0x8085
+#define GL_INDEX_ARRAY_STRIDE 0x8086
+#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A
+#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C
+#define GL_VERTEX_ARRAY_POINTER 0x808E
+#define GL_NORMAL_ARRAY_POINTER 0x808F
+#define GL_COLOR_ARRAY_POINTER 0x8090
+#define GL_INDEX_ARRAY_POINTER 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093
+#define GL_V2F 0x2A20
+#define GL_V3F 0x2A21
+#define GL_C4UB_V2F 0x2A22
+#define GL_C4UB_V3F 0x2A23
+#define GL_C3F_V3F 0x2A24
+#define GL_N3F_V3F 0x2A25
+#define GL_C4F_N3F_V3F 0x2A26
+#define GL_T2F_V3F 0x2A27
+#define GL_T4F_V4F 0x2A28
+#define GL_T2F_C4UB_V3F 0x2A29
+#define GL_T2F_C3F_V3F 0x2A2A
+#define GL_T2F_N3F_V3F 0x2A2B
+#define GL_T2F_C4F_N3F_V3F 0x2A2C
+#define GL_T4F_C4F_N3F_V4F 0x2A2D
+#define GL_LOGIC_OP GL_INDEX_LOGIC_OP
+#define GL_TEXTURE_COMPONENTS GL_TEXTURE_INTERNAL_FORMAT
+#define GL_COLOR_INDEX1_EXT 0x80E2
+#define GL_COLOR_INDEX2_EXT 0x80E3
+#define GL_COLOR_INDEX4_EXT 0x80E4
+#define GL_COLOR_INDEX8_EXT 0x80E5
+#define GL_COLOR_INDEX12_EXT 0x80E6
+#define GL_COLOR_INDEX16_EXT 0x80E7
+
+GLAPI void GLAPIENTRY glAccum (GLenum op, GLfloat value);
+GLAPI void GLAPIENTRY glAlphaFunc (GLenum func, GLclampf ref);
+GLAPI GLboolean GLAPIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences);
+GLAPI void GLAPIENTRY glArrayElement (GLint i);
+GLAPI void GLAPIENTRY glBegin (GLenum mode);
+GLAPI void GLAPIENTRY glBindTexture (GLenum target, GLuint texture);
+GLAPI void GLAPIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
+GLAPI void GLAPIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
+GLAPI void GLAPIENTRY glCallList (GLuint list);
+GLAPI void GLAPIENTRY glCallLists (GLsizei n, GLenum type, const GLvoid *lists);
+GLAPI void GLAPIENTRY glClear (GLbitfield mask);
+GLAPI void GLAPIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI void GLAPIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+GLAPI void GLAPIENTRY glClearDepth (GLclampd depth);
+GLAPI void GLAPIENTRY glClearIndex (GLfloat c);
+GLAPI void GLAPIENTRY glClearStencil (GLint s);
+GLAPI void GLAPIENTRY glClipPlane (GLenum plane, const GLdouble *equation);
+GLAPI void GLAPIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue);
+GLAPI void GLAPIENTRY glColor3bv (const GLbyte *v);
+GLAPI void GLAPIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue);
+GLAPI void GLAPIENTRY glColor3dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue);
+GLAPI void GLAPIENTRY glColor3fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glColor3i (GLint red, GLint green, GLint blue);
+GLAPI void GLAPIENTRY glColor3iv (const GLint *v);
+GLAPI void GLAPIENTRY glColor3s (GLshort red, GLshort green, GLshort blue);
+GLAPI void GLAPIENTRY glColor3sv (const GLshort *v);
+GLAPI void GLAPIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue);
+GLAPI void GLAPIENTRY glColor3ubv (const GLubyte *v);
+GLAPI void GLAPIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue);
+GLAPI void GLAPIENTRY glColor3uiv (const GLuint *v);
+GLAPI void GLAPIENTRY glColor3us (GLushort red, GLushort green, GLushort blue);
+GLAPI void GLAPIENTRY glColor3usv (const GLushort *v);
+GLAPI void GLAPIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha);
+GLAPI void GLAPIENTRY glColor4bv (const GLbyte *v);
+GLAPI void GLAPIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
+GLAPI void GLAPIENTRY glColor4dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI void GLAPIENTRY glColor4fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha);
+GLAPI void GLAPIENTRY glColor4iv (const GLint *v);
+GLAPI void GLAPIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha);
+GLAPI void GLAPIENTRY glColor4sv (const GLshort *v);
+GLAPI void GLAPIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
+GLAPI void GLAPIENTRY glColor4ubv (const GLubyte *v);
+GLAPI void GLAPIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+GLAPI void GLAPIENTRY glColor4uiv (const GLuint *v);
+GLAPI void GLAPIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha);
+GLAPI void GLAPIENTRY glColor4usv (const GLushort *v);
+GLAPI void GLAPIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+GLAPI void GLAPIENTRY glColorMaterial (GLenum face, GLenum mode);
+GLAPI void GLAPIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
+GLAPI void GLAPIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void GLAPIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void GLAPIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void GLAPIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void GLAPIENTRY glCullFace (GLenum mode);
+GLAPI void GLAPIENTRY glDeleteLists (GLuint list, GLsizei range);
+GLAPI void GLAPIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
+GLAPI void GLAPIENTRY glDepthFunc (GLenum func);
+GLAPI void GLAPIENTRY glDepthMask (GLboolean flag);
+GLAPI void GLAPIENTRY glDepthRange (GLclampd zNear, GLclampd zFar);
+GLAPI void GLAPIENTRY glDisable (GLenum cap);
+GLAPI void GLAPIENTRY glDisableClientState (GLenum array);
+GLAPI void GLAPIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
+GLAPI void GLAPIENTRY glDrawBuffer (GLenum mode);
+GLAPI void GLAPIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
+GLAPI void GLAPIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void GLAPIENTRY glEdgeFlag (GLboolean flag);
+GLAPI void GLAPIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glEdgeFlagv (const GLboolean *flag);
+GLAPI void GLAPIENTRY glEnable (GLenum cap);
+GLAPI void GLAPIENTRY glEnableClientState (GLenum array);
+GLAPI void GLAPIENTRY glEnd (void);
+GLAPI void GLAPIENTRY glEndList (void);
+GLAPI void GLAPIENTRY glEvalCoord1d (GLdouble u);
+GLAPI void GLAPIENTRY glEvalCoord1dv (const GLdouble *u);
+GLAPI void GLAPIENTRY glEvalCoord1f (GLfloat u);
+GLAPI void GLAPIENTRY glEvalCoord1fv (const GLfloat *u);
+GLAPI void GLAPIENTRY glEvalCoord2d (GLdouble u, GLdouble v);
+GLAPI void GLAPIENTRY glEvalCoord2dv (const GLdouble *u);
+GLAPI void GLAPIENTRY glEvalCoord2f (GLfloat u, GLfloat v);
+GLAPI void GLAPIENTRY glEvalCoord2fv (const GLfloat *u);
+GLAPI void GLAPIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2);
+GLAPI void GLAPIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
+GLAPI void GLAPIENTRY glEvalPoint1 (GLint i);
+GLAPI void GLAPIENTRY glEvalPoint2 (GLint i, GLint j);
+GLAPI void GLAPIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer);
+GLAPI void GLAPIENTRY glFinish (void);
+GLAPI void GLAPIENTRY glFlush (void);
+GLAPI void GLAPIENTRY glFogf (GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glFogfv (GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glFogi (GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glFogiv (GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glFrontFace (GLenum mode);
+GLAPI void GLAPIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI GLuint GLAPIENTRY glGenLists (GLsizei range);
+GLAPI void GLAPIENTRY glGenTextures (GLsizei n, GLuint *textures);
+GLAPI void GLAPIENTRY glGetBooleanv (GLenum pname, GLboolean *params);
+GLAPI void GLAPIENTRY glGetClipPlane (GLenum plane, GLdouble *equation);
+GLAPI void GLAPIENTRY glGetDoublev (GLenum pname, GLdouble *params);
+GLAPI GLenum GLAPIENTRY glGetError (void);
+GLAPI void GLAPIENTRY glGetFloatv (GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetIntegerv (GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v);
+GLAPI void GLAPIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v);
+GLAPI void GLAPIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v);
+GLAPI void GLAPIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetPixelMapfv (GLenum map, GLfloat *values);
+GLAPI void GLAPIENTRY glGetPixelMapuiv (GLenum map, GLuint *values);
+GLAPI void GLAPIENTRY glGetPixelMapusv (GLenum map, GLushort *values);
+GLAPI void GLAPIENTRY glGetPointerv (GLenum pname, GLvoid* *params);
+GLAPI void GLAPIENTRY glGetPolygonStipple (GLubyte *mask);
+GLAPI const GLubyte * GLAPIENTRY glGetString (GLenum name);
+GLAPI void GLAPIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params);
+GLAPI void GLAPIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
+GLAPI void GLAPIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glHint (GLenum target, GLenum mode);
+GLAPI void GLAPIENTRY glIndexMask (GLuint mask);
+GLAPI void GLAPIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glIndexd (GLdouble c);
+GLAPI void GLAPIENTRY glIndexdv (const GLdouble *c);
+GLAPI void GLAPIENTRY glIndexf (GLfloat c);
+GLAPI void GLAPIENTRY glIndexfv (const GLfloat *c);
+GLAPI void GLAPIENTRY glIndexi (GLint c);
+GLAPI void GLAPIENTRY glIndexiv (const GLint *c);
+GLAPI void GLAPIENTRY glIndexs (GLshort c);
+GLAPI void GLAPIENTRY glIndexsv (const GLshort *c);
+GLAPI void GLAPIENTRY glIndexub (GLubyte c);
+GLAPI void GLAPIENTRY glIndexubv (const GLubyte *c);
+GLAPI void GLAPIENTRY glInitNames (void);
+GLAPI void GLAPIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer);
+GLAPI GLboolean GLAPIENTRY glIsEnabled (GLenum cap);
+GLAPI GLboolean GLAPIENTRY glIsList (GLuint list);
+GLAPI GLboolean GLAPIENTRY glIsTexture (GLuint texture);
+GLAPI void GLAPIENTRY glLightModelf (GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glLightModelfv (GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glLightModeli (GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glLightModeliv (GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glLightf (GLenum light, GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glLighti (GLenum light, GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glLineStipple (GLint factor, GLushort pattern);
+GLAPI void GLAPIENTRY glLineWidth (GLfloat width);
+GLAPI void GLAPIENTRY glListBase (GLuint base);
+GLAPI void GLAPIENTRY glLoadIdentity (void);
+GLAPI void GLAPIENTRY glLoadMatrixd (const GLdouble *m);
+GLAPI void GLAPIENTRY glLoadMatrixf (const GLfloat *m);
+GLAPI void GLAPIENTRY glLoadName (GLuint name);
+GLAPI void GLAPIENTRY glLogicOp (GLenum opcode);
+GLAPI void GLAPIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+GLAPI void GLAPIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+GLAPI void GLAPIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+GLAPI void GLAPIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+GLAPI void GLAPIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2);
+GLAPI void GLAPIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2);
+GLAPI void GLAPIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
+GLAPI void GLAPIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
+GLAPI void GLAPIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glMateriali (GLenum face, GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glMatrixMode (GLenum mode);
+GLAPI void GLAPIENTRY glMultMatrixd (const GLdouble *m);
+GLAPI void GLAPIENTRY glMultMatrixf (const GLfloat *m);
+GLAPI void GLAPIENTRY glNewList (GLuint list, GLenum mode);
+GLAPI void GLAPIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz);
+GLAPI void GLAPIENTRY glNormal3bv (const GLbyte *v);
+GLAPI void GLAPIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz);
+GLAPI void GLAPIENTRY glNormal3dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz);
+GLAPI void GLAPIENTRY glNormal3fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glNormal3i (GLint nx, GLint ny, GLint nz);
+GLAPI void GLAPIENTRY glNormal3iv (const GLint *v);
+GLAPI void GLAPIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz);
+GLAPI void GLAPIENTRY glNormal3sv (const GLshort *v);
+GLAPI void GLAPIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void GLAPIENTRY glPassThrough (GLfloat token);
+GLAPI void GLAPIENTRY glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values);
+GLAPI void GLAPIENTRY glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values);
+GLAPI void GLAPIENTRY glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values);
+GLAPI void GLAPIENTRY glPixelStoref (GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glPixelStorei (GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glPixelTransferf (GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glPixelTransferi (GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor);
+GLAPI void GLAPIENTRY glPointSize (GLfloat size);
+GLAPI void GLAPIENTRY glPolygonMode (GLenum face, GLenum mode);
+GLAPI void GLAPIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
+GLAPI void GLAPIENTRY glPolygonStipple (const GLubyte *mask);
+GLAPI void GLAPIENTRY glPopAttrib (void);
+GLAPI void GLAPIENTRY glPopClientAttrib (void);
+GLAPI void GLAPIENTRY glPopMatrix (void);
+GLAPI void GLAPIENTRY glPopName (void);
+GLAPI void GLAPIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+GLAPI void GLAPIENTRY glPushAttrib (GLbitfield mask);
+GLAPI void GLAPIENTRY glPushClientAttrib (GLbitfield mask);
+GLAPI void GLAPIENTRY glPushMatrix (void);
+GLAPI void GLAPIENTRY glPushName (GLuint name);
+GLAPI void GLAPIENTRY glRasterPos2d (GLdouble x, GLdouble y);
+GLAPI void GLAPIENTRY glRasterPos2dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glRasterPos2f (GLfloat x, GLfloat y);
+GLAPI void GLAPIENTRY glRasterPos2fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glRasterPos2i (GLint x, GLint y);
+GLAPI void GLAPIENTRY glRasterPos2iv (const GLint *v);
+GLAPI void GLAPIENTRY glRasterPos2s (GLshort x, GLshort y);
+GLAPI void GLAPIENTRY glRasterPos2sv (const GLshort *v);
+GLAPI void GLAPIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void GLAPIENTRY glRasterPos3dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void GLAPIENTRY glRasterPos3fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glRasterPos3i (GLint x, GLint y, GLint z);
+GLAPI void GLAPIENTRY glRasterPos3iv (const GLint *v);
+GLAPI void GLAPIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z);
+GLAPI void GLAPIENTRY glRasterPos3sv (const GLshort *v);
+GLAPI void GLAPIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void GLAPIENTRY glRasterPos4dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void GLAPIENTRY glRasterPos4fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w);
+GLAPI void GLAPIENTRY glRasterPos4iv (const GLint *v);
+GLAPI void GLAPIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void GLAPIENTRY glRasterPos4sv (const GLshort *v);
+GLAPI void GLAPIENTRY glReadBuffer (GLenum mode);
+GLAPI void GLAPIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
+GLAPI void GLAPIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
+GLAPI void GLAPIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2);
+GLAPI void GLAPIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
+GLAPI void GLAPIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2);
+GLAPI void GLAPIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2);
+GLAPI void GLAPIENTRY glRectiv (const GLint *v1, const GLint *v2);
+GLAPI void GLAPIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2);
+GLAPI void GLAPIENTRY glRectsv (const GLshort *v1, const GLshort *v2);
+GLAPI GLint GLAPIENTRY glRenderMode (GLenum mode);
+GLAPI void GLAPIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void GLAPIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void GLAPIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void GLAPIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void GLAPIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void GLAPIENTRY glSelectBuffer (GLsizei size, GLuint *buffer);
+GLAPI void GLAPIENTRY glShadeModel (GLenum mode);
+GLAPI void GLAPIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
+GLAPI void GLAPIENTRY glStencilMask (GLuint mask);
+GLAPI void GLAPIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
+GLAPI void GLAPIENTRY glTexCoord1d (GLdouble s);
+GLAPI void GLAPIENTRY glTexCoord1dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glTexCoord1f (GLfloat s);
+GLAPI void GLAPIENTRY glTexCoord1fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glTexCoord1i (GLint s);
+GLAPI void GLAPIENTRY glTexCoord1iv (const GLint *v);
+GLAPI void GLAPIENTRY glTexCoord1s (GLshort s);
+GLAPI void GLAPIENTRY glTexCoord1sv (const GLshort *v);
+GLAPI void GLAPIENTRY glTexCoord2d (GLdouble s, GLdouble t);
+GLAPI void GLAPIENTRY glTexCoord2dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glTexCoord2f (GLfloat s, GLfloat t);
+GLAPI void GLAPIENTRY glTexCoord2fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glTexCoord2i (GLint s, GLint t);
+GLAPI void GLAPIENTRY glTexCoord2iv (const GLint *v);
+GLAPI void GLAPIENTRY glTexCoord2s (GLshort s, GLshort t);
+GLAPI void GLAPIENTRY glTexCoord2sv (const GLshort *v);
+GLAPI void GLAPIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r);
+GLAPI void GLAPIENTRY glTexCoord3dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r);
+GLAPI void GLAPIENTRY glTexCoord3fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glTexCoord3i (GLint s, GLint t, GLint r);
+GLAPI void GLAPIENTRY glTexCoord3iv (const GLint *v);
+GLAPI void GLAPIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r);
+GLAPI void GLAPIENTRY glTexCoord3sv (const GLshort *v);
+GLAPI void GLAPIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI void GLAPIENTRY glTexCoord4dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI void GLAPIENTRY glTexCoord4fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q);
+GLAPI void GLAPIENTRY glTexCoord4iv (const GLint *v);
+GLAPI void GLAPIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI void GLAPIENTRY glTexCoord4sv (const GLshort *v);
+GLAPI void GLAPIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param);
+GLAPI void GLAPIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params);
+GLAPI void GLAPIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void GLAPIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void GLAPIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void GLAPIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void GLAPIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void GLAPIENTRY glVertex2d (GLdouble x, GLdouble y);
+GLAPI void GLAPIENTRY glVertex2dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glVertex2f (GLfloat x, GLfloat y);
+GLAPI void GLAPIENTRY glVertex2fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glVertex2i (GLint x, GLint y);
+GLAPI void GLAPIENTRY glVertex2iv (const GLint *v);
+GLAPI void GLAPIENTRY glVertex2s (GLshort x, GLshort y);
+GLAPI void GLAPIENTRY glVertex2sv (const GLshort *v);
+GLAPI void GLAPIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void GLAPIENTRY glVertex3dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void GLAPIENTRY glVertex3fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glVertex3i (GLint x, GLint y, GLint z);
+GLAPI void GLAPIENTRY glVertex3iv (const GLint *v);
+GLAPI void GLAPIENTRY glVertex3s (GLshort x, GLshort y, GLshort z);
+GLAPI void GLAPIENTRY glVertex3sv (const GLshort *v);
+GLAPI void GLAPIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void GLAPIENTRY glVertex4dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void GLAPIENTRY glVertex4fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w);
+GLAPI void GLAPIENTRY glVertex4iv (const GLint *v);
+GLAPI void GLAPIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void GLAPIENTRY glVertex4sv (const GLshort *v);
+GLAPI void GLAPIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+
+#define GLEW_VERSION_1_1 GLEW_GET_VAR(__GLEW_VERSION_1_1)
+
+#endif /* GL_VERSION_1_1 */
+
+/* ---------------------------------- GLU ---------------------------------- */
+
+/* this is where we can safely include GLU */
+#if defined(__APPLE__) && defined(__MACH__)
+#include <OpenGL/glu.h>
+#else
+#include <GL/glu.h>
+#endif
+
+/* ----------------------------- GL_VERSION_1_2 ---------------------------- */
+
+#ifndef GL_VERSION_1_2
+#define GL_VERSION_1_2 1
+
+#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_UNSIGNED_BYTE_3_3_2 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2 0x8036
+#define GL_RESCALE_NORMAL 0x803A
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_PACK_SKIP_IMAGES 0x806B
+#define GL_PACK_IMAGE_HEIGHT 0x806C
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_PROXY_TEXTURE_3D 0x8070
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_BGR 0x80E0
+#define GL_BGRA 0x80E1
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8
+#define GL_SINGLE_COLOR 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR 0x81FA
+#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
+#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+
+typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+
+#define glCopyTexSubImage3D GLEW_GET_FUN(__glewCopyTexSubImage3D)
+#define glDrawRangeElements GLEW_GET_FUN(__glewDrawRangeElements)
+#define glTexImage3D GLEW_GET_FUN(__glewTexImage3D)
+#define glTexSubImage3D GLEW_GET_FUN(__glewTexSubImage3D)
+
+#define GLEW_VERSION_1_2 GLEW_GET_VAR(__GLEW_VERSION_1_2)
+
+#endif /* GL_VERSION_1_2 */
+
+/* ----------------------------- GL_VERSION_1_3 ---------------------------- */
+
+#ifndef GL_VERSION_1_3
+#define GL_VERSION_1_3 1
+
+#define GL_MULTISAMPLE 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE 0x809F
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_CLAMP_TO_BORDER 0x812D
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1
+#define GL_MAX_TEXTURE_UNITS 0x84E2
+#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6
+#define GL_SUBTRACT 0x84E7
+#define GL_COMPRESSED_ALPHA 0x84E9
+#define GL_COMPRESSED_LUMINANCE 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB
+#define GL_COMPRESSED_INTENSITY 0x84EC
+#define GL_COMPRESSED_RGB 0x84ED
+#define GL_COMPRESSED_RGBA 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
+#define GL_NORMAL_MAP 0x8511
+#define GL_REFLECTION_MAP 0x8512
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_COMBINE 0x8570
+#define GL_COMBINE_RGB 0x8571
+#define GL_COMBINE_ALPHA 0x8572
+#define GL_RGB_SCALE 0x8573
+#define GL_ADD_SIGNED 0x8574
+#define GL_INTERPOLATE 0x8575
+#define GL_CONSTANT 0x8576
+#define GL_PRIMARY_COLOR 0x8577
+#define GL_PREVIOUS 0x8578
+#define GL_SOURCE0_RGB 0x8580
+#define GL_SOURCE1_RGB 0x8581
+#define GL_SOURCE2_RGB 0x8582
+#define GL_SOURCE0_ALPHA 0x8588
+#define GL_SOURCE1_ALPHA 0x8589
+#define GL_SOURCE2_ALPHA 0x858A
+#define GL_OPERAND0_RGB 0x8590
+#define GL_OPERAND1_RGB 0x8591
+#define GL_OPERAND2_RGB 0x8592
+#define GL_OPERAND0_ALPHA 0x8598
+#define GL_OPERAND1_ALPHA 0x8599
+#define GL_OPERAND2_ALPHA 0x859A
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_DOT3_RGB 0x86AE
+#define GL_DOT3_RGBA 0x86AF
+#define GL_MULTISAMPLE_BIT 0x20000000
+
+typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLvoid *img);
+typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble m[16]);
+typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat m[16]);
+typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble m[16]);
+typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat m[16]);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert);
+
+#define glActiveTexture GLEW_GET_FUN(__glewActiveTexture)
+#define glClientActiveTexture GLEW_GET_FUN(__glewClientActiveTexture)
+#define glCompressedTexImage1D GLEW_GET_FUN(__glewCompressedTexImage1D)
+#define glCompressedTexImage2D GLEW_GET_FUN(__glewCompressedTexImage2D)
+#define glCompressedTexImage3D GLEW_GET_FUN(__glewCompressedTexImage3D)
+#define glCompressedTexSubImage1D GLEW_GET_FUN(__glewCompressedTexSubImage1D)
+#define glCompressedTexSubImage2D GLEW_GET_FUN(__glewCompressedTexSubImage2D)
+#define glCompressedTexSubImage3D GLEW_GET_FUN(__glewCompressedTexSubImage3D)
+#define glGetCompressedTexImage GLEW_GET_FUN(__glewGetCompressedTexImage)
+#define glLoadTransposeMatrixd GLEW_GET_FUN(__glewLoadTransposeMatrixd)
+#define glLoadTransposeMatrixf GLEW_GET_FUN(__glewLoadTransposeMatrixf)
+#define glMultTransposeMatrixd GLEW_GET_FUN(__glewMultTransposeMatrixd)
+#define glMultTransposeMatrixf GLEW_GET_FUN(__glewMultTransposeMatrixf)
+#define glMultiTexCoord1d GLEW_GET_FUN(__glewMultiTexCoord1d)
+#define glMultiTexCoord1dv GLEW_GET_FUN(__glewMultiTexCoord1dv)
+#define glMultiTexCoord1f GLEW_GET_FUN(__glewMultiTexCoord1f)
+#define glMultiTexCoord1fv GLEW_GET_FUN(__glewMultiTexCoord1fv)
+#define glMultiTexCoord1i GLEW_GET_FUN(__glewMultiTexCoord1i)
+#define glMultiTexCoord1iv GLEW_GET_FUN(__glewMultiTexCoord1iv)
+#define glMultiTexCoord1s GLEW_GET_FUN(__glewMultiTexCoord1s)
+#define glMultiTexCoord1sv GLEW_GET_FUN(__glewMultiTexCoord1sv)
+#define glMultiTexCoord2d GLEW_GET_FUN(__glewMultiTexCoord2d)
+#define glMultiTexCoord2dv GLEW_GET_FUN(__glewMultiTexCoord2dv)
+#define glMultiTexCoord2f GLEW_GET_FUN(__glewMultiTexCoord2f)
+#define glMultiTexCoord2fv GLEW_GET_FUN(__glewMultiTexCoord2fv)
+#define glMultiTexCoord2i GLEW_GET_FUN(__glewMultiTexCoord2i)
+#define glMultiTexCoord2iv GLEW_GET_FUN(__glewMultiTexCoord2iv)
+#define glMultiTexCoord2s GLEW_GET_FUN(__glewMultiTexCoord2s)
+#define glMultiTexCoord2sv GLEW_GET_FUN(__glewMultiTexCoord2sv)
+#define glMultiTexCoord3d GLEW_GET_FUN(__glewMultiTexCoord3d)
+#define glMultiTexCoord3dv GLEW_GET_FUN(__glewMultiTexCoord3dv)
+#define glMultiTexCoord3f GLEW_GET_FUN(__glewMultiTexCoord3f)
+#define glMultiTexCoord3fv GLEW_GET_FUN(__glewMultiTexCoord3fv)
+#define glMultiTexCoord3i GLEW_GET_FUN(__glewMultiTexCoord3i)
+#define glMultiTexCoord3iv GLEW_GET_FUN(__glewMultiTexCoord3iv)
+#define glMultiTexCoord3s GLEW_GET_FUN(__glewMultiTexCoord3s)
+#define glMultiTexCoord3sv GLEW_GET_FUN(__glewMultiTexCoord3sv)
+#define glMultiTexCoord4d GLEW_GET_FUN(__glewMultiTexCoord4d)
+#define glMultiTexCoord4dv GLEW_GET_FUN(__glewMultiTexCoord4dv)
+#define glMultiTexCoord4f GLEW_GET_FUN(__glewMultiTexCoord4f)
+#define glMultiTexCoord4fv GLEW_GET_FUN(__glewMultiTexCoord4fv)
+#define glMultiTexCoord4i GLEW_GET_FUN(__glewMultiTexCoord4i)
+#define glMultiTexCoord4iv GLEW_GET_FUN(__glewMultiTexCoord4iv)
+#define glMultiTexCoord4s GLEW_GET_FUN(__glewMultiTexCoord4s)
+#define glMultiTexCoord4sv GLEW_GET_FUN(__glewMultiTexCoord4sv)
+#define glSampleCoverage GLEW_GET_FUN(__glewSampleCoverage)
+
+#define GLEW_VERSION_1_3 GLEW_GET_VAR(__GLEW_VERSION_1_3)
+
+#endif /* GL_VERSION_1_3 */
+
+/* ----------------------------- GL_VERSION_1_4 ---------------------------- */
+
+#ifndef GL_VERSION_1_4
+#define GL_VERSION_1_4 1
+
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_POINT_SIZE_MIN 0x8126
+#define GL_POINT_SIZE_MAX 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128
+#define GL_POINT_DISTANCE_ATTENUATION 0x8129
+#define GL_GENERATE_MIPMAP 0x8191
+#define GL_GENERATE_MIPMAP_HINT 0x8192
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_DEPTH_COMPONENT24 0x81A6
+#define GL_DEPTH_COMPONENT32 0x81A7
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_FOG_COORDINATE_SOURCE 0x8450
+#define GL_FOG_COORDINATE 0x8451
+#define GL_FRAGMENT_DEPTH 0x8452
+#define GL_CURRENT_FOG_COORDINATE 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456
+#define GL_FOG_COORDINATE_ARRAY 0x8457
+#define GL_COLOR_SUM 0x8458
+#define GL_CURRENT_SECONDARY_COLOR 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D
+#define GL_SECONDARY_COLOR_ARRAY 0x845E
+#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
+#define GL_TEXTURE_FILTER_CONTROL 0x8500
+#define GL_TEXTURE_LOD_BIAS 0x8501
+#define GL_INCR_WRAP 0x8507
+#define GL_DECR_WRAP 0x8508
+#define GL_TEXTURE_DEPTH_SIZE 0x884A
+#define GL_DEPTH_TEXTURE_MODE 0x884B
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#define GL_COMPARE_R_TO_TEXTURE 0x884E
+
+typedef void (GLAPIENTRY * PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDDPROC) (GLdouble coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDDVPROC) (const GLdouble *coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDFPROC) (GLfloat coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDFVPROC) (const GLfloat *coord);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVPROC) (GLenum pname, GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVPROC) (const GLdouble *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVPROC) (const GLfloat *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IPROC) (GLint x, GLint y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVPROC) (const GLint *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVPROC) (const GLshort *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVPROC) (const GLdouble *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVPROC) (const GLfloat *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVPROC) (const GLint *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVPROC) (const GLshort *p);
+
+#define glBlendColor GLEW_GET_FUN(__glewBlendColor)
+#define glBlendEquation GLEW_GET_FUN(__glewBlendEquation)
+#define glBlendFuncSeparate GLEW_GET_FUN(__glewBlendFuncSeparate)
+#define glFogCoordPointer GLEW_GET_FUN(__glewFogCoordPointer)
+#define glFogCoordd GLEW_GET_FUN(__glewFogCoordd)
+#define glFogCoorddv GLEW_GET_FUN(__glewFogCoorddv)
+#define glFogCoordf GLEW_GET_FUN(__glewFogCoordf)
+#define glFogCoordfv GLEW_GET_FUN(__glewFogCoordfv)
+#define glMultiDrawArrays GLEW_GET_FUN(__glewMultiDrawArrays)
+#define glMultiDrawElements GLEW_GET_FUN(__glewMultiDrawElements)
+#define glPointParameterf GLEW_GET_FUN(__glewPointParameterf)
+#define glPointParameterfv GLEW_GET_FUN(__glewPointParameterfv)
+#define glSecondaryColor3b GLEW_GET_FUN(__glewSecondaryColor3b)
+#define glSecondaryColor3bv GLEW_GET_FUN(__glewSecondaryColor3bv)
+#define glSecondaryColor3d GLEW_GET_FUN(__glewSecondaryColor3d)
+#define glSecondaryColor3dv GLEW_GET_FUN(__glewSecondaryColor3dv)
+#define glSecondaryColor3f GLEW_GET_FUN(__glewSecondaryColor3f)
+#define glSecondaryColor3fv GLEW_GET_FUN(__glewSecondaryColor3fv)
+#define glSecondaryColor3i GLEW_GET_FUN(__glewSecondaryColor3i)
+#define glSecondaryColor3iv GLEW_GET_FUN(__glewSecondaryColor3iv)
+#define glSecondaryColor3s GLEW_GET_FUN(__glewSecondaryColor3s)
+#define glSecondaryColor3sv GLEW_GET_FUN(__glewSecondaryColor3sv)
+#define glSecondaryColor3ub GLEW_GET_FUN(__glewSecondaryColor3ub)
+#define glSecondaryColor3ubv GLEW_GET_FUN(__glewSecondaryColor3ubv)
+#define glSecondaryColor3ui GLEW_GET_FUN(__glewSecondaryColor3ui)
+#define glSecondaryColor3uiv GLEW_GET_FUN(__glewSecondaryColor3uiv)
+#define glSecondaryColor3us GLEW_GET_FUN(__glewSecondaryColor3us)
+#define glSecondaryColor3usv GLEW_GET_FUN(__glewSecondaryColor3usv)
+#define glSecondaryColorPointer GLEW_GET_FUN(__glewSecondaryColorPointer)
+#define glWindowPos2d GLEW_GET_FUN(__glewWindowPos2d)
+#define glWindowPos2dv GLEW_GET_FUN(__glewWindowPos2dv)
+#define glWindowPos2f GLEW_GET_FUN(__glewWindowPos2f)
+#define glWindowPos2fv GLEW_GET_FUN(__glewWindowPos2fv)
+#define glWindowPos2i GLEW_GET_FUN(__glewWindowPos2i)
+#define glWindowPos2iv GLEW_GET_FUN(__glewWindowPos2iv)
+#define glWindowPos2s GLEW_GET_FUN(__glewWindowPos2s)
+#define glWindowPos2sv GLEW_GET_FUN(__glewWindowPos2sv)
+#define glWindowPos3d GLEW_GET_FUN(__glewWindowPos3d)
+#define glWindowPos3dv GLEW_GET_FUN(__glewWindowPos3dv)
+#define glWindowPos3f GLEW_GET_FUN(__glewWindowPos3f)
+#define glWindowPos3fv GLEW_GET_FUN(__glewWindowPos3fv)
+#define glWindowPos3i GLEW_GET_FUN(__glewWindowPos3i)
+#define glWindowPos3iv GLEW_GET_FUN(__glewWindowPos3iv)
+#define glWindowPos3s GLEW_GET_FUN(__glewWindowPos3s)
+#define glWindowPos3sv GLEW_GET_FUN(__glewWindowPos3sv)
+
+#define GLEW_VERSION_1_4 GLEW_GET_VAR(__GLEW_VERSION_1_4)
+
+#endif /* GL_VERSION_1_4 */
+
+/* ----------------------------- GL_VERSION_1_5 ---------------------------- */
+
+#ifndef GL_VERSION_1_5
+#define GL_VERSION_1_5 1
+
+#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE
+#define GL_FOG_COORD GL_FOG_COORDINATE
+#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY
+#define GL_SRC0_RGB GL_SOURCE0_RGB
+#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER
+#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE
+#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA
+#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE
+#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE
+#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA
+#define GL_SRC1_RGB GL_SOURCE1_RGB
+#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA
+#define GL_SRC2_RGB GL_SOURCE2_RGB
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_USAGE 0x8765
+#define GL_QUERY_COUNTER_BITS 0x8864
+#define GL_CURRENT_QUERY 0x8865
+#define GL_QUERY_RESULT 0x8866
+#define GL_QUERY_RESULT_AVAILABLE 0x8867
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_READ_ONLY 0x88B8
+#define GL_WRITE_ONLY 0x88B9
+#define GL_READ_WRITE 0x88BA
+#define GL_BUFFER_ACCESS 0x88BB
+#define GL_BUFFER_MAPPED 0x88BC
+#define GL_BUFFER_MAP_POINTER 0x88BD
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STREAM_READ 0x88E1
+#define GL_STREAM_COPY 0x88E2
+#define GL_STATIC_DRAW 0x88E4
+#define GL_STATIC_READ 0x88E5
+#define GL_STATIC_COPY 0x88E6
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_DYNAMIC_READ 0x88E9
+#define GL_DYNAMIC_COPY 0x88EA
+#define GL_SAMPLES_PASSED 0x8914
+
+typedef ptrdiff_t GLsizeiptr;
+typedef ptrdiff_t GLintptr;
+
+typedef void (GLAPIENTRY * PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (GLAPIENTRY * PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
+typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
+typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint* buffers);
+typedef void (GLAPIENTRY * PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLENDQUERYPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLGENBUFFERSPROC) (GLsizei n, GLuint* buffers);
+typedef void (GLAPIENTRY * PFNGLGENQUERIESPROC) (GLsizei n, GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid** params);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data);
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint params);
+typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERPROC) (GLuint buffer);
+typedef GLboolean (GLAPIENTRY * PFNGLISQUERYPROC) (GLuint id);
+typedef GLvoid* (GLAPIENTRY * PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
+typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERPROC) (GLenum target);
+
+#define glBeginQuery GLEW_GET_FUN(__glewBeginQuery)
+#define glBindBuffer GLEW_GET_FUN(__glewBindBuffer)
+#define glBufferData GLEW_GET_FUN(__glewBufferData)
+#define glBufferSubData GLEW_GET_FUN(__glewBufferSubData)
+#define glDeleteBuffers GLEW_GET_FUN(__glewDeleteBuffers)
+#define glDeleteQueries GLEW_GET_FUN(__glewDeleteQueries)
+#define glEndQuery GLEW_GET_FUN(__glewEndQuery)
+#define glGenBuffers GLEW_GET_FUN(__glewGenBuffers)
+#define glGenQueries GLEW_GET_FUN(__glewGenQueries)
+#define glGetBufferParameteriv GLEW_GET_FUN(__glewGetBufferParameteriv)
+#define glGetBufferPointerv GLEW_GET_FUN(__glewGetBufferPointerv)
+#define glGetBufferSubData GLEW_GET_FUN(__glewGetBufferSubData)
+#define glGetQueryObjectiv GLEW_GET_FUN(__glewGetQueryObjectiv)
+#define glGetQueryObjectuiv GLEW_GET_FUN(__glewGetQueryObjectuiv)
+#define glGetQueryiv GLEW_GET_FUN(__glewGetQueryiv)
+#define glIsBuffer GLEW_GET_FUN(__glewIsBuffer)
+#define glIsQuery GLEW_GET_FUN(__glewIsQuery)
+#define glMapBuffer GLEW_GET_FUN(__glewMapBuffer)
+#define glUnmapBuffer GLEW_GET_FUN(__glewUnmapBuffer)
+
+#define GLEW_VERSION_1_5 GLEW_GET_VAR(__GLEW_VERSION_1_5)
+
+#endif /* GL_VERSION_1_5 */
+
+/* ----------------------------- GL_VERSION_2_0 ---------------------------- */
+
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+
+#define GLEW_VERSION_2_0 GLEW_GET_VAR(__GLEW_VERSION_2_0)
+
+#endif /* GL_VERSION_2_0 */
+
+/* -------------------------- GL_3DFX_multisample -------------------------- */
+
+#ifndef GL_3DFX_multisample
+#define GL_3DFX_multisample 1
+
+#define GL_MULTISAMPLE_3DFX 0x86B2
+#define GL_SAMPLE_BUFFERS_3DFX 0x86B3
+#define GL_SAMPLES_3DFX 0x86B4
+#define GL_MULTISAMPLE_BIT_3DFX 0x20000000
+
+#define GLEW_3DFX_multisample GLEW_GET_VAR(__GLEW_3DFX_multisample)
+
+#endif /* GL_3DFX_multisample */
+
+/* ---------------------------- GL_3DFX_tbuffer ---------------------------- */
+
+#ifndef GL_3DFX_tbuffer
+#define GL_3DFX_tbuffer 1
+
+typedef void (GLAPIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);
+
+#define glTbufferMask3DFX GLEW_GET_FUN(__glewTbufferMask3DFX)
+
+#define GLEW_3DFX_tbuffer GLEW_GET_VAR(__GLEW_3DFX_tbuffer)
+
+#endif /* GL_3DFX_tbuffer */
+
+/* -------------------- GL_3DFX_texture_compression_FXT1 ------------------- */
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_3DFX_texture_compression_FXT1 1
+
+#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0
+#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1
+
+#define GLEW_3DFX_texture_compression_FXT1 GLEW_GET_VAR(__GLEW_3DFX_texture_compression_FXT1)
+
+#endif /* GL_3DFX_texture_compression_FXT1 */
+
+/* ------------------------ GL_APPLE_client_storage ------------------------ */
+
+#ifndef GL_APPLE_client_storage
+#define GL_APPLE_client_storage 1
+
+#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2
+
+#define GLEW_APPLE_client_storage GLEW_GET_VAR(__GLEW_APPLE_client_storage)
+
+#endif /* GL_APPLE_client_storage */
+
+/* ------------------------- GL_APPLE_element_array ------------------------ */
+
+#ifndef GL_APPLE_element_array
+#define GL_APPLE_element_array 1
+
+#define GL_ELEMENT_ARRAY_APPLE 0x8768
+#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769
+#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A
+
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint* first, const GLsizei *count, GLsizei primcount);
+
+#define glDrawElementArrayAPPLE GLEW_GET_FUN(__glewDrawElementArrayAPPLE)
+#define glDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewDrawRangeElementArrayAPPLE)
+#define glElementPointerAPPLE GLEW_GET_FUN(__glewElementPointerAPPLE)
+#define glMultiDrawElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawElementArrayAPPLE)
+#define glMultiDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawRangeElementArrayAPPLE)
+
+#define GLEW_APPLE_element_array GLEW_GET_VAR(__GLEW_APPLE_element_array)
+
+#endif /* GL_APPLE_element_array */
+
+/* ----------------------------- GL_APPLE_fence ---------------------------- */
+
+#ifndef GL_APPLE_fence
+#define GL_APPLE_fence 1
+
+#define GL_DRAW_PIXELS_APPLE 0x8A0A
+#define GL_FENCE_APPLE 0x8A0B
+
+typedef void (GLAPIENTRY * PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint* fences);
+typedef void (GLAPIENTRY * PFNGLFINISHFENCEAPPLEPROC) (GLuint fence);
+typedef void (GLAPIENTRY * PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name);
+typedef void (GLAPIENTRY * PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint* fences);
+typedef GLboolean (GLAPIENTRY * PFNGLISFENCEAPPLEPROC) (GLuint fence);
+typedef void (GLAPIENTRY * PFNGLSETFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (GLAPIENTRY * PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name);
+
+#define glDeleteFencesAPPLE GLEW_GET_FUN(__glewDeleteFencesAPPLE)
+#define glFinishFenceAPPLE GLEW_GET_FUN(__glewFinishFenceAPPLE)
+#define glFinishObjectAPPLE GLEW_GET_FUN(__glewFinishObjectAPPLE)
+#define glGenFencesAPPLE GLEW_GET_FUN(__glewGenFencesAPPLE)
+#define glIsFenceAPPLE GLEW_GET_FUN(__glewIsFenceAPPLE)
+#define glSetFenceAPPLE GLEW_GET_FUN(__glewSetFenceAPPLE)
+#define glTestFenceAPPLE GLEW_GET_FUN(__glewTestFenceAPPLE)
+#define glTestObjectAPPLE GLEW_GET_FUN(__glewTestObjectAPPLE)
+
+#define GLEW_APPLE_fence GLEW_GET_VAR(__GLEW_APPLE_fence)
+
+#endif /* GL_APPLE_fence */
+
+/* ------------------------- GL_APPLE_float_pixels ------------------------- */
+
+#ifndef GL_APPLE_float_pixels
+#define GL_APPLE_float_pixels 1
+
+#define GL_HALF_APPLE 0x140B
+#define GL_RGBA_FLOAT32_APPLE 0x8814
+#define GL_RGB_FLOAT32_APPLE 0x8815
+#define GL_ALPHA_FLOAT32_APPLE 0x8816
+#define GL_INTENSITY_FLOAT32_APPLE 0x8817
+#define GL_LUMINANCE_FLOAT32_APPLE 0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819
+#define GL_RGBA_FLOAT16_APPLE 0x881A
+#define GL_RGB_FLOAT16_APPLE 0x881B
+#define GL_ALPHA_FLOAT16_APPLE 0x881C
+#define GL_INTENSITY_FLOAT16_APPLE 0x881D
+#define GL_LUMINANCE_FLOAT16_APPLE 0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F
+#define GL_COLOR_FLOAT_APPLE 0x8A0F
+
+#define GLEW_APPLE_float_pixels GLEW_GET_VAR(__GLEW_APPLE_float_pixels)
+
+#endif /* GL_APPLE_float_pixels */
+
+/* ------------------------ GL_APPLE_specular_vector ----------------------- */
+
+#ifndef GL_APPLE_specular_vector
+#define GL_APPLE_specular_vector 1
+
+#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0
+
+#define GLEW_APPLE_specular_vector GLEW_GET_VAR(__GLEW_APPLE_specular_vector)
+
+#endif /* GL_APPLE_specular_vector */
+
+/* ------------------------- GL_APPLE_texture_range ------------------------ */
+
+#ifndef GL_APPLE_texture_range
+#define GL_APPLE_texture_range 1
+
+#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7
+#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8
+#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC
+#define GL_STORAGE_PRIVATE_APPLE 0x85BD
+#define GL_STORAGE_CACHED_APPLE 0x85BE
+#define GL_STORAGE_SHARED_APPLE 0x85BF
+
+typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid **params);
+typedef void (GLAPIENTRY * PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, GLvoid *pointer);
+
+#define glGetTexParameterPointervAPPLE GLEW_GET_FUN(__glewGetTexParameterPointervAPPLE)
+#define glTextureRangeAPPLE GLEW_GET_FUN(__glewTextureRangeAPPLE)
+
+#define GLEW_APPLE_texture_range GLEW_GET_VAR(__GLEW_APPLE_texture_range)
+
+#endif /* GL_APPLE_texture_range */
+
+/* ------------------------ GL_APPLE_transform_hint ------------------------ */
+
+#ifndef GL_APPLE_transform_hint
+#define GL_APPLE_transform_hint 1
+
+#define GL_TRANSFORM_HINT_APPLE 0x85B1
+
+#define GLEW_APPLE_transform_hint GLEW_GET_VAR(__GLEW_APPLE_transform_hint)
+
+#endif /* GL_APPLE_transform_hint */
+
+/* ---------------------- GL_APPLE_vertex_array_object --------------------- */
+
+#ifndef GL_APPLE_vertex_array_object
+#define GL_APPLE_vertex_array_object 1
+
+#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5
+
+typedef void (GLAPIENTRY * PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array);
+typedef void (GLAPIENTRY * PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays);
+typedef void (GLAPIENTRY * PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays);
+typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array);
+
+#define glBindVertexArrayAPPLE GLEW_GET_FUN(__glewBindVertexArrayAPPLE)
+#define glDeleteVertexArraysAPPLE GLEW_GET_FUN(__glewDeleteVertexArraysAPPLE)
+#define glGenVertexArraysAPPLE GLEW_GET_FUN(__glewGenVertexArraysAPPLE)
+#define glIsVertexArrayAPPLE GLEW_GET_FUN(__glewIsVertexArrayAPPLE)
+
+#define GLEW_APPLE_vertex_array_object GLEW_GET_VAR(__GLEW_APPLE_vertex_array_object)
+
+#endif /* GL_APPLE_vertex_array_object */
+
+/* ---------------------- GL_APPLE_vertex_array_range ---------------------- */
+
+#ifndef GL_APPLE_vertex_array_range
+#define GL_APPLE_vertex_array_range 1
+
+#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E
+#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE 0x8520
+#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521
+#define GL_STORAGE_CACHED_APPLE 0x85BE
+#define GL_STORAGE_SHARED_APPLE 0x85BF
+
+typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void* pointer);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void* pointer);
+
+#define glFlushVertexArrayRangeAPPLE GLEW_GET_FUN(__glewFlushVertexArrayRangeAPPLE)
+#define glVertexArrayParameteriAPPLE GLEW_GET_FUN(__glewVertexArrayParameteriAPPLE)
+#define glVertexArrayRangeAPPLE GLEW_GET_FUN(__glewVertexArrayRangeAPPLE)
+
+#define GLEW_APPLE_vertex_array_range GLEW_GET_VAR(__GLEW_APPLE_vertex_array_range)
+
+#endif /* GL_APPLE_vertex_array_range */
+
+/* --------------------------- GL_APPLE_ycbcr_422 -------------------------- */
+
+#ifndef GL_APPLE_ycbcr_422
+#define GL_APPLE_ycbcr_422 1
+
+#define GL_YCBCR_422_APPLE 0x85B9
+#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB
+
+#define GLEW_APPLE_ycbcr_422 GLEW_GET_VAR(__GLEW_APPLE_ycbcr_422)
+
+#endif /* GL_APPLE_ycbcr_422 */
+
+/* ----------------------- GL_ARB_color_buffer_float ----------------------- */
+
+#ifndef GL_ARB_color_buffer_float
+#define GL_ARB_color_buffer_float 1
+
+#define GL_RGBA_FLOAT_MODE_ARB 0x8820
+#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A
+#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B
+#define GL_CLAMP_READ_COLOR_ARB 0x891C
+#define GL_FIXED_ONLY_ARB 0x891D
+
+typedef void (GLAPIENTRY * PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp);
+
+#define glClampColorARB GLEW_GET_FUN(__glewClampColorARB)
+
+#define GLEW_ARB_color_buffer_float GLEW_GET_VAR(__GLEW_ARB_color_buffer_float)
+
+#endif /* GL_ARB_color_buffer_float */
+
+/* -------------------------- GL_ARB_depth_texture ------------------------- */
+
+#ifndef GL_ARB_depth_texture
+#define GL_ARB_depth_texture 1
+
+#define GL_DEPTH_COMPONENT16_ARB 0x81A5
+#define GL_DEPTH_COMPONENT24_ARB 0x81A6
+#define GL_DEPTH_COMPONENT32_ARB 0x81A7
+#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A
+#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B
+
+#define GLEW_ARB_depth_texture GLEW_GET_VAR(__GLEW_ARB_depth_texture)
+
+#endif /* GL_ARB_depth_texture */
+
+/* -------------------------- GL_ARB_draw_buffers -------------------------- */
+
+#ifndef GL_ARB_draw_buffers
+#define GL_ARB_draw_buffers 1
+
+#define GL_MAX_DRAW_BUFFERS_ARB 0x8824
+#define GL_DRAW_BUFFER0_ARB 0x8825
+#define GL_DRAW_BUFFER1_ARB 0x8826
+#define GL_DRAW_BUFFER2_ARB 0x8827
+#define GL_DRAW_BUFFER3_ARB 0x8828
+#define GL_DRAW_BUFFER4_ARB 0x8829
+#define GL_DRAW_BUFFER5_ARB 0x882A
+#define GL_DRAW_BUFFER6_ARB 0x882B
+#define GL_DRAW_BUFFER7_ARB 0x882C
+#define GL_DRAW_BUFFER8_ARB 0x882D
+#define GL_DRAW_BUFFER9_ARB 0x882E
+#define GL_DRAW_BUFFER10_ARB 0x882F
+#define GL_DRAW_BUFFER11_ARB 0x8830
+#define GL_DRAW_BUFFER12_ARB 0x8831
+#define GL_DRAW_BUFFER13_ARB 0x8832
+#define GL_DRAW_BUFFER14_ARB 0x8833
+#define GL_DRAW_BUFFER15_ARB 0x8834
+
+typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum* bufs);
+
+#define glDrawBuffersARB GLEW_GET_FUN(__glewDrawBuffersARB)
+
+#define GLEW_ARB_draw_buffers GLEW_GET_VAR(__GLEW_ARB_draw_buffers)
+
+#endif /* GL_ARB_draw_buffers */
+
+/* ------------------------ GL_ARB_fragment_program ------------------------ */
+
+#ifndef GL_ARB_fragment_program
+#define GL_ARB_fragment_program 1
+
+#define GL_FRAGMENT_PROGRAM_ARB 0x8804
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
+#define GL_MAX_TEXTURE_COORDS_ARB 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872
+
+#define GLEW_ARB_fragment_program GLEW_GET_VAR(__GLEW_ARB_fragment_program)
+
+#endif /* GL_ARB_fragment_program */
+
+/* --------------------- GL_ARB_fragment_program_shadow -------------------- */
+
+#ifndef GL_ARB_fragment_program_shadow
+#define GL_ARB_fragment_program_shadow 1
+
+#define GLEW_ARB_fragment_program_shadow GLEW_GET_VAR(__GLEW_ARB_fragment_program_shadow)
+
+#endif /* GL_ARB_fragment_program_shadow */
+
+/* ------------------------- GL_ARB_fragment_shader ------------------------ */
+
+#ifndef GL_ARB_fragment_shader
+#define GL_ARB_fragment_shader 1
+
+#define GL_FRAGMENT_SHADER_ARB 0x8B30
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B
+
+#define GLEW_ARB_fragment_shader GLEW_GET_VAR(__GLEW_ARB_fragment_shader)
+
+#endif /* GL_ARB_fragment_shader */
+
+/* ------------------------ GL_ARB_half_float_pixel ------------------------ */
+
+#ifndef GL_ARB_half_float_pixel
+#define GL_ARB_half_float_pixel 1
+
+#define GL_HALF_FLOAT_ARB 0x140B
+
+#define GLEW_ARB_half_float_pixel GLEW_GET_VAR(__GLEW_ARB_half_float_pixel)
+
+#endif /* GL_ARB_half_float_pixel */
+
+/* ----------------------------- GL_ARB_imaging ---------------------------- */
+
+#ifndef GL_ARB_imaging
+#define GL_ARB_imaging 1
+
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_BLEND_COLOR 0x8005
+#define GL_FUNC_ADD 0x8006
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_BLEND_EQUATION 0x8009
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_CONVOLUTION_1D 0x8010
+#define GL_CONVOLUTION_2D 0x8011
+#define GL_SEPARABLE_2D 0x8012
+#define GL_CONVOLUTION_BORDER_MODE 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS 0x8015
+#define GL_REDUCE 0x8016
+#define GL_CONVOLUTION_FORMAT 0x8017
+#define GL_CONVOLUTION_WIDTH 0x8018
+#define GL_CONVOLUTION_HEIGHT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH 0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT 0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023
+#define GL_HISTOGRAM 0x8024
+#define GL_PROXY_HISTOGRAM 0x8025
+#define GL_HISTOGRAM_WIDTH 0x8026
+#define GL_HISTOGRAM_FORMAT 0x8027
+#define GL_HISTOGRAM_RED_SIZE 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE 0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C
+#define GL_HISTOGRAM_SINK 0x802D
+#define GL_MINMAX 0x802E
+#define GL_MINMAX_FORMAT 0x802F
+#define GL_MINMAX_SINK 0x8030
+#define GL_TABLE_TOO_LARGE 0x8031
+#define GL_COLOR_MATRIX 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB
+#define GL_COLOR_TABLE 0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2
+#define GL_PROXY_COLOR_TABLE 0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
+#define GL_COLOR_TABLE_SCALE 0x80D6
+#define GL_COLOR_TABLE_BIAS 0x80D7
+#define GL_COLOR_TABLE_FORMAT 0x80D8
+#define GL_COLOR_TABLE_WIDTH 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF
+#define GL_IGNORE_BORDER 0x8150
+#define GL_CONSTANT_BORDER 0x8151
+#define GL_WRAP_BORDER 0x8152
+#define GL_REPLICATE_BORDER 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR 0x8154
+
+typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+typedef void (GLAPIENTRY * PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (GLAPIENTRY * PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLRESETMINMAXPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+
+#define glColorSubTable GLEW_GET_FUN(__glewColorSubTable)
+#define glColorTable GLEW_GET_FUN(__glewColorTable)
+#define glColorTableParameterfv GLEW_GET_FUN(__glewColorTableParameterfv)
+#define glColorTableParameteriv GLEW_GET_FUN(__glewColorTableParameteriv)
+#define glConvolutionFilter1D GLEW_GET_FUN(__glewConvolutionFilter1D)
+#define glConvolutionFilter2D GLEW_GET_FUN(__glewConvolutionFilter2D)
+#define glConvolutionParameterf GLEW_GET_FUN(__glewConvolutionParameterf)
+#define glConvolutionParameterfv GLEW_GET_FUN(__glewConvolutionParameterfv)
+#define glConvolutionParameteri GLEW_GET_FUN(__glewConvolutionParameteri)
+#define glConvolutionParameteriv GLEW_GET_FUN(__glewConvolutionParameteriv)
+#define glCopyColorSubTable GLEW_GET_FUN(__glewCopyColorSubTable)
+#define glCopyColorTable GLEW_GET_FUN(__glewCopyColorTable)
+#define glCopyConvolutionFilter1D GLEW_GET_FUN(__glewCopyConvolutionFilter1D)
+#define glCopyConvolutionFilter2D GLEW_GET_FUN(__glewCopyConvolutionFilter2D)
+#define glGetColorTable GLEW_GET_FUN(__glewGetColorTable)
+#define glGetColorTableParameterfv GLEW_GET_FUN(__glewGetColorTableParameterfv)
+#define glGetColorTableParameteriv GLEW_GET_FUN(__glewGetColorTableParameteriv)
+#define glGetConvolutionFilter GLEW_GET_FUN(__glewGetConvolutionFilter)
+#define glGetConvolutionParameterfv GLEW_GET_FUN(__glewGetConvolutionParameterfv)
+#define glGetConvolutionParameteriv GLEW_GET_FUN(__glewGetConvolutionParameteriv)
+#define glGetHistogram GLEW_GET_FUN(__glewGetHistogram)
+#define glGetHistogramParameterfv GLEW_GET_FUN(__glewGetHistogramParameterfv)
+#define glGetHistogramParameteriv GLEW_GET_FUN(__glewGetHistogramParameteriv)
+#define glGetMinmax GLEW_GET_FUN(__glewGetMinmax)
+#define glGetMinmaxParameterfv GLEW_GET_FUN(__glewGetMinmaxParameterfv)
+#define glGetMinmaxParameteriv GLEW_GET_FUN(__glewGetMinmaxParameteriv)
+#define glGetSeparableFilter GLEW_GET_FUN(__glewGetSeparableFilter)
+#define glHistogram GLEW_GET_FUN(__glewHistogram)
+#define glMinmax GLEW_GET_FUN(__glewMinmax)
+#define glResetHistogram GLEW_GET_FUN(__glewResetHistogram)
+#define glResetMinmax GLEW_GET_FUN(__glewResetMinmax)
+#define glSeparableFilter2D GLEW_GET_FUN(__glewSeparableFilter2D)
+
+#define GLEW_ARB_imaging GLEW_GET_VAR(__GLEW_ARB_imaging)
+
+#endif /* GL_ARB_imaging */
+
+/* ------------------------- GL_ARB_matrix_palette ------------------------- */
+
+#ifndef GL_ARB_matrix_palette
+#define GL_ARB_matrix_palette 1
+
+#define GL_MATRIX_PALETTE_ARB 0x8840
+#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841
+#define GL_MAX_PALETTE_MATRICES_ARB 0x8842
+#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843
+#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844
+#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845
+#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846
+#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848
+#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849
+
+typedef void (GLAPIENTRY * PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);
+typedef void (GLAPIENTRY * PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer);
+typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUBVARBPROC) (GLint size, GLubyte *indices);
+typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUIVARBPROC) (GLint size, GLuint *indices);
+typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUSVARBPROC) (GLint size, GLushort *indices);
+
+#define glCurrentPaletteMatrixARB GLEW_GET_FUN(__glewCurrentPaletteMatrixARB)
+#define glMatrixIndexPointerARB GLEW_GET_FUN(__glewMatrixIndexPointerARB)
+#define glMatrixIndexubvARB GLEW_GET_FUN(__glewMatrixIndexubvARB)
+#define glMatrixIndexuivARB GLEW_GET_FUN(__glewMatrixIndexuivARB)
+#define glMatrixIndexusvARB GLEW_GET_FUN(__glewMatrixIndexusvARB)
+
+#define GLEW_ARB_matrix_palette GLEW_GET_VAR(__GLEW_ARB_matrix_palette)
+
+#endif /* GL_ARB_matrix_palette */
+
+/* --------------------------- GL_ARB_multisample -------------------------- */
+
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+
+#define GL_MULTISAMPLE_ARB 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F
+#define GL_SAMPLE_COVERAGE_ARB 0x80A0
+#define GL_SAMPLE_BUFFERS_ARB 0x80A8
+#define GL_SAMPLES_ARB 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
+#define GL_MULTISAMPLE_BIT_ARB 0x20000000
+
+typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert);
+
+#define glSampleCoverageARB GLEW_GET_FUN(__glewSampleCoverageARB)
+
+#define GLEW_ARB_multisample GLEW_GET_VAR(__GLEW_ARB_multisample)
+
+#endif /* GL_ARB_multisample */
+
+/* -------------------------- GL_ARB_multitexture -------------------------- */
+
+#ifndef GL_ARB_multitexture
+#define GL_ARB_multitexture 1
+
+#define GL_TEXTURE0_ARB 0x84C0
+#define GL_TEXTURE1_ARB 0x84C1
+#define GL_TEXTURE2_ARB 0x84C2
+#define GL_TEXTURE3_ARB 0x84C3
+#define GL_TEXTURE4_ARB 0x84C4
+#define GL_TEXTURE5_ARB 0x84C5
+#define GL_TEXTURE6_ARB 0x84C6
+#define GL_TEXTURE7_ARB 0x84C7
+#define GL_TEXTURE8_ARB 0x84C8
+#define GL_TEXTURE9_ARB 0x84C9
+#define GL_TEXTURE10_ARB 0x84CA
+#define GL_TEXTURE11_ARB 0x84CB
+#define GL_TEXTURE12_ARB 0x84CC
+#define GL_TEXTURE13_ARB 0x84CD
+#define GL_TEXTURE14_ARB 0x84CE
+#define GL_TEXTURE15_ARB 0x84CF
+#define GL_TEXTURE16_ARB 0x84D0
+#define GL_TEXTURE17_ARB 0x84D1
+#define GL_TEXTURE18_ARB 0x84D2
+#define GL_TEXTURE19_ARB 0x84D3
+#define GL_TEXTURE20_ARB 0x84D4
+#define GL_TEXTURE21_ARB 0x84D5
+#define GL_TEXTURE22_ARB 0x84D6
+#define GL_TEXTURE23_ARB 0x84D7
+#define GL_TEXTURE24_ARB 0x84D8
+#define GL_TEXTURE25_ARB 0x84D9
+#define GL_TEXTURE26_ARB 0x84DA
+#define GL_TEXTURE27_ARB 0x84DB
+#define GL_TEXTURE28_ARB 0x84DC
+#define GL_TEXTURE29_ARB 0x84DD
+#define GL_TEXTURE30_ARB 0x84DE
+#define GL_TEXTURE31_ARB 0x84DF
+#define GL_ACTIVE_TEXTURE_ARB 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1
+#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2
+
+typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
+
+#define glActiveTextureARB GLEW_GET_FUN(__glewActiveTextureARB)
+#define glClientActiveTextureARB GLEW_GET_FUN(__glewClientActiveTextureARB)
+#define glMultiTexCoord1dARB GLEW_GET_FUN(__glewMultiTexCoord1dARB)
+#define glMultiTexCoord1dvARB GLEW_GET_FUN(__glewMultiTexCoord1dvARB)
+#define glMultiTexCoord1fARB GLEW_GET_FUN(__glewMultiTexCoord1fARB)
+#define glMultiTexCoord1fvARB GLEW_GET_FUN(__glewMultiTexCoord1fvARB)
+#define glMultiTexCoord1iARB GLEW_GET_FUN(__glewMultiTexCoord1iARB)
+#define glMultiTexCoord1ivARB GLEW_GET_FUN(__glewMultiTexCoord1ivARB)
+#define glMultiTexCoord1sARB GLEW_GET_FUN(__glewMultiTexCoord1sARB)
+#define glMultiTexCoord1svARB GLEW_GET_FUN(__glewMultiTexCoord1svARB)
+#define glMultiTexCoord2dARB GLEW_GET_FUN(__glewMultiTexCoord2dARB)
+#define glMultiTexCoord2dvARB GLEW_GET_FUN(__glewMultiTexCoord2dvARB)
+#define glMultiTexCoord2fARB GLEW_GET_FUN(__glewMultiTexCoord2fARB)
+#define glMultiTexCoord2fvARB GLEW_GET_FUN(__glewMultiTexCoord2fvARB)
+#define glMultiTexCoord2iARB GLEW_GET_FUN(__glewMultiTexCoord2iARB)
+#define glMultiTexCoord2ivARB GLEW_GET_FUN(__glewMultiTexCoord2ivARB)
+#define glMultiTexCoord2sARB GLEW_GET_FUN(__glewMultiTexCoord2sARB)
+#define glMultiTexCoord2svARB GLEW_GET_FUN(__glewMultiTexCoord2svARB)
+#define glMultiTexCoord3dARB GLEW_GET_FUN(__glewMultiTexCoord3dARB)
+#define glMultiTexCoord3dvARB GLEW_GET_FUN(__glewMultiTexCoord3dvARB)
+#define glMultiTexCoord3fARB GLEW_GET_FUN(__glewMultiTexCoord3fARB)
+#define glMultiTexCoord3fvARB GLEW_GET_FUN(__glewMultiTexCoord3fvARB)
+#define glMultiTexCoord3iARB GLEW_GET_FUN(__glewMultiTexCoord3iARB)
+#define glMultiTexCoord3ivARB GLEW_GET_FUN(__glewMultiTexCoord3ivARB)
+#define glMultiTexCoord3sARB GLEW_GET_FUN(__glewMultiTexCoord3sARB)
+#define glMultiTexCoord3svARB GLEW_GET_FUN(__glewMultiTexCoord3svARB)
+#define glMultiTexCoord4dARB GLEW_GET_FUN(__glewMultiTexCoord4dARB)
+#define glMultiTexCoord4dvARB GLEW_GET_FUN(__glewMultiTexCoord4dvARB)
+#define glMultiTexCoord4fARB GLEW_GET_FUN(__glewMultiTexCoord4fARB)
+#define glMultiTexCoord4fvARB GLEW_GET_FUN(__glewMultiTexCoord4fvARB)
+#define glMultiTexCoord4iARB GLEW_GET_FUN(__glewMultiTexCoord4iARB)
+#define glMultiTexCoord4ivARB GLEW_GET_FUN(__glewMultiTexCoord4ivARB)
+#define glMultiTexCoord4sARB GLEW_GET_FUN(__glewMultiTexCoord4sARB)
+#define glMultiTexCoord4svARB GLEW_GET_FUN(__glewMultiTexCoord4svARB)
+
+#define GLEW_ARB_multitexture GLEW_GET_VAR(__GLEW_ARB_multitexture)
+
+#endif /* GL_ARB_multitexture */
+
+/* ------------------------- GL_ARB_occlusion_query ------------------------ */
+
+#ifndef GL_ARB_occlusion_query
+#define GL_ARB_occlusion_query 1
+
+#define GL_QUERY_COUNTER_BITS_ARB 0x8864
+#define GL_CURRENT_QUERY_ARB 0x8865
+#define GL_QUERY_RESULT_ARB 0x8866
+#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
+#define GL_SAMPLES_PASSED_ARB 0x8914
+
+typedef void (GLAPIENTRY * PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id);
+typedef void (GLAPIENTRY * PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLENDQUERYARBPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISQUERYARBPROC) (GLuint id);
+
+#define glBeginQueryARB GLEW_GET_FUN(__glewBeginQueryARB)
+#define glDeleteQueriesARB GLEW_GET_FUN(__glewDeleteQueriesARB)
+#define glEndQueryARB GLEW_GET_FUN(__glewEndQueryARB)
+#define glGenQueriesARB GLEW_GET_FUN(__glewGenQueriesARB)
+#define glGetQueryObjectivARB GLEW_GET_FUN(__glewGetQueryObjectivARB)
+#define glGetQueryObjectuivARB GLEW_GET_FUN(__glewGetQueryObjectuivARB)
+#define glGetQueryivARB GLEW_GET_FUN(__glewGetQueryivARB)
+#define glIsQueryARB GLEW_GET_FUN(__glewIsQueryARB)
+
+#define GLEW_ARB_occlusion_query GLEW_GET_VAR(__GLEW_ARB_occlusion_query)
+
+#endif /* GL_ARB_occlusion_query */
+
+/* ------------------------ GL_ARB_point_parameters ------------------------ */
+
+#ifndef GL_ARB_point_parameters
+#define GL_ARB_point_parameters 1
+
+#define GL_POINT_SIZE_MIN_ARB 0x8126
+#define GL_POINT_SIZE_MAX_ARB 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, GLfloat* params);
+
+#define glPointParameterfARB GLEW_GET_FUN(__glewPointParameterfARB)
+#define glPointParameterfvARB GLEW_GET_FUN(__glewPointParameterfvARB)
+
+#define GLEW_ARB_point_parameters GLEW_GET_VAR(__GLEW_ARB_point_parameters)
+
+#endif /* GL_ARB_point_parameters */
+
+/* -------------------------- GL_ARB_point_sprite -------------------------- */
+
+#ifndef GL_ARB_point_sprite
+#define GL_ARB_point_sprite 1
+
+#define GL_POINT_SPRITE_ARB 0x8861
+#define GL_COORD_REPLACE_ARB 0x8862
+
+#define GLEW_ARB_point_sprite GLEW_GET_VAR(__GLEW_ARB_point_sprite)
+
+#endif /* GL_ARB_point_sprite */
+
+/* ------------------------- GL_ARB_shader_objects ------------------------- */
+
+#ifndef GL_ARB_shader_objects
+#define GL_ARB_shader_objects 1
+
+#define GL_PROGRAM_OBJECT_ARB 0x8B40
+#define GL_SHADER_OBJECT_ARB 0x8B48
+#define GL_OBJECT_TYPE_ARB 0x8B4E
+#define GL_OBJECT_SUBTYPE_ARB 0x8B4F
+#define GL_FLOAT_VEC2_ARB 0x8B50
+#define GL_FLOAT_VEC3_ARB 0x8B51
+#define GL_FLOAT_VEC4_ARB 0x8B52
+#define GL_INT_VEC2_ARB 0x8B53
+#define GL_INT_VEC3_ARB 0x8B54
+#define GL_INT_VEC4_ARB 0x8B55
+#define GL_BOOL_ARB 0x8B56
+#define GL_BOOL_VEC2_ARB 0x8B57
+#define GL_BOOL_VEC3_ARB 0x8B58
+#define GL_BOOL_VEC4_ARB 0x8B59
+#define GL_FLOAT_MAT2_ARB 0x8B5A
+#define GL_FLOAT_MAT3_ARB 0x8B5B
+#define GL_FLOAT_MAT4_ARB 0x8B5C
+#define GL_SAMPLER_1D_ARB 0x8B5D
+#define GL_SAMPLER_2D_ARB 0x8B5E
+#define GL_SAMPLER_3D_ARB 0x8B5F
+#define GL_SAMPLER_CUBE_ARB 0x8B60
+#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61
+#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62
+#define GL_SAMPLER_2D_RECT_ARB 0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64
+#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80
+#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81
+#define GL_OBJECT_LINK_STATUS_ARB 0x8B82
+#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88
+
+typedef char GLcharARB;
+typedef int GLhandleARB;
+
+typedef void (GLAPIENTRY * PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
+typedef void (GLAPIENTRY * PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
+typedef GLhandleARB (GLAPIENTRY * PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
+typedef GLhandleARB (GLAPIENTRY * PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
+typedef void (GLAPIENTRY * PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
+typedef void (GLAPIENTRY * PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj);
+typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name);
+typedef void (GLAPIENTRY * PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei* count, GLhandleARB *obj);
+typedef GLhandleARB (GLAPIENTRY * PFNGLGETHANDLEARBPROC) (GLenum pname);
+typedef void (GLAPIENTRY * PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *infoLog);
+typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *source);
+typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name);
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint* params);
+typedef void (GLAPIENTRY * PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
+typedef void (GLAPIENTRY * PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint *length);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
+typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj);
+
+#define glAttachObjectARB GLEW_GET_FUN(__glewAttachObjectARB)
+#define glCompileShaderARB GLEW_GET_FUN(__glewCompileShaderARB)
+#define glCreateProgramObjectARB GLEW_GET_FUN(__glewCreateProgramObjectARB)
+#define glCreateShaderObjectARB GLEW_GET_FUN(__glewCreateShaderObjectARB)
+#define glDeleteObjectARB GLEW_GET_FUN(__glewDeleteObjectARB)
+#define glDetachObjectARB GLEW_GET_FUN(__glewDetachObjectARB)
+#define glGetActiveUniformARB GLEW_GET_FUN(__glewGetActiveUniformARB)
+#define glGetAttachedObjectsARB GLEW_GET_FUN(__glewGetAttachedObjectsARB)
+#define glGetHandleARB GLEW_GET_FUN(__glewGetHandleARB)
+#define glGetInfoLogARB GLEW_GET_FUN(__glewGetInfoLogARB)
+#define glGetObjectParameterfvARB GLEW_GET_FUN(__glewGetObjectParameterfvARB)
+#define glGetObjectParameterivARB GLEW_GET_FUN(__glewGetObjectParameterivARB)
+#define glGetShaderSourceARB GLEW_GET_FUN(__glewGetShaderSourceARB)
+#define glGetUniformLocationARB GLEW_GET_FUN(__glewGetUniformLocationARB)
+#define glGetUniformfvARB GLEW_GET_FUN(__glewGetUniformfvARB)
+#define glGetUniformivARB GLEW_GET_FUN(__glewGetUniformivARB)
+#define glLinkProgramARB GLEW_GET_FUN(__glewLinkProgramARB)
+#define glShaderSourceARB GLEW_GET_FUN(__glewShaderSourceARB)
+#define glUniform1fARB GLEW_GET_FUN(__glewUniform1fARB)
+#define glUniform1fvARB GLEW_GET_FUN(__glewUniform1fvARB)
+#define glUniform1iARB GLEW_GET_FUN(__glewUniform1iARB)
+#define glUniform1ivARB GLEW_GET_FUN(__glewUniform1ivARB)
+#define glUniform2fARB GLEW_GET_FUN(__glewUniform2fARB)
+#define glUniform2fvARB GLEW_GET_FUN(__glewUniform2fvARB)
+#define glUniform2iARB GLEW_GET_FUN(__glewUniform2iARB)
+#define glUniform2ivARB GLEW_GET_FUN(__glewUniform2ivARB)
+#define glUniform3fARB GLEW_GET_FUN(__glewUniform3fARB)
+#define glUniform3fvARB GLEW_GET_FUN(__glewUniform3fvARB)
+#define glUniform3iARB GLEW_GET_FUN(__glewUniform3iARB)
+#define glUniform3ivARB GLEW_GET_FUN(__glewUniform3ivARB)
+#define glUniform4fARB GLEW_GET_FUN(__glewUniform4fARB)
+#define glUniform4fvARB GLEW_GET_FUN(__glewUniform4fvARB)
+#define glUniform4iARB GLEW_GET_FUN(__glewUniform4iARB)
+#define glUniform4ivARB GLEW_GET_FUN(__glewUniform4ivARB)
+#define glUniformMatrix2fvARB GLEW_GET_FUN(__glewUniformMatrix2fvARB)
+#define glUniformMatrix3fvARB GLEW_GET_FUN(__glewUniformMatrix3fvARB)
+#define glUniformMatrix4fvARB GLEW_GET_FUN(__glewUniformMatrix4fvARB)
+#define glUseProgramObjectARB GLEW_GET_FUN(__glewUseProgramObjectARB)
+#define glValidateProgramARB GLEW_GET_FUN(__glewValidateProgramARB)
+
+#define GLEW_ARB_shader_objects GLEW_GET_VAR(__GLEW_ARB_shader_objects)
+
+#endif /* GL_ARB_shader_objects */
+
+/* ---------------------- GL_ARB_shading_language_100 ---------------------- */
+
+#ifndef GL_ARB_shading_language_100
+#define GL_ARB_shading_language_100 1
+
+#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
+
+#define GLEW_ARB_shading_language_100 GLEW_GET_VAR(__GLEW_ARB_shading_language_100)
+
+#endif /* GL_ARB_shading_language_100 */
+
+/* ----------------------------- GL_ARB_shadow ----------------------------- */
+
+#ifndef GL_ARB_shadow
+#define GL_ARB_shadow 1
+
+#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C
+#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D
+#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E
+
+#define GLEW_ARB_shadow GLEW_GET_VAR(__GLEW_ARB_shadow)
+
+#endif /* GL_ARB_shadow */
+
+/* ------------------------- GL_ARB_shadow_ambient ------------------------- */
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_ARB_shadow_ambient 1
+
+#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF
+
+#define GLEW_ARB_shadow_ambient GLEW_GET_VAR(__GLEW_ARB_shadow_ambient)
+
+#endif /* GL_ARB_shadow_ambient */
+
+/* ---------------------- GL_ARB_texture_border_clamp ---------------------- */
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+
+#define GL_CLAMP_TO_BORDER_ARB 0x812D
+
+#define GLEW_ARB_texture_border_clamp GLEW_GET_VAR(__GLEW_ARB_texture_border_clamp)
+
+#endif /* GL_ARB_texture_border_clamp */
+
+/* ----------------------- GL_ARB_texture_compression ---------------------- */
+
+#ifndef GL_ARB_texture_compression
+#define GL_ARB_texture_compression 1
+
+#define GL_COMPRESSED_ALPHA_ARB 0x84E9
+#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB
+#define GL_COMPRESSED_INTENSITY_ARB 0x84EC
+#define GL_COMPRESSED_RGB_ARB 0x84ED
+#define GL_COMPRESSED_RGBA_ARB 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0
+#define GL_TEXTURE_COMPRESSED_ARB 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3
+
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, void* img);
+
+#define glCompressedTexImage1DARB GLEW_GET_FUN(__glewCompressedTexImage1DARB)
+#define glCompressedTexImage2DARB GLEW_GET_FUN(__glewCompressedTexImage2DARB)
+#define glCompressedTexImage3DARB GLEW_GET_FUN(__glewCompressedTexImage3DARB)
+#define glCompressedTexSubImage1DARB GLEW_GET_FUN(__glewCompressedTexSubImage1DARB)
+#define glCompressedTexSubImage2DARB GLEW_GET_FUN(__glewCompressedTexSubImage2DARB)
+#define glCompressedTexSubImage3DARB GLEW_GET_FUN(__glewCompressedTexSubImage3DARB)
+#define glGetCompressedTexImageARB GLEW_GET_FUN(__glewGetCompressedTexImageARB)
+
+#define GLEW_ARB_texture_compression GLEW_GET_VAR(__GLEW_ARB_texture_compression)
+
+#endif /* GL_ARB_texture_compression */
+
+/* ------------------------ GL_ARB_texture_cube_map ------------------------ */
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+
+#define GL_NORMAL_MAP_ARB 0x8511
+#define GL_REFLECTION_MAP_ARB 0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C
+
+#define GLEW_ARB_texture_cube_map GLEW_GET_VAR(__GLEW_ARB_texture_cube_map)
+
+#endif /* GL_ARB_texture_cube_map */
+
+/* ------------------------- GL_ARB_texture_env_add ------------------------ */
+
+#ifndef GL_ARB_texture_env_add
+#define GL_ARB_texture_env_add 1
+
+#define GLEW_ARB_texture_env_add GLEW_GET_VAR(__GLEW_ARB_texture_env_add)
+
+#endif /* GL_ARB_texture_env_add */
+
+/* ----------------------- GL_ARB_texture_env_combine ---------------------- */
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_ARB_texture_env_combine 1
+
+#define GL_SUBTRACT_ARB 0x84E7
+#define GL_COMBINE_ARB 0x8570
+#define GL_COMBINE_RGB_ARB 0x8571
+#define GL_COMBINE_ALPHA_ARB 0x8572
+#define GL_RGB_SCALE_ARB 0x8573
+#define GL_ADD_SIGNED_ARB 0x8574
+#define GL_INTERPOLATE_ARB 0x8575
+#define GL_CONSTANT_ARB 0x8576
+#define GL_PRIMARY_COLOR_ARB 0x8577
+#define GL_PREVIOUS_ARB 0x8578
+#define GL_SOURCE0_RGB_ARB 0x8580
+#define GL_SOURCE1_RGB_ARB 0x8581
+#define GL_SOURCE2_RGB_ARB 0x8582
+#define GL_SOURCE0_ALPHA_ARB 0x8588
+#define GL_SOURCE1_ALPHA_ARB 0x8589
+#define GL_SOURCE2_ALPHA_ARB 0x858A
+#define GL_OPERAND0_RGB_ARB 0x8590
+#define GL_OPERAND1_RGB_ARB 0x8591
+#define GL_OPERAND2_RGB_ARB 0x8592
+#define GL_OPERAND0_ALPHA_ARB 0x8598
+#define GL_OPERAND1_ALPHA_ARB 0x8599
+#define GL_OPERAND2_ALPHA_ARB 0x859A
+
+#define GLEW_ARB_texture_env_combine GLEW_GET_VAR(__GLEW_ARB_texture_env_combine)
+
+#endif /* GL_ARB_texture_env_combine */
+
+/* ---------------------- GL_ARB_texture_env_crossbar ---------------------- */
+
+#ifndef GL_ARB_texture_env_crossbar
+#define GL_ARB_texture_env_crossbar 1
+
+#define GLEW_ARB_texture_env_crossbar GLEW_GET_VAR(__GLEW_ARB_texture_env_crossbar)
+
+#endif /* GL_ARB_texture_env_crossbar */
+
+/* ------------------------ GL_ARB_texture_env_dot3 ------------------------ */
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+
+#define GL_DOT3_RGB_ARB 0x86AE
+#define GL_DOT3_RGBA_ARB 0x86AF
+
+#define GLEW_ARB_texture_env_dot3 GLEW_GET_VAR(__GLEW_ARB_texture_env_dot3)
+
+#endif /* GL_ARB_texture_env_dot3 */
+
+/* -------------------------- GL_ARB_texture_float ------------------------- */
+
+#ifndef GL_ARB_texture_float
+#define GL_ARB_texture_float 1
+
+#define GL_RGBA32F_ARB 0x8814
+#define GL_RGB32F_ARB 0x8815
+#define GL_ALPHA32F_ARB 0x8816
+#define GL_INTENSITY32F_ARB 0x8817
+#define GL_LUMINANCE32F_ARB 0x8818
+#define GL_LUMINANCE_ALPHA32F_ARB 0x8819
+#define GL_RGBA16F_ARB 0x881A
+#define GL_RGB16F_ARB 0x881B
+#define GL_ALPHA16F_ARB 0x881C
+#define GL_INTENSITY16F_ARB 0x881D
+#define GL_LUMINANCE16F_ARB 0x881E
+#define GL_LUMINANCE_ALPHA16F_ARB 0x881F
+#define GL_TEXTURE_RED_TYPE_ARB 0x8C10
+#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11
+#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13
+#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15
+#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16
+#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17
+
+#define GLEW_ARB_texture_float GLEW_GET_VAR(__GLEW_ARB_texture_float)
+
+#endif /* GL_ARB_texture_float */
+
+/* --------------------- GL_ARB_texture_mirrored_repeat -------------------- */
+
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_ARB_texture_mirrored_repeat 1
+
+#define GL_MIRRORED_REPEAT_ARB 0x8370
+
+#define GLEW_ARB_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_ARB_texture_mirrored_repeat)
+
+#endif /* GL_ARB_texture_mirrored_repeat */
+
+/* -------------------- GL_ARB_texture_non_power_of_two -------------------- */
+
+#ifndef GL_ARB_texture_non_power_of_two
+#define GL_ARB_texture_non_power_of_two 1
+
+#define GLEW_ARB_texture_non_power_of_two GLEW_GET_VAR(__GLEW_ARB_texture_non_power_of_two)
+
+#endif /* GL_ARB_texture_non_power_of_two */
+
+/* ------------------------ GL_ARB_texture_rectangle ----------------------- */
+
+#ifndef GL_ARB_texture_rectangle
+#define GL_ARB_texture_rectangle 1
+
+#define GL_TEXTURE_RECTANGLE_ARB 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8
+
+#define GLEW_ARB_texture_rectangle GLEW_GET_VAR(__GLEW_ARB_texture_rectangle)
+
+#endif /* GL_ARB_texture_rectangle */
+
+/* ------------------------ GL_ARB_transpose_matrix ------------------------ */
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_ARB_transpose_matrix 1
+
+#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6
+
+#define GLEW_ARB_transpose_matrix GLEW_GET_VAR(__GLEW_ARB_transpose_matrix)
+
+#endif /* GL_ARB_transpose_matrix */
+
+/* -------------------------- GL_ARB_vertex_blend -------------------------- */
+
+#ifndef GL_ARB_vertex_blend
+#define GL_ARB_vertex_blend 1
+
+#define GL_MODELVIEW0_ARB 0x1700
+#define GL_MODELVIEW1_ARB 0x850A
+#define GL_MAX_VERTEX_UNITS_ARB 0x86A4
+#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5
+#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6
+#define GL_VERTEX_BLEND_ARB 0x86A7
+#define GL_CURRENT_WEIGHT_ARB 0x86A8
+#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA
+#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB
+#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC
+#define GL_WEIGHT_ARRAY_ARB 0x86AD
+#define GL_MODELVIEW2_ARB 0x8722
+#define GL_MODELVIEW3_ARB 0x8723
+#define GL_MODELVIEW4_ARB 0x8724
+#define GL_MODELVIEW5_ARB 0x8725
+#define GL_MODELVIEW6_ARB 0x8726
+#define GL_MODELVIEW7_ARB 0x8727
+#define GL_MODELVIEW8_ARB 0x8728
+#define GL_MODELVIEW9_ARB 0x8729
+#define GL_MODELVIEW10_ARB 0x872A
+#define GL_MODELVIEW11_ARB 0x872B
+#define GL_MODELVIEW12_ARB 0x872C
+#define GL_MODELVIEW13_ARB 0x872D
+#define GL_MODELVIEW14_ARB 0x872E
+#define GL_MODELVIEW15_ARB 0x872F
+#define GL_MODELVIEW16_ARB 0x8730
+#define GL_MODELVIEW17_ARB 0x8731
+#define GL_MODELVIEW18_ARB 0x8732
+#define GL_MODELVIEW19_ARB 0x8733
+#define GL_MODELVIEW20_ARB 0x8734
+#define GL_MODELVIEW21_ARB 0x8735
+#define GL_MODELVIEW22_ARB 0x8736
+#define GL_MODELVIEW23_ARB 0x8737
+#define GL_MODELVIEW24_ARB 0x8738
+#define GL_MODELVIEW25_ARB 0x8739
+#define GL_MODELVIEW26_ARB 0x873A
+#define GL_MODELVIEW27_ARB 0x873B
+#define GL_MODELVIEW28_ARB 0x873C
+#define GL_MODELVIEW29_ARB 0x873D
+#define GL_MODELVIEW30_ARB 0x873E
+#define GL_MODELVIEW31_ARB 0x873F
+
+typedef void (GLAPIENTRY * PFNGLVERTEXBLENDARBPROC) (GLint count);
+typedef void (GLAPIENTRY * PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer);
+typedef void (GLAPIENTRY * PFNGLWEIGHTBVARBPROC) (GLint size, GLbyte *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTDVARBPROC) (GLint size, GLdouble *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTFVARBPROC) (GLint size, GLfloat *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTIVARBPROC) (GLint size, GLint *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTSVARBPROC) (GLint size, GLshort *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTUBVARBPROC) (GLint size, GLubyte *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTUIVARBPROC) (GLint size, GLuint *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTUSVARBPROC) (GLint size, GLushort *weights);
+
+#define glVertexBlendARB GLEW_GET_FUN(__glewVertexBlendARB)
+#define glWeightPointerARB GLEW_GET_FUN(__glewWeightPointerARB)
+#define glWeightbvARB GLEW_GET_FUN(__glewWeightbvARB)
+#define glWeightdvARB GLEW_GET_FUN(__glewWeightdvARB)
+#define glWeightfvARB GLEW_GET_FUN(__glewWeightfvARB)
+#define glWeightivARB GLEW_GET_FUN(__glewWeightivARB)
+#define glWeightsvARB GLEW_GET_FUN(__glewWeightsvARB)
+#define glWeightubvARB GLEW_GET_FUN(__glewWeightubvARB)
+#define glWeightuivARB GLEW_GET_FUN(__glewWeightuivARB)
+#define glWeightusvARB GLEW_GET_FUN(__glewWeightusvARB)
+
+#define GLEW_ARB_vertex_blend GLEW_GET_VAR(__GLEW_ARB_vertex_blend)
+
+#endif /* GL_ARB_vertex_blend */
+
+/* ---------------------- GL_ARB_vertex_buffer_object ---------------------- */
+
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_ARB_vertex_buffer_object 1
+
+#define GL_BUFFER_SIZE_ARB 0x8764
+#define GL_BUFFER_USAGE_ARB 0x8765
+#define GL_ARRAY_BUFFER_ARB 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
+#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
+#define GL_READ_ONLY_ARB 0x88B8
+#define GL_WRITE_ONLY_ARB 0x88B9
+#define GL_READ_WRITE_ARB 0x88BA
+#define GL_BUFFER_ACCESS_ARB 0x88BB
+#define GL_BUFFER_MAPPED_ARB 0x88BC
+#define GL_BUFFER_MAP_POINTER_ARB 0x88BD
+#define GL_STREAM_DRAW_ARB 0x88E0
+#define GL_STREAM_READ_ARB 0x88E1
+#define GL_STREAM_COPY_ARB 0x88E2
+#define GL_STATIC_DRAW_ARB 0x88E4
+#define GL_STATIC_READ_ARB 0x88E5
+#define GL_STATIC_COPY_ARB 0x88E6
+#define GL_DYNAMIC_DRAW_ARB 0x88E8
+#define GL_DYNAMIC_READ_ARB 0x88E9
+#define GL_DYNAMIC_COPY_ARB 0x88EA
+
+typedef ptrdiff_t GLsizeiptrARB;
+typedef ptrdiff_t GLintptrARB;
+
+typedef void (GLAPIENTRY * PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid* data, GLenum usage);
+typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid* data);
+typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint* buffers);
+typedef void (GLAPIENTRY * PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint* buffers);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid** params);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid* data);
+typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERARBPROC) (GLuint buffer);
+typedef GLvoid * (GLAPIENTRY * PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access);
+typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERARBPROC) (GLenum target);
+
+#define glBindBufferARB GLEW_GET_FUN(__glewBindBufferARB)
+#define glBufferDataARB GLEW_GET_FUN(__glewBufferDataARB)
+#define glBufferSubDataARB GLEW_GET_FUN(__glewBufferSubDataARB)
+#define glDeleteBuffersARB GLEW_GET_FUN(__glewDeleteBuffersARB)
+#define glGenBuffersARB GLEW_GET_FUN(__glewGenBuffersARB)
+#define glGetBufferParameterivARB GLEW_GET_FUN(__glewGetBufferParameterivARB)
+#define glGetBufferPointervARB GLEW_GET_FUN(__glewGetBufferPointervARB)
+#define glGetBufferSubDataARB GLEW_GET_FUN(__glewGetBufferSubDataARB)
+#define glIsBufferARB GLEW_GET_FUN(__glewIsBufferARB)
+#define glMapBufferARB GLEW_GET_FUN(__glewMapBufferARB)
+#define glUnmapBufferARB GLEW_GET_FUN(__glewUnmapBufferARB)
+
+#define GLEW_ARB_vertex_buffer_object GLEW_GET_VAR(__GLEW_ARB_vertex_buffer_object)
+
+#endif /* GL_ARB_vertex_buffer_object */
+
+/* ------------------------- GL_ARB_vertex_program ------------------------- */
+
+#ifndef GL_ARB_vertex_program
+#define GL_ARB_vertex_program 1
+
+#define GL_COLOR_SUM_ARB 0x8458
+#define GL_VERTEX_PROGRAM_ARB 0x8620
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
+#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
+#define GL_PROGRAM_LENGTH_ARB 0x8627
+#define GL_PROGRAM_STRING_ARB 0x8628
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
+#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
+#define GL_CURRENT_MATRIX_ARB 0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
+#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B
+#define GL_PROGRAM_BINDING_ARB 0x8677
+#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
+#define GL_PROGRAM_ERROR_STRING_ARB 0x8874
+#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
+#define GL_PROGRAM_FORMAT_ARB 0x8876
+#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
+#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
+#define GL_PROGRAM_PARAMETERS_ARB 0x88A8
+#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
+#define GL_PROGRAM_ATTRIBS_ARB 0x88AC
+#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7
+#define GL_MATRIX0_ARB 0x88C0
+#define GL_MATRIX1_ARB 0x88C1
+#define GL_MATRIX2_ARB 0x88C2
+#define GL_MATRIX3_ARB 0x88C3
+#define GL_MATRIX4_ARB 0x88C4
+#define GL_MATRIX5_ARB 0x88C5
+#define GL_MATRIX6_ARB 0x88C6
+#define GL_MATRIX7_ARB 0x88C7
+#define GL_MATRIX8_ARB 0x88C8
+#define GL_MATRIX9_ARB 0x88C9
+#define GL_MATRIX10_ARB 0x88CA
+#define GL_MATRIX11_ARB 0x88CB
+#define GL_MATRIX12_ARB 0x88CC
+#define GL_MATRIX13_ARB 0x88CD
+#define GL_MATRIX14_ARB 0x88CE
+#define GL_MATRIX15_ARB 0x88CF
+#define GL_MATRIX16_ARB 0x88D0
+#define GL_MATRIX17_ARB 0x88D1
+#define GL_MATRIX18_ARB 0x88D2
+#define GL_MATRIX19_ARB 0x88D3
+#define GL_MATRIX20_ARB 0x88D4
+#define GL_MATRIX21_ARB 0x88D5
+#define GL_MATRIX22_ARB 0x88D6
+#define GL_MATRIX23_ARB 0x88D7
+#define GL_MATRIX24_ARB 0x88D8
+#define GL_MATRIX25_ARB 0x88D9
+#define GL_MATRIX26_ARB 0x88DA
+#define GL_MATRIX27_ARB 0x88DB
+#define GL_MATRIX28_ARB 0x88DC
+#define GL_MATRIX29_ARB 0x88DD
+#define GL_MATRIX30_ARB 0x88DE
+#define GL_MATRIX31_ARB 0x88DF
+
+typedef void (GLAPIENTRY * PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program);
+typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint* programs);
+typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (GLAPIENTRY * PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint* programs);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void* string);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid** pointer);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMARBPROC) (GLuint program);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void* string);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer);
+
+#define glBindProgramARB GLEW_GET_FUN(__glewBindProgramARB)
+#define glDeleteProgramsARB GLEW_GET_FUN(__glewDeleteProgramsARB)
+#define glDisableVertexAttribArrayARB GLEW_GET_FUN(__glewDisableVertexAttribArrayARB)
+#define glEnableVertexAttribArrayARB GLEW_GET_FUN(__glewEnableVertexAttribArrayARB)
+#define glGenProgramsARB GLEW_GET_FUN(__glewGenProgramsARB)
+#define glGetProgramEnvParameterdvARB GLEW_GET_FUN(__glewGetProgramEnvParameterdvARB)
+#define glGetProgramEnvParameterfvARB GLEW_GET_FUN(__glewGetProgramEnvParameterfvARB)
+#define glGetProgramLocalParameterdvARB GLEW_GET_FUN(__glewGetProgramLocalParameterdvARB)
+#define glGetProgramLocalParameterfvARB GLEW_GET_FUN(__glewGetProgramLocalParameterfvARB)
+#define glGetProgramStringARB GLEW_GET_FUN(__glewGetProgramStringARB)
+#define glGetProgramivARB GLEW_GET_FUN(__glewGetProgramivARB)
+#define glGetVertexAttribPointervARB GLEW_GET_FUN(__glewGetVertexAttribPointervARB)
+#define glGetVertexAttribdvARB GLEW_GET_FUN(__glewGetVertexAttribdvARB)
+#define glGetVertexAttribfvARB GLEW_GET_FUN(__glewGetVertexAttribfvARB)
+#define glGetVertexAttribivARB GLEW_GET_FUN(__glewGetVertexAttribivARB)
+#define glIsProgramARB GLEW_GET_FUN(__glewIsProgramARB)
+#define glProgramEnvParameter4dARB GLEW_GET_FUN(__glewProgramEnvParameter4dARB)
+#define glProgramEnvParameter4dvARB GLEW_GET_FUN(__glewProgramEnvParameter4dvARB)
+#define glProgramEnvParameter4fARB GLEW_GET_FUN(__glewProgramEnvParameter4fARB)
+#define glProgramEnvParameter4fvARB GLEW_GET_FUN(__glewProgramEnvParameter4fvARB)
+#define glProgramLocalParameter4dARB GLEW_GET_FUN(__glewProgramLocalParameter4dARB)
+#define glProgramLocalParameter4dvARB GLEW_GET_FUN(__glewProgramLocalParameter4dvARB)
+#define glProgramLocalParameter4fARB GLEW_GET_FUN(__glewProgramLocalParameter4fARB)
+#define glProgramLocalParameter4fvARB GLEW_GET_FUN(__glewProgramLocalParameter4fvARB)
+#define glProgramStringARB GLEW_GET_FUN(__glewProgramStringARB)
+#define glVertexAttrib1dARB GLEW_GET_FUN(__glewVertexAttrib1dARB)
+#define glVertexAttrib1dvARB GLEW_GET_FUN(__glewVertexAttrib1dvARB)
+#define glVertexAttrib1fARB GLEW_GET_FUN(__glewVertexAttrib1fARB)
+#define glVertexAttrib1fvARB GLEW_GET_FUN(__glewVertexAttrib1fvARB)
+#define glVertexAttrib1sARB GLEW_GET_FUN(__glewVertexAttrib1sARB)
+#define glVertexAttrib1svARB GLEW_GET_FUN(__glewVertexAttrib1svARB)
+#define glVertexAttrib2dARB GLEW_GET_FUN(__glewVertexAttrib2dARB)
+#define glVertexAttrib2dvARB GLEW_GET_FUN(__glewVertexAttrib2dvARB)
+#define glVertexAttrib2fARB GLEW_GET_FUN(__glewVertexAttrib2fARB)
+#define glVertexAttrib2fvARB GLEW_GET_FUN(__glewVertexAttrib2fvARB)
+#define glVertexAttrib2sARB GLEW_GET_FUN(__glewVertexAttrib2sARB)
+#define glVertexAttrib2svARB GLEW_GET_FUN(__glewVertexAttrib2svARB)
+#define glVertexAttrib3dARB GLEW_GET_FUN(__glewVertexAttrib3dARB)
+#define glVertexAttrib3dvARB GLEW_GET_FUN(__glewVertexAttrib3dvARB)
+#define glVertexAttrib3fARB GLEW_GET_FUN(__glewVertexAttrib3fARB)
+#define glVertexAttrib3fvARB GLEW_GET_FUN(__glewVertexAttrib3fvARB)
+#define glVertexAttrib3sARB GLEW_GET_FUN(__glewVertexAttrib3sARB)
+#define glVertexAttrib3svARB GLEW_GET_FUN(__glewVertexAttrib3svARB)
+#define glVertexAttrib4NbvARB GLEW_GET_FUN(__glewVertexAttrib4NbvARB)
+#define glVertexAttrib4NivARB GLEW_GET_FUN(__glewVertexAttrib4NivARB)
+#define glVertexAttrib4NsvARB GLEW_GET_FUN(__glewVertexAttrib4NsvARB)
+#define glVertexAttrib4NubARB GLEW_GET_FUN(__glewVertexAttrib4NubARB)
+#define glVertexAttrib4NubvARB GLEW_GET_FUN(__glewVertexAttrib4NubvARB)
+#define glVertexAttrib4NuivARB GLEW_GET_FUN(__glewVertexAttrib4NuivARB)
+#define glVertexAttrib4NusvARB GLEW_GET_FUN(__glewVertexAttrib4NusvARB)
+#define glVertexAttrib4bvARB GLEW_GET_FUN(__glewVertexAttrib4bvARB)
+#define glVertexAttrib4dARB GLEW_GET_FUN(__glewVertexAttrib4dARB)
+#define glVertexAttrib4dvARB GLEW_GET_FUN(__glewVertexAttrib4dvARB)
+#define glVertexAttrib4fARB GLEW_GET_FUN(__glewVertexAttrib4fARB)
+#define glVertexAttrib4fvARB GLEW_GET_FUN(__glewVertexAttrib4fvARB)
+#define glVertexAttrib4ivARB GLEW_GET_FUN(__glewVertexAttrib4ivARB)
+#define glVertexAttrib4sARB GLEW_GET_FUN(__glewVertexAttrib4sARB)
+#define glVertexAttrib4svARB GLEW_GET_FUN(__glewVertexAttrib4svARB)
+#define glVertexAttrib4ubvARB GLEW_GET_FUN(__glewVertexAttrib4ubvARB)
+#define glVertexAttrib4uivARB GLEW_GET_FUN(__glewVertexAttrib4uivARB)
+#define glVertexAttrib4usvARB GLEW_GET_FUN(__glewVertexAttrib4usvARB)
+#define glVertexAttribPointerARB GLEW_GET_FUN(__glewVertexAttribPointerARB)
+
+#define GLEW_ARB_vertex_program GLEW_GET_VAR(__GLEW_ARB_vertex_program)
+
+#endif /* GL_ARB_vertex_program */
+
+/* -------------------------- GL_ARB_vertex_shader ------------------------- */
+
+#ifndef GL_ARB_vertex_shader
+#define GL_ARB_vertex_shader 1
+
+#define GL_VERTEX_SHADER_ARB 0x8B31
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
+#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A
+
+typedef void (GLAPIENTRY * PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB* name);
+typedef void (GLAPIENTRY * PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name);
+typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name);
+
+#define glBindAttribLocationARB GLEW_GET_FUN(__glewBindAttribLocationARB)
+#define glGetActiveAttribARB GLEW_GET_FUN(__glewGetActiveAttribARB)
+#define glGetAttribLocationARB GLEW_GET_FUN(__glewGetAttribLocationARB)
+
+#define GLEW_ARB_vertex_shader GLEW_GET_VAR(__GLEW_ARB_vertex_shader)
+
+#endif /* GL_ARB_vertex_shader */
+
+/* --------------------------- GL_ARB_window_pos --------------------------- */
+
+#ifndef GL_ARB_window_pos
+#define GL_ARB_window_pos 1
+
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVARBPROC) (const GLdouble* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVARBPROC) (const GLfloat* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVARBPROC) (const GLint* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVARBPROC) (const GLshort* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVARBPROC) (const GLdouble* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVARBPROC) (const GLfloat* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVARBPROC) (const GLint* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVARBPROC) (const GLshort* p);
+
+#define glWindowPos2dARB GLEW_GET_FUN(__glewWindowPos2dARB)
+#define glWindowPos2dvARB GLEW_GET_FUN(__glewWindowPos2dvARB)
+#define glWindowPos2fARB GLEW_GET_FUN(__glewWindowPos2fARB)
+#define glWindowPos2fvARB GLEW_GET_FUN(__glewWindowPos2fvARB)
+#define glWindowPos2iARB GLEW_GET_FUN(__glewWindowPos2iARB)
+#define glWindowPos2ivARB GLEW_GET_FUN(__glewWindowPos2ivARB)
+#define glWindowPos2sARB GLEW_GET_FUN(__glewWindowPos2sARB)
+#define glWindowPos2svARB GLEW_GET_FUN(__glewWindowPos2svARB)
+#define glWindowPos3dARB GLEW_GET_FUN(__glewWindowPos3dARB)
+#define glWindowPos3dvARB GLEW_GET_FUN(__glewWindowPos3dvARB)
+#define glWindowPos3fARB GLEW_GET_FUN(__glewWindowPos3fARB)
+#define glWindowPos3fvARB GLEW_GET_FUN(__glewWindowPos3fvARB)
+#define glWindowPos3iARB GLEW_GET_FUN(__glewWindowPos3iARB)
+#define glWindowPos3ivARB GLEW_GET_FUN(__glewWindowPos3ivARB)
+#define glWindowPos3sARB GLEW_GET_FUN(__glewWindowPos3sARB)
+#define glWindowPos3svARB GLEW_GET_FUN(__glewWindowPos3svARB)
+
+#define GLEW_ARB_window_pos GLEW_GET_VAR(__GLEW_ARB_window_pos)
+
+#endif /* GL_ARB_window_pos */
+
+/* ------------------------- GL_ATIX_point_sprites ------------------------- */
+
+#ifndef GL_ATIX_point_sprites
+#define GL_ATIX_point_sprites 1
+
+#define GLEW_ATIX_point_sprites GLEW_GET_VAR(__GLEW_ATIX_point_sprites)
+
+#endif /* GL_ATIX_point_sprites */
+
+/* ---------------------- GL_ATIX_texture_env_combine3 --------------------- */
+
+#ifndef GL_ATIX_texture_env_combine3
+#define GL_ATIX_texture_env_combine3 1
+
+#define GL_MODULATE_ADD_ATIX 0x8744
+#define GL_MODULATE_SIGNED_ADD_ATIX 0x8745
+#define GL_MODULATE_SUBTRACT_ATIX 0x8746
+
+#define GLEW_ATIX_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATIX_texture_env_combine3)
+
+#endif /* GL_ATIX_texture_env_combine3 */
+
+/* ----------------------- GL_ATIX_texture_env_route ----------------------- */
+
+#ifndef GL_ATIX_texture_env_route
+#define GL_ATIX_texture_env_route 1
+
+#define GL_SECONDARY_COLOR_ATIX 0x8747
+#define GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748
+#define GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749
+
+#define GLEW_ATIX_texture_env_route GLEW_GET_VAR(__GLEW_ATIX_texture_env_route)
+
+#endif /* GL_ATIX_texture_env_route */
+
+/* ---------------- GL_ATIX_vertex_shader_output_point_size ---------------- */
+
+#ifndef GL_ATIX_vertex_shader_output_point_size
+#define GL_ATIX_vertex_shader_output_point_size 1
+
+#define GL_OUTPUT_POINT_SIZE_ATIX 0x610E
+
+#define GLEW_ATIX_vertex_shader_output_point_size GLEW_GET_VAR(__GLEW_ATIX_vertex_shader_output_point_size)
+
+#endif /* GL_ATIX_vertex_shader_output_point_size */
+
+/* -------------------------- GL_ATI_draw_buffers -------------------------- */
+
+#ifndef GL_ATI_draw_buffers
+#define GL_ATI_draw_buffers 1
+
+#define GL_MAX_DRAW_BUFFERS_ATI 0x8824
+#define GL_DRAW_BUFFER0_ATI 0x8825
+#define GL_DRAW_BUFFER1_ATI 0x8826
+#define GL_DRAW_BUFFER2_ATI 0x8827
+#define GL_DRAW_BUFFER3_ATI 0x8828
+#define GL_DRAW_BUFFER4_ATI 0x8829
+#define GL_DRAW_BUFFER5_ATI 0x882A
+#define GL_DRAW_BUFFER6_ATI 0x882B
+#define GL_DRAW_BUFFER7_ATI 0x882C
+#define GL_DRAW_BUFFER8_ATI 0x882D
+#define GL_DRAW_BUFFER9_ATI 0x882E
+#define GL_DRAW_BUFFER10_ATI 0x882F
+#define GL_DRAW_BUFFER11_ATI 0x8830
+#define GL_DRAW_BUFFER12_ATI 0x8831
+#define GL_DRAW_BUFFER13_ATI 0x8832
+#define GL_DRAW_BUFFER14_ATI 0x8833
+#define GL_DRAW_BUFFER15_ATI 0x8834
+
+typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum* bufs);
+
+#define glDrawBuffersATI GLEW_GET_FUN(__glewDrawBuffersATI)
+
+#define GLEW_ATI_draw_buffers GLEW_GET_VAR(__GLEW_ATI_draw_buffers)
+
+#endif /* GL_ATI_draw_buffers */
+
+/* -------------------------- GL_ATI_element_array ------------------------- */
+
+#ifndef GL_ATI_element_array
+#define GL_ATI_element_array 1
+
+#define GL_ELEMENT_ARRAY_ATI 0x8768
+#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769
+#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A
+
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void* pointer);
+
+#define glDrawElementArrayATI GLEW_GET_FUN(__glewDrawElementArrayATI)
+#define glDrawRangeElementArrayATI GLEW_GET_FUN(__glewDrawRangeElementArrayATI)
+#define glElementPointerATI GLEW_GET_FUN(__glewElementPointerATI)
+
+#define GLEW_ATI_element_array GLEW_GET_VAR(__GLEW_ATI_element_array)
+
+#endif /* GL_ATI_element_array */
+
+/* ------------------------- GL_ATI_envmap_bumpmap ------------------------- */
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_ATI_envmap_bumpmap 1
+
+#define GL_BUMP_ROT_MATRIX_ATI 0x8775
+#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776
+#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777
+#define GL_BUMP_TEX_UNITS_ATI 0x8778
+#define GL_DUDV_ATI 0x8779
+#define GL_DU8DV8_ATI 0x877A
+#define GL_BUMP_ENVMAP_ATI 0x877B
+#define GL_BUMP_TARGET_ATI 0x877C
+
+typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
+typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
+typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
+typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
+
+#define glGetTexBumpParameterfvATI GLEW_GET_FUN(__glewGetTexBumpParameterfvATI)
+#define glGetTexBumpParameterivATI GLEW_GET_FUN(__glewGetTexBumpParameterivATI)
+#define glTexBumpParameterfvATI GLEW_GET_FUN(__glewTexBumpParameterfvATI)
+#define glTexBumpParameterivATI GLEW_GET_FUN(__glewTexBumpParameterivATI)
+
+#define GLEW_ATI_envmap_bumpmap GLEW_GET_VAR(__GLEW_ATI_envmap_bumpmap)
+
+#endif /* GL_ATI_envmap_bumpmap */
+
+/* ------------------------- GL_ATI_fragment_shader ------------------------ */
+
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+
+#define GL_RED_BIT_ATI 0x00000001
+#define GL_2X_BIT_ATI 0x00000001
+#define GL_4X_BIT_ATI 0x00000002
+#define GL_GREEN_BIT_ATI 0x00000002
+#define GL_COMP_BIT_ATI 0x00000002
+#define GL_BLUE_BIT_ATI 0x00000004
+#define GL_8X_BIT_ATI 0x00000004
+#define GL_NEGATE_BIT_ATI 0x00000004
+#define GL_BIAS_BIT_ATI 0x00000008
+#define GL_HALF_BIT_ATI 0x00000008
+#define GL_QUARTER_BIT_ATI 0x00000010
+#define GL_EIGHTH_BIT_ATI 0x00000020
+#define GL_SATURATE_BIT_ATI 0x00000040
+#define GL_FRAGMENT_SHADER_ATI 0x8920
+#define GL_REG_0_ATI 0x8921
+#define GL_REG_1_ATI 0x8922
+#define GL_REG_2_ATI 0x8923
+#define GL_REG_3_ATI 0x8924
+#define GL_REG_4_ATI 0x8925
+#define GL_REG_5_ATI 0x8926
+#define GL_CON_0_ATI 0x8941
+#define GL_CON_1_ATI 0x8942
+#define GL_CON_2_ATI 0x8943
+#define GL_CON_3_ATI 0x8944
+#define GL_CON_4_ATI 0x8945
+#define GL_CON_5_ATI 0x8946
+#define GL_CON_6_ATI 0x8947
+#define GL_CON_7_ATI 0x8948
+#define GL_MOV_ATI 0x8961
+#define GL_ADD_ATI 0x8963
+#define GL_MUL_ATI 0x8964
+#define GL_SUB_ATI 0x8965
+#define GL_DOT3_ATI 0x8966
+#define GL_DOT4_ATI 0x8967
+#define GL_MAD_ATI 0x8968
+#define GL_LERP_ATI 0x8969
+#define GL_CND_ATI 0x896A
+#define GL_CND0_ATI 0x896B
+#define GL_DOT2_ADD_ATI 0x896C
+#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D
+#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E
+#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F
+#define GL_NUM_PASSES_ATI 0x8970
+#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971
+#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972
+#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973
+#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974
+#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975
+#define GL_SWIZZLE_STR_ATI 0x8976
+#define GL_SWIZZLE_STQ_ATI 0x8977
+#define GL_SWIZZLE_STR_DR_ATI 0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI 0x8979
+
+typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (GLAPIENTRY * PFNGLBEGINFRAGMENTSHADERATIPROC) (void);
+typedef void (GLAPIENTRY * PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (GLAPIENTRY * PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLENDFRAGMENTSHADERATIPROC) (void);
+typedef GLuint (GLAPIENTRY * PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);
+typedef void (GLAPIENTRY * PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (GLAPIENTRY * PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (GLAPIENTRY * PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat* value);
+
+#define glAlphaFragmentOp1ATI GLEW_GET_FUN(__glewAlphaFragmentOp1ATI)
+#define glAlphaFragmentOp2ATI GLEW_GET_FUN(__glewAlphaFragmentOp2ATI)
+#define glAlphaFragmentOp3ATI GLEW_GET_FUN(__glewAlphaFragmentOp3ATI)
+#define glBeginFragmentShaderATI GLEW_GET_FUN(__glewBeginFragmentShaderATI)
+#define glBindFragmentShaderATI GLEW_GET_FUN(__glewBindFragmentShaderATI)
+#define glColorFragmentOp1ATI GLEW_GET_FUN(__glewColorFragmentOp1ATI)
+#define glColorFragmentOp2ATI GLEW_GET_FUN(__glewColorFragmentOp2ATI)
+#define glColorFragmentOp3ATI GLEW_GET_FUN(__glewColorFragmentOp3ATI)
+#define glDeleteFragmentShaderATI GLEW_GET_FUN(__glewDeleteFragmentShaderATI)
+#define glEndFragmentShaderATI GLEW_GET_FUN(__glewEndFragmentShaderATI)
+#define glGenFragmentShadersATI GLEW_GET_FUN(__glewGenFragmentShadersATI)
+#define glPassTexCoordATI GLEW_GET_FUN(__glewPassTexCoordATI)
+#define glSampleMapATI GLEW_GET_FUN(__glewSampleMapATI)
+#define glSetFragmentShaderConstantATI GLEW_GET_FUN(__glewSetFragmentShaderConstantATI)
+
+#define GLEW_ATI_fragment_shader GLEW_GET_VAR(__GLEW_ATI_fragment_shader)
+
+#endif /* GL_ATI_fragment_shader */
+
+/* ------------------------ GL_ATI_map_object_buffer ----------------------- */
+
+#ifndef GL_ATI_map_object_buffer
+#define GL_ATI_map_object_buffer 1
+
+typedef void* (GLAPIENTRY * PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+
+#define glMapObjectBufferATI GLEW_GET_FUN(__glewMapObjectBufferATI)
+#define glUnmapObjectBufferATI GLEW_GET_FUN(__glewUnmapObjectBufferATI)
+
+#define GLEW_ATI_map_object_buffer GLEW_GET_VAR(__GLEW_ATI_map_object_buffer)
+
+#endif /* GL_ATI_map_object_buffer */
+
+/* -------------------------- GL_ATI_pn_triangles -------------------------- */
+
+#ifndef GL_ATI_pn_triangles
+#define GL_ATI_pn_triangles 1
+
+#define GL_PN_TRIANGLES_ATI 0x87F0
+#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1
+#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2
+#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3
+#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4
+#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
+#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6
+#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
+#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8
+
+typedef void (GLAPIENTRY * PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);
+
+#define glPNTrianglesfATI GLEW_GET_FUN(__glPNTrianglewesfATI)
+#define glPNTrianglesiATI GLEW_GET_FUN(__glPNTrianglewesiATI)
+
+#define GLEW_ATI_pn_triangles GLEW_GET_VAR(__GLEW_ATI_pn_triangles)
+
+#endif /* GL_ATI_pn_triangles */
+
+/* ------------------------ GL_ATI_separate_stencil ------------------------ */
+
+#ifndef GL_ATI_separate_stencil
+#define GL_ATI_separate_stencil 1
+
+#define GL_STENCIL_BACK_FUNC_ATI 0x8800
+#define GL_STENCIL_BACK_FAIL_ATI 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
+
+typedef void (GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+typedef void (GLAPIENTRY * PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+
+#define glStencilFuncSeparateATI GLEW_GET_FUN(__glewStencilFuncSeparateATI)
+#define glStencilOpSeparateATI GLEW_GET_FUN(__glewStencilOpSeparateATI)
+
+#define GLEW_ATI_separate_stencil GLEW_GET_VAR(__GLEW_ATI_separate_stencil)
+
+#endif /* GL_ATI_separate_stencil */
+
+/* ---------------------- GL_ATI_text_fragment_shader ---------------------- */
+
+#ifndef GL_ATI_text_fragment_shader
+#define GL_ATI_text_fragment_shader 1
+
+#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200
+
+#define GLEW_ATI_text_fragment_shader GLEW_GET_VAR(__GLEW_ATI_text_fragment_shader)
+
+#endif /* GL_ATI_text_fragment_shader */
+
+/* --------------------- GL_ATI_texture_compression_3dc -------------------- */
+
+#ifndef GL_ATI_texture_compression_3dc
+#define GL_ATI_texture_compression_3dc 1
+
+#define GL_COMPRESSED_RGB_3DC_ATI 0x8837
+
+#define GLEW_ATI_texture_compression_3dc GLEW_GET_VAR(__GLEW_ATI_texture_compression_3dc)
+
+#endif /* GL_ATI_texture_compression_3dc */
+
+/* ---------------------- GL_ATI_texture_env_combine3 ---------------------- */
+
+#ifndef GL_ATI_texture_env_combine3
+#define GL_ATI_texture_env_combine3 1
+
+#define GL_MODULATE_ADD_ATI 0x8744
+#define GL_MODULATE_SIGNED_ADD_ATI 0x8745
+#define GL_MODULATE_SUBTRACT_ATI 0x8746
+
+#define GLEW_ATI_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATI_texture_env_combine3)
+
+#endif /* GL_ATI_texture_env_combine3 */
+
+/* -------------------------- GL_ATI_texture_float ------------------------- */
+
+#ifndef GL_ATI_texture_float
+#define GL_ATI_texture_float 1
+
+#define GL_RGBA_FLOAT32_ATI 0x8814
+#define GL_RGB_FLOAT32_ATI 0x8815
+#define GL_ALPHA_FLOAT32_ATI 0x8816
+#define GL_INTENSITY_FLOAT32_ATI 0x8817
+#define GL_LUMINANCE_FLOAT32_ATI 0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819
+#define GL_RGBA_FLOAT16_ATI 0x881A
+#define GL_RGB_FLOAT16_ATI 0x881B
+#define GL_ALPHA_FLOAT16_ATI 0x881C
+#define GL_INTENSITY_FLOAT16_ATI 0x881D
+#define GL_LUMINANCE_FLOAT16_ATI 0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F
+
+#define GLEW_ATI_texture_float GLEW_GET_VAR(__GLEW_ATI_texture_float)
+
+#endif /* GL_ATI_texture_float */
+
+/* ----------------------- GL_ATI_texture_mirror_once ---------------------- */
+
+#ifndef GL_ATI_texture_mirror_once
+#define GL_ATI_texture_mirror_once 1
+
+#define GL_MIRROR_CLAMP_ATI 0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743
+
+#define GLEW_ATI_texture_mirror_once GLEW_GET_VAR(__GLEW_ATI_texture_mirror_once)
+
+#endif /* GL_ATI_texture_mirror_once */
+
+/* ----------------------- GL_ATI_vertex_array_object ---------------------- */
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_ATI_vertex_array_object 1
+
+#define GL_STATIC_ATI 0x8760
+#define GL_DYNAMIC_ATI 0x8761
+#define GL_PRESERVE_ATI 0x8762
+#define GL_DISCARD_ATI 0x8763
+#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764
+#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765
+#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766
+#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767
+
+typedef void (GLAPIENTRY * PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (GLAPIENTRY * PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef GLuint (GLAPIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void* pointer, GLenum usage);
+typedef void (GLAPIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void* pointer, GLenum preserve);
+typedef void (GLAPIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+
+#define glArrayObjectATI GLEW_GET_FUN(__glewArrayObjectATI)
+#define glFreeObjectBufferATI GLEW_GET_FUN(__glewFreeObjectBufferATI)
+#define glGetArrayObjectfvATI GLEW_GET_FUN(__glewGetArrayObjectfvATI)
+#define glGetArrayObjectivATI GLEW_GET_FUN(__glewGetArrayObjectivATI)
+#define glGetObjectBufferfvATI GLEW_GET_FUN(__glewGetObjectBufferfvATI)
+#define glGetObjectBufferivATI GLEW_GET_FUN(__glewGetObjectBufferivATI)
+#define glGetVariantArrayObjectfvATI GLEW_GET_FUN(__glewGetVariantArrayObjectfvATI)
+#define glGetVariantArrayObjectivATI GLEW_GET_FUN(__glewGetVariantArrayObjectivATI)
+#define glIsObjectBufferATI GLEW_GET_FUN(__glewIsObjectBufferATI)
+#define glNewObjectBufferATI GLEW_GET_FUN(__glewNewObjectBufferATI)
+#define glUpdateObjectBufferATI GLEW_GET_FUN(__glewUpdateObjectBufferATI)
+#define glVariantArrayObjectATI GLEW_GET_FUN(__glewVariantArrayObjectATI)
+
+#define GLEW_ATI_vertex_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_array_object)
+
+#endif /* GL_ATI_vertex_array_object */
+
+/* ------------------- GL_ATI_vertex_attrib_array_object ------------------- */
+
+#ifndef GL_ATI_vertex_attrib_array_object
+#define GL_ATI_vertex_attrib_array_object 1
+
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
+
+#define glGetVertexAttribArrayObjectfvATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectfvATI)
+#define glGetVertexAttribArrayObjectivATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectivATI)
+#define glVertexAttribArrayObjectATI GLEW_GET_FUN(__glewVertexAttribArrayObjectATI)
+
+#define GLEW_ATI_vertex_attrib_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_attrib_array_object)
+
+#endif /* GL_ATI_vertex_attrib_array_object */
+
+/* ------------------------- GL_ATI_vertex_streams ------------------------- */
+
+#ifndef GL_ATI_vertex_streams
+#define GL_ATI_vertex_streams 1
+
+#define GL_MAX_VERTEX_STREAMS_ATI 0x876B
+#define GL_VERTEX_SOURCE_ATI 0x876C
+#define GL_VERTEX_STREAM0_ATI 0x876D
+#define GL_VERTEX_STREAM1_ATI 0x876E
+#define GL_VERTEX_STREAM2_ATI 0x876F
+#define GL_VERTEX_STREAM3_ATI 0x8770
+#define GL_VERTEX_STREAM4_ATI 0x8771
+#define GL_VERTEX_STREAM5_ATI 0x8772
+#define GL_VERTEX_STREAM6_ATI 0x8773
+#define GL_VERTEX_STREAM7_ATI 0x8774
+
+typedef void (GLAPIENTRY * PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte x, GLbyte y, GLbyte z);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *v);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *v);
+
+#define glClientActiveVertexStreamATI GLEW_GET_FUN(__glewClientActiveVertexStreamATI)
+#define glNormalStream3bATI GLEW_GET_FUN(__glewNormalStream3bATI)
+#define glNormalStream3bvATI GLEW_GET_FUN(__glewNormalStream3bvATI)
+#define glNormalStream3dATI GLEW_GET_FUN(__glewNormalStream3dATI)
+#define glNormalStream3dvATI GLEW_GET_FUN(__glewNormalStream3dvATI)
+#define glNormalStream3fATI GLEW_GET_FUN(__glewNormalStream3fATI)
+#define glNormalStream3fvATI GLEW_GET_FUN(__glewNormalStream3fvATI)
+#define glNormalStream3iATI GLEW_GET_FUN(__glewNormalStream3iATI)
+#define glNormalStream3ivATI GLEW_GET_FUN(__glewNormalStream3ivATI)
+#define glNormalStream3sATI GLEW_GET_FUN(__glewNormalStream3sATI)
+#define glNormalStream3svATI GLEW_GET_FUN(__glewNormalStream3svATI)
+#define glVertexBlendEnvfATI GLEW_GET_FUN(__glewVertexBlendEnvfATI)
+#define glVertexBlendEnviATI GLEW_GET_FUN(__glewVertexBlendEnviATI)
+#define glVertexStream2dATI GLEW_GET_FUN(__glewVertexStream2dATI)
+#define glVertexStream2dvATI GLEW_GET_FUN(__glewVertexStream2dvATI)
+#define glVertexStream2fATI GLEW_GET_FUN(__glewVertexStream2fATI)
+#define glVertexStream2fvATI GLEW_GET_FUN(__glewVertexStream2fvATI)
+#define glVertexStream2iATI GLEW_GET_FUN(__glewVertexStream2iATI)
+#define glVertexStream2ivATI GLEW_GET_FUN(__glewVertexStream2ivATI)
+#define glVertexStream2sATI GLEW_GET_FUN(__glewVertexStream2sATI)
+#define glVertexStream2svATI GLEW_GET_FUN(__glewVertexStream2svATI)
+#define glVertexStream3dATI GLEW_GET_FUN(__glewVertexStream3dATI)
+#define glVertexStream3dvATI GLEW_GET_FUN(__glewVertexStream3dvATI)
+#define glVertexStream3fATI GLEW_GET_FUN(__glewVertexStream3fATI)
+#define glVertexStream3fvATI GLEW_GET_FUN(__glewVertexStream3fvATI)
+#define glVertexStream3iATI GLEW_GET_FUN(__glewVertexStream3iATI)
+#define glVertexStream3ivATI GLEW_GET_FUN(__glewVertexStream3ivATI)
+#define glVertexStream3sATI GLEW_GET_FUN(__glewVertexStream3sATI)
+#define glVertexStream3svATI GLEW_GET_FUN(__glewVertexStream3svATI)
+#define glVertexStream4dATI GLEW_GET_FUN(__glewVertexStream4dATI)
+#define glVertexStream4dvATI GLEW_GET_FUN(__glewVertexStream4dvATI)
+#define glVertexStream4fATI GLEW_GET_FUN(__glewVertexStream4fATI)
+#define glVertexStream4fvATI GLEW_GET_FUN(__glewVertexStream4fvATI)
+#define glVertexStream4iATI GLEW_GET_FUN(__glewVertexStream4iATI)
+#define glVertexStream4ivATI GLEW_GET_FUN(__glewVertexStream4ivATI)
+#define glVertexStream4sATI GLEW_GET_FUN(__glewVertexStream4sATI)
+#define glVertexStream4svATI GLEW_GET_FUN(__glewVertexStream4svATI)
+
+#define GLEW_ATI_vertex_streams GLEW_GET_VAR(__GLEW_ATI_vertex_streams)
+
+#endif /* GL_ATI_vertex_streams */
+
+/* --------------------------- GL_EXT_422_pixels --------------------------- */
+
+#ifndef GL_EXT_422_pixels
+#define GL_EXT_422_pixels 1
+
+#define GL_422_EXT 0x80CC
+#define GL_422_REV_EXT 0x80CD
+#define GL_422_AVERAGE_EXT 0x80CE
+#define GL_422_REV_AVERAGE_EXT 0x80CF
+
+#define GLEW_EXT_422_pixels GLEW_GET_VAR(__GLEW_EXT_422_pixels)
+
+#endif /* GL_EXT_422_pixels */
+
+/* ---------------------------- GL_EXT_Cg_shader --------------------------- */
+
+#ifndef GL_EXT_Cg_shader
+#define GL_EXT_Cg_shader 1
+
+#define GL_CG_VERTEX_SHADER_EXT 0x890E
+#define GL_CG_FRAGMENT_SHADER_EXT 0x890F
+
+#define GLEW_EXT_Cg_shader GLEW_GET_VAR(__GLEW_EXT_Cg_shader)
+
+#endif /* GL_EXT_Cg_shader */
+
+/* ------------------------------ GL_EXT_abgr ------------------------------ */
+
+#ifndef GL_EXT_abgr
+#define GL_EXT_abgr 1
+
+#define GL_ABGR_EXT 0x8000
+
+#define GLEW_EXT_abgr GLEW_GET_VAR(__GLEW_EXT_abgr)
+
+#endif /* GL_EXT_abgr */
+
+/* ------------------------------ GL_EXT_bgra ------------------------------ */
+
+#ifndef GL_EXT_bgra
+#define GL_EXT_bgra 1
+
+#define GL_BGR_EXT 0x80E0
+#define GL_BGRA_EXT 0x80E1
+
+#define GLEW_EXT_bgra GLEW_GET_VAR(__GLEW_EXT_bgra)
+
+#endif /* GL_EXT_bgra */
+
+/* --------------------------- GL_EXT_blend_color -------------------------- */
+
+#ifndef GL_EXT_blend_color
+#define GL_EXT_blend_color 1
+
+#define GL_CONSTANT_COLOR_EXT 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002
+#define GL_CONSTANT_ALPHA_EXT 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004
+#define GL_BLEND_COLOR_EXT 0x8005
+
+typedef void (GLAPIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+
+#define glBlendColorEXT GLEW_GET_FUN(__glewBlendColorEXT)
+
+#define GLEW_EXT_blend_color GLEW_GET_VAR(__GLEW_EXT_blend_color)
+
+#endif /* GL_EXT_blend_color */
+
+/* --------------------- GL_EXT_blend_equation_separate -------------------- */
+
+#ifndef GL_EXT_blend_equation_separate
+#define GL_EXT_blend_equation_separate 1
+
+#define GL_BLEND_EQUATION_RGB_EXT 0x8009
+#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D
+
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha);
+
+#define glBlendEquationSeparateEXT GLEW_GET_FUN(__glewBlendEquationSeparateEXT)
+
+#define GLEW_EXT_blend_equation_separate GLEW_GET_VAR(__GLEW_EXT_blend_equation_separate)
+
+#endif /* GL_EXT_blend_equation_separate */
+
+/* ----------------------- GL_EXT_blend_func_separate ---------------------- */
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+
+#define GL_BLEND_DST_RGB_EXT 0x80C8
+#define GL_BLEND_SRC_RGB_EXT 0x80C9
+#define GL_BLEND_DST_ALPHA_EXT 0x80CA
+#define GL_BLEND_SRC_ALPHA_EXT 0x80CB
+
+typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+
+#define glBlendFuncSeparateEXT GLEW_GET_FUN(__glewBlendFuncSeparateEXT)
+
+#define GLEW_EXT_blend_func_separate GLEW_GET_VAR(__GLEW_EXT_blend_func_separate)
+
+#endif /* GL_EXT_blend_func_separate */
+
+/* ------------------------- GL_EXT_blend_logic_op ------------------------- */
+
+#ifndef GL_EXT_blend_logic_op
+#define GL_EXT_blend_logic_op 1
+
+#define GLEW_EXT_blend_logic_op GLEW_GET_VAR(__GLEW_EXT_blend_logic_op)
+
+#endif /* GL_EXT_blend_logic_op */
+
+/* -------------------------- GL_EXT_blend_minmax -------------------------- */
+
+#ifndef GL_EXT_blend_minmax
+#define GL_EXT_blend_minmax 1
+
+#define GL_FUNC_ADD_EXT 0x8006
+#define GL_MIN_EXT 0x8007
+#define GL_MAX_EXT 0x8008
+#define GL_BLEND_EQUATION_EXT 0x8009
+
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);
+
+#define glBlendEquationEXT GLEW_GET_FUN(__glewBlendEquationEXT)
+
+#define GLEW_EXT_blend_minmax GLEW_GET_VAR(__GLEW_EXT_blend_minmax)
+
+#endif /* GL_EXT_blend_minmax */
+
+/* ------------------------- GL_EXT_blend_subtract ------------------------- */
+
+#ifndef GL_EXT_blend_subtract
+#define GL_EXT_blend_subtract 1
+
+#define GL_FUNC_SUBTRACT_EXT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B
+
+#define GLEW_EXT_blend_subtract GLEW_GET_VAR(__GLEW_EXT_blend_subtract)
+
+#endif /* GL_EXT_blend_subtract */
+
+/* ------------------------ GL_EXT_clip_volume_hint ------------------------ */
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_EXT_clip_volume_hint 1
+
+#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0
+
+#define GLEW_EXT_clip_volume_hint GLEW_GET_VAR(__GLEW_EXT_clip_volume_hint)
+
+#endif /* GL_EXT_clip_volume_hint */
+
+/* ------------------------------ GL_EXT_cmyka ----------------------------- */
+
+#ifndef GL_EXT_cmyka
+#define GL_EXT_cmyka 1
+
+#define GL_CMYK_EXT 0x800C
+#define GL_CMYKA_EXT 0x800D
+#define GL_PACK_CMYK_HINT_EXT 0x800E
+#define GL_UNPACK_CMYK_HINT_EXT 0x800F
+
+#define GLEW_EXT_cmyka GLEW_GET_VAR(__GLEW_EXT_cmyka)
+
+#endif /* GL_EXT_cmyka */
+
+/* ------------------------- GL_EXT_color_subtable ------------------------- */
+
+#ifndef GL_EXT_color_subtable
+#define GL_EXT_color_subtable 1
+
+typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+
+#define glColorSubTableEXT GLEW_GET_FUN(__glewColorSubTableEXT)
+#define glCopyColorSubTableEXT GLEW_GET_FUN(__glewCopyColorSubTableEXT)
+
+#define GLEW_EXT_color_subtable GLEW_GET_VAR(__GLEW_EXT_color_subtable)
+
+#endif /* GL_EXT_color_subtable */
+
+/* ---------------------- GL_EXT_compiled_vertex_array --------------------- */
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_EXT_compiled_vertex_array 1
+
+typedef void (GLAPIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void);
+
+#define glLockArraysEXT GLEW_GET_FUN(__glewLockArraysEXT)
+#define glUnlockArraysEXT GLEW_GET_FUN(__glewUnlockArraysEXT)
+
+#define GLEW_EXT_compiled_vertex_array GLEW_GET_VAR(__GLEW_EXT_compiled_vertex_array)
+
+#endif /* GL_EXT_compiled_vertex_array */
+
+/* --------------------------- GL_EXT_convolution -------------------------- */
+
+#ifndef GL_EXT_convolution
+#define GL_EXT_convolution 1
+
+#define GL_CONVOLUTION_1D_EXT 0x8010
+#define GL_CONVOLUTION_2D_EXT 0x8011
+#define GL_SEPARABLE_2D_EXT 0x8012
+#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015
+#define GL_REDUCE_EXT 0x8016
+#define GL_CONVOLUTION_FORMAT_EXT 0x8017
+#define GL_CONVOLUTION_WIDTH_EXT 0x8018
+#define GL_CONVOLUTION_HEIGHT_EXT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023
+
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* image);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* image);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void* image);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void* row, void* column, void* span);
+typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* row, const void* column);
+
+#define glConvolutionFilter1DEXT GLEW_GET_FUN(__glewConvolutionFilter1DEXT)
+#define glConvolutionFilter2DEXT GLEW_GET_FUN(__glewConvolutionFilter2DEXT)
+#define glConvolutionParameterfEXT GLEW_GET_FUN(__glewConvolutionParameterfEXT)
+#define glConvolutionParameterfvEXT GLEW_GET_FUN(__glewConvolutionParameterfvEXT)
+#define glConvolutionParameteriEXT GLEW_GET_FUN(__glewConvolutionParameteriEXT)
+#define glConvolutionParameterivEXT GLEW_GET_FUN(__glewConvolutionParameterivEXT)
+#define glCopyConvolutionFilter1DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter1DEXT)
+#define glCopyConvolutionFilter2DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter2DEXT)
+#define glGetConvolutionFilterEXT GLEW_GET_FUN(__glewGetConvolutionFilterEXT)
+#define glGetConvolutionParameterfvEXT GLEW_GET_FUN(__glewGetConvolutionParameterfvEXT)
+#define glGetConvolutionParameterivEXT GLEW_GET_FUN(__glewGetConvolutionParameterivEXT)
+#define glGetSeparableFilterEXT GLEW_GET_FUN(__glewGetSeparableFilterEXT)
+#define glSeparableFilter2DEXT GLEW_GET_FUN(__glewSeparableFilter2DEXT)
+
+#define GLEW_EXT_convolution GLEW_GET_VAR(__GLEW_EXT_convolution)
+
+#endif /* GL_EXT_convolution */
+
+/* ------------------------ GL_EXT_coordinate_frame ------------------------ */
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_EXT_coordinate_frame 1
+
+#define GL_TANGENT_ARRAY_EXT 0x8439
+#define GL_BINORMAL_ARRAY_EXT 0x843A
+#define GL_CURRENT_TANGENT_EXT 0x843B
+#define GL_CURRENT_BINORMAL_EXT 0x843C
+#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E
+#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F
+#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440
+#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441
+#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442
+#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443
+#define GL_MAP1_TANGENT_EXT 0x8444
+#define GL_MAP2_TANGENT_EXT 0x8445
+#define GL_MAP1_BINORMAL_EXT 0x8446
+#define GL_MAP2_BINORMAL_EXT 0x8447
+
+typedef void (GLAPIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, void* pointer);
+typedef void (GLAPIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, void* pointer);
+
+#define glBinormalPointerEXT GLEW_GET_FUN(__glewBinormalPointerEXT)
+#define glTangentPointerEXT GLEW_GET_FUN(__glewTangentPointerEXT)
+
+#define GLEW_EXT_coordinate_frame GLEW_GET_VAR(__GLEW_EXT_coordinate_frame)
+
+#endif /* GL_EXT_coordinate_frame */
+
+/* -------------------------- GL_EXT_copy_texture -------------------------- */
+
+#ifndef GL_EXT_copy_texture
+#define GL_EXT_copy_texture 1
+
+typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+
+#define glCopyTexImage1DEXT GLEW_GET_FUN(__glewCopyTexImage1DEXT)
+#define glCopyTexImage2DEXT GLEW_GET_FUN(__glewCopyTexImage2DEXT)
+#define glCopyTexSubImage1DEXT GLEW_GET_FUN(__glewCopyTexSubImage1DEXT)
+#define glCopyTexSubImage2DEXT GLEW_GET_FUN(__glewCopyTexSubImage2DEXT)
+#define glCopyTexSubImage3DEXT GLEW_GET_FUN(__glewCopyTexSubImage3DEXT)
+
+#define GLEW_EXT_copy_texture GLEW_GET_VAR(__GLEW_EXT_copy_texture)
+
+#endif /* GL_EXT_copy_texture */
+
+/* --------------------------- GL_EXT_cull_vertex -------------------------- */
+
+#ifndef GL_EXT_cull_vertex
+#define GL_EXT_cull_vertex 1
+
+typedef void (GLAPIENTRY * PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat* params);
+
+#define glCullParameterdvEXT GLEW_GET_FUN(__glewCullParameterdvEXT)
+#define glCullParameterfvEXT GLEW_GET_FUN(__glewCullParameterfvEXT)
+
+#define GLEW_EXT_cull_vertex GLEW_GET_VAR(__GLEW_EXT_cull_vertex)
+
+#endif /* GL_EXT_cull_vertex */
+
+/* ------------------------ GL_EXT_depth_bounds_test ----------------------- */
+
+#ifndef GL_EXT_depth_bounds_test
+#define GL_EXT_depth_bounds_test 1
+
+#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890
+#define GL_DEPTH_BOUNDS_EXT 0x8891
+
+typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax);
+
+#define glDepthBoundsEXT GLEW_GET_FUN(__glewDepthBoundsEXT)
+
+#define GLEW_EXT_depth_bounds_test GLEW_GET_VAR(__GLEW_EXT_depth_bounds_test)
+
+#endif /* GL_EXT_depth_bounds_test */
+
+/* ----------------------- GL_EXT_draw_range_elements ---------------------- */
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_EXT_draw_range_elements 1
+
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+
+typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+
+#define glDrawRangeElementsEXT GLEW_GET_FUN(__glewDrawRangeElementsEXT)
+
+#define GLEW_EXT_draw_range_elements GLEW_GET_VAR(__GLEW_EXT_draw_range_elements)
+
+#endif /* GL_EXT_draw_range_elements */
+
+/* ---------------------------- GL_EXT_fog_coord --------------------------- */
+
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+
+#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450
+#define GL_FOG_COORDINATE_EXT 0x8451
+#define GL_FRAGMENT_DEPTH_EXT 0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457
+
+typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
+
+#define glFogCoordPointerEXT GLEW_GET_FUN(__glewFogCoordPointerEXT)
+#define glFogCoorddEXT GLEW_GET_FUN(__glewFogCoorddEXT)
+#define glFogCoorddvEXT GLEW_GET_FUN(__glewFogCoorddvEXT)
+#define glFogCoordfEXT GLEW_GET_FUN(__glewFogCoordfEXT)
+#define glFogCoordfvEXT GLEW_GET_FUN(__glewFogCoordfvEXT)
+
+#define GLEW_EXT_fog_coord GLEW_GET_VAR(__GLEW_EXT_fog_coord)
+
+#endif /* GL_EXT_fog_coord */
+
+/* ------------------------ GL_EXT_fragment_lighting ----------------------- */
+
+#ifndef GL_EXT_fragment_lighting
+#define GL_EXT_fragment_lighting 1
+
+#define GL_FRAGMENT_LIGHTING_EXT 0x8400
+#define GL_FRAGMENT_COLOR_MATERIAL_EXT 0x8401
+#define GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT 0x8402
+#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT 0x8403
+#define GL_MAX_FRAGMENT_LIGHTS_EXT 0x8404
+#define GL_MAX_ACTIVE_LIGHTS_EXT 0x8405
+#define GL_CURRENT_RASTER_NORMAL_EXT 0x8406
+#define GL_LIGHT_ENV_MODE_EXT 0x8407
+#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT 0x8408
+#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT 0x8409
+#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT 0x840A
+#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT 0x840B
+#define GL_FRAGMENT_LIGHT0_EXT 0x840C
+#define GL_FRAGMENT_LIGHT7_EXT 0x8413
+
+typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALEXTPROC) (GLenum face, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFEXTPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVEXTPROC) (GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIEXTPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVEXTPROC) (GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFEXTPROC) (GLenum light, GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIEXTPROC) (GLenum light, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFEXTPROC) (GLenum face, GLenum pname, const GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIEXTPROC) (GLenum face, GLenum pname, const GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLLIGHTENVIEXTPROC) (GLenum pname, GLint param);
+
+#define glFragmentColorMaterialEXT GLEW_GET_FUN(__glewFragmentColorMaterialEXT)
+#define glFragmentLightModelfEXT GLEW_GET_FUN(__glewFragmentLightModelfEXT)
+#define glFragmentLightModelfvEXT GLEW_GET_FUN(__glewFragmentLightModelfvEXT)
+#define glFragmentLightModeliEXT GLEW_GET_FUN(__glewFragmentLightModeliEXT)
+#define glFragmentLightModelivEXT GLEW_GET_FUN(__glewFragmentLightModelivEXT)
+#define glFragmentLightfEXT GLEW_GET_FUN(__glewFragmentLightfEXT)
+#define glFragmentLightfvEXT GLEW_GET_FUN(__glewFragmentLightfvEXT)
+#define glFragmentLightiEXT GLEW_GET_FUN(__glewFragmentLightiEXT)
+#define glFragmentLightivEXT GLEW_GET_FUN(__glewFragmentLightivEXT)
+#define glFragmentMaterialfEXT GLEW_GET_FUN(__glewFragmentMaterialfEXT)
+#define glFragmentMaterialfvEXT GLEW_GET_FUN(__glewFragmentMaterialfvEXT)
+#define glFragmentMaterialiEXT GLEW_GET_FUN(__glewFragmentMaterialiEXT)
+#define glFragmentMaterialivEXT GLEW_GET_FUN(__glewFragmentMaterialivEXT)
+#define glGetFragmentLightfvEXT GLEW_GET_FUN(__glewGetFragmentLightfvEXT)
+#define glGetFragmentLightivEXT GLEW_GET_FUN(__glewGetFragmentLightivEXT)
+#define glGetFragmentMaterialfvEXT GLEW_GET_FUN(__glewGetFragmentMaterialfvEXT)
+#define glGetFragmentMaterialivEXT GLEW_GET_FUN(__glewGetFragmentMaterialivEXT)
+#define glLightEnviEXT GLEW_GET_FUN(__glewLightEnviEXT)
+
+#define GLEW_EXT_fragment_lighting GLEW_GET_VAR(__GLEW_EXT_fragment_lighting)
+
+#endif /* GL_EXT_fragment_lighting */
+
+/* ---------------------------- GL_EXT_histogram --------------------------- */
+
+#ifndef GL_EXT_histogram
+#define GL_EXT_histogram 1
+
+#define GL_HISTOGRAM_EXT 0x8024
+#define GL_PROXY_HISTOGRAM_EXT 0x8025
+#define GL_HISTOGRAM_WIDTH_EXT 0x8026
+#define GL_HISTOGRAM_FORMAT_EXT 0x8027
+#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C
+#define GL_HISTOGRAM_SINK_EXT 0x802D
+#define GL_MINMAX_EXT 0x802E
+#define GL_MINMAX_FORMAT_EXT 0x802F
+#define GL_MINMAX_SINK_EXT 0x8030
+
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values);
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (GLAPIENTRY * PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLRESETMINMAXEXTPROC) (GLenum target);
+
+#define glGetHistogramEXT GLEW_GET_FUN(__glewGetHistogramEXT)
+#define glGetHistogramParameterfvEXT GLEW_GET_FUN(__glewGetHistogramParameterfvEXT)
+#define glGetHistogramParameterivEXT GLEW_GET_FUN(__glewGetHistogramParameterivEXT)
+#define glGetMinmaxEXT GLEW_GET_FUN(__glewGetMinmaxEXT)
+#define glGetMinmaxParameterfvEXT GLEW_GET_FUN(__glewGetMinmaxParameterfvEXT)
+#define glGetMinmaxParameterivEXT GLEW_GET_FUN(__glewGetMinmaxParameterivEXT)
+#define glHistogramEXT GLEW_GET_FUN(__glewHistogramEXT)
+#define glMinmaxEXT GLEW_GET_FUN(__glewMinmaxEXT)
+#define glResetHistogramEXT GLEW_GET_FUN(__glewResetHistogramEXT)
+#define glResetMinmaxEXT GLEW_GET_FUN(__glewResetMinmaxEXT)
+
+#define GLEW_EXT_histogram GLEW_GET_VAR(__GLEW_EXT_histogram)
+
+#endif /* GL_EXT_histogram */
+
+/* ----------------------- GL_EXT_index_array_formats ---------------------- */
+
+#ifndef GL_EXT_index_array_formats
+#define GL_EXT_index_array_formats 1
+
+#define GLEW_EXT_index_array_formats GLEW_GET_VAR(__GLEW_EXT_index_array_formats)
+
+#endif /* GL_EXT_index_array_formats */
+
+/* --------------------------- GL_EXT_index_func --------------------------- */
+
+#ifndef GL_EXT_index_func
+#define GL_EXT_index_func 1
+
+typedef void (GLAPIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLfloat ref);
+
+#define glIndexFuncEXT GLEW_GET_FUN(__glewIndexFuncEXT)
+
+#define GLEW_EXT_index_func GLEW_GET_VAR(__GLEW_EXT_index_func)
+
+#endif /* GL_EXT_index_func */
+
+/* ------------------------- GL_EXT_index_material ------------------------- */
+
+#ifndef GL_EXT_index_material
+#define GL_EXT_index_material 1
+
+typedef void (GLAPIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);
+
+#define glIndexMaterialEXT GLEW_GET_FUN(__glewIndexMaterialEXT)
+
+#define GLEW_EXT_index_material GLEW_GET_VAR(__GLEW_EXT_index_material)
+
+#endif /* GL_EXT_index_material */
+
+/* -------------------------- GL_EXT_index_texture ------------------------- */
+
+#ifndef GL_EXT_index_texture
+#define GL_EXT_index_texture 1
+
+#define GLEW_EXT_index_texture GLEW_GET_VAR(__GLEW_EXT_index_texture)
+
+#endif /* GL_EXT_index_texture */
+
+/* -------------------------- GL_EXT_light_texture ------------------------- */
+
+#ifndef GL_EXT_light_texture
+#define GL_EXT_light_texture 1
+
+#define GL_FRAGMENT_MATERIAL_EXT 0x8349
+#define GL_FRAGMENT_NORMAL_EXT 0x834A
+#define GL_FRAGMENT_COLOR_EXT 0x834C
+#define GL_ATTENUATION_EXT 0x834D
+#define GL_SHADOW_ATTENUATION_EXT 0x834E
+#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F
+#define GL_TEXTURE_LIGHT_EXT 0x8350
+#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351
+#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352
+#define GL_FRAGMENT_DEPTH_EXT 0x8452
+
+typedef void (GLAPIENTRY * PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);
+typedef void (GLAPIENTRY * PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);
+typedef void (GLAPIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);
+
+#define glApplyTextureEXT GLEW_GET_FUN(__glewApplyTextureEXT)
+#define glTextureLightEXT GLEW_GET_FUN(__glewTextureLightEXT)
+#define glTextureMaterialEXT GLEW_GET_FUN(__glewTextureMaterialEXT)
+
+#define GLEW_EXT_light_texture GLEW_GET_VAR(__GLEW_EXT_light_texture)
+
+#endif /* GL_EXT_light_texture */
+
+/* ------------------------- GL_EXT_misc_attribute ------------------------- */
+
+#ifndef GL_EXT_misc_attribute
+#define GL_EXT_misc_attribute 1
+
+#define GLEW_EXT_misc_attribute GLEW_GET_VAR(__GLEW_EXT_misc_attribute)
+
+#endif /* GL_EXT_misc_attribute */
+
+/* ------------------------ GL_EXT_multi_draw_arrays ----------------------- */
+
+#ifndef GL_EXT_multi_draw_arrays
+#define GL_EXT_multi_draw_arrays 1
+
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint* first, GLsizei *count, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, GLsizei* count, GLenum type, const GLvoid **indices, GLsizei primcount);
+
+#define glMultiDrawArraysEXT GLEW_GET_FUN(__glewMultiDrawArraysEXT)
+#define glMultiDrawElementsEXT GLEW_GET_FUN(__glewMultiDrawElementsEXT)
+
+#define GLEW_EXT_multi_draw_arrays GLEW_GET_VAR(__GLEW_EXT_multi_draw_arrays)
+
+#endif /* GL_EXT_multi_draw_arrays */
+
+/* --------------------------- GL_EXT_multisample -------------------------- */
+
+#ifndef GL_EXT_multisample
+#define GL_EXT_multisample 1
+
+#define GL_MULTISAMPLE_EXT 0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F
+#define GL_SAMPLE_MASK_EXT 0x80A0
+#define GL_1PASS_EXT 0x80A1
+#define GL_2PASS_0_EXT 0x80A2
+#define GL_2PASS_1_EXT 0x80A3
+#define GL_4PASS_0_EXT 0x80A4
+#define GL_4PASS_1_EXT 0x80A5
+#define GL_4PASS_2_EXT 0x80A6
+#define GL_4PASS_3_EXT 0x80A7
+#define GL_SAMPLE_BUFFERS_EXT 0x80A8
+#define GL_SAMPLES_EXT 0x80A9
+#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA
+#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB
+#define GL_SAMPLE_PATTERN_EXT 0x80AC
+#define GL_MULTISAMPLE_BIT_EXT 0x20000000
+
+typedef void (GLAPIENTRY * PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);
+typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);
+
+#define glSampleMaskEXT GLEW_GET_FUN(__glewSampleMaskEXT)
+#define glSamplePatternEXT GLEW_GET_FUN(__glewSamplePatternEXT)
+
+#define GLEW_EXT_multisample GLEW_GET_VAR(__GLEW_EXT_multisample)
+
+#endif /* GL_EXT_multisample */
+
+/* -------------------------- GL_EXT_packed_pixels ------------------------- */
+
+#ifndef GL_EXT_packed_pixels
+#define GL_EXT_packed_pixels 1
+
+#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036
+
+#define GLEW_EXT_packed_pixels GLEW_GET_VAR(__GLEW_EXT_packed_pixels)
+
+#endif /* GL_EXT_packed_pixels */
+
+/* ------------------------ GL_EXT_paletted_texture ------------------------ */
+
+#ifndef GL_EXT_paletted_texture
+#define GL_EXT_paletted_texture 1
+
+#define GL_TEXTURE_1D 0x0DE0
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_PROXY_TEXTURE_1D 0x8063
+#define GL_PROXY_TEXTURE_2D 0x8064
+#define GL_TEXTURE_3D_EXT 0x806F
+#define GL_PROXY_TEXTURE_3D_EXT 0x8070
+#define GL_COLOR_TABLE_FORMAT_EXT 0x80D8
+#define GL_COLOR_TABLE_WIDTH_EXT 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_EXT 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_EXT 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_EXT 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_EXT 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_EXT 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_EXT 0x80DF
+#define GL_COLOR_INDEX1_EXT 0x80E2
+#define GL_COLOR_INDEX2_EXT 0x80E3
+#define GL_COLOR_INDEX4_EXT 0x80E4
+#define GL_COLOR_INDEX8_EXT 0x80E5
+#define GL_COLOR_INDEX12_EXT 0x80E6
+#define GL_COLOR_INDEX16_EXT 0x80E7
+#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED
+#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
+
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void* data);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void* data);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params);
+
+#define glColorTableEXT GLEW_GET_FUN(__glewColorTableEXT)
+#define glGetColorTableEXT GLEW_GET_FUN(__glewGetColorTableEXT)
+#define glGetColorTableParameterfvEXT GLEW_GET_FUN(__glewGetColorTableParameterfvEXT)
+#define glGetColorTableParameterivEXT GLEW_GET_FUN(__glewGetColorTableParameterivEXT)
+
+#define GLEW_EXT_paletted_texture GLEW_GET_VAR(__GLEW_EXT_paletted_texture)
+
+#endif /* GL_EXT_paletted_texture */
+
+/* ----------------------- GL_EXT_pixel_buffer_object ---------------------- */
+
+#ifndef GL_EXT_pixel_buffer_object
+#define GL_EXT_pixel_buffer_object 1
+
+#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF
+
+#define GLEW_EXT_pixel_buffer_object GLEW_GET_VAR(__GLEW_EXT_pixel_buffer_object)
+
+#endif /* GL_EXT_pixel_buffer_object */
+
+/* ------------------------- GL_EXT_pixel_transform ------------------------ */
+
+#ifndef GL_EXT_pixel_transform
+#define GL_EXT_pixel_transform 1
+
+#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330
+#define GL_PIXEL_MAG_FILTER_EXT 0x8331
+#define GL_PIXEL_MIN_FILTER_EXT 0x8332
+#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333
+#define GL_CUBIC_EXT 0x8334
+#define GL_AVERAGE_EXT 0x8335
+#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336
+#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337
+#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338
+
+typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, const GLfloat param);
+typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, const GLint param);
+typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params);
+
+#define glGetPixelTransformParameterfvEXT GLEW_GET_FUN(__glewGetPixelTransformParameterfvEXT)
+#define glGetPixelTransformParameterivEXT GLEW_GET_FUN(__glewGetPixelTransformParameterivEXT)
+#define glPixelTransformParameterfEXT GLEW_GET_FUN(__glewPixelTransformParameterfEXT)
+#define glPixelTransformParameterfvEXT GLEW_GET_FUN(__glewPixelTransformParameterfvEXT)
+#define glPixelTransformParameteriEXT GLEW_GET_FUN(__glewPixelTransformParameteriEXT)
+#define glPixelTransformParameterivEXT GLEW_GET_FUN(__glewPixelTransformParameterivEXT)
+
+#define GLEW_EXT_pixel_transform GLEW_GET_VAR(__GLEW_EXT_pixel_transform)
+
+#endif /* GL_EXT_pixel_transform */
+
+/* ------------------- GL_EXT_pixel_transform_color_table ------------------ */
+
+#ifndef GL_EXT_pixel_transform_color_table
+#define GL_EXT_pixel_transform_color_table 1
+
+#define GLEW_EXT_pixel_transform_color_table GLEW_GET_VAR(__GLEW_EXT_pixel_transform_color_table)
+
+#endif /* GL_EXT_pixel_transform_color_table */
+
+/* ------------------------ GL_EXT_point_parameters ------------------------ */
+
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 1
+
+#define GL_POINT_SIZE_MIN_EXT 0x8126
+#define GL_POINT_SIZE_MAX_EXT 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128
+#define GL_DISTANCE_ATTENUATION_EXT 0x8129
+
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, GLfloat* params);
+
+#define glPointParameterfEXT GLEW_GET_FUN(__glewPointParameterfEXT)
+#define glPointParameterfvEXT GLEW_GET_FUN(__glewPointParameterfvEXT)
+
+#define GLEW_EXT_point_parameters GLEW_GET_VAR(__GLEW_EXT_point_parameters)
+
+#endif /* GL_EXT_point_parameters */
+
+/* ------------------------- GL_EXT_polygon_offset ------------------------- */
+
+#ifndef GL_EXT_polygon_offset
+#define GL_EXT_polygon_offset 1
+
+#define GL_POLYGON_OFFSET_EXT 0x8037
+#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038
+#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039
+
+typedef void (GLAPIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);
+
+#define glPolygonOffsetEXT GLEW_GET_FUN(__glewPolygonOffsetEXT)
+
+#define GLEW_EXT_polygon_offset GLEW_GET_VAR(__GLEW_EXT_polygon_offset)
+
+#endif /* GL_EXT_polygon_offset */
+
+/* ------------------------- GL_EXT_rescale_normal ------------------------- */
+
+#ifndef GL_EXT_rescale_normal
+#define GL_EXT_rescale_normal 1
+
+#define GLEW_EXT_rescale_normal GLEW_GET_VAR(__GLEW_EXT_rescale_normal)
+
+#endif /* GL_EXT_rescale_normal */
+
+/* -------------------------- GL_EXT_scene_marker -------------------------- */
+
+#ifndef GL_EXT_scene_marker
+#define GL_EXT_scene_marker 1
+
+typedef void (GLAPIENTRY * PFNGLBEGINSCENEEXTPROC) (void);
+typedef void (GLAPIENTRY * PFNGLENDSCENEEXTPROC) (void);
+
+#define glBeginSceneEXT GLEW_GET_FUN(__glewBeginSceneEXT)
+#define glEndSceneEXT GLEW_GET_FUN(__glewEndSceneEXT)
+
+#define GLEW_EXT_scene_marker GLEW_GET_VAR(__GLEW_EXT_scene_marker)
+
+#endif /* GL_EXT_scene_marker */
+
+/* ------------------------- GL_EXT_secondary_color ------------------------ */
+
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+
+#define GL_COLOR_SUM_EXT 0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
+#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E
+
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer);
+
+#define glSecondaryColor3bEXT GLEW_GET_FUN(__glewSecondaryColor3bEXT)
+#define glSecondaryColor3bvEXT GLEW_GET_FUN(__glewSecondaryColor3bvEXT)
+#define glSecondaryColor3dEXT GLEW_GET_FUN(__glewSecondaryColor3dEXT)
+#define glSecondaryColor3dvEXT GLEW_GET_FUN(__glewSecondaryColor3dvEXT)
+#define glSecondaryColor3fEXT GLEW_GET_FUN(__glewSecondaryColor3fEXT)
+#define glSecondaryColor3fvEXT GLEW_GET_FUN(__glewSecondaryColor3fvEXT)
+#define glSecondaryColor3iEXT GLEW_GET_FUN(__glewSecondaryColor3iEXT)
+#define glSecondaryColor3ivEXT GLEW_GET_FUN(__glewSecondaryColor3ivEXT)
+#define glSecondaryColor3sEXT GLEW_GET_FUN(__glewSecondaryColor3sEXT)
+#define glSecondaryColor3svEXT GLEW_GET_FUN(__glewSecondaryColor3svEXT)
+#define glSecondaryColor3ubEXT GLEW_GET_FUN(__glewSecondaryColor3ubEXT)
+#define glSecondaryColor3ubvEXT GLEW_GET_FUN(__glewSecondaryColor3ubvEXT)
+#define glSecondaryColor3uiEXT GLEW_GET_FUN(__glewSecondaryColor3uiEXT)
+#define glSecondaryColor3uivEXT GLEW_GET_FUN(__glewSecondaryColor3uivEXT)
+#define glSecondaryColor3usEXT GLEW_GET_FUN(__glewSecondaryColor3usEXT)
+#define glSecondaryColor3usvEXT GLEW_GET_FUN(__glewSecondaryColor3usvEXT)
+#define glSecondaryColorPointerEXT GLEW_GET_FUN(__glewSecondaryColorPointerEXT)
+
+#define GLEW_EXT_secondary_color GLEW_GET_VAR(__GLEW_EXT_secondary_color)
+
+#endif /* GL_EXT_secondary_color */
+
+/* --------------------- GL_EXT_separate_specular_color -------------------- */
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_EXT_separate_specular_color 1
+
+#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8
+#define GL_SINGLE_COLOR_EXT 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA
+
+#define GLEW_EXT_separate_specular_color GLEW_GET_VAR(__GLEW_EXT_separate_specular_color)
+
+#endif /* GL_EXT_separate_specular_color */
+
+/* -------------------------- GL_EXT_shadow_funcs -------------------------- */
+
+#ifndef GL_EXT_shadow_funcs
+#define GL_EXT_shadow_funcs 1
+
+#define GLEW_EXT_shadow_funcs GLEW_GET_VAR(__GLEW_EXT_shadow_funcs)
+
+#endif /* GL_EXT_shadow_funcs */
+
+/* --------------------- GL_EXT_shared_texture_palette --------------------- */
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_EXT_shared_texture_palette 1
+
+#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB
+
+#define GLEW_EXT_shared_texture_palette GLEW_GET_VAR(__GLEW_EXT_shared_texture_palette)
+
+#endif /* GL_EXT_shared_texture_palette */
+
+/* ------------------------ GL_EXT_stencil_two_side ------------------------ */
+
+#ifndef GL_EXT_stencil_two_side
+#define GL_EXT_stencil_two_side 1
+
+#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910
+#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911
+
+typedef void (GLAPIENTRY * PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face);
+
+#define glActiveStencilFaceEXT GLEW_GET_FUN(__glewActiveStencilFaceEXT)
+
+#define GLEW_EXT_stencil_two_side GLEW_GET_VAR(__GLEW_EXT_stencil_two_side)
+
+#endif /* GL_EXT_stencil_two_side */
+
+/* -------------------------- GL_EXT_stencil_wrap -------------------------- */
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+
+#define GL_INCR_WRAP_EXT 0x8507
+#define GL_DECR_WRAP_EXT 0x8508
+
+#define GLEW_EXT_stencil_wrap GLEW_GET_VAR(__GLEW_EXT_stencil_wrap)
+
+#endif /* GL_EXT_stencil_wrap */
+
+/* --------------------------- GL_EXT_subtexture --------------------------- */
+
+#ifndef GL_EXT_subtexture
+#define GL_EXT_subtexture 1
+
+typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels);
+
+#define glTexSubImage1DEXT GLEW_GET_FUN(__glewTexSubImage1DEXT)
+#define glTexSubImage2DEXT GLEW_GET_FUN(__glewTexSubImage2DEXT)
+#define glTexSubImage3DEXT GLEW_GET_FUN(__glewTexSubImage3DEXT)
+
+#define GLEW_EXT_subtexture GLEW_GET_VAR(__GLEW_EXT_subtexture)
+
+#endif /* GL_EXT_subtexture */
+
+/* ----------------------------- GL_EXT_texture ---------------------------- */
+
+#ifndef GL_EXT_texture
+#define GL_EXT_texture 1
+
+#define GL_ALPHA4_EXT 0x803B
+#define GL_ALPHA8_EXT 0x803C
+#define GL_ALPHA12_EXT 0x803D
+#define GL_ALPHA16_EXT 0x803E
+#define GL_LUMINANCE4_EXT 0x803F
+#define GL_LUMINANCE8_EXT 0x8040
+#define GL_LUMINANCE12_EXT 0x8041
+#define GL_LUMINANCE16_EXT 0x8042
+#define GL_LUMINANCE4_ALPHA4_EXT 0x8043
+#define GL_LUMINANCE6_ALPHA2_EXT 0x8044
+#define GL_LUMINANCE8_ALPHA8_EXT 0x8045
+#define GL_LUMINANCE12_ALPHA4_EXT 0x8046
+#define GL_LUMINANCE12_ALPHA12_EXT 0x8047
+#define GL_LUMINANCE16_ALPHA16_EXT 0x8048
+#define GL_INTENSITY_EXT 0x8049
+#define GL_INTENSITY4_EXT 0x804A
+#define GL_INTENSITY8_EXT 0x804B
+#define GL_INTENSITY12_EXT 0x804C
+#define GL_INTENSITY16_EXT 0x804D
+#define GL_RGB2_EXT 0x804E
+#define GL_RGB4_EXT 0x804F
+#define GL_RGB5_EXT 0x8050
+#define GL_RGB8_EXT 0x8051
+#define GL_RGB10_EXT 0x8052
+#define GL_RGB12_EXT 0x8053
+#define GL_RGB16_EXT 0x8054
+#define GL_RGBA2_EXT 0x8055
+#define GL_RGBA4_EXT 0x8056
+#define GL_RGB5_A1_EXT 0x8057
+#define GL_RGBA8_EXT 0x8058
+#define GL_RGB10_A2_EXT 0x8059
+#define GL_RGBA12_EXT 0x805A
+#define GL_RGBA16_EXT 0x805B
+#define GL_TEXTURE_RED_SIZE_EXT 0x805C
+#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D
+#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E
+#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060
+#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061
+#define GL_REPLACE_EXT 0x8062
+#define GL_PROXY_TEXTURE_1D_EXT 0x8063
+#define GL_PROXY_TEXTURE_2D_EXT 0x8064
+
+#define GLEW_EXT_texture GLEW_GET_VAR(__GLEW_EXT_texture)
+
+#endif /* GL_EXT_texture */
+
+/* ---------------------------- GL_EXT_texture3D --------------------------- */
+
+#ifndef GL_EXT_texture3D
+#define GL_EXT_texture3D 1
+
+#define GL_PACK_SKIP_IMAGES_EXT 0x806B
+#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C
+#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E
+#define GL_TEXTURE_3D_EXT 0x806F
+#define GL_PROXY_TEXTURE_3D_EXT 0x8070
+#define GL_TEXTURE_DEPTH_EXT 0x8071
+#define GL_TEXTURE_WRAP_R_EXT 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073
+
+typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels);
+
+#define glTexImage3DEXT GLEW_GET_FUN(__glewTexImage3DEXT)
+
+#define GLEW_EXT_texture3D GLEW_GET_VAR(__GLEW_EXT_texture3D)
+
+#endif /* GL_EXT_texture3D */
+
+/* -------------------- GL_EXT_texture_compression_dxt1 -------------------- */
+
+#ifndef GL_EXT_texture_compression_dxt1
+#define GL_EXT_texture_compression_dxt1 1
+
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
+
+#define GLEW_EXT_texture_compression_dxt1 GLEW_GET_VAR(__GLEW_EXT_texture_compression_dxt1)
+
+#endif /* GL_EXT_texture_compression_dxt1 */
+
+/* -------------------- GL_EXT_texture_compression_s3tc -------------------- */
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_EXT_texture_compression_s3tc 1
+
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
+
+#define GLEW_EXT_texture_compression_s3tc GLEW_GET_VAR(__GLEW_EXT_texture_compression_s3tc)
+
+#endif /* GL_EXT_texture_compression_s3tc */
+
+/* ------------------------ GL_EXT_texture_cube_map ------------------------ */
+
+#ifndef GL_EXT_texture_cube_map
+#define GL_EXT_texture_cube_map 1
+
+#define GL_NORMAL_MAP_EXT 0x8511
+#define GL_REFLECTION_MAP_EXT 0x8512
+#define GL_TEXTURE_CUBE_MAP_EXT 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C
+
+#define GLEW_EXT_texture_cube_map GLEW_GET_VAR(__GLEW_EXT_texture_cube_map)
+
+#endif /* GL_EXT_texture_cube_map */
+
+/* ----------------------- GL_EXT_texture_edge_clamp ----------------------- */
+
+#ifndef GL_EXT_texture_edge_clamp
+#define GL_EXT_texture_edge_clamp 1
+
+#define GL_CLAMP_TO_EDGE_EXT 0x812F
+
+#define GLEW_EXT_texture_edge_clamp GLEW_GET_VAR(__GLEW_EXT_texture_edge_clamp)
+
+#endif /* GL_EXT_texture_edge_clamp */
+
+/* --------------------------- GL_EXT_texture_env -------------------------- */
+
+#ifndef GL_EXT_texture_env
+#define GL_EXT_texture_env 1
+
+#define GL_TEXTURE_ENV0_EXT 0
+#define GL_ENV_BLEND_EXT 0
+#define GL_TEXTURE_ENV_SHIFT_EXT 0
+#define GL_ENV_REPLACE_EXT 0
+#define GL_ENV_ADD_EXT 0
+#define GL_ENV_SUBTRACT_EXT 0
+#define GL_TEXTURE_ENV_MODE_ALPHA_EXT 0
+#define GL_ENV_REVERSE_SUBTRACT_EXT 0
+#define GL_ENV_REVERSE_BLEND_EXT 0
+#define GL_ENV_COPY_EXT 0
+#define GL_ENV_MODULATE_EXT 0
+
+#define GLEW_EXT_texture_env GLEW_GET_VAR(__GLEW_EXT_texture_env)
+
+#endif /* GL_EXT_texture_env */
+
+/* ------------------------- GL_EXT_texture_env_add ------------------------ */
+
+#ifndef GL_EXT_texture_env_add
+#define GL_EXT_texture_env_add 1
+
+#define GLEW_EXT_texture_env_add GLEW_GET_VAR(__GLEW_EXT_texture_env_add)
+
+#endif /* GL_EXT_texture_env_add */
+
+/* ----------------------- GL_EXT_texture_env_combine ---------------------- */
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+
+#define GL_COMBINE_EXT 0x8570
+#define GL_COMBINE_RGB_EXT 0x8571
+#define GL_COMBINE_ALPHA_EXT 0x8572
+#define GL_RGB_SCALE_EXT 0x8573
+#define GL_ADD_SIGNED_EXT 0x8574
+#define GL_INTERPOLATE_EXT 0x8575
+#define GL_CONSTANT_EXT 0x8576
+#define GL_PRIMARY_COLOR_EXT 0x8577
+#define GL_PREVIOUS_EXT 0x8578
+#define GL_SOURCE0_RGB_EXT 0x8580
+#define GL_SOURCE1_RGB_EXT 0x8581
+#define GL_SOURCE2_RGB_EXT 0x8582
+#define GL_SOURCE0_ALPHA_EXT 0x8588
+#define GL_SOURCE1_ALPHA_EXT 0x8589
+#define GL_SOURCE2_ALPHA_EXT 0x858A
+#define GL_OPERAND0_RGB_EXT 0x8590
+#define GL_OPERAND1_RGB_EXT 0x8591
+#define GL_OPERAND2_RGB_EXT 0x8592
+#define GL_OPERAND0_ALPHA_EXT 0x8598
+#define GL_OPERAND1_ALPHA_EXT 0x8599
+#define GL_OPERAND2_ALPHA_EXT 0x859A
+
+#define GLEW_EXT_texture_env_combine GLEW_GET_VAR(__GLEW_EXT_texture_env_combine)
+
+#endif /* GL_EXT_texture_env_combine */
+
+/* ------------------------ GL_EXT_texture_env_dot3 ------------------------ */
+
+#ifndef GL_EXT_texture_env_dot3
+#define GL_EXT_texture_env_dot3 1
+
+#define GL_DOT3_RGB_EXT 0x8740
+#define GL_DOT3_RGBA_EXT 0x8741
+
+#define GLEW_EXT_texture_env_dot3 GLEW_GET_VAR(__GLEW_EXT_texture_env_dot3)
+
+#endif /* GL_EXT_texture_env_dot3 */
+
+/* ------------------- GL_EXT_texture_filter_anisotropic ------------------- */
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+
+#define GLEW_EXT_texture_filter_anisotropic GLEW_GET_VAR(__GLEW_EXT_texture_filter_anisotropic)
+
+#endif /* GL_EXT_texture_filter_anisotropic */
+
+/* ------------------------ GL_EXT_texture_lod_bias ------------------------ */
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD
+#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT 0x8501
+
+#define GLEW_EXT_texture_lod_bias GLEW_GET_VAR(__GLEW_EXT_texture_lod_bias)
+
+#endif /* GL_EXT_texture_lod_bias */
+
+/* ---------------------- GL_EXT_texture_mirror_clamp ---------------------- */
+
+#ifndef GL_EXT_texture_mirror_clamp
+#define GL_EXT_texture_mirror_clamp 1
+
+#define GL_MIRROR_CLAMP_EXT 0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743
+#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912
+
+#define GLEW_EXT_texture_mirror_clamp GLEW_GET_VAR(__GLEW_EXT_texture_mirror_clamp)
+
+#endif /* GL_EXT_texture_mirror_clamp */
+
+/* ------------------------- GL_EXT_texture_object ------------------------- */
+
+#ifndef GL_EXT_texture_object
+#define GL_EXT_texture_object 1
+
+#define GL_TEXTURE_PRIORITY_EXT 0x8066
+#define GL_TEXTURE_RESIDENT_EXT 0x8067
+#define GL_TEXTURE_1D_BINDING_EXT 0x8068
+#define GL_TEXTURE_2D_BINDING_EXT 0x8069
+#define GL_TEXTURE_3D_BINDING_EXT 0x806A
+
+typedef GLboolean (GLAPIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint* textures, GLboolean* residences);
+typedef void (GLAPIENTRY * PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);
+typedef void (GLAPIENTRY * PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint* textures);
+typedef void (GLAPIENTRY * PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint* textures);
+typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREEXTPROC) (GLuint texture);
+typedef void (GLAPIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint* textures, const GLclampf* priorities);
+
+#define glAreTexturesResidentEXT GLEW_GET_FUN(__glewAreTexturesResidentEXT)
+#define glBindTextureEXT GLEW_GET_FUN(__glewBindTextureEXT)
+#define glDeleteTexturesEXT GLEW_GET_FUN(__glewDeleteTexturesEXT)
+#define glGenTexturesEXT GLEW_GET_FUN(__glewGenTexturesEXT)
+#define glIsTextureEXT GLEW_GET_FUN(__glewIsTextureEXT)
+#define glPrioritizeTexturesEXT GLEW_GET_FUN(__glewPrioritizeTexturesEXT)
+
+#define GLEW_EXT_texture_object GLEW_GET_VAR(__GLEW_EXT_texture_object)
+
+#endif /* GL_EXT_texture_object */
+
+/* --------------------- GL_EXT_texture_perturb_normal --------------------- */
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_EXT_texture_perturb_normal 1
+
+#define GL_PERTURB_EXT 0x85AE
+#define GL_TEXTURE_NORMAL_EXT 0x85AF
+
+typedef void (GLAPIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode);
+
+#define glTextureNormalEXT GLEW_GET_FUN(__glewTextureNormalEXT)
+
+#define GLEW_EXT_texture_perturb_normal GLEW_GET_VAR(__GLEW_EXT_texture_perturb_normal)
+
+#endif /* GL_EXT_texture_perturb_normal */
+
+/* ------------------------ GL_EXT_texture_rectangle ----------------------- */
+
+#ifndef GL_EXT_texture_rectangle
+#define GL_EXT_texture_rectangle 1
+
+#define GL_TEXTURE_RECTANGLE_EXT 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8
+
+#define GLEW_EXT_texture_rectangle GLEW_GET_VAR(__GLEW_EXT_texture_rectangle)
+
+#endif /* GL_EXT_texture_rectangle */
+
+/* -------------------------- GL_EXT_vertex_array -------------------------- */
+
+#ifndef GL_EXT_vertex_array
+#define GL_EXT_vertex_array 1
+
+#define GL_DOUBLE_EXT 0x140A
+#define GL_VERTEX_ARRAY_EXT 0x8074
+#define GL_NORMAL_ARRAY_EXT 0x8075
+#define GL_COLOR_ARRAY_EXT 0x8076
+#define GL_INDEX_ARRAY_EXT 0x8077
+#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078
+#define GL_EDGE_FLAG_ARRAY_EXT 0x8079
+#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A
+#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B
+#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C
+#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D
+#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E
+#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F
+#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080
+#define GL_COLOR_ARRAY_SIZE_EXT 0x8081
+#define GL_COLOR_ARRAY_TYPE_EXT 0x8082
+#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083
+#define GL_COLOR_ARRAY_COUNT_EXT 0x8084
+#define GL_INDEX_ARRAY_TYPE_EXT 0x8085
+#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086
+#define GL_INDEX_ARRAY_COUNT_EXT 0x8087
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D
+#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E
+#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F
+#define GL_COLOR_ARRAY_POINTER_EXT 0x8090
+#define GL_INDEX_ARRAY_POINTER_EXT 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093
+
+typedef void (GLAPIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i);
+typedef void (GLAPIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean* pointer);
+typedef void (GLAPIENTRY * PFNGLGETPOINTERVEXTPROC) (GLenum pname, void** params);
+typedef void (GLAPIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer);
+
+#define glArrayElementEXT GLEW_GET_FUN(__glewArrayElementEXT)
+#define glColorPointerEXT GLEW_GET_FUN(__glewColorPointerEXT)
+#define glDrawArraysEXT GLEW_GET_FUN(__glewDrawArraysEXT)
+#define glEdgeFlagPointerEXT GLEW_GET_FUN(__glewEdgeFlagPointerEXT)
+#define glGetPointervEXT GLEW_GET_FUN(__glewGetPointervEXT)
+#define glIndexPointerEXT GLEW_GET_FUN(__glewIndexPointerEXT)
+#define glNormalPointerEXT GLEW_GET_FUN(__glewNormalPointerEXT)
+#define glTexCoordPointerEXT GLEW_GET_FUN(__glewTexCoordPointerEXT)
+#define glVertexPointerEXT GLEW_GET_FUN(__glewVertexPointerEXT)
+
+#define GLEW_EXT_vertex_array GLEW_GET_VAR(__GLEW_EXT_vertex_array)
+
+#endif /* GL_EXT_vertex_array */
+
+/* -------------------------- GL_EXT_vertex_shader ------------------------- */
+
+#ifndef GL_EXT_vertex_shader
+#define GL_EXT_vertex_shader 1
+
+#define GL_VERTEX_SHADER_EXT 0x8780
+#define GL_VERTEX_SHADER_BINDING_EXT 0x8781
+#define GL_OP_INDEX_EXT 0x8782
+#define GL_OP_NEGATE_EXT 0x8783
+#define GL_OP_DOT3_EXT 0x8784
+#define GL_OP_DOT4_EXT 0x8785
+#define GL_OP_MUL_EXT 0x8786
+#define GL_OP_ADD_EXT 0x8787
+#define GL_OP_MADD_EXT 0x8788
+#define GL_OP_FRAC_EXT 0x8789
+#define GL_OP_MAX_EXT 0x878A
+#define GL_OP_MIN_EXT 0x878B
+#define GL_OP_SET_GE_EXT 0x878C
+#define GL_OP_SET_LT_EXT 0x878D
+#define GL_OP_CLAMP_EXT 0x878E
+#define GL_OP_FLOOR_EXT 0x878F
+#define GL_OP_ROUND_EXT 0x8790
+#define GL_OP_EXP_BASE_2_EXT 0x8791
+#define GL_OP_LOG_BASE_2_EXT 0x8792
+#define GL_OP_POWER_EXT 0x8793
+#define GL_OP_RECIP_EXT 0x8794
+#define GL_OP_RECIP_SQRT_EXT 0x8795
+#define GL_OP_SUB_EXT 0x8796
+#define GL_OP_CROSS_PRODUCT_EXT 0x8797
+#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798
+#define GL_OP_MOV_EXT 0x8799
+#define GL_OUTPUT_VERTEX_EXT 0x879A
+#define GL_OUTPUT_COLOR0_EXT 0x879B
+#define GL_OUTPUT_COLOR1_EXT 0x879C
+#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D
+#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E
+#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F
+#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0
+#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1
+#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2
+#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3
+#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4
+#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5
+#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6
+#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7
+#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8
+#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9
+#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA
+#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB
+#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC
+#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD
+#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE
+#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF
+#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0
+#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1
+#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2
+#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3
+#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4
+#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5
+#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6
+#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7
+#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8
+#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9
+#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA
+#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB
+#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC
+#define GL_OUTPUT_FOG_EXT 0x87BD
+#define GL_SCALAR_EXT 0x87BE
+#define GL_VECTOR_EXT 0x87BF
+#define GL_MATRIX_EXT 0x87C0
+#define GL_VARIANT_EXT 0x87C1
+#define GL_INVARIANT_EXT 0x87C2
+#define GL_LOCAL_CONSTANT_EXT 0x87C3
+#define GL_LOCAL_EXT 0x87C4
+#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5
+#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6
+#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7
+#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8
+#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE
+#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF
+#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0
+#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1
+#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2
+#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3
+#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4
+#define GL_X_EXT 0x87D5
+#define GL_Y_EXT 0x87D6
+#define GL_Z_EXT 0x87D7
+#define GL_W_EXT 0x87D8
+#define GL_NEGATIVE_X_EXT 0x87D9
+#define GL_NEGATIVE_Y_EXT 0x87DA
+#define GL_NEGATIVE_Z_EXT 0x87DB
+#define GL_NEGATIVE_W_EXT 0x87DC
+#define GL_ZERO_EXT 0x87DD
+#define GL_ONE_EXT 0x87DE
+#define GL_NEGATIVE_ONE_EXT 0x87DF
+#define GL_NORMALIZED_RANGE_EXT 0x87E0
+#define GL_FULL_RANGE_EXT 0x87E1
+#define GL_CURRENT_VERTEX_EXT 0x87E2
+#define GL_MVP_MATRIX_EXT 0x87E3
+#define GL_VARIANT_VALUE_EXT 0x87E4
+#define GL_VARIANT_DATATYPE_EXT 0x87E5
+#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6
+#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7
+#define GL_VARIANT_ARRAY_EXT 0x87E8
+#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9
+#define GL_INVARIANT_VALUE_EXT 0x87EA
+#define GL_INVARIANT_DATATYPE_EXT 0x87EB
+#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC
+#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED
+
+typedef void (GLAPIENTRY * PFNGLBEGINVERTEXSHADEREXTPROC) (void);
+typedef GLuint (GLAPIENTRY * PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);
+typedef GLuint (GLAPIENTRY * PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);
+typedef GLuint (GLAPIENTRY * PFNGLBINDPARAMETEREXTPROC) (GLenum value);
+typedef GLuint (GLAPIENTRY * PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);
+typedef GLuint (GLAPIENTRY * PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);
+typedef void (GLAPIENTRY * PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLENDVERTEXSHADEREXTPROC) (void);
+typedef void (GLAPIENTRY * PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef GLuint (GLAPIENTRY * PFNGLGENSYMBOLSEXTPROC) (GLenum dataType, GLenum storageType, GLenum range, GLuint components);
+typedef GLuint (GLAPIENTRY * PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);
+typedef void (GLAPIENTRY * PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (GLAPIENTRY * PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (GLAPIENTRY * PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid **data);
+typedef void (GLAPIENTRY * PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef GLboolean (GLAPIENTRY * PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);
+typedef void (GLAPIENTRY * PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr);
+typedef void (GLAPIENTRY * PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr);
+typedef void (GLAPIENTRY * PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);
+typedef void (GLAPIENTRY * PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+typedef void (GLAPIENTRY * PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+typedef void (GLAPIENTRY * PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (GLAPIENTRY * PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, GLvoid *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTBVEXTPROC) (GLuint id, GLbyte *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTDVEXTPROC) (GLuint id, GLdouble *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTFVEXTPROC) (GLuint id, GLfloat *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTIVEXTPROC) (GLuint id, GLint *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTSVEXTPROC) (GLuint id, GLshort *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTUBVEXTPROC) (GLuint id, GLubyte *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTUIVEXTPROC) (GLuint id, GLuint *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTUSVEXTPROC) (GLuint id, GLushort *addr);
+typedef void (GLAPIENTRY * PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+
+#define glBeginVertexShaderEXT GLEW_GET_FUN(__glewBeginVertexShaderEXT)
+#define glBindLightParameterEXT GLEW_GET_FUN(__glewBindLightParameterEXT)
+#define glBindMaterialParameterEXT GLEW_GET_FUN(__glewBindMaterialParameterEXT)
+#define glBindParameterEXT GLEW_GET_FUN(__glewBindParameterEXT)
+#define glBindTexGenParameterEXT GLEW_GET_FUN(__glewBindTexGenParameterEXT)
+#define glBindTextureUnitParameterEXT GLEW_GET_FUN(__glewBindTextureUnitParameterEXT)
+#define glBindVertexShaderEXT GLEW_GET_FUN(__glewBindVertexShaderEXT)
+#define glDeleteVertexShaderEXT GLEW_GET_FUN(__glewDeleteVertexShaderEXT)
+#define glDisableVariantClientStateEXT GLEW_GET_FUN(__glewDisableVariantClientStateEXT)
+#define glEnableVariantClientStateEXT GLEW_GET_FUN(__glewEnableVariantClientStateEXT)
+#define glEndVertexShaderEXT GLEW_GET_FUN(__glewEndVertexShaderEXT)
+#define glExtractComponentEXT GLEW_GET_FUN(__glewExtractComponentEXT)
+#define glGenSymbolsEXT GLEW_GET_FUN(__glewGenSymbolsEXT)
+#define glGenVertexShadersEXT GLEW_GET_FUN(__glewGenVertexShadersEXT)
+#define glGetInvariantBooleanvEXT GLEW_GET_FUN(__glewGetInvariantBooleanvEXT)
+#define glGetInvariantFloatvEXT GLEW_GET_FUN(__glewGetInvariantFloatvEXT)
+#define glGetInvariantIntegervEXT GLEW_GET_FUN(__glewGetInvariantIntegervEXT)
+#define glGetLocalConstantBooleanvEXT GLEW_GET_FUN(__glewGetLocalConstantBooleanvEXT)
+#define glGetLocalConstantFloatvEXT GLEW_GET_FUN(__glewGetLocalConstantFloatvEXT)
+#define glGetLocalConstantIntegervEXT GLEW_GET_FUN(__glewGetLocalConstantIntegervEXT)
+#define glGetVariantBooleanvEXT GLEW_GET_FUN(__glewGetVariantBooleanvEXT)
+#define glGetVariantFloatvEXT GLEW_GET_FUN(__glewGetVariantFloatvEXT)
+#define glGetVariantIntegervEXT GLEW_GET_FUN(__glewGetVariantIntegervEXT)
+#define glGetVariantPointervEXT GLEW_GET_FUN(__glewGetVariantPointervEXT)
+#define glInsertComponentEXT GLEW_GET_FUN(__glewInsertComponentEXT)
+#define glIsVariantEnabledEXT GLEW_GET_FUN(__glewIsVariantEnabledEXT)
+#define glSetInvariantEXT GLEW_GET_FUN(__glewSetInvariantEXT)
+#define glSetLocalConstantEXT GLEW_GET_FUN(__glewSetLocalConstantEXT)
+#define glShaderOp1EXT GLEW_GET_FUN(__glewShaderOp1EXT)
+#define glShaderOp2EXT GLEW_GET_FUN(__glewShaderOp2EXT)
+#define glShaderOp3EXT GLEW_GET_FUN(__glewShaderOp3EXT)
+#define glSwizzleEXT GLEW_GET_FUN(__glewSwizzleEXT)
+#define glVariantPointerEXT GLEW_GET_FUN(__glewVariantPointerEXT)
+#define glVariantbvEXT GLEW_GET_FUN(__glewVariantbvEXT)
+#define glVariantdvEXT GLEW_GET_FUN(__glewVariantdvEXT)
+#define glVariantfvEXT GLEW_GET_FUN(__glewVariantfvEXT)
+#define glVariantivEXT GLEW_GET_FUN(__glewVariantivEXT)
+#define glVariantsvEXT GLEW_GET_FUN(__glewVariantsvEXT)
+#define glVariantubvEXT GLEW_GET_FUN(__glewVariantubvEXT)
+#define glVariantuivEXT GLEW_GET_FUN(__glewVariantuivEXT)
+#define glVariantusvEXT GLEW_GET_FUN(__glewVariantusvEXT)
+#define glWriteMaskEXT GLEW_GET_FUN(__glewWriteMaskEXT)
+
+#define GLEW_EXT_vertex_shader GLEW_GET_VAR(__GLEW_EXT_vertex_shader)
+
+#endif /* GL_EXT_vertex_shader */
+
+/* ------------------------ GL_EXT_vertex_weighting ------------------------ */
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_EXT_vertex_weighting 1
+
+#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3
+#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6
+#define GL_MODELVIEW0_EXT 0x1700
+#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502
+#define GL_MODELVIEW1_MATRIX_EXT 0x8506
+#define GL_VERTEX_WEIGHTING_EXT 0x8509
+#define GL_MODELVIEW1_EXT 0x850A
+#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B
+#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C
+#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D
+#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E
+#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F
+#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510
+
+typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, void* pointer);
+typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);
+typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (GLfloat* weight);
+
+#define glVertexWeightPointerEXT GLEW_GET_FUN(__glewVertexWeightPointerEXT)
+#define glVertexWeightfEXT GLEW_GET_FUN(__glewVertexWeightfEXT)
+#define glVertexWeightfvEXT GLEW_GET_FUN(__glewVertexWeightfvEXT)
+
+#define GLEW_EXT_vertex_weighting GLEW_GET_VAR(__GLEW_EXT_vertex_weighting)
+
+#endif /* GL_EXT_vertex_weighting */
+
+/* --------------------- GL_HP_convolution_border_modes -------------------- */
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_HP_convolution_border_modes 1
+
+#define GLEW_HP_convolution_border_modes GLEW_GET_VAR(__GLEW_HP_convolution_border_modes)
+
+#endif /* GL_HP_convolution_border_modes */
+
+/* ------------------------- GL_HP_image_transform ------------------------- */
+
+#ifndef GL_HP_image_transform
+#define GL_HP_image_transform 1
+
+typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, const GLfloat param);
+typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, const GLint param);
+typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params);
+
+#define glGetImageTransformParameterfvHP GLEW_GET_FUN(__glewGetImageTransformParameterfvHP)
+#define glGetImageTransformParameterivHP GLEW_GET_FUN(__glewGetImageTransformParameterivHP)
+#define glImageTransformParameterfHP GLEW_GET_FUN(__glewImageTransformParameterfHP)
+#define glImageTransformParameterfvHP GLEW_GET_FUN(__glewImageTransformParameterfvHP)
+#define glImageTransformParameteriHP GLEW_GET_FUN(__glewImageTransformParameteriHP)
+#define glImageTransformParameterivHP GLEW_GET_FUN(__glewImageTransformParameterivHP)
+
+#define GLEW_HP_image_transform GLEW_GET_VAR(__GLEW_HP_image_transform)
+
+#endif /* GL_HP_image_transform */
+
+/* -------------------------- GL_HP_occlusion_test ------------------------- */
+
+#ifndef GL_HP_occlusion_test
+#define GL_HP_occlusion_test 1
+
+#define GL_OCCLUSION_TEST_HP 0x8165
+#define GL_OCCLUSION_TEST_RESULT_HP 0x8166
+
+#define GLEW_HP_occlusion_test GLEW_GET_VAR(__GLEW_HP_occlusion_test)
+
+#endif /* GL_HP_occlusion_test */
+
+/* ------------------------- GL_HP_texture_lighting ------------------------ */
+
+#ifndef GL_HP_texture_lighting
+#define GL_HP_texture_lighting 1
+
+#define GLEW_HP_texture_lighting GLEW_GET_VAR(__GLEW_HP_texture_lighting)
+
+#endif /* GL_HP_texture_lighting */
+
+/* --------------------------- GL_IBM_cull_vertex -------------------------- */
+
+#ifndef GL_IBM_cull_vertex
+#define GL_IBM_cull_vertex 1
+
+#define GL_CULL_VERTEX_IBM 103050
+
+#define GLEW_IBM_cull_vertex GLEW_GET_VAR(__GLEW_IBM_cull_vertex)
+
+#endif /* GL_IBM_cull_vertex */
+
+/* ---------------------- GL_IBM_multimode_draw_arrays --------------------- */
+
+#ifndef GL_IBM_multimode_draw_arrays
+#define GL_IBM_multimode_draw_arrays 1
+
+typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum* mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum* mode, const GLsizei *count, GLenum type, const GLvoid * const *indices, GLsizei primcount, GLint modestride);
+
+#define glMultiModeDrawArraysIBM GLEW_GET_FUN(__glewMultiModeDrawArraysIBM)
+#define glMultiModeDrawElementsIBM GLEW_GET_FUN(__glewMultiModeDrawElementsIBM)
+
+#define GLEW_IBM_multimode_draw_arrays GLEW_GET_VAR(__GLEW_IBM_multimode_draw_arrays)
+
+#endif /* GL_IBM_multimode_draw_arrays */
+
+/* ------------------------- GL_IBM_rasterpos_clip ------------------------- */
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_IBM_rasterpos_clip 1
+
+#define GL_RASTER_POSITION_UNCLIPPED_IBM 103010
+
+#define GLEW_IBM_rasterpos_clip GLEW_GET_VAR(__GLEW_IBM_rasterpos_clip)
+
+#endif /* GL_IBM_rasterpos_clip */
+
+/* --------------------------- GL_IBM_static_data -------------------------- */
+
+#ifndef GL_IBM_static_data
+#define GL_IBM_static_data 1
+
+#define GL_ALL_STATIC_DATA_IBM 103060
+#define GL_STATIC_VERTEX_ARRAY_IBM 103061
+
+#define GLEW_IBM_static_data GLEW_GET_VAR(__GLEW_IBM_static_data)
+
+#endif /* GL_IBM_static_data */
+
+/* --------------------- GL_IBM_texture_mirrored_repeat -------------------- */
+
+#ifndef GL_IBM_texture_mirrored_repeat
+#define GL_IBM_texture_mirrored_repeat 1
+
+#define GL_MIRRORED_REPEAT_IBM 0x8370
+
+#define GLEW_IBM_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_IBM_texture_mirrored_repeat)
+
+#endif /* GL_IBM_texture_mirrored_repeat */
+
+/* ----------------------- GL_IBM_vertex_array_lists ----------------------- */
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_IBM_vertex_array_lists 1
+
+#define GL_VERTEX_ARRAY_LIST_IBM 103070
+#define GL_NORMAL_ARRAY_LIST_IBM 103071
+#define GL_COLOR_ARRAY_LIST_IBM 103072
+#define GL_INDEX_ARRAY_LIST_IBM 103073
+#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074
+#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075
+#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076
+#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077
+#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080
+#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081
+#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082
+#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083
+#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084
+#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085
+#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086
+#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087
+
+typedef void (GLAPIENTRY * PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+
+#define glColorPointerListIBM GLEW_GET_FUN(__glewColorPointerListIBM)
+#define glEdgeFlagPointerListIBM GLEW_GET_FUN(__glewEdgeFlagPointerListIBM)
+#define glFogCoordPointerListIBM GLEW_GET_FUN(__glewFogCoordPointerListIBM)
+#define glIndexPointerListIBM GLEW_GET_FUN(__glewIndexPointerListIBM)
+#define glNormalPointerListIBM GLEW_GET_FUN(__glewNormalPointerListIBM)
+#define glSecondaryColorPointerListIBM GLEW_GET_FUN(__glewSecondaryColorPointerListIBM)
+#define glTexCoordPointerListIBM GLEW_GET_FUN(__glewTexCoordPointerListIBM)
+#define glVertexPointerListIBM GLEW_GET_FUN(__glewVertexPointerListIBM)
+
+#define GLEW_IBM_vertex_array_lists GLEW_GET_VAR(__GLEW_IBM_vertex_array_lists)
+
+#endif /* GL_IBM_vertex_array_lists */
+
+/* -------------------------- GL_INGR_color_clamp -------------------------- */
+
+#ifndef GL_INGR_color_clamp
+#define GL_INGR_color_clamp 1
+
+#define GL_RED_MIN_CLAMP_INGR 0x8560
+#define GL_GREEN_MIN_CLAMP_INGR 0x8561
+#define GL_BLUE_MIN_CLAMP_INGR 0x8562
+#define GL_ALPHA_MIN_CLAMP_INGR 0x8563
+#define GL_RED_MAX_CLAMP_INGR 0x8564
+#define GL_GREEN_MAX_CLAMP_INGR 0x8565
+#define GL_BLUE_MAX_CLAMP_INGR 0x8566
+#define GL_ALPHA_MAX_CLAMP_INGR 0x8567
+
+#define GLEW_INGR_color_clamp GLEW_GET_VAR(__GLEW_INGR_color_clamp)
+
+#endif /* GL_INGR_color_clamp */
+
+/* ------------------------- GL_INGR_interlace_read ------------------------ */
+
+#ifndef GL_INGR_interlace_read
+#define GL_INGR_interlace_read 1
+
+#define GL_INTERLACE_READ_INGR 0x8568
+
+#define GLEW_INGR_interlace_read GLEW_GET_VAR(__GLEW_INGR_interlace_read)
+
+#endif /* GL_INGR_interlace_read */
+
+/* ------------------------ GL_INTEL_parallel_arrays ----------------------- */
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_INTEL_parallel_arrays 1
+
+#define GL_PARALLEL_ARRAYS_INTEL 0x83F4
+#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5
+#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6
+#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7
+#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8
+
+typedef void (GLAPIENTRY * PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer);
+typedef void (GLAPIENTRY * PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void** pointer);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer);
+typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer);
+
+#define glColorPointervINTEL GLEW_GET_FUN(__glewColorPointervINTEL)
+#define glNormalPointervINTEL GLEW_GET_FUN(__glewNormalPointervINTEL)
+#define glTexCoordPointervINTEL GLEW_GET_FUN(__glewTexCoordPointervINTEL)
+#define glVertexPointervINTEL GLEW_GET_FUN(__glewVertexPointervINTEL)
+
+#define GLEW_INTEL_parallel_arrays GLEW_GET_VAR(__GLEW_INTEL_parallel_arrays)
+
+#endif /* GL_INTEL_parallel_arrays */
+
+/* ------------------------ GL_INTEL_texture_scissor ----------------------- */
+
+#ifndef GL_INTEL_texture_scissor
+#define GL_INTEL_texture_scissor 1
+
+typedef void (GLAPIENTRY * PFNGLTEXSCISSORFUNCINTELPROC) (GLenum target, GLenum lfunc, GLenum hfunc);
+typedef void (GLAPIENTRY * PFNGLTEXSCISSORINTELPROC) (GLenum target, GLclampf tlow, GLclampf thigh);
+
+#define glTexScissorFuncINTEL GLEW_GET_FUN(__glewTexScissorFuncINTEL)
+#define glTexScissorINTEL GLEW_GET_FUN(__glewTexScissorINTEL)
+
+#define GLEW_INTEL_texture_scissor GLEW_GET_VAR(__GLEW_INTEL_texture_scissor)
+
+#endif /* GL_INTEL_texture_scissor */
+
+/* -------------------------- GL_KTX_buffer_region ------------------------- */
+
+#ifndef GL_KTX_buffer_region
+#define GL_KTX_buffer_region 1
+
+#define GL_KTX_FRONT_REGION 0x0
+#define GL_KTX_BACK_REGION 0x1
+#define GL_KTX_Z_REGION 0x2
+#define GL_KTX_STENCIL_REGION 0x3
+
+typedef GLuint (GLAPIENTRY * PFNGLBUFFERREGIONENABLEDEXTPROC) (void);
+typedef void (GLAPIENTRY * PFNGLDELETEBUFFERREGIONEXTPROC) (GLenum region);
+typedef void (GLAPIENTRY * PFNGLDRAWBUFFERREGIONEXTPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest);
+typedef GLuint (GLAPIENTRY * PFNGLNEWBUFFERREGIONEXTPROC) (GLenum region);
+typedef void (GLAPIENTRY * PFNGLREADBUFFERREGIONEXTPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height);
+
+#define glBufferRegionEnabledEXT GLEW_GET_FUN(__glewBufferRegionEnabledEXT)
+#define glDeleteBufferRegionEXT GLEW_GET_FUN(__glewDeleteBufferRegionEXT)
+#define glDrawBufferRegionEXT GLEW_GET_FUN(__glewDrawBufferRegionEXT)
+#define glNewBufferRegionEXT GLEW_GET_FUN(__glewNewBufferRegionEXT)
+#define glReadBufferRegionEXT GLEW_GET_FUN(__glewReadBufferRegionEXT)
+
+#define GLEW_KTX_buffer_region GLEW_GET_VAR(__GLEW_KTX_buffer_region)
+
+#endif /* GL_KTX_buffer_region */
+
+/* -------------------------- GL_MESA_pack_invert -------------------------- */
+
+#ifndef GL_MESA_pack_invert
+#define GL_MESA_pack_invert 1
+
+#define GL_PACK_INVERT_MESA 0x8758
+
+#define GLEW_MESA_pack_invert GLEW_GET_VAR(__GLEW_MESA_pack_invert)
+
+#endif /* GL_MESA_pack_invert */
+
+/* ------------------------- GL_MESA_resize_buffers ------------------------ */
+
+#ifndef GL_MESA_resize_buffers
+#define GL_MESA_resize_buffers 1
+
+typedef void (GLAPIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void);
+
+#define glResizeBuffersMESA GLEW_GET_FUN(__glewResizeBuffersMESA)
+
+#define GLEW_MESA_resize_buffers GLEW_GET_VAR(__GLEW_MESA_resize_buffers)
+
+#endif /* GL_MESA_resize_buffers */
+
+/* --------------------------- GL_MESA_window_pos -------------------------- */
+
+#ifndef GL_MESA_window_pos
+#define GL_MESA_window_pos 1
+
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVMESAPROC) (const GLint* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVMESAPROC) (const GLshort* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVMESAPROC) (const GLint* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVMESAPROC) (const GLshort* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IVMESAPROC) (const GLint* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort* p);
+
+#define glWindowPos2dMESA GLEW_GET_FUN(__glewWindowPos2dMESA)
+#define glWindowPos2dvMESA GLEW_GET_FUN(__glewWindowPos2dvMESA)
+#define glWindowPos2fMESA GLEW_GET_FUN(__glewWindowPos2fMESA)
+#define glWindowPos2fvMESA GLEW_GET_FUN(__glewWindowPos2fvMESA)
+#define glWindowPos2iMESA GLEW_GET_FUN(__glewWindowPos2iMESA)
+#define glWindowPos2ivMESA GLEW_GET_FUN(__glewWindowPos2ivMESA)
+#define glWindowPos2sMESA GLEW_GET_FUN(__glewWindowPos2sMESA)
+#define glWindowPos2svMESA GLEW_GET_FUN(__glewWindowPos2svMESA)
+#define glWindowPos3dMESA GLEW_GET_FUN(__glewWindowPos3dMESA)
+#define glWindowPos3dvMESA GLEW_GET_FUN(__glewWindowPos3dvMESA)
+#define glWindowPos3fMESA GLEW_GET_FUN(__glewWindowPos3fMESA)
+#define glWindowPos3fvMESA GLEW_GET_FUN(__glewWindowPos3fvMESA)
+#define glWindowPos3iMESA GLEW_GET_FUN(__glewWindowPos3iMESA)
+#define glWindowPos3ivMESA GLEW_GET_FUN(__glewWindowPos3ivMESA)
+#define glWindowPos3sMESA GLEW_GET_FUN(__glewWindowPos3sMESA)
+#define glWindowPos3svMESA GLEW_GET_FUN(__glewWindowPos3svMESA)
+#define glWindowPos4dMESA GLEW_GET_FUN(__glewWindowPos4dMESA)
+#define glWindowPos4dvMESA GLEW_GET_FUN(__glewWindowPos4dvMESA)
+#define glWindowPos4fMESA GLEW_GET_FUN(__glewWindowPos4fMESA)
+#define glWindowPos4fvMESA GLEW_GET_FUN(__glewWindowPos4fvMESA)
+#define glWindowPos4iMESA GLEW_GET_FUN(__glewWindowPos4iMESA)
+#define glWindowPos4ivMESA GLEW_GET_FUN(__glewWindowPos4ivMESA)
+#define glWindowPos4sMESA GLEW_GET_FUN(__glewWindowPos4sMESA)
+#define glWindowPos4svMESA GLEW_GET_FUN(__glewWindowPos4svMESA)
+
+#define GLEW_MESA_window_pos GLEW_GET_VAR(__GLEW_MESA_window_pos)
+
+#endif /* GL_MESA_window_pos */
+
+/* ------------------------- GL_MESA_ycbcr_texture ------------------------- */
+
+#ifndef GL_MESA_ycbcr_texture
+#define GL_MESA_ycbcr_texture 1
+
+#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB
+#define GL_YCBCR_MESA 0x8757
+
+#define GLEW_MESA_ycbcr_texture GLEW_GET_VAR(__GLEW_MESA_ycbcr_texture)
+
+#endif /* GL_MESA_ycbcr_texture */
+
+/* --------------------------- GL_NV_blend_square -------------------------- */
+
+#ifndef GL_NV_blend_square
+#define GL_NV_blend_square 1
+
+#define GLEW_NV_blend_square GLEW_GET_VAR(__GLEW_NV_blend_square)
+
+#endif /* GL_NV_blend_square */
+
+/* ----------------------- GL_NV_copy_depth_to_color ----------------------- */
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_NV_copy_depth_to_color 1
+
+#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E
+#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F
+
+#define GLEW_NV_copy_depth_to_color GLEW_GET_VAR(__GLEW_NV_copy_depth_to_color)
+
+#endif /* GL_NV_copy_depth_to_color */
+
+/* --------------------------- GL_NV_depth_clamp --------------------------- */
+
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+
+#define GL_DEPTH_CLAMP_NV 0x864F
+
+#define GLEW_NV_depth_clamp GLEW_GET_VAR(__GLEW_NV_depth_clamp)
+
+#endif /* GL_NV_depth_clamp */
+
+/* ---------------------------- GL_NV_evaluators --------------------------- */
+
+#ifndef GL_NV_evaluators
+#define GL_NV_evaluators 1
+
+#define GL_EVAL_2D_NV 0x86C0
+#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1
+#define GL_MAP_TESSELLATION_NV 0x86C2
+#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3
+#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4
+#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5
+#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6
+#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7
+#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8
+#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9
+#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA
+#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB
+#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC
+#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD
+#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE
+#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF
+#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0
+#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1
+#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2
+#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3
+#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4
+#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5
+#define GL_MAX_MAP_TESSELLATION_NV 0x86D6
+#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7
+
+typedef void (GLAPIENTRY * PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void* points);
+typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void* points);
+typedef void (GLAPIENTRY * PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint* params);
+
+#define glEvalMapsNV GLEW_GET_FUN(__glewEvalMapsNV)
+#define glGetMapAttribParameterfvNV GLEW_GET_FUN(__glewGetMapAttribParameterfvNV)
+#define glGetMapAttribParameterivNV GLEW_GET_FUN(__glewGetMapAttribParameterivNV)
+#define glGetMapControlPointsNV GLEW_GET_FUN(__glewGetMapControlPointsNV)
+#define glGetMapParameterfvNV GLEW_GET_FUN(__glewGetMapParameterfvNV)
+#define glGetMapParameterivNV GLEW_GET_FUN(__glewGetMapParameterivNV)
+#define glMapControlPointsNV GLEW_GET_FUN(__glewMapControlPointsNV)
+#define glMapParameterfvNV GLEW_GET_FUN(__glewMapParameterfvNV)
+#define glMapParameterivNV GLEW_GET_FUN(__glewMapParameterivNV)
+
+#define GLEW_NV_evaluators GLEW_GET_VAR(__GLEW_NV_evaluators)
+
+#endif /* GL_NV_evaluators */
+
+/* ------------------------------ GL_NV_fence ------------------------------ */
+
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+
+#define GL_ALL_COMPLETED_NV 0x84F2
+#define GL_FENCE_STATUS_NV 0x84F3
+#define GL_FENCE_CONDITION_NV 0x84F4
+
+typedef void (GLAPIENTRY * PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint* fences);
+typedef void (GLAPIENTRY * PFNGLFINISHFENCENVPROC) (GLuint fence);
+typedef void (GLAPIENTRY * PFNGLGENFENCESNVPROC) (GLsizei n, GLuint* fences);
+typedef void (GLAPIENTRY * PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISFENCENVPROC) (GLuint fence);
+typedef void (GLAPIENTRY * PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
+typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCENVPROC) (GLuint fence);
+
+#define glDeleteFencesNV GLEW_GET_FUN(__glewDeleteFencesNV)
+#define glFinishFenceNV GLEW_GET_FUN(__glewFinishFenceNV)
+#define glGenFencesNV GLEW_GET_FUN(__glewGenFencesNV)
+#define glGetFenceivNV GLEW_GET_FUN(__glewGetFenceivNV)
+#define glIsFenceNV GLEW_GET_FUN(__glewIsFenceNV)
+#define glSetFenceNV GLEW_GET_FUN(__glewSetFenceNV)
+#define glTestFenceNV GLEW_GET_FUN(__glewTestFenceNV)
+
+#define GLEW_NV_fence GLEW_GET_VAR(__GLEW_NV_fence)
+
+#endif /* GL_NV_fence */
+
+/* --------------------------- GL_NV_float_buffer -------------------------- */
+
+#ifndef GL_NV_float_buffer
+#define GL_NV_float_buffer 1
+
+#define GL_FLOAT_R_NV 0x8880
+#define GL_FLOAT_RG_NV 0x8881
+#define GL_FLOAT_RGB_NV 0x8882
+#define GL_FLOAT_RGBA_NV 0x8883
+#define GL_FLOAT_R16_NV 0x8884
+#define GL_FLOAT_R32_NV 0x8885
+#define GL_FLOAT_RG16_NV 0x8886
+#define GL_FLOAT_RG32_NV 0x8887
+#define GL_FLOAT_RGB16_NV 0x8888
+#define GL_FLOAT_RGB32_NV 0x8889
+#define GL_FLOAT_RGBA16_NV 0x888A
+#define GL_FLOAT_RGBA32_NV 0x888B
+#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C
+#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D
+#define GL_FLOAT_RGBA_MODE_NV 0x888E
+
+#define GLEW_NV_float_buffer GLEW_GET_VAR(__GLEW_NV_float_buffer)
+
+#endif /* GL_NV_float_buffer */
+
+/* --------------------------- GL_NV_fog_distance -------------------------- */
+
+#ifndef GL_NV_fog_distance
+#define GL_NV_fog_distance 1
+
+#define GL_FOG_DISTANCE_MODE_NV 0x855A
+#define GL_EYE_RADIAL_NV 0x855B
+#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C
+
+#define GLEW_NV_fog_distance GLEW_GET_VAR(__GLEW_NV_fog_distance)
+
+#endif /* GL_NV_fog_distance */
+
+/* ------------------------- GL_NV_fragment_program ------------------------ */
+
+#ifndef GL_NV_fragment_program
+#define GL_NV_fragment_program 1
+
+#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868
+#define GL_FRAGMENT_PROGRAM_NV 0x8870
+#define GL_MAX_TEXTURE_COORDS_NV 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872
+#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873
+#define GL_PROGRAM_ERROR_STRING_NV 0x8874
+
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble *params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLdouble v[]);
+typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLfloat v[]);
+
+#define glGetProgramNamedParameterdvNV GLEW_GET_FUN(__glewGetProgramNamedParameterdvNV)
+#define glGetProgramNamedParameterfvNV GLEW_GET_FUN(__glewGetProgramNamedParameterfvNV)
+#define glProgramNamedParameter4dNV GLEW_GET_FUN(__glewProgramNamedParameter4dNV)
+#define glProgramNamedParameter4dvNV GLEW_GET_FUN(__glewProgramNamedParameter4dvNV)
+#define glProgramNamedParameter4fNV GLEW_GET_FUN(__glewProgramNamedParameter4fNV)
+#define glProgramNamedParameter4fvNV GLEW_GET_FUN(__glewProgramNamedParameter4fvNV)
+
+#define GLEW_NV_fragment_program GLEW_GET_VAR(__GLEW_NV_fragment_program)
+
+#endif /* GL_NV_fragment_program */
+
+/* ------------------------ GL_NV_fragment_program2 ------------------------ */
+
+#ifndef GL_NV_fragment_program2
+#define GL_NV_fragment_program2 1
+
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5
+#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6
+#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7
+#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8
+
+#define GLEW_NV_fragment_program2 GLEW_GET_VAR(__GLEW_NV_fragment_program2)
+
+#endif /* GL_NV_fragment_program2 */
+
+/* --------------------- GL_NV_fragment_program_option --------------------- */
+
+#ifndef GL_NV_fragment_program_option
+#define GL_NV_fragment_program_option 1
+
+#define GLEW_NV_fragment_program_option GLEW_GET_VAR(__GLEW_NV_fragment_program_option)
+
+#endif /* GL_NV_fragment_program_option */
+
+/* ---------------------------- GL_NV_half_float --------------------------- */
+
+#ifndef GL_NV_half_float
+#define GL_NV_half_float 1
+
+#define GL_HALF_FLOAT_NV 0x140B
+
+typedef unsigned short GLhalf;
+
+typedef void (GLAPIENTRY * PFNGLCOLOR3HNVPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (GLAPIENTRY * PFNGLCOLOR3HVNVPROC) (const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLCOLOR4HNVPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+typedef void (GLAPIENTRY * PFNGLCOLOR4HVNVPROC) (const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDHNVPROC) (GLuint fog);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDHVNVPROC) (const GLuint* fog);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLuint s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLuint s, GLuint t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLuint s, GLuint t, GLuint r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLuint s, GLuint t, GLuint r, GLuint q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLNORMAL3HNVPROC) (GLuint nx, GLuint ny, GLuint nz);
+typedef void (GLAPIENTRY * PFNGLNORMAL3HVNVPROC) (const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HNVPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HVNVPROC) (const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD1HNVPROC) (GLuint s);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD1HVNVPROC) (const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2HNVPROC) (GLuint s, GLuint t);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2HVNVPROC) (const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD3HNVPROC) (GLuint s, GLuint t, GLuint r);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD3HVNVPROC) (const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4HNVPROC) (GLuint s, GLuint t, GLuint r, GLuint q);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4HVNVPROC) (const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEX2HNVPROC) (GLuint x, GLuint y);
+typedef void (GLAPIENTRY * PFNGLVERTEX2HVNVPROC) (const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEX3HNVPROC) (GLuint x, GLuint y, GLuint z);
+typedef void (GLAPIENTRY * PFNGLVERTEX3HVNVPROC) (const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEX4HNVPROC) (GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GLAPIENTRY * PFNGLVERTEX4HVNVPROC) (const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLuint x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHNVPROC) (GLuint weight);
+typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHVNVPROC) (const GLuint* weight);
+
+#define glColor3hNV GLEW_GET_FUN(__glewColor3hNV)
+#define glColor3hvNV GLEW_GET_FUN(__glewColor3hvNV)
+#define glColor4hNV GLEW_GET_FUN(__glewColor4hNV)
+#define glColor4hvNV GLEW_GET_FUN(__glewColor4hvNV)
+#define glFogCoordhNV GLEW_GET_FUN(__glewFogCoordhNV)
+#define glFogCoordhvNV GLEW_GET_FUN(__glewFogCoordhvNV)
+#define glMultiTexCoord1hNV GLEW_GET_FUN(__glewMultiTexCoord1hNV)
+#define glMultiTexCoord1hvNV GLEW_GET_FUN(__glewMultiTexCoord1hvNV)
+#define glMultiTexCoord2hNV GLEW_GET_FUN(__glewMultiTexCoord2hNV)
+#define glMultiTexCoord2hvNV GLEW_GET_FUN(__glewMultiTexCoord2hvNV)
+#define glMultiTexCoord3hNV GLEW_GET_FUN(__glewMultiTexCoord3hNV)
+#define glMultiTexCoord3hvNV GLEW_GET_FUN(__glewMultiTexCoord3hvNV)
+#define glMultiTexCoord4hNV GLEW_GET_FUN(__glewMultiTexCoord4hNV)
+#define glMultiTexCoord4hvNV GLEW_GET_FUN(__glewMultiTexCoord4hvNV)
+#define glNormal3hNV GLEW_GET_FUN(__glewNormal3hNV)
+#define glNormal3hvNV GLEW_GET_FUN(__glewNormal3hvNV)
+#define glSecondaryColor3hNV GLEW_GET_FUN(__glewSecondaryColor3hNV)
+#define glSecondaryColor3hvNV GLEW_GET_FUN(__glewSecondaryColor3hvNV)
+#define glTexCoord1hNV GLEW_GET_FUN(__glewTexCoord1hNV)
+#define glTexCoord1hvNV GLEW_GET_FUN(__glewTexCoord1hvNV)
+#define glTexCoord2hNV GLEW_GET_FUN(__glewTexCoord2hNV)
+#define glTexCoord2hvNV GLEW_GET_FUN(__glewTexCoord2hvNV)
+#define glTexCoord3hNV GLEW_GET_FUN(__glewTexCoord3hNV)
+#define glTexCoord3hvNV GLEW_GET_FUN(__glewTexCoord3hvNV)
+#define glTexCoord4hNV GLEW_GET_FUN(__glewTexCoord4hNV)
+#define glTexCoord4hvNV GLEW_GET_FUN(__glewTexCoord4hvNV)
+#define glVertex2hNV GLEW_GET_FUN(__glewVertex2hNV)
+#define glVertex2hvNV GLEW_GET_FUN(__glewVertex2hvNV)
+#define glVertex3hNV GLEW_GET_FUN(__glewVertex3hNV)
+#define glVertex3hvNV GLEW_GET_FUN(__glewVertex3hvNV)
+#define glVertex4hNV GLEW_GET_FUN(__glewVertex4hNV)
+#define glVertex4hvNV GLEW_GET_FUN(__glewVertex4hvNV)
+#define glVertexAttrib1hNV GLEW_GET_FUN(__glewVertexAttrib1hNV)
+#define glVertexAttrib1hvNV GLEW_GET_FUN(__glewVertexAttrib1hvNV)
+#define glVertexAttrib2hNV GLEW_GET_FUN(__glewVertexAttrib2hNV)
+#define glVertexAttrib2hvNV GLEW_GET_FUN(__glewVertexAttrib2hvNV)
+#define glVertexAttrib3hNV GLEW_GET_FUN(__glewVertexAttrib3hNV)
+#define glVertexAttrib3hvNV GLEW_GET_FUN(__glewVertexAttrib3hvNV)
+#define glVertexAttrib4hNV GLEW_GET_FUN(__glewVertexAttrib4hNV)
+#define glVertexAttrib4hvNV GLEW_GET_FUN(__glewVertexAttrib4hvNV)
+#define glVertexAttribs1hvNV GLEW_GET_FUN(__glewVertexAttribs1hvNV)
+#define glVertexAttribs2hvNV GLEW_GET_FUN(__glewVertexAttribs2hvNV)
+#define glVertexAttribs3hvNV GLEW_GET_FUN(__glewVertexAttribs3hvNV)
+#define glVertexAttribs4hvNV GLEW_GET_FUN(__glewVertexAttribs4hvNV)
+#define glVertexWeighthNV GLEW_GET_FUN(__glewVertexWeighthNV)
+#define glVertexWeighthvNV GLEW_GET_FUN(__glewVertexWeighthvNV)
+
+#define GLEW_NV_half_float GLEW_GET_VAR(__GLEW_NV_half_float)
+
+#endif /* GL_NV_half_float */
+
+/* ------------------------ GL_NV_light_max_exponent ----------------------- */
+
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+
+#define GL_MAX_SHININESS_NV 0x8504
+#define GL_MAX_SPOT_EXPONENT_NV 0x8505
+
+#define GLEW_NV_light_max_exponent GLEW_GET_VAR(__GLEW_NV_light_max_exponent)
+
+#endif /* GL_NV_light_max_exponent */
+
+/* --------------------- GL_NV_multisample_filter_hint --------------------- */
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_NV_multisample_filter_hint 1
+
+#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534
+
+#define GLEW_NV_multisample_filter_hint GLEW_GET_VAR(__GLEW_NV_multisample_filter_hint)
+
+#endif /* GL_NV_multisample_filter_hint */
+
+/* ------------------------- GL_NV_occlusion_query ------------------------- */
+
+#ifndef GL_NV_occlusion_query
+#define GL_NV_occlusion_query 1
+
+#define GL_PIXEL_COUNTER_BITS_NV 0x8864
+#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865
+#define GL_PIXEL_COUNT_NV 0x8866
+#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867
+
+typedef void (GLAPIENTRY * PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLENDOCCLUSIONQUERYNVPROC) (void);
+typedef void (GLAPIENTRY * PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);
+
+#define glBeginOcclusionQueryNV GLEW_GET_FUN(__glewBeginOcclusionQueryNV)
+#define glDeleteOcclusionQueriesNV GLEW_GET_FUN(__glewDeleteOcclusionQueriesNV)
+#define glEndOcclusionQueryNV GLEW_GET_FUN(__glewEndOcclusionQueryNV)
+#define glGenOcclusionQueriesNV GLEW_GET_FUN(__glewGenOcclusionQueriesNV)
+#define glGetOcclusionQueryivNV GLEW_GET_FUN(__glewGetOcclusionQueryivNV)
+#define glGetOcclusionQueryuivNV GLEW_GET_FUN(__glewGetOcclusionQueryuivNV)
+#define glIsOcclusionQueryNV GLEW_GET_FUN(__glewIsOcclusionQueryNV)
+
+#define GLEW_NV_occlusion_query GLEW_GET_VAR(__GLEW_NV_occlusion_query)
+
+#endif /* GL_NV_occlusion_query */
+
+/* ----------------------- GL_NV_packed_depth_stencil ---------------------- */
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_NV_packed_depth_stencil 1
+
+#define GL_DEPTH_STENCIL_NV 0x84F9
+#define GL_UNSIGNED_INT_24_8_NV 0x84FA
+
+#define GLEW_NV_packed_depth_stencil GLEW_GET_VAR(__GLEW_NV_packed_depth_stencil)
+
+#endif /* GL_NV_packed_depth_stencil */
+
+/* ------------------------- GL_NV_pixel_data_range ------------------------ */
+
+#ifndef GL_NV_pixel_data_range
+#define GL_NV_pixel_data_range 1
+
+#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878
+#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879
+#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A
+#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B
+#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C
+#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D
+
+typedef void (GLAPIENTRY * PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, void* pointer);
+
+#define glFlushPixelDataRangeNV GLEW_GET_FUN(__glewFlushPixelDataRangeNV)
+#define glPixelDataRangeNV GLEW_GET_FUN(__glewPixelDataRangeNV)
+
+#define GLEW_NV_pixel_data_range GLEW_GET_VAR(__GLEW_NV_pixel_data_range)
+
+#endif /* GL_NV_pixel_data_range */
+
+/* --------------------------- GL_NV_point_sprite -------------------------- */
+
+#ifndef GL_NV_point_sprite
+#define GL_NV_point_sprite 1
+
+#define GL_POINT_SPRITE_NV 0x8861
+#define GL_COORD_REPLACE_NV 0x8862
+#define GL_POINT_SPRITE_R_MODE_NV 0x8863
+
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint* params);
+
+#define glPointParameteriNV GLEW_GET_FUN(__glewPointParameteriNV)
+#define glPointParameterivNV GLEW_GET_FUN(__glewPointParameterivNV)
+
+#define GLEW_NV_point_sprite GLEW_GET_VAR(__GLEW_NV_point_sprite)
+
+#endif /* GL_NV_point_sprite */
+
+/* ------------------------ GL_NV_primitive_restart ------------------------ */
+
+#ifndef GL_NV_primitive_restart
+#define GL_NV_primitive_restart 1
+
+#define GL_PRIMITIVE_RESTART_NV 0x8558
+#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559
+
+typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index);
+typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTNVPROC) (void);
+
+#define glPrimitiveRestartIndexNV GLEW_GET_FUN(__glewPrimitiveRestartIndexNV)
+#define glPrimitiveRestartNV GLEW_GET_FUN(__glewPrimitiveRestartNV)
+
+#define GLEW_NV_primitive_restart GLEW_GET_VAR(__GLEW_NV_primitive_restart)
+
+#endif /* GL_NV_primitive_restart */
+
+/* ------------------------ GL_NV_register_combiners ----------------------- */
+
+#ifndef GL_NV_register_combiners
+#define GL_NV_register_combiners 1
+
+#define GL_REGISTER_COMBINERS_NV 0x8522
+#define GL_VARIABLE_A_NV 0x8523
+#define GL_VARIABLE_B_NV 0x8524
+#define GL_VARIABLE_C_NV 0x8525
+#define GL_VARIABLE_D_NV 0x8526
+#define GL_VARIABLE_E_NV 0x8527
+#define GL_VARIABLE_F_NV 0x8528
+#define GL_VARIABLE_G_NV 0x8529
+#define GL_CONSTANT_COLOR0_NV 0x852A
+#define GL_CONSTANT_COLOR1_NV 0x852B
+#define GL_PRIMARY_COLOR_NV 0x852C
+#define GL_SECONDARY_COLOR_NV 0x852D
+#define GL_SPARE0_NV 0x852E
+#define GL_SPARE1_NV 0x852F
+#define GL_DISCARD_NV 0x8530
+#define GL_E_TIMES_F_NV 0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_UNSIGNED_IDENTITY_NV 0x8536
+#define GL_UNSIGNED_INVERT_NV 0x8537
+#define GL_EXPAND_NORMAL_NV 0x8538
+#define GL_EXPAND_NEGATE_NV 0x8539
+#define GL_HALF_BIAS_NORMAL_NV 0x853A
+#define GL_HALF_BIAS_NEGATE_NV 0x853B
+#define GL_SIGNED_IDENTITY_NV 0x853C
+#define GL_SIGNED_NEGATE_NV 0x853D
+#define GL_SCALE_BY_TWO_NV 0x853E
+#define GL_SCALE_BY_FOUR_NV 0x853F
+#define GL_SCALE_BY_ONE_HALF_NV 0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541
+#define GL_COMBINER_INPUT_NV 0x8542
+#define GL_COMBINER_MAPPING_NV 0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546
+#define GL_COMBINER_MUX_SUM_NV 0x8547
+#define GL_COMBINER_SCALE_NV 0x8548
+#define GL_COMBINER_BIAS_NV 0x8549
+#define GL_COMBINER_AB_OUTPUT_NV 0x854A
+#define GL_COMBINER_CD_OUTPUT_NV 0x854B
+#define GL_COMBINER_SUM_OUTPUT_NV 0x854C
+#define GL_MAX_GENERAL_COMBINERS_NV 0x854D
+#define GL_NUM_GENERAL_COMBINERS_NV 0x854E
+#define GL_COLOR_SUM_CLAMP_NV 0x854F
+#define GL_COMBINER0_NV 0x8550
+#define GL_COMBINER1_NV 0x8551
+#define GL_COMBINER2_NV 0x8552
+#define GL_COMBINER3_NV 0x8553
+#define GL_COMBINER4_NV 0x8554
+#define GL_COMBINER5_NV 0x8555
+#define GL_COMBINER6_NV 0x8556
+#define GL_COMBINER7_NV 0x8557
+
+typedef void (GLAPIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (GLAPIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint* params);
+
+#define glCombinerInputNV GLEW_GET_FUN(__glewCombinerInputNV)
+#define glCombinerOutputNV GLEW_GET_FUN(__glewCombinerOutputNV)
+#define glCombinerParameterfNV GLEW_GET_FUN(__glewCombinerParameterfNV)
+#define glCombinerParameterfvNV GLEW_GET_FUN(__glewCombinerParameterfvNV)
+#define glCombinerParameteriNV GLEW_GET_FUN(__glewCombinerParameteriNV)
+#define glCombinerParameterivNV GLEW_GET_FUN(__glewCombinerParameterivNV)
+#define glFinalCombinerInputNV GLEW_GET_FUN(__glewFinalCombinerInputNV)
+#define glGetCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetCombinerInputParameterfvNV)
+#define glGetCombinerInputParameterivNV GLEW_GET_FUN(__glewGetCombinerInputParameterivNV)
+#define glGetCombinerOutputParameterfvNV GLEW_GET_FUN(__glewGetCombinerOutputParameterfvNV)
+#define glGetCombinerOutputParameterivNV GLEW_GET_FUN(__glewGetCombinerOutputParameterivNV)
+#define glGetFinalCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterfvNV)
+#define glGetFinalCombinerInputParameterivNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterivNV)
+
+#define GLEW_NV_register_combiners GLEW_GET_VAR(__GLEW_NV_register_combiners)
+
+#endif /* GL_NV_register_combiners */
+
+/* ----------------------- GL_NV_register_combiners2 ----------------------- */
+
+#ifndef GL_NV_register_combiners2
+#define GL_NV_register_combiners2 1
+
+#define GL_PER_STAGE_CONSTANTS_NV 0x8535
+
+typedef void (GLAPIENTRY * PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat* params);
+
+#define glCombinerStageParameterfvNV GLEW_GET_FUN(__glewCombinerStageParameterfvNV)
+#define glGetCombinerStageParameterfvNV GLEW_GET_FUN(__glewGetCombinerStageParameterfvNV)
+
+#define GLEW_NV_register_combiners2 GLEW_GET_VAR(__GLEW_NV_register_combiners2)
+
+#endif /* GL_NV_register_combiners2 */
+
+/* -------------------------- GL_NV_texgen_emboss -------------------------- */
+
+#ifndef GL_NV_texgen_emboss
+#define GL_NV_texgen_emboss 1
+
+#define GL_EMBOSS_LIGHT_NV 0x855D
+#define GL_EMBOSS_CONSTANT_NV 0x855E
+#define GL_EMBOSS_MAP_NV 0x855F
+
+#define GLEW_NV_texgen_emboss GLEW_GET_VAR(__GLEW_NV_texgen_emboss)
+
+#endif /* GL_NV_texgen_emboss */
+
+/* ------------------------ GL_NV_texgen_reflection ------------------------ */
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+
+#define GL_NORMAL_MAP_NV 0x8511
+#define GL_REFLECTION_MAP_NV 0x8512
+
+#define GLEW_NV_texgen_reflection GLEW_GET_VAR(__GLEW_NV_texgen_reflection)
+
+#endif /* GL_NV_texgen_reflection */
+
+/* --------------------- GL_NV_texture_compression_vtc --------------------- */
+
+#ifndef GL_NV_texture_compression_vtc
+#define GL_NV_texture_compression_vtc 1
+
+#define GLEW_NV_texture_compression_vtc GLEW_GET_VAR(__GLEW_NV_texture_compression_vtc)
+
+#endif /* GL_NV_texture_compression_vtc */
+
+/* ----------------------- GL_NV_texture_env_combine4 ---------------------- */
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+
+#define GL_COMBINE4_NV 0x8503
+#define GL_SOURCE3_RGB_NV 0x8583
+#define GL_SOURCE3_ALPHA_NV 0x858B
+#define GL_OPERAND3_RGB_NV 0x8593
+#define GL_OPERAND3_ALPHA_NV 0x859B
+
+#define GLEW_NV_texture_env_combine4 GLEW_GET_VAR(__GLEW_NV_texture_env_combine4)
+
+#endif /* GL_NV_texture_env_combine4 */
+
+/* ---------------------- GL_NV_texture_expand_normal ---------------------- */
+
+#ifndef GL_NV_texture_expand_normal
+#define GL_NV_texture_expand_normal 1
+
+#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F
+
+#define GLEW_NV_texture_expand_normal GLEW_GET_VAR(__GLEW_NV_texture_expand_normal)
+
+#endif /* GL_NV_texture_expand_normal */
+
+/* ------------------------ GL_NV_texture_rectangle ------------------------ */
+
+#ifndef GL_NV_texture_rectangle
+#define GL_NV_texture_rectangle 1
+
+#define GL_TEXTURE_RECTANGLE_NV 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8
+
+#define GLEW_NV_texture_rectangle GLEW_GET_VAR(__GLEW_NV_texture_rectangle)
+
+#endif /* GL_NV_texture_rectangle */
+
+/* -------------------------- GL_NV_texture_shader ------------------------- */
+
+#ifndef GL_NV_texture_shader
+#define GL_NV_texture_shader 1
+
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB
+#define GL_DSDT_MAG_INTENSITY_NV 0x86DC
+#define GL_SHADER_CONSISTENT_NV 0x86DD
+#define GL_TEXTURE_SHADER_NV 0x86DE
+#define GL_SHADER_OPERATION_NV 0x86DF
+#define GL_CULL_MODES_NV 0x86E0
+#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1
+#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2
+#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3
+#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4
+#define GL_CONST_EYE_NV 0x86E5
+#define GL_PASS_THROUGH_NV 0x86E6
+#define GL_CULL_FRAGMENT_NV 0x86E7
+#define GL_OFFSET_TEXTURE_2D_NV 0x86E8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA
+#define GL_DOT_PRODUCT_NV 0x86EC
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
+#define GL_HILO_NV 0x86F4
+#define GL_DSDT_NV 0x86F5
+#define GL_DSDT_MAG_NV 0x86F6
+#define GL_DSDT_MAG_VIB_NV 0x86F7
+#define GL_HILO16_NV 0x86F8
+#define GL_SIGNED_HILO_NV 0x86F9
+#define GL_SIGNED_HILO16_NV 0x86FA
+#define GL_SIGNED_RGBA_NV 0x86FB
+#define GL_SIGNED_RGBA8_NV 0x86FC
+#define GL_SIGNED_RGB_NV 0x86FE
+#define GL_SIGNED_RGB8_NV 0x86FF
+#define GL_SIGNED_LUMINANCE_NV 0x8701
+#define GL_SIGNED_LUMINANCE8_NV 0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
+#define GL_SIGNED_ALPHA_NV 0x8705
+#define GL_SIGNED_ALPHA8_NV 0x8706
+#define GL_SIGNED_INTENSITY_NV 0x8707
+#define GL_SIGNED_INTENSITY8_NV 0x8708
+#define GL_DSDT8_NV 0x8709
+#define GL_DSDT8_MAG8_NV 0x870A
+#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+#define GL_HI_SCALE_NV 0x870E
+#define GL_LO_SCALE_NV 0x870F
+#define GL_DS_SCALE_NV 0x8710
+#define GL_DT_SCALE_NV 0x8711
+#define GL_MAGNITUDE_SCALE_NV 0x8712
+#define GL_VIBRANCE_SCALE_NV 0x8713
+#define GL_HI_BIAS_NV 0x8714
+#define GL_LO_BIAS_NV 0x8715
+#define GL_DS_BIAS_NV 0x8716
+#define GL_DT_BIAS_NV 0x8717
+#define GL_MAGNITUDE_BIAS_NV 0x8718
+#define GL_VIBRANCE_BIAS_NV 0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV 0x871A
+#define GL_TEXTURE_HI_SIZE_NV 0x871B
+#define GL_TEXTURE_LO_SIZE_NV 0x871C
+#define GL_TEXTURE_DS_SIZE_NV 0x871D
+#define GL_TEXTURE_DT_SIZE_NV 0x871E
+#define GL_TEXTURE_MAG_SIZE_NV 0x871F
+
+#define GLEW_NV_texture_shader GLEW_GET_VAR(__GLEW_NV_texture_shader)
+
+#endif /* GL_NV_texture_shader */
+
+/* ------------------------- GL_NV_texture_shader2 ------------------------- */
+
+#ifndef GL_NV_texture_shader2
+#define GL_NV_texture_shader2 1
+
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB
+#define GL_DSDT_MAG_INTENSITY_NV 0x86DC
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF
+#define GL_HILO_NV 0x86F4
+#define GL_DSDT_NV 0x86F5
+#define GL_DSDT_MAG_NV 0x86F6
+#define GL_DSDT_MAG_VIB_NV 0x86F7
+#define GL_HILO16_NV 0x86F8
+#define GL_SIGNED_HILO_NV 0x86F9
+#define GL_SIGNED_HILO16_NV 0x86FA
+#define GL_SIGNED_RGBA_NV 0x86FB
+#define GL_SIGNED_RGBA8_NV 0x86FC
+#define GL_SIGNED_RGB_NV 0x86FE
+#define GL_SIGNED_RGB8_NV 0x86FF
+#define GL_SIGNED_LUMINANCE_NV 0x8701
+#define GL_SIGNED_LUMINANCE8_NV 0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
+#define GL_SIGNED_ALPHA_NV 0x8705
+#define GL_SIGNED_ALPHA8_NV 0x8706
+#define GL_SIGNED_INTENSITY_NV 0x8707
+#define GL_SIGNED_INTENSITY8_NV 0x8708
+#define GL_DSDT8_NV 0x8709
+#define GL_DSDT8_MAG8_NV 0x870A
+#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+
+#define GLEW_NV_texture_shader2 GLEW_GET_VAR(__GLEW_NV_texture_shader2)
+
+#endif /* GL_NV_texture_shader2 */
+
+/* ------------------------- GL_NV_texture_shader3 ------------------------- */
+
+#ifndef GL_NV_texture_shader3
+#define GL_NV_texture_shader3 1
+
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
+#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854
+#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
+#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858
+#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859
+#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
+#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B
+#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C
+#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
+#define GL_HILO8_NV 0x885E
+#define GL_SIGNED_HILO8_NV 0x885F
+#define GL_FORCE_BLUE_TO_ONE_NV 0x8860
+
+#define GLEW_NV_texture_shader3 GLEW_GET_VAR(__GLEW_NV_texture_shader3)
+
+#endif /* GL_NV_texture_shader3 */
+
+/* ------------------------ GL_NV_vertex_array_range ----------------------- */
+
+#ifndef GL_NV_vertex_array_range
+#define GL_NV_vertex_array_range 1
+
+#define GL_VERTEX_ARRAY_RANGE_NV 0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E
+#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
+#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521
+
+typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, void* pointer);
+
+#define glFlushVertexArrayRangeNV GLEW_GET_FUN(__glewFlushVertexArrayRangeNV)
+#define glVertexArrayRangeNV GLEW_GET_FUN(__glewVertexArrayRangeNV)
+
+#define GLEW_NV_vertex_array_range GLEW_GET_VAR(__GLEW_NV_vertex_array_range)
+
+#endif /* GL_NV_vertex_array_range */
+
+/* ----------------------- GL_NV_vertex_array_range2 ----------------------- */
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_NV_vertex_array_range2 1
+
+#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533
+
+#define GLEW_NV_vertex_array_range2 GLEW_GET_VAR(__GLEW_NV_vertex_array_range2)
+
+#endif /* GL_NV_vertex_array_range2 */
+
+/* -------------------------- GL_NV_vertex_program ------------------------- */
+
+#ifndef GL_NV_vertex_program
+#define GL_NV_vertex_program 1
+
+#define GL_VERTEX_PROGRAM_NV 0x8620
+#define GL_VERTEX_STATE_PROGRAM_NV 0x8621
+#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623
+#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624
+#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625
+#define GL_CURRENT_ATTRIB_NV 0x8626
+#define GL_PROGRAM_LENGTH_NV 0x8627
+#define GL_PROGRAM_STRING_NV 0x8628
+#define GL_MODELVIEW_PROJECTION_NV 0x8629
+#define GL_IDENTITY_NV 0x862A
+#define GL_INVERSE_NV 0x862B
+#define GL_TRANSPOSE_NV 0x862C
+#define GL_INVERSE_TRANSPOSE_NV 0x862D
+#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
+#define GL_MAX_TRACK_MATRICES_NV 0x862F
+#define GL_MATRIX0_NV 0x8630
+#define GL_MATRIX1_NV 0x8631
+#define GL_MATRIX2_NV 0x8632
+#define GL_MATRIX3_NV 0x8633
+#define GL_MATRIX4_NV 0x8634
+#define GL_MATRIX5_NV 0x8635
+#define GL_MATRIX6_NV 0x8636
+#define GL_MATRIX7_NV 0x8637
+#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640
+#define GL_CURRENT_MATRIX_NV 0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643
+#define GL_PROGRAM_PARAMETER_NV 0x8644
+#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645
+#define GL_PROGRAM_TARGET_NV 0x8646
+#define GL_PROGRAM_RESIDENT_NV 0x8647
+#define GL_TRACK_MATRIX_NV 0x8648
+#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649
+#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A
+#define GL_PROGRAM_ERROR_POSITION_NV 0x864B
+#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650
+#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651
+#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652
+#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653
+#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654
+#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655
+#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656
+#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657
+#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658
+#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659
+#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A
+#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B
+#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C
+#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D
+#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E
+#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F
+#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660
+#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661
+#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662
+#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663
+#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664
+#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665
+#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666
+#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667
+#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668
+#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669
+#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A
+#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B
+#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C
+#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D
+#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E
+#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F
+#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670
+#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671
+#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672
+#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673
+#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674
+#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675
+#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676
+#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677
+#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678
+#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679
+#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A
+#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B
+#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C
+#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D
+#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E
+#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F
+
+typedef GLboolean (GLAPIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint* ids, GLboolean *residences);
+typedef void (GLAPIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
+typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte* program);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid** pointer);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte* program);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint num, const GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint num, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei n, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei n, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei n, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei n, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei n, const GLubyte* v);
+
+#define glAreProgramsResidentNV GLEW_GET_FUN(__glewAreProgramsResidentNV)
+#define glBindProgramNV GLEW_GET_FUN(__glewBindProgramNV)
+#define glDeleteProgramsNV GLEW_GET_FUN(__glewDeleteProgramsNV)
+#define glExecuteProgramNV GLEW_GET_FUN(__glewExecuteProgramNV)
+#define glGenProgramsNV GLEW_GET_FUN(__glewGenProgramsNV)
+#define glGetProgramParameterdvNV GLEW_GET_FUN(__glewGetProgramParameterdvNV)
+#define glGetProgramParameterfvNV GLEW_GET_FUN(__glewGetProgramParameterfvNV)
+#define glGetProgramStringNV GLEW_GET_FUN(__glewGetProgramStringNV)
+#define glGetProgramivNV GLEW_GET_FUN(__glewGetProgramivNV)
+#define glGetTrackMatrixivNV GLEW_GET_FUN(__glewGetTrackMatrixivNV)
+#define glGetVertexAttribPointervNV GLEW_GET_FUN(__glewGetVertexAttribPointervNV)
+#define glGetVertexAttribdvNV GLEW_GET_FUN(__glewGetVertexAttribdvNV)
+#define glGetVertexAttribfvNV GLEW_GET_FUN(__glewGetVertexAttribfvNV)
+#define glGetVertexAttribivNV GLEW_GET_FUN(__glewGetVertexAttribivNV)
+#define glIsProgramNV GLEW_GET_FUN(__glewIsProgramNV)
+#define glLoadProgramNV GLEW_GET_FUN(__glewLoadProgramNV)
+#define glProgramParameter4dNV GLEW_GET_FUN(__glewProgramParameter4dNV)
+#define glProgramParameter4dvNV GLEW_GET_FUN(__glewProgramParameter4dvNV)
+#define glProgramParameter4fNV GLEW_GET_FUN(__glewProgramParameter4fNV)
+#define glProgramParameter4fvNV GLEW_GET_FUN(__glewProgramParameter4fvNV)
+#define glProgramParameters4dvNV GLEW_GET_FUN(__glewProgramParameters4dvNV)
+#define glProgramParameters4fvNV GLEW_GET_FUN(__glewProgramParameters4fvNV)
+#define glRequestResidentProgramsNV GLEW_GET_FUN(__glewRequestResidentProgramsNV)
+#define glTrackMatrixNV GLEW_GET_FUN(__glewTrackMatrixNV)
+#define glVertexAttrib1dNV GLEW_GET_FUN(__glewVertexAttrib1dNV)
+#define glVertexAttrib1dvNV GLEW_GET_FUN(__glewVertexAttrib1dvNV)
+#define glVertexAttrib1fNV GLEW_GET_FUN(__glewVertexAttrib1fNV)
+#define glVertexAttrib1fvNV GLEW_GET_FUN(__glewVertexAttrib1fvNV)
+#define glVertexAttrib1sNV GLEW_GET_FUN(__glewVertexAttrib1sNV)
+#define glVertexAttrib1svNV GLEW_GET_FUN(__glewVertexAttrib1svNV)
+#define glVertexAttrib2dNV GLEW_GET_FUN(__glewVertexAttrib2dNV)
+#define glVertexAttrib2dvNV GLEW_GET_FUN(__glewVertexAttrib2dvNV)
+#define glVertexAttrib2fNV GLEW_GET_FUN(__glewVertexAttrib2fNV)
+#define glVertexAttrib2fvNV GLEW_GET_FUN(__glewVertexAttrib2fvNV)
+#define glVertexAttrib2sNV GLEW_GET_FUN(__glewVertexAttrib2sNV)
+#define glVertexAttrib2svNV GLEW_GET_FUN(__glewVertexAttrib2svNV)
+#define glVertexAttrib3dNV GLEW_GET_FUN(__glewVertexAttrib3dNV)
+#define glVertexAttrib3dvNV GLEW_GET_FUN(__glewVertexAttrib3dvNV)
+#define glVertexAttrib3fNV GLEW_GET_FUN(__glewVertexAttrib3fNV)
+#define glVertexAttrib3fvNV GLEW_GET_FUN(__glewVertexAttrib3fvNV)
+#define glVertexAttrib3sNV GLEW_GET_FUN(__glewVertexAttrib3sNV)
+#define glVertexAttrib3svNV GLEW_GET_FUN(__glewVertexAttrib3svNV)
+#define glVertexAttrib4dNV GLEW_GET_FUN(__glewVertexAttrib4dNV)
+#define glVertexAttrib4dvNV GLEW_GET_FUN(__glewVertexAttrib4dvNV)
+#define glVertexAttrib4fNV GLEW_GET_FUN(__glewVertexAttrib4fNV)
+#define glVertexAttrib4fvNV GLEW_GET_FUN(__glewVertexAttrib4fvNV)
+#define glVertexAttrib4sNV GLEW_GET_FUN(__glewVertexAttrib4sNV)
+#define glVertexAttrib4svNV GLEW_GET_FUN(__glewVertexAttrib4svNV)
+#define glVertexAttrib4ubNV GLEW_GET_FUN(__glewVertexAttrib4ubNV)
+#define glVertexAttrib4ubvNV GLEW_GET_FUN(__glewVertexAttrib4ubvNV)
+#define glVertexAttribPointerNV GLEW_GET_FUN(__glewVertexAttribPointerNV)
+#define glVertexAttribs1dvNV GLEW_GET_FUN(__glewVertexAttribs1dvNV)
+#define glVertexAttribs1fvNV GLEW_GET_FUN(__glewVertexAttribs1fvNV)
+#define glVertexAttribs1svNV GLEW_GET_FUN(__glewVertexAttribs1svNV)
+#define glVertexAttribs2dvNV GLEW_GET_FUN(__glewVertexAttribs2dvNV)
+#define glVertexAttribs2fvNV GLEW_GET_FUN(__glewVertexAttribs2fvNV)
+#define glVertexAttribs2svNV GLEW_GET_FUN(__glewVertexAttribs2svNV)
+#define glVertexAttribs3dvNV GLEW_GET_FUN(__glewVertexAttribs3dvNV)
+#define glVertexAttribs3fvNV GLEW_GET_FUN(__glewVertexAttribs3fvNV)
+#define glVertexAttribs3svNV GLEW_GET_FUN(__glewVertexAttribs3svNV)
+#define glVertexAttribs4dvNV GLEW_GET_FUN(__glewVertexAttribs4dvNV)
+#define glVertexAttribs4fvNV GLEW_GET_FUN(__glewVertexAttribs4fvNV)
+#define glVertexAttribs4svNV GLEW_GET_FUN(__glewVertexAttribs4svNV)
+#define glVertexAttribs4ubvNV GLEW_GET_FUN(__glewVertexAttribs4ubvNV)
+
+#define GLEW_NV_vertex_program GLEW_GET_VAR(__GLEW_NV_vertex_program)
+
+#endif /* GL_NV_vertex_program */
+
+/* ------------------------ GL_NV_vertex_program1_1 ------------------------ */
+
+#ifndef GL_NV_vertex_program1_1
+#define GL_NV_vertex_program1_1 1
+
+#define GLEW_NV_vertex_program1_1 GLEW_GET_VAR(__GLEW_NV_vertex_program1_1)
+
+#endif /* GL_NV_vertex_program1_1 */
+
+/* ------------------------- GL_NV_vertex_program2 ------------------------- */
+
+#ifndef GL_NV_vertex_program2
+#define GL_NV_vertex_program2 1
+
+#define GLEW_NV_vertex_program2 GLEW_GET_VAR(__GLEW_NV_vertex_program2)
+
+#endif /* GL_NV_vertex_program2 */
+
+/* ---------------------- GL_NV_vertex_program2_option --------------------- */
+
+#ifndef GL_NV_vertex_program2_option
+#define GL_NV_vertex_program2_option 1
+
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5
+
+#define GLEW_NV_vertex_program2_option GLEW_GET_VAR(__GLEW_NV_vertex_program2_option)
+
+#endif /* GL_NV_vertex_program2_option */
+
+/* ------------------------- GL_NV_vertex_program3 ------------------------- */
+
+#ifndef GL_NV_vertex_program3
+#define GL_NV_vertex_program3 1
+
+#define MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
+
+#define GLEW_NV_vertex_program3 GLEW_GET_VAR(__GLEW_NV_vertex_program3)
+
+#endif /* GL_NV_vertex_program3 */
+
+/* ---------------------------- GL_OML_interlace --------------------------- */
+
+#ifndef GL_OML_interlace
+#define GL_OML_interlace 1
+
+#define GL_INTERLACE_OML 0x8980
+#define GL_INTERLACE_READ_OML 0x8981
+
+#define GLEW_OML_interlace GLEW_GET_VAR(__GLEW_OML_interlace)
+
+#endif /* GL_OML_interlace */
+
+/* ---------------------------- GL_OML_resample ---------------------------- */
+
+#ifndef GL_OML_resample
+#define GL_OML_resample 1
+
+#define GL_PACK_RESAMPLE_OML 0x8984
+#define GL_UNPACK_RESAMPLE_OML 0x8985
+#define GL_RESAMPLE_REPLICATE_OML 0x8986
+#define GL_RESAMPLE_ZERO_FILL_OML 0x8987
+#define GL_RESAMPLE_AVERAGE_OML 0x8988
+#define GL_RESAMPLE_DECIMATE_OML 0x8989
+
+#define GLEW_OML_resample GLEW_GET_VAR(__GLEW_OML_resample)
+
+#endif /* GL_OML_resample */
+
+/* ---------------------------- GL_OML_subsample --------------------------- */
+
+#ifndef GL_OML_subsample
+#define GL_OML_subsample 1
+
+#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982
+#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983
+
+#define GLEW_OML_subsample GLEW_GET_VAR(__GLEW_OML_subsample)
+
+#endif /* GL_OML_subsample */
+
+/* --------------------------- GL_PGI_misc_hints --------------------------- */
+
+#ifndef GL_PGI_misc_hints
+#define GL_PGI_misc_hints 1
+
+#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 107000
+#define GL_CONSERVE_MEMORY_HINT_PGI 107005
+#define GL_RECLAIM_MEMORY_HINT_PGI 107006
+#define GL_NATIVE_GRAPHICS_HANDLE_PGI 107010
+#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 107011
+#define GL_NATIVE_GRAPHICS_END_HINT_PGI 107012
+#define GL_ALWAYS_FAST_HINT_PGI 107020
+#define GL_ALWAYS_SOFT_HINT_PGI 107021
+#define GL_ALLOW_DRAW_OBJ_HINT_PGI 107022
+#define GL_ALLOW_DRAW_WIN_HINT_PGI 107023
+#define GL_ALLOW_DRAW_FRG_HINT_PGI 107024
+#define GL_ALLOW_DRAW_MEM_HINT_PGI 107025
+#define GL_STRICT_DEPTHFUNC_HINT_PGI 107030
+#define GL_STRICT_LIGHTING_HINT_PGI 107031
+#define GL_STRICT_SCISSOR_HINT_PGI 107032
+#define GL_FULL_STIPPLE_HINT_PGI 107033
+#define GL_CLIP_NEAR_HINT_PGI 107040
+#define GL_CLIP_FAR_HINT_PGI 107041
+#define GL_WIDE_LINE_HINT_PGI 107042
+#define GL_BACK_NORMALS_HINT_PGI 107043
+
+#define GLEW_PGI_misc_hints GLEW_GET_VAR(__GLEW_PGI_misc_hints)
+
+#endif /* GL_PGI_misc_hints */
+
+/* -------------------------- GL_PGI_vertex_hints -------------------------- */
+
+#ifndef GL_PGI_vertex_hints
+#define GL_PGI_vertex_hints 1
+
+#define GL_VERTEX23_BIT_PGI 0x00000004
+#define GL_VERTEX4_BIT_PGI 0x00000008
+#define GL_COLOR3_BIT_PGI 0x00010000
+#define GL_COLOR4_BIT_PGI 0x00020000
+#define GL_EDGEFLAG_BIT_PGI 0x00040000
+#define GL_INDEX_BIT_PGI 0x00080000
+#define GL_MAT_AMBIENT_BIT_PGI 0x00100000
+#define GL_VERTEX_DATA_HINT_PGI 107050
+#define GL_VERTEX_CONSISTENT_HINT_PGI 107051
+#define GL_MATERIAL_SIDE_HINT_PGI 107052
+#define GL_MAX_VERTEX_HINT_PGI 107053
+#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
+#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000
+#define GL_MAT_EMISSION_BIT_PGI 0x00800000
+#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000
+#define GL_MAT_SHININESS_BIT_PGI 0x02000000
+#define GL_MAT_SPECULAR_BIT_PGI 0x04000000
+#define GL_NORMAL_BIT_PGI 0x08000000
+#define GL_TEXCOORD1_BIT_PGI 0x10000000
+#define GL_TEXCOORD2_BIT_PGI 0x20000000
+#define GL_TEXCOORD3_BIT_PGI 0x40000000
+#define GL_TEXCOORD4_BIT_PGI 0x80000000
+
+#define GLEW_PGI_vertex_hints GLEW_GET_VAR(__GLEW_PGI_vertex_hints)
+
+#endif /* GL_PGI_vertex_hints */
+
+/* ----------------------- GL_REND_screen_coordinates ---------------------- */
+
+#ifndef GL_REND_screen_coordinates
+#define GL_REND_screen_coordinates 1
+
+#define GL_SCREEN_COORDINATES_REND 0x8490
+#define GL_INVERTED_SCREEN_W_REND 0x8491
+
+#define GLEW_REND_screen_coordinates GLEW_GET_VAR(__GLEW_REND_screen_coordinates)
+
+#endif /* GL_REND_screen_coordinates */
+
+/* ------------------------------- GL_S3_s3tc ------------------------------ */
+
+#ifndef GL_S3_s3tc
+#define GL_S3_s3tc 1
+
+#define GL_RGB_S3TC 0x83A0
+#define GL_RGB4_S3TC 0x83A1
+#define GL_RGBA_S3TC 0x83A2
+#define GL_RGBA4_S3TC 0x83A3
+#define GL_RGBA_DXT5_S3TC 0x83A4
+#define GL_RGBA4_DXT5_S3TC 0x83A5
+
+#define GLEW_S3_s3tc GLEW_GET_VAR(__GLEW_S3_s3tc)
+
+#endif /* GL_S3_s3tc */
+
+/* -------------------------- GL_SGIS_color_range -------------------------- */
+
+#ifndef GL_SGIS_color_range
+#define GL_SGIS_color_range 1
+
+#define GL_EXTENDED_RANGE_SGIS 0x85A5
+#define GL_MIN_RED_SGIS 0x85A6
+#define GL_MAX_RED_SGIS 0x85A7
+#define GL_MIN_GREEN_SGIS 0x85A8
+#define GL_MAX_GREEN_SGIS 0x85A9
+#define GL_MIN_BLUE_SGIS 0x85AA
+#define GL_MAX_BLUE_SGIS 0x85AB
+#define GL_MIN_ALPHA_SGIS 0x85AC
+#define GL_MAX_ALPHA_SGIS 0x85AD
+
+#define GLEW_SGIS_color_range GLEW_GET_VAR(__GLEW_SGIS_color_range)
+
+#endif /* GL_SGIS_color_range */
+
+/* ------------------------- GL_SGIS_detail_texture ------------------------ */
+
+#ifndef GL_SGIS_detail_texture
+#define GL_SGIS_detail_texture 1
+
+typedef void (GLAPIENTRY * PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points);
+typedef void (GLAPIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat* points);
+
+#define glDetailTexFuncSGIS GLEW_GET_FUN(__glewDetailTexFuncSGIS)
+#define glGetDetailTexFuncSGIS GLEW_GET_FUN(__glewGetDetailTexFuncSGIS)
+
+#define GLEW_SGIS_detail_texture GLEW_GET_VAR(__GLEW_SGIS_detail_texture)
+
+#endif /* GL_SGIS_detail_texture */
+
+/* -------------------------- GL_SGIS_fog_function ------------------------- */
+
+#ifndef GL_SGIS_fog_function
+#define GL_SGIS_fog_function 1
+
+typedef void (GLAPIENTRY * PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat* points);
+typedef void (GLAPIENTRY * PFNGLGETFOGFUNCSGISPROC) (GLfloat* points);
+
+#define glFogFuncSGIS GLEW_GET_FUN(__glewFogFuncSGIS)
+#define glGetFogFuncSGIS GLEW_GET_FUN(__glewGetFogFuncSGIS)
+
+#define GLEW_SGIS_fog_function GLEW_GET_VAR(__GLEW_SGIS_fog_function)
+
+#endif /* GL_SGIS_fog_function */
+
+/* ------------------------ GL_SGIS_generate_mipmap ------------------------ */
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_SGIS_generate_mipmap 1
+
+#define GL_GENERATE_MIPMAP_SGIS 0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192
+
+#define GLEW_SGIS_generate_mipmap GLEW_GET_VAR(__GLEW_SGIS_generate_mipmap)
+
+#endif /* GL_SGIS_generate_mipmap */
+
+/* -------------------------- GL_SGIS_multisample -------------------------- */
+
+#ifndef GL_SGIS_multisample
+#define GL_SGIS_multisample 1
+
+#define GL_MULTISAMPLE_SGIS 0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F
+#define GL_SAMPLE_MASK_SGIS 0x80A0
+#define GL_1PASS_SGIS 0x80A1
+#define GL_2PASS_0_SGIS 0x80A2
+#define GL_2PASS_1_SGIS 0x80A3
+#define GL_4PASS_0_SGIS 0x80A4
+#define GL_4PASS_1_SGIS 0x80A5
+#define GL_4PASS_2_SGIS 0x80A6
+#define GL_4PASS_3_SGIS 0x80A7
+#define GL_SAMPLE_BUFFERS_SGIS 0x80A8
+#define GL_SAMPLES_SGIS 0x80A9
+#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA
+#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB
+#define GL_SAMPLE_PATTERN_SGIS 0x80AC
+#define GL_MULTISAMPLE_BIT_EXT 0x20000000
+
+typedef void (GLAPIENTRY * PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);
+typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);
+
+#define glSampleMaskSGIS GLEW_GET_FUN(__glewSampleMaskSGIS)
+#define glSamplePatternSGIS GLEW_GET_FUN(__glewSamplePatternSGIS)
+
+#define GLEW_SGIS_multisample GLEW_GET_VAR(__GLEW_SGIS_multisample)
+
+#endif /* GL_SGIS_multisample */
+
+/* ------------------------- GL_SGIS_pixel_texture ------------------------- */
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_SGIS_pixel_texture 1
+
+#define GLEW_SGIS_pixel_texture GLEW_GET_VAR(__GLEW_SGIS_pixel_texture)
+
+#endif /* GL_SGIS_pixel_texture */
+
+/* ------------------------ GL_SGIS_sharpen_texture ------------------------ */
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_SGIS_sharpen_texture 1
+
+typedef void (GLAPIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat* points);
+typedef void (GLAPIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points);
+
+#define glGetSharpenTexFuncSGIS GLEW_GET_FUN(__glewGetSharpenTexFuncSGIS)
+#define glSharpenTexFuncSGIS GLEW_GET_FUN(__glewSharpenTexFuncSGIS)
+
+#define GLEW_SGIS_sharpen_texture GLEW_GET_VAR(__GLEW_SGIS_sharpen_texture)
+
+#endif /* GL_SGIS_sharpen_texture */
+
+/* --------------------------- GL_SGIS_texture4D --------------------------- */
+
+#ifndef GL_SGIS_texture4D
+#define GL_SGIS_texture4D 1
+
+typedef void (GLAPIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const void* pixels);
+
+#define glTexImage4DSGIS GLEW_GET_FUN(__glewTexImage4DSGIS)
+#define glTexSubImage4DSGIS GLEW_GET_FUN(__glewTexSubImage4DSGIS)
+
+#define GLEW_SGIS_texture4D GLEW_GET_VAR(__GLEW_SGIS_texture4D)
+
+#endif /* GL_SGIS_texture4D */
+
+/* ---------------------- GL_SGIS_texture_border_clamp --------------------- */
+
+#ifndef GL_SGIS_texture_border_clamp
+#define GL_SGIS_texture_border_clamp 1
+
+#define GL_CLAMP_TO_BORDER_SGIS 0x812D
+
+#define GLEW_SGIS_texture_border_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_border_clamp)
+
+#endif /* GL_SGIS_texture_border_clamp */
+
+/* ----------------------- GL_SGIS_texture_edge_clamp ---------------------- */
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_SGIS_texture_edge_clamp 1
+
+#define GL_CLAMP_TO_EDGE_SGIS 0x812F
+
+#define GLEW_SGIS_texture_edge_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_edge_clamp)
+
+#endif /* GL_SGIS_texture_edge_clamp */
+
+/* ------------------------ GL_SGIS_texture_filter4 ------------------------ */
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_SGIS_texture_filter4 1
+
+typedef void (GLAPIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat* weights);
+typedef void (GLAPIENTRY * PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat* weights);
+
+#define glGetTexFilterFuncSGIS GLEW_GET_FUN(__glewGetTexFilterFuncSGIS)
+#define glTexFilterFuncSGIS GLEW_GET_FUN(__glewTexFilterFuncSGIS)
+
+#define GLEW_SGIS_texture_filter4 GLEW_GET_VAR(__GLEW_SGIS_texture_filter4)
+
+#endif /* GL_SGIS_texture_filter4 */
+
+/* -------------------------- GL_SGIS_texture_lod -------------------------- */
+
+#ifndef GL_SGIS_texture_lod
+#define GL_SGIS_texture_lod 1
+
+#define GL_TEXTURE_MIN_LOD_SGIS 0x813A
+#define GL_TEXTURE_MAX_LOD_SGIS 0x813B
+#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C
+#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D
+
+#define GLEW_SGIS_texture_lod GLEW_GET_VAR(__GLEW_SGIS_texture_lod)
+
+#endif /* GL_SGIS_texture_lod */
+
+/* ------------------------- GL_SGIS_texture_select ------------------------ */
+
+#ifndef GL_SGIS_texture_select
+#define GL_SGIS_texture_select 1
+
+#define GLEW_SGIS_texture_select GLEW_GET_VAR(__GLEW_SGIS_texture_select)
+
+#endif /* GL_SGIS_texture_select */
+
+/* ----------------------------- GL_SGIX_async ----------------------------- */
+
+#ifndef GL_SGIX_async
+#define GL_SGIX_async 1
+
+#define GL_ASYNC_MARKER_SGIX 0x8329
+
+typedef void (GLAPIENTRY * PFNGLASYNCMARKERSGIXPROC) (GLuint marker);
+typedef void (GLAPIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);
+typedef GLint (GLAPIENTRY * PFNGLFINISHASYNCSGIXPROC) (GLuint* markerp);
+typedef GLuint (GLAPIENTRY * PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);
+typedef GLboolean (GLAPIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);
+typedef GLint (GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint* markerp);
+
+#define glAsyncMarkerSGIX GLEW_GET_FUN(__glewAsyncMarkerSGIX)
+#define glDeleteAsyncMarkersSGIX GLEW_GET_FUN(__glewDeleteAsyncMarkersSGIX)
+#define glFinishAsyncSGIX GLEW_GET_FUN(__glewFinishAsyncSGIX)
+#define glGenAsyncMarkersSGIX GLEW_GET_FUN(__glewGenAsyncMarkersSGIX)
+#define glIsAsyncMarkerSGIX GLEW_GET_FUN(__glewIsAsyncMarkerSGIX)
+#define glPollAsyncSGIX GLEW_GET_FUN(__glewPollAsyncSGIX)
+
+#define GLEW_SGIX_async GLEW_GET_VAR(__GLEW_SGIX_async)
+
+#endif /* GL_SGIX_async */
+
+/* ------------------------ GL_SGIX_async_histogram ------------------------ */
+
+#ifndef GL_SGIX_async_histogram
+#define GL_SGIX_async_histogram 1
+
+#define GL_ASYNC_HISTOGRAM_SGIX 0x832C
+#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D
+
+#define GLEW_SGIX_async_histogram GLEW_GET_VAR(__GLEW_SGIX_async_histogram)
+
+#endif /* GL_SGIX_async_histogram */
+
+/* -------------------------- GL_SGIX_async_pixel -------------------------- */
+
+#ifndef GL_SGIX_async_pixel
+#define GL_SGIX_async_pixel 1
+
+#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C
+#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D
+#define GL_ASYNC_READ_PIXELS_SGIX 0x835E
+#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F
+#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360
+#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361
+
+#define GLEW_SGIX_async_pixel GLEW_GET_VAR(__GLEW_SGIX_async_pixel)
+
+#endif /* GL_SGIX_async_pixel */
+
+/* ----------------------- GL_SGIX_blend_alpha_minmax ---------------------- */
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_SGIX_blend_alpha_minmax 1
+
+#define GL_ALPHA_MIN_SGIX 0x8320
+#define GL_ALPHA_MAX_SGIX 0x8321
+
+#define GLEW_SGIX_blend_alpha_minmax GLEW_GET_VAR(__GLEW_SGIX_blend_alpha_minmax)
+
+#endif /* GL_SGIX_blend_alpha_minmax */
+
+/* ---------------------------- GL_SGIX_clipmap ---------------------------- */
+
+#ifndef GL_SGIX_clipmap
+#define GL_SGIX_clipmap 1
+
+#define GLEW_SGIX_clipmap GLEW_GET_VAR(__GLEW_SGIX_clipmap)
+
+#endif /* GL_SGIX_clipmap */
+
+/* ------------------------- GL_SGIX_depth_texture ------------------------- */
+
+#ifndef GL_SGIX_depth_texture
+#define GL_SGIX_depth_texture 1
+
+#define GL_DEPTH_COMPONENT16_SGIX 0x81A5
+#define GL_DEPTH_COMPONENT24_SGIX 0x81A6
+#define GL_DEPTH_COMPONENT32_SGIX 0x81A7
+
+#define GLEW_SGIX_depth_texture GLEW_GET_VAR(__GLEW_SGIX_depth_texture)
+
+#endif /* GL_SGIX_depth_texture */
+
+/* -------------------------- GL_SGIX_flush_raster ------------------------- */
+
+#ifndef GL_SGIX_flush_raster
+#define GL_SGIX_flush_raster 1
+
+typedef void (GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void);
+
+#define glFlushRasterSGIX GLEW_GET_FUN(__glewFlushRasterSGIX)
+
+#define GLEW_SGIX_flush_raster GLEW_GET_VAR(__GLEW_SGIX_flush_raster)
+
+#endif /* GL_SGIX_flush_raster */
+
+/* --------------------------- GL_SGIX_fog_offset -------------------------- */
+
+#ifndef GL_SGIX_fog_offset
+#define GL_SGIX_fog_offset 1
+
+#define GL_FOG_OFFSET_SGIX 0x8198
+#define GL_FOG_OFFSET_VALUE_SGIX 0x8199
+
+#define GLEW_SGIX_fog_offset GLEW_GET_VAR(__GLEW_SGIX_fog_offset)
+
+#endif /* GL_SGIX_fog_offset */
+
+/* -------------------------- GL_SGIX_fog_texture -------------------------- */
+
+#ifndef GL_SGIX_fog_texture
+#define GL_SGIX_fog_texture 1
+
+#define GL_TEXTURE_FOG_SGIX 0
+#define GL_FOG_PATCHY_FACTOR_SGIX 0
+#define GL_FRAGMENT_FOG_SGIX 0
+
+typedef void (GLAPIENTRY * PFNGLTEXTUREFOGSGIXPROC) (GLenum pname);
+
+#define glTextureFogSGIX GLEW_GET_FUN(__glewTextureFogSGIX)
+
+#define GLEW_SGIX_fog_texture GLEW_GET_VAR(__GLEW_SGIX_fog_texture)
+
+#endif /* GL_SGIX_fog_texture */
+
+/* ------------------- GL_SGIX_fragment_specular_lighting ------------------ */
+
+#ifndef GL_SGIX_fragment_specular_lighting
+#define GL_SGIX_fragment_specular_lighting 1
+
+typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, const GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, const GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum value, GLfloat* data);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum value, GLint* data);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* data);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* data);
+
+#define glFragmentColorMaterialSGIX GLEW_GET_FUN(__glewFragmentColorMaterialSGIX)
+#define glFragmentLightModelfSGIX GLEW_GET_FUN(__glewFragmentLightModelfSGIX)
+#define glFragmentLightModelfvSGIX GLEW_GET_FUN(__glewFragmentLightModelfvSGIX)
+#define glFragmentLightModeliSGIX GLEW_GET_FUN(__glewFragmentLightModeliSGIX)
+#define glFragmentLightModelivSGIX GLEW_GET_FUN(__glewFragmentLightModelivSGIX)
+#define glFragmentLightfSGIX GLEW_GET_FUN(__glewFragmentLightfSGIX)
+#define glFragmentLightfvSGIX GLEW_GET_FUN(__glewFragmentLightfvSGIX)
+#define glFragmentLightiSGIX GLEW_GET_FUN(__glewFragmentLightiSGIX)
+#define glFragmentLightivSGIX GLEW_GET_FUN(__glewFragmentLightivSGIX)
+#define glFragmentMaterialfSGIX GLEW_GET_FUN(__glewFragmentMaterialfSGIX)
+#define glFragmentMaterialfvSGIX GLEW_GET_FUN(__glewFragmentMaterialfvSGIX)
+#define glFragmentMaterialiSGIX GLEW_GET_FUN(__glewFragmentMaterialiSGIX)
+#define glFragmentMaterialivSGIX GLEW_GET_FUN(__glewFragmentMaterialivSGIX)
+#define glGetFragmentLightfvSGIX GLEW_GET_FUN(__glewGetFragmentLightfvSGIX)
+#define glGetFragmentLightivSGIX GLEW_GET_FUN(__glewGetFragmentLightivSGIX)
+#define glGetFragmentMaterialfvSGIX GLEW_GET_FUN(__glewGetFragmentMaterialfvSGIX)
+#define glGetFragmentMaterialivSGIX GLEW_GET_FUN(__glewGetFragmentMaterialivSGIX)
+
+#define GLEW_SGIX_fragment_specular_lighting GLEW_GET_VAR(__GLEW_SGIX_fragment_specular_lighting)
+
+#endif /* GL_SGIX_fragment_specular_lighting */
+
+/* --------------------------- GL_SGIX_framezoom --------------------------- */
+
+#ifndef GL_SGIX_framezoom
+#define GL_SGIX_framezoom 1
+
+typedef void (GLAPIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor);
+
+#define glFrameZoomSGIX GLEW_GET_FUN(__glewFrameZoomSGIX)
+
+#define GLEW_SGIX_framezoom GLEW_GET_VAR(__GLEW_SGIX_framezoom)
+
+#endif /* GL_SGIX_framezoom */
+
+/* --------------------------- GL_SGIX_interlace --------------------------- */
+
+#ifndef GL_SGIX_interlace
+#define GL_SGIX_interlace 1
+
+#define GL_INTERLACE_SGIX 0x8094
+
+#define GLEW_SGIX_interlace GLEW_GET_VAR(__GLEW_SGIX_interlace)
+
+#endif /* GL_SGIX_interlace */
+
+/* ------------------------- GL_SGIX_ir_instrument1 ------------------------ */
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_SGIX_ir_instrument1 1
+
+#define GLEW_SGIX_ir_instrument1 GLEW_GET_VAR(__GLEW_SGIX_ir_instrument1)
+
+#endif /* GL_SGIX_ir_instrument1 */
+
+/* ------------------------- GL_SGIX_list_priority ------------------------- */
+
+#ifndef GL_SGIX_list_priority
+#define GL_SGIX_list_priority 1
+
+#define GLEW_SGIX_list_priority GLEW_GET_VAR(__GLEW_SGIX_list_priority)
+
+#endif /* GL_SGIX_list_priority */
+
+/* ------------------------- GL_SGIX_pixel_texture ------------------------- */
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_SGIX_pixel_texture 1
+
+typedef void (GLAPIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);
+
+#define glPixelTexGenSGIX GLEW_GET_FUN(__glewPixelTexGenSGIX)
+
+#define GLEW_SGIX_pixel_texture GLEW_GET_VAR(__GLEW_SGIX_pixel_texture)
+
+#endif /* GL_SGIX_pixel_texture */
+
+/* ----------------------- GL_SGIX_pixel_texture_bits ---------------------- */
+
+#ifndef GL_SGIX_pixel_texture_bits
+#define GL_SGIX_pixel_texture_bits 1
+
+#define GLEW_SGIX_pixel_texture_bits GLEW_GET_VAR(__GLEW_SGIX_pixel_texture_bits)
+
+#endif /* GL_SGIX_pixel_texture_bits */
+
+/* ------------------------ GL_SGIX_reference_plane ------------------------ */
+
+#ifndef GL_SGIX_reference_plane
+#define GL_SGIX_reference_plane 1
+
+typedef void (GLAPIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble* equation);
+
+#define glReferencePlaneSGIX GLEW_GET_FUN(__glewReferencePlaneSGIX)
+
+#define GLEW_SGIX_reference_plane GLEW_GET_VAR(__GLEW_SGIX_reference_plane)
+
+#endif /* GL_SGIX_reference_plane */
+
+/* ---------------------------- GL_SGIX_resample --------------------------- */
+
+#ifndef GL_SGIX_resample
+#define GL_SGIX_resample 1
+
+#define GL_PACK_RESAMPLE_SGIX 0x842E
+#define GL_UNPACK_RESAMPLE_SGIX 0x842F
+#define GL_RESAMPLE_DECIMATE_SGIX 0x8430
+#define GL_RESAMPLE_REPLICATE_SGIX 0x8433
+#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434
+
+#define GLEW_SGIX_resample GLEW_GET_VAR(__GLEW_SGIX_resample)
+
+#endif /* GL_SGIX_resample */
+
+/* ----------------------------- GL_SGIX_shadow ---------------------------- */
+
+#ifndef GL_SGIX_shadow
+#define GL_SGIX_shadow 1
+
+#define GLEW_SGIX_shadow GLEW_GET_VAR(__GLEW_SGIX_shadow)
+
+#endif /* GL_SGIX_shadow */
+
+/* ------------------------- GL_SGIX_shadow_ambient ------------------------ */
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SGIX_shadow_ambient 1
+
+#define GL_SHADOW_AMBIENT_SGIX 0x80BF
+
+#define GLEW_SGIX_shadow_ambient GLEW_GET_VAR(__GLEW_SGIX_shadow_ambient)
+
+#endif /* GL_SGIX_shadow_ambient */
+
+/* ----------------------------- GL_SGIX_sprite ---------------------------- */
+
+#ifndef GL_SGIX_sprite
+#define GL_SGIX_sprite 1
+
+typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, GLint* params);
+
+#define glSpriteParameterfSGIX GLEW_GET_FUN(__glewSpriteParameterfSGIX)
+#define glSpriteParameterfvSGIX GLEW_GET_FUN(__glewSpriteParameterfvSGIX)
+#define glSpriteParameteriSGIX GLEW_GET_FUN(__glewSpriteParameteriSGIX)
+#define glSpriteParameterivSGIX GLEW_GET_FUN(__glewSpriteParameterivSGIX)
+
+#define GLEW_SGIX_sprite GLEW_GET_VAR(__GLEW_SGIX_sprite)
+
+#endif /* GL_SGIX_sprite */
+
+/* ----------------------- GL_SGIX_tag_sample_buffer ----------------------- */
+
+#ifndef GL_SGIX_tag_sample_buffer
+#define GL_SGIX_tag_sample_buffer 1
+
+typedef void (GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);
+
+#define glTagSampleBufferSGIX GLEW_GET_FUN(__glewTagSampleBufferSGIX)
+
+#define GLEW_SGIX_tag_sample_buffer GLEW_GET_VAR(__GLEW_SGIX_tag_sample_buffer)
+
+#endif /* GL_SGIX_tag_sample_buffer */
+
+/* ------------------------ GL_SGIX_texture_add_env ------------------------ */
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_SGIX_texture_add_env 1
+
+#define GLEW_SGIX_texture_add_env GLEW_GET_VAR(__GLEW_SGIX_texture_add_env)
+
+#endif /* GL_SGIX_texture_add_env */
+
+/* -------------------- GL_SGIX_texture_coordinate_clamp ------------------- */
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_SGIX_texture_coordinate_clamp 1
+
+#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369
+#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A
+#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B
+
+#define GLEW_SGIX_texture_coordinate_clamp GLEW_GET_VAR(__GLEW_SGIX_texture_coordinate_clamp)
+
+#endif /* GL_SGIX_texture_coordinate_clamp */
+
+/* ------------------------ GL_SGIX_texture_lod_bias ----------------------- */
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_SGIX_texture_lod_bias 1
+
+#define GLEW_SGIX_texture_lod_bias GLEW_GET_VAR(__GLEW_SGIX_texture_lod_bias)
+
+#endif /* GL_SGIX_texture_lod_bias */
+
+/* ---------------------- GL_SGIX_texture_multi_buffer --------------------- */
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_SGIX_texture_multi_buffer 1
+
+#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E
+
+#define GLEW_SGIX_texture_multi_buffer GLEW_GET_VAR(__GLEW_SGIX_texture_multi_buffer)
+
+#endif /* GL_SGIX_texture_multi_buffer */
+
+/* ------------------------- GL_SGIX_texture_range ------------------------- */
+
+#ifndef GL_SGIX_texture_range
+#define GL_SGIX_texture_range 1
+
+#define GL_RGB_SIGNED_SGIX 0x85E0
+#define GL_RGBA_SIGNED_SGIX 0x85E1
+#define GL_ALPHA_SIGNED_SGIX 0x85E2
+#define GL_LUMINANCE_SIGNED_SGIX 0x85E3
+#define GL_INTENSITY_SIGNED_SGIX 0x85E4
+#define GL_LUMINANCE_ALPHA_SIGNED_SGIX 0x85E5
+#define GL_RGB16_SIGNED_SGIX 0x85E6
+#define GL_RGBA16_SIGNED_SGIX 0x85E7
+#define GL_ALPHA16_SIGNED_SGIX 0x85E8
+#define GL_LUMINANCE16_SIGNED_SGIX 0x85E9
+#define GL_INTENSITY16_SIGNED_SGIX 0x85EA
+#define GL_LUMINANCE16_ALPHA16_SIGNED_SGIX 0x85EB
+#define GL_RGB_EXTENDED_RANGE_SGIX 0x85EC
+#define GL_RGBA_EXTENDED_RANGE_SGIX 0x85ED
+#define GL_ALPHA_EXTENDED_RANGE_SGIX 0x85EE
+#define GL_LUMINANCE_EXTENDED_RANGE_SGIX 0x85EF
+#define GL_INTENSITY_EXTENDED_RANGE_SGIX 0x85F0
+#define GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 0x85F1
+#define GL_RGB16_EXTENDED_RANGE_SGIX 0x85F2
+#define GL_RGBA16_EXTENDED_RANGE_SGIX 0x85F3
+#define GL_ALPHA16_EXTENDED_RANGE_SGIX 0x85F4
+#define GL_LUMINANCE16_EXTENDED_RANGE_SGIX 0x85F5
+#define GL_INTENSITY16_EXTENDED_RANGE_SGIX 0x85F6
+#define GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX 0x85F7
+#define GL_MIN_LUMINANCE_SGIS 0x85F8
+#define GL_MAX_LUMINANCE_SGIS 0x85F9
+#define GL_MIN_INTENSITY_SGIS 0x85FA
+#define GL_MAX_INTENSITY_SGIS 0x85FB
+
+#define GLEW_SGIX_texture_range GLEW_GET_VAR(__GLEW_SGIX_texture_range)
+
+#endif /* GL_SGIX_texture_range */
+
+/* ----------------------- GL_SGIX_texture_scale_bias ---------------------- */
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_SGIX_texture_scale_bias 1
+
+#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179
+#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A
+#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B
+#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C
+
+#define GLEW_SGIX_texture_scale_bias GLEW_GET_VAR(__GLEW_SGIX_texture_scale_bias)
+
+#endif /* GL_SGIX_texture_scale_bias */
+
+/* ------------------------- GL_SGIX_vertex_preclip ------------------------ */
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_SGIX_vertex_preclip 1
+
+#define GL_VERTEX_PRECLIP_SGIX 0x83EE
+#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF
+
+#define GLEW_SGIX_vertex_preclip GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip)
+
+#endif /* GL_SGIX_vertex_preclip */
+
+/* ---------------------- GL_SGIX_vertex_preclip_hint ---------------------- */
+
+#ifndef GL_SGIX_vertex_preclip_hint
+#define GL_SGIX_vertex_preclip_hint 1
+
+#define GL_VERTEX_PRECLIP_SGIX 0x83EE
+#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF
+
+#define GLEW_SGIX_vertex_preclip_hint GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip_hint)
+
+#endif /* GL_SGIX_vertex_preclip_hint */
+
+/* ----------------------------- GL_SGIX_ycrcb ----------------------------- */
+
+#ifndef GL_SGIX_ycrcb
+#define GL_SGIX_ycrcb 1
+
+#define GLEW_SGIX_ycrcb GLEW_GET_VAR(__GLEW_SGIX_ycrcb)
+
+#endif /* GL_SGIX_ycrcb */
+
+/* -------------------------- GL_SGI_color_matrix -------------------------- */
+
+#ifndef GL_SGI_color_matrix
+#define GL_SGI_color_matrix 1
+
+#define GL_COLOR_MATRIX_SGI 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB
+
+#define GLEW_SGI_color_matrix GLEW_GET_VAR(__GLEW_SGI_color_matrix)
+
+#endif /* GL_SGI_color_matrix */
+
+/* --------------------------- GL_SGI_color_table -------------------------- */
+
+#ifndef GL_SGI_color_table
+#define GL_SGI_color_table 1
+
+#define GL_COLOR_TABLE_SGI 0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2
+#define GL_PROXY_COLOR_TABLE_SGI 0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5
+#define GL_COLOR_TABLE_SCALE_SGI 0x80D6
+#define GL_COLOR_TABLE_BIAS_SGI 0x80D7
+#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8
+#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF
+
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* table);
+typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void* table);
+
+#define glColorTableParameterfvSGI GLEW_GET_FUN(__glewColorTableParameterfvSGI)
+#define glColorTableParameterivSGI GLEW_GET_FUN(__glewColorTableParameterivSGI)
+#define glColorTableSGI GLEW_GET_FUN(__glewColorTableSGI)
+#define glCopyColorTableSGI GLEW_GET_FUN(__glewCopyColorTableSGI)
+#define glGetColorTableParameterfvSGI GLEW_GET_FUN(__glewGetColorTableParameterfvSGI)
+#define glGetColorTableParameterivSGI GLEW_GET_FUN(__glewGetColorTableParameterivSGI)
+#define glGetColorTableSGI GLEW_GET_FUN(__glewGetColorTableSGI)
+
+#define GLEW_SGI_color_table GLEW_GET_VAR(__GLEW_SGI_color_table)
+
+#endif /* GL_SGI_color_table */
+
+/* ----------------------- GL_SGI_texture_color_table ---------------------- */
+
+#ifndef GL_SGI_texture_color_table
+#define GL_SGI_texture_color_table 1
+
+#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC
+#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD
+
+#define GLEW_SGI_texture_color_table GLEW_GET_VAR(__GLEW_SGI_texture_color_table)
+
+#endif /* GL_SGI_texture_color_table */
+
+/* ------------------------- GL_SUNX_constant_data ------------------------- */
+
+#ifndef GL_SUNX_constant_data
+#define GL_SUNX_constant_data 1
+
+#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5
+#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6
+
+typedef void (GLAPIENTRY * PFNGLFINISHTEXTURESUNXPROC) (void);
+
+#define glFinishTextureSUNX GLEW_GET_FUN(__glewFinishTextureSUNX)
+
+#define GLEW_SUNX_constant_data GLEW_GET_VAR(__GLEW_SUNX_constant_data)
+
+#endif /* GL_SUNX_constant_data */
+
+/* -------------------- GL_SUN_convolution_border_modes -------------------- */
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_SUN_convolution_border_modes 1
+
+#define GL_WRAP_BORDER_SUN 0x81D4
+
+#define GLEW_SUN_convolution_border_modes GLEW_GET_VAR(__GLEW_SUN_convolution_border_modes)
+
+#endif /* GL_SUN_convolution_border_modes */
+
+/* -------------------------- GL_SUN_global_alpha -------------------------- */
+
+#ifndef GL_SUN_global_alpha
+#define GL_SUN_global_alpha 1
+
+#define GL_GLOBAL_ALPHA_SUN 0x81D9
+#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA
+
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);
+
+#define glGlobalAlphaFactorbSUN GLEW_GET_FUN(__glewGlobalAlphaFactorbSUN)
+#define glGlobalAlphaFactordSUN GLEW_GET_FUN(__glewGlobalAlphaFactordSUN)
+#define glGlobalAlphaFactorfSUN GLEW_GET_FUN(__glewGlobalAlphaFactorfSUN)
+#define glGlobalAlphaFactoriSUN GLEW_GET_FUN(__glewGlobalAlphaFactoriSUN)
+#define glGlobalAlphaFactorsSUN GLEW_GET_FUN(__glewGlobalAlphaFactorsSUN)
+#define glGlobalAlphaFactorubSUN GLEW_GET_FUN(__glewGlobalAlphaFactorubSUN)
+#define glGlobalAlphaFactoruiSUN GLEW_GET_FUN(__glewGlobalAlphaFactoruiSUN)
+#define glGlobalAlphaFactorusSUN GLEW_GET_FUN(__glewGlobalAlphaFactorusSUN)
+
+#define GLEW_SUN_global_alpha GLEW_GET_VAR(__GLEW_SUN_global_alpha)
+
+#endif /* GL_SUN_global_alpha */
+
+/* --------------------------- GL_SUN_mesh_array --------------------------- */
+
+#ifndef GL_SUN_mesh_array
+#define GL_SUN_mesh_array 1
+
+#define GL_QUAD_MESH_SUN 0x8614
+#define GL_TRIANGLE_MESH_SUN 0x8615
+
+#define GLEW_SUN_mesh_array GLEW_GET_VAR(__GLEW_SUN_mesh_array)
+
+#endif /* GL_SUN_mesh_array */
+
+/* ------------------------ GL_SUN_read_video_pixels ----------------------- */
+
+#ifndef GL_SUN_read_video_pixels
+#define GL_SUN_read_video_pixels 1
+
+typedef void (GLAPIENTRY * PFNGLREADVIDEOPIXELSSUNPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
+
+#define glReadVideoPixelsSUN GLEW_GET_FUN(__glewReadVideoPixelsSUN)
+
+#define GLEW_SUN_read_video_pixels GLEW_GET_VAR(__GLEW_SUN_read_video_pixels)
+
+#endif /* GL_SUN_read_video_pixels */
+
+/* --------------------------- GL_SUN_slice_accum -------------------------- */
+
+#ifndef GL_SUN_slice_accum
+#define GL_SUN_slice_accum 1
+
+#define GL_SLICE_ACCUM_SUN 0x85CC
+
+#define GLEW_SUN_slice_accum GLEW_GET_VAR(__GLEW_SUN_slice_accum)
+
+#endif /* GL_SUN_slice_accum */
+
+/* -------------------------- GL_SUN_triangle_list ------------------------- */
+
+#ifndef GL_SUN_triangle_list
+#define GL_SUN_triangle_list 1
+
+#define GL_RESTART_SUN 0x01
+#define GL_REPLACE_MIDDLE_SUN 0x02
+#define GL_REPLACE_OLDEST_SUN 0x03
+#define GL_TRIANGLE_LIST_SUN 0x81D7
+#define GL_REPLACEMENT_CODE_SUN 0x81D8
+#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0
+#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1
+#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2
+#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3
+#define GL_R1UI_V3F_SUN 0x85C4
+#define GL_R1UI_C4UB_V3F_SUN 0x85C5
+#define GL_R1UI_C3F_V3F_SUN 0x85C6
+#define GL_R1UI_N3F_V3F_SUN 0x85C7
+#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8
+#define GL_R1UI_T2F_V3F_SUN 0x85C9
+#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA
+#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB
+
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte* code);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint* code);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort* code);
+
+#define glReplacementCodePointerSUN GLEW_GET_FUN(__glewReplacementCodePointerSUN)
+#define glReplacementCodeubSUN GLEW_GET_FUN(__glewReplacementCodeubSUN)
+#define glReplacementCodeubvSUN GLEW_GET_FUN(__glewReplacementCodeubvSUN)
+#define glReplacementCodeuiSUN GLEW_GET_FUN(__glewReplacementCodeuiSUN)
+#define glReplacementCodeuivSUN GLEW_GET_FUN(__glewReplacementCodeuivSUN)
+#define glReplacementCodeusSUN GLEW_GET_FUN(__glewReplacementCodeusSUN)
+#define glReplacementCodeusvSUN GLEW_GET_FUN(__glewReplacementCodeusvSUN)
+
+#define GLEW_SUN_triangle_list GLEW_GET_VAR(__GLEW_SUN_triangle_list)
+
+#endif /* GL_SUN_triangle_list */
+
+/* ----------------------------- GL_SUN_vertex ----------------------------- */
+
+#ifndef GL_SUN_vertex
+#define GL_SUN_vertex 1
+
+typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte* c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte* c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint* rc, const GLubyte *c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat* tc, const GLubyte *c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *v);
+
+#define glColor3fVertex3fSUN GLEW_GET_FUN(__glewColor3fVertex3fSUN)
+#define glColor3fVertex3fvSUN GLEW_GET_FUN(__glewColor3fVertex3fvSUN)
+#define glColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fSUN)
+#define glColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fvSUN)
+#define glColor4ubVertex2fSUN GLEW_GET_FUN(__glewColor4ubVertex2fSUN)
+#define glColor4ubVertex2fvSUN GLEW_GET_FUN(__glewColor4ubVertex2fvSUN)
+#define glColor4ubVertex3fSUN GLEW_GET_FUN(__glewColor4ubVertex3fSUN)
+#define glColor4ubVertex3fvSUN GLEW_GET_FUN(__glewColor4ubVertex3fvSUN)
+#define glNormal3fVertex3fSUN GLEW_GET_FUN(__glewNormal3fVertex3fSUN)
+#define glNormal3fVertex3fvSUN GLEW_GET_FUN(__glewNormal3fVertex3fvSUN)
+#define glReplacementCodeuiColor3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fSUN)
+#define glReplacementCodeuiColor3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fvSUN)
+#define glReplacementCodeuiColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fSUN)
+#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fvSUN)
+#define glReplacementCodeuiColor4ubVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fSUN)
+#define glReplacementCodeuiColor4ubVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fvSUN)
+#define glReplacementCodeuiNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fSUN)
+#define glReplacementCodeuiNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fvSUN)
+#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN)
+#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN)
+#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN)
+#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN)
+#define glReplacementCodeuiTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fSUN)
+#define glReplacementCodeuiTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fvSUN)
+#define glReplacementCodeuiVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fSUN)
+#define glReplacementCodeuiVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fvSUN)
+#define glTexCoord2fColor3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fSUN)
+#define glTexCoord2fColor3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fvSUN)
+#define glTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fSUN)
+#define glTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fvSUN)
+#define glTexCoord2fColor4ubVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fSUN)
+#define glTexCoord2fColor4ubVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fvSUN)
+#define glTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fSUN)
+#define glTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fvSUN)
+#define glTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fSUN)
+#define glTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fvSUN)
+#define glTexCoord4fColor4fNormal3fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fSUN)
+#define glTexCoord4fColor4fNormal3fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fvSUN)
+#define glTexCoord4fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fSUN)
+#define glTexCoord4fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fvSUN)
+
+#define GLEW_SUN_vertex GLEW_GET_VAR(__GLEW_SUN_vertex)
+
+#endif /* GL_SUN_vertex */
+
+/* -------------------------- GL_WIN_phong_shading ------------------------- */
+
+#ifndef GL_WIN_phong_shading
+#define GL_WIN_phong_shading 1
+
+#define GL_PHONG_WIN 0x80EA
+#define GL_PHONG_HINT_WIN 0x80EB
+
+#define GLEW_WIN_phong_shading GLEW_GET_VAR(__GLEW_WIN_phong_shading)
+
+#endif /* GL_WIN_phong_shading */
+
+/* -------------------------- GL_WIN_specular_fog -------------------------- */
+
+#ifndef GL_WIN_specular_fog
+#define GL_WIN_specular_fog 1
+
+#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC
+
+#define GLEW_WIN_specular_fog GLEW_GET_VAR(__GLEW_WIN_specular_fog)
+
+#endif /* GL_WIN_specular_fog */
+
+/* ---------------------------- GL_WIN_swap_hint --------------------------- */
+
+#ifndef GL_WIN_swap_hint
+#define GL_WIN_swap_hint 1
+
+typedef void (GLAPIENTRY * PFNGLADDSWAPHINTRECTWINPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+
+#define glAddSwapHintRectWIN GLEW_GET_FUN(__glewAddSwapHintRectWIN)
+
+#define GLEW_WIN_swap_hint GLEW_GET_VAR(__GLEW_WIN_swap_hint)
+
+#endif /* GL_WIN_swap_hint */
+
+/* ------------------------------------------------------------------------- */
+
+#if defined(GLEW_MX) && defined(_WIN32)
+#define GLEW_FUN_EXPORT
+#else
+#define GLEW_FUN_EXPORT GLEWAPI
+#endif /* GLEW_MX */
+
+#if defined(GLEW_MX)
+#define GLEW_VAR_EXPORT
+#else
+#define GLEW_VAR_EXPORT GLEWAPI
+#endif /* GLEW_MX */
+
+#if defined(GLEW_MX) && defined(_WIN32)
+struct GLEWContextStruct
+{
+#endif /* GLEW_MX */
+
+GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D;
+GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements;
+GLEW_FUN_EXPORT PFNGLTEXIMAGE3DPROC __glewTexImage3D;
+GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D;
+
+GLEW_FUN_EXPORT PFNGLACTIVETEXTUREPROC __glewActiveTexture;
+GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D;
+GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage;
+GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd;
+GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf;
+GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd;
+GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv;
+GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage;
+
+GLEW_FUN_EXPORT PFNGLBLENDCOLORPROC __glewBlendColor;
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONPROC __glewBlendEquation;
+GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate;
+GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer;
+GLEW_FUN_EXPORT PFNGLFOGCOORDDPROC __glewFogCoordd;
+GLEW_FUN_EXPORT PFNGLFOGCOORDDVPROC __glewFogCoorddv;
+GLEW_FUN_EXPORT PFNGLFOGCOORDFPROC __glewFogCoordf;
+GLEW_FUN_EXPORT PFNGLFOGCOORDFVPROC __glewFogCoordfv;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFPROC __glewPointParameterf;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DPROC __glewWindowPos2d;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FPROC __glewWindowPos2f;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IPROC __glewWindowPos2i;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SPROC __glewWindowPos2s;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DPROC __glewWindowPos3d;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FPROC __glewWindowPos3f;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IPROC __glewWindowPos3i;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SPROC __glewWindowPos3s;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv;
+
+GLEW_FUN_EXPORT PFNGLBEGINQUERYPROC __glewBeginQuery;
+GLEW_FUN_EXPORT PFNGLBINDBUFFERPROC __glewBindBuffer;
+GLEW_FUN_EXPORT PFNGLBUFFERDATAPROC __glewBufferData;
+GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAPROC __glewBufferSubData;
+GLEW_FUN_EXPORT PFNGLDELETEBUFFERSPROC __glewDeleteBuffers;
+GLEW_FUN_EXPORT PFNGLDELETEQUERIESPROC __glewDeleteQueries;
+GLEW_FUN_EXPORT PFNGLENDQUERYPROC __glewEndQuery;
+GLEW_FUN_EXPORT PFNGLGENBUFFERSPROC __glewGenBuffers;
+GLEW_FUN_EXPORT PFNGLGENQUERIESPROC __glewGenQueries;
+GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv;
+GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv;
+GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData;
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv;
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv;
+GLEW_FUN_EXPORT PFNGLGETQUERYIVPROC __glewGetQueryiv;
+GLEW_FUN_EXPORT PFNGLISBUFFERPROC __glewIsBuffer;
+GLEW_FUN_EXPORT PFNGLISQUERYPROC __glewIsQuery;
+GLEW_FUN_EXPORT PFNGLMAPBUFFERPROC __glewMapBuffer;
+GLEW_FUN_EXPORT PFNGLUNMAPBUFFERPROC __glewUnmapBuffer;
+
+GLEW_FUN_EXPORT PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX;
+
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE;
+GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE;
+GLEW_FUN_EXPORT PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE;
+
+GLEW_FUN_EXPORT PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE;
+GLEW_FUN_EXPORT PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE;
+GLEW_FUN_EXPORT PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE;
+GLEW_FUN_EXPORT PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE;
+GLEW_FUN_EXPORT PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE;
+GLEW_FUN_EXPORT PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE;
+GLEW_FUN_EXPORT PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE;
+GLEW_FUN_EXPORT PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE;
+
+GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE;
+GLEW_FUN_EXPORT PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE;
+
+GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE;
+GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE;
+GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE;
+GLEW_FUN_EXPORT PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE;
+
+GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE;
+
+GLEW_FUN_EXPORT PFNGLCLAMPCOLORARBPROC __glewClampColorARB;
+
+GLEW_FUN_EXPORT PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB;
+
+GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEPROC __glewColorSubTable;
+GLEW_FUN_EXPORT PFNGLCOLORTABLEPROC __glewColorTable;
+GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv;
+GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv;
+GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable;
+GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable;
+GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D;
+GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPROC __glewGetColorTable;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv;
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPROC __glewGetHistogram;
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv;
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv;
+GLEW_FUN_EXPORT PFNGLGETMINMAXPROC __glewGetMinmax;
+GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv;
+GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv;
+GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter;
+GLEW_FUN_EXPORT PFNGLHISTOGRAMPROC __glewHistogram;
+GLEW_FUN_EXPORT PFNGLMINMAXPROC __glewMinmax;
+GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMPROC __glewResetHistogram;
+GLEW_FUN_EXPORT PFNGLRESETMINMAXPROC __glewResetMinmax;
+GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D;
+
+GLEW_FUN_EXPORT PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB;
+GLEW_FUN_EXPORT PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB;
+GLEW_FUN_EXPORT PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB;
+GLEW_FUN_EXPORT PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB;
+GLEW_FUN_EXPORT PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB;
+
+GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB;
+
+GLEW_FUN_EXPORT PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB;
+GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB;
+
+GLEW_FUN_EXPORT PFNGLBEGINQUERYARBPROC __glewBeginQueryARB;
+GLEW_FUN_EXPORT PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB;
+GLEW_FUN_EXPORT PFNGLENDQUERYARBPROC __glewEndQueryARB;
+GLEW_FUN_EXPORT PFNGLGENQUERIESARBPROC __glewGenQueriesARB;
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB;
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB;
+GLEW_FUN_EXPORT PFNGLGETQUERYIVARBPROC __glewGetQueryivARB;
+GLEW_FUN_EXPORT PFNGLISQUERYARBPROC __glewIsQueryARB;
+
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB;
+
+GLEW_FUN_EXPORT PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB;
+GLEW_FUN_EXPORT PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB;
+GLEW_FUN_EXPORT PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB;
+GLEW_FUN_EXPORT PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB;
+GLEW_FUN_EXPORT PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB;
+GLEW_FUN_EXPORT PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB;
+GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB;
+GLEW_FUN_EXPORT PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB;
+GLEW_FUN_EXPORT PFNGLGETHANDLEARBPROC __glewGetHandleARB;
+GLEW_FUN_EXPORT PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB;
+GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB;
+GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB;
+GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB;
+GLEW_FUN_EXPORT PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB;
+GLEW_FUN_EXPORT PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM1FARBPROC __glewUniform1fARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM1IARBPROC __glewUniform1iARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM2FARBPROC __glewUniform2fARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM2IARBPROC __glewUniform2iARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM3FARBPROC __glewUniform3fARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM3IARBPROC __glewUniform3iARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM4FARBPROC __glewUniform4fARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM4IARBPROC __glewUniform4iARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB;
+GLEW_FUN_EXPORT PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB;
+GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB;
+
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB;
+GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB;
+
+GLEW_FUN_EXPORT PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTBVARBPROC __glewWeightbvARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTDVARBPROC __glewWeightdvARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTFVARBPROC __glewWeightfvARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTIVARBPROC __glewWeightivARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTSVARBPROC __glewWeightsvARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTUBVARBPROC __glewWeightubvARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTUIVARBPROC __glewWeightuivARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTUSVARBPROC __glewWeightusvARB;
+
+GLEW_FUN_EXPORT PFNGLBINDBUFFERARBPROC __glewBindBufferARB;
+GLEW_FUN_EXPORT PFNGLBUFFERDATAARBPROC __glewBufferDataARB;
+GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB;
+GLEW_FUN_EXPORT PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB;
+GLEW_FUN_EXPORT PFNGLGENBUFFERSARBPROC __glewGenBuffersARB;
+GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB;
+GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB;
+GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB;
+GLEW_FUN_EXPORT PFNGLISBUFFERARBPROC __glewIsBufferARB;
+GLEW_FUN_EXPORT PFNGLMAPBUFFERARBPROC __glewMapBufferARB;
+GLEW_FUN_EXPORT PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB;
+
+GLEW_FUN_EXPORT PFNGLBINDPROGRAMARBPROC __glewBindProgramARB;
+GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB;
+GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB;
+GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB;
+GLEW_FUN_EXPORT PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB;
+GLEW_FUN_EXPORT PFNGLISPROGRAMARBPROC __glewIsProgramARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB;
+
+GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB;
+GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB;
+GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB;
+
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB;
+
+GLEW_FUN_EXPORT PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI;
+
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI;
+GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI;
+GLEW_FUN_EXPORT PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI;
+
+GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI;
+GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI;
+GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI;
+GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI;
+
+GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI;
+GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI;
+GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI;
+GLEW_FUN_EXPORT PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI;
+GLEW_FUN_EXPORT PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI;
+GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI;
+GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI;
+GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI;
+GLEW_FUN_EXPORT PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI;
+GLEW_FUN_EXPORT PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI;
+GLEW_FUN_EXPORT PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI;
+GLEW_FUN_EXPORT PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI;
+GLEW_FUN_EXPORT PFNGLSAMPLEMAPATIPROC __glewSampleMapATI;
+GLEW_FUN_EXPORT PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI;
+
+GLEW_FUN_EXPORT PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI;
+GLEW_FUN_EXPORT PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI;
+
+GLEW_FUN_EXPORT PFNGLPNTRIANGLESFATIPROC __glPNTrianglewesfATI;
+GLEW_FUN_EXPORT PFNGLPNTRIANGLESIATIPROC __glPNTrianglewesiATI;
+
+GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI;
+GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI;
+
+GLEW_FUN_EXPORT PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI;
+GLEW_FUN_EXPORT PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI;
+GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI;
+GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI;
+GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI;
+GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI;
+GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI;
+GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI;
+GLEW_FUN_EXPORT PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI;
+GLEW_FUN_EXPORT PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI;
+GLEW_FUN_EXPORT PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI;
+GLEW_FUN_EXPORT PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI;
+
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI;
+
+GLEW_FUN_EXPORT PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI;
+GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI;
+GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI;
+
+GLEW_FUN_EXPORT PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT;
+
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT;
+
+GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT;
+
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT;
+
+GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT;
+GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT;
+
+GLEW_FUN_EXPORT PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT;
+GLEW_FUN_EXPORT PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT;
+
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT;
+GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT;
+GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT;
+
+GLEW_FUN_EXPORT PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT;
+GLEW_FUN_EXPORT PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT;
+
+GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT;
+
+GLEW_FUN_EXPORT PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT;
+GLEW_FUN_EXPORT PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT;
+
+GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT;
+
+GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT;
+
+GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT;
+GLEW_FUN_EXPORT PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT;
+GLEW_FUN_EXPORT PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT;
+GLEW_FUN_EXPORT PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT;
+GLEW_FUN_EXPORT PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT;
+
+GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT;
+GLEW_FUN_EXPORT PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT;
+
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT;
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT;
+GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT;
+GLEW_FUN_EXPORT PFNGLHISTOGRAMEXTPROC __glewHistogramEXT;
+GLEW_FUN_EXPORT PFNGLMINMAXEXTPROC __glewMinmaxEXT;
+GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT;
+GLEW_FUN_EXPORT PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT;
+
+GLEW_FUN_EXPORT PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT;
+
+GLEW_FUN_EXPORT PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT;
+
+GLEW_FUN_EXPORT PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT;
+GLEW_FUN_EXPORT PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT;
+
+GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT;
+
+GLEW_FUN_EXPORT PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT;
+GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT;
+
+GLEW_FUN_EXPORT PFNGLCOLORTABLEEXTPROC __glewColorTableEXT;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT;
+
+GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT;
+GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT;
+GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT;
+GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT;
+
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT;
+
+GLEW_FUN_EXPORT PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT;
+
+GLEW_FUN_EXPORT PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT;
+GLEW_FUN_EXPORT PFNGLENDSCENEEXTPROC __glewEndSceneEXT;
+
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT;
+
+GLEW_FUN_EXPORT PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT;
+
+GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT;
+GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT;
+GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT;
+
+GLEW_FUN_EXPORT PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT;
+
+GLEW_FUN_EXPORT PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT;
+GLEW_FUN_EXPORT PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT;
+GLEW_FUN_EXPORT PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT;
+GLEW_FUN_EXPORT PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT;
+GLEW_FUN_EXPORT PFNGLISTEXTUREEXTPROC __glewIsTextureEXT;
+GLEW_FUN_EXPORT PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT;
+
+GLEW_FUN_EXPORT PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT;
+
+GLEW_FUN_EXPORT PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT;
+GLEW_FUN_EXPORT PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT;
+GLEW_FUN_EXPORT PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT;
+GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT;
+GLEW_FUN_EXPORT PFNGLGETPOINTERVEXTPROC __glewGetPointervEXT;
+GLEW_FUN_EXPORT PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT;
+GLEW_FUN_EXPORT PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT;
+GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT;
+
+GLEW_FUN_EXPORT PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT;
+GLEW_FUN_EXPORT PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT;
+GLEW_FUN_EXPORT PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT;
+GLEW_FUN_EXPORT PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT;
+GLEW_FUN_EXPORT PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT;
+GLEW_FUN_EXPORT PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT;
+GLEW_FUN_EXPORT PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT;
+GLEW_FUN_EXPORT PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT;
+GLEW_FUN_EXPORT PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT;
+GLEW_FUN_EXPORT PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT;
+GLEW_FUN_EXPORT PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT;
+GLEW_FUN_EXPORT PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT;
+GLEW_FUN_EXPORT PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT;
+GLEW_FUN_EXPORT PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT;
+GLEW_FUN_EXPORT PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT;
+GLEW_FUN_EXPORT PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT;
+GLEW_FUN_EXPORT PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT;
+GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT;
+GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT;
+GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT;
+GLEW_FUN_EXPORT PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT;
+GLEW_FUN_EXPORT PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT;
+GLEW_FUN_EXPORT PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT;
+GLEW_FUN_EXPORT PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT;
+GLEW_FUN_EXPORT PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT;
+GLEW_FUN_EXPORT PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT;
+GLEW_FUN_EXPORT PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT;
+GLEW_FUN_EXPORT PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT;
+GLEW_FUN_EXPORT PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT;
+GLEW_FUN_EXPORT PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT;
+GLEW_FUN_EXPORT PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT;
+GLEW_FUN_EXPORT PFNGLSWIZZLEEXTPROC __glewSwizzleEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTBVEXTPROC __glewVariantbvEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTDVEXTPROC __glewVariantdvEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTFVEXTPROC __glewVariantfvEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTIVEXTPROC __glewVariantivEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTSVEXTPROC __glewVariantsvEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT;
+GLEW_FUN_EXPORT PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT;
+
+GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT;
+
+GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP;
+GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP;
+GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP;
+GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP;
+GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP;
+GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP;
+
+GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM;
+GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM;
+
+GLEW_FUN_EXPORT PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM;
+GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM;
+GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM;
+GLEW_FUN_EXPORT PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM;
+GLEW_FUN_EXPORT PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM;
+GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM;
+GLEW_FUN_EXPORT PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM;
+
+GLEW_FUN_EXPORT PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL;
+GLEW_FUN_EXPORT PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL;
+GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL;
+GLEW_FUN_EXPORT PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL;
+
+GLEW_FUN_EXPORT PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL;
+GLEW_FUN_EXPORT PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL;
+
+GLEW_FUN_EXPORT PFNGLBUFFERREGIONENABLEDEXTPROC __glewBufferRegionEnabledEXT;
+GLEW_FUN_EXPORT PFNGLDELETEBUFFERREGIONEXTPROC __glewDeleteBufferRegionEXT;
+GLEW_FUN_EXPORT PFNGLDRAWBUFFERREGIONEXTPROC __glewDrawBufferRegionEXT;
+GLEW_FUN_EXPORT PFNGLNEWBUFFERREGIONEXTPROC __glewNewBufferRegionEXT;
+GLEW_FUN_EXPORT PFNGLREADBUFFERREGIONEXTPROC __glewReadBufferRegionEXT;
+
+GLEW_FUN_EXPORT PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA;
+
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA;
+
+GLEW_FUN_EXPORT PFNGLEVALMAPSNVPROC __glewEvalMapsNV;
+GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV;
+GLEW_FUN_EXPORT PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV;
+GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV;
+GLEW_FUN_EXPORT PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV;
+GLEW_FUN_EXPORT PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV;
+GLEW_FUN_EXPORT PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV;
+
+GLEW_FUN_EXPORT PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV;
+GLEW_FUN_EXPORT PFNGLFINISHFENCENVPROC __glewFinishFenceNV;
+GLEW_FUN_EXPORT PFNGLGENFENCESNVPROC __glewGenFencesNV;
+GLEW_FUN_EXPORT PFNGLGETFENCEIVNVPROC __glewGetFenceivNV;
+GLEW_FUN_EXPORT PFNGLISFENCENVPROC __glewIsFenceNV;
+GLEW_FUN_EXPORT PFNGLSETFENCENVPROC __glewSetFenceNV;
+GLEW_FUN_EXPORT PFNGLTESTFENCENVPROC __glewTestFenceNV;
+
+GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV;
+
+GLEW_FUN_EXPORT PFNGLCOLOR3HNVPROC __glewColor3hNV;
+GLEW_FUN_EXPORT PFNGLCOLOR3HVNVPROC __glewColor3hvNV;
+GLEW_FUN_EXPORT PFNGLCOLOR4HNVPROC __glewColor4hNV;
+GLEW_FUN_EXPORT PFNGLCOLOR4HVNVPROC __glewColor4hvNV;
+GLEW_FUN_EXPORT PFNGLFOGCOORDHNVPROC __glewFogCoordhNV;
+GLEW_FUN_EXPORT PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV;
+GLEW_FUN_EXPORT PFNGLNORMAL3HNVPROC __glewNormal3hNV;
+GLEW_FUN_EXPORT PFNGLNORMAL3HVNVPROC __glewNormal3hvNV;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEX2HNVPROC __glewVertex2hNV;
+GLEW_FUN_EXPORT PFNGLVERTEX2HVNVPROC __glewVertex2hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEX3HNVPROC __glewVertex3hNV;
+GLEW_FUN_EXPORT PFNGLVERTEX3HVNVPROC __glewVertex3hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEX4HNVPROC __glewVertex4hNV;
+GLEW_FUN_EXPORT PFNGLVERTEX4HVNVPROC __glewVertex4hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV;
+GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV;
+
+GLEW_FUN_EXPORT PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV;
+GLEW_FUN_EXPORT PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV;
+GLEW_FUN_EXPORT PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV;
+GLEW_FUN_EXPORT PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV;
+GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV;
+GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV;
+GLEW_FUN_EXPORT PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV;
+
+GLEW_FUN_EXPORT PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV;
+GLEW_FUN_EXPORT PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV;
+
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV;
+
+GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV;
+GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV;
+
+GLEW_FUN_EXPORT PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV;
+GLEW_FUN_EXPORT PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV;
+GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV;
+GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV;
+GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV;
+GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV;
+GLEW_FUN_EXPORT PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV;
+GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV;
+GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV;
+GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV;
+
+GLEW_FUN_EXPORT PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV;
+
+GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV;
+
+GLEW_FUN_EXPORT PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV;
+GLEW_FUN_EXPORT PFNGLBINDPROGRAMNVPROC __glewBindProgramNV;
+GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV;
+GLEW_FUN_EXPORT PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV;
+GLEW_FUN_EXPORT PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV;
+GLEW_FUN_EXPORT PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV;
+GLEW_FUN_EXPORT PFNGLISPROGRAMNVPROC __glewIsProgramNV;
+GLEW_FUN_EXPORT PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV;
+GLEW_FUN_EXPORT PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV;
+GLEW_FUN_EXPORT PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV;
+
+GLEW_FUN_EXPORT PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS;
+GLEW_FUN_EXPORT PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS;
+
+GLEW_FUN_EXPORT PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS;
+GLEW_FUN_EXPORT PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS;
+
+GLEW_FUN_EXPORT PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS;
+GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS;
+
+GLEW_FUN_EXPORT PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS;
+GLEW_FUN_EXPORT PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS;
+
+GLEW_FUN_EXPORT PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS;
+GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS;
+
+GLEW_FUN_EXPORT PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS;
+GLEW_FUN_EXPORT PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS;
+
+GLEW_FUN_EXPORT PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX;
+GLEW_FUN_EXPORT PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX;
+GLEW_FUN_EXPORT PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX;
+GLEW_FUN_EXPORT PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX;
+GLEW_FUN_EXPORT PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX;
+GLEW_FUN_EXPORT PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX;
+
+GLEW_FUN_EXPORT PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX;
+
+GLEW_FUN_EXPORT PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX;
+
+GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX;
+
+GLEW_FUN_EXPORT PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX;
+
+GLEW_FUN_EXPORT PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX;
+
+GLEW_FUN_EXPORT PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX;
+
+GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX;
+GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX;
+GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX;
+GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX;
+
+GLEW_FUN_EXPORT PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX;
+
+GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI;
+GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI;
+GLEW_FUN_EXPORT PFNGLCOLORTABLESGIPROC __glewColorTableSGI;
+GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI;
+
+GLEW_FUN_EXPORT PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX;
+
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN;
+
+GLEW_FUN_EXPORT PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN;
+
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN;
+
+GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN;
+
+GLEW_FUN_EXPORT PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN;
+
+#if defined(GLEW_MX) && !defined(_WIN32)
+struct GLEWContextStruct
+{
+#endif /* GLEW_MX */
+
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_3;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_4;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_5;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_0;
+GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_tbuffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_texture_compression_FXT1;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_client_storage;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_element_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_fence;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_float_pixels;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_specular_vector;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_transform_hint;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_ycbcr_422;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_color_buffer_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program_shadow;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_pixel;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_imaging;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_matrix_palette;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multitexture;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_occlusion_query;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_parameters;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_sprite;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_objects;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_100;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow_ambient;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_border_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_cube_map;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_add;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_combine;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_crossbar;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_dot3;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_mirrored_repeat;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_non_power_of_two;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rectangle;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transpose_matrix;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_blend;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_buffer_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_program;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_window_pos;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_point_sprites;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_combine3;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_route;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_vertex_shader_output_point_size;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_draw_buffers;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_element_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_envmap_bumpmap;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_fragment_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_map_object_buffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_pn_triangles;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_separate_stencil;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_text_fragment_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_compression_3dc;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_env_combine3;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_mirror_once;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_array_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_attrib_array_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_streams;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_422_pixels;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_Cg_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_abgr;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bgra;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_color;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_equation_separate;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_func_separate;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_logic_op;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_minmax;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_subtract;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_clip_volume_hint;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cmyka;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_color_subtable;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_compiled_vertex_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_convolution;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_coordinate_frame;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_copy_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cull_vertex;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_depth_bounds_test;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_range_elements;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fog_coord;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fragment_lighting;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_histogram;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_array_formats;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_func;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_material;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_light_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_misc_attribute;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multi_draw_arrays;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_pixels;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_paletted_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_buffer_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform_color_table;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_point_parameters;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_polygon_offset;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_rescale_normal;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_scene_marker;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_secondary_color;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_specular_color;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shadow_funcs;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shared_texture_palette;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_two_side;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_wrap;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_subtexture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture3D;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_dxt1;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_s3tc;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_cube_map;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_edge_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_add;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_combine;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_dot3;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_filter_anisotropic;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_lod_bias;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_mirror_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_perturb_normal;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_rectangle;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_weighting;
+GLEW_VAR_EXPORT GLboolean __GLEW_HP_convolution_border_modes;
+GLEW_VAR_EXPORT GLboolean __GLEW_HP_image_transform;
+GLEW_VAR_EXPORT GLboolean __GLEW_HP_occlusion_test;
+GLEW_VAR_EXPORT GLboolean __GLEW_HP_texture_lighting;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_cull_vertex;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_multimode_draw_arrays;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_rasterpos_clip;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_static_data;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_texture_mirrored_repeat;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_vertex_array_lists;
+GLEW_VAR_EXPORT GLboolean __GLEW_INGR_color_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_INGR_interlace_read;
+GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_parallel_arrays;
+GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_texture_scissor;
+GLEW_VAR_EXPORT GLboolean __GLEW_KTX_buffer_region;
+GLEW_VAR_EXPORT GLboolean __GLEW_MESA_pack_invert;
+GLEW_VAR_EXPORT GLboolean __GLEW_MESA_resize_buffers;
+GLEW_VAR_EXPORT GLboolean __GLEW_MESA_window_pos;
+GLEW_VAR_EXPORT GLboolean __GLEW_MESA_ycbcr_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_square;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_depth_to_color;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_evaluators;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_fence;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_float_buffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_fog_distance;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program_option;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_half_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_light_max_exponent;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_filter_hint;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_occlusion_query;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_packed_depth_stencil;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_pixel_data_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_point_sprite;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_primitive_restart;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_emboss;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_reflection;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_compression_vtc;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_env_combine4;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_expand_normal;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_rectangle;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader3;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program1_1;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2_option;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program3;
+GLEW_VAR_EXPORT GLboolean __GLEW_OML_interlace;
+GLEW_VAR_EXPORT GLboolean __GLEW_OML_resample;
+GLEW_VAR_EXPORT GLboolean __GLEW_OML_subsample;
+GLEW_VAR_EXPORT GLboolean __GLEW_PGI_misc_hints;
+GLEW_VAR_EXPORT GLboolean __GLEW_PGI_vertex_hints;
+GLEW_VAR_EXPORT GLboolean __GLEW_REND_screen_coordinates;
+GLEW_VAR_EXPORT GLboolean __GLEW_S3_s3tc;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_color_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_detail_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_fog_function;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_generate_mipmap;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_pixel_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_sharpen_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture4D;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_border_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_edge_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_filter4;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_lod;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_select;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_histogram;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_pixel;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_blend_alpha_minmax;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_clipmap;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_depth_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_flush_raster;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_offset;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fragment_specular_lighting;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_framezoom;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_interlace;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ir_instrument1;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_list_priority;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture_bits;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_reference_plane;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_resample;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow_ambient;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_sprite;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_tag_sample_buffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_add_env;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_coordinate_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_lod_bias;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_multi_buffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_scale_bias;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip_hint;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ycrcb;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_matrix;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_table;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGI_texture_color_table;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUNX_constant_data;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_convolution_border_modes;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_global_alpha;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_mesh_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_read_video_pixels;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_slice_accum;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_triangle_list;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_vertex;
+GLEW_VAR_EXPORT GLboolean __GLEW_WIN_phong_shading;
+GLEW_VAR_EXPORT GLboolean __GLEW_WIN_specular_fog;
+GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint;
+
+#ifdef GLEW_MX
+}; /* GLEWContextStruct */
+#endif /* GLEW_MX */
+
+/* ------------------------------------------------------------------------- */
+
+/* error codes */
+#define GLEW_OK 0
+#define GLEW_NO_ERROR 0
+#define GLEW_ERROR_NO_GL_VERSION 1  /* missing GL version */
+#define GLEW_ERROR_GL_VERSION_10_ONLY 2  /* GL 1.1 and up are not supported */
+#define GLEW_ERROR_GLX_VERSION_11_ONLY 3  /* GLX 1.2 and up are not supported */
+
+/* string codes */
+#define GLEW_VERSION 1
+
+/* API */
+#ifdef GLEW_MX
+
+typedef struct GLEWContextStruct GLEWContext;
+GLEWAPI GLenum glewContextInit (GLEWContext* ctx);
+
+#ifdef _WIN32
+#  define GLEW_GET_VAR(x) glewGetContext()->x
+#  define GLEW_GET_FUN(x) glewGetContext()->x
+#else
+#  define GLEW_GET_VAR(x) glewGetContext()->x
+#  define GLEW_GET_FUN(x) x
+#endif
+
+#else /* GLEW_MX */
+
+GLEWAPI GLenum glewInit ();
+
+#define GLEW_GET_VAR(x) x
+#define GLEW_GET_FUN(x) x
+
+#endif /* GLEW_MX */
+
+GLEWAPI GLboolean glewExperimental;
+GLEWAPI GLboolean glewGetExtension (const char* name);
+GLEWAPI const GLubyte* glewGetErrorString (GLenum error);
+GLEWAPI const GLubyte* glewGetString (GLenum name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef GLEW_APIENTRY_DEFINED
+#undef GLEW_APIENTRY_DEFINED
+#undef APIENTRY
+#undef GLAPIENTRY
+#endif
+
+#ifdef GLEW_CALLBACK_DEFINED
+#undef GLEW_CALLBACK_DEFINED
+#undef CALLBACK
+#endif
+
+#ifdef GLEW_WINGDIAPI_DEFINED
+#undef GLEW_WINGDIAPI_DEFINED
+#undef WINGDIAPI
+#endif
+
+#undef GLAPI
+/* #undef GLEWAPI */
+
+#endif /* __glew_h__ */
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/wglew.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/wglew.h	(revision 10)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/wglew.h	(revision 10)
@@ -0,0 +1,922 @@
+/*
+** The OpenGL Extension Wrangler Library
+** Copyright (C) 2004, 2003, 2002, Milan Ikits <milan ikits[at]ieee org>
+** Copyright (C) 2004, 2003, 2002, Marcelo E. Magallon <mmagallo[at]debian org>
+** Copyright (C) 2002, Lev Povalahev
+** All rights reserved.
+** 
+** Redistribution and use in source and binary forms, with or without 
+** modification, are permitted provided that the following conditions are met:
+** 
+** * Redistributions of source code must retain the above copyright notice, 
+**   this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright notice, 
+**   this list of conditions and the following disclaimer in the documentation 
+**   and/or other materials provided with the distribution.
+** * The name of the author may be used to endorse or promote products 
+**   derived from this software without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+** THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+** License Applicability. Except to the extent portions of this file are
+** made subject to an alternative license as permitted in the SGI Free
+** Software License B, Version 1.1 (the "License"), the contents of this
+** file are subject only to the provisions of the License. You may not use
+** this file except in compliance with the License. You may obtain a copy
+** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
+** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
+** 
+** http://oss.sgi.com/projects/FreeB
+** 
+** Note that, as provided in the License, the Software is distributed on an
+** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
+** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
+** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
+** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
+** 
+** Original Code. The Original Code is: OpenGL Sample Implementation,
+** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
+** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
+** Copyright in any portions created by third parties is as indicated
+** elsewhere herein. All Rights Reserved.
+** 
+** Additional Notice Provisions: This software was created using the
+** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has
+** not been independently verified as being compliant with the OpenGL(R)
+** version 1.2.1 Specification.
+*/
+
+#ifndef __wglew_h__
+#define __wglew_h__
+#define __WGLEW_H__
+
+#ifdef __wglext_h_
+#error wglext.h included before wglew.h
+#endif
+
+#define __wglext_h_
+
+#if !defined(APIENTRY) && !defined(__CYGWIN__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+/*
+ * GLEW_STATIC needs to be set when using the static version.
+ * GLEW_BUILD is set when building the DLL version.
+ */
+#ifdef GLEW_STATIC
+#  define GLEWAPI extern
+#else
+#  ifdef GLEW_BUILD
+#    define GLEWAPI extern __declspec(dllexport)
+#  else
+#    define GLEWAPI extern __declspec(dllimport)
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* -------------------------- WGL_3DFX_multisample ------------------------- */
+
+#ifndef WGL_3DFX_multisample
+#define WGL_3DFX_multisample 1
+
+#define WGL_SAMPLE_BUFFERS_3DFX 0x2060
+#define WGL_SAMPLES_3DFX 0x2061
+
+#define WGLEW_3DFX_multisample WGLEW_GET_VAR(__WGLEW_3DFX_multisample)
+
+#endif /* WGL_3DFX_multisample */
+
+/* ------------------------- WGL_ARB_buffer_region ------------------------- */
+
+#ifndef WGL_ARB_buffer_region
+#define WGL_ARB_buffer_region 1
+
+#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001
+#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002
+#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004
+#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008
+
+typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType);
+typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);
+typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);
+
+#define wglCreateBufferRegionARB WGLEW_GET_FUN(__wglewCreateBufferRegionARB)
+#define wglDeleteBufferRegionARB WGLEW_GET_FUN(__wglewDeleteBufferRegionARB)
+#define wglRestoreBufferRegionARB WGLEW_GET_FUN(__wglewRestoreBufferRegionARB)
+#define wglSaveBufferRegionARB WGLEW_GET_FUN(__wglewSaveBufferRegionARB)
+
+#define WGLEW_ARB_buffer_region WGLEW_GET_VAR(__WGLEW_ARB_buffer_region)
+
+#endif /* WGL_ARB_buffer_region */
+
+/* ----------------------- WGL_ARB_extensions_string ----------------------- */
+
+#ifndef WGL_ARB_extensions_string
+#define WGL_ARB_extensions_string 1
+
+typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
+
+#define wglGetExtensionsStringARB WGLEW_GET_FUN(__wglewGetExtensionsStringARB)
+
+#define WGLEW_ARB_extensions_string WGLEW_GET_VAR(__WGLEW_ARB_extensions_string)
+
+#endif /* WGL_ARB_extensions_string */
+
+/* ----------------------- WGL_ARB_make_current_read ----------------------- */
+
+#ifndef WGL_ARB_make_current_read
+#define WGL_ARB_make_current_read 1
+
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (VOID);
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+
+#define wglGetCurrentReadDCARB WGLEW_GET_FUN(__wglewGetCurrentReadDCARB)
+#define wglMakeContextCurrentARB WGLEW_GET_FUN(__wglewMakeContextCurrentARB)
+
+#define WGLEW_ARB_make_current_read WGLEW_GET_VAR(__WGLEW_ARB_make_current_read)
+
+#endif /* WGL_ARB_make_current_read */
+
+/* -------------------------- WGL_ARB_multisample -------------------------- */
+
+#ifndef WGL_ARB_multisample
+#define WGL_ARB_multisample 1
+
+#define WGL_SAMPLE_BUFFERS_ARB 0x2041
+#define WGL_SAMPLES_ARB 0x2042
+
+#define WGLEW_ARB_multisample WGLEW_GET_VAR(__WGLEW_ARB_multisample)
+
+#endif /* WGL_ARB_multisample */
+
+/* ---------------------------- WGL_ARB_pbuffer ---------------------------- */
+
+#ifndef WGL_ARB_pbuffer
+#define WGL_ARB_pbuffer 1
+
+#define WGL_DRAW_TO_PBUFFER_ARB 0x202D
+#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E
+#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030
+#define WGL_PBUFFER_LARGEST_ARB 0x2033
+#define WGL_PBUFFER_WIDTH_ARB 0x2034
+#define WGL_PBUFFER_HEIGHT_ARB 0x2035
+#define WGL_PBUFFER_LOST_ARB 0x2036
+
+DECLARE_HANDLE(HPBUFFERARB);
+
+typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int* piValue);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);
+
+#define wglCreatePbufferARB WGLEW_GET_FUN(__wglewCreatePbufferARB)
+#define wglDestroyPbufferARB WGLEW_GET_FUN(__wglewDestroyPbufferARB)
+#define wglGetPbufferDCARB WGLEW_GET_FUN(__wglewGetPbufferDCARB)
+#define wglQueryPbufferARB WGLEW_GET_FUN(__wglewQueryPbufferARB)
+#define wglReleasePbufferDCARB WGLEW_GET_FUN(__wglewReleasePbufferDCARB)
+
+#define WGLEW_ARB_pbuffer WGLEW_GET_VAR(__WGLEW_ARB_pbuffer)
+
+#endif /* WGL_ARB_pbuffer */
+
+/* -------------------------- WGL_ARB_pixel_format ------------------------- */
+
+#ifndef WGL_ARB_pixel_format
+#define WGL_ARB_pixel_format 1
+
+#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
+#define WGL_DRAW_TO_WINDOW_ARB 0x2001
+#define WGL_DRAW_TO_BITMAP_ARB 0x2002
+#define WGL_ACCELERATION_ARB 0x2003
+#define WGL_NEED_PALETTE_ARB 0x2004
+#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
+#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
+#define WGL_SWAP_METHOD_ARB 0x2007
+#define WGL_NUMBER_OVERLAYS_ARB 0x2008
+#define WGL_NUMBER_UNDERLAYS_ARB 0x2009
+#define WGL_TRANSPARENT_ARB 0x200A
+#define WGL_SHARE_DEPTH_ARB 0x200C
+#define WGL_SHARE_STENCIL_ARB 0x200D
+#define WGL_SHARE_ACCUM_ARB 0x200E
+#define WGL_SUPPORT_GDI_ARB 0x200F
+#define WGL_SUPPORT_OPENGL_ARB 0x2010
+#define WGL_DOUBLE_BUFFER_ARB 0x2011
+#define WGL_STEREO_ARB 0x2012
+#define WGL_PIXEL_TYPE_ARB 0x2013
+#define WGL_COLOR_BITS_ARB 0x2014
+#define WGL_RED_BITS_ARB 0x2015
+#define WGL_RED_SHIFT_ARB 0x2016
+#define WGL_GREEN_BITS_ARB 0x2017
+#define WGL_GREEN_SHIFT_ARB 0x2018
+#define WGL_BLUE_BITS_ARB 0x2019
+#define WGL_BLUE_SHIFT_ARB 0x201A
+#define WGL_ALPHA_BITS_ARB 0x201B
+#define WGL_ALPHA_SHIFT_ARB 0x201C
+#define WGL_ACCUM_BITS_ARB 0x201D
+#define WGL_ACCUM_RED_BITS_ARB 0x201E
+#define WGL_ACCUM_GREEN_BITS_ARB 0x201F
+#define WGL_ACCUM_BLUE_BITS_ARB 0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
+#define WGL_DEPTH_BITS_ARB 0x2022
+#define WGL_STENCIL_BITS_ARB 0x2023
+#define WGL_AUX_BUFFERS_ARB 0x2024
+#define WGL_NO_ACCELERATION_ARB 0x2025
+#define WGL_GENERIC_ACCELERATION_ARB 0x2026
+#define WGL_FULL_ACCELERATION_ARB 0x2027
+#define WGL_SWAP_EXCHANGE_ARB 0x2028
+#define WGL_SWAP_COPY_ARB 0x2029
+#define WGL_SWAP_UNDEFINED_ARB 0x202A
+#define WGL_TYPE_RGBA_ARB 0x202B
+#define WGL_TYPE_COLORINDEX_ARB 0x202C
+#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
+
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, int *piValues);
+
+#define wglChoosePixelFormatARB WGLEW_GET_FUN(__wglewChoosePixelFormatARB)
+#define wglGetPixelFormatAttribfvARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvARB)
+#define wglGetPixelFormatAttribivARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribivARB)
+
+#define WGLEW_ARB_pixel_format WGLEW_GET_VAR(__WGLEW_ARB_pixel_format)
+
+#endif /* WGL_ARB_pixel_format */
+
+/* ----------------------- WGL_ARB_pixel_format_float ---------------------- */
+
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_ARB_pixel_format_float 1
+
+#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0
+
+#define WGLEW_ARB_pixel_format_float WGLEW_GET_VAR(__WGLEW_ARB_pixel_format_float)
+
+#endif /* WGL_ARB_pixel_format_float */
+
+/* ------------------------- WGL_ARB_render_texture ------------------------ */
+
+#ifndef WGL_ARB_render_texture
+#define WGL_ARB_render_texture 1
+
+#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070
+#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071
+#define WGL_TEXTURE_FORMAT_ARB 0x2072
+#define WGL_TEXTURE_TARGET_ARB 0x2073
+#define WGL_MIPMAP_TEXTURE_ARB 0x2074
+#define WGL_TEXTURE_RGB_ARB 0x2075
+#define WGL_TEXTURE_RGBA_ARB 0x2076
+#define WGL_NO_TEXTURE_ARB 0x2077
+#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078
+#define WGL_TEXTURE_1D_ARB 0x2079
+#define WGL_TEXTURE_2D_ARB 0x207A
+#define WGL_MIPMAP_LEVEL_ARB 0x207B
+#define WGL_CUBE_MAP_FACE_ARB 0x207C
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082
+#define WGL_FRONT_LEFT_ARB 0x2083
+#define WGL_FRONT_RIGHT_ARB 0x2084
+#define WGL_BACK_LEFT_ARB 0x2085
+#define WGL_BACK_RIGHT_ARB 0x2086
+#define WGL_AUX0_ARB 0x2087
+#define WGL_AUX1_ARB 0x2088
+#define WGL_AUX2_ARB 0x2089
+#define WGL_AUX3_ARB 0x208A
+#define WGL_AUX4_ARB 0x208B
+#define WGL_AUX5_ARB 0x208C
+#define WGL_AUX6_ARB 0x208D
+#define WGL_AUX7_ARB 0x208E
+#define WGL_AUX8_ARB 0x208F
+#define WGL_AUX9_ARB 0x2090
+
+typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int* piAttribList);
+
+#define wglBindTexImageARB WGLEW_GET_FUN(__wglewBindTexImageARB)
+#define wglReleaseTexImageARB WGLEW_GET_FUN(__wglewReleaseTexImageARB)
+#define wglSetPbufferAttribARB WGLEW_GET_FUN(__wglewSetPbufferAttribARB)
+
+#define WGLEW_ARB_render_texture WGLEW_GET_VAR(__WGLEW_ARB_render_texture)
+
+#endif /* WGL_ARB_render_texture */
+
+/* ----------------------- WGL_ATI_pixel_format_float ---------------------- */
+
+#ifndef WGL_ATI_pixel_format_float
+#define WGL_ATI_pixel_format_float 1
+
+#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0
+#define GL_RGBA_FLOAT_MODE_ATI 0x8820
+#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835
+
+#define WGLEW_ATI_pixel_format_float WGLEW_GET_VAR(__WGLEW_ATI_pixel_format_float)
+
+#endif /* WGL_ATI_pixel_format_float */
+
+/* -------------------------- WGL_EXT_depth_float -------------------------- */
+
+#ifndef WGL_EXT_depth_float
+#define WGL_EXT_depth_float 1
+
+#define WGL_DEPTH_FLOAT_EXT 0x2040
+
+#define WGLEW_EXT_depth_float WGLEW_GET_VAR(__WGLEW_EXT_depth_float)
+
+#endif /* WGL_EXT_depth_float */
+
+/* ---------------------- WGL_EXT_display_color_table ---------------------- */
+
+#ifndef WGL_EXT_display_color_table
+#define WGL_EXT_display_color_table 1
+
+typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef void (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (GLushort* table, GLuint length);
+
+#define wglBindDisplayColorTableEXT WGLEW_GET_FUN(__wglewBindDisplayColorTableEXT)
+#define wglCreateDisplayColorTableEXT WGLEW_GET_FUN(__wglewCreateDisplayColorTableEXT)
+#define wglDestroyDisplayColorTableEXT WGLEW_GET_FUN(__wglewDestroyDisplayColorTableEXT)
+#define wglLoadDisplayColorTableEXT WGLEW_GET_FUN(__wglewLoadDisplayColorTableEXT)
+
+#define WGLEW_EXT_display_color_table WGLEW_GET_VAR(__WGLEW_EXT_display_color_table)
+
+#endif /* WGL_EXT_display_color_table */
+
+/* ----------------------- WGL_EXT_extensions_string ----------------------- */
+
+#ifndef WGL_EXT_extensions_string
+#define WGL_EXT_extensions_string 1
+
+typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);
+
+#define wglGetExtensionsStringEXT WGLEW_GET_FUN(__wglewGetExtensionsStringEXT)
+
+#define WGLEW_EXT_extensions_string WGLEW_GET_VAR(__WGLEW_EXT_extensions_string)
+
+#endif /* WGL_EXT_extensions_string */
+
+/* ----------------------- WGL_EXT_make_current_read ----------------------- */
+
+#ifndef WGL_EXT_make_current_read
+#define WGL_EXT_make_current_read 1
+
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (VOID);
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+
+#define wglGetCurrentReadDCEXT WGLEW_GET_FUN(__wglewGetCurrentReadDCEXT)
+#define wglMakeContextCurrentEXT WGLEW_GET_FUN(__wglewMakeContextCurrentEXT)
+
+#define WGLEW_EXT_make_current_read WGLEW_GET_VAR(__WGLEW_EXT_make_current_read)
+
+#endif /* WGL_EXT_make_current_read */
+
+/* -------------------------- WGL_EXT_multisample -------------------------- */
+
+#ifndef WGL_EXT_multisample
+#define WGL_EXT_multisample 1
+
+#define WGL_SAMPLE_BUFFERS_EXT 0x2041
+#define WGL_SAMPLES_EXT 0x2042
+
+#define WGLEW_EXT_multisample WGLEW_GET_VAR(__WGLEW_EXT_multisample)
+
+#endif /* WGL_EXT_multisample */
+
+/* ---------------------------- WGL_EXT_pbuffer ---------------------------- */
+
+#ifndef WGL_EXT_pbuffer
+#define WGL_EXT_pbuffer 1
+
+#define WGL_DRAW_TO_PBUFFER_EXT 0x202D
+#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E
+#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030
+#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031
+#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032
+#define WGL_PBUFFER_LARGEST_EXT 0x2033
+#define WGL_PBUFFER_WIDTH_EXT 0x2034
+#define WGL_PBUFFER_HEIGHT_EXT 0x2035
+
+DECLARE_HANDLE(HPBUFFEREXT);
+
+typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int* piValue);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC);
+
+#define wglCreatePbufferEXT WGLEW_GET_FUN(__wglewCreatePbufferEXT)
+#define wglDestroyPbufferEXT WGLEW_GET_FUN(__wglewDestroyPbufferEXT)
+#define wglGetPbufferDCEXT WGLEW_GET_FUN(__wglewGetPbufferDCEXT)
+#define wglQueryPbufferEXT WGLEW_GET_FUN(__wglewQueryPbufferEXT)
+#define wglReleasePbufferDCEXT WGLEW_GET_FUN(__wglewReleasePbufferDCEXT)
+
+#define WGLEW_EXT_pbuffer WGLEW_GET_VAR(__WGLEW_EXT_pbuffer)
+
+#endif /* WGL_EXT_pbuffer */
+
+/* -------------------------- WGL_EXT_pixel_format ------------------------- */
+
+#ifndef WGL_EXT_pixel_format
+#define WGL_EXT_pixel_format 1
+
+#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000
+#define WGL_DRAW_TO_WINDOW_EXT 0x2001
+#define WGL_DRAW_TO_BITMAP_EXT 0x2002
+#define WGL_ACCELERATION_EXT 0x2003
+#define WGL_NEED_PALETTE_EXT 0x2004
+#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005
+#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006
+#define WGL_SWAP_METHOD_EXT 0x2007
+#define WGL_NUMBER_OVERLAYS_EXT 0x2008
+#define WGL_NUMBER_UNDERLAYS_EXT 0x2009
+#define WGL_TRANSPARENT_EXT 0x200A
+#define WGL_TRANSPARENT_VALUE_EXT 0x200B
+#define WGL_SHARE_DEPTH_EXT 0x200C
+#define WGL_SHARE_STENCIL_EXT 0x200D
+#define WGL_SHARE_ACCUM_EXT 0x200E
+#define WGL_SUPPORT_GDI_EXT 0x200F
+#define WGL_SUPPORT_OPENGL_EXT 0x2010
+#define WGL_DOUBLE_BUFFER_EXT 0x2011
+#define WGL_STEREO_EXT 0x2012
+#define WGL_PIXEL_TYPE_EXT 0x2013
+#define WGL_COLOR_BITS_EXT 0x2014
+#define WGL_RED_BITS_EXT 0x2015
+#define WGL_RED_SHIFT_EXT 0x2016
+#define WGL_GREEN_BITS_EXT 0x2017
+#define WGL_GREEN_SHIFT_EXT 0x2018
+#define WGL_BLUE_BITS_EXT 0x2019
+#define WGL_BLUE_SHIFT_EXT 0x201A
+#define WGL_ALPHA_BITS_EXT 0x201B
+#define WGL_ALPHA_SHIFT_EXT 0x201C
+#define WGL_ACCUM_BITS_EXT 0x201D
+#define WGL_ACCUM_RED_BITS_EXT 0x201E
+#define WGL_ACCUM_GREEN_BITS_EXT 0x201F
+#define WGL_ACCUM_BLUE_BITS_EXT 0x2020
+#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021
+#define WGL_DEPTH_BITS_EXT 0x2022
+#define WGL_STENCIL_BITS_EXT 0x2023
+#define WGL_AUX_BUFFERS_EXT 0x2024
+#define WGL_NO_ACCELERATION_EXT 0x2025
+#define WGL_GENERIC_ACCELERATION_EXT 0x2026
+#define WGL_FULL_ACCELERATION_EXT 0x2027
+#define WGL_SWAP_EXCHANGE_EXT 0x2028
+#define WGL_SWAP_COPY_EXT 0x2029
+#define WGL_SWAP_UNDEFINED_EXT 0x202A
+#define WGL_TYPE_RGBA_EXT 0x202B
+#define WGL_TYPE_COLORINDEX_EXT 0x202C
+
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, int *piValues);
+
+#define wglChoosePixelFormatEXT WGLEW_GET_FUN(__wglewChoosePixelFormatEXT)
+#define wglGetPixelFormatAttribfvEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvEXT)
+#define wglGetPixelFormatAttribivEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribivEXT)
+
+#define WGLEW_EXT_pixel_format WGLEW_GET_VAR(__WGLEW_EXT_pixel_format)
+
+#endif /* WGL_EXT_pixel_format */
+
+/* -------------------------- WGL_EXT_swap_control ------------------------- */
+
+#ifndef WGL_EXT_swap_control
+#define WGL_EXT_swap_control 1
+
+typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
+typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
+
+#define wglGetSwapIntervalEXT WGLEW_GET_FUN(__wglewGetSwapIntervalEXT)
+#define wglSwapIntervalEXT WGLEW_GET_FUN(__wglewSwapIntervalEXT)
+
+#define WGLEW_EXT_swap_control WGLEW_GET_VAR(__WGLEW_EXT_swap_control)
+
+#endif /* WGL_EXT_swap_control */
+
+/* --------------------- WGL_I3D_digital_video_control --------------------- */
+
+#ifndef WGL_I3D_digital_video_control
+#define WGL_I3D_digital_video_control 1
+
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051
+#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052
+#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053
+
+typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue);
+typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue);
+
+#define wglGetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewGetDigitalVideoParametersI3D)
+#define wglSetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewSetDigitalVideoParametersI3D)
+
+#define WGLEW_I3D_digital_video_control WGLEW_GET_VAR(__WGLEW_I3D_digital_video_control)
+
+#endif /* WGL_I3D_digital_video_control */
+
+/* ----------------------------- WGL_I3D_gamma ----------------------------- */
+
+#ifndef WGL_I3D_gamma
+#define WGL_I3D_gamma 1
+
+#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E
+#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F
+
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT* puRed, USHORT *puGreen, USHORT *puBlue);
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT* puRed, const USHORT *puGreen, const USHORT *puBlue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue);
+
+#define wglGetGammaTableI3D WGLEW_GET_FUN(__wglewGetGammaTableI3D)
+#define wglGetGammaTableParametersI3D WGLEW_GET_FUN(__wglewGetGammaTableParametersI3D)
+#define wglSetGammaTableI3D WGLEW_GET_FUN(__wglewSetGammaTableI3D)
+#define wglSetGammaTableParametersI3D WGLEW_GET_FUN(__wglewSetGammaTableParametersI3D)
+
+#define WGLEW_I3D_gamma WGLEW_GET_VAR(__WGLEW_I3D_gamma)
+
+#endif /* WGL_I3D_gamma */
+
+/* ---------------------------- WGL_I3D_genlock ---------------------------- */
+
+#ifndef WGL_I3D_genlock
+#define WGL_I3D_genlock 1
+
+#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044
+#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045
+#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046
+#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047
+#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048
+#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049
+#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A
+#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B
+#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C
+
+typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT* uRate);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT* uDelay);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT* uEdge);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT* uSource);
+typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL* pFlag);
+typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT* uMaxLineDelay, UINT *uMaxPixelDelay);
+
+#define wglDisableGenlockI3D WGLEW_GET_FUN(__wglewDisableGenlockI3D)
+#define wglEnableGenlockI3D WGLEW_GET_FUN(__wglewEnableGenlockI3D)
+#define wglGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGenlockSampleRateI3D)
+#define wglGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGenlockSourceDelayI3D)
+#define wglGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGenlockSourceEdgeI3D)
+#define wglGenlockSourceI3D WGLEW_GET_FUN(__wglewGenlockSourceI3D)
+#define wglGetGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGetGenlockSampleRateI3D)
+#define wglGetGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGetGenlockSourceDelayI3D)
+#define wglGetGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGetGenlockSourceEdgeI3D)
+#define wglGetGenlockSourceI3D WGLEW_GET_FUN(__wglewGetGenlockSourceI3D)
+#define wglIsEnabledGenlockI3D WGLEW_GET_FUN(__wglewIsEnabledGenlockI3D)
+#define wglQueryGenlockMaxSourceDelayI3D WGLEW_GET_FUN(__wglewQueryGenlockMaxSourceDelayI3D)
+
+#define WGLEW_I3D_genlock WGLEW_GET_VAR(__WGLEW_I3D_genlock)
+
+#endif /* WGL_I3D_genlock */
+
+/* -------------------------- WGL_I3D_image_buffer ------------------------- */
+
+#ifndef WGL_I3D_image_buffer
+#define WGL_I3D_image_buffer 1
+
+#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001
+#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002
+
+typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, HANDLE* pEvent, LPVOID *pAddress, DWORD *pSize, UINT count);
+typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags);
+typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress);
+typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, LPVOID* pAddress, UINT count);
+
+#define wglAssociateImageBufferEventsI3D WGLEW_GET_FUN(__wglewAssociateImageBufferEventsI3D)
+#define wglCreateImageBufferI3D WGLEW_GET_FUN(__wglewCreateImageBufferI3D)
+#define wglDestroyImageBufferI3D WGLEW_GET_FUN(__wglewDestroyImageBufferI3D)
+#define wglReleaseImageBufferEventsI3D WGLEW_GET_FUN(__wglewReleaseImageBufferEventsI3D)
+
+#define WGLEW_I3D_image_buffer WGLEW_GET_VAR(__WGLEW_I3D_image_buffer)
+
+#endif /* WGL_I3D_image_buffer */
+
+/* ------------------------ WGL_I3D_swap_frame_lock ------------------------ */
+
+#ifndef WGL_I3D_swap_frame_lock
+#define WGL_I3D_swap_frame_lock 1
+
+typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (VOID);
+typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (VOID);
+typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL* pFlag);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL* pFlag);
+
+#define wglDisableFrameLockI3D WGLEW_GET_FUN(__wglewDisableFrameLockI3D)
+#define wglEnableFrameLockI3D WGLEW_GET_FUN(__wglewEnableFrameLockI3D)
+#define wglIsEnabledFrameLockI3D WGLEW_GET_FUN(__wglewIsEnabledFrameLockI3D)
+#define wglQueryFrameLockMasterI3D WGLEW_GET_FUN(__wglewQueryFrameLockMasterI3D)
+
+#define WGLEW_I3D_swap_frame_lock WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_lock)
+
+#endif /* WGL_I3D_swap_frame_lock */
+
+/* ------------------------ WGL_I3D_swap_frame_usage ----------------------- */
+
+#ifndef WGL_I3D_swap_frame_usage
+#define WGL_I3D_swap_frame_usage 1
+
+typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float* pUsage);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD* pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+
+#define wglBeginFrameTrackingI3D WGLEW_GET_FUN(__wglewBeginFrameTrackingI3D)
+#define wglEndFrameTrackingI3D WGLEW_GET_FUN(__wglewEndFrameTrackingI3D)
+#define wglGetFrameUsageI3D WGLEW_GET_FUN(__wglewGetFrameUsageI3D)
+#define wglQueryFrameTrackingI3D WGLEW_GET_FUN(__wglewQueryFrameTrackingI3D)
+
+#define WGLEW_I3D_swap_frame_usage WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_usage)
+
+#endif /* WGL_I3D_swap_frame_usage */
+
+/* -------------------------- WGL_NV_float_buffer -------------------------- */
+
+#ifndef WGL_NV_float_buffer
+#define WGL_NV_float_buffer 1
+
+#define WGL_FLOAT_COMPONENTS_NV 0x20B0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
+#define WGL_TEXTURE_FLOAT_R_NV 0x20B5
+#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6
+#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7
+#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8
+
+#define WGLEW_NV_float_buffer WGLEW_GET_VAR(__WGLEW_NV_float_buffer)
+
+#endif /* WGL_NV_float_buffer */
+
+/* ---------------------- WGL_NV_render_depth_texture ---------------------- */
+
+#ifndef WGL_NV_render_depth_texture
+#define WGL_NV_render_depth_texture 1
+
+#define WGL_NO_TEXTURE_ARB 0x2077
+#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
+#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5
+#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6
+#define WGL_DEPTH_COMPONENT_NV 0x20A7
+
+#define WGLEW_NV_render_depth_texture WGLEW_GET_VAR(__WGLEW_NV_render_depth_texture)
+
+#endif /* WGL_NV_render_depth_texture */
+
+/* -------------------- WGL_NV_render_texture_rectangle -------------------- */
+
+#ifndef WGL_NV_render_texture_rectangle
+#define WGL_NV_render_texture_rectangle 1
+
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
+#define WGL_TEXTURE_RECTANGLE_NV 0x20A2
+
+#define WGLEW_NV_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_NV_render_texture_rectangle)
+
+#endif /* WGL_NV_render_texture_rectangle */
+
+/* ----------------------- WGL_NV_vertex_array_range ----------------------- */
+
+#ifndef WGL_NV_vertex_array_range
+#define WGL_NV_vertex_array_range 1
+
+typedef void * (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority);
+typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);
+
+#define wglAllocateMemoryNV WGLEW_GET_FUN(__wglewAllocateMemoryNV)
+#define wglFreeMemoryNV WGLEW_GET_FUN(__wglewFreeMemoryNV)
+
+#define WGLEW_NV_vertex_array_range WGLEW_GET_VAR(__WGLEW_NV_vertex_array_range)
+
+#endif /* WGL_NV_vertex_array_range */
+
+/* -------------------------- WGL_OML_sync_control ------------------------- */
+
+#ifndef WGL_OML_sync_control
+#define WGL_OML_sync_control 1
+
+typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32* numerator, INT32 *denominator);
+typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64* ust, INT64 *msc, INT64 *sbc);
+typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64* ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64* ust, INT64 *msc, INT64 *sbc);
+
+#define wglGetMscRateOML WGLEW_GET_FUN(__wglewGetMscRateOML)
+#define wglGetSyncValuesOML WGLEW_GET_FUN(__wglewGetSyncValuesOML)
+#define wglSwapBuffersMscOML WGLEW_GET_FUN(__wglewSwapBuffersMscOML)
+#define wglSwapLayerBuffersMscOML WGLEW_GET_FUN(__wglewSwapLayerBuffersMscOML)
+#define wglWaitForMscOML WGLEW_GET_FUN(__wglewWaitForMscOML)
+#define wglWaitForSbcOML WGLEW_GET_FUN(__wglewWaitForSbcOML)
+
+#define WGLEW_OML_sync_control WGLEW_GET_VAR(__WGLEW_OML_sync_control)
+
+#endif /* WGL_OML_sync_control */
+
+/* ------------------------------------------------------------------------- */
+
+#ifdef GLEW_MX
+#define WGLEW_EXPORT
+#else
+#define WGLEW_EXPORT GLEWAPI
+#endif /* GLEW_MX */
+
+#ifdef GLEW_MX
+struct WGLEWContextStruct
+{
+#endif /* GLEW_MX */
+
+WGLEW_EXPORT PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB;
+WGLEW_EXPORT PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB;
+WGLEW_EXPORT PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB;
+WGLEW_EXPORT PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB;
+
+WGLEW_EXPORT PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB;
+
+WGLEW_EXPORT PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB;
+WGLEW_EXPORT PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB;
+
+WGLEW_EXPORT PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB;
+WGLEW_EXPORT PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB;
+WGLEW_EXPORT PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB;
+WGLEW_EXPORT PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB;
+WGLEW_EXPORT PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB;
+
+WGLEW_EXPORT PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB;
+WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB;
+WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB;
+
+WGLEW_EXPORT PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB;
+WGLEW_EXPORT PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB;
+WGLEW_EXPORT PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB;
+
+WGLEW_EXPORT PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT;
+WGLEW_EXPORT PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT;
+WGLEW_EXPORT PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT;
+WGLEW_EXPORT PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT;
+
+WGLEW_EXPORT PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT;
+
+WGLEW_EXPORT PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT;
+WGLEW_EXPORT PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT;
+
+WGLEW_EXPORT PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT;
+WGLEW_EXPORT PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT;
+WGLEW_EXPORT PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT;
+WGLEW_EXPORT PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT;
+WGLEW_EXPORT PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT;
+
+WGLEW_EXPORT PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT;
+WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT;
+WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT;
+
+WGLEW_EXPORT PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT;
+WGLEW_EXPORT PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT;
+
+WGLEW_EXPORT PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D;
+WGLEW_EXPORT PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D;
+
+WGLEW_EXPORT PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D;
+WGLEW_EXPORT PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D;
+WGLEW_EXPORT PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D;
+WGLEW_EXPORT PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D;
+
+WGLEW_EXPORT PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D;
+WGLEW_EXPORT PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D;
+WGLEW_EXPORT PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D;
+WGLEW_EXPORT PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D;
+WGLEW_EXPORT PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D;
+WGLEW_EXPORT PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D;
+WGLEW_EXPORT PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D;
+WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D;
+WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D;
+WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D;
+WGLEW_EXPORT PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D;
+WGLEW_EXPORT PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D;
+
+WGLEW_EXPORT PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D;
+WGLEW_EXPORT PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D;
+WGLEW_EXPORT PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D;
+WGLEW_EXPORT PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D;
+
+WGLEW_EXPORT PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D;
+WGLEW_EXPORT PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D;
+WGLEW_EXPORT PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D;
+WGLEW_EXPORT PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D;
+
+WGLEW_EXPORT PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D;
+WGLEW_EXPORT PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D;
+WGLEW_EXPORT PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D;
+WGLEW_EXPORT PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D;
+
+WGLEW_EXPORT PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV;
+WGLEW_EXPORT PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV;
+
+WGLEW_EXPORT PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML;
+WGLEW_EXPORT PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML;
+WGLEW_EXPORT PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML;
+WGLEW_EXPORT PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML;
+WGLEW_EXPORT PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML;
+WGLEW_EXPORT PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML;
+WGLEW_EXPORT GLboolean __WGLEW_3DFX_multisample;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_buffer_region;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_extensions_string;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_make_current_read;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_multisample;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_pbuffer;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_pixel_format;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_pixel_format_float;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_render_texture;
+WGLEW_EXPORT GLboolean __WGLEW_ATI_pixel_format_float;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_depth_float;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_display_color_table;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_extensions_string;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_make_current_read;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_multisample;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_pbuffer;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_pixel_format;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_swap_control;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_digital_video_control;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_gamma;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_genlock;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_image_buffer;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_swap_frame_lock;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_swap_frame_usage;
+WGLEW_EXPORT GLboolean __WGLEW_NV_float_buffer;
+WGLEW_EXPORT GLboolean __WGLEW_NV_render_depth_texture;
+WGLEW_EXPORT GLboolean __WGLEW_NV_render_texture_rectangle;
+WGLEW_EXPORT GLboolean __WGLEW_NV_vertex_array_range;
+WGLEW_EXPORT GLboolean __WGLEW_OML_sync_control;
+
+#ifdef GLEW_MX
+}; /* WGLEWContextStruct */
+#endif /* GLEW_MX */
+
+/* ------------------------------------------------------------------------- */
+
+#ifdef GLEW_MX
+
+typedef struct WGLEWContextStruct WGLEWContext;
+GLEWAPI GLenum wglewContextInit (WGLEWContext* ctx);
+
+#define WGLEW_GET_VAR(x) wglewGetContext()->x
+#define WGLEW_GET_FUN(x) wglewGetContext()->x
+
+#else /* GLEW_MX */
+
+#define WGLEW_GET_VAR(x) x
+#define WGLEW_GET_FUN(x) x
+
+#endif /* GLEW_MX */
+
+GLEWAPI GLboolean wglewGetExtension (const char* name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef GLEWAPI
+
+#endif /* __wglew_h__ */
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/glxew.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/glxew.h	(revision 10)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/GL/glxew.h	(revision 10)
@@ -0,0 +1,1055 @@
+/*
+** The OpenGL Extension Wrangler Library
+** Copyright (C) 2004, 2003, 2002, Milan Ikits <milan ikits[at]ieee org>
+** Copyright (C) 2004, 2003, 2002, Marcelo E. Magallon <mmagallo[at]debian org>
+** Copyright (C) 2002, Lev Povalahev
+** All rights reserved.
+** 
+** Redistribution and use in source and binary forms, with or without 
+** modification, are permitted provided that the following conditions are met:
+** 
+** * Redistributions of source code must retain the above copyright notice, 
+**   this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright notice, 
+**   this list of conditions and the following disclaimer in the documentation 
+**   and/or other materials provided with the distribution.
+** * The name of the author may be used to endorse or promote products 
+**   derived from this software without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+** THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+** The contents of this file are subject to the GLX Public License Version 1.0
+** (the "License"). You may not use this file except in compliance with the
+** License. You may obtain a copy of the License at Silicon Graphics, Inc.,
+** attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA 94043
+** or at http://www.sgi.com/software/opensource/glx/license.html.
+**
+** Software distributed under the License is distributed on an "AS IS"
+** basis. ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY
+** IMPLIED WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+** PURPOSE OR OF NON- INFRINGEMENT. See the License for the specific
+** language governing rights and limitations under the License.
+**
+** The Original Software is GLX version 1.2 source code, released February,
+** 1999. The developer of the Original Software is Silicon Graphics, Inc.
+** Those portions of the Subject Software created by Silicon Graphics, Inc.
+** are Copyright (c) 1991-9 Silicon Graphics, Inc. All Rights Reserved.
+*/
+
+#ifndef __glxew_h__
+#define __glxew_h__
+#define __GLXEW_H__
+
+#ifdef __glxext_h_
+#error glxext.h included before glxew.h
+#endif
+
+#define __glxext_h_
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xmd.h>
+#include <GL/glew.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ---------------------------- GLX_VERSION_1_0 --------------------------- */
+
+#ifndef GLX_VERSION_1_0
+#define GLX_VERSION_1_0 1
+
+#define GLX_USE_GL 1
+#define GLX_BUFFER_SIZE 2
+#define GLX_LEVEL 3
+#define GLX_RGBA 4
+#define GLX_DOUBLEBUFFER 5
+#define GLX_STEREO 6
+#define GLX_AUX_BUFFERS 7
+#define GLX_RED_SIZE 8
+#define GLX_GREEN_SIZE 9
+#define GLX_BLUE_SIZE 10
+#define GLX_ALPHA_SIZE 11
+#define GLX_DEPTH_SIZE 12
+#define GLX_STENCIL_SIZE 13
+#define GLX_ACCUM_RED_SIZE 14
+#define GLX_ACCUM_GREEN_SIZE 15
+#define GLX_ACCUM_BLUE_SIZE 16
+#define GLX_ACCUM_ALPHA_SIZE 17
+#define GLX_BAD_SCREEN 1
+#define GLX_BAD_ATTRIBUTE 2
+#define GLX_NO_EXTENSION 3
+#define GLX_BAD_VISUAL 4
+#define GLX_BAD_CONTEXT 5
+#define GLX_BAD_VALUE 6
+#define GLX_BAD_ENUM 7
+
+typedef XID GLXDrawable;
+typedef XID GLXPixmap;
+typedef struct __GLXcontextRec *GLXContext;
+
+extern Bool glXQueryExtension (Display *dpy, int *errorBase, int *eventBase);
+extern Bool glXQueryVersion (Display *dpy, int *major, int *minor);
+extern int glXGetConfig (Display *dpy, XVisualInfo *vis, int attrib, int *value);
+extern XVisualInfo* glXChooseVisual (Display *dpy, int screen, int *attribList);
+extern GLXPixmap glXCreateGLXPixmap (Display *dpy, XVisualInfo *vis, Pixmap pixmap);
+extern void glXDestroyGLXPixmap (Display *dpy, GLXPixmap pix);
+extern GLXContext glXCreateContext (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct);
+extern void glXDestroyContext (Display *dpy, GLXContext ctx);
+extern Bool glXIsDirect (Display *dpy, GLXContext ctx);
+extern void glXCopyContext (Display *dpy, GLXContext src, GLXContext dst, GLuint mask);
+extern Bool glXMakeCurrent (Display *dpy, GLXDrawable drawable, GLXContext ctx);
+extern GLXContext glXGetCurrentContext (void);
+extern GLXDrawable glXGetCurrentDrawable (void);
+extern void glXWaitGL (void);
+extern void glXWaitX (void);
+extern void glXSwapBuffers (Display *dpy, GLXDrawable drawable);
+extern void glXUseXFont (Font font, int first, int count, int listBase);
+
+#define GLXEW_VERSION_1_0 GLXEW_GET_VAR(__GLXEW_VERSION_1_0)
+
+#endif /* GLX_VERSION_1_0 */
+
+/* ---------------------------- GLX_VERSION_1_1 --------------------------- */
+
+#ifndef GLX_VERSION_1_1
+#define GLX_VERSION_1_1
+
+#define GLX_VENDOR 0x1
+#define GLX_VERSION 0x2
+#define GLX_EXTENSIONS 0x3
+
+extern const char* glXQueryExtensionsString (Display *dpy, int screen);
+extern const char* glXGetClientString (Display *dpy, int name);
+extern const char* glXQueryServerString (Display *dpy, int screen, int name);
+
+#define GLXEW_VERSION_1_1 GLXEW_GET_VAR(__GLXEW_VERSION_1_1)
+
+#endif /* GLX_VERSION_1_1 */
+
+/* ---------------------------- GLX_VERSION_1_2 ---------------------------- */
+
+#ifndef GLX_VERSION_1_2
+#define GLX_VERSION_1_2 1
+
+typedef Display* ( * PFNGLXGETCURRENTDISPLAYPROC) (void);
+
+#define glXGetCurrentDisplay GLXEW_GET_FUN(__glewXGetCurrentDisplay)
+
+#define GLXEW_VERSION_1_2 GLXEW_GET_VAR(__GLXEW_VERSION_1_2)
+
+#endif /* GLX_VERSION_1_2 */
+
+/* ---------------------------- GLX_VERSION_1_3 ---------------------------- */
+
+#ifndef GLX_VERSION_1_3
+#define GLX_VERSION_1_3 1
+
+#define GLX_RGBA_BIT 0x00000001
+#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001
+#define GLX_WINDOW_BIT 0x00000001
+#define GLX_COLOR_INDEX_BIT 0x00000002
+#define GLX_PIXMAP_BIT 0x00000002
+#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002
+#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004
+#define GLX_PBUFFER_BIT 0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008
+#define GLX_AUX_BUFFERS_BIT 0x00000010
+#define GLX_CONFIG_CAVEAT 0x20
+#define GLX_DEPTH_BUFFER_BIT 0x00000020
+#define GLX_X_VISUAL_TYPE 0x22
+#define GLX_TRANSPARENT_TYPE 0x23
+#define GLX_TRANSPARENT_INDEX_VALUE 0x24
+#define GLX_TRANSPARENT_RED_VALUE 0x25
+#define GLX_TRANSPARENT_GREEN_VALUE 0x26
+#define GLX_TRANSPARENT_BLUE_VALUE 0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE 0x28
+#define GLX_STENCIL_BUFFER_BIT 0x00000040
+#define GLX_ACCUM_BUFFER_BIT 0x00000080
+#define GLX_NONE 0x8000
+#define GLX_SLOW_CONFIG 0x8001
+#define GLX_TRUE_COLOR 0x8002
+#define GLX_DIRECT_COLOR 0x8003
+#define GLX_PSEUDO_COLOR 0x8004
+#define GLX_STATIC_COLOR 0x8005
+#define GLX_GRAY_SCALE 0x8006
+#define GLX_STATIC_GRAY 0x8007
+#define GLX_TRANSPARENT_RGB 0x8008
+#define GLX_TRANSPARENT_INDEX 0x8009
+#define GLX_VISUAL_ID 0x800B
+#define GLX_SCREEN 0x800C
+#define GLX_NON_CONFORMANT_CONFIG 0x800D
+#define GLX_DRAWABLE_TYPE 0x8010
+#define GLX_RENDER_TYPE 0x8011
+#define GLX_X_RENDERABLE 0x8012
+#define GLX_FBCONFIG_ID 0x8013
+#define GLX_RGBA_TYPE 0x8014
+#define GLX_COLOR_INDEX_TYPE 0x8015
+#define GLX_MAX_PBUFFER_WIDTH 0x8016
+#define GLX_MAX_PBUFFER_HEIGHT 0x8017
+#define GLX_MAX_PBUFFER_PIXELS 0x8018
+#define GLX_PRESERVED_CONTENTS 0x801B
+#define GLX_LARGEST_PBUFFER 0x801C
+#define GLX_WIDTH 0x801D
+#define GLX_HEIGHT 0x801E
+#define GLX_EVENT_MASK 0x801F
+#define GLX_DAMAGED 0x8020
+#define GLX_SAVED 0x8021
+#define GLX_WINDOW 0x8022
+#define GLX_PBUFFER 0x8023
+#define GLX_PBUFFER_HEIGHT 0x8040
+#define GLX_PBUFFER_WIDTH 0x8041
+#define GLX_PBUFFER_CLOBBER_MASK 0x08000000
+#define GLX_DONT_CARE 0xFFFFFFFF
+
+typedef XID GLXFBConfigID;
+typedef XID GLXWindow;
+typedef XID GLXPbuffer;
+typedef struct __GLXFBConfigRec *GLXFBConfig;
+typedef struct { int event_type; int draw_type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; unsigned int buffer_mask; unsigned int aux_buffer; int x, y; int width, height; int count; } GLXPbufferClobberEvent;
+typedef union __GLXEvent { GLXPbufferClobberEvent glxpbufferclobber; long pad[24]; } GLXEvent;
+
+typedef GLXFBConfig* ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
+typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
+typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
+typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
+typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
+typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
+typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
+typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
+typedef GLXFBConfig* ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
+typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
+typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
+typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
+typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
+
+#define glXChooseFBConfig GLXEW_GET_FUN(__glewXChooseFBConfig)
+#define glXCreateNewContext GLXEW_GET_FUN(__glewXCreateNewContext)
+#define glXCreatePbuffer GLXEW_GET_FUN(__glewXCreatePbuffer)
+#define glXCreatePixmap GLXEW_GET_FUN(__glewXCreatePixmap)
+#define glXCreateWindow GLXEW_GET_FUN(__glewXCreateWindow)
+#define glXDestroyPbuffer GLXEW_GET_FUN(__glewXDestroyPbuffer)
+#define glXDestroyPixmap GLXEW_GET_FUN(__glewXDestroyPixmap)
+#define glXDestroyWindow GLXEW_GET_FUN(__glewXDestroyWindow)
+#define glXGetCurrentReadDrawable GLXEW_GET_FUN(__glewXGetCurrentReadDrawable)
+#define glXGetFBConfigAttrib GLXEW_GET_FUN(__glewXGetFBConfigAttrib)
+#define glXGetFBConfigs GLXEW_GET_FUN(__glewXGetFBConfigs)
+#define glXGetSelectedEvent GLXEW_GET_FUN(__glewXGetSelectedEvent)
+#define glXGetVisualFromFBConfig GLXEW_GET_FUN(__glewXGetVisualFromFBConfig)
+#define glXMakeContextCurrent GLXEW_GET_FUN(__glewXMakeContextCurrent)
+#define glXQueryContext GLXEW_GET_FUN(__glewXQueryContext)
+#define glXQueryDrawable GLXEW_GET_FUN(__glewXQueryDrawable)
+#define glXSelectEvent GLXEW_GET_FUN(__glewXSelectEvent)
+
+#define GLXEW_VERSION_1_3 GLXEW_GET_VAR(__GLXEW_VERSION_1_3)
+
+#endif /* GLX_VERSION_1_3 */
+
+/* ---------------------------- GLX_VERSION_1_4 ---------------------------- */
+
+#ifndef GLX_VERSION_1_4
+#define GLX_VERSION_1_4 1
+
+#define GLX_SAMPLE_BUFFERS 100000
+#define GLX_SAMPLES 100001
+
+extern void ( * glXGetProcAddress (const GLubyte *procName)) (void);
+
+#define GLXEW_VERSION_1_4 GLXEW_GET_VAR(__GLXEW_VERSION_1_4)
+
+#endif /* GLX_VERSION_1_4 */
+
+/* -------------------------- GLX_3DFX_multisample ------------------------- */
+
+#ifndef GLX_3DFX_multisample
+#define GLX_3DFX_multisample 1
+
+#define GLX_SAMPLE_BUFFERS_3DFX 0x8050
+#define GLX_SAMPLES_3DFX 0x8051
+
+#define GLXEW_3DFX_multisample GLXEW_GET_VAR(__GLXEW_3DFX_multisample)
+
+#endif /* GLX_3DFX_multisample */
+
+/* ------------------------- GLX_ARB_fbconfig_float ------------------------ */
+
+#ifndef GLX_ARB_fbconfig_float
+#define GLX_ARB_fbconfig_float 1
+
+#define GLX_RGBA_FLOAT_BIT 0x00000004
+#define GLX_RGBA_FLOAT_TYPE 0x20B9
+
+#define GLXEW_ARB_fbconfig_float GLXEW_GET_VAR(__GLXEW_ARB_fbconfig_float)
+
+#endif /* GLX_ARB_fbconfig_float */
+
+/* ------------------------ GLX_ARB_get_proc_address ----------------------- */
+
+#ifndef GLX_ARB_get_proc_address
+#define GLX_ARB_get_proc_address 1
+
+extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void);
+
+#define GLXEW_ARB_get_proc_address GLXEW_GET_VAR(__GLXEW_ARB_get_proc_address)
+
+#endif /* GLX_ARB_get_proc_address */
+
+/* -------------------------- GLX_ARB_multisample -------------------------- */
+
+#ifndef GLX_ARB_multisample
+#define GLX_ARB_multisample 1
+
+#define GLX_SAMPLE_BUFFERS_ARB 100000
+#define GLX_SAMPLES_ARB 100001
+
+#define GLXEW_ARB_multisample GLXEW_GET_VAR(__GLXEW_ARB_multisample)
+
+#endif /* GLX_ARB_multisample */
+
+/* ----------------------- GLX_ATI_pixel_format_float ---------------------- */
+
+#ifndef GLX_ATI_pixel_format_float
+#define GLX_ATI_pixel_format_float 1
+
+#define GLX_RGBA_FLOAT_ATI_BIT 0x00000100
+
+#define GLXEW_ATI_pixel_format_float GLXEW_GET_VAR(__GLXEW_ATI_pixel_format_float)
+
+#endif /* GLX_ATI_pixel_format_float */
+
+/* ------------------------- GLX_ATI_render_texture ------------------------ */
+
+#ifndef GLX_ATI_render_texture
+#define GLX_ATI_render_texture 1
+
+#define GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800
+#define GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801
+#define GLX_TEXTURE_FORMAT_ATI 0x9802
+#define GLX_TEXTURE_TARGET_ATI 0x9803
+#define GLX_MIPMAP_TEXTURE_ATI 0x9804
+#define GLX_TEXTURE_RGB_ATI 0x9805
+#define GLX_TEXTURE_RGBA_ATI 0x9806
+#define GLX_NO_TEXTURE_ATI 0x9807
+#define GLX_TEXTURE_CUBE_MAP_ATI 0x9808
+#define GLX_TEXTURE_1D_ATI 0x9809
+#define GLX_TEXTURE_2D_ATI 0x980A
+#define GLX_MIPMAP_LEVEL_ATI 0x980B
+#define GLX_CUBE_MAP_FACE_ATI 0x980C
+#define GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D
+#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E
+#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F
+#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810
+#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811
+#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812
+#define GLX_FRONT_LEFT_ATI 0x9813
+#define GLX_FRONT_RIGHT_ATI 0x9814
+#define GLX_BACK_LEFT_ATI 0x9815
+#define GLX_BACK_RIGHT_ATI 0x9816
+#define GLX_AUX0_ATI 0x9817
+#define GLX_AUX1_ATI 0x9818
+#define GLX_AUX2_ATI 0x9819
+#define GLX_AUX3_ATI 0x981A
+#define GLX_AUX4_ATI 0x981B
+#define GLX_AUX5_ATI 0x981C
+#define GLX_AUX6_ATI 0x981D
+#define GLX_AUX7_ATI 0x981E
+#define GLX_AUX8_ATI 0x981F
+#define GLX_AUX9_ATI 0x9820
+#define GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821
+#define GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822
+
+typedef void ( * PFNGLXBINDTEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer);
+typedef void ( * PFNGLXDRAWABLEATTRIBATIPROC) (Display *dpy, GLXDrawable draw, const int *attrib_list);
+typedef void ( * PFNGLXRELEASETEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer);
+
+#define glXBindTexImageATI GLXEW_GET_FUN(__glewXBindTexImageATI)
+#define glXDrawableAttribATI GLXEW_GET_FUN(__glewXDrawableAttribATI)
+#define glXReleaseTexImageATI GLXEW_GET_FUN(__glewXReleaseTexImageATI)
+
+#define GLXEW_ATI_render_texture GLXEW_GET_VAR(__GLXEW_ATI_render_texture)
+
+#endif /* GLX_ATI_render_texture */
+
+/* ------------------------- GLX_EXT_import_context ------------------------ */
+
+#ifndef GLX_EXT_import_context
+#define GLX_EXT_import_context 1
+
+#define GLX_SHARE_CONTEXT_EXT 0x800A
+#define GLX_VISUAL_ID_EXT 0x800B
+#define GLX_SCREEN_EXT 0x800C
+
+typedef XID GLXContextID;
+
+typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display* dpy, GLXContext context);
+typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context);
+typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display* dpy, GLXContextID contextID);
+typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display* dpy, GLXContext context, int attribute,int *value);
+
+#define glXFreeContextEXT GLXEW_GET_FUN(__glewXFreeContextEXT)
+#define glXGetContextIDEXT GLXEW_GET_FUN(__glewXGetContextIDEXT)
+#define glXImportContextEXT GLXEW_GET_FUN(__glewXImportContextEXT)
+#define glXQueryContextInfoEXT GLXEW_GET_FUN(__glewXQueryContextInfoEXT)
+
+#define GLXEW_EXT_import_context GLXEW_GET_VAR(__GLXEW_EXT_import_context)
+
+#endif /* GLX_EXT_import_context */
+
+/* -------------------------- GLX_EXT_scene_marker ------------------------- */
+
+#ifndef GLX_EXT_scene_marker
+#define GLX_EXT_scene_marker 1
+
+#define GLXEW_EXT_scene_marker GLXEW_GET_VAR(__GLXEW_EXT_scene_marker)
+
+#endif /* GLX_EXT_scene_marker */
+
+/* -------------------------- GLX_EXT_visual_info -------------------------- */
+
+#ifndef GLX_EXT_visual_info
+#define GLX_EXT_visual_info 1
+
+#define GLX_X_VISUAL_TYPE_EXT 0x22
+#define GLX_TRANSPARENT_TYPE_EXT 0x23
+#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24
+#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25
+#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26
+#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28
+#define GLX_NONE_EXT 0x8000
+#define GLX_TRUE_COLOR_EXT 0x8002
+#define GLX_DIRECT_COLOR_EXT 0x8003
+#define GLX_PSEUDO_COLOR_EXT 0x8004
+#define GLX_STATIC_COLOR_EXT 0x8005
+#define GLX_GRAY_SCALE_EXT 0x8006
+#define GLX_STATIC_GRAY_EXT 0x8007
+#define GLX_TRANSPARENT_RGB_EXT 0x8008
+#define GLX_TRANSPARENT_INDEX_EXT 0x8009
+
+#define GLXEW_EXT_visual_info GLXEW_GET_VAR(__GLXEW_EXT_visual_info)
+
+#endif /* GLX_EXT_visual_info */
+
+/* ------------------------- GLX_EXT_visual_rating ------------------------- */
+
+#ifndef GLX_EXT_visual_rating
+#define GLX_EXT_visual_rating 1
+
+#define GLX_VISUAL_CAVEAT_EXT 0x20
+#define GLX_SLOW_VISUAL_EXT 0x8001
+#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D
+
+#define GLXEW_EXT_visual_rating GLXEW_GET_VAR(__GLXEW_EXT_visual_rating)
+
+#endif /* GLX_EXT_visual_rating */
+
+/* -------------------------- GLX_MESA_agp_offset -------------------------- */
+
+#ifndef GLX_MESA_agp_offset
+#define GLX_MESA_agp_offset 1
+
+typedef unsigned int ( * PFNGLXGETAGPOFFSETMESAPROC) (const void* pointer);
+
+#define glXGetAGPOffsetMESA GLXEW_GET_FUN(__glewXGetAGPOffsetMESA)
+
+#define GLXEW_MESA_agp_offset GLXEW_GET_VAR(__GLXEW_MESA_agp_offset)
+
+#endif /* GLX_MESA_agp_offset */
+
+/* ------------------------ GLX_MESA_copy_sub_buffer ----------------------- */
+
+#ifndef GLX_MESA_copy_sub_buffer
+#define GLX_MESA_copy_sub_buffer 1
+
+typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display* dpy, GLXDrawable drawable, int x, int y, int width, int height);
+
+#define glXCopySubBufferMESA GLXEW_GET_FUN(__glewXCopySubBufferMESA)
+
+#define GLXEW_MESA_copy_sub_buffer GLXEW_GET_VAR(__GLXEW_MESA_copy_sub_buffer)
+
+#endif /* GLX_MESA_copy_sub_buffer */
+
+/* ------------------------ GLX_MESA_pixmap_colormap ----------------------- */
+
+#ifndef GLX_MESA_pixmap_colormap
+#define GLX_MESA_pixmap_colormap 1
+
+typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display* dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
+
+#define glXCreateGLXPixmapMESA GLXEW_GET_FUN(__glewXCreateGLXPixmapMESA)
+
+#define GLXEW_MESA_pixmap_colormap GLXEW_GET_VAR(__GLXEW_MESA_pixmap_colormap)
+
+#endif /* GLX_MESA_pixmap_colormap */
+
+/* ------------------------ GLX_MESA_release_buffers ----------------------- */
+
+#ifndef GLX_MESA_release_buffers
+#define GLX_MESA_release_buffers 1
+
+typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display* dpy, GLXDrawable d);
+
+#define glXReleaseBuffersMESA GLXEW_GET_FUN(__glewXReleaseBuffersMESA)
+
+#define GLXEW_MESA_release_buffers GLXEW_GET_VAR(__GLXEW_MESA_release_buffers)
+
+#endif /* GLX_MESA_release_buffers */
+
+/* ------------------------- GLX_MESA_set_3dfx_mode ------------------------ */
+
+#ifndef GLX_MESA_set_3dfx_mode
+#define GLX_MESA_set_3dfx_mode 1
+
+#define GLX_3DFX_WINDOW_MODE_MESA 0x1
+#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2
+
+typedef GLboolean ( * PFNGLXSET3DFXMODEMESAPROC) (GLint mode);
+
+#define glXSet3DfxModeMESA GLXEW_GET_FUN(__glewXSet3DfxModeMESA)
+
+#define GLXEW_MESA_set_3dfx_mode GLXEW_GET_VAR(__GLXEW_MESA_set_3dfx_mode)
+
+#endif /* GLX_MESA_set_3dfx_mode */
+
+/* -------------------------- GLX_NV_float_buffer -------------------------- */
+
+#ifndef GLX_NV_float_buffer
+#define GLX_NV_float_buffer 1
+
+#define GLX_FLOAT_COMPONENTS_NV 0x20B0
+
+#define GLXEW_NV_float_buffer GLXEW_GET_VAR(__GLXEW_NV_float_buffer)
+
+#endif /* GLX_NV_float_buffer */
+
+/* ----------------------- GLX_NV_vertex_array_range ----------------------- */
+
+#ifndef GLX_NV_vertex_array_range
+#define GLX_NV_vertex_array_range 1
+
+typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority);
+typedef void ( * PFNGLXFREEMEMORYNVPROC) (void *pointer);
+
+#define glXAllocateMemoryNV GLXEW_GET_FUN(__glewXAllocateMemoryNV)
+#define glXFreeMemoryNV GLXEW_GET_FUN(__glewXFreeMemoryNV)
+
+#define GLXEW_NV_vertex_array_range GLXEW_GET_VAR(__GLXEW_NV_vertex_array_range)
+
+#endif /* GLX_NV_vertex_array_range */
+
+/* -------------------------- GLX_OML_swap_method -------------------------- */
+
+#ifndef GLX_OML_swap_method
+#define GLX_OML_swap_method 1
+
+#define GLX_SWAP_METHOD_OML 0x8060
+#define GLX_SWAP_EXCHANGE_OML 0x8061
+#define GLX_SWAP_COPY_OML 0x8062
+#define GLX_SWAP_UNDEFINED_OML 0x8063
+
+#define GLXEW_OML_swap_method GLXEW_GET_VAR(__GLXEW_OML_swap_method)
+
+#endif /* GLX_OML_swap_method */
+
+/* -------------------------- GLX_OML_sync_control ------------------------- */
+
+#if !defined(GLX_OML_sync_control) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
+#include <inttypes.h>
+#define GLX_OML_sync_control 1
+
+typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display* dpy, GLXDrawable drawable, int32_t* numerator, int32_t* denominator);
+typedef Bool ( * PFNGLXGETSYNCVALUESOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t* ust, int64_t* msc, int64_t* sbc);
+typedef int64_t ( * PFNGLXSWAPBUFFERSMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
+typedef Bool ( * PFNGLXWAITFORMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t* ust, int64_t* msc, int64_t* sbc);
+typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_sbc, int64_t* ust, int64_t* msc, int64_t* sbc);
+
+#define glXGetMscRateOML GLXEW_GET_FUN(__glewXGetMscRateOML)
+#define glXGetSyncValuesOML GLXEW_GET_FUN(__glewXGetSyncValuesOML)
+#define glXSwapBuffersMscOML GLXEW_GET_FUN(__glewXSwapBuffersMscOML)
+#define glXWaitForMscOML GLXEW_GET_FUN(__glewXWaitForMscOML)
+#define glXWaitForSbcOML GLXEW_GET_FUN(__glewXWaitForSbcOML)
+
+#define GLXEW_OML_sync_control GLXEW_GET_VAR(__GLXEW_OML_sync_control)
+
+#endif /* GLX_OML_sync_control */
+
+/* ------------------------ GLX_SGIS_blended_overlay ----------------------- */
+
+#ifndef GLX_SGIS_blended_overlay
+#define GLX_SGIS_blended_overlay 1
+
+#define GLX_BLENDED_RGBA_SGIS 0x8025
+
+#define GLXEW_SGIS_blended_overlay GLXEW_GET_VAR(__GLXEW_SGIS_blended_overlay)
+
+#endif /* GLX_SGIS_blended_overlay */
+
+/* -------------------------- GLX_SGIS_color_range ------------------------- */
+
+#ifndef GLX_SGIS_color_range
+#define GLX_SGIS_color_range 1
+
+#define GLX_MIN_RED_SGIS 0
+#define GLX_MAX_GREEN_SGIS 0
+#define GLX_MIN_BLUE_SGIS 0
+#define GLX_MAX_ALPHA_SGIS 0
+#define GLX_MIN_GREEN_SGIS 0
+#define GLX_MIN_ALPHA_SGIS 0
+#define GLX_MAX_RED_SGIS 0
+#define GLX_EXTENDED_RANGE_SGIS 0
+#define GLX_MAX_BLUE_SGIS 0
+
+#define GLXEW_SGIS_color_range GLXEW_GET_VAR(__GLXEW_SGIS_color_range)
+
+#endif /* GLX_SGIS_color_range */
+
+/* -------------------------- GLX_SGIS_multisample ------------------------- */
+
+#ifndef GLX_SGIS_multisample
+#define GLX_SGIS_multisample 1
+
+#define GLX_SAMPLE_BUFFERS_SGIS 100000
+#define GLX_SAMPLES_SGIS 100001
+
+#define GLXEW_SGIS_multisample GLXEW_GET_VAR(__GLXEW_SGIS_multisample)
+
+#endif /* GLX_SGIS_multisample */
+
+/* ---------------------- GLX_SGIS_shared_multisample ---------------------- */
+
+#ifndef GLX_SGIS_shared_multisample
+#define GLX_SGIS_shared_multisample 1
+
+#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026
+#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027
+
+#define GLXEW_SGIS_shared_multisample GLXEW_GET_VAR(__GLXEW_SGIS_shared_multisample)
+
+#endif /* GLX_SGIS_shared_multisample */
+
+/* --------------------------- GLX_SGIX_fbconfig --------------------------- */
+
+#ifndef GLX_SGIX_fbconfig
+#define GLX_SGIX_fbconfig 1
+
+#define GLX_WINDOW_BIT_SGIX 0x00000001
+#define GLX_RGBA_BIT_SGIX 0x00000001
+#define GLX_PIXMAP_BIT_SGIX 0x00000002
+#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002
+#define GLX_SCREEN_EXT 0x800C
+#define GLX_DRAWABLE_TYPE_SGIX 0x8010
+#define GLX_RENDER_TYPE_SGIX 0x8011
+#define GLX_X_RENDERABLE_SGIX 0x8012
+#define GLX_FBCONFIG_ID_SGIX 0x8013
+#define GLX_RGBA_TYPE_SGIX 0x8014
+#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015
+
+typedef XID GLXFBConfigIDSGIX;
+typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;
+
+typedef GLXFBConfigSGIX* ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
+typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, Pixmap pixmap);
+typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display* dpy, GLXFBConfigSGIX config, int attribute, int *value);
+typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display* dpy, XVisualInfo *vis);
+typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfig config);
+
+#define glXChooseFBConfigSGIX GLXEW_GET_FUN(__glewXChooseFBConfigSGIX)
+#define glXCreateContextWithConfigSGIX GLXEW_GET_FUN(__glewXCreateContextWithConfigSGIX)
+#define glXCreateGLXPixmapWithConfigSGIX GLXEW_GET_FUN(__glewXCreateGLXPixmapWithConfigSGIX)
+#define glXGetFBConfigAttribSGIX GLXEW_GET_FUN(__glewXGetFBConfigAttribSGIX)
+#define glXGetFBConfigFromVisualSGIX GLXEW_GET_FUN(__glewXGetFBConfigFromVisualSGIX)
+#define glXGetVisualFromFBConfigSGIX GLXEW_GET_FUN(__glewXGetVisualFromFBConfigSGIX)
+
+#define GLXEW_SGIX_fbconfig GLXEW_GET_VAR(__GLXEW_SGIX_fbconfig)
+
+#endif /* GLX_SGIX_fbconfig */
+
+/* ---------------------------- GLX_SGIX_pbuffer --------------------------- */
+
+#ifndef GLX_SGIX_pbuffer
+#define GLX_SGIX_pbuffer 1
+
+#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001
+#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002
+#define GLX_PBUFFER_BIT_SGIX 0x00000004
+#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008
+#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010
+#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020
+#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040
+#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080
+#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100
+#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016
+#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017
+#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018
+#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019
+#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A
+#define GLX_PRESERVED_CONTENTS_SGIX 0x801B
+#define GLX_LARGEST_PBUFFER_SGIX 0x801C
+#define GLX_WIDTH_SGIX 0x801D
+#define GLX_HEIGHT_SGIX 0x801E
+#define GLX_EVENT_MASK_SGIX 0x801F
+#define GLX_DAMAGED_SGIX 0x8020
+#define GLX_SAVED_SGIX 0x8021
+#define GLX_WINDOW_SGIX 0x8022
+#define GLX_PBUFFER_SGIX 0x8023
+#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000
+
+typedef XID GLXPbufferSGIX;
+typedef struct { int type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; int event_type; int draw_type; unsigned int mask; int x, y; int width, height; int count; } GLXBufferClobberEventSGIX;
+
+typedef GLXPbuffer ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display* dpy, GLXFBConfig config, unsigned int width, unsigned int height, int *attrib_list);
+typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf);
+typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long *mask);
+typedef void ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf, int attribute, unsigned int *value);
+typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long mask);
+
+#define glXCreateGLXPbufferSGIX GLXEW_GET_FUN(__glewXCreateGLXPbufferSGIX)
+#define glXDestroyGLXPbufferSGIX GLXEW_GET_FUN(__glewXDestroyGLXPbufferSGIX)
+#define glXGetSelectedEventSGIX GLXEW_GET_FUN(__glewXGetSelectedEventSGIX)
+#define glXQueryGLXPbufferSGIX GLXEW_GET_FUN(__glewXQueryGLXPbufferSGIX)
+#define glXSelectEventSGIX GLXEW_GET_FUN(__glewXSelectEventSGIX)
+
+#define GLXEW_SGIX_pbuffer GLXEW_GET_VAR(__GLXEW_SGIX_pbuffer)
+
+#endif /* GLX_SGIX_pbuffer */
+
+/* ------------------------- GLX_SGIX_swap_barrier ------------------------- */
+
+#ifndef GLX_SGIX_swap_barrier
+#define GLX_SGIX_swap_barrier 1
+
+typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier);
+typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max);
+
+#define glXBindSwapBarrierSGIX GLXEW_GET_FUN(__glewXBindSwapBarrierSGIX)
+#define glXQueryMaxSwapBarriersSGIX GLXEW_GET_FUN(__glewXQueryMaxSwapBarriersSGIX)
+
+#define GLXEW_SGIX_swap_barrier GLXEW_GET_VAR(__GLXEW_SGIX_swap_barrier)
+
+#endif /* GLX_SGIX_swap_barrier */
+
+/* -------------------------- GLX_SGIX_swap_group -------------------------- */
+
+#ifndef GLX_SGIX_swap_group
+#define GLX_SGIX_swap_group 1
+
+typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member);
+
+#define glXJoinSwapGroupSGIX GLXEW_GET_FUN(__glewXJoinSwapGroupSGIX)
+
+#define GLXEW_SGIX_swap_group GLXEW_GET_VAR(__GLXEW_SGIX_swap_group)
+
+#endif /* GLX_SGIX_swap_group */
+
+/* ------------------------- GLX_SGIX_video_resize ------------------------- */
+
+#ifndef GLX_SGIX_video_resize
+#define GLX_SGIX_video_resize 1
+
+#define GLX_SYNC_FRAME_SGIX 0x00000000
+#define GLX_SYNC_SWAP_SGIX 0x00000001
+
+typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display* display, int screen, int channel, Window window);
+typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int x, int y, int w, int h);
+typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display* display, int screen, int channel, GLenum synctype);
+typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display* display, int screen, int channel, int *x, int *y, int *w, int *h);
+typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
+
+#define glXBindChannelToWindowSGIX GLXEW_GET_FUN(__glewXBindChannelToWindowSGIX)
+#define glXChannelRectSGIX GLXEW_GET_FUN(__glewXChannelRectSGIX)
+#define glXChannelRectSyncSGIX GLXEW_GET_FUN(__glewXChannelRectSyncSGIX)
+#define glXQueryChannelDeltasSGIX GLXEW_GET_FUN(__glewXQueryChannelDeltasSGIX)
+#define glXQueryChannelRectSGIX GLXEW_GET_FUN(__glewXQueryChannelRectSGIX)
+
+#define GLXEW_SGIX_video_resize GLXEW_GET_VAR(__GLXEW_SGIX_video_resize)
+
+#endif /* GLX_SGIX_video_resize */
+
+/* ---------------------- GLX_SGIX_visual_select_group --------------------- */
+
+#ifndef GLX_SGIX_visual_select_group
+#define GLX_SGIX_visual_select_group 1
+
+#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028
+
+#define GLXEW_SGIX_visual_select_group GLXEW_GET_VAR(__GLXEW_SGIX_visual_select_group)
+
+#endif /* GLX_SGIX_visual_select_group */
+
+/* ---------------------------- GLX_SGI_cushion ---------------------------- */
+
+#ifndef GLX_SGI_cushion
+#define GLX_SGI_cushion 1
+
+typedef void ( * PFNGLXCUSHIONSGIPROC) (Display* dpy, Window window, float cushion);
+
+#define glXCushionSGI GLXEW_GET_FUN(__glewXCushionSGI)
+
+#define GLXEW_SGI_cushion GLXEW_GET_VAR(__GLXEW_SGI_cushion)
+
+#endif /* GLX_SGI_cushion */
+
+/* ----------------------- GLX_SGI_make_current_read ----------------------- */
+
+#ifndef GLX_SGI_make_current_read
+#define GLX_SGI_make_current_read 1
+
+typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void);
+typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+
+#define glXGetCurrentReadDrawableSGI GLXEW_GET_FUN(__glewXGetCurrentReadDrawableSGI)
+#define glXMakeCurrentReadSGI GLXEW_GET_FUN(__glewXMakeCurrentReadSGI)
+
+#define GLXEW_SGI_make_current_read GLXEW_GET_VAR(__GLXEW_SGI_make_current_read)
+
+#endif /* GLX_SGI_make_current_read */
+
+/* -------------------------- GLX_SGI_swap_control ------------------------- */
+
+#ifndef GLX_SGI_swap_control
+#define GLX_SGI_swap_control 1
+
+typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);
+
+#define glXSwapIntervalSGI GLXEW_GET_FUN(__glewXSwapIntervalSGI)
+
+#define GLXEW_SGI_swap_control GLXEW_GET_VAR(__GLXEW_SGI_swap_control)
+
+#endif /* GLX_SGI_swap_control */
+
+/* --------------------------- GLX_SGI_video_sync -------------------------- */
+
+#ifndef GLX_SGI_video_sync
+#define GLX_SGI_video_sync 1
+
+typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (uint* count);
+typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int* count);
+
+#define glXGetVideoSyncSGI GLXEW_GET_FUN(__glewXGetVideoSyncSGI)
+#define glXWaitVideoSyncSGI GLXEW_GET_FUN(__glewXWaitVideoSyncSGI)
+
+#define GLXEW_SGI_video_sync GLXEW_GET_VAR(__GLXEW_SGI_video_sync)
+
+#endif /* GLX_SGI_video_sync */
+
+/* --------------------- GLX_SUN_get_transparent_index --------------------- */
+
+#ifndef GLX_SUN_get_transparent_index
+#define GLX_SUN_get_transparent_index 1
+
+typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display* dpy, Window overlay, Window underlay, unsigned long *pTransparentIndex);
+
+#define glXGetTransparentIndexSUN GLXEW_GET_FUN(__glewXGetTransparentIndexSUN)
+
+#define GLXEW_SUN_get_transparent_index GLXEW_GET_VAR(__GLXEW_SUN_get_transparent_index)
+
+#endif /* GLX_SUN_get_transparent_index */
+
+/* -------------------------- GLX_SUN_video_resize ------------------------- */
+
+#ifndef GLX_SUN_video_resize
+#define GLX_SUN_video_resize 1
+
+#define GLX_VIDEO_RESIZE_SUN 0x8171
+#define GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD
+
+typedef int ( * PFNGLXGETVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float* factor);
+typedef int ( * PFNGLXVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float factor);
+
+#define glXGetVideoResizeSUN GLXEW_GET_FUN(__glewXGetVideoResizeSUN)
+#define glXVideoResizeSUN GLXEW_GET_FUN(__glewXVideoResizeSUN)
+
+#define GLXEW_SUN_video_resize GLXEW_GET_VAR(__GLXEW_SUN_video_resize)
+
+#endif /* GLX_SUN_video_resize */
+
+/* ------------------------------------------------------------------------- */
+
+#ifdef GLEW_MX
+#define GLXEW_EXPORT
+#else
+#define GLXEW_EXPORT extern
+#endif /* GLEW_MX */
+
+extern PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay;
+
+extern PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig;
+extern PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext;
+extern PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer;
+extern PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap;
+extern PFNGLXCREATEWINDOWPROC __glewXCreateWindow;
+extern PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer;
+extern PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap;
+extern PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow;
+extern PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable;
+extern PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib;
+extern PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs;
+extern PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent;
+extern PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig;
+extern PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent;
+extern PFNGLXQUERYCONTEXTPROC __glewXQueryContext;
+extern PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable;
+extern PFNGLXSELECTEVENTPROC __glewXSelectEvent;
+
+extern PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI;
+extern PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI;
+extern PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI;
+
+extern PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT;
+extern PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT;
+extern PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT;
+extern PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT;
+
+extern PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA;
+
+extern PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA;
+
+extern PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA;
+
+extern PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA;
+
+extern PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA;
+
+extern PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV;
+extern PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV;
+
+#ifdef GLX_OML_sync_control
+extern PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML;
+extern PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML;
+extern PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML;
+extern PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML;
+extern PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML;
+#endif
+
+extern PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX;
+extern PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX;
+extern PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX;
+extern PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX;
+extern PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX;
+extern PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX;
+
+extern PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX;
+extern PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX;
+extern PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX;
+extern PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX;
+extern PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX;
+
+extern PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX;
+extern PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX;
+
+extern PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX;
+
+extern PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX;
+extern PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX;
+extern PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX;
+extern PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX;
+extern PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX;
+
+extern PFNGLXCUSHIONSGIPROC __glewXCushionSGI;
+
+extern PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI;
+extern PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI;
+
+extern PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI;
+
+extern PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI;
+extern PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI;
+
+extern PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN;
+
+extern PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN;
+extern PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN;
+
+#if defined(GLEW_MX)
+struct GLXEWContextStruct
+{
+#endif /* GLEW_MX */
+
+GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_0;
+GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_1;
+GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_2;
+GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_3;
+GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_4;
+GLXEW_EXPORT GLboolean __GLXEW_3DFX_multisample;
+GLXEW_EXPORT GLboolean __GLXEW_ARB_fbconfig_float;
+GLXEW_EXPORT GLboolean __GLXEW_ARB_get_proc_address;
+GLXEW_EXPORT GLboolean __GLXEW_ARB_multisample;
+GLXEW_EXPORT GLboolean __GLXEW_ATI_pixel_format_float;
+GLXEW_EXPORT GLboolean __GLXEW_ATI_render_texture;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_import_context;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_scene_marker;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_visual_info;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_visual_rating;
+GLXEW_EXPORT GLboolean __GLXEW_MESA_agp_offset;
+GLXEW_EXPORT GLboolean __GLXEW_MESA_copy_sub_buffer;
+GLXEW_EXPORT GLboolean __GLXEW_MESA_pixmap_colormap;
+GLXEW_EXPORT GLboolean __GLXEW_MESA_release_buffers;
+GLXEW_EXPORT GLboolean __GLXEW_MESA_set_3dfx_mode;
+GLXEW_EXPORT GLboolean __GLXEW_NV_float_buffer;
+GLXEW_EXPORT GLboolean __GLXEW_NV_vertex_array_range;
+GLXEW_EXPORT GLboolean __GLXEW_OML_swap_method;
+GLXEW_EXPORT GLboolean __GLXEW_OML_sync_control;
+GLXEW_EXPORT GLboolean __GLXEW_SGIS_blended_overlay;
+GLXEW_EXPORT GLboolean __GLXEW_SGIS_color_range;
+GLXEW_EXPORT GLboolean __GLXEW_SGIS_multisample;
+GLXEW_EXPORT GLboolean __GLXEW_SGIS_shared_multisample;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_fbconfig;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_pbuffer;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_swap_barrier;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_swap_group;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_video_resize;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_visual_select_group;
+GLXEW_EXPORT GLboolean __GLXEW_SGI_cushion;
+GLXEW_EXPORT GLboolean __GLXEW_SGI_make_current_read;
+GLXEW_EXPORT GLboolean __GLXEW_SGI_swap_control;
+GLXEW_EXPORT GLboolean __GLXEW_SGI_video_sync;
+GLXEW_EXPORT GLboolean __GLXEW_SUN_get_transparent_index;
+GLXEW_EXPORT GLboolean __GLXEW_SUN_video_resize;
+
+#ifdef GLEW_MX
+}; /* GLXEWContextStruct */
+#endif /* GLEW_MX */
+
+/* ------------------------------------------------------------------------ */
+
+#ifdef GLEW_MX
+
+typedef struct GLXEWContextStruct GLXEWContext;
+extern GLenum glxewContextInit (GLXEWContext* ctx);
+
+#define GLXEW_GET_VAR(x) glxewGetContext()->x
+#define GLXEW_GET_FUN(x) x
+
+#else /* GLEW_MX */
+
+#define GLXEW_GET_VAR(x) x
+#define GLXEW_GET_FUN(x) x
+
+#endif /* GLEW_MX */
+
+extern GLboolean glxewGetExtension (const char* name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __glxew_h__ */
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/RenderTraverser.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/RenderTraverser.h	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/RenderTraverser.h	(revision 629)
@@ -0,0 +1,123 @@
+#ifndef NO_PRAGMA_ONCE
+#pragma once
+#endif
+
+#ifndef RENDERTRAVERSER_H
+#define RENDERTRAVERSER_H
+
+#include "glInterface.h"
+#include "HierarchyNode.h"
+#include <queue>
+//#include <priority_queue>
+#include <stack>
+
+using namespace std;
+
+typedef stack<HierarchyNode *> TraversalStack;
+typedef queue<HierarchyNode *> QueryQueue;
+typedef priority_queue<HierarchyNode *, vector<HierarchyNode *>, myless<vector<HierarchyNode *>::value_type> > PriorityQueue;
+
+class RenderTraverser
+{
+public:
+	enum {RENDER_CULL_FRUSTUM, RENDER_STOP_AND_WAIT, RENDER_COHERENT, NUM_RENDERMODES};
+
+	RenderTraverser();
+	//! Renders the scene with the specified method
+	/**
+		The mode is one of
+		RENDER_CULL_FRUSTUM: renders the scene with view frustum culling only
+		RENDER_STOP_AND_WAIT: renders the scene with the hierarchical stop and wait algorithm
+		RENDER_COHERENT: renders the scene with the coherent hierarchical algorithm
+	*/
+	void Render(int mode=RENDER_CULL_FRUSTUM);
+	//! sets the scene hierarchy.
+	void SetHierarchy(HierarchyNode *sceneRoot);
+	//! sets viewpoint
+	void SetViewpoint(Vector3 const &viewpoint);
+	//! sets view projection matrix
+	void SetProjViewMatrix(Matrix4x4 const &projViewMatrix);
+	//! returns root of hierarchy
+	HierarchyNode *GetHierarchy();
+	//! sets visible pixels threshold for visibility classification
+	void SetVisibilityThreshold(int threshold);
+	//! returns visibility threshold
+	int GetVisibilityThreshold();
+
+	// several statistics for a rendering pass
+	long GetRenderTime();
+	int GetNumTraversedNodes();
+	int GetNumQueryCulledNodes();
+	int GetNumFrustumCulledNodes();
+	int GetNumRenderedGeometry();
+
+	//! renders a visualization of the hierarchy
+	void RenderVisualization();
+
+	//! use optimization to take leaf nodes instead of bounding box for occlusion queries	
+	void SetUseOptimization(bool useOptimization);
+
+protected:
+
+	//! renders the scene with view frustum culling only
+	void RenderCullFrustum();
+	//! renders the scene with the hierarchical stop and wait algorithm
+	void RenderStopAndWait();
+	//! renders the scene with the coherent hierarchical algorithm and the query queye
+	void RenderCoherentWithQueue();
+	//! does some importand initialisations
+	void Preprocess();
+	
+	//! returns occlusion query result for specified node
+	int GetOcclusionQueryResult(HierarchyNode *node);
+	//! the node is traversed as usual
+	void TraverseNode(HierarchyNode *node);
+	//! visibility is pulled up from visibility of children 
+	void PullUpVisibility(HierarchyNode *node);
+	//! is result available from query queue?
+	bool ResultAvailable(HierarchyNode *node);
+	//! issues occlusion query for specified node
+	void IssueOcclusionQuery(HierarchyNode *node, bool wasVisible);
+	//! resets occlusion queries after a traversal
+	void ResetQueries();
+	//! does view frustum culling. returns intersect (if intersects view plane)
+	bool InsideViewFrustum(HierarchyNode *node, bool &intersects);
+	//! switches to normal render mode
+	void Switch2GLRenderState();
+	//! switches to occlusion query mode (geometry not rendered on the screen)
+	void Switch2GLQueryState();
+
+protected:
+
+	// the current clip planes of the view frustum
+	VecPlane mClipPlanes;
+	// the indices of the np-vertices of the bounding box for view frustum culling
+	int mNPVertexIndices[12];
+
+	Vector3 mViewpoint;
+	Matrix4x4 mProjViewMatrix;
+	HierarchyNode *mHierarchyRoot;
+	//TraversalStack mTraversalStack;
+	PriorityQueue mDistanceQueue; // use a priority queue rather than a renderstack
+	
+	//priority_queue<vector<HierarchyNode *>, HierarchyNode *> mPriorityQueue;
+	int mFrameID;
+	int mVisibilityThreshold;
+	unsigned int *mOcclusionQueries;
+	int mCurrentTestIdx;
+	bool mIsQueryMode;
+	
+	bool mIntersects;
+
+	// statistics
+	int mNumTraversedNodes;
+	int mNumQueryCulledNodes;
+	int mNumFrustumCulledNodes;
+	int mNumRenderedGeometry;
+
+	long mRenderTime;
+
+	bool mUseOptimization;
+};
+
+#endif // RENDERTRAVERSER_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/HierarchyNode.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/HierarchyNode.cpp	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/HierarchyNode.cpp	(revision 629)
@@ -0,0 +1,464 @@
+#include "HierarchyNode.h"
+#include "glInterface.h"
+#include <math.h>
+#include <limits.h>
+#include <float.h>
+
+typedef vector<Geometry *> GeometryList;
+
+// criteria and values partly taken from Piringer's thesis
+
+// values used as termination criteria for the tree generation
+// the overall surface
+float HierarchyNode::sSurfaceThreshold;
+// the maximum tree depth
+int HierarchyNode::sMaxDepth;
+// maximum number of objects in a node
+int HierarchyNode::sGeometryThreshold;
+
+// percentage of allowed deviation from the center split plane
+float HierarchyNode::sSplitBandwith;
+
+// also render bounding volume
+bool HierarchyNode::sRenderBoundingVolume = false;
+
+HierarchyNode::HierarchyNode(): mVisible(false), mLastVisited(0), 
+mParent(NULL), mOcclusionQuery(0), mAABValid(false), mLeftChild(NULL), mRightChild(NULL),
+mNumHierarchyNodes(1), mSplitAxis(X_AXIS), mLastRendered(-1), mSplitValue(0),
+mDepth(0), mEnclosedSpaceValid(false), mDistance(0)
+{
+	copyVector3Values(mBoundingBox.min, 0, 0, 0);
+	copyVector3Values(mBoundingBox.max, 0, 0, 0);
+
+	copyVector3Values(mEnclosedSpace.min, 0, 0, 0);
+	copyVector3Values(mEnclosedSpace.max, 0, 0, 0);
+
+	// bounding box color
+	mBoxColor[0] = mBoxColor[2] = 0; mBoxColor[1] = 1.0;
+}
+
+HierarchyNode::HierarchyNode(const Vector3 boundLower, const Vector3 boundUpper, 
+							 HierarchyNode *parent, int depth)
+:mNumHierarchyNodes(1), mOcclusionQuery(0), mLeftChild(NULL), 
+mRightChild(NULL), mSplitAxis(X_AXIS), mVisible(false), 
+mLastVisited(0), mParent(parent), mAABValid(false), 
+mLastRendered(-1), mSplitValue(0), mDepth(depth), 
+mEnclosedSpaceValid(true), mDistance(0)
+{
+	copyVector3Values(mBoundingBox.min, 0, 0, 0);
+	copyVector3Values(mBoundingBox.max, 0, 0, 0);
+
+	copyVector3(mEnclosedSpace.min, boundLower);
+	copyVector3(mEnclosedSpace.max, boundUpper);
+
+	float vol = calcAABoxSurface(mEnclosedSpace);
+
+	mBoxColor[0] = mBoxColor[2] = 0; mBoxColor[1] = 1.0;
+}
+
+
+void HierarchyNode::InitKdTree(HierarchyNode *root)
+{
+	sMaxDepth = (int)((log((float) root->GetGeometry().size())/log(2.0f)) * 20.0f);
+
+	sSurfaceThreshold = FLT_MAX;
+
+	// factor times mininal surface as determination criterium
+	const float factor = 2.5;
+
+	for (GeometryList::const_iterator it = root->GetGeometry().begin(); it != root->GetGeometry().end(); it++)
+	{
+		// same geometry can possible be in to or more nodes => also test for them
+		float surface = calcAABoxSurface((*it)->GetBoundingVolume()) * factor;
+
+		if(surface < sSurfaceThreshold) sSurfaceThreshold = surface;
+	}
+
+	// number of objects in a leaf
+	sGeometryThreshold = 1;
+
+	// percentage of allowed deviation from the center split plane
+	sSplitBandwith = 0.15;
+}
+
+
+HierarchyNode::~HierarchyNode()
+{
+	if(mLeftChild)
+		delete mLeftChild;
+
+	if(mRightChild)
+		delete mRightChild;
+}
+
+int HierarchyNode::Render()
+{
+	int renderedGeometry = 0;
+
+	if(sRenderBoundingVolume)
+	{
+		glColor3fv(mBoxColor);
+        RenderBoundingVolumeForVisualization();
+	}
+
+	// prevent the geometry to be rendered several times in the same frame
+	if(mLastRendered != mLastVisited)
+	{
+		for (GeometryList::const_iterator it = mGeometry.begin(); it != mGeometry.end(); it++)
+		{
+			// same geometry can possible be in to or more nodes => also test for them
+			if((*it)->GetLastVisited() != mLastVisited)
+			{
+				(*it)->SetLastVisited(mLastVisited);
+				(*it)->Render();
+				renderedGeometry ++;
+			}
+		}
+		mLastRendered = mLastVisited;
+	}
+
+	return renderedGeometry;
+}
+
+bool HierarchyNode::Visible()
+{
+	return mVisible;
+}
+
+void HierarchyNode::SetVisible(bool visible)
+{
+	mVisible = visible;
+}
+
+void HierarchyNode::SetLeftChild(HierarchyNode *child)
+{
+	mLeftChild = child;
+}
+
+void HierarchyNode::SetRightChild(HierarchyNode *child)
+{
+	mRightChild = child;
+}
+
+HierarchyNode *HierarchyNode::GetLeftChild()
+{
+	return mLeftChild;
+}
+
+HierarchyNode *HierarchyNode::GetRightChild()
+{
+	return mRightChild;
+}
+
+unsigned int HierarchyNode::LastVisited()
+{
+	return mLastVisited;
+}
+
+void HierarchyNode::SetLastVisited(unsigned int lastVisited)
+{
+	mLastVisited = lastVisited;
+}
+
+bool HierarchyNode::IsLeaf()
+{
+	return (!mLeftChild && !mRightChild);
+}
+
+void HierarchyNode::AddGeometry(Geometry *geometry)
+{
+	mGeometry.push_back(geometry);
+		
+	if(!mAABValid)
+	{
+		copyVector3(mBoundingBox.min, geometry->GetBoundingVolume().min);
+		copyVector3(mBoundingBox.max, geometry->GetBoundingVolume().max);
+
+		mAABValid = true;
+	}
+	else
+		combineAABoxes(&mBoundingBox, geometry->GetBoundingVolume());
+
+	// root node
+	if(mDepth == 0)
+	{
+		if(!mEnclosedSpaceValid)
+		{
+			copyVector3(mEnclosedSpace.min, geometry->GetBoundingVolume().min);
+			copyVector3(mEnclosedSpace.max, geometry->GetBoundingVolume().max);
+
+			mEnclosedSpaceValid = true;
+		}
+		else 
+			combineAABoxes(&mEnclosedSpace, geometry->GetBoundingVolume());	
+	}
+	else
+	{
+		// cut boxes so they fit into the enclosed space
+		clipAABoxByAABox(&mBoundingBox, mEnclosedSpace);
+	}
+}
+
+HierarchyNode *HierarchyNode::GetParent()
+{
+	return mParent;
+}
+
+int HierarchyNode::GetOcclusionQuery()
+{
+	return mOcclusionQuery;
+}
+
+void HierarchyNode::SetOcclusionQuery(int occlusionQuery)
+{
+	mOcclusionQuery = occlusionQuery;
+}
+
+void HierarchyNode::RenderBoundingVolume()
+{
+	Vector3x8 vertices;
+
+	calcAABoxPoints(vertices, mBoundingBox);
+
+	//glPolygonMode(GL_FRONT, GL_LINE);
+	//     7+------+6
+	//     /|     /|
+	//    / |    / |
+	//   / 4+---/--+5
+	// 3+------+2 /    y   z
+	//  | /    | /     |  /
+	//  |/     |/      |/
+	// 0+------+1      *---x
+
+	//---- render AABB
+	glBegin(GL_TRIANGLE_FAN);
+		glVertex3dv(vertices[6]);
+		glVertex3dv(vertices[5]);
+		glVertex3dv(vertices[4]);
+		glVertex3dv(vertices[7]);
+		glVertex3dv(vertices[3]);
+		glVertex3dv(vertices[2]);
+		glVertex3dv(vertices[1]);
+		glVertex3dv(vertices[5]);
+	glEnd();
+
+	//---- render second half of AABB
+	glBegin(GL_TRIANGLE_FAN);
+		glVertex3dv(vertices[0]);
+		glVertex3dv(vertices[1]);
+		glVertex3dv(vertices[2]);
+		glVertex3dv(vertices[3]);
+		glVertex3dv(vertices[7]);
+		glVertex3dv(vertices[4]);
+		glVertex3dv(vertices[5]);
+		glVertex3dv(vertices[1]);
+	glEnd();
+}
+
+
+void HierarchyNode::RenderBoundingVolumeForVisualization()
+{
+	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+	glDisable(GL_LIGHTING);
+	glDisable(GL_CULL_FACE);
+		
+	RenderBoundingVolume();
+
+	glEnable(GL_CULL_FACE);
+	glEnable(GL_LIGHTING);
+	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+}
+
+
+
+const AABox &HierarchyNode::GetBoundingVolume()
+{
+	return mBoundingBox;
+}
+
+int	HierarchyNode::GenerateKdTree()
+{
+	// check the termination criterium (a heuristic)
+	if (SimpleEnough()) 
+	{
+		return 1;
+	}
+
+	// largest dimension will be split
+	Vector3 size;
+	diffVector3(size, mBoundingBox.max, mBoundingBox.min);
+    
+	if (size[X_AXIS] > size[Y_AXIS])	
+		mSplitAxis	= (size[X_AXIS] > size[Z_AXIS]) ? X_AXIS : Z_AXIS;
+	else					
+		mSplitAxis	= (size[Y_AXIS] > size[Z_AXIS]) ? Y_AXIS : Z_AXIS;
+
+	// select the value of the split plane
+	mSplitValue = ComputeSplitPlane();
+	
+	// generate the children
+	Vector3 changedLower;
+	Vector3 changedUpper;
+
+	copyVector3(changedLower, mEnclosedSpace.min);
+	copyVector3(changedUpper, mEnclosedSpace.max);
+	   	
+	changedLower[mSplitAxis] = mSplitValue;
+	changedUpper[mSplitAxis] = mSplitValue;
+
+	mLeftChild	= new HierarchyNode(mEnclosedSpace.min, changedUpper, this, mDepth + 1);
+	mRightChild	= new HierarchyNode(changedLower, mEnclosedSpace.max, this, mDepth + 1);
+
+	// add the geometry to the according children
+	for (GeometryList::iterator it = mGeometry.begin(); it != mGeometry.end(); it++)
+	{
+		if ((*it)->GetBoundingVolume().min[mSplitAxis] >= mSplitValue)
+		{
+			// box lies completely within right part
+			mRightChild->AddGeometry(*it);
+		}
+		else if ((*it)->GetBoundingVolume().max[mSplitAxis] <= mSplitValue)
+		{
+			// box lies completely within left part
+			mLeftChild->AddGeometry((*it));
+		}
+		else
+		{
+			//---- box intersects both parts
+			mLeftChild->AddGeometry((*it));
+			mRightChild->AddGeometry((*it));
+		}
+	}
+
+	//---- we continue with the children
+	int leftSize  = mLeftChild->GenerateKdTree();
+	int rightSize = mRightChild->GenerateKdTree();
+
+	// since the geometry is now referenced by the children
+	mGeometry.clear();
+	
+	mNumHierarchyNodes = leftSize + rightSize + 1;
+
+	return mNumHierarchyNodes;
+}
+
+bool HierarchyNode::SimpleEnough()
+{
+	return ((mGeometry.size() <= (unsigned int)sGeometryThreshold) ||
+		    (calcAABoxSurface(mBoundingBox) <= sSurfaceThreshold) ||
+			(sMaxDepth <= mDepth));
+}
+
+float HierarchyNode::ComputeSplitPlane()
+{
+	float left	= mBoundingBox.min[mSplitAxis];
+	float right	= mBoundingBox.max[mSplitAxis];
+
+	// the smaller the value returned from the heuristic, the better => big starting value
+	float bestValue	= FLT_MAX; 
+	float result = 0.0f;
+
+	bool found	= false;
+
+	// calculate the borders of the band
+	float currLeft, currRight;
+	currLeft = currRight = (left + right) / 2.0f;
+	
+	currLeft  -= (right - left) * sSplitBandwith;
+	currRight += (right - left) * sSplitBandwith;
+
+	// check all geometry within that node
+	for (GeometryList::const_iterator it = mGeometry.begin(); it != mGeometry.end(); it++)
+	{
+		// one border of the geometry's AABB
+		float leftPlane	 = (*it)->GetBoundingVolume().min[mSplitAxis];
+		// the other border of the geometry's AABB
+		float rightPlane = (*it)->GetBoundingVolume().max[mSplitAxis];
+		
+		// only consider planes that lie within the band
+		if ((leftPlane > currLeft) && (leftPlane < currRight))
+		{
+			// compute the heuristic for the left plane and note the value if it was good
+			float currValue	= ComputeHeuristics(leftPlane);
+
+			if (currValue < bestValue)
+			{
+				bestValue = currValue;
+				result	  = leftPlane;
+				found	  = true;
+			}
+		}
+
+		if ((rightPlane > currLeft) && (rightPlane < currRight))
+		{
+			// compute the heuristic for the right plane and note the value if it was good
+			float currValue = ComputeHeuristics(rightPlane);
+
+			if (currValue < bestValue)
+			{
+				bestValue	= currValue;
+				result		= rightPlane;
+				found		= true;
+			}
+		}
+	}
+
+	// in case we haven't found any proper plane, we simply take the center
+	if (!found)	
+		result = (left + right) / 2.0f;
+			
+	return result;
+}
+
+float HierarchyNode::ComputeHeuristics(float pos)
+{
+	// this implements a very simple heuristic: it simply counts the nodes being intersected by the splitplane
+	float result = 0.0f;
+
+	for (GeometryList::const_iterator it = mGeometry.begin(); it != mGeometry.end(); it++)
+	{
+		if (((*it)->GetBoundingVolume().min[mSplitAxis] < pos) &&
+			((*it)->GetBoundingVolume().max[mSplitAxis] > pos))
+		{
+			result += 1.0f;
+		}
+	}
+
+	return result;
+}
+
+int HierarchyNode::GetNumHierarchyNodes()
+{
+	return mNumHierarchyNodes;
+}
+
+void HierarchyNode::PushChildrenOrdered(const Vector3 viewpoint, TraversalStack &traversalStack)
+{
+	if(viewpoint[mSplitAxis] > mSplitValue)
+	{
+		traversalStack.push(mLeftChild);
+		traversalStack.push(mRightChild);
+	}
+	else
+	{
+		traversalStack.push(mRightChild);
+		traversalStack.push(mLeftChild);
+	}
+}
+
+
+void HierarchyNode::SetRenderBoundingVolume(bool renderBoundingVolume)
+{
+	sRenderBoundingVolume = renderBoundingVolume;
+}
+
+
+GeometryList &HierarchyNode::GetGeometry()
+{
+	return mGeometry;
+}
+
+void HierarchyNode::SetDistance(float distance)
+{
+	mDistance = distance;
+}
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/glInterface.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/glInterface.h	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/glInterface.h	(revision 629)
@@ -0,0 +1,25 @@
+//Copyright and Disclaimer:
+//This code is copyright Vienna University of Technology, 2004.
+
+#ifndef NO_PRAGMA_ONCE
+#pragma once
+#endif
+
+#ifndef GLINTERFACE_H
+#define GLINTERFACE_H
+
+//includes an openGL extension header file
+//http://glew.sourceforge.net/
+#include "GL/glew.h"
+//includes the glut header file
+#include "GL/glut.h"
+
+//includes  windows specific stuff
+#ifdef _WIN32
+	#include "GL/wglew.h"
+#else
+//include linux specific stuff
+	#include "GL/glxew.h"
+#endif	
+
+#endif // GLINTERFACE_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/HierarchyNode.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/HierarchyNode.h	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/HierarchyNode.h	(revision 629)
@@ -0,0 +1,168 @@
+#ifndef NO_PRAGMA_ONCE
+#pragma once
+#endif
+
+#ifndef HIERARCHYNODE_H
+#define HIERARCHYNODE_H
+
+#include "Geometry.h"
+extern "C"
+{
+	#include "DataTypes.h"
+}
+#include <vector>
+#include <stack>
+
+using namespace std;
+
+class HierarchyNode;
+
+/**
+	This class implements the compare operator for the priority queue.
+	a lower distance has a higher value in the queue
+*/
+template <typename T> class myless
+{
+public:
+	
+	//bool operator() (HierarchyNode *v1, HierarchyNode *v2) const
+	bool operator() (T v1, T v2) const
+    {
+		return (v1->mDistance > v2->mDistance);
+    }
+};
+
+/** This class represents a node in a k-d tree hierarchy. A
+	node has two children. The node can be either an interior node (i.e., left and right child
+	NULL) or a leaf node, which holds the actual geometry.
+*/
+
+class HierarchyNode
+{
+	friend class myless;
+
+public:
+	typedef stack<HierarchyNode *> TraversalStack;
+    typedef vector<Geometry *> GeometryList;
+
+	HierarchyNode();
+	HierarchyNode(const Vector3 boundLower, const Vector3 boundUpper, 
+				 HierarchyNode *parent, int depth);
+	~HierarchyNode();
+	//! was this node visible the last time it was visited?
+	bool Visible();
+	//! last time this node was visited (in framenumber)
+	unsigned int LastVisited();
+	//! sets visible flag
+	void SetVisible(bool visible);
+	//! sets timestamp (current framenumber)
+	void SetLastVisited(unsigned int lastVisited);
+	//! is this node a leaf node (i.e., geometry)
+	bool IsLeaf();
+	//! renders the geometry in this node. returns number of rendered geometry
+	int Render();
+	//! returns occlusion query id
+	int GetOcclusionQuery();
+	//! sets occlusion query id
+	void SetOcclusionQuery(int occlusionQuery);
+	//! renders the bounding volume  (i.e., a axis aligned bounding box) of the node
+	void RenderBoundingVolume();
+	//! adds geometry to this node (rendered if this node is a leaf)
+	void AddGeometry(Geometry *geometry);
+
+	void SetLeftChild(HierarchyNode *child);
+	void SetRightChild(HierarchyNode *child);
+
+	HierarchyNode *GetParent();
+    HierarchyNode *GetLeftChild();
+	HierarchyNode *GetRightChild();
+
+	//! compute bounding volume (i.e., a axis aligned bounding box) for this geometry.
+	//void CalcBoundingVolume();
+	const AABox& GetBoundingVolume();
+	
+	//! generates the kd-tree from this root-node, returns number of nodes in hierarchy.
+	int	GenerateKdTree();
+
+	//! returns number of nodes in hierarchy with this node.
+	int GetNumHierarchyNodes();
+
+	//! add children of this node ordered to a traversal stack with respect to the view point
+	void PushChildrenOrdered(const Vector3 viewpoint, TraversalStack &traversalStack);
+
+	//! if this node was culled, set the type of culling (frustum, query)
+	void SetCulledType(int culledtype);
+	//! returns type of culling
+	int GetCulledType();
+	//! set gl state to visible render bounding volume
+	void RenderBoundingVolumeForVisualization();
+	//! returns geometry list
+	GeometryList &GetGeometry();
+
+	//! visibly renders also bounding volume of this node
+	static void SetRenderBoundingVolume(bool renderBoundingVolume);
+	
+	/**
+		initialises the static termination criteria.
+		shall be called after all geometry has been added to the root node.
+	*/
+	static void InitKdTree(HierarchyNode *root);
+
+	float GetSquaredDistance();
+	void SetDistance(float distance);
+
+	float mDistance;
+
+protected:
+	
+	enum {X_AXIS, Y_AXIS, Z_AXIS};
+
+	//! criteria to stop the splitting of this kd-tree node
+	bool SimpleEnough();
+	//! split plane of the kd-tree (according to mSplitAxis, it is the x, y, or z axis)
+	float ComputeSplitPlane();
+
+	/** calculates a value that expresses if it's reasonable to split the 
+	   node at the specified position (the smaller the value the better the split)
+	   */
+	float ComputeHeuristics(float pos);
+
+	GeometryList mGeometry;
+	//! id of this occlusion query of this node
+	int mOcclusionQuery;
+
+	HierarchyNode *mLeftChild;	
+	HierarchyNode *mRightChild;
+	HierarchyNode *mParent;
+	
+	bool  mVisible;
+	int mLastVisited;
+	bool mAABValid;
+	bool mEnclosedSpaceValid;
+	int mNumHierarchyNodes;
+	
+	AABox mBoundingBox;
+	// the enclosed space of the pure kd-treenode (without considering the geometry)
+	AABox mEnclosedSpace;
+	
+	int mSplitAxis;
+	int mLastRendered;
+	float mSplitValue;
+	int mDepth;
+
+	static bool sRenderBoundingVolume;
+	static float sSplitBandwith;
+
+	// --termination criteria
+
+	static int sGeometryThreshold;
+	// the maximum bounding box surface
+	static float HierarchyNode::sSurfaceThreshold;
+	// the maximum tree depth
+	static int HierarchyNode::sMaxDepth;
+	// the default bounding box drawing color
+	float mBoxColor[3];
+	// distance to the view point
+};
+
+#endif // HIERARCHYNODE_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/stdafx.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/stdafx.cpp	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/stdafx.cpp	(revision 629)
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+// occquery.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Readme.txt
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Readme.txt	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Readme.txt	(revision 629)
@@ -0,0 +1,101 @@
+HARDWARE OCCLUSION QUERIES MADE USEFUL
+======================================
+
+This programn is a demonstration of the Coherent Hierarchical Culling algorithm 
+described in the chapter "Hardware Occlusion Queries Made Useful" of the book GPU 
+Gems II. Additional information and sample images are available at
+
+http://www.cg.tuwien.ac.at/research/vr/chcull/
+
+Updates to this demo can can be found on the same webpage.
+
+Copyright and Disclaimer:
+
+This code is copyright Vienna University of Technology, 2004.
+
+
+Please feel FREE to COPY and USE the code to include it in your own work,
+provided you include this copyright notice.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Author of this demo:
+
+Oliver Mattausch (matt@cg.tuwien.ac.at)
+
+Authors of the book chapter:
+
+Michael Wimmer (wimmer@cg.tuwien.ac.at)
+Jiri Bittner (bittner@cg.tuwien.ac.at)
+
+Date: December 18, 2004
+
+----------
+Input
+----------
+
+Help for keybord and mouse is available with F1.
+
+You can switch between the different occlusion modes described in the book chapter using the 
+SPACE key (view-frustum culling, hierarchical stop and wait, coherent hierarchical culling).
+
+A visualization of the culling algorithm from can be shown by pressing '1' on the keyboard. Note that the 
+classification of nodes usually changes in consecutive frames, so that the hierarchy seems to oscillate. 
+This is expected, since the classification of previously visible interior nodes is based on the classification 
+of their children, which might be more accurate (leading to the interior node to become occluded) than the 
+query for the node itself.
+
+----------
+The scene
+----------
+
+The scene used in this program consists of basic objects randomly placed in a box. The extent of the box and the 
+number and size of objects can be changed (see F1).
+
+The hierarchical structure is a kd-tree with objects intersecting a split plane placed into multiple leaf nodes.
+
+By playing with the parameters and moving around, the user can explore situtations where occlusion culling is extremly 
+useful, and where it is not (because the objects are too sparse or there is too much to see from this viewpoint).
+
+The hierarchical coherent culling algorithm is compared to simple view-frustum culling and the hierarchical stop and wait 
+algorithm (which also uses hardware occlusion queries, but in a less sophisticated way).
+
+----------
+Installation
+----------
+
+A binary for Win32 is included.
+
+The program should compile under Windows and Linux, a CMAKE makefile for multi-platform
+compilation is included (see www.cmake.org for details).
+
+For Linux, you need to have a working GLUT and GLEW installation.
+
+----------
+Structure
+----------
+
+This demo is written in C++ and partly C and uses OpenGL.
+It has few external needs like limits.h, stdlib.h, math.h, string.h, stdio.h, or time.h.
+We also make heavy use of stl classes, like priority_queue.
+
+The program expects the GL_ARB_occlusion_query extension.
+
+The program and especially the mathematical routines are not designed for speed or
+efficiency, but for simplicity and clarity.
+
+RenderTraverser.cpp: implements the core algorithm described in the paper
+
+occquery.cpp: contains the OpenGl setup code, glut stuff, and sets up of the scene hierarchy
+HierarchyNode.cpp: contains a kd-tree hierarchy implementation, which can be traversed by the culling algorithm
+Geometry.cpp: represents simple drawable geometry, so that we have something to cull for the algorithm
+
+Timers.cpp: contains exact timer functions in order to accurately measure the frame render time
+stdafx.cpp: source file that includes just the standard includes
+glInterface.h: includes gl, glut and glew headers
+DataTypes.c: defines basic geometric datatypes
+MathStuff.c: declares some handy mathematical routines
+teapot.h: contains the teapot geometry
+
+If you find any problem with the code or have any comments, we would like to hear from you!
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/occquery.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/occquery.cpp	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/occquery.cpp	(revision 629)
@@ -0,0 +1,828 @@
+// occquery.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+
+extern "C"
+{
+	#include "MathStuff.h"
+	#include "DataTypes.h"
+}
+
+#include "glInterface.h"
+#include "RenderTraverser.h"
+#include <math.h>
+#include <time.h>
+
+double nearDist = 0.1; // eye near plane distance
+int winWidth, winHeight;
+int objectType = Geometry::TEAPOT;
+int nextObjectType = objectType;
+
+float visZoomFactor = 1.5f;
+
+bool showHelp = false;
+bool showStatistics = true;
+bool showBoundingVolumes = false;
+bool visMode = false;
+bool showCreateParams = false;
+
+// traverses and renders the hierarchy
+RenderTraverser traverser;
+
+Vector3 eyePos = {0.0, 0.0, 3.0};  // eye position 
+Vector3 viewDir = {0.0, 0.0, -1.0};  // eye view dir 
+Vector3 lightDir = {0.0, 0.0, 1.0};  // light dir 
+
+Matrix4x4 eyeView; // eye view matrix
+Matrix4x4 eyeProjection; // eye projection matrix
+Matrix4x4 eyeProjView; //= eyeProjection*eyeView
+Matrix4x4 invEyeProjView; //= eyeProjView^(-1)
+Matrix4x4 visView; // visualisation view matrix
+
+//mouse navigation state
+int xEyeBegin, yEyeBegin, yMotionBegin, verticalMotionBegin, horizontalMotionBegin = 0;
+int renderMode = RenderTraverser::RENDER_COHERENT;
+
+// relative size of an object
+float objectSize = 3.5f;
+
+int numObjects = 2000;
+int numNextObjects = numObjects;
+float zLength = 30.0f;
+
+// this defines the volume where objects can be drawn
+Vector3 minTranslation = {-2.5f, -2.5f, -3.0f};
+Vector3 maxTranslation = {2.5f, 2.5f, -3.0 - zLength};
+
+const float minAngle = 0;
+const float maxAngle = 360;
+
+const int renderTimeSize = 100;
+long renderTimes[renderTimeSize];
+int renderTimesIdx = 0;
+int renderTimesValid = 0;
+
+typedef vector<Geometry *> GeometryList;
+GeometryList geometry;
+
+bool useOptimization = true;
+
+Vector3 amb[2];
+Vector3 dif[2];
+Vector3 spec[2];
+
+void begin2D(void);
+void end2D(void);
+void output(const int x, const int y, const char *string);
+void initGLstate(void);
+void keyboard(const unsigned char c, const int x, const int y);
+void drawHelpMessage(void);
+void drawStatistics(void);
+void display(void);
+void special(const int c, const int x, const int y);
+void reshape(const int w, const int h);
+void mouse(int button, int state, int x, int y);
+void initExtensions(void);
+void leftMotion(int x, int y);
+//void rightMotion(int x, int y);
+void middleMotion(int x, int y);
+void drawEyeView(void);
+void setupEyeView(void);
+void setupVisView(void);
+void updateEyeMtx(void);
+long calcRenderTime(void);
+void resetTimer(void);
+void cleanUp(void);
+void calcDecimalPoint(string &str, int d);
+
+HierarchyNode* generateHierarchy(int numObjects);
+Geometry *generateGeometry(Vector3 translateRatio, float xRotRatio, 
+						   float yRotRatio, float zRotRatio, int materialIdx);
+void displayVisualization();
+
+void deleteGeometry();
+
+
+int _tmain(int argc, _TCHAR* argv[])
+{
+	glutInitWindowSize(800,600);
+	glutInit(&argc,argv);
+	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
+	
+	glutCreateWindow("Coherent Hierarchical Culling");
+
+	glutDisplayFunc(display);
+	glutKeyboardFunc(keyboard);
+	glutSpecialFunc(special);
+	glutReshapeFunc(reshape);
+	glutMouseFunc(mouse);
+	glutIdleFunc(display);
+	initExtensions();
+	initGLstate();
+
+	leftMotion(0,0);
+	middleMotion(0,0);
+	
+	HierarchyNode *hierarchy = generateHierarchy(numObjects);
+	traverser.SetHierarchy(hierarchy);
+
+	/// initialise rendertime array
+	for(int i=0; i<renderTimeSize; i++)
+		renderTimes[i] = 0;
+
+	glutMainLoop();
+
+	// clean up
+	cleanUp();
+	
+	return 0;
+}
+
+
+void initGLstate(void) 
+{
+	glClearColor(0.6, 0.6, 0.8, 1.0);
+	
+	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+	glPixelStorei(GL_PACK_ALIGNMENT,1); 
+	
+	glDepthRange(0.0, 1.0);
+	glClearDepth(1.0);
+	glDepthFunc(GL_LESS);
+
+	glEnable(GL_LIGHTING);
+	glEnable(GL_LIGHT0);
+
+	glShadeModel(GL_SMOOTH);
+	
+	GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 };
+	GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
+	GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 };
+	GLfloat position[] = { 0.0, 3.0, 3.0, 0.0 };
+    
+	GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
+	GLfloat local_view[] = { 0.0 };
+
+	glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
+	glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
+	glLightfv(GL_LIGHT0, GL_POSITION, position);
+	
+	glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
+	glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
+
+	glMaterialf(GL_FRONT, GL_SHININESS, 64);
+	glEnable(GL_NORMALIZE);
+			
+	glFrontFace(GL_CCW);
+	glCullFace(GL_BACK);
+	glEnable(GL_CULL_FACE);
+	
+	glClearColor(0.2, 0.2, 0.8, 0.0);
+
+	setupVisView();
+}
+
+
+void drawHelpMessage(void) 
+{
+	const char *message[] = 
+	{
+		"Help information",
+		"",
+		"'F1'           - shows/dismisses this message",
+		"'F2'           - decreases number of objects (valid after scene recreation)",
+		"'F3'           - increases number of objects (valid after scene recreation)",
+		"'F4'           - decreases box length in z direction (valid after scene recreation)",
+		"'F5'           - increases box length in z direction (valid after scene recreation)",
+		"'F6'           - decreases object size (valid after scene recreation)",
+		"'F7'           - increases object size (valid after scene recreation)",
+		"'F8'           - cycles through object types (teapot, ...) (valid after scene recreation)",
+		"",
+		"'MOUSE-LEFT'   - turn left/right, move forward/backward",
+		"'MOUSE-RIGHT'  - turn left/right, move forward/backward",
+		"'MOUSE-MIDDLE' - move up/down, left/right",
+		"'CURSOR UP'    - move forward",
+		"'CURSOR BACK'  - move backward",
+		"'CURSOR RIGHT' - turn right",
+		"'CURSOR LEFT'  - turn left",
+		"",
+		"'SPACE'        - cycles through occlusion culling algorithms",
+		"'-'            - decreases visibility threshold",
+		"'+'            - increases visibility threshold",
+		"'C'            - recreates the scene hierarchy",
+		"'G'            - enables/disables optimization to take geometry as occluder",
+		"",
+		"'R'            - shows/hides recreation parameters",
+		"'S'            - shows/hides statistics",
+		"'V'            - shows/hides bounding volumes",
+		"",
+		"'1'            - shows/hides visualization",
+		"'2'            - zooms out visualization",
+		"'3'            - zooms in visualization",
+		0,
+	};
+	
+	int i;
+	int x = 40, y = 42;
+	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	glEnable(GL_BLEND);
+	glColor4f(0.0,1.0,0.0,0.2);  // 20% green. 
+
+	// Drawn clockwise because the flipped Y axis flips CCW and CW. 
+	glRecti(winWidth - 30, 30, 30, winHeight - 30);
+	
+	glDisable(GL_BLEND);
+	
+
+	glColor3f(1.0,1.0,1.0);
+	for(i = 0; message[i] != 0; i++) {
+		if(message[i][0] == '\0') {
+			y += 7;
+		} else {
+			output(x,y,message[i]);
+			y += 14;
+		}
+	}
+
+}
+
+// generates a teapot, all parameters between zero and one
+Geometry *generateGeometry(Vector3 translationRatio, float xRotRatio, 
+						   float yRotRatio, float zRotRatio, int materialIdx)
+{
+	float xRot = minAngle + xRotRatio * (maxAngle - minAngle);
+	float yRot = minAngle + yRotRatio * (maxAngle - minAngle);
+	float zRot = minAngle + zRotRatio * (maxAngle - minAngle);
+
+	Vector3 translation;
+	translation[0] = minTranslation[0] + translationRatio[0] * (maxTranslation[0] - minTranslation[0]);
+	translation[1] = minTranslation[1] + translationRatio[1] * (maxTranslation[1] - minTranslation[1]);
+	translation[2] = minTranslation[2] + translationRatio[2] * (maxTranslation[2] - minTranslation[2]);
+
+	Geometry *result = new Geometry(translation, xRot, yRot, zRot, objectSize, objectType);
+
+	result->SetAmbientColor(amb[materialIdx][0], amb[materialIdx][1], amb[materialIdx][2]);
+	result->SetDiffuseColor(dif[materialIdx][0], dif[materialIdx][1], dif[materialIdx][2]);
+	result->SetSpecularColor(spec[materialIdx][0], spec[materialIdx][1], spec[materialIdx][2]);
+
+	return result;
+}
+
+// generates a the scene hierarchy with random values
+HierarchyNode* generateHierarchy(int numObjects)
+{
+    HierarchyNode *hierarchy = new HierarchyNode();
+
+	// initialise materials
+	copyVector3Values(amb[0], 0.0215, 0.1745, 0.0215);
+	copyVector3Values(dif[0], 0.727811, 0.633, 0.6);
+	copyVector3Values(spec[0], 0.633, 0.727811, 0.633);
+
+	copyVector3Values(amb[1], 0.1745, 0.01175, 0.01175);
+	copyVector3Values(dif[1], 0.61424, 0.04136, 0.04136);
+	copyVector3Values(spec[1], 0.727811, 0.626959, 0.626959);
+
+	srand (time (0));
+	
+	printf("generating geometry with random position and orientation ... ");
+
+	for(int i=0; i < numObjects; i++)
+	{
+		float xRotRatio = rand() / (float) RAND_MAX;
+		float yRotRatio = rand() / (float) RAND_MAX;
+		float zRotRatio = rand() / (float) RAND_MAX;
+
+		Vector3 translationRatio = {rand() / (float) RAND_MAX, 
+									rand() / (float) RAND_MAX, 
+									rand() / (float) RAND_MAX};
+
+		int materialIdx = int(2 * rand() / (float) RAND_MAX);
+			
+		Geometry *geo = generateGeometry(translationRatio, xRotRatio, 
+									     yRotRatio, zRotRatio, materialIdx);
+		hierarchy->AddGeometry(geo);
+
+		// put into global geometry list for later deletion
+		geometry.push_back(geo);
+	}
+
+	printf("finished\n");
+	printf("generating new kd-tree hierarchy ... ");
+	HierarchyNode::InitKdTree(hierarchy);
+	hierarchy->GenerateKdTree();
+	printf("finished\n");
+
+	return hierarchy;
+}
+
+
+void updateEyeMtx(void) 
+{
+	const Vector3 up = {0.0, 1.0, 0.0};
+
+	look(eyeView, eyePos, viewDir, up);
+	mult(eyeProjView, eyeProjection, eyeView); //eyeProjView = eyeProjection*eyeView
+	invert(invEyeProjView, eyeProjView); //invert matrix
+}
+
+
+void setupEyeView(void)
+{
+	glMatrixMode(GL_PROJECTION);
+	glLoadMatrixd(eyeProjection);
+
+	glMatrixMode(GL_MODELVIEW);
+	glLoadMatrixd(eyeView);
+}
+
+
+void display(void) 
+{
+	char * msg[] = {"Frustum culling only", "Hierarchical stop and wait",
+				    "Coherent hierarchical culling"};
+
+	char msg2[200];
+	char msg3[200];
+	char msg4[100];
+	char msg5[100];
+	char msg6[100];
+	char msg7[100];
+	char msg8[100];
+
+	sprintf(msg2, "Traversed: %4d, frustum culled: %4d, query culled: %4d (of %d nodes)",
+			traverser.GetNumTraversedNodes(), traverser.GetNumFrustumCulledNodes(),
+			traverser.GetNumQueryCulledNodes(), 
+			traverser.GetHierarchy()->GetNumHierarchyNodes());
+	
+	char *optstr[2] = {"", ", using optimization"};
+	
+	float fps = 1000.0;
+	long renderTime = calcRenderTime();
+	if(renderTime) fps = 1000000.0f / (float)calcRenderTime();
+
+	sprintf(msg3, "Threshold: %4d, algorithm rendering time: %ld ms (%3.3f fps)%s", 
+			traverser.GetVisibilityThreshold(), renderTime / 1000, fps, optstr[useOptimization]);
+
+	string str;
+	string str2;
+
+	calcDecimalPoint(str, Geometry::CountTriangles(objectType) * traverser.GetNumRenderedGeometry());
+	calcDecimalPoint(str2, Geometry::CountTriangles(objectType) * numObjects);
+
+	sprintf(msg4, "Rendered objects %d (of %d), rendered triangles: %s (of %s)", 
+			traverser.GetNumRenderedGeometry(), numObjects, str.c_str(), str2.c_str()); 
+
+	sprintf(msg5, "Next object num: %d", numNextObjects);
+	sprintf(msg6, "Next length in z dir: %3.3f", zLength);
+	
+	char *objectTypeStr[3] = {"teapot", "torus", "sphere"};
+
+	sprintf(msg7, "Next object type: %s", objectTypeStr[nextObjectType]);
+	sprintf(msg8, "Next object size: %3.3f", objectSize);
+
+	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+	updateEyeMtx(); // bring eye modelview matrix up-to-date
+	setupEyeView();
+
+	traverser.SetViewpoint(eyePos);
+	traverser.SetProjViewMatrix(eyeProjView);
+	traverser.Render(renderMode);
+
+	// cycle through rendertime array
+	renderTimes[renderTimesIdx] = traverser.GetRenderTime();
+	renderTimesIdx = (renderTimesIdx + 1) % renderTimeSize;
+
+	if(renderTimesIdx  > renderTimesValid) 
+		renderTimesValid = renderTimesIdx;
+
+	if(visMode)
+	{
+		displayVisualization();
+	}
+	
+	begin2D();
+	if(showHelp)
+		drawHelpMessage();
+	else
+	{
+		glColor3f(1.0,1.0,1.0);
+		output(10,winHeight-10, msg[renderMode]);
+
+		if(showStatistics)
+		{
+			if(showCreateParams)
+			{
+				output(10, winHeight-150, msg8);
+				output(10, winHeight-130, msg7);
+				output(10, winHeight-110, msg6);
+				output(10, winHeight-90,  msg5);
+			}
+			output(10, winHeight-70, msg3);
+			output(10, winHeight-50, msg4);
+			output(10, winHeight-30, msg2);
+		}
+	}
+	end2D();
+
+	glutSwapBuffers();
+}
+
+
+#pragma warning( disable : 4100 )
+void keyboard(const unsigned char c, const int x, const int y) 
+{
+	int threshold;
+	HierarchyNode *hierarchy;
+
+	switch(c) 
+	{
+	case 27:
+		exit(0);
+		break;
+	case 32: //space
+		renderMode = (renderMode + 1) % RenderTraverser::NUM_RENDERMODES;
+		
+		resetTimer();
+		traverser.Render(renderMode);		// render once so stats are updated
+		break;
+	case 'h':
+	case 'H':
+		showHelp = !showHelp;
+		break;
+	case 'v':
+	case 'V':
+		showBoundingVolumes = !showBoundingVolumes;
+		HierarchyNode::SetRenderBoundingVolume(showBoundingVolumes);
+		break;
+	case 's':
+	case 'S':
+		showStatistics = !showStatistics;
+		break;
+	case '+':
+		threshold = traverser.GetVisibilityThreshold() + 10;
+		traverser.SetVisibilityThreshold(threshold);
+		break;
+	case '-':
+		threshold = traverser.GetVisibilityThreshold() - 10;
+		if(threshold < 0) threshold = 0;
+
+		traverser.SetVisibilityThreshold(threshold);		
+		break;
+	case '1':
+		visMode = !visMode;
+		break;
+	
+	case '2':
+		visZoomFactor += 0.1;	
+		setupVisView();
+		break;
+	case '3':
+		visZoomFactor -= 0.1;
+		if(visZoomFactor < 0.1) visZoomFactor = 0.1;
+	
+		setupVisView();
+		break;
+	case 'r':
+	case 'R':
+		showCreateParams = !showCreateParams;
+		break;
+	case 'g':
+	case 'G':
+		useOptimization = !useOptimization;
+		traverser.SetUseOptimization(useOptimization);
+		break;
+	case 'c':
+	case 'C':	
+		
+		hierarchy = traverser.GetHierarchy();
+		// delete old hierarchy
+		if(hierarchy) delete hierarchy; 
+		deleteGeometry();
+
+		maxTranslation[2] = -3.0 - zLength;
+		numObjects = numNextObjects;
+		objectType = nextObjectType;
+		
+		hierarchy = generateHierarchy(numObjects);
+		traverser.SetHierarchy(hierarchy);
+
+		showCreateParams = false;
+
+		traverser.Render(renderMode); // render once to update stats
+		resetTimer();
+		break;
+
+	default:
+		return;
+	}
+
+	glutPostRedisplay();
+}
+
+
+void special(const int c, const int x, const int y) 
+{
+	// used to avoid vertical motion with the keys
+	Vector3 hvec = {viewDir[0], 0, viewDir[2]};
+	
+	switch(c) 
+	{
+	case GLUT_KEY_F1:
+		showHelp = !showHelp;
+		break;
+	case GLUT_KEY_F2:
+		numNextObjects -= 100;
+		if(numNextObjects < 100) numNextObjects = 100;
+		break;
+	case GLUT_KEY_F3:
+        numNextObjects += 100;
+		break;
+	case GLUT_KEY_F4:
+		zLength -= 1;
+		if(zLength < 0) zLength = 0;
+		break;
+	case GLUT_KEY_F5:
+		zLength += 1;
+		break;		
+	case GLUT_KEY_F6:
+		objectSize -= 0.1;
+		if(objectSize < 0.1) objectSize = 0.1;
+		break;
+	case GLUT_KEY_F7:
+		objectSize += 0.1;
+		break;
+	case GLUT_KEY_F8:
+		nextObjectType = (nextObjectType + 1) % Geometry::NUM_OBJECTS;
+		break;
+	case GLUT_KEY_LEFT:
+		rotateVectorY(viewDir, 0.2);
+		break;
+	case GLUT_KEY_RIGHT:
+		rotateVectorY(viewDir, -0.2);
+		break;
+	case GLUT_KEY_UP:
+		linCombVector3(eyePos, eyePos, hvec, 0.6);
+		break;
+	case GLUT_KEY_DOWN:
+		linCombVector3(eyePos, eyePos, hvec, -0.6);
+		break;
+	default:
+		return;
+
+	}
+
+	glutPostRedisplay();
+}
+#pragma warning( default : 4100 )
+
+
+void reshape(const int w, const int h) 
+{
+	double winAspectRatio = 1.0;
+
+	glViewport(0, 0, w, h);
+	
+	winWidth = w;
+	winHeight = h;
+
+	if(w) winAspectRatio = (double) h / (double) w;
+
+	perspectiveDeg(eyeProjection, 60.0, 1.0/winAspectRatio, nearDist, 150.0);
+
+	glutPostRedisplay();
+}
+
+
+void mouse(int button, int state, int x, int y) 
+{
+	if(((button == GLUT_LEFT_BUTTON) || (button == GLUT_RIGHT_BUTTON)) && state == GLUT_DOWN) 
+	{
+		xEyeBegin = x;
+		yMotionBegin = y;
+
+		glutMotionFunc(leftMotion);
+	}
+	else if(button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN)
+	{
+		horizontalMotionBegin = x;
+		verticalMotionBegin = y;
+		glutMotionFunc(middleMotion);
+	}
+
+	glutPostRedisplay();
+}
+
+/**
+	rotation for left/right mouse drag
+	motion for up/down mouse drag
+*/
+void leftMotion(int x, int y) 
+{
+	static double eyeXAngle = 0.0;
+	// not move in the vertical direction
+	Vector3 horView = {viewDir[0], 0, viewDir[2]};
+	
+	eyeXAngle = 0.6 *  PI * (xEyeBegin - x) / 180.0;
+	linCombVector3(eyePos, eyePos, horView, (yMotionBegin - y) * 0.1);
+	
+	rotateVectorY(viewDir, eyeXAngle);
+	
+	xEyeBegin = x;
+	yMotionBegin = y;
+
+	glutPostRedisplay();
+}
+
+// strafe
+void middleMotion(int x, int y) 
+{
+	// the 90 degree rotated view vector 
+	// y zero so we don't move in the vertical
+	Vector3 rVec = {viewDir[0], 0, viewDir[2]};
+	
+	rotateVectorY(rVec, PI / 2.0);
+	linCombVector3(eyePos, eyePos, rVec, (horizontalMotionBegin - x) * 0.1);
+	
+	eyePos[1] += (verticalMotionBegin - y) * 0.1;
+
+	horizontalMotionBegin = x;
+	verticalMotionBegin = y;
+
+	glutPostRedisplay();
+}
+
+
+void initExtensions(void) 
+{
+	GLenum err = glewInit();
+	if(GLEW_OK != err) {
+		// problem: glewInit failed, something is seriously wrong
+		fprintf(stderr,"Error: %s\n",glewGetErrorString(err));
+		exit(1);
+	}
+
+	if(!GLEW_ARB_occlusion_query) {
+		printf("I require the GL_ARB_occlusion_query OpenGL extension to work.\n");
+		exit(1);
+	}
+}
+
+
+void begin2D(void) 
+{
+	glDisable(GL_LIGHTING);
+	glDisable(GL_DEPTH_TEST);
+
+	glPushMatrix();
+	glLoadIdentity();
+
+	glMatrixMode(GL_PROJECTION);
+	glPushMatrix();
+	glLoadIdentity();
+	gluOrtho2D(0, winWidth, winHeight, 0);
+}
+
+
+void end2D(void) 
+{
+	glPopMatrix();
+	glMatrixMode(GL_MODELVIEW);
+	glPopMatrix();
+
+	glEnable(GL_LIGHTING);
+	glEnable(GL_DEPTH_TEST);
+}
+
+
+void output(const int x, const int y, const char *string) 
+{
+	if(string != 0) 
+	{
+		int len, i;
+		glRasterPos2f(x,y);
+		len = (int) strlen(string);
+		
+		for (i = 0; i < len; i++) 
+		{
+			glutBitmapCharacter(GLUT_BITMAP_8_BY_13,string[i]);
+		}
+	}
+}
+
+// explicitly deletes geometry generated for hierarchy 
+// (deleting the hierarchy does not delete the geometry)
+void deleteGeometry()
+{
+	for (GeometryList::iterator it = geometry.begin(); it != geometry.end(); it++)
+		if(*it)	delete (*it);
+	
+	geometry.clear();
+}
+
+// displays the visualisation of the kd tree node culling
+void displayVisualization()
+{
+	begin2D();
+	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	glEnable(GL_BLEND);
+	glColor4f(0.0,0.0,0.0,0.5); 
+
+	glRecti(winWidth, 0, winWidth / 2, winHeight / 2);
+	glDisable(GL_BLEND);
+	end2D();
+
+	glViewport(winWidth / 2, winHeight / 2, winWidth, winHeight);
+	glPushMatrix();
+	glLoadMatrixd(visView);
+	
+	glClear(GL_DEPTH_BUFFER_BIT);
+
+	// --- visualization of the occlusion culling
+	HierarchyNode::SetRenderBoundingVolume(true);
+	traverser.RenderVisualization();
+	HierarchyNode::SetRenderBoundingVolume(showBoundingVolumes);
+
+	glPopMatrix();
+	glViewport(0, 0, winWidth, winHeight);
+}
+
+/**
+	sets up view matrix in order to get a good position 
+	for viewing the kd tree node culling
+*/
+void setupVisView()
+{
+	const Vector3 up = {0.0, 1.0, 0.0};
+	
+	Vector3 visPos = {24, 23, -6};
+	
+	visPos[0] *= visZoomFactor; 
+	visPos[1] *= visZoomFactor; 
+	visPos[2] *= visZoomFactor;
+
+	Vector3 visDir = {-1.3,-1,-1};
+	
+	normalize(visDir);
+	look(visView, visPos, visDir, up);
+}
+
+// we take a couple of measurements and compute the average
+long calcRenderTime()
+{
+	long result = 0;
+
+	for(int i=0; i<renderTimesValid; i++)
+		result += renderTimes[i];
+    
+	if(renderTimesValid)
+		result /= renderTimesValid;
+
+	return result;
+}
+
+
+// reset the timer array for a new traversal method
+void resetTimer()
+{
+	renderTimesValid = 0;
+	renderTimesIdx = 0;
+}
+
+// cleanup routine after the main loop
+void cleanUp()
+{
+	if(traverser.GetHierarchy()) 
+		delete traverser.GetHierarchy();
+
+	deleteGeometry();
+
+	Geometry::CleanUp();
+}
+
+// this function inserts a dezimal point after each 1000
+void calcDecimalPoint(string &str, int d)
+{
+	vector<int> numbers;
+	char hstr[100];
+
+	while(d != 0)
+	{
+		numbers.push_back(d % 1000);
+		d /= 1000;
+	}
+
+	// first element without leading zeros
+	if(numbers.size() > 0)
+	{
+		sprintf(hstr, "%d", numbers.back());
+		str.append(hstr);
+	}
+	
+	for(int i=numbers.size()-2; i >= 0; i--)
+	{
+		sprintf(hstr, ",%03d", numbers[i]);
+		str.append(hstr);
+	}
+}
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Geometry.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Geometry.cpp	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/Geometry.cpp	(revision 629)
@@ -0,0 +1,538 @@
+#include "Geometry.h"
+#include "glInterface.h"
+#include "stdio.h"
+#include "teapot.h"
+#include <math.h>
+
+#define NO_LIST    -1
+#define STRIP_END  -1
+
+int Geometry::num_torus_indices;
+int Geometry::num_torus_vertices;
+int Geometry::num_torus_normals;
+
+const int Geometry::torus_precision = 24;
+const int Geometry::sphere_precision = 24;
+
+float *Geometry::torus_vertices;
+float *Geometry::torus_normals;
+int *Geometry::torus_indices;
+
+// choose size so the glut-rendered sphere is approximately
+// as big as the other objects
+const float Geometry::sphere_radius = 1.0 / 9.0f;
+const float Geometry::torus_inner_radius = 0.05;
+const float Geometry::torus_outer_radius = 0.07;
+
+int Geometry::sDisplayList[NUM_OBJECTS];
+
+bool Geometry::sIsInitialised = Init();
+
+Geometry::Geometry(): 
+mXRotation(0), mYRotation(0), mZRotation(0), mScale(1.0), mObjectType(TEAPOT)
+{
+	copyVector3Values(mTranslation, 0, 0, 0);
+	
+	SetAmbientColor(0.1745, 0.01175, 0.01175);
+	SetDiffuseColor(0.61424, 0.04136, 0.04136);
+	SetSpecularColor(0.727811, 0.626959, 0.626959);
+	
+	CalcBoundingVolume();
+	CalcTransform();
+	GenerateList();
+}
+
+Geometry::Geometry(Vector3 translation, float xRot, float yRot, float zRot, float scale, int objectType):
+mXRotation(xRot), mYRotation(yRot), mZRotation(zRot), mScale(scale), mObjectType(objectType)
+{
+	copyVector3(mTranslation, translation);
+
+	SetAmbientColor(0.1745, 0.01175, 0.01175);
+	SetDiffuseColor(0.61424, 0.04136, 0.04136);
+	SetSpecularColor(0.727811, 0.626959, 0.626959);
+	
+	CalcBoundingVolume();
+	CalcTransform();
+	GenerateList();
+}
+
+void Geometry::ResetLists()
+{
+	for(int i = 0; i < NUM_OBJECTS; i++)
+	{
+        if(sDisplayList[i] == NO_LIST)
+			glDeleteLists(sDisplayList[i], 1);
+
+		sDisplayList[i] = NO_LIST;
+	}
+}
+
+void Geometry::CleanUp()
+{
+	ResetLists();
+
+	delete [] torus_vertices;
+	delete [] torus_normals;
+	delete [] torus_indices;
+}
+
+
+bool Geometry::Init()
+{
+	for(int i=0; i < NUM_OBJECTS; i++)
+		sDisplayList[i] = NO_LIST;
+
+	// parameters chosen so torus is approximately as big as teapot
+	CreateTorus(torus_inner_radius, torus_outer_radius, torus_precision);
+
+	return true;
+}
+
+void Geometry::GenerateList()
+{
+	if(sDisplayList[mObjectType] == NO_LIST)
+	{
+		sDisplayList[mObjectType] = glGenLists(1);
+		glNewList(sDisplayList[mObjectType], GL_COMPILE);
+
+		switch(mObjectType)
+		{
+			case TEAPOT:
+				RenderTeapot();
+				break;
+			case TORUS:
+				RenderTorus();
+				break;
+			case SPHERE:	
+				RenderSphere();
+				break;
+			
+			default:
+				break;
+		}
+		glEndList();
+	}
+}
+
+void Geometry::Render()
+{
+	glMaterialfv(GL_FRONT, GL_AMBIENT, mAmbientColor);
+	glMaterialfv(GL_FRONT, GL_DIFFUSE, mDiffuseColor);
+	glMaterialfv(GL_FRONT, GL_SPECULAR, mSpecularColor);
+	
+	glPushMatrix();
+	
+	Transform();
+	
+	glCallList(sDisplayList[mObjectType]);
+
+	glPopMatrix();
+}
+
+
+//! sets rotations around the three axis: executed in the order specified here
+void Geometry::SetRotations(float xRot, float yRot, float zRot)
+{
+	mXRotation = xRot;
+	mYRotation = yRot;
+	mZRotation = zRot;
+
+	CalcBoundingVolume();
+	CalcTransform();
+}
+
+
+void Geometry::SetTranslation(Vector3 translation)
+{
+	copyVector3(mTranslation, translation);
+
+	CalcBoundingVolume();
+	CalcTransform();
+}
+
+
+void Geometry::SetScale(float scale)
+{
+	mScale = scale;
+	CalcTransform();
+
+	CalcBoundingVolume();
+}
+
+
+void Geometry::SetAmbientColor(float ambientR, float ambientG, float ambientB)
+{
+	mAmbientColor[0] = ambientR;
+	mAmbientColor[1] = ambientG;
+	mAmbientColor[2] = ambientB;
+}
+
+
+void Geometry::SetDiffuseColor(float diffuseR, float diffuseG, float diffuseB)
+{
+	mDiffuseColor[0] = diffuseR;
+	mDiffuseColor[1] = diffuseG;
+	mDiffuseColor[2] = diffuseB;
+}
+
+
+void Geometry::SetSpecularColor(float specularR, float specularG, float specularB)
+{
+	mSpecularColor[0] = specularR;
+	mSpecularColor[1] = specularG;
+	mSpecularColor[2] = specularB;
+}
+
+
+float Geometry::GetScale()
+{
+	return mScale;
+}
+
+
+void Geometry::GetTranslation(Vector3 translation)
+{
+	copyVector3(translation, mTranslation);
+}
+
+
+void Geometry::GetRotations(float &xRot, float &yRot, float &zRot)
+{
+	xRot = mXRotation;
+	yRot = mYRotation;
+	zRot = mZRotation;
+}
+
+	
+const AABox &Geometry::GetBoundingVolume()
+{
+	return mBoundingBox;
+}
+
+
+void Geometry::SetLastVisited(int lastVisited)
+{
+	mLastVisited = lastVisited;
+}
+
+
+int Geometry::GetLastVisited()
+{
+	return mLastVisited;
+}
+
+
+void Geometry::SetObjectType(int type)
+{
+	mObjectType = type;
+	GenerateList();
+}
+
+
+void Geometry::RenderTeapot()
+{
+	int i = 0;
+
+	while(i < num_teapot_indices)
+	{
+		glBegin(GL_TRIANGLE_STRIP);
+			while(teapot_indices[i] != STRIP_END)
+			{	
+				int index = teapot_indices[i] * 3;
+				
+				glNormal3fv(teapot_normals + index);
+				glVertex3fv(teapot_vertices + index);
+				
+				i++;		
+			}
+		glEnd();
+		
+		i++; // skip strip end flag
+	}
+}
+
+void Geometry::CalcBoundingVolume()
+{
+    switch(mObjectType)
+	{
+		case TORUS:
+			CalcBoundingVolume(torus_vertices, num_torus_vertices);
+			break;
+		case SPHERE:
+			CalcSphereBoundingVolume();
+			break;
+		case TEAPOT:
+			CalcBoundingVolume(teapot_vertices, num_teapot_vertices);
+			break;
+		default:
+			break;
+	}
+}
+
+
+void Geometry::CalcBoundingVolume(float *vertices, const int num_vertices)
+{
+	Vector3 *rotatedPoints = new Vector3[num_vertices];
+	
+	for(int i = 0; i < num_vertices; i++)
+	{
+		copyVector3Values(rotatedPoints[i], vertices[i * 3],
+						  vertices[i * 3 + 1], vertices[i * 3 + 2]);
+	
+		rotateVectorZ(rotatedPoints[i], mZRotation * PI_180);
+		rotateVectorY(rotatedPoints[i], mYRotation * PI_180);
+		rotateVectorX(rotatedPoints[i], mXRotation * PI_180);
+	}
+
+	calcCubicHull(mBoundingBox.min, mBoundingBox.max, rotatedPoints, num_vertices);
+
+	for(int i=0; i< 3; i++)
+	{
+		mBoundingBox.min[i] *= mScale;
+		mBoundingBox.max[i] *= mScale;
+	}
+
+	addVector3(mBoundingBox.min, mTranslation, mBoundingBox.min);
+    addVector3(mBoundingBox.max, mTranslation, mBoundingBox.max);
+
+	delete [] rotatedPoints;
+}
+
+
+void Geometry::CalcSphereBoundingVolume()
+{
+	float len = mScale * sphere_radius;
+	Vector3 size = {len, len, len};
+					
+	diffVector3(mBoundingBox.min, mTranslation, size);
+	addVector3(mBoundingBox.max, mTranslation, size);
+}
+
+
+void Geometry::RenderTorus()
+{
+	glVertexPointer(3, GL_FLOAT, sizeof(float), torus_vertices);
+	glEnableClientState(GL_VERTEX_ARRAY);
+
+	glNormalPointer(GL_FLOAT, sizeof(float), torus_normals);
+	glEnableClientState(GL_NORMAL_ARRAY);
+
+    glDrawElements(GL_TRIANGLES, num_torus_indices, GL_UNSIGNED_INT, torus_indices);
+
+	glDisableClientState(GL_VERTEX_ARRAY);
+	glDisableClientState(GL_NORMAL_ARRAY);
+}
+
+/*
+	creates a torus with specified radii, with number of rings and ring
+	subdivision = precision.
+*/
+void Geometry::CreateTorus(float innerRadius, float outerRadius, int precision)
+{
+	num_torus_vertices = num_torus_normals = (precision + 1) * (precision + 1);
+	num_torus_indices = 2 * precision * precision * 3;
+
+	torus_vertices = new float[num_torus_vertices * 3];
+	torus_normals = new float[num_torus_normals * 3];
+	torus_indices = new int[num_torus_indices];
+
+	for(int i=0; i<precision+1; i++)
+	{
+		int index = i * 3;
+
+		Vector3 currentVertex = {innerRadius, 0.0f, 0.0f};
+		rotateVectorZ(currentVertex, ((float)i * 2.0 * PI) / (float)precision);
+
+		currentVertex[0] += outerRadius;
+		
+		Vector3 sTangent = {0.0f, 0.0f, -1.0f};
+		Vector3 tTangent = {0, -1, 0};
+		rotateVectorZ(tTangent, ((float)i * 2.0 * PI) / (float)precision);
+
+      	Vector3 currentNormal;
+
+		cross(currentNormal, tTangent, sTangent);
+
+		torus_normals[index + 0] = currentNormal[0];
+		torus_normals[index + 1] = currentNormal[1];
+		torus_normals[index + 2] = currentNormal[2];
+		
+		torus_vertices[index + 0] = currentVertex[0];
+		torus_vertices[index + 1] = currentVertex[1];
+		torus_vertices[index + 2] = currentVertex[2];
+	}
+
+	for(int i_rng=1; i_rng<precision+1; ++i_rng)
+	{
+		for(int i=0; i<precision+1; ++i)
+		{
+			int index = 3 * (i_rng * (precision + 1) + i);
+
+			Vector3 currentVertex = {torus_vertices[i*3], torus_vertices[i*3+1], torus_vertices[i*3+2]};
+			
+			rotateVectorY(currentVertex, ((float)i_rng * 2.0 * PI) / (float)precision);
+						
+			Vector3 currentNormal = {torus_normals[i*3], torus_normals[i*3+1], torus_normals[i*3+2]};
+			
+			rotateVectorY(currentNormal, ((float)i_rng * 2.0 * PI) / (float)precision);
+
+			torus_normals[index + 0] = currentNormal[0];
+			torus_normals[index + 1] = currentNormal[1];
+			torus_normals[index + 2] = currentNormal[2];
+		
+			torus_vertices[index + 0] = currentVertex[0];
+			torus_vertices[index + 1] = currentVertex[1];
+			torus_vertices[index + 2] = currentVertex[2];
+		}
+	}
+
+	for(i_rng=0; i_rng<precision; ++i_rng)
+	{
+		for(i=0; i<precision; ++i)
+		{
+			int index = ((i_rng * precision + i) * 2) * 3;
+
+			torus_indices[index+0] = (i_rng     * (precision+1) + i)*3;
+			torus_indices[index+1] = ((i_rng+1) * (precision+1) + i)*3;
+			torus_indices[index+2] = (i_rng     * (precision+1) + i + 1)*3;
+
+			index = ((i_rng * precision + i) * 2 + 1) * 3;
+
+			torus_indices[index+0] = (i_rng     * (precision+1) + i + 1)*3;
+			torus_indices[index+1] = ((i_rng+1) * (precision+1) + i)*3;
+			torus_indices[index+2] = ((i_rng+1) * (precision+1) + i + 1)*3;
+		}
+	}
+}
+
+/**
+	counts the triangles of the teapot.
+	traverses through all the triangle strips.
+*/
+int Geometry::CountTeapotTriangles()
+{
+	int result = 0;
+	int i=0;
+	// n - 2 triangles are drawn for a strip
+	while(i < num_teapot_indices)
+	{
+		while(teapot_indices[i] != STRIP_END)
+		{	
+			result ++;;
+			i++;		
+		}
+		result -= 2;
+		i++; // skip STRIP_END
+	}
+	return result;
+}
+
+/**
+	counts the triangles of the torus
+*/
+int Geometry::CountTorusTriangles()
+{
+	// every 3 indices specify one triangle
+	return num_torus_indices / 3;
+}
+
+/**
+	counts the triangles of the sphere.
+	sphere_precision / 2 + 1 strips with sphere_precision * 2 - 2 triangles each
+*/
+int Geometry::CountSphereTriangles()
+{
+	return sphere_precision * sphere_precision;
+}
+
+
+int Geometry::CountTriangles(int objectType)
+{
+	int result = 0;
+
+	switch(objectType)
+	{
+		case TEAPOT:
+			result = CountTeapotTriangles();
+			break;
+		case TORUS:
+			result = CountTorusTriangles();
+			break;
+		case SPHERE:	
+			result = CountSphereTriangles();
+			break;
+		default:
+			break;
+	}
+	return result;
+}
+
+
+void Geometry::Transform()
+{
+	glMultMatrixd(mTransform);
+}
+
+void Geometry::CalcTransform()
+{
+	Matrix4x4 scale;
+	Matrix4x4 xrot;
+	Matrix4x4 yrot;
+	Matrix4x4 zrot;
+	Matrix4x4 transl;
+
+	makeScaleMtx(scale, mScale, mScale, mScale);
+	makeTranslationMtx(transl, mTranslation);
+	makeRotationXMtx(xrot, mXRotation * PI_180);
+	makeRotationYMtx(yrot, mYRotation * PI_180);
+	makeRotationZMtx(zrot, mZRotation * PI_180);
+
+	copyMatrix(mTransform, IDENTITY);
+	mult(mTransform, mTransform, transl);
+	mult(mTransform, mTransform, xrot);
+	mult(mTransform, mTransform, yrot);
+	mult(mTransform, mTransform, zrot);
+	mult(mTransform, mTransform, scale);
+}
+
+/**
+   renders a sphere with sphere_precision subdivisions.
+   note: works only for even sphere_precision
+*/
+void Geometry::RenderSphere()
+{
+	Vector3 vertex;
+
+	// this algorithm renders the triangles clockwise
+	glFrontFace(GL_CW);
+
+	for (int j = 0; j < sphere_precision/2; ++j) 
+	{
+		double alpha = j * PI * 2.0 / (double)sphere_precision - PI_2;
+		double beta = (j + 1) * PI * 2.0 / (double)sphere_precision - PI_2;
+
+		glBegin(GL_TRIANGLE_STRIP);
+
+		for (int i = 0; i <= sphere_precision; ++i) 
+		{
+			double gamma = i * PI * 2.0 / (double)sphere_precision;
+	
+			vertex[0] = sphere_radius * cos(beta) * cos(gamma);
+			vertex[1] = sphere_radius * sin(beta);
+			vertex[2] = sphere_radius * cos(beta) * sin(gamma);
+
+			glNormal3dv(vertex);
+			glVertex3dv(vertex);
+
+			vertex[0] = sphere_radius * cos(alpha) * cos(gamma);
+			vertex[1] = sphere_radius * sin(alpha);
+			vertex[2] = sphere_radius * cos(alpha) * sin(gamma);
+
+		    glNormal3dv(vertex);
+			glVertex3dv(vertex);
+
+		}
+		glEnd();
+	}
+	glFrontFace(GL_CCW);
+}
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/CMakeLists.txt
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/CMakeLists.txt	(revision 629)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OpenGL/CMakeLists.txt	(revision 629)
@@ -0,0 +1,11 @@
+PROJECT (occquery C)
+
+ADD_EXECUTABLE(occquery DataTypes.c occquery.cpp MathStuff.c  DataTypes.h MathStuff.h HierarchyNode.h HierarchyNode.cpp Geometry.h Geometry.cpp RenderTraverser.cpp RenderTraverser.h Timers.h Timers.cpp)
+
+IF (WIN32)
+  TARGET_LINK_LIBRARIES(occquery ${CMAKE_CURRENT_SOURCE_DIR}/GL/glew32.lib)
+  TARGET_LINK_LIBRARIES(occquery ${CMAKE_CURRENT_SOURCE_DIR}/GL/glut32.lib)
+ELSE (WIN32)
+  TARGET_LINK_LIBRARIES(occquery glew)
+  TARGET_LINK_LIBRARIES(occquery glut)
+ENDIF (WIN32)
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreOcclusionQueriesQueryManager.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreOcclusionQueriesQueryManager.h	(revision 370)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreOcclusionQueriesQueryManager.h	(revision 370)
@@ -0,0 +1,82 @@
+#ifndef _OcclusionQueriesQueryManager_H__
+#define _OcclusionQueriesQueryManager_H__
+
+#include "OgrePlatformQueryManager.h"
+
+namespace Ogre {
+  
+/**
+	Class which implements a query manager for Ogre scene queries using occlusion queries.
+*/
+class __declspec(dllexport) OcclusionQueriesQueryManager: public PlatformQueryManager
+{
+public:
+    /** Constructor taking a hierarchy interface as an argument. This allows to operate
+		on different hierarchy types, while reusing the implementation of the query methods.
+    */
+	OcclusionQueriesQueryManager(PlatformHierarchyInterface *hierarchyInterface, Viewport *vp,
+								 int queryModes, int itemBufferMode);
+    
+    void ComputeCameraVisibility(const Camera &camera,
+			    GtpVisibility::NodeInfoContainer *visibleNodes,
+			    GtpVisibility::MeshInfoContainer *visibleGeometry,
+				GtpVisibility::PatchInfoContainer *visiblePatches,
+			    bool relativeVisibility = false);
+    
+    /** 
+	Uses the specified point to execute the visibility query in all directions. 
+	@sa ComputeCameraVisibility()
+    */
+    void ComputeFromPointVisibility(const Vector3 &point,
+			       GtpVisibility::NodeInfoContainer *visibleNodes,
+			       GtpVisibility::MeshInfoContainer *visibleGeometry,
+				   GtpVisibility::PatchInfoContainer *visiblePatches,
+			       bool relativeVisibility = false);
+    
+
+protected:
+
+	void CollectGeometryVisibility(GtpVisibility::QueryList::iterator &visQueryIt, 
+								   GtpVisibility::QueryList::iterator &projQueryIt,
+								   GtpVisibility::GeometryVector *geometryList, 
+								   GtpVisibility::MeshInfoContainer *visibleGeometry,
+								   bool relativeVisibility);
+
+	void CollectNodeVisibility(GtpVisibility::QueryList::iterator &visQueryIt, 
+							   GtpVisibility::QueryList::iterator &projQueryIt,
+							   GtpVisibility::NodeVector *nodeList, 
+							   GtpVisibility::NodeInfoContainer *visibleNodes,
+							   bool relativeVisibility);
+
+	void CollectRelativeGeometryVisibilityForItemBuffer(GtpVisibility::QueryList::iterator &projQueryIt,
+												GtpVisibility::GeometryVector *geometryList, 
+												GtpVisibility::MeshInfoContainer *visibleGeometry);
+
+	void CollectRelativePatchVisibilityForItemBuffer(
+									GtpVisibility::QueryList::iterator &projQueryIt,
+									GtpVisibility::PatchVector *patchList, 
+									GtpVisibility::PatchInfoContainer *visiblePatches);
+
+	void CollectPatchVisibility(GtpVisibility::QueryList::iterator &visQueryIt, 
+								GtpVisibility::QueryList::iterator &projQueryIt,
+								GtpVisibility::PatchVector *patchList, 
+								GtpVisibility::PatchInfoContainer *visiblePatches,
+								bool relativeVisibility);
+
+	void RemoveDuplicateNodes(GtpVisibility::NodeInfoContainer *visibleNodes);
+	void RemoveDuplicateGeometry(GtpVisibility::MeshInfoContainer *visibleMesh);
+	void RemoveDuplicatePatches(GtpVisibility::PatchInfoContainer *visiblePatches);
+
+	/** Returns the patches of the geometry of a given node. 
+		@param node the node containing the patches
+		@param patchList the patches are returned in this list
+	*/
+	virtual void GetNodePatchList(GtpVisibility::HierarchyNode *node,	
+					 			  GtpVisibility::PatchVector *patchList);
+
+	int mItemBufferMode;
+};
+
+} // namespace Ogre
+
+#endif // OcclusionQueriesQueryManager
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSceneNodeHierarchyInterface.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSceneNodeHierarchyInterface.h	(revision 370)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSceneNodeHierarchyInterface.h	(revision 370)
@@ -0,0 +1,51 @@
+#ifndef _SceneNodeHierarchyInterface_H__
+#define _SceneNodeHierarchyInterface_H__
+
+#include "OgrePlatformHierarchyInterface.h"
+#include "VisibilityInfo.h"
+#include "QueryManager.h"
+
+
+namespace Ogre {
+
+/**
+	This class implements the hierarchy interface for the Ogre scene node hierarchy.
+*/
+class SceneNodeHierarchyInterface: public PlatformHierarchyInterface
+{
+public:
+	/** Construction taking the current scene manager and the current 
+		rendersystem as argument
+		@param sm current scene manager
+		@param rsys current render system 
+	*/
+	SceneNodeHierarchyInterface(SceneManager *sm, RenderSystem *rsys);
+	
+	bool IsLeaf(GtpVisibility::HierarchyNode *node) const;
+	
+	void TraverseNode(GtpVisibility::HierarchyNode *node);
+	void RenderNode(GtpVisibility::HierarchyNode *node);
+	void PullUpVisibility(GtpVisibility::HierarchyNode *node) const;
+	bool HasGeometry(GtpVisibility::HierarchyNode *node) const;
+	float GetSquaredDistance(GtpVisibility::HierarchyNode *node) const;
+
+	void SetNodeVisible(GtpVisibility::HierarchyNode *node, const bool visible) const;
+	void SetLastVisited(GtpVisibility::HierarchyNode *node, 
+						const unsigned int frameId) const;
+
+	bool IsNodeVisible(GtpVisibility::HierarchyNode *node) const;
+	unsigned int LastVisited(GtpVisibility::HierarchyNode *node) const;
+
+	AxisAlignedBox *GetBoundingBox(GtpVisibility::HierarchyNode *node);
+
+	void VisualizeCulledNode(GtpVisibility::HierarchyNode *node, 
+							GtpVisibility::CullingType type) const;
+	
+	void GetNodeGeometryList(GtpVisibility::HierarchyNode *node,	
+					 GtpVisibility::GeometryVector *geometryList, 
+					 bool includeChildren);
+
+};
+
+} // namespace Ogre
+#endif // SceneNodeHierarchyInterface_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityTerrainSceneManager.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityTerrainSceneManager.h	(revision 347)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityTerrainSceneManager.h	(revision 347)
@@ -0,0 +1,167 @@
+#ifndef _VisibilityTerrainSceneManager_H__
+#define _VisibilityTerrainSceneManager_H__
+
+#include <OgreSceneNode.h>
+#include <OgreTerrainSceneManager.h>
+#include <OgreOctreeNode.h>
+#include <OgreOctreeCamera.h>
+#include <OgrePrerequisites.h>
+
+#include "OgreOctreeHierarchyInterface.h"
+#include "OgrePlatformQueryManager.h"
+#include "VisibilityManager.h"
+
+
+namespace Ogre {
+
+/**
+	This class extends the terrain scene manager,
+	using occlusion queries for visibility culling.
+*/
+class __declspec(dllexport) VisibilityTerrainSceneManager: public TerrainSceneManager
+{
+public:
+	VisibilityTerrainSceneManager(GtpVisibility::VisibilityManager *visManager);
+	~VisibilityTerrainSceneManager();
+
+	void _renderVisibleObjects();
+	void _findVisibleObjects(Camera* cam, bool onlyShadowCasters);
+	void _updateSceneGraph(Camera* cam);
+
+	/** Sets the given option for the SceneManager
+		@remarks Options are: "Algorithm", int *;			
+	*/
+	
+	virtual bool setOption(const String &, const void *);
+	/** Gets the given option for the Scene VisibilityManager.
+	    @remarks
+		See setOption
+	*/
+	virtual bool getOption(const String &, void *);
+
+	bool getOptionValues(const String & key, StringVector &refValueList);
+	bool getOptionKeys(StringVector &refKeys);
+
+	/** Sets the visibility manager.
+		@param visManager the visibility manager
+	*/
+	void setVisibilityManager(GtpVisibility::VisibilityManager *visManager);
+	/** See set.
+	*/
+	GtpVisibility::VisibilityManager *getVisibilityManager();
+
+	/** Render a set of objects, see renderSingleObject for param definitions 
+		Override so we can handle delayed rendering of transparent objects
+	*/
+	virtual void renderObjects(const RenderPriorityGroup::TransparentRenderablePassList& objs, 
+            bool doLightIteration, const LightList* manualLightList = 0);
+
+	/** Writes out stats into the Ogre log file.
+	*/
+	void WriteLog();
+
+	/** Override pass so we can do the z-fail pass. 
+	*/
+	Pass* setPass(Pass* pass);
+
+	/** Override from SceneManager so we can skip all but first pass for depth pass. 
+	*/
+	bool validatePassForRendering(Pass* pass);
+
+	void RenderItemBuffer(RenderPriorityGroup* pGroup);
+	void RenderSingleObjectForItemBuffer(Renderable *rend, Pass *pass);
+	void renderQueueGroupObjects(RenderQueueGroup* pGroup);
+
+	/** Override from SceneManager so that sub entities can be assigned an id for item buffer.
+	*/
+	Entity* createEntity(const String& entityName, const String& meshName);
+
+	/** Returns pointer to visibility manager.
+	*/
+	GtpVisibility::VisibilityManager *GetVisibilityManager();
+
+	/** Returns hierarchy interface.
+	*/
+	OctreeHierarchyInterface *GetHierarchyInterface();
+
+	/** Inherited from scene manager. Neccesary to draw terrain properly.
+	*/
+	void endFrame();
+
+	void renderAdditiveStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup);
+	void renderModulativeStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup);
+
+	/** Override standard function so octree boxes are always of equal side length.
+		This has advantages for CHC, because terrain tiles are in different octree nodes
+		and can be culled.
+	*/
+	void setWorldGeometry( const String& filename );
+
+protected:
+	
+	/** Creates material for depth pass, e.g., a pass that only fills the depth buffer. 
+	*/
+	void InitDepthPass();
+	/** Creates material for item buffer. 
+	*/
+	void InitItemBufferPass();
+	/** Fills render queue so that a visualization can be rendered. 
+	*/
+	void PrepareVisualization(Camera *cam);
+	/** Initialises necessary parameters for hierarchical visibility culling.
+	*/
+	void InitVisibilityCulling(Camera *cam);
+
+	/// the interface to the scene hierarchy.
+	OctreeHierarchyInterface *mHierarchyInterface;
+	/// manages all visibility options
+	GtpVisibility::VisibilityManager *mVisibilityManager;
+
+	/// if a visualization of the hierarchical culling is shown
+	bool mShowVisualization;
+
+	/// if the culled nodes are indicated in the visualization
+	bool mVisualizeCulledNodes;
+
+	/// if symbols for the nodes are shown in the visualization
+	bool mRenderNodesForViz;
+	/// if content of the nodes is shown in the visualization
+	bool mRenderNodesContentForViz;
+
+	/// if we render transparents after the hierarchical traversal
+	bool mDelayRenderTransparents;
+
+	/// if we use a depth pass (i.e., fill only the depth buffer in the first pass)
+	bool mUseDepthPass;
+	/// if we currently rendering the depth pass
+	bool mIsDepthPassPhase;
+	
+	/// if we use an item buffer for rendering (i.e., object ids as color codes
+	bool mUseItemBuffer;
+	/// if we currently render the item buffer 
+	bool mIsItemBufferPhase;
+
+	/// if depth write should be enabled
+	bool mEnableDepthWrite;
+	/// if transparents are skipped during rendering
+	bool mSkipTransparents;
+
+	/// the depth pass (no lighting, just filling the depth buffer)
+	Pass *mDepthPass;
+	Pass *mItemBufferPass;
+
+	int mCurrentEntityId;
+	/// flag for passes which should not be deleted from queue during first traversal
+	int mLeavePassesInQueue;
+
+	/// if transparent object are considered for item buffer visibility
+	bool mRenderTransparentsForItemBuffer;
+	/// Always execute the vertex program of a pass, e.g., for the depth pass or item buffer
+	bool mExecuteVertexProgramForAllPasses;
+
+	bool mIsHierarchicalCulling;
+};
+
+} // namespace Ogre
+
+#endif // CullingTerrainSceneManager_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgrePlatformOcclusionQuery.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgrePlatformOcclusionQuery.h	(revision 160)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgrePlatformOcclusionQuery.h	(revision 160)
@@ -0,0 +1,32 @@
+#ifndef _PlatformOcclusionQuery_H__
+#define _PlatformOcclusionQuery_H__
+
+#include <OgreHardwareOcclusionQuery.h>
+#include <OgreRenderSystem.h>
+
+#include "OcclusionQuery.h"
+
+namespace Ogre {
+
+/** This class is an implementation for occlusion queries using Ogre.
+	@remark the class encapsulates Ogre occlusion query calls.
+*/
+class PlatformOcclusionQuery: public GtpVisibility::OcclusionQuery
+{
+public:
+	
+	PlatformOcclusionQuery(RenderSystem *rsys);
+
+	virtual ~PlatformOcclusionQuery();
+
+	virtual bool GetQueryResult(unsigned int &queryResult,
+	const bool waitForResult) const;
+	virtual void BeginQuery();
+	virtual void EndQuery();
+
+protected:
+	HardwareOcclusionQuery *mHardwareOcclusionQuery;
+};
+
+} // namespace Ogre
+#endif // PlatformOcclusionQuery_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityOptionsManager.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityOptionsManager.h	(revision 187)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityOptionsManager.h	(revision 187)
@@ -0,0 +1,48 @@
+#ifndef _VisibilityOptionsManager_H__
+#define _VisibilityOptionsManager_H__
+
+
+#include <OgreString.h>
+#include <OgreStringVector.h>
+#include "VisibilityManager.h"
+#include "OgrePlatformHierarchyInterface.h"
+
+
+namespace Ogre {
+	
+/**
+	Helper class for setting and getting different options directly
+	related to visibility culling.
+*/
+class VisibilityOptionsManager
+{
+public:
+	/** Contructor.
+		@param visManager current visibility manager handling
+		the culling options
+		@param hierarchInterface current hierarchy interface for 
+		handling the traversal options
+	*/
+	VisibilityOptionsManager(GtpVisibility::VisibilityManager *visManager, 
+							 PlatformHierarchyInterface *hierarchyInterface);
+	
+	/** Sets the given option for the scene traverser.
+	    @remarks
+		Options are:
+		"Algorithm", "Threshold";			
+	*/
+	bool setOption(const String &, const void *);
+	/** Gets the given option for the scene traverser.
+	    @remarks
+	    See setOption
+	*/
+	bool getOption(const String &, void *);
+	bool getOptionKeys( StringVector &refKeys );
+	
+protected:
+	GtpVisibility::VisibilityManager *mVisibilityManager;
+	PlatformHierarchyInterface *mHierarchyInterface;
+};
+
+}
+#endif // VisibilityOptionsManager_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSceneContentGenerator.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSceneContentGenerator.h	(revision 160)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSceneContentGenerator.h	(revision 160)
@@ -0,0 +1,104 @@
+#ifndef _SCENECONTENTGENERATOR_H__
+#define _SCENECONTENTGENERATOR_H__
+
+#include <OgrePrerequisites.h>
+#include <OgreMath.h>
+#include <Ogre.h>
+
+namespace Ogre {
+
+typedef std::vector<SceneNode *> SceneNodeList;
+typedef std::vector<Entity *> EntityList;
+
+/** Class which fills a scene with content in a random fashion.
+*/
+class __declspec(dllexport) SceneContentGenerator
+{
+public:
+	SceneContentGenerator(SceneManager *sm);
+	virtual ~SceneContentGenerator() {};
+	/** Generates scene object in a random fashion.
+		@param number of objects to generate
+		@param objName the name of the mesh to be generated
+	*/
+	void GenerateScene(int numObjects, const String &objName);
+
+	/** Generates a new object in the scene using ray scene queries 
+		and inserts it into thr scene hierarchy.
+		@param position position where the object is created
+		@param rotation rotation angle applied locally to object
+		@objName the name of the object entity
+		@returns scene object if it was successfully created, NULL otherwise
+		@remark internally stores pointer to object
+	*/
+	virtual SceneNode *GenerateSceneObject(const Vector3 &position, 
+		const Vector3 &rotation, const String &objName);
+
+	/** Minimum angle for the random orientation.
+	*/
+	void SetMinAngle(Vector3 minAngle);
+	
+	/** Maximum angle for the random orientation.
+	*/
+	void SetMaxAngle(Vector3 maxAngle);
+	
+	/** Minimum possible random position.
+	*/
+	void SetMinPos(Vector3 minPos);
+	/** Maximum possible random position.
+	*/
+	void SetMaxPos(Vector3 maxPos);
+	/** Scale factor applied to each generated object.
+	*/
+	void SetScale(Vector3 scale);
+	
+	/** The number of created objects.
+	*/
+	int GetObjectCount();
+
+	/** Writes scene nodes to file.
+	*/
+	bool WriteObjects(const std::string &filename);
+
+	/** Loads scene nodes from file.
+	*/
+	bool LoadObjects(const std::string &filename);
+
+	/** Generates a scene object with the specified parameters
+		@param position the position of the scene object
+		@param orientation the orientation of the scene object
+		@param objName the mesh name of the scene object
+		@returns the created scene object
+	*/
+	SceneNode *GenerateSceneObject(const Vector3 &position, 
+		const Quaternion &orientation, const String &objName);
+
+	/** Gets pointer to list of generated scene nodes.
+	*/
+	SceneNodeList *GetGeneratedSceneNodes();
+	
+	/** Gets pointer to list of entities.
+	*/
+	EntityList *GetGeneratedEntities();
+
+	/** Removes generated object from scene graph.
+	*/
+	void RemoveGeneratedObjects();
+
+protected:
+
+	Vector3 mMinAngle;
+	Vector3 mMaxAngle;
+	Vector3 mMaxPos;
+	Vector3 mMinPos;
+	Vector3 mScale;
+
+	SceneManager *mSceneMgr;
+	
+	SceneNodeList mSceneNodes;
+	EntityList mEntities;
+};
+
+} // namespace Ogre
+
+#endif // SCENECONTENTGENERATOR_H_
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilitySceneManager.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilitySceneManager.h	(revision 115)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilitySceneManager.h	(revision 115)
@@ -0,0 +1,65 @@
+#ifndef _VisibilitySceneManager_H__
+#define _VisibilitySceneManager_H__
+
+#include "OgreSceneNodeHierarchyInterface.h"
+#include "VisibilityManager.h"
+
+#include <OgreSceneNode.h>
+#include <OgreSceneManager.h>
+#include <OgrePrerequisites.h>
+
+namespace Ogre {
+
+/**
+	This class implements the default scene manager, using occlusion queries for 
+	visibility culling.
+*/
+class VisibilitySceneManager: public SceneManager
+{
+public:
+	VisibilitySceneManager(GtpVisibility::VisibilityManager *visManager);
+	~VisibilitySceneManager();
+
+	/** Overriden from SceneManager. Renders the scene using occlusion culling.
+	@remark the type of algorithm is specified by the occlusion culling manager type
+	using by the visibility manager.
+	*/
+	void _renderVisibleObjects();
+	void _findVisibleObjects(Camera* cam, bool onlyShadowCasters);
+	void _updateSceneGraph(Camera* cam);
+
+	/** Sets the given option for the SceneManager
+			    @remarks
+		Options are:
+		"Algorithm", int *;			
+	*/
+	virtual bool setOption(const String &, const void *);
+	/** Gets the given option for the Scene VisibilityManager.
+	    @remarks
+		See setOption
+	*/
+	virtual bool getOption(const String &, void *);
+
+	bool getOptionValues(const String & key, StringVector &refValueList);
+	bool getOptionKeys( StringVector &refKeys );
+
+	/** Sets the visibility manager.
+		@param visManager the visibility manager
+	*/
+	void setVisibilityManager(GtpVisibility::VisibilityManager *visManager);
+	/** See set.
+	*/
+	GtpVisibility::VisibilityManager *getVisibilityManager();
+
+protected:
+	
+	SceneNodeHierarchyInterface *mHierarchyInterface;
+	GtpVisibility::VisibilityManager *mVisibilityManager;
+
+	bool mUseDepthPass;
+	bool mShowVisualization;
+
+	bool mVisualizeCulledNodes;
+};
+} // namespace Ogre
+#endif // VisibilitySceneManager_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreOctreeHierarchyInterface.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreOctreeHierarchyInterface.h	(revision 370)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreOctreeHierarchyInterface.h	(revision 370)
@@ -0,0 +1,67 @@
+#ifndef _OctreeHierarchyInterface_H__
+#define _OctreeHierarchyInterface_H__
+
+#include <OgreOctree.h>
+#include <OgreOctreeSceneManager.h>
+#include "OgreSceneNodeHierarchyInterface.h"
+
+namespace Ogre {
+/**
+	This class implements the hierarchy interface for the Ogre octree hierarchy.
+*/
+class OctreeHierarchyInterface : public SceneNodeHierarchyInterface
+{
+public:
+	OctreeHierarchyInterface(OctreeSceneManager *sm, RenderSystem *rsys);
+	
+	/** Sets the number of nodes in this octree 
+		@remark do not confuse this with the OctreeNode class which is derived from SceneNode
+		@param num number of nodes in the octree
+	*/
+	void SetNumOctreeNodes(unsigned int num);
+
+	/** Gets the given option for the scene traverser.
+	    @remarks
+		See setOption
+	*/
+	void PullUpVisibility(GtpVisibility::HierarchyNode *node) const;
+	
+	/** Traverses and renders the given node.
+		@param node current node
+		@remark pushes children on a distance queue.
+	*/
+	void TraverseNode(GtpVisibility::HierarchyNode *node);
+	/** @copydoc HierarchyInterface::RenderNode */
+	void RenderNode(GtpVisibility::HierarchyNode *node);
+	bool IsLeaf(GtpVisibility::HierarchyNode *node) const;
+	bool HasGeometry(GtpVisibility::HierarchyNode *node) const;
+	float GetSquaredDistance(GtpVisibility::HierarchyNode *node) const;
+	
+	void SetNodeVisible(GtpVisibility::HierarchyNode *node, const bool visible) const;
+	void SetLastVisited(GtpVisibility::HierarchyNode *node, const unsigned int frameId) const;
+
+	bool IsNodeVisible(GtpVisibility::HierarchyNode *node) const;
+	unsigned int LastVisited(GtpVisibility::HierarchyNode *node) const;
+
+	void VisualizeCulledNode(GtpVisibility::HierarchyNode *node, 
+							 GtpVisibility::CullingType type) const;
+
+	void GetNodeGeometryList(GtpVisibility::HierarchyNode *node,
+							 GtpVisibility::GeometryVector *geometryList, 
+							 bool includeChildren);
+	
+protected:
+	/** Returns pointer to the bounding box of the node.
+		@param node current hierarchy node
+		@returns bounding box of current node
+	*/
+	AxisAlignedBox *GetBoundingBox(GtpVisibility::HierarchyNode *node);
+	/** Returns squared distance of center of box with respect to the camera .
+		@param cam current camera
+		@param box axis aligned box
+	*/
+	Real GetSquaredViewDepth(const Camera* cam, const AxisAlignedBox* box) const;
+};
+} // namespace Ogre
+
+#endif // OctreeHierarchyInterface_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityOctreeSceneManager.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityOctreeSceneManager.h	(revision 254)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityOctreeSceneManager.h	(revision 254)
@@ -0,0 +1,158 @@
+#ifndef _VisibilityOctreeSceneManager_H__
+#define _VisibilityOctreeSceneManager_H__
+
+#include <OgreSceneNode.h>
+#include <OgreOctreeSceneManager.h>
+#include <OgreOctreeNode.h>
+#include <OgreOctreeCamera.h>
+#include <OgrePrerequisites.h>
+
+#include "OgreOctreeHierarchyInterface.h"
+#include "VisibilityManager.h"
+
+namespace Ogre {
+
+/**
+	This class extends the octree scene manager, using 
+	occlusion queries for visibility culling.
+*/
+class __declspec(dllexport) VisibilityOctreeSceneManager: public OctreeSceneManager
+{
+public:
+	VisibilityOctreeSceneManager(GtpVisibility::VisibilityManager *visManager);
+	~VisibilityOctreeSceneManager();
+
+	void _renderVisibleObjects();
+	void _findVisibleObjects(Camera* cam, bool onlyShadowCasters);
+	void _updateSceneGraph(Camera* cam );
+
+	/** Sets the given option for the SceneManager
+		@remarks Options are: "Algorithm", int *;			
+	*/
+	
+	virtual bool setOption(const String &, const void *);
+	/** Gets the given option for the Scene VisibilityManager.
+	    @remarks
+		See setOption
+	*/
+	virtual bool getOption(const String &, void *);
+
+	bool getOptionValues(const String & key, StringVector &refValueList);
+	bool getOptionKeys(StringVector &refKeys);
+
+	/** Sets the visibility manager.
+		@param visManager the visibility manager
+	*/
+	void setVisibilityManager(GtpVisibility::VisibilityManager *visManager);
+	/** See set.
+	*/
+	GtpVisibility::VisibilityManager *getVisibilityManager();
+	
+	/** Render a set of objects, see renderSingleObject for param definitions 
+		Override so we can handle delayed rendering of transparent objects
+	*/
+	virtual void renderObjects(const RenderPriorityGroup::TransparentRenderablePassList& objs, 
+            bool doLightIteration, const LightList* manualLightList = 0);
+
+	/** Writes out stats into the Ogre log file.
+	*/
+	void WriteLog();
+
+	/** Override pass so we can do the z-fail pass. 
+	*/
+	Pass* setPass(Pass* pass);
+
+	/** Override from SceneManager so we can skip all but first pass for depth pass. 
+	*/
+	bool validatePassForRendering(Pass* pass);
+
+	void RenderItemBuffer(RenderPriorityGroup* pGroup);
+	void RenderSingleObjectForItemBuffer(Renderable *rend, Pass *pass);
+	void renderQueueGroupObjects(RenderQueueGroup* pGroup);
+
+	/** Override from SceneManager so that sub entities can be assigned an id for item buffer.
+	*/
+	//Entity* createEntity(const String& entityName, const String& meshName);
+
+	/** Returns pointer to visibility manager.
+	*/
+	GtpVisibility::VisibilityManager *GetVisibilityManager();
+
+	/** Returns hierarchy interface.
+	*/
+	OctreeHierarchyInterface *GetHierarchyInterface();
+
+	void renderAdditiveStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup);
+	void renderModulativeStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup);
+
+	void loadVisibilityConfig(const String& filename);
+
+protected:
+	
+	/** Creates material for depth pass, e.g., a pass that only fills the depth buffer. 
+	*/
+	void InitDepthPass();
+	/** Creates material for item buffer. 
+	*/
+	void InitItemBufferPass();
+	/** Fills render queue so that a visualization can be rendered. 
+	*/
+	void PrepareVisualization(Camera *cam);
+	/** Initialises necessary parameters for hierarchical visibility culling.
+	*/
+	void InitVisibilityCulling(Camera *cam);
+	
+	/// the interface to the scene hierarchy.
+	OctreeHierarchyInterface *mHierarchyInterface;
+	/// manages all visibility options
+	GtpVisibility::VisibilityManager *mVisibilityManager;
+	
+	/// if a visualization of the hierarchical culling is shown
+	bool mShowVisualization;
+
+	/// if the culled nodes are indicated in the visualization
+	bool mVisualizeCulledNodes;
+
+	/// if symbols for the nodes are shown in the visualization
+	bool mRenderNodesForViz;
+	/// if content of the nodes is shown in the visualization
+	bool mRenderNodesContentForViz;
+
+	/// render transparents after the hierarchical traversal
+	bool mDelayRenderTransparents;
+
+	/// use a depth pass (i.e., fill only the depth buffer in the first pass)
+	bool mUseDepthPass;
+	/// flag indicating if we currently render the depth pass
+	bool mIsDepthPassPhase;
+
+	/// if we use an item buffer for rendering (i.e., object ids as color codes
+	bool mUseItemBuffer;
+	/// if we currently render the item buffer 
+	bool mIsItemBufferPhase;
+
+	/// if depth write should be enabled
+	bool mEnableDepthWrite;
+	/// if transparents are skipped during rendering
+	bool mSkipTransparents;
+
+	/// the depth pass (no lighting, just filling the depth buffer)
+	Pass *mDepthPass;
+	Pass *mItemBufferPass;
+
+	int mCurrentEntityId;
+	/// flag for passes which should not be deleted from queue during first traversal
+	int mLeavePassesInQueue;
+	
+
+	/// if transparent object are considered for item buffer visibility
+	bool mRenderTransparentsForItemBuffer;
+	/// Always execute the vertex program of a pass, e.g., for the depth pass or item buffer
+	bool mExecuteVertexProgramForAllPasses;
+
+	bool mIsHierarchicalCulling;
+};
+
+} // namespace Ogre
+
+#endif // VisibilityOctreeSceneManager_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreBspHierarchyInterface.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreBspHierarchyInterface.h	(revision 345)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreBspHierarchyInterface.h	(revision 345)
@@ -0,0 +1,48 @@
+#ifndef _BspHierarchyInterface_H__
+#define _BspHierarchyInterface_H__
+
+#include "OgrePlatformHierarchyInterface.h"
+
+namespace Ogre {
+/**
+	This class implements the hierarchy interface for the Ogre bsp hierarchy.
+*/
+class BspHierarchyInterface : public PlatformHierarchyInterface
+{
+public:
+	BspHierarchyInterface(SceneManager *sm, RenderSystem *rsys);
+
+	/** Gets the given option for the scene traverser.
+	    @remarks
+		See setOption
+	*/
+	//bool getOption( const String &, void * );
+	//bool getOptionKeys( StringVector &refKeys );
+	void PullUpVisibility(GtpVisibility::HierarchyNode *node) const;
+	/** Traverses given node.
+		@param node current node
+		@remark pushes children on the distance queue
+	*/
+	void TraverseNode(GtpVisibility::HierarchyNode *node);
+	void RenderNode(GtpVisibility::HierarchyNode *node);
+	bool IsLeaf(GtpVisibility::HierarchyNode *node) const;
+	bool HasGeometry(GtpVisibility::HierarchyNode *node) const;
+	float GetSquaredDistance(GtpVisibility::HierarchyNode *node) const;
+	
+	void SetNodeVisible(GtpVisibility::HierarchyNode *node, const bool visible) const;
+	void SetLastVisited(GtpVisibility::HierarchyNode *node, 
+						const unsigned int frameId) const;
+
+	bool IsNodeVisible(GtpVisibility::HierarchyNode *node) const;
+	unsigned int LastVisited(GtpVisibility::HierarchyNode *node) const;
+
+protected:
+	/** Returns pointer to the bounding box of the node.
+		@param node current hierarchy node
+		@returns bounding box of current node
+	*/
+	AxisAlignedBox *GetBoundingBox(GtpVisibility::HierarchyNode *node);
+};
+} // namespace Ogre
+
+#endif // BspHierarchyInterface_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgrePlatformHierarchyInterface.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgrePlatformHierarchyInterface.h	(revision 187)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgrePlatformHierarchyInterface.h	(revision 187)
@@ -0,0 +1,162 @@
+#ifndef _PlatformHierarchyInterface_H__
+#define _PlatformHierarchyInterface_H__
+
+#include <OgreSceneManager.h>
+#include <OgrePrerequisites.h>
+#include <OgreCamera.h>
+#include <OgreRenderSystem.h>
+
+//#include "OgreSolidHalfBoundingBox.h"
+#include "OgreSolidBoundingBox.h"
+#include "HierarchyInterface.h"
+#include "VisibilityInfo.h"
+#include "OgrePlatformOcclusionQuery.h"
+
+/** This namespace contains the Ogre dependent classes.
+*/
+namespace Ogre {
+
+/**	Class which implements a hierarchy interface for a specific type of hierarchy.
+	@remark also provides methods for using occlusion queries on the hierarchy nodes
+*/
+class PlatformHierarchyInterface: public GtpVisibility::HierarchyInterface
+{
+public:
+	/** Construction taking the current scene manager and the current rendersystem as argument
+		@param sm current scene manager
+		@param rsys current render system 
+	*/
+	PlatformHierarchyInterface(SceneManager *sm, RenderSystem *rsys);
+	~PlatformHierarchyInterface();
+		
+	/** Returns next available occlusion query or creates new one.
+		@return the next occlusion query
+	*/
+	GtpVisibility::OcclusionQuery *GetNextOcclusionQuery();
+		
+	/** Sets the current camera used for the rendering.
+		@param cam the current camera
+	*/
+	void SetCamera(Camera *cam);
+	/** Sets the current camera used for culling.
+		@param cam the current camera
+		@remark the default is the camera used for rendering
+	*/
+	void SetCullCamera(Camera *cullCam);
+	/** Initialises this scene traverser for the current frame.
+		@remark This is a convenience method which resets the stats, 
+				sets the current camera, and initialises the distance queue.
+		@param cam the actual camera definding the view frustum
+		@param cullCam the camera used for culling. 
+		@remark If cullCam is null, the actual camera is used for both viewing and culling		
+	*/
+	void InitTraversal(Camera *cam, Camera *cullCam = NULL, int leavePassesInQueue = 0);
+	/** Checks if the node is visible from the current view frustum.
+		@param node the current node
+		@param intersects returns true if the current node intersects the near plane
+	*/
+	bool CheckFrustumVisible(GtpVisibility::HierarchyNode *node, bool &intersects);
+	/** Sets pointer to the current scene manager.
+		@param sm the scene manager 
+	*/
+	void SetSceneManager(SceneManager *sm);
+	/** Sets pointer to the current render system .
+		@param rsys the rendersystem 
+	*/
+	void SetRenderSystem(RenderSystem *rsys);
+	/** Returns pointer to bounding box of node.
+		@param node current hierarchy node
+		@returns bounding box of current node
+	*/
+	virtual AxisAlignedBox *GetBoundingBox(GtpVisibility::HierarchyNode *node) = 0;
+	/** Issue a occlusion query for this node. 
+		@param node the current hierarchy node
+		@param wasVisible if the node was visible in the last frame
+		@returns occlusion query for this node
+	*/
+	GtpVisibility::OcclusionQuery *IssueNodeOcclusionQuery(
+		GtpVisibility::HierarchyNode *node, const bool wasVisible);
+
+	/** Issue a occlusion query for this mesh.
+		@param mesh the mesh for which an occlusion query is issued.
+		@returns occlusion query for this mesh.
+	*/
+	GtpVisibility::OcclusionQuery *IssueMeshOcclusionQuery(GtpVisibility::Mesh *mesh);
+
+	/** If true, the interface finds and renders only objects which are marked as shadow casters.
+		@remark This is important for the shadow texture pass
+	*/
+	void SetOnlyShadowCasters(bool onlyShadowCasters);
+	/** see set 
+	*/
+	bool GetOnlyShadowCasters();
+	/** see set 
+	*/
+	bool GetTestGeometryForVisibleLeaves();
+	/** see set
+	*/
+	SceneManager *GetSceneManager();
+
+	/** see set 
+	*/
+	RenderSystem *GetRenderSystem();
+	
+	/** true if bounding box query is currently active. 
+	*/
+    bool IsBoundingBoxQuery();
+
+	GtpVisibility::OcclusionQuery *IssuePatchOcclusionQuery(GtpVisibility::Patch *patch);
+
+	/** Deletes all occlusion queries.
+	*/
+	void DeleteQueries();
+
+protected:
+	/** Renders the given geometry 
+	*/
+	void RenderGeometry(GtpVisibility::Mesh *geom);
+	
+	/** Renders the given patch 
+	*/
+	void RenderPatch(GtpVisibility::Patch *patch);
+
+	/** Materials for visualizing frustum and query culled nodes.
+	*/
+	void CreateNodeVizMaterials();
+
+	/** Returns pointer to current renderable bounding box geometry.
+	*/
+	SolidBoundingBox *GetSolidBoundingBox();
+
+	/** A pass that prepares an occlusion query.
+		@remark disables depth write, colour write, lighting,
+		vertex and fragment program.*/
+	//void SetOcclusionPass();
+
+	/** Renders given bounding box.
+		@param box the bounding box of the scene node to be rendered 
+	*/
+	void RenderBoundingBox(AxisAlignedBox *box);
+
+	/** Renderable of an aabb.
+	*/
+	SolidBoundingBox *mSolidBoundingBox;
+
+	SceneManager *mSceneManager;
+	RenderSystem *mRenderSystem;
+
+	Camera *mCamera;
+	Camera *mCullCamera;
+
+	AxisAlignedBox mBox;
+	
+	std::vector<PlatformOcclusionQuery *> mOcclusionQueries;
+
+	bool mOnlyShadowCasters;
+	int mLeavePassesInQueue;
+	bool mIsBoundingBoxQuery;
+};
+
+} // namespace Ogre
+
+#endif // PlatformHierarchyInterface_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSolidHalfBoundingBox.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSolidHalfBoundingBox.h	(revision 117)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSolidHalfBoundingBox.h	(revision 117)
@@ -0,0 +1,47 @@
+#ifndef _SolidHalfBoundingBox_H__
+#define _SolidHalfBoundingBox_H__
+
+#include "OgreWireBoundingBox.h"
+
+namespace Ogre {
+
+/** The renderable of one half of a solid bounding box.
+    @remarks
+        This class builds a solid renderable from a given aabb. A pointer to this class can be
+		added to a render queue to display the bounding box of an object.
+*/
+class SolidHalfBoundingBox : public WireBoundingBox
+{
+public:
+
+	SolidHalfBoundingBox();
+	/** Sets up the first or second half of a the solid box.
+		@param aab the axis aligned bounding box
+		@param isFirstHalf if it is the first or the second half
+	*/
+	void SetupBoundingBox(const AxisAlignedBox& aabb, const bool isFirstHalf);
+	
+	/** Builds the wireframe line list.
+		@param aab the axis aligned bounding box for setting up the vertices
+		@param first or second half of the box
+    */
+	void SetupBoundingBoxVertices(const AxisAlignedBox& aab, const bool isFirstHalf);
+
+protected:
+   
+	/** 
+		Sets the material used for occlusion queries. 
+		@remark the material is called "Visibility/QueryMaterial" and
+		uses no lighting, no depth write, and no colours
+	*/
+	void SetOcclusionQueryMaterial();
+	/** Whether this half box is the first or the second half of the bounding box. 
+	*/
+	bool mIsFirstHalf;	
+};
+
+}// namespace Ogre
+
+#endif // SolidHalfBoundingBox
+
+
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgrePlatformQueryManager.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgrePlatformQueryManager.h	(revision 316)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgrePlatformQueryManager.h	(revision 316)
@@ -0,0 +1,60 @@
+#ifndef _PlatformQueryManager_H__
+#define _PlatformQueryManager_H__
+
+#include "VisibilityInfo.h"
+#include "QueryManager.h"
+#include "OgrePlatformHierarchyInterface.h"
+
+namespace Ogre {
+  
+/**
+	Class which implements the QueryManager for Ogre scene queries.
+*/
+class __declspec(dllexport) PlatformQueryManager: public GtpVisibility::QueryManager
+{
+public:
+    /** Constructor taking a hierarchy interface as an argument. This allows to operate
+	    on different hierarchy types, while reusing the implementation of the query methods.
+    */
+	PlatformQueryManager(PlatformHierarchyInterface *hierarchyInterface, 
+		                 Viewport *vp, int queryModes);
+    
+    /** 
+	Uses the specified point to execute the visibility query in all directions. 
+	@sa ComputeCameraVisibility()
+    */
+    void ComputeFromPointVisibility(const Vector3 &point,
+			       GtpVisibility::NodeInfoContainer *visibleNodes,
+			       GtpVisibility::MeshInfoContainer *visibleGeometry,
+				   GtpVisibility::PatchInfoContainer *visiblePatches,
+			       bool relativeVisibility = false);
+  
+	void ComputeCameraVisibility(const Camera &camera,
+			       GtpVisibility::NodeInfoContainer *visibleNodes,
+			       GtpVisibility::MeshInfoContainer *visibleGeometry,
+				   GtpVisibility::PatchInfoContainer *visiblePatches,
+			       bool relativeVisibility = false);
+  
+	bool ShootRay(const Ray &ray, std::vector<Mesh *> *visibleMeshes, bool isGlobalLine = false);  
+
+	/** Sets a viewport for rendering.
+	*/
+	void SetViewport(Viewport *vp);
+
+protected:
+
+	void CollectItemBufferResults(
+				GtpVisibility::MeshInfoContainer *visibleGeometry,
+				GtpVisibility::PatchInfoContainer *visiblePatches);
+
+	void InitItemBuffer(GtpVisibility::MeshInfoContainer *visibleGeometry,
+						GtpVisibility::PatchInfoContainer *visiblePatches);
+
+	Viewport *mViewport;
+	
+	bool mWasInitialised;
+};
+
+} // namespace Ogre
+
+#endif // PlatformQueryManager
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityBspSceneManager.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityBspSceneManager.h	(revision 59)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityBspSceneManager.h	(revision 59)
@@ -0,0 +1,61 @@
+#ifndef _VisibilityBspSceneManager_H__
+#define _VisibilityBspSceneManager_H__
+
+#include <OgreSceneNode.h>
+#include <OgreBspSceneManager.h>
+#include <OgreOctreeNode.h>
+#include <OgreOctreeCamera.h>
+#include <OgrePrerequisites.h>
+
+#include "OgreBspHierarchyInterface.h"
+#include "GtpVisibility/Manager.h"
+
+namespace Ogre {
+
+/**
+	This class extends the octree scene manager, using 
+	occlusion queries for visibility culling.
+*/
+class VisibilityBspSceneManager: public BspSceneManager
+{
+public:
+	VisibilityBspSceneManager(GtpVisibility::Manager *visManager);
+	~VisibilityBspSceneManager();
+
+	void _renderVisibleObjects();
+	void _findVisibleObjects(Camera* cam, bool onlyShadowCasters);
+	void _updateSceneGraph(Camera* cam );
+
+	/** Sets the given option for the SceneManager
+			    @remarks
+		Options are:
+		"Algorithm", int *;			
+	*/
+	
+	virtual bool setOption(const String &, const void *);
+	/** Gets the given option for the Scene Manager.
+	    @remarks
+		See setOption
+	*/
+	virtual bool getOption(const String &, void *);
+
+	bool getOptionValues(const String & key, StringVector &refValueList);
+	bool getOptionKeys(StringVector &refKeys);
+
+	/** Sets the visibility manager.
+		@param visManager the visibility manager
+	*/
+	void setVisibilityManager(GtpVisibility::Manager *visManager);
+	/** See set.
+	*/
+	GtpVisibility::Manager *getVisibilityManager( void );
+
+protected:
+	
+	BspHierarchyInterface *mHierarchyInterface;
+	GtpVisibility::Manager *mVisibilityManager;
+};
+
+} // namespace Ogre
+
+#endif // VisibilityBspSceneManager_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreTerrainContentGenerator.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreTerrainContentGenerator.h	(revision 183)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreTerrainContentGenerator.h	(revision 183)
@@ -0,0 +1,56 @@
+#ifndef _TERRAINCONTENTGENERATOR_H__
+#define _TERRAINCONTENTGENERATOR_H__
+
+#include "OgreSceneContentGenerator.h"
+
+#define MAX_HEIGHT 5000 // maximal possible height for object position
+
+namespace Ogre {
+
+/** Class which executes a simple ray query.
+*/
+class __declspec(dllexport) RayQueryExecutor
+{
+public:
+	RayQueryExecutor(SceneManager *sm);
+	~RayQueryExecutor();
+	
+	bool executeRayQuery(Vector3 *result, const Vector3 &pos, const Vector3 &dir);
+	bool RayQueryExecutor::executeRayQuery( Vector3 *result, const Ray &ray);
+
+protected:
+	
+	RaySceneQuery *mRaySceneQuery;
+};
+
+/** 
+	This class used to fill a terrain with content, e.g., 
+	it randomly fills a terrain with objects of a specific type.
+*/
+class __declspec(dllexport) TerrainContentGenerator: public SceneContentGenerator
+{
+public:
+	TerrainContentGenerator(SceneManager *sm);
+	~TerrainContentGenerator();
+
+	/** Generates objects and places it on the terrain.
+	*/
+	SceneNode *GenerateSceneObject(const Vector3 &position, 
+		const Vector3 &rotation, const String &objName);
+	/** Generates objects and optionally places it on the terrain.
+		@param clampToTerrain if true, scene object is clamped to the terrain
+	*/
+	SceneNode *GenerateSceneObject(const Vector3 &position, 
+		const Vector3 &rotation, const String &objName, const bool clampToTerrain);
+	
+	/** The offset is added to objects when they are put into the terrain.
+	*/
+	void SetOffset(Real offset);
+
+protected:
+	RayQueryExecutor *mRayQueryExecutor;
+	Real mOffset;
+};
+
+} // namespace Ogre
+#endif // _TERRAINCONTENTGENERATOR_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityDotSceneManager.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityDotSceneManager.h	(revision 59)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreVisibilityDotSceneManager.h	(revision 59)
@@ -0,0 +1,58 @@
+#ifndef _VisibilityDotSceneManager_H__
+#define _VisibilityDotSceneManager_H__
+
+#include <OgreSceneNode.h>
+#include <DotSceneManager.h>
+#include <OgrePrerequisites.h>
+#include "VisibilityManager.h"
+#include "OgreSceneNodeHierarchyInterface.h"
+
+namespace Ogre {
+
+/**
+	This class extends the dot scene manager, using occlusion queries for 
+	visibility culling. 
+	@remark the scene manager can operate on Ogre scene descriptions in 
+	XML defined by the ".scene" format
+*/
+class VisibilityDotSceneManager: public DotSceneManager
+{
+public:
+	VisibilityDotSceneManager(GtpVisibility::VisibilityManager *visManager);
+	~VisibilityDotSceneManager();
+
+	void _renderVisibleObjects();
+	void _findVisibleObjects(Camera* cam, bool onlyShadowCasters);
+	void _updateSceneGraph(Camera* cam);
+
+	/** Sets the given option for the SceneManager
+		@remarks
+		Options are:
+		"Algorithm", int *;			
+	*/
+	virtual bool setOption(const String &, const void *);
+	/** Gets the given option for the Scene VisibilityManager.
+	    @remarks
+		See setOption
+	*/
+	virtual bool getOption(const String &, void *);
+
+	bool getOptionValues(const String & key, StringVector &refValueList);
+	bool getOptionKeys(StringVector &refKeys);
+
+	/** Sets the visibility manager.
+		@param visManager the visibility manager
+	*/
+	void setVisibilityManager(GtpVisibility::VisibilityManager *visManager);
+	/** See set.
+	*/
+	GtpVisibility::VisibilityManager *getVisibilityManager();
+
+protected:
+
+	Ogre::SceneNodeHierarchyInterface *mHierarchyInterface;
+	GtpVisibility::VisibilityManager *mVisibilityManager;
+};
+} // namespace Ogre
+
+#endif // VisibilityDotSceneManager_H
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSolidBoundingBox.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSolidBoundingBox.h	(revision 156)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreSolidBoundingBox.h	(revision 156)
@@ -0,0 +1,58 @@
+#ifndef _SolidBoundingBox_H__
+#define _SolidBoundingBox_H__
+
+#include "OgreSimpleRenderable.h"
+
+namespace Ogre {
+
+/** A renderable of a solid bounding box using a material with no depth write,
+	no colors, and no lighting.
+*/
+class __declspec(dllexport) SolidBoundingBox : public SimpleRenderable
+{
+public:
+
+	SolidBoundingBox();
+	~SolidBoundingBox();
+	/** Sets up the solid box.
+		@param aab the axis aligned bounding box
+	*/
+	void SetupBoundingBox(const AxisAlignedBox& aabb);
+	
+	/** Builds the wireframe line list.
+		@param aab the axis aligned bounding box for setting up the vertices
+    */
+	void SetupBoundingBoxVertices(const AxisAlignedBox& aab);
+
+	Real getSquaredViewDepth(const Camera* cam) const;
+
+	Real getBoundingRadius(void) const { return mRadius; }
+
+protected:
+	/** 
+		Sets the material used for occlusion queries. 
+		@remark the material is called "Visibility/QueryMaterial" and
+		uses no lighting, no depth write, and no colours
+	*/
+	void SetOcclusionQueryMaterial();
+
+	/** Override this method to prevent parent transforms (rotation,translation,scale)
+    */
+	void getWorldTransforms( Matrix4* xform ) const;
+    /** @copydoc Renderable::getWorldOrientation */
+    const Quaternion& getWorldOrientation(void) const;
+    /** @copydoc Renderable::getWorldPosition */
+    const Vector3& getWorldPosition(void) const;
+		
+    /** Builds the wireframe line list.
+    */
+	void setupBoundingBoxVertices(const AxisAlignedBox& aab);
+
+    Real mRadius;
+};
+
+}// namespace Ogre
+
+#endif // SolidBoundingBox
+
+
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreItemBufferQueryManager.h
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreItemBufferQueryManager.h	(revision 159)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreItemBufferQueryManager.h	(revision 159)
@@ -0,0 +1,45 @@
+#ifndef _ItemBufferQueryManager_H__
+#define _ItemBufferQueryManager_H__
+
+#include "OgrePlatformQueryManager.h"
+
+namespace Ogre {
+  
+/**
+	Class which implements the QueryManager for Ogre scene queries using an item buffer,
+	i.e., the objects are rendered with their id used as unique color code. After reading
+	back the frame buffer, the visibility information can be established for each object.
+*/
+class __declspec(dllexport) ItemBufferQueryManager: public PlatformQueryManager
+{
+public:
+    /** Constructor taking a hierarchy interface as an argument. This allows to operate
+		on different hierarchy types, while reusing the implementation of the query methods.
+		@param renderPatches determines if the visibility of either patches or meshes is computed.
+    */
+	ItemBufferQueryManager(PlatformHierarchyInterface *hierarchyInterface, Viewport *vp,
+						   const bool renderPatches);
+    
+    void ComputeCameraVisibility(const Camera &camera,
+			    InfoContainer<GtpVisibility::NodeInfo> *visibleNodes,
+			    InfoContainer<GtpVisibility::MeshInfo> *visibleGeometry,
+				InfoContainer<GtpVisibility::PatchInfo> *visiblePatches,
+			    bool relativeVisibility = false);
+    
+	bool ShootRay(const Ray &ray, std::vector<Mesh *> *visibleMeshes, bool isGlobalLine = false);  
+	
+protected:
+	/** Helper function used to initialise item buffer.
+	*/
+	void InitItemBuffer( 
+				InfoContainer<GtpVisibility::NodeInfo> *visibleNodes,
+			    InfoContainer<GtpVisibility::MeshInfo> *visibleGeometry,
+				InfoContainer<GtpVisibility::PatchInfo> *visiblePatches);
+	
+	/// if patches are used instead of meshes (only one at a time)
+	bool mRenderPatchesForItemBuffer;
+};
+
+} // namespace Ogre
+
+#endif // ItemBufferQueryManager
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/scripts/Plugin_VisibilitySceneManager.vcproj
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/scripts/Plugin_VisibilitySceneManager.vcproj	(revision 316)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/scripts/Plugin_VisibilitySceneManager.vcproj	(revision 316)
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="Plugin_VisibilitySceneManager"
+	ProjectGUID="{80DECC17-BDDD-4412-8CF8-F7C1C17A7436}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="..\lib\$(ConfigurationName)"
+			IntermediateDirectory="..\obj\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="&quot;$(OGRE_PATH)\PlugIns\OctreeSceneManager\include&quot;;&quot;$(OGRE_ADDONS_PATH)\dotsceneoctree\PlugIns\DotSceneManager\include&quot;;&quot;$(OGRE_PATH)\Samples\Common\include&quot;;&quot;$(OGRE_PATH)\Dependencies\include\CEGUI&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include&quot;;&quot;$(OGRE_PATH)\OgreMain\include&quot;;&quot;$(OGRE_PATH)\Dependencies\include&quot;;..\include;..\..\GtpVisibility\include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;PLUGIN_OCCLUSIONCULLINGSCENEMANAGER_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE"
+				MinimalRebuild="TRUE"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				EnableFunctionLevelLinking="TRUE"
+				RuntimeTypeInfo="TRUE"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="4"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				IgnoreImportLibrary="TRUE"
+				AdditionalDependencies="OgreMain_d.lib CEGUIBase_d.lib OgreGUIRenderer_d.lib Plugin_OctreeSceneManager.lib Plugin_DotSceneManager.lib GtpVisibility.lib"
+				OutputFile="$(OutDir)/Plugin_VisibilitySceneManager.dll"
+				Version="0.99"
+				LinkIncremental="2"
+				SuppressStartupBanner="TRUE"
+				AdditionalLibraryDirectories="&quot;$(OGRE_PATH)\OgreMain\lib\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\Dependencies\lib\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\PlugIns\OctreeSceneManager\bin\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib&quot;;&quot;$(OGRE_ADDONS_PATH)\dotsceneoctree\PlugIns\DotSceneManager\bin\$(ConfigurationName)&quot;;&quot;..\lib\$(ConfigurationName)&quot;;&quot;..\..\lib\$(ConfigurationName)&quot;;&quot;..\..\GtpVisibility\lib\$(ConfigurationName)&quot;"
+				ModuleDefinitionFile="..\misc\OgreVisibilitySceneManager.def"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile="$(OutDir)/Plugin_VisibilitySceneManager.pdb"
+				SubSystem="2"
+				ImportLibrary="$(OutDir)/Plugin_VisibilitySceneManager.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy $(OutDir)\$(TargetFileName) $(OGRE_PATH)\Samples\Common\bin\$(ConfigurationName)"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="..\lib\$(ConfigurationName)"
+			IntermediateDirectory="..\obj\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="TRUE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="3"
+				GlobalOptimizations="TRUE"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="TRUE"
+				ImproveFloatingPointConsistency="TRUE"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="TRUE"
+				EnableFiberSafeOptimizations="TRUE"
+				OptimizeForProcessor="2"
+				AdditionalIncludeDirectories="&quot;$(OGRE_PATH)\PlugIns\OctreeSceneManager\include&quot;;&quot;$(OGRE_ADDONS_PATH)\dotsceneoctree\PlugIns\DotSceneManager\include&quot;;&quot;$(OGRE_PATH)\Samples\Common\include&quot;;&quot;$(OGRE_PATH)\Dependencies\include\CEGUI&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include&quot;;&quot;$(OGRE_PATH)\OgreMain\include&quot;;&quot;$(OGRE_PATH)\Dependencies\include&quot;;..\include;..\..\GtpVisibility\include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;GTP_VISIBILITY_MODIFIED_OGRE"
+				StringPooling="TRUE"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="FALSE"
+				EnableFunctionLevelLinking="TRUE"
+				RuntimeTypeInfo="TRUE"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="TRUE"
+				DebugInformationFormat="3"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				IgnoreImportLibrary="TRUE"
+				AdditionalDependencies="OgreMain.lib CEGUIBase.lib OgreGUIRenderer.lib Plugin_OctreeSceneManager.lib GtpVisibility.lib"
+				OutputFile="$(OutDir)/Plugin_VisibilitySceneManager.dll"
+				Version="0.99"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				AdditionalLibraryDirectories="&quot;$(OGRE_PATH)\PlugIns\OctreeSceneManager\bin\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\OgreMain\lib\$(ConfigurationName)&quot;;&quot;$(OGRE_ADDONS_PATH)\dotsceneoctree\PlugIns\DotSceneManager\bin\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib&quot;;&quot;..\..\GtpVisibility\lib\$(ConfigurationName)&quot;;&quot;..\..\lib\$(ConfigurationName)&quot;;&quot;..\lib\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\Dependencies\lib\$(ConfigurationName)&quot;"
+				ModuleDefinitionFile="..\misc\OgreVisibilitySceneManager.def"
+				GenerateDebugInformation="TRUE"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				ImportLibrary="$(OutDir)/Plugin_VisibilitySceneManager.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy $(OutDir)\$(TargetFileName) $(OGRE_PATH)\Samples\Common\bin\$(ConfigurationName)"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="SceneManager_Plugins"
+			Filter="">
+			<Filter
+				Name="Header Files"
+				Filter="">
+				<File
+					RelativePath="..\include\OgreOctreeHierarchyInterface.h">
+				</File>
+				<File
+					RelativePath="..\include\OgreTerrainContentGenerator.h">
+				</File>
+				<File
+					RelativePath="..\include\OgreVisibilityOctreeSceneManager.h">
+				</File>
+				<File
+					RelativePath="..\include\OgreVisibilityTerrainSceneManager.h">
+				</File>
+			</Filter>
+			<Filter
+				Name="Source Files"
+				Filter="">
+				<File
+					RelativePath="..\src\OgreBspHierarchyInterface.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgreOctreeHierarchyInterface.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgreTerrainContentGenerator.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgreVisibilityOctreeSceneManager.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgreVisibilityTerrainSceneManager.cpp">
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="VisibilitySceneManager"
+			Filter="">
+			<Filter
+				Name="Header Files"
+				Filter="h;hpp;hxx;hm;inl;inc">
+				<File
+					RelativePath="..\include\OgreBspHierarchyInterface.h">
+				</File>
+				<File
+					RelativePath="..\include\OgreOcclusionQueriesQueryManager.h">
+				</File>
+				<File
+					RelativePath="..\include\OgrePlatformHierarchyInterface.h">
+				</File>
+				<File
+					RelativePath="..\include\OgrePlatformOcclusionQuery.h">
+				</File>
+				<File
+					RelativePath="..\include\OgrePlatformQueryManager.h">
+				</File>
+				<File
+					RelativePath="..\include\OgreSceneContentGenerator.h">
+				</File>
+				<File
+					RelativePath="..\include\OgreSceneNodeHierarchyInterface.h">
+				</File>
+				<File
+					RelativePath="..\include\OgreSolidBoundingBox.h">
+				</File>
+				<File
+					RelativePath="..\include\OgreSolidHalfBoundingBox.h">
+				</File>
+				<File
+					RelativePath="..\include\OgreVisibilityOptionsManager.h">
+				</File>
+				<File
+					RelativePath="..\include\OgreVisibilitySceneManager.h">
+				</File>
+			</Filter>
+			<Filter
+				Name="Source Files"
+				Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
+				<File
+					RelativePath="..\src\OgreOcclusionQueriesQueryManager.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgrePlatformHierarchyInterface.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgrePlatformOcclusionQuery.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgrePlatformQueryManager.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgreSceneContentGenerator.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgreSceneNodeHierarchyInterface.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgreSolidBoundingBox.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgreSolidHalfBoundingBox.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgreVisibilityOptionsManager.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgreVisibilitySceneManager.cpp">
+				</File>
+				<File
+					RelativePath="..\src\OgreVisibilitySceneManagerDll.cpp">
+				</File>
+			</Filter>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/scripts/Plugin_VisibilitySceneManager.dsp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/scripts/Plugin_VisibilitySceneManager.dsp	(revision 59)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/scripts/Plugin_VisibilitySceneManager.dsp	(revision 59)
@@ -0,0 +1,137 @@
+# Microsoft Developer Studio Project File - Name="Plugin_OcclusionCullingSceneManager" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Plugin_OcclusionCullingSceneManager - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "Plugin_OcclusionCullingSceneManager.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "Plugin_OcclusionCullingSceneManager.mak" CFG="Plugin_OcclusionCullingSceneManager - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "Plugin_OcclusionCullingSceneManager - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Plugin_OcclusionCullingSceneManager - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Plugin_OcclusionCullingSceneManager - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\bin\Release"
+# PROP Intermediate_Dir "..\obj\Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_OCCLUSIONCULLINGSCENEMANAGER_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\include" /I "$(OGRE_PATH)\OgreMain\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_OCCLUSIONCULLINGSCENEMANAGER_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x418 /d "NDEBUG"
+# ADD RSC /l 0x418 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib OgreMain.lib /nologo /dll /machine:I386 /libpath:"$(OGRE_PATH)\OgreMain\lib\Release"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy ..\bin\Release\*.dll $(OGRE_PATH)\Samples\Common\bin\Release
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "Plugin_OcclusionCullingSceneManager - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\bin\Debug"
+# PROP Intermediate_Dir "..\obj\Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_OCCLUSIONCULLINGSCENEMANAGER_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\include" /I "$(OGRE_PATH)\OgreMain\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PLUGIN_OCCLUSIONCULLINGSCENEMANAGER_EXPORTS" /YX /FD /GZ /Zm200 /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x418 /d "_DEBUG"
+# ADD RSC /l 0x418 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib OgreMain_d.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"$(OGRE_PATH)\OgreMain\lib\Debug"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy ..\bin\Debug\*.dll $(OGRE_PATH)\Samples\Common\bin\Debug
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "Plugin_OcclusionCullingSceneManager - Win32 Release"
+# Name "Plugin_OcclusionCullingSceneManager - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\src\OgreOcclusionCullingResourceManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\OgreOcclusionCullingSceneManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\misc\OgreOcclusionCullingSceneManager.def
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\OgreOcclusionCullingSceneManagerDll.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\include\OgreOcclusionCullingResourceManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\OgreOcclusionCullingSceneManager.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSceneNodeHierarchyInterface.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSceneNodeHierarchyInterface.cpp	(revision 370)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSceneNodeHierarchyInterface.cpp	(revision 370)
@@ -0,0 +1,160 @@
+#include <OgreIteratorWrappers.h>
+#include <OgreCamera.h>
+#include <OgreSceneNode.h>
+#include <OgreEntity.h>
+#include <OgreSubEntity.h>
+#include <OgreLogManager.h>
+#include "OgreSceneNodeHierarchyInterface.h"
+#include "OgrePlatformOcclusionQuery.h"
+
+
+namespace Ogre {
+
+//-----------------------------------------------------------------------
+SceneNodeHierarchyInterface::SceneNodeHierarchyInterface(SceneManager *sm, RenderSystem *rsys): 
+PlatformHierarchyInterface(sm, rsys)
+{		
+}
+//-----------------------------------------------------------------------
+void SceneNodeHierarchyInterface::TraverseNode(GtpVisibility::HierarchyNode *node)
+{
+	++ mNumTraversedNodes;
+	
+	SceneNode *sceneNode = static_cast<SceneNode *>(node);
+
+	if (HasGeometry(node))
+	{
+		RenderNode(node);
+	}
+
+	// internal node: add children to priority queue for further processing
+	Node::ChildNodeIterator it = sceneNode->getChildIterator();
+				
+	while (it.hasMoreElements())			
+	{ 
+		mDistanceQueue->push(it.getNext());
+	}
+}
+//-----------------------------------------------------------------------
+void SceneNodeHierarchyInterface::RenderNode(GtpVisibility::HierarchyNode *node)
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	SceneNode *sceneNode = static_cast<SceneNode *>(node);
+
+	if (sceneNode->lastRendered() != sceneNode->lastVisited())
+	{
+		sceneNode->setLastRendered(sceneNode->lastVisited());
+		mVisibleNodes.push_back(node);
+
+		mSceneManager->_renderSceneNode(mCamera, sceneNode, mLeavePassesInQueue);
+	}
+#endif
+}
+//-----------------------------------------------------------------------
+bool SceneNodeHierarchyInterface::IsLeaf(GtpVisibility::HierarchyNode *node) const
+{
+	return (static_cast<SceneNode *>(node)->numChildren() == 0);
+}
+//-----------------------------------------------------------------------
+bool SceneNodeHierarchyInterface::HasGeometry(GtpVisibility::HierarchyNode *node) const
+{
+	return static_cast<SceneNode *>(node)->numAttachedObjects() > 0;
+}
+//-----------------------------------------------------------------------
+void SceneNodeHierarchyInterface::PullUpVisibility(GtpVisibility::HierarchyNode *node) const
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	SceneNode *sceneNode = static_cast<SceneNode *>(node);
+
+	while (sceneNode && !sceneNode->isNodeVisible())
+	{
+		sceneNode->setNodeVisible(true);
+		sceneNode = sceneNode->getParentSceneNode();
+	}
+#endif
+}
+//-----------------------------------------------------------------------
+float SceneNodeHierarchyInterface::GetSquaredDistance(GtpVisibility::HierarchyNode *node) const
+{
+	return static_cast<SceneNode *>(node)->getSquaredViewDepth(mCamera);
+}
+//-----------------------------------------------------------------------
+void SceneNodeHierarchyInterface::SetNodeVisible(GtpVisibility::HierarchyNode *node, 
+												 const bool visible) const
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	SceneNode *sceneNode = static_cast<SceneNode *>(node);
+	sceneNode->setNodeVisible(visible);
+#endif
+}
+//-----------------------------------------------------------------------
+void SceneNodeHierarchyInterface::SetLastVisited(GtpVisibility::HierarchyNode *node, 
+												 const unsigned int frameId) const
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	SceneNode *sceneNode = static_cast<SceneNode *>(node);
+	sceneNode->setLastVisited(frameId);
+#endif
+}
+//-----------------------------------------------------------------------
+bool SceneNodeHierarchyInterface::IsNodeVisible(GtpVisibility::HierarchyNode *node) const
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	SceneNode *sceneNode = static_cast<SceneNode *>(node);
+	return sceneNode->isNodeVisible();
+#else
+	return true;
+#endif
+}
+//-----------------------------------------------------------------------
+unsigned int SceneNodeHierarchyInterface::LastVisited(GtpVisibility::HierarchyNode *node) const
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	SceneNode *sceneNode = static_cast<SceneNode *>(node);
+	return sceneNode->lastVisited();
+#else
+	return 0;
+#endif
+}
+//-----------------------------------------------------------------------
+AxisAlignedBox *SceneNodeHierarchyInterface::GetBoundingBox(GtpVisibility::HierarchyNode *node)
+{
+	// only create renderable bounding box for new node
+	if (node != mSavedNode)
+	{
+		mSavedNode = node;
+		mBox = static_cast<SceneNode *>(node)->_getWorldAABB();
+	}
+
+	return &mBox;
+}
+//-----------------------------------------------------------------------
+void SceneNodeHierarchyInterface::VisualizeCulledNode(GtpVisibility::HierarchyNode *node, 
+													  GtpVisibility::CullingType type) const
+{
+	// TODO
+}
+//-----------------------------------------------------------------------
+void SceneNodeHierarchyInterface::GetNodeGeometryList(GtpVisibility::HierarchyNode *node,	
+											  GtpVisibility::GeometryVector *geometryList, 
+											  bool includeChildren)
+{
+	SceneNode::ObjectIterator objIt = 
+		static_cast<SceneNode *>(node)->getAttachedObjectIterator();
+
+	while (objIt.hasMoreElements())
+    {
+		MovableObject *movable = objIt.getNext();
+		
+		// we are interested only in the entities, i.e., instances of geometry
+		if (movable->getMovableType() == "Entity")
+		{
+			Entity *ent = static_cast<Entity *>(movable);
+			//std::stringstream d; d << "ent " << ent->getName(); 
+			//LogManager::getSingleton().logMessage(d.str());
+			geometryList->push_back(ent);
+		}
+    }
+}
+
+} // namespace Ogre	
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityTerrainSceneManager.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityTerrainSceneManager.cpp	(revision 347)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityTerrainSceneManager.cpp	(revision 347)
@@ -0,0 +1,831 @@
+#include "OgreVisibilityTerrainSceneManager.h"
+#include "OgreVisibilityOptionsManager.h"
+#include <OgreMath.h>
+#include <OgreIteratorWrappers.h>
+#include <OgreRenderSystem.h>
+#include <OgreCamera.h>
+#include <OgreLogManager.h>
+#include <OgreStringConverter.h>
+#include <OgreEntity.h>
+#include <OgreSubEntity.h>
+
+
+namespace Ogre {
+
+//-----------------------------------------------------------------------
+VisibilityTerrainSceneManager::VisibilityTerrainSceneManager(
+							GtpVisibility::VisibilityManager *visManager): 
+mVisibilityManager(visManager), 
+mShowVisualization(false),
+mRenderNodesForViz(false),
+mRenderNodesContentForViz(false),
+mVisualizeCulledNodes(false),
+mLeavePassesInQueue(0),
+mDelayRenderTransparents(true),
+mUseDepthPass(false),
+mIsDepthPassPhase(false),
+mUseItemBuffer(false),
+//mUseItemBuffer(true),
+mIsItemBufferPhase(false),
+mCurrentEntityId(1),
+mEnableDepthWrite(true),
+mSkipTransparents(false),
+mRenderTransparentsForItemBuffer(true),
+mExecuteVertexProgramForAllPasses(true),
+mIsHierarchicalCulling(false)
+{
+	mHierarchyInterface = new OctreeHierarchyInterface(this, mDestRenderSystem);
+	
+	//mDisplayNodes = true;
+	//mShowBoundingBoxes = true;
+	//mShowBoxes = true;
+
+	// TODO: set maxdepth to reasonable value
+	mMaxDepth = 50;
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::InitDepthPass()
+{
+	MaterialPtr depthMat = MaterialManager::getSingleton().getByName("Visibility/DepthPass");
+
+	if (depthMat.isNull())
+    {
+		depthMat = MaterialManager::getSingleton().create(
+                "Visibility/DepthPass",
+                ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+
+        mDepthPass = depthMat->getTechnique(0)->getPass(0);
+		mDepthPass->setColourWriteEnabled(false);
+		mDepthPass->setDepthWriteEnabled(true);
+		mDepthPass->setLightingEnabled(false);
+	}
+	else
+	{
+		mDepthPass = depthMat->getTechnique(0)->getPass(0);
+	}
+}
+//-----------------------------------------------------------------------
+VisibilityTerrainSceneManager::~VisibilityTerrainSceneManager()
+{
+	OGRE_DELETE(mHierarchyInterface);
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::InitItemBufferPass()
+{
+	MaterialPtr itemBufferMat = MaterialManager::getSingleton().
+		getByName("Visibility/ItemBufferPass");
+
+	if (itemBufferMat.isNull())
+    {
+		// Init
+		itemBufferMat = MaterialManager::getSingleton().create("Visibility/ItemBufferPass",
+                ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+
+		mItemBufferPass = itemBufferMat->getTechnique(0)->getPass(0);
+		mItemBufferPass->setColourWriteEnabled(true);
+		mItemBufferPass->setDepthWriteEnabled(true);
+		mItemBufferPass->setLightingEnabled(true);
+		//mItemBufferPass->setLightingEnabled(false);
+	}
+	else
+	{
+		mItemBufferPass = itemBufferMat->getTechnique(0)->getPass(0);
+	}
+	//mItemBufferPass->setAmbient(1, 1, 0);
+}
+//-------------------------------------------------------------------------
+void VisibilityTerrainSceneManager::setWorldGeometry( const String& filename )
+{
+    // Clear out any existing world resources (if not default)
+    if (ResourceGroupManager::getSingleton().getWorldResourceGroupName() != 
+        ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME)
+    {
+        ResourceGroupManager::getSingleton().clearResourceGroup(
+            ResourceGroupManager::getSingleton().getWorldResourceGroupName());
+    }
+    mTerrainPages.clear();
+    // Load the configuration
+    loadConfig(filename);
+
+    // Resize the octree, allow for 1 page for now
+    float max_x = mOptions.scale.x * mOptions.pageSize;
+    float max_y = mOptions.scale.y;
+    float max_z = mOptions.scale.z * mOptions.pageSize;
+
+	float maxAxis = std::max(max_x, max_y);
+	maxAxis = std::max(maxAxis, max_z);
+	resize( AxisAlignedBox( 0, 0, 0, maxAxis, maxAxis, maxAxis ) );
+    
+    setupTerrainMaterial();
+
+    setupTerrainPages();
+
+ }
+
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::PrepareVisualization(Camera *cam)
+{
+	// add player camera for visualization purpose
+	try 
+	{
+		Camera *c;
+		if ((c = getCamera("PlayerCam")) != NULL)
+		{
+			getRenderQueue()->addRenderable(c);
+		}   
+    }
+    catch (...)
+    {
+        // ignore
+    }
+	for (BoxList::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it)
+	{
+		getRenderQueue()->addRenderable(*it);
+	}
+	if (mRenderNodesForViz || mRenderNodesContentForViz)
+	{
+		// HACK: change node material so it is better suited for visualization
+		MaterialPtr nodeMat = MaterialManager::getSingleton().getByName("Core/NodeMaterial");
+		nodeMat->setAmbient(1, 1, 0);
+		nodeMat->setLightingEnabled(true);
+		nodeMat->getTechnique(0)->getPass(0)->removeAllTextureUnitStates();
+
+		for (NodeList::iterator it = mVisible.begin(); it != mVisible.end(); ++it)
+		{
+			if (mRenderNodesForViz)
+			{
+				// render the leaf nodes
+				if (((*it)->numAttachedObjects() > 0) && ((*it)->numChildren() == 0) && 
+					 (*it)->getAttachedObject(0)->getMovableType() == "Entity")
+				{
+					getRenderQueue()->addRenderable((*it));
+				}
+
+				// addbounding boxes instead of node itself
+				//(*it)->_addBoundingBoxToQueue(getRenderQueue());
+			}
+			if (mRenderNodesContentForViz) 
+			{
+				(*it)->_addToRenderQueue(cam, getRenderQueue(), false);
+			}
+		}
+	}	
+}
+//-----------------------------------------------------------------------
+Pass *VisibilityTerrainSceneManager::setPass(Pass* pass)
+{
+	// TODO: setting vertex program is not efficient
+	//Pass *usedPass = ((mIsDepthPassPhase && !pass->hasVertexProgram()) ? mDepthPass : pass); 
+	
+	// set depth fill pass if we currently do not make an aabb occlusion query
+	Pass *usedPass = (mIsDepthPassPhase && !mHierarchyInterface->IsBoundingBoxQuery() ? 
+					  mDepthPass : pass);
+		
+	IlluminationRenderStage savedStage = mIlluminationStage; 
+	
+	// set illumination stage to NONE so no shadow material is used 
+	// for depth pass or for occlusion query
+	if (mIsDepthPassPhase || mHierarchyInterface->IsBoundingBoxQuery())
+	{
+		mIlluminationStage = IRS_NONE;
+	}
+	
+	// --- set vertex program of current pass in order to set correct depth
+	if (mExecuteVertexProgramForAllPasses && mIsDepthPassPhase && pass->hasVertexProgram())
+	{
+		// add vertex program of current pass to depth pass
+		mDepthPass->setVertexProgram(pass->getVertexProgramName());
+
+		if (mDepthPass->hasVertexProgram())
+		{
+			const GpuProgramPtr& prg = mDepthPass->getVertexProgram();
+			// Load this program if not done already
+			if (!prg->isLoaded())
+				prg->load();
+			// Copy params
+			mDepthPass->setVertexProgramParameters(pass->getVertexProgramParameters());
+		}
+	}
+	else if (mDepthPass->hasVertexProgram())
+	{
+		mDepthPass->setVertexProgram("");
+	}
+	
+
+	bool IsDepthWrite = usedPass->getDepthWriteEnabled();
+
+	// global option which enables / disables depth writes
+	if (!mEnableDepthWrite)
+	{
+		usedPass->setDepthWriteEnabled(false);
+	}
+	//else if (mIsItemBufferPass) {usedPass = mItemBufferPass;}
+	
+	Pass *result = SceneManager::setPass(usedPass);
+
+	// reset depth write
+	if (!mEnableDepthWrite)
+	{
+		usedPass->setDepthWriteEnabled(IsDepthWrite);
+	}
+
+	// reset illumination stage
+	mIlluminationStage = savedStage;
+
+	return result;
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::_findVisibleObjects(Camera* cam,
+														bool onlyShadowCasters)
+{
+	//-- show visible scene nodes and octree bounding boxes from last frame
+	if (mShowVisualization)
+    {
+		PrepareVisualization(cam);
+	}
+	else 
+	{	
+		// for hierarchical culling, we interleave identification 
+		// and rendering of objects in _renderVisibibleObjects
+
+		// for the shadow pass we use only standard rendering
+		// because of low occlusion
+		if (mShadowTechnique == SHADOWTYPE_TEXTURE_MODULATIVE && 
+			mIlluminationStage == IRS_RENDER_TO_TEXTURE)
+		{
+			TerrainSceneManager::_findVisibleObjects(cam, onlyShadowCasters);
+		}
+		// only shadow casters will be rendered in shadow texture pass
+		// mHierarchyInterface->SetOnlyShadowCasters(onlyShadowCasters);
+	}
+	
+	
+	// -- delete lists stored for visualization
+	mVisible.clear();
+	mBoxes.clear();
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::_renderVisibleObjects()
+{
+
+	InitDepthPass(); 	  // create material for depth pass
+	InitItemBufferPass(); // create material for item buffer pass
+
+	// save ambient light to reset later
+	ColourValue savedAmbient = mAmbientLight;
+
+	//-- apply standard rendering for some modes (e.g., visualization, shadow pass)
+
+	if (mShowVisualization ||
+	   (mShadowTechnique == SHADOWTYPE_TEXTURE_MODULATIVE && 
+	    mIlluminationStage == IRS_RENDER_TO_TEXTURE))
+	{	
+		IlluminationRenderStage savedStage = mIlluminationStage; 
+	
+		if (mShowVisualization) 
+			// disable illumination stage to prevent rendering shadows
+			mIlluminationStage = IRS_NONE;
+
+		// standard rendering for shadow maps because of performance
+		TerrainSceneManager::_renderVisibleObjects();
+
+		mIlluminationStage = savedStage;
+	}
+	else //-- the hierarchical culling algorithm
+	{
+		// don't render backgrounds for item buffer
+		if (mUseItemBuffer)
+		{
+			clearSpecialCaseRenderQueues();
+			getRenderQueue()->clear();
+		}
+
+		//-- hierarchical culling
+		// the objects of different layers (e.g., background, scene, 
+		// overlay) must be identified and rendered one after another
+
+		//-- render all early skies
+		clearSpecialCaseRenderQueues();
+		addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND);
+		addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY);
+		setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE);
+
+		TerrainSceneManager::_renderVisibleObjects();
+
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+		// delete previously rendered content
+		_deleteRenderedQueueGroups();
+#endif
+
+		//-- prepare queue for visible objects (i.e., all but overlay and skies late)
+		clearSpecialCaseRenderQueues();
+		addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_LATE);
+		addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY);
+	
+		// exclude this queues from hierarchical rendering
+		setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE);
+
+		// set all necessary parameters for 
+		// hierarchical visibility culling and rendering
+		InitVisibilityCulling(mCameraInProgress);
+
+		/** 
+		* the hierarchical culling algorithm
+		* for depth pass: we just find objects and update depth buffer
+		* for "delayed" rendering: we render some passes afterwards
+		* e.g., transparents, because they need front-to-back sorting
+		**/
+		
+		mVisibilityManager->ApplyVisibilityCulling();
+
+		// delete remaining renderables from queue (all not in mLeavePassesInQueue)
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+		_deleteRenderedQueueGroups(mLeavePassesInQueue);
+#endif
+
+		//-- reset parameters
+		mIsDepthPassPhase = false;
+		mIsItemBufferPhase = false;
+		mSkipTransparents = false;
+		mLeavePassesInQueue = 0;
+		
+
+		// add visible nodes found by the visibility culling algorithm
+		if (mUseDepthPass)
+		{
+			for (NodeList::iterator it = mVisible.begin(); it != mVisible.end(); ++it)
+			{
+				(*it)->_addToRenderQueue(mCameraInProgress, getRenderQueue(), false);
+			}
+		}
+		
+		//-- now we can render all remaining queue objects
+		// used for depth pass, transparents, overlay 
+		clearSpecialCaseRenderQueues();
+
+		TerrainSceneManager::_renderVisibleObjects();
+	}
+		
+	// HACK: set the new render level index, important to avoid cracks
+	// in terrain caused by LOD
+	TerrainRenderable::NextRenderLevelIndex();
+	
+	// reset ambient light
+	setAmbientLight(savedAmbient);
+
+	getRenderQueue()->clear(); // finally clear render queue
+	OGRE_DELETE(mRenderQueue); // HACK: should be cleared before...
+	//WriteLog(); // write out stats
+
+}
+
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::_updateSceneGraph(Camera* cam)
+{
+	mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface);
+	mHierarchyInterface->SetRenderSystem(mDestRenderSystem);
+
+	TerrainSceneManager::_updateSceneGraph(cam);
+}
+//-----------------------------------------------------------------------
+bool VisibilityTerrainSceneManager::setOption(const String & key, const void * val)
+{
+	if (key == "UseDepthPass")
+	{
+		mUseDepthPass = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "PrepareVisualization")
+	{
+		mShowVisualization = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "RenderNodesForViz")
+	{
+		mRenderNodesForViz = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "RenderNodesContentForViz")
+	{
+		mRenderNodesContentForViz = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "SkyBoxEnabled")
+	{
+		mSkyBoxEnabled = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "SkyPlaneEnabled")
+	{
+		mSkyPlaneEnabled = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "SkyDomeEnabled")
+	{
+		mSkyDomeEnabled = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "VisualizeCulledNodes")
+	{
+		mVisualizeCulledNodes = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "DelayRenderTransparents")
+	{
+		mDelayRenderTransparents = (*static_cast<const bool *>(val));
+		return true;
+	}
+
+	if (key == "DepthWrite")
+	{
+		mEnableDepthWrite = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "UseItemBuffer")
+	{
+		mUseItemBuffer = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "ExecuteVertexProgramForAllPasses")
+	{ 
+		mExecuteVertexProgramForAllPasses  = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "RenderTransparentsForItemBuffer")
+	{ 
+		mRenderTransparentsForItemBuffer  = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "NodeVizScale")
+	{ 
+		OctreeNode::setVizScale(*static_cast<const float *>(val));
+		return true;
+	}
+
+	if (key == "UseArbQueries")
+	{
+		bool useArbQueries = (*static_cast<const bool *>(val));
+
+		if (useArbQueries)
+		{
+			mHierarchyInterface->DeleteQueries();
+			mDestRenderSystem->setConfigOption("ArbQueries", "Yes");
+		}
+		else
+		{
+			mHierarchyInterface->DeleteQueries();
+			mDestRenderSystem->setConfigOption("ArbQueries", "No");
+		}
+	}
+	return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
+		setOption(key, val) || TerrainSceneManager::setOption(key, val);
+}
+//-----------------------------------------------------------------------
+bool VisibilityTerrainSceneManager::getOption(const String & key, void *val)
+{
+	if (key == "NumHierarchyNodes")
+	{
+		* static_cast<unsigned int *>(val) = (unsigned int)mNumOctants;
+		return true;
+	}
+	
+	return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
+		getOption(key, val) && TerrainSceneManager::getOption(key, val);
+}
+//-----------------------------------------------------------------------
+bool VisibilityTerrainSceneManager::getOptionValues(const String & key, 
+													StringVector &refValueList)
+{
+	return TerrainSceneManager::getOptionValues( key, refValueList);
+}
+//-----------------------------------------------------------------------
+bool VisibilityTerrainSceneManager::getOptionKeys(StringVector & refKeys)
+{
+	return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
+		getOptionKeys(refKeys) || TerrainSceneManager::getOptionKeys(refKeys);
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::setVisibilityManager(GtpVisibility::
+														 VisibilityManager *visManager)
+{
+	mVisibilityManager = visManager;
+}
+//-----------------------------------------------------------------------
+GtpVisibility::VisibilityManager *VisibilityTerrainSceneManager::getVisibilityManager( void )
+{
+	return mVisibilityManager;
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::WriteLog()
+{
+	std::stringstream d;
+
+	d << "Depth pass: " << StringConverter::toString(mUseDepthPass) << ", "
+	  << "Delay transparents: " << StringConverter::toString(mDelayRenderTransparents) << ", "
+	  << "Use optimization: " << StringConverter::toString(mHierarchyInterface->GetTestGeometryForVisibleLeaves()) << ", "
+	  << "Algorithm type: " << mVisibilityManager->GetCullingManagerType() << ", "
+	  << "Hierarchy nodes: " << mNumOctants << ", " 
+	  << "Traversed nodes: " << mHierarchyInterface->GetNumTraversedNodes() << ", "
+	  << "Rendered nodes: " << mHierarchyInterface->GetNumRenderedNodes() << ", "
+	  << "Query culled nodes: " << mVisibilityManager->GetCullingManager()->GetNumQueryCulledNodes() << ", "
+	  << "Frustum culled nodes: " << mVisibilityManager->GetCullingManager()->GetNumFrustumCulledNodes() << ", "
+      << "Queries issued: " << mVisibilityManager->GetCullingManager()->GetNumQueriesIssued() << "\n";
+
+	LogManager::getSingleton().logMessage(d.str());
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::renderObjects(
+	const RenderPriorityGroup::TransparentRenderablePassList& objs, 
+    bool doLightIteration, const LightList* manualLightList)
+{
+	// for correct rendering, transparents must be rendered after hierarchical culling
+	if (!mSkipTransparents)
+	{
+		OctreeSceneManager::renderObjects(objs, doLightIteration, manualLightList);
+	}
+}
+//-----------------------------------------------------------------------
+bool VisibilityTerrainSceneManager::validatePassForRendering(Pass* pass)
+{
+	// skip all but first pass if we are doing the depth pass
+	if ((mIsDepthPassPhase || mIsItemBufferPhase) && pass->getIndex() > 0)
+	{
+		return false;
+	}
+	return SceneManager::validatePassForRendering(pass);
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::renderQueueGroupObjects(RenderQueueGroup* pGroup)
+{
+	if (!mIsItemBufferPhase)
+	{
+		TerrainSceneManager::renderQueueGroupObjects(pGroup);
+		return;
+	}
+
+	//-- item buffer
+
+    // Iterate through priorities
+    RenderQueueGroup::PriorityMapIterator groupIt = pGroup->getIterator();
+
+	while (groupIt.hasMoreElements())
+    {
+		RenderItemBuffer(groupIt.getNext());
+	}
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::RenderItemBuffer(RenderPriorityGroup* pGroup)
+{
+	// Do solids
+	RenderPriorityGroup::SolidRenderablePassMap solidObjs = pGroup->_getSolidPasses();
+
+	// ----- SOLIDS LOOP -----
+	RenderPriorityGroup::SolidRenderablePassMap::const_iterator ipass, ipassend;
+	ipassend = solidObjs.end();
+
+	for (ipass = solidObjs.begin(); ipass != ipassend; ++ipass)
+	{
+		// Fast bypass if this group is now empty
+		if (ipass->second->empty()) 
+			continue;
+
+		// Render only first pass
+		if (ipass->first->getIndex() > 0)
+			continue;
+
+		RenderPriorityGroup::RenderableList* rendList = ipass->second;
+		
+		RenderPriorityGroup::RenderableList::const_iterator irend, irendend;
+		irendend = rendList->end();
+			
+		for (irend = rendList->begin(); irend != irendend; ++irend)
+		{
+			std::stringstream d; d << "itembuffer, pass name: " << 
+				ipass->first->getParent()->getParent()->getName();
+				
+			LogManager::getSingleton().logMessage(d.str());
+			
+			RenderSingleObjectForItemBuffer(*irend, ipass->first);
+		}
+	}
+
+	// -- TRANSPARENT LOOP: must be handled differently 
+
+	// transparents are treated either as solids or completely discarded
+	if (mRenderTransparentsForItemBuffer)
+	{
+		RenderPriorityGroup::TransparentRenderablePassList transpObjs = 
+			pGroup->_getTransparentPasses();
+		RenderPriorityGroup::TransparentRenderablePassList::const_iterator 
+			itrans, itransend;
+
+		itransend = transpObjs.end();
+		for (itrans = transpObjs.begin(); itrans != itransend; ++itrans)
+		{
+			// like for solids, render only first pass
+			if (itrans->pass->getIndex() == 0)
+			{	
+				RenderSingleObjectForItemBuffer(itrans->renderable, itrans->pass);
+			}
+		}
+	}
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::RenderSingleObjectForItemBuffer(Renderable *rend, Pass *pass)
+{
+	static LightList nullLightList;
+	
+	int col[4];
+	
+	// -- create color code out of object id
+	col[0] = (rend->getId() >> 16) & 255;
+	col[1] = (rend->getId() >> 8) & 255;
+	col[2] = rend->getId() & 255;
+//	col[3] = 255;
+
+	//mDestRenderSystem->setColour(col[0], col[1], col[2], col[3]);
+    
+	mItemBufferPass->setAmbient(ColourValue(col[0] / 255.0f,
+										    col[1] / 255.0f, 
+											col[2] / 255.0f, 1));
+
+	// set vertex program of current pass
+	if (mExecuteVertexProgramForAllPasses && pass->hasVertexProgram())
+	{
+		mItemBufferPass->setVertexProgram(pass->getVertexProgramName());
+
+		if (mItemBufferPass->hasVertexProgram())
+		{
+			const GpuProgramPtr& prg = mItemBufferPass->getVertexProgram();
+			// Load this program if not done already
+			if (!prg->isLoaded())
+				prg->load();
+			// Copy params
+			mItemBufferPass->setVertexProgramParameters(pass->getVertexProgramParameters());
+		}
+	}
+	else if (mItemBufferPass->hasVertexProgram())
+	{
+		mItemBufferPass->setVertexProgram("");
+	}
+
+	Pass *usedPass = setPass(mItemBufferPass); 
+
+
+	// Render a single object, this will set up auto params if required
+	renderSingleObject(rend, usedPass, false, &nullLightList);
+}
+//-----------------------------------------------------------------------
+GtpVisibility::VisibilityManager *VisibilityTerrainSceneManager::GetVisibilityManager()
+{
+	return mVisibilityManager;
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::InitVisibilityCulling(Camera *cam)
+{
+	// reset culling manager stats
+	mVisibilityManager->GetCullingManager()->InitFrame(mVisualizeCulledNodes);
+
+	// set depth pass flag before rendering
+	mIsDepthPassPhase = mUseDepthPass;
+
+	// item buffer needs full ambient lighting to use item colors as unique id
+	if (mUseItemBuffer) 
+	{
+		mIsItemBufferPhase = true;
+		setAmbientLight(ColourValue(1,1,1,1));
+	}
+
+
+	// set passes which are stored in render queue 
+	// for rendering AFTER hierarchical culling, i.e., passes which need 
+	// a special rendering order
+	mLeavePassesInQueue = 0;
+
+	if (!mUseDepthPass && !mUseItemBuffer)
+	{
+		if (mShadowTechnique == SHADOWTYPE_STENCIL_ADDITIVE)
+		{
+			// TODO: remove this pass because it should be processed during hierarchical culling
+			//mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_NOSHADOW;
+
+			mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_DECAL;
+			mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_DIFFUSE_SPECULAR;
+			mLeavePassesInQueue |= RenderPriorityGroup::TRANSPARENT_PASSES;
+
+			// just render ambient stuff
+			mIlluminationStage = IRS_AMBIENT;
+		}
+	
+		if (mShadowTechnique == SHADOWTYPE_STENCIL_MODULATIVE)
+		{
+			mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_NOSHADOW;
+			mLeavePassesInQueue |= RenderPriorityGroup::TRANSPARENT_PASSES;
+		}
+	
+		// transparents should be rendered after hierarchical culling to 
+		// provide front-to-back ordering
+		if (mDelayRenderTransparents)
+		{
+			mLeavePassesInQueue |= RenderPriorityGroup::TRANSPARENT_PASSES;
+		}
+	}
+
+	// skip rendering transparents in the hierarchical culling
+	// (because they will be rendered afterwards)
+	mSkipTransparents = mUseDepthPass || 
+		(mLeavePassesInQueue & RenderPriorityGroup::TRANSPARENT_PASSES);
+
+	// -- initialise interface for rendering traversal of the hierarchy
+	mHierarchyInterface->SetHierarchyRoot(mOctree);
+	
+	// possible two cameras (one for culling, one for rendering)
+	mHierarchyInterface->InitTraversal(mCameraInProgress, 
+							mCullCamera ? getCamera("CullCamera") : NULL,
+							mLeavePassesInQueue);
+		
+	//std::stringstream d; d << "leave passes in queue: " << mLeavePassesInQueue;LogManager::getSingleton().logMessage(d.str());
+}
+//-----------------------------------------------------------------------
+OctreeHierarchyInterface *VisibilityTerrainSceneManager::GetHierarchyInterface()
+{
+	return mHierarchyInterface;
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::endFrame()
+{
+	TerrainRenderable::ResetRenderLevelIndex();
+}
+//-----------------------------------------------------------------------
+Entity* VisibilityTerrainSceneManager::createEntity(const String& entityName, 
+													const String& meshName)
+{
+	Entity *ent = SceneManager::createEntity(entityName, meshName);
+
+	for (int i = 0; i < (int)ent->getNumSubEntities(); ++i)
+	{
+		ent->getSubEntity(i)->setId(mCurrentEntityId);
+	}
+
+	// increase counter of entity id values
+	++ mCurrentEntityId;
+
+	return ent;
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::renderAdditiveStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup)
+{
+	// only render solid passes during hierarchical culling
+	if (mIsHierarchicalCulling)
+	{
+		RenderQueueGroup::PriorityMapIterator groupIt = pGroup->getIterator();
+	    LightList lightList;
+
+		while (groupIt.hasMoreElements())
+		{
+			RenderPriorityGroup* pPriorityGrp = groupIt.getNext();
+
+			// Sort the queue first
+			pPriorityGrp->sort(mCameraInProgress);
+
+			// Clear light list
+			lightList.clear();
+
+			// Render all the ambient passes first, no light iteration, no lights
+			mIlluminationStage = IRS_AMBIENT;
+
+			OctreeSceneManager::renderObjects(pPriorityGrp->_getSolidPasses(), false, &lightList);
+			// Also render any objects which have receive shadows disabled
+			OctreeSceneManager::renderObjects(pPriorityGrp->_getSolidPassesNoShadow(), true);
+		}
+	}
+	else
+	{
+		OctreeSceneManager::renderAdditiveStencilShadowedQueueGroupObjects(pGroup);
+	}
+}
+//-----------------------------------------------------------------------
+void VisibilityTerrainSceneManager::renderModulativeStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup)
+{
+   if (mIsHierarchicalCulling)
+   {
+	   // Iterate through priorities
+	   RenderQueueGroup::PriorityMapIterator groupIt = pGroup->getIterator();
+
+	   while (groupIt.hasMoreElements())
+	   {
+		   RenderPriorityGroup* pPriorityGrp = groupIt.getNext();
+
+		   // Sort the queue first
+		   pPriorityGrp->sort(mCameraInProgress);
+
+		   // Do (shadowable) solids
+		   OctreeSceneManager::renderObjects(pPriorityGrp->_getSolidPasses(), true);
+	   }
+   }
+   else
+   {
+	   SceneManager::renderModulativeStencilShadowedQueueGroupObjects(pGroup);
+   }
+}
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgrePlatformOcclusionQuery.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgrePlatformOcclusionQuery.cpp	(revision 115)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgrePlatformOcclusionQuery.cpp	(revision 115)
@@ -0,0 +1,33 @@
+#include "OgrePlatformOcclusionQuery.h"
+#include <OgreLogManager.h>
+
+namespace Ogre {
+
+//-----------------------------------------------------------------------
+PlatformOcclusionQuery::PlatformOcclusionQuery(RenderSystem *rsys)
+{
+	mHardwareOcclusionQuery = rsys->createHardwareOcclusionQuery();
+}
+//-----------------------------------------------------------------------
+PlatformOcclusionQuery::~PlatformOcclusionQuery()
+{
+	delete mHardwareOcclusionQuery;
+}
+//-----------------------------------------------------------------------
+void PlatformOcclusionQuery::BeginQuery()
+{
+	mHardwareOcclusionQuery->beginOcclusionQuery();
+}
+//-----------------------------------------------------------------------
+void PlatformOcclusionQuery::EndQuery()
+{
+	mHardwareOcclusionQuery->endOcclusionQuery();
+}
+//-----------------------------------------------------------------------
+bool PlatformOcclusionQuery::GetQueryResult(unsigned int &visiblePixels, 
+											const bool waitForResult) const
+{
+	return mHardwareOcclusionQuery->pullOcclusionQuery(&visiblePixels, waitForResult);
+}
+
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilitySceneManagerDll.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilitySceneManagerDll.cpp	(revision 133)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilitySceneManagerDll.cpp	(revision 133)
@@ -0,0 +1,87 @@
+/*
+-----------------------------------------------------------------------------
+This source file is part of OGRE
+    (Object-oriented Graphics Rendering Engine)
+For the latest info, see http://www.ogre3d.org/
+
+Copyright © 2000-2002 The OGRE Team
+Also see acknowledgements in Readme.html
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#include <OgreVisibilityTerrainSceneManager.h>
+#include <OgreVisibilityOctreeSceneManager.h>
+//#include <OgreVisibilityDotSceneManager.h>
+
+#include <OgreHeightmapTerrainPageSource.h>
+#include <OgreRoot.h>
+#include <OgreLogManager.h>
+#include "VisibilityManager.h"
+#include "VisibilityEnvironment.h"
+
+GtpVisibility::VisibilityEnvironment *visEnv;
+GtpVisibility::VisibilityManager *visManager;
+
+namespace Ogre {
+
+VisibilityOctreeSceneManager *visibilityOctreePlugin;
+VisibilityTerrainSceneManager *visibilityTerrainPlugin;
+//VisibilityDotSceneManager *visibilityDotPlugin;
+
+HeightmapTerrainPageSource *heightmapTerrainPageSource;
+
+//-----------------------------------------------------------------------
+extern "C" void __declspec(dllexport) dllStartPlugin(void)
+{
+	visEnv = new GtpVisibility::VisibilityEnvironment();
+	visManager = new GtpVisibility::VisibilityManager(visEnv);
+
+	// Create new scene manager
+	visibilityOctreePlugin = new VisibilityOctreeSceneManager(visManager);
+	visibilityTerrainPlugin = new VisibilityTerrainSceneManager(visManager);
+	//occlusionDotPlugin = new VisibilityDotSceneManager();
+
+	heightmapTerrainPageSource = new HeightmapTerrainPageSource();
+	
+	// Register
+	Root::getSingleton().setSceneManager(ST_GENERIC, visibilityOctreePlugin);
+	Root::getSingleton().setSceneManager(ST_EXTERIOR_CLOSE, visibilityTerrainPlugin);
+	//Root::getSingleton().setSceneManager(ST_GENERIC, occlusionDotPlugin);
+
+	visibilityTerrainPlugin->registerPageSource("Heightmap", heightmapTerrainPageSource);
+}
+//-----------------------------------------------------------------------
+extern "C" void __declspec(dllexport) dllShutdownPlugin()
+{
+	visibilityTerrainPlugin->shutdown();
+	heightmapTerrainPageSource->shutdown();
+}
+//-----------------------------------------------------------------------
+extern "C" void __declspec(dllexport) dllStopPlugin()
+{
+	delete heightmapTerrainPageSource;
+
+	delete visibilityOctreePlugin;
+	delete visibilityTerrainPlugin;
+	//delete occlusionDotPlugin;
+	
+	delete visManager;
+	delete visEnv;
+}
+
+
+} //namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityOptionsManager.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityOptionsManager.cpp	(revision 254)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityOptionsManager.cpp	(revision 254)
@@ -0,0 +1,87 @@
+#include "OgreVisibilityOptionsManager.h"
+
+namespace Ogre {
+//-----------------------------------------------------------------------
+VisibilityOptionsManager::VisibilityOptionsManager(
+							GtpVisibility::VisibilityManager *visManager, 
+							PlatformHierarchyInterface *hierarchyInterface):
+mVisibilityManager(visManager), 
+mHierarchyInterface(hierarchyInterface)
+{
+}
+//-----------------------------------------------------------------------
+bool VisibilityOptionsManager::setOption(const String & key, const void * val)
+{
+	if (key == "Algorithm")
+	{
+		// delete old queries (not needed for e.g., view frustum culling)
+		mHierarchyInterface->DeleteQueries();
+		mVisibilityManager->SetCullingManager(*static_cast<const 
+			GtpVisibility::VisibilityEnvironment::CullingManagerType *>(val));
+		return true;
+	}
+	if (key == "Threshold")
+	{
+		mVisibilityManager->SetVisibilityCullingThreshold(*static_cast<const int *>(val));
+		return true;
+	}
+	if (key == "AssumedVisibility")
+	{
+		mVisibilityManager->SetAssumedVisibilityForChc(*static_cast<const int *>(val));
+		return true;
+	}
+	if (key == "TestGeometryForVisibleLeaves")
+	{
+		mHierarchyInterface->TestGeometryForVisibleLeaves(*static_cast<const bool *>(val));
+		return true;
+	}
+	
+	return false;
+}
+//-----------------------------------------------------------------------
+bool VisibilityOptionsManager::getOption( const String & key, void *val )
+{
+	if (key == "NumTraversedNodes")
+	{
+		* static_cast <unsigned int *>(val) = 
+			mHierarchyInterface->GetNumTraversedNodes();
+		return true;
+	}
+	if (key == "NumRenderedNodes")
+	{
+		* static_cast <unsigned int *>(val) = 
+			mHierarchyInterface->GetNumRenderedNodes();
+		return true;
+	}
+	if (key == "NumQueryCulledNodes")
+	{
+		* static_cast <unsigned int *>(val) = 
+			mVisibilityManager->GetCullingManager()->GetNumQueryCulledNodes();
+		return true;
+	}
+	if (key == "NumFrustumCulledNodes")
+	{
+		* static_cast<unsigned int *>(val) = 
+			mVisibilityManager->GetCullingManager()->GetNumFrustumCulledNodes();
+		return true;
+	}
+	if (key == "NumQueriesIssued")
+	{
+		* static_cast<unsigned int *>(val) = 
+			mVisibilityManager->GetCullingManager()->GetNumQueriesIssued();
+		return true;
+	}
+	
+	return false;
+}
+//-----------------------------------------------------------------------
+bool VisibilityOptionsManager::getOptionKeys(StringVector & refKeys)
+{
+	refKeys.push_back("NumRenderedNodes");
+	refKeys.push_back("NumTraversedNodes");
+	refKeys.push_back("NumQueryCulledNodes");
+	refKeys.push_back("NumFrustumCulledNodes");
+	
+	return true;
+}
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSceneContentGenerator.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSceneContentGenerator.cpp	(revision 415)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSceneContentGenerator.cpp	(revision 415)
@@ -0,0 +1,212 @@
+/**
+    \file 
+        SceneContentGenerator.cpp
+    \brief
+        Creates content for a scene.
+*/
+#include "OgreSceneContentGenerator.h"
+
+// limit for failed attempts to create objects (to avoids infinite loop)
+#define MAX_FAILED_ATTEMPTS 500000
+
+namespace Ogre {
+
+/*************************************************************/
+/*           SceneContentGenerator implementation            */
+/*************************************************************/
+
+//-----------------------------------------------------------------------
+SceneContentGenerator::SceneContentGenerator(SceneManager *sm):
+mSceneMgr(sm),
+mMinPos(Vector3(-70.0f, -70.0f, 0.0f)),
+mMaxPos(Vector3(70.0f, 70.0f, 600.0f)), 
+mMinAngle(Vector3(0.0f, 0.0f, 0.0f)),
+mMaxAngle(Vector3(360, 360, 360)),
+mScale(0.1, 0.1, 0.1)//, mObjectCount(0)
+{
+}
+//-----------------------------------------------------------------------
+void SceneContentGenerator::GenerateScene(int numObjects, const String &objName)
+{
+	int new_size = GetObjectCount() + numObjects;
+	int failed_attempts = 0; // counter used to avoid invinite loop
+
+	//-- create random values between zero and one
+	while ((GetObjectCount() <  new_size) && 
+		   (failed_attempts < MAX_FAILED_ATTEMPTS))
+	{
+		// Setup the ray scene query
+		Vector3 rotation = Vector3(Math::RangeRandom(mMinAngle.x, mMaxAngle.x),
+								   Math::RangeRandom(mMinAngle.y, mMaxAngle.y),
+								   Math::RangeRandom(mMinAngle.z, mMaxAngle.z));
+
+		Vector3 position = Vector3(Math::RangeRandom(mMinPos.x, mMaxPos.x),
+								   Math::RangeRandom(mMinPos.y, mMaxPos.y),
+								   Math::RangeRandom(mMinPos.z, mMaxPos.z));
+
+		// failed to generate new object
+		if (!GenerateSceneObject(position, rotation, objName))
+			++ failed_attempts; 
+	}
+}
+//-----------------------------------------------------------------------
+SceneNode *SceneContentGenerator::GenerateSceneObject(const Vector3 &position, 
+					 const Quaternion &orientation, const String& objName)
+{
+	char name[25];
+
+	sprintf(name, "%s Entity%d", objName.c_str(), GetObjectCount());
+		
+	Entity *ent = mSceneMgr->createEntity(name, objName + ".mesh");
+	
+	ent->setCastShadows(true);
+
+	SceneNode *node = mSceneMgr->getRootSceneNode()->
+		createChildSceneNode(String(name) + "Node", position);
+
+	//std::stringstream d; d << "new node: " << name << "Node";
+	//Ogre::LogManager::getSingleton().logMessage(d.str());
+
+	//ent->setCastShadows(false);
+	node->attachObject(ent);
+	node->setScale(mScale);
+	node->setOrientation(orientation);
+
+	// store pointer to node and object
+	mSceneNodes.push_back(node);
+	mEntities.push_back(ent);
+	
+	return node;
+}
+//-----------------------------------------------------------------------
+SceneNode *SceneContentGenerator::GenerateSceneObject(const Vector3 &position, 
+					 const Vector3 &rotation, const String& objName)
+{
+	Matrix3 mat;
+	mat.FromEulerAnglesYXZ(Degree(rotation.x), Degree(rotation.y),
+						   Degree(rotation.z));
+
+	return GenerateSceneObject(position, Quaternion(mat), objName);
+}
+//-----------------------------------------------------------------------
+void SceneContentGenerator::SetMinAngle(Vector3 minAngle)
+{
+	mMinAngle = minAngle;
+}
+//-----------------------------------------------------------------------
+void SceneContentGenerator::SetMaxAngle(Vector3 maxAngle)
+{
+	mMaxAngle = maxAngle;
+}
+//-----------------------------------------------------------------------
+void SceneContentGenerator::SetMinPos(Vector3 minPos)
+{
+	mMinPos = minPos;
+}
+//-----------------------------------------------------------------------
+void SceneContentGenerator::SetMaxPos(Vector3 maxPos)
+{
+	mMaxPos = maxPos;
+}
+//-----------------------------------------------------------------------
+int SceneContentGenerator::GetObjectCount()
+{
+	return (int)mSceneNodes.size();
+}
+//-----------------------------------------------------------------------
+void SceneContentGenerator::SetScale(Vector3 scale)
+{
+	mScale = scale;
+}
+//-----------------------------------------------------------------------
+bool SceneContentGenerator::WriteObjects(const std::string &filename)
+{
+	std::ofstream ofstr(filename.c_str());
+	std::vector<SceneNode *>::const_iterator it, it_end;
+
+	it_end = mSceneNodes.end();
+
+	if(!ofstr.is_open())
+		return false;
+
+	char str[100];
+
+	for(it = mSceneNodes.begin(); it < it_end; ++it)
+	{
+		SceneNode *node = (*it);
+		sscanf(node->getName().c_str(), "%s ", str); // write name of mesh
+
+		ofstr << str << " "
+			  << StringConverter::toString(node->getPosition()) << " " 
+			  << StringConverter::toString(node->getOrientation()) << " "
+			  << StringConverter::toString(node->getScale()) << "\n";
+	}
+	ofstr.close();
+
+	return true;
+}
+//-----------------------------------------------------------------------
+bool SceneContentGenerator::LoadObjects(const std::string &filename)
+{
+	std::ifstream ifstr(filename.c_str());
+	
+	char line[256];
+
+	Vector3 position;
+	Quaternion orientation;
+	char objName[100];
+
+	if (!ifstr.is_open())
+		return false;
+
+	//mSceneNodes.clear(); // reset list of objects
+
+	while (!ifstr.eof()) 
+	{
+		ifstr.getline(line, 256);
+		sscanf(line, "%s %f %f %f %f %f %f %f %f %f %f", objName, 
+			&position.x, &position.y, &position.z,
+			&orientation.w, &orientation.x, &orientation.y, &orientation.z,
+			&mScale.x, &mScale.y, &mScale.z);
+
+		GenerateSceneObject(position, orientation, objName);
+		
+		//std::stringstream d; d << StringConverter::toString(position) << " " << StringConverter::toString(orientation);
+		//LogManager::getSingleton().logMessage(d.str());
+	}
+	ifstr.close();
+
+	return true;
+}
+//-----------------------------------------------------------------------
+SceneNodeList *SceneContentGenerator::GetGeneratedSceneNodes()
+{
+	return &mSceneNodes;
+}
+//-----------------------------------------------------------------------
+EntityList *SceneContentGenerator::GetGeneratedEntities()
+{
+	return &mEntities;
+}
+//-----------------------------------------------------------------------
+void SceneContentGenerator::RemoveGeneratedObjects()
+{
+	//-- destroy scene nodes and detach entities
+	while (!mSceneNodes.empty())
+	{
+		SceneNode *node = mSceneNodes.back();
+		mSceneNodes.pop_back();
+		
+		//node->detachAllObjects();
+		mSceneMgr->destroySceneNode(node->getName());
+	}
+	//-- remove and destroy entities
+	while (!mEntities.empty())
+	{
+		Entity *ent = mEntities.back();
+		mEntities.pop_back();
+		
+		mSceneMgr->removeEntity(ent);
+	}
+}
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilitySceneManager.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilitySceneManager.cpp	(revision 155)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilitySceneManager.cpp	(revision 155)
@@ -0,0 +1,143 @@
+#include <OgreMath.h>
+#include <OgreIteratorWrappers.h>
+#include <OgreRenderSystem.h>
+#include <OgreCamera.h>
+#include "OgreVisibilitySceneManager.h"
+#include "OgreSceneNodeHierarchyInterface.h"
+#include "OgreVisibilityOptionsManager.h"
+
+
+namespace Ogre {
+
+//-----------------------------------------------------------------------
+VisibilitySceneManager::VisibilitySceneManager(GtpVisibility::VisibilityManager *visManager)
+:mVisibilityManager(visManager), mUseDepthPass(false), mShowVisualization(false)
+{
+	mHierarchyInterface = 
+		new SceneNodeHierarchyInterface(this, mDestRenderSystem);
+}
+//-----------------------------------------------------------------------
+VisibilitySceneManager::~VisibilitySceneManager()
+{
+	delete mHierarchyInterface;
+}
+//-----------------------------------------------------------------------
+void VisibilitySceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters)
+{
+	mHierarchyInterface->SetOnlyShadowCasters(onlyShadowCasters);
+	// does nothing if hierarchical culling is used =>
+	// we interleave identification and rendering of objects 
+	// in _renderVisibibleObjects
+	if (!mUseDepthPass)
+	{
+		SceneManager::_findVisibleObjects(cam, onlyShadowCasters);
+		return;	
+	}
+}
+//-----------------------------------------------------------------------
+void VisibilitySceneManager::_renderVisibleObjects()
+{
+	if (!mShowVisualization)
+	{
+		mHierarchyInterface->SetHierarchyRoot(mSceneRoot);
+		mHierarchyInterface->InitTraversal(mCameraInProgress);
+
+		// reset culling manager stats
+		mVisibilityManager->GetCullingManager()->InitFrame(mVisualizeCulledNodes);
+	}
+
+	// standard terrain scenemanager rendering without hierarchical culling
+	if (!mUseDepthPass || mShowVisualization)
+	{	
+		SceneManager::_renderVisibleObjects();
+	
+		return;
+	} 
+
+	//-- hierarchical culling
+	// the objects of different layers (e.g., background, scene, 
+	// overlay) must be identified and rendered one after another
+
+	//-- render background
+	clearSpecialCaseRenderQueues();
+	addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND);
+	addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY);
+
+	setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE);
+	SceneManager::_renderVisibleObjects();
+
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	_deleteRenderedQueueGroups();
+#endif
+
+	//-- render visible objects (i.e., all but overlay)
+	clearSpecialCaseRenderQueues();
+	addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY);
+	setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE);
+
+
+	/** 
+	* the hierarchical culling algorithm
+	**/
+	mVisibilityManager->ApplyVisibilityCulling();
+
+
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	_deleteRenderedQueueGroups();
+#endif
+
+	//-- render overlay
+	clearSpecialCaseRenderQueues();
+	SceneManager::_renderVisibleObjects();
+
+	//WriteLog(); // write out stats
+}
+//-----------------------------------------------------------------------
+void VisibilitySceneManager::_updateSceneGraph(Camera* cam)
+{
+	mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface);
+	mHierarchyInterface->SetRenderSystem(mDestRenderSystem);
+	
+	SceneManager::_updateSceneGraph(cam);
+}
+//-----------------------------------------------------------------------
+bool VisibilitySceneManager::setOption(const String & key, const void * val)
+{
+	return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
+		setOption(key, val) || SceneManager::setOption(key, val);
+}
+//-----------------------------------------------------------------------
+bool VisibilitySceneManager::getOption(const String & key, void *val)
+{
+	if (key == "NumHierarchyNodes")
+	{
+		* static_cast<unsigned int *>(val) = (unsigned int)mSceneNodes.size();
+		return true;
+	}
+	
+	return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
+		getOption(key, val) && SceneManager::getOption(key, val);
+}
+//-----------------------------------------------------------------------
+bool VisibilitySceneManager::getOptionValues(const String & key, StringVector  &refValueList)
+{
+	return SceneManager::getOptionValues(key, refValueList);
+}
+//-----------------------------------------------------------------------
+bool VisibilitySceneManager::getOptionKeys(StringVector & refKeys)
+{
+	return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
+		getOptionKeys(refKeys) || SceneManager::getOptionKeys(refKeys);
+}
+//-----------------------------------------------------------------------
+void VisibilitySceneManager::setVisibilityManager(GtpVisibility::VisibilityManager *visManager)
+{
+	mVisibilityManager = visManager;
+}
+//-----------------------------------------------------------------------
+GtpVisibility::VisibilityManager *VisibilitySceneManager::getVisibilityManager()
+{
+	return mVisibilityManager;
+}
+
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOctreeHierarchyInterface.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOctreeHierarchyInterface.cpp	(revision 370)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOctreeHierarchyInterface.cpp	(revision 370)
@@ -0,0 +1,171 @@
+#include "OgreOctreeHierarchyInterface.h"
+#include "OgreVisibilityOctreeSceneManager.h"
+#include <OgreOctree.h>
+#include <OgreLogManager.h>
+#include <OgreStringConverter.h>
+
+
+namespace Ogre {
+
+//-----------------------------------------------------------------------
+OctreeHierarchyInterface::OctreeHierarchyInterface(OctreeSceneManager *sm, RenderSystem *rsys): 
+SceneNodeHierarchyInterface(sm, rsys)
+{
+}
+//-----------------------------------------------------------------------
+void OctreeHierarchyInterface::TraverseNode(GtpVisibility::HierarchyNode *node)
+{
+	++ mNumTraversedNodes;
+
+	Octree *octree = static_cast<Octree *>(node);
+
+	// if we come across some renderable geometry => render it
+	if (octree->mNodes.size() > 0)
+	{
+		RenderNode(node);
+	}
+	
+	//if (octree->numNodes() > (int)octree->mNodes.size()) // if not all subtrees are empty
+	if (!IsLeaf(node))
+	{
+		for(int i=0; i<8; ++i)
+		{
+			Octree *nextChild = 
+				octree->mChildren[(i & 4) >> 2][(i & 2) >> 1][i & 1];
+			
+			if (nextChild)
+			{
+				mDistanceQueue->push(nextChild);
+			}
+		}
+	}
+}
+//-----------------------------------------------------------------------
+bool OctreeHierarchyInterface::IsLeaf(GtpVisibility::HierarchyNode *node) const
+{
+	Octree *octree = static_cast<Octree *>(node);
+	// HACK: if there are subtrees, they are empty => we are not interested in them
+	return octree->numNodes() == (int)octree->mNodes.size();
+}
+//-----------------------------------------------------------------------
+bool OctreeHierarchyInterface::HasGeometry(GtpVisibility::HierarchyNode *node) const
+{
+	return static_cast<Octree *>(node)->mNodes.size() > 0;
+}
+//-----------------------------------------------------------------------
+float OctreeHierarchyInterface::GetSquaredDistance(GtpVisibility::HierarchyNode *node) const
+{
+	AxisAlignedBox *box = &static_cast<Octree *>(node)->mBox;
+	Vector3 pos = ((box->getMaximum() - box->getMinimum()) * 0.5) + box->getMinimum();
+	
+	return (mCullCamera->getDerivedPosition() - pos).squaredLength();
+}
+//-----------------------------------------------------------------------
+void OctreeHierarchyInterface::SetNodeVisible(GtpVisibility::HierarchyNode *node, 
+											  const bool visible) const
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	static_cast<Octree *>(node)->setOctreeVisible(visible);
+#endif
+}
+//-----------------------------------------------------------------------
+void OctreeHierarchyInterface::SetLastVisited(GtpVisibility::HierarchyNode *node, 
+											  const unsigned int frameId) const
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	static_cast<Octree *>(node)->setLastVisited(frameId);
+#endif
+}
+//-----------------------------------------------------------------------
+void OctreeHierarchyInterface::PullUpVisibility(GtpVisibility::HierarchyNode *node) const
+{		
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	Octree *octant = static_cast<Octree *>(node);
+
+	while (octant && !octant->isOctreeVisible())
+	{
+		octant->setOctreeVisible(true);
+		octant = octant->getParent();
+	}
+#endif
+}
+//-----------------------------------------------------------------------
+void OctreeHierarchyInterface::RenderNode(GtpVisibility::HierarchyNode *node)
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	Octree *octant = static_cast<Octree *>(node);
+
+	if (octant->lastRendered() != mFrameId)
+	{
+		octant->setLastRendered(mFrameId);
+
+		dynamic_cast<OctreeSceneManager *>(mSceneManager)->_renderOctant(mCamera, 
+			octant, mOnlyShadowCasters, mLeavePassesInQueue);
+
+		mVisibleNodes.push_back(node);
+	}
+#endif
+	
+}
+//-----------------------------------------------------------------------
+bool OctreeHierarchyInterface::IsNodeVisible(GtpVisibility::HierarchyNode *node) const
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	return static_cast<Octree *>(node)->isOctreeVisible();
+#else
+	return true;
+#endif
+}
+//-----------------------------------------------------------------------
+unsigned int OctreeHierarchyInterface::LastVisited(GtpVisibility::HierarchyNode *node) const
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	return static_cast<Octree *>(node)->lastVisited();
+#else
+	return 0;
+#endif
+}
+//-----------------------------------------------------------------------
+AxisAlignedBox *OctreeHierarchyInterface::GetBoundingBox(GtpVisibility::HierarchyNode *node)
+{
+	if (node != mSavedNode)
+	{
+		mSavedNode = node;
+	    //static_cast<Octree *>(node)->_getCullBounds(&mBox);
+		mBox = static_cast<Octree *>(node)->_getWorldAABB();
+	}
+
+	return &mBox;
+}
+//-----------------------------------------------------------------------
+void OctreeHierarchyInterface::VisualizeCulledNode(GtpVisibility::HierarchyNode *node, 
+												   GtpVisibility::CullingType type) const
+{
+	WireBoundingBox *box = static_cast<Octree *>(node)->getWireBoundingBox();
+
+	if (type == GtpVisibility::FRUSTUM_CULLED)
+	{
+		box->setMaterial("FrustumCulledNodesMaterial");
+	}
+	else // type == GtpVisibility::QUERY_CULLED
+	{
+		box->setMaterial("QueryCulledNodesMaterial");
+	}
+
+	dynamic_cast<OctreeSceneManager *>(mSceneManager)->getBoxes()->push_back(box);
+}
+//-----------------------------------------------------------------------
+void OctreeHierarchyInterface::GetNodeGeometryList(GtpVisibility::HierarchyNode *node,	
+										   GtpVisibility::GeometryVector *geometryList, 
+										   bool includeChildren)
+{
+	NodeList::const_iterator nodeIt, nodeIt_end;
+	nodeIt_end = static_cast<Octree *>(node)->mNodes.end();
+
+	for (nodeIt = static_cast<Octree *>(node)->mNodes.begin(); nodeIt != nodeIt_end; ++nodeIt)
+	{
+		SceneNodeHierarchyInterface::GetNodeGeometryList(*nodeIt, geometryList, includeChildren);
+	}
+}
+
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityOctreeSceneManager.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityOctreeSceneManager.cpp	(revision 343)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityOctreeSceneManager.cpp	(revision 343)
@@ -0,0 +1,819 @@
+#include "OgreVisibilityOctreeSceneManager.h"
+#include "OgreVisibilityOptionsManager.h"
+#include <OgreMath.h>
+#include <OgreIteratorWrappers.h>
+#include <OgreRenderSystem.h>
+#include <OgreCamera.h>
+#include <OgreLogManager.h>
+#include <OgreStringConverter.h>
+#include <OgreEntity.h>
+#include <OgreSubEntity.h>
+#include <OgreConfigFile.h>
+
+namespace Ogre {
+
+//-----------------------------------------------------------------------
+VisibilityOctreeSceneManager::VisibilityOctreeSceneManager(
+	GtpVisibility::VisibilityManager *visManager)
+: 
+mVisibilityManager(visManager), 
+mShowVisualization(false),
+mRenderNodesForViz(false),
+mRenderNodesContentForViz(false),
+mVisualizeCulledNodes(false),
+mLeavePassesInQueue(0),
+mDelayRenderTransparents(true),
+//mDelayRenderTransparents(false),
+//mUseDepthPass(true),
+mUseDepthPass(false),
+mIsDepthPassPhase(false),
+mUseItemBuffer(false),
+//mUseItemBuffer(true),
+mIsItemBufferPhase(false),
+mCurrentEntityId(1),
+mEnableDepthWrite(true),
+mSkipTransparents(false),
+mRenderTransparentsForItemBuffer(true),
+mExecuteVertexProgramForAllPasses(true),
+mIsHierarchicalCulling(false)
+{
+	mHierarchyInterface = new OctreeHierarchyInterface(this, mDestRenderSystem);
+		
+	//mDisplayNodes = true;
+	//mShowBoundingBoxes = true;
+	//mShowBoxes = true;
+
+	// TODO: set maxdepth to reasonable value
+	mMaxDepth = 50;
+
+	//loadVisibilityConfig("GtpVisibility.cfg");
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::InitDepthPass()
+{
+	MaterialPtr depthMat = MaterialManager::getSingleton().getByName("Visibility/DepthPass");
+
+	if (depthMat.isNull())
+    {
+		depthMat = MaterialManager::getSingleton().create(
+                "Visibility/DepthPass",
+                ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+
+		mDepthPass = depthMat->getTechnique(0)->getPass(0);
+		mDepthPass->setColourWriteEnabled(false);
+		mDepthPass->setDepthWriteEnabled(true);
+		mDepthPass->setLightingEnabled(false);
+	}
+	else
+	{
+		mDepthPass = depthMat->getTechnique(0)->getPass(0);
+	}
+}
+//-----------------------------------------------------------------------
+VisibilityOctreeSceneManager::~VisibilityOctreeSceneManager()
+{
+	OGRE_DELETE(mHierarchyInterface);
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::InitItemBufferPass()
+{
+	MaterialPtr itemBufferMat = MaterialManager::getSingleton().
+		getByName("Visibility/ItemBufferPass");
+
+	if (itemBufferMat.isNull())
+    {
+		// Init
+		itemBufferMat = MaterialManager::getSingleton().create("Visibility/ItemBufferPass",
+                ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+
+		mItemBufferPass = itemBufferMat->getTechnique(0)->getPass(0);
+		mItemBufferPass->setColourWriteEnabled(true);
+		mItemBufferPass->setDepthWriteEnabled(true);
+		mItemBufferPass->setLightingEnabled(true);
+		//mItemBufferPass->setLightingEnabled(false);
+	}
+	else
+	{
+		mItemBufferPass = itemBufferMat->getTechnique(0)->getPass(0);
+	}
+	//mItemBufferPass->setAmbient(1, 1, 0);
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::PrepareVisualization(Camera *cam)
+{
+	// add player camera for visualization purpose
+	try 
+	{
+		Camera *c;
+		if ((c = getCamera("PlayerCam")) != NULL)
+		{
+			getRenderQueue()->addRenderable(c);
+		}   
+    }
+    catch(...)
+    {
+        // ignore
+    }
+	for (BoxList::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it)
+{
+		getRenderQueue()->addRenderable(*it);
+	}
+	if (mRenderNodesForViz || mRenderNodesContentForViz)
+	{
+		// change node material so it is better suited for visualization
+		MaterialPtr nodeMat = MaterialManager::getSingleton().getByName("Core/NodeMaterial");
+		nodeMat->setAmbient(1, 1, 0);
+		nodeMat->setLightingEnabled(true);
+		nodeMat->getTechnique(0)->getPass(0)->removeAllTextureUnitStates();
+
+		for (NodeList::iterator it = mVisible.begin(); it != mVisible.end(); ++it)
+		{
+			if (mRenderNodesForViz)
+			{
+				if (((*it)->numAttachedObjects() > 0) && ((*it)->numChildren() == 0)
+					&& (*it)->getAttachedObject(0)->getMovableType() == "Entity")
+				getRenderQueue()->addRenderable((*it));
+
+				// addbounding boxes instead of node itself
+				//(*it)->_addBoundingBoxToQueue(getRenderQueue());
+			}
+			if (mRenderNodesContentForViz) 
+			{
+				(*it)->_addToRenderQueue(cam, getRenderQueue(), false);
+			}
+		}
+	}
+}
+//-----------------------------------------------------------------------
+Pass *VisibilityOctreeSceneManager::setPass(Pass* pass)
+{
+	// set depth fill pass if we currently do not make an aabb occlusion query
+	Pass *usedPass = (mIsDepthPassPhase && !mHierarchyInterface->IsBoundingBoxQuery() ? 
+					  mDepthPass : pass);
+
+	IlluminationRenderStage savedStage = mIlluminationStage; 
+	
+	// set illumination stage to NONE so no shadow material is used 
+	// for depth pass or for occlusion query
+	if (mIsDepthPassPhase || mHierarchyInterface->IsBoundingBoxQuery())
+	{
+		mIlluminationStage = IRS_NONE;
+	}
+
+	//-- set vertex program of current pass in order to set correct depth
+	if (mIsDepthPassPhase && mExecuteVertexProgramForAllPasses && pass->hasVertexProgram())
+    {
+		// add vertex program of current pass to depth pass
+		mDepthPass->setVertexProgram(pass->getVertexProgramName());
+
+		if (mDepthPass->hasVertexProgram())
+		{
+			const GpuProgramPtr& prg = mDepthPass->getVertexProgram();
+			// Load this program if not done already
+			if (!prg->isLoaded())
+				prg->load();
+			// Copy params
+			mDepthPass->setVertexProgramParameters(pass->getVertexProgramParameters());
+		}
+	}
+	else if (mDepthPass->hasVertexProgram())
+	{
+		mDepthPass->setVertexProgram("");
+	}
+
+	// store depth write flag to reset later
+	bool IsDepthWrite = usedPass->getDepthWriteEnabled();
+
+	// global option which enables / disables depth writes
+	if (!mEnableDepthWrite)
+	{
+		usedPass->setDepthWriteEnabled(false);
+	}
+	//else if (mIsItemBufferPass) {usedPass = mItemBufferPass;}
+
+	Pass *result = SceneManager::setPass(usedPass);
+
+	// reset depth write
+	if (!mEnableDepthWrite)
+	{
+		usedPass->setDepthWriteEnabled(IsDepthWrite);
+	}
+
+	// reset illumination stage
+	mIlluminationStage = savedStage;
+
+	return result;
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters)
+{
+	//-- show visible scene nodes and octree bounding boxes from last frame
+	if (mShowVisualization)
+    {
+		PrepareVisualization(cam);
+	}
+	else 
+	{	
+		// for hierarchical culling, we interleave identification 
+		// and rendering of objects in _renderVisibibleObjects
+
+		// for the shadow pass we use only standard rendering
+		// because of low occlusion
+		if (mShadowTechnique == SHADOWTYPE_TEXTURE_MODULATIVE && 
+			mIlluminationStage == IRS_RENDER_TO_TEXTURE)
+		{
+			OctreeSceneManager::_findVisibleObjects(cam, onlyShadowCasters);
+		}
+		// only shadow casters will be rendered in shadow texture pass
+		// mHierarchyInterface->SetOnlyShadowCasters(onlyShadowCasters);
+	}
+	
+	
+	// -- delete lists stored for visualization
+	mVisible.clear();
+	mBoxes.clear();
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::_renderVisibleObjects()
+{
+	
+		//InitVisibilityCulling(mCameraInProgress);
+		//mVisibilityManager->ApplyVisibilityCulling();
+
+		if(1){
+	InitDepthPass(); 	  // create material for depth pass
+	InitItemBufferPass(); // create material for item buffer pass
+
+	// save ambient light to reset later
+	ColourValue savedAmbient = mAmbientLight;
+
+	//-- apply standard rendering for some modes (e.g., visualization, shadow pass)
+
+	if (mShowVisualization ||
+	   (mShadowTechnique == SHADOWTYPE_TEXTURE_MODULATIVE && 
+	    mIlluminationStage == IRS_RENDER_TO_TEXTURE))
+	{
+		IlluminationRenderStage savedStage = mIlluminationStage; 
+	
+		if (mShowVisualization)
+		{
+			// disable illumination stage to prevent rendering shadows
+			mIlluminationStage = IRS_NONE;
+		}
+
+		// standard rendering for shadow maps because of performance
+		OctreeSceneManager::_renderVisibleObjects();
+
+		mIlluminationStage = savedStage;
+	}
+	else //-- the hierarchical culling algorithm
+	{	
+		// don't render backgrounds for item buffer
+		if (mUseItemBuffer)
+		{
+			clearSpecialCaseRenderQueues();
+			getRenderQueue()->clear();
+		} 	
+
+		//-- hierarchical culling
+		// the objects of different layers (e.g., background, scene, 
+		// overlay) must be identified and rendered one after another
+
+		//-- render all early skies
+		clearSpecialCaseRenderQueues();
+		addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND);
+		addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY);
+		setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE);
+
+		OctreeSceneManager::_renderVisibleObjects();
+
+
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+		// delete previously rendered content
+		_deleteRenderedQueueGroups();
+#endif
+
+		//-- prepare queue for visible objects (i.e., all but overlay and skies late)
+		clearSpecialCaseRenderQueues();
+		addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_LATE);
+		addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY);
+		setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE);
+	
+
+		// set all necessary parameters for 
+		// hierarchical visibility culling and rendering
+		InitVisibilityCulling(mCameraInProgress);
+	
+		/** 
+		* the hierarchical culling algorithm
+		* for depth pass: we just find objects and update depth buffer
+		* for "delayed" rendering: we render some passes afterwards
+		* e.g., transparents, because they need front-to-back sorting
+		**/
+	
+		mVisibilityManager->ApplyVisibilityCulling();
+	
+		// delete remaining renderables from queue (all not in mLeavePassesInQueue)
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+		_deleteRenderedQueueGroups(mLeavePassesInQueue);
+#endif
+
+		//-- reset parameters
+		mIsDepthPassPhase = false;
+		mIsItemBufferPhase = false;
+		mSkipTransparents = false;
+		mIsHierarchicalCulling = false;
+
+		mLeavePassesInQueue = 0;
+
+		// add visible nodes found by the visibility culling algorithm
+		if (mUseDepthPass)
+		{
+			for (NodeList::iterator it = mVisible.begin(); it != mVisible.end(); ++it)
+			{
+				(*it)->_addToRenderQueue(mCameraInProgress, getRenderQueue(), false);
+			}
+		}
+	
+		//-- we render all remaining queue objects
+		// used for depth pass, transparents, overlay 
+		clearSpecialCaseRenderQueues();
+		OctreeSceneManager::_renderVisibleObjects();
+	
+	}   // hierarchical culling
+
+	// reset ambient light
+	setAmbientLight(savedAmbient);
+}	
+	getRenderQueue()->clear(); // finally clear render queue
+	OGRE_DELETE(mRenderQueue); // HACK: should be cleared before...
+	//WriteLog(); // write out stats
+
+}
+
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::_updateSceneGraph(Camera* cam)
+{
+	mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface);
+	mHierarchyInterface->SetRenderSystem(mDestRenderSystem);
+
+	OctreeSceneManager::_updateSceneGraph(cam);
+}
+//-----------------------------------------------------------------------
+bool VisibilityOctreeSceneManager::setOption(const String & key, const void * val)
+{
+	if (key == "UseDepthPass")
+	{
+		mUseDepthPass = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "PrepareVisualization")
+	{
+		mShowVisualization = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "RenderNodesForViz")
+	{
+		mRenderNodesForViz = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "RenderNodesContentForViz")
+	{
+		mRenderNodesContentForViz = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "SkyBoxEnabled")
+	{
+		mSkyBoxEnabled = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "SkyPlaneEnabled")
+	{
+		mSkyPlaneEnabled = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "SkyDomeEnabled")
+	{
+		mSkyDomeEnabled = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "VisualizeCulledNodes")
+	{
+		mVisualizeCulledNodes = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "DelayRenderTransparents")
+	{
+		mDelayRenderTransparents = (*static_cast<const bool *>(val));
+		return true;
+	}
+
+	if (key == "DepthWrite")
+	{
+		mEnableDepthWrite = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "UseItemBuffer")
+	{
+		mUseItemBuffer = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "ExecuteVertexProgramForAllPasses")
+	{ 
+		mExecuteVertexProgramForAllPasses  = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "RenderTransparentsForItemBuffer")
+	{ 
+		mRenderTransparentsForItemBuffer  = (*static_cast<const bool *>(val));
+		return true;
+	}
+	if (key == "NodeVizScale")
+	{ 
+		OctreeNode::setVizScale(*static_cast<const float *>(val));
+		return true;
+	}
+	if (key == "UseArbQueries")
+	{
+		bool useArbQueries = (*static_cast<const bool *>(val));
+
+		if (useArbQueries)
+		{
+			mHierarchyInterface->DeleteQueries();
+			mDestRenderSystem->setConfigOption("ArbQueries", "Yes");
+		}
+		else
+		{
+			mHierarchyInterface->DeleteQueries();
+			mDestRenderSystem->setConfigOption("ArbQueries", "No");
+		}
+	}
+
+	return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
+		setOption(key, val) || OctreeSceneManager::setOption(key, val);
+}
+//-----------------------------------------------------------------------
+bool VisibilityOctreeSceneManager::getOption(const String & key, void *val)
+{
+	if (key == "NumHierarchyNodes")
+	{
+		* static_cast<unsigned int *>(val) = (unsigned int)mNumOctants;
+		return true;
+	}
+
+	return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
+		getOption(key, val) && OctreeSceneManager::getOption(key, val);
+}
+//-----------------------------------------------------------------------
+bool VisibilityOctreeSceneManager::getOptionValues(const String & key, StringVector  &refValueList)
+{
+	return OctreeSceneManager::getOptionValues( key, refValueList );
+}
+//-----------------------------------------------------------------------
+bool VisibilityOctreeSceneManager::getOptionKeys(StringVector & refKeys)
+{
+	return  VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).
+		getOptionKeys (refKeys) || OctreeSceneManager::getOptionKeys(refKeys);
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::setVisibilityManager(GtpVisibility::VisibilityManager *visManager)
+{
+    mVisibilityManager = visManager;
+}
+//-----------------------------------------------------------------------
+GtpVisibility::VisibilityManager *VisibilityOctreeSceneManager::getVisibilityManager()
+{
+	return mVisibilityManager;
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::WriteLog()
+{
+	std::stringstream d;
+
+	d << "Depth pass: " << StringConverter::toString(mUseDepthPass) << ", "
+	  << "Delay transparents: " << StringConverter::toString(mDelayRenderTransparents) << ", "
+	  << "Use optimization: " << StringConverter::toString(mHierarchyInterface->GetTestGeometryForVisibleLeaves()) << ", "
+	  << "Algorithm type: " << mVisibilityManager->GetCullingManagerType() << "\n"
+	  << "Hierarchy nodes: " << mNumOctants << ", " 
+	  << "Traversed nodes: " << mHierarchyInterface->GetNumTraversedNodes() << ", "
+	  << "Rendered nodes: " << mHierarchyInterface->GetNumRenderedNodes() << ", "
+	  << "Query culled nodes: " << mVisibilityManager->GetCullingManager()->GetNumQueryCulledNodes() << ", "
+	  << "Frustum culled nodes: " << mVisibilityManager->GetCullingManager()->GetNumFrustumCulledNodes() << ", "
+      << "Queries issued: " << mVisibilityManager->GetCullingManager()->GetNumQueriesIssued() << "\n";
+	  /*<< "avg. FPS: " << mCurrentViewport->getTarget()->getAverageFPS() << ", "
+	  << "best FPS: " << mCurrentViewport->getTarget()->getBestFPS() << ", "
+	  << "worst FPS: " << mCurrentViewport->getTarget()->getWorstFPS() << ", "
+	  << "best frame time: " <<	mCurrentViewport->getTarget()->getBestFrameTime() << ", "
+	  << "worst frame time: " << mCurrentViewport->getTarget()->getWorstFrameTime() << "\n";*/
+
+	LogManager::getSingleton().logMessage(d.str());
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::renderObjects(
+	const RenderPriorityGroup::TransparentRenderablePassList& objs, 
+            bool doLightIteration, const LightList* manualLightList)
+{
+	// for correct rendering, transparents must be rendered after hierarchical culling
+	if (!mSkipTransparents)
+	{
+		OctreeSceneManager::renderObjects(objs, doLightIteration, manualLightList);
+	}
+}
+//-----------------------------------------------------------------------
+bool VisibilityOctreeSceneManager::validatePassForRendering(Pass* pass)
+{
+	// skip all but first pass if we are doing the depth pass
+	if ((mIsDepthPassPhase || mIsItemBufferPhase) && pass->getIndex() > 0)
+	{
+		return false;
+	}
+	return SceneManager::validatePassForRendering(pass);
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::renderQueueGroupObjects(RenderQueueGroup* pGroup)
+{
+	if (!mIsItemBufferPhase)
+	{
+		OctreeSceneManager::renderQueueGroupObjects(pGroup);
+		return;
+	}
+
+	//-- renders item buffer
+
+    // Iterate through priorities
+    RenderQueueGroup::PriorityMapIterator groupIt = pGroup->getIterator();
+
+	while (groupIt.hasMoreElements())
+    {
+		RenderItemBuffer(groupIt.getNext());
+	}
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::RenderItemBuffer(RenderPriorityGroup* pGroup)
+{
+	// Do solids
+	RenderPriorityGroup::SolidRenderablePassMap solidObjs = pGroup->_getSolidPasses();
+
+	// ----- SOLIDS LOOP -----
+	RenderPriorityGroup::SolidRenderablePassMap::const_iterator ipass, ipassend;
+	ipassend = solidObjs.end();
+
+	for (ipass = solidObjs.begin(); ipass != ipassend; ++ipass)
+	{
+		// Fast bypass if this group is now empty
+		if (ipass->second->empty()) 
+			continue;
+
+		// Render only first pass
+		if (ipass->first->getIndex() > 0)
+			continue;
+
+		RenderPriorityGroup::RenderableList* rendList = ipass->second;
+		
+		RenderPriorityGroup::RenderableList::const_iterator irend, irendend;
+		irendend = rendList->end();
+			
+		for (irend = rendList->begin(); irend != irendend; ++irend)
+		{
+			std::stringstream d; d << "itembuffer, pass name: " << 
+				ipass->first->getParent()->getParent()->getName();
+				
+			LogManager::getSingleton().logMessage(d.str());
+			
+			RenderSingleObjectForItemBuffer(*irend, ipass->first);
+		}
+	}
+
+	//-- TRANSPARENT LOOP: must be handled differently 
+
+	// transparents are treated either as solids or completely discarded
+	if (mRenderTransparentsForItemBuffer)
+	{
+		RenderPriorityGroup::TransparentRenderablePassList transpObjs = 
+			pGroup->_getTransparentPasses();
+		RenderPriorityGroup::TransparentRenderablePassList::const_iterator 
+			itrans, itransend;
+
+		itransend = transpObjs.end();
+		for (itrans = transpObjs.begin(); itrans != itransend; ++itrans)
+		{
+			// like for solids, render only first pass
+			if (itrans->pass->getIndex() == 0)
+			{	
+				RenderSingleObjectForItemBuffer(itrans->renderable, itrans->pass);
+			}
+		} 
+	}
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::RenderSingleObjectForItemBuffer(Renderable *rend, Pass *pass)
+{
+	static LightList nullLightList;
+	
+	int col[4];
+	
+	// -- create color code out of object id
+	col[0] = (rend->getId() >> 16) & 255;
+	col[1] = (rend->getId() >> 8) & 255;
+	col[2] = rend->getId() & 255;
+//	col[3] = 255;
+
+	//mDestRenderSystem->setColour(col[0], col[1], col[2], col[3]);
+    
+	mItemBufferPass->setAmbient(ColourValue(col[0] / 255.0f,
+										    col[1] / 255.0f, 
+											col[2] / 255.0f, 1));
+
+	// set vertex program of current pass
+	if (mExecuteVertexProgramForAllPasses && pass->hasVertexProgram())
+	{
+		mItemBufferPass->setVertexProgram(pass->getVertexProgramName());
+
+		if (mItemBufferPass->hasVertexProgram())
+		{
+			const GpuProgramPtr& prg = mItemBufferPass->getVertexProgram();
+			// Load this program if not done already
+			if (!prg->isLoaded())
+				prg->load();
+			// Copy params
+			mItemBufferPass->setVertexProgramParameters(pass->getVertexProgramParameters());
+		}
+	}
+	else if (mItemBufferPass->hasVertexProgram())
+	{
+		mItemBufferPass->setVertexProgram("");
+	}
+
+	Pass *usedPass = setPass(mItemBufferPass); 
+
+
+	// Render a single object, this will set up auto params if required
+	renderSingleObject(rend, usedPass, false, &nullLightList);
+}
+//-----------------------------------------------------------------------
+GtpVisibility::VisibilityManager *VisibilityOctreeSceneManager::GetVisibilityManager()
+{
+	return mVisibilityManager;
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::InitVisibilityCulling(Camera *cam)
+{
+	// reset culling manager stats
+	mVisibilityManager->GetCullingManager()->InitFrame(mVisualizeCulledNodes);
+
+	// set depth pass flag before rendering
+	mIsDepthPassPhase = mUseDepthPass;
+
+	mIsHierarchicalCulling = true; // during hierarchical culling
+
+	// item buffer needs full ambient lighting to use item colors as unique id
+	if (mUseItemBuffer) 
+	{
+		mIsItemBufferPhase = true;
+		setAmbientLight(ColourValue(1,1,1,1));
+	}
+
+
+	// set passes which are stored in render queue 
+	// for rendering AFTER hierarchical culling, i.e., passes which need 
+	// a special rendering order
+	
+	mLeavePassesInQueue = 0;
+
+	if (!mUseDepthPass && !mUseItemBuffer)
+	{
+		if (mShadowTechnique == SHADOWTYPE_STENCIL_ADDITIVE)
+		{
+			// TODO: remove this pass because it should be processed during hierarchical culling
+			//mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_NOSHADOW;
+
+			mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_DECAL;
+			mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_DIFFUSE_SPECULAR;
+			mLeavePassesInQueue |= RenderPriorityGroup::TRANSPARENT_PASSES;
+
+			// just render ambient passes
+			mIlluminationStage = IRS_AMBIENT;
+			getRenderQueue()->setSplitPassesByLightingType(true);
+		}
+	
+		if (mShadowTechnique == SHADOWTYPE_STENCIL_MODULATIVE)
+		{
+			mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_NOSHADOW;
+			mLeavePassesInQueue |= RenderPriorityGroup::TRANSPARENT_PASSES;
+		}
+	
+		// transparents should be rendered after hierarchical culling to 
+		// provide front-to-back ordering
+		if (mDelayRenderTransparents)
+		{
+			mLeavePassesInQueue |= RenderPriorityGroup::TRANSPARENT_PASSES;
+		}
+	}
+
+	// skip rendering transparents in the hierarchical culling
+	// (because they will be rendered afterwards)
+	mSkipTransparents = mUseDepthPass || 
+		(mLeavePassesInQueue & RenderPriorityGroup::TRANSPARENT_PASSES);
+
+	// -- initialise interface for rendering traversal of the hierarchy
+	mHierarchyInterface->SetHierarchyRoot(mOctree);
+	
+	// possible two cameras (one for culling, one for rendering)
+	mHierarchyInterface->InitTraversal(mCameraInProgress, 
+							mCullCamera ? getCamera("CullCamera") : NULL,
+							mLeavePassesInQueue);
+		
+	//std::stringstream d; d << "leave passes in queue: " << mLeavePassesInQueue;LogManager::getSingleton().logMessage(d.str());
+}
+//-----------------------------------------------------------------------
+OctreeHierarchyInterface *VisibilityOctreeSceneManager::GetHierarchyInterface()
+{
+	return mHierarchyInterface;
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::renderAdditiveStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup)
+{
+	// only render solid passes during hierarchical culling
+	if (mIsHierarchicalCulling)
+	{
+		RenderQueueGroup::PriorityMapIterator groupIt = pGroup->getIterator();
+	    LightList lightList;
+
+		while (groupIt.hasMoreElements())
+		{
+			RenderPriorityGroup* pPriorityGrp = groupIt.getNext();
+
+			// Sort the queue first
+			pPriorityGrp->sort(mCameraInProgress);
+
+			// Clear light list
+			lightList.clear();
+
+			// Render all the ambient passes first, no light iteration, no lights
+			mIlluminationStage = IRS_AMBIENT;
+
+			OctreeSceneManager::renderObjects(pPriorityGrp->_getSolidPasses(), false, &lightList);
+			// Also render any objects which have receive shadows disabled
+			OctreeSceneManager::renderObjects(pPriorityGrp->_getSolidPassesNoShadow(), true);
+		
+			/*std::stringstream d; 
+			d << " solid size: " << (int)pPriorityGrp->_getSolidPasses().size()
+				<< " solid no shadow size: " << (int)pPriorityGrp->_getSolidPassesNoShadow().size()
+				<< "difspec size: " << (int)pPriorityGrp->_getSolidPassesDiffuseSpecular().size()
+				<< " decal size: " << (int)pPriorityGrp->_getSolidPassesDecal().size();
+			LogManager::getSingleton().logMessage(d.str());*/
+		}
+	}
+	else // render the rest of the passes
+	{
+		OctreeSceneManager::renderAdditiveStencilShadowedQueueGroupObjects(pGroup);
+	}
+}
+//-----------------------------------------------------------------------
+void VisibilityOctreeSceneManager::renderModulativeStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup)
+{
+   if (mIsHierarchicalCulling)
+   {
+	   // Iterate through priorities
+	   RenderQueueGroup::PriorityMapIterator groupIt = pGroup->getIterator();
+
+	   while (groupIt.hasMoreElements())
+	   {
+		   RenderPriorityGroup* pPriorityGrp = groupIt.getNext();
+
+		   // Sort the queue first
+		   pPriorityGrp->sort(mCameraInProgress);
+
+		   // Do (shadowable) solids
+		   OctreeSceneManager::renderObjects(pPriorityGrp->_getSolidPasses(), true);
+	   }
+   }
+   else
+   {
+	   SceneManager::renderModulativeStencilShadowedQueueGroupObjects(pGroup);
+   }
+}
+//-------------------------------------------------------------------------
+void VisibilityOctreeSceneManager::loadVisibilityConfig(const String& filename)
+{
+	/// Set up the options
+	ConfigFile config;
+	String val;
+
+	config.load(filename);
+
+	val = config.getSetting("Algorithm");
+
+    if (!val.empty())
+	{
+		 VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface).setOption("Algorithm", val.c_str());
+	}
+
+	val = config.getSetting("UseDepthPass");
+
+	if (!val.empty())
+	{
+		 setOption("UseDepthPass", val.c_str());
+	}
+}
+}  // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreBspHierarchyInterface.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreBspHierarchyInterface.cpp	(revision 345)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreBspHierarchyInterface.cpp	(revision 345)
@@ -0,0 +1,66 @@
+#include "OgreBspHierarchyInterface.h"
+#include "OgreVisibilityOctreeSceneManager.h"
+
+//#include <windows.h>
+
+namespace Ogre {
+
+//-----------------------------------------------------------------------
+BspHierarchyInterface::BspHierarchyInterface(SceneManager *sm, RenderSystem *rsys): 
+PlatformHierarchyInterface(sm, rsys)
+{
+}
+//-----------------------------------------------------------------------
+void BspHierarchyInterface::TraverseNode(GtpVisibility::HierarchyNode *node)
+{
+}
+//-----------------------------------------------------------------------
+bool BspHierarchyInterface::IsLeaf(GtpVisibility::HierarchyNode *node) const
+{
+	return true;
+}
+//-----------------------------------------------------------------------
+bool BspHierarchyInterface::HasGeometry(GtpVisibility::HierarchyNode *node) const
+{
+	return true;
+}
+//-----------------------------------------------------------------------
+float BspHierarchyInterface::GetSquaredDistance(GtpVisibility::HierarchyNode *node) const
+{
+	return 0.0f;
+}
+//-----------------------------------------------------------------------
+void BspHierarchyInterface::SetNodeVisible(GtpVisibility::HierarchyNode *node, 
+										   const bool visible) const
+{
+}
+//-----------------------------------------------------------------------
+void BspHierarchyInterface::SetLastVisited(GtpVisibility::HierarchyNode *node, 
+										   const unsigned int frameId) const
+{
+}
+//-----------------------------------------------------------------------
+void BspHierarchyInterface::PullUpVisibility(GtpVisibility::HierarchyNode *node) const
+{		
+}
+//-----------------------------------------------------------------------
+void BspHierarchyInterface::RenderNode(GtpVisibility::HierarchyNode *node)
+{
+}
+//-----------------------------------------------------------------------
+bool BspHierarchyInterface::IsNodeVisible(GtpVisibility::HierarchyNode *node) const
+{
+	return true;
+}
+//-----------------------------------------------------------------------
+unsigned int BspHierarchyInterface::LastVisited(GtpVisibility::HierarchyNode *node) const
+{
+	return 0;
+}
+//-----------------------------------------------------------------------
+AxisAlignedBox *BspHierarchyInterface::GetBoundingBox(GtpVisibility::HierarchyNode *node)
+{
+	return NULL;
+}
+
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgrePlatformHierarchyInterface.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgrePlatformHierarchyInterface.cpp	(revision 316)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgrePlatformHierarchyInterface.cpp	(revision 316)
@@ -0,0 +1,292 @@
+#include <OgreCamera.h>
+#include <OgreLogManager.h>
+#include <OgreSubEntity.h>
+#include <OgreEntity.h>
+#include <OgreMovableObject.h>
+#include "OgreSolidBoundingBox.h"
+#include "OgrePlatformHierarchyInterface.h"
+#include "OgrePlatformOcclusionQuery.h"
+
+namespace Ogre {
+
+//-----------------------------------------------------------------------
+PlatformHierarchyInterface::PlatformHierarchyInterface(SceneManager *sm, RenderSystem *rsys):
+mSceneManager(sm), mRenderSystem(rsys), mSolidBoundingBox(NULL), mCamera(NULL), 
+mCullCamera(NULL), mOnlyShadowCasters(false), mLeavePassesInQueue(0),
+mIsBoundingBoxQuery(false)
+{
+}
+//-----------------------------------------------------------------------
+void PlatformHierarchyInterface::CreateNodeVizMaterials()
+{
+	// material for frustum culled nodes
+	MaterialPtr mat = MaterialManager::getSingleton().getByName("FrustumCulledNodesMaterial");
+	
+	if (mat.isNull())
+	{
+		mat = MaterialManager::getSingleton().create("FrustumCulledNodesMaterial", 
+			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+		mat->createTechnique()->createPass();
+		
+		mat->getTechnique(0)->getPass(0)->setAmbient(1, 0, 0);
+		mat->getTechnique(0)->getPass(0)->setLightingEnabled(true);
+		//mat->getTechnique(0)->getPass(0)->setDepthCheckEnabled(false);
+		mat->load();
+	}
+
+	// material for query culled nodes
+	mat = MaterialManager::getSingleton().getByName("QueryCulledNodesMaterial");
+
+	if (mat.isNull())
+	{
+		mat = MaterialManager::getSingleton().create("QueryCulledNodesMaterial", 
+			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+		mat->createTechnique()->createPass();
+		
+		mat->getTechnique(0)->getPass(0)->setAmbient(0, 0, 1);
+		mat->getTechnique(0)->getPass(0)->setLightingEnabled(true);
+		mat->load();
+	}
+
+	// material for scene nodes
+	/*mat = MaterialManager::getSingleton().getByName("SceneNodesMaterial");
+
+	if (mat.isNull())
+	{
+		mat = MaterialManager::getSingleton().create("SceneNodesMaterial", 
+			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+		mat->createTechnique()->createPass();
+		
+		mat->getTechnique(0)->getPass(0)->setAmbient(1, 1, 0);
+		mat->getTechnique(0)->getPass(0)->setLightingEnabled(true);
+		mat->load();
+	}*/
+}
+//-----------------------------------------------------------------------
+PlatformHierarchyInterface::~PlatformHierarchyInterface()
+{
+	DeleteQueries();
+
+	OGRE_DELETE(mSolidBoundingBox);
+}
+//-----------------------------------------------------------------------
+void PlatformHierarchyInterface::DeleteQueries()
+{
+	for (int i = 0; i < (int)mOcclusionQueries.size(); ++ i)
+		OGRE_DELETE(mOcclusionQueries[i]);
+
+	mCurrentTestIdx = 0;
+    mOcclusionQueries.clear();
+}
+//-----------------------------------------------------------------------
+void PlatformHierarchyInterface::RenderBoundingBox(AxisAlignedBox *box)
+{
+	static RenderOperation ro;
+
+	SolidBoundingBox *solidBox = GetSolidBoundingBox();
+	
+	mRenderSystem->_setWorldMatrix(Ogre::Matrix4::IDENTITY);
+	mSceneManager->useRenderableViewProjModeWrapper(solidBox);
+	
+	// set no depth write, no color, no lighting material
+	mSceneManager->setPassWrapper(solidBox->getTechnique()->getPass(0)); // HACK! (mySetPass should be setPass)
+	//SetOcclusionPass();
+
+	solidBox->SetupBoundingBoxVertices(*box);
+				
+	solidBox->getRenderOperation(ro);
+	ro.srcRenderable = solidBox;
+	mRenderSystem->_render(ro);
+}
+//-----------------------------------------------------------------------
+void PlatformHierarchyInterface::SetCamera(Ogre::Camera *cam)
+{
+	mCamera = cam;
+}
+//-----------------------------------------------------------------------
+void PlatformHierarchyInterface::SetCullCamera(Ogre::Camera *cullCam)
+{
+	mCullCamera = cullCam;
+}
+//-----------------------------------------------------------------------
+GtpVisibility::OcclusionQuery *PlatformHierarchyInterface::GetNextOcclusionQuery()
+{
+	if (mCurrentTestIdx == mOcclusionQueries.size())
+	{
+		mOcclusionQueries.push_back(new PlatformOcclusionQuery(mRenderSystem));
+	}
+	
+	return mOcclusionQueries[mCurrentTestIdx ++];
+}
+//-----------------------------------------------------------------------
+void PlatformHierarchyInterface::InitTraversal(Camera *cam, Camera *cullCam, 
+											   int leavePassesInQueue)
+{
+	GtpVisibility::HierarchyInterface::InitTraversal();
+	
+	mSavedNode = NULL;
+	mLeavePassesInQueue = leavePassesInQueue;
+
+	mCamera = cam;
+	mCullCamera = cullCam ? cullCam : cam;
+
+	// create materials for node visualization
+	CreateNodeVizMaterials();
+}
+//-----------------------------------------------------------------------
+void PlatformHierarchyInterface::SetSceneManager(SceneManager *sm)
+{
+	mSceneManager = sm;
+}
+//-----------------------------------------------------------------------
+void PlatformHierarchyInterface::SetRenderSystem(RenderSystem *rsys)
+{
+	mRenderSystem = rsys;
+}
+//-----------------------------------------------------------------------
+bool PlatformHierarchyInterface::CheckFrustumVisible(GtpVisibility::HierarchyNode *node, 
+													 bool &intersects)
+{
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	return mCullCamera->isVisible(*GetBoundingBox(node), intersects);
+#else
+	return true;
+#endif
+}
+//-----------------------------------------------------------------------
+GtpVisibility::OcclusionQuery *PlatformHierarchyInterface::IssueNodeOcclusionQuery(
+	GtpVisibility::HierarchyNode *node, const bool wasVisible) 
+{
+	// get next available test id
+	GtpVisibility::OcclusionQuery *query = GetNextOcclusionQuery();
+
+	//-- the actual query test
+	query->BeginQuery();
+	
+	// if node is leaf and was visible => will be rendered anyway.
+	// In this case we can also test with the real geometry.
+	// If camera for culling is different from camera for rendering or only solids 
+	// will be rendereded => cannot optimize
+	if (mTestGeometryForVisibleLeaves && (mCamera == mCullCamera) && wasVisible && IsLeaf(node)) 
+	{
+		//LogManager::getSingleton().logMessage("render node\n");
+		RenderNode(node);
+	}
+	else
+	{
+		// this information is used e.g., by the scene graph, because the bounding box
+		// must be treated differently to the scene geometry during rendering
+		mIsBoundingBoxQuery = true;
+
+		//LogManager::getSingleton().logMessage("render box\n");
+		RenderBoundingBox(GetBoundingBox(node));
+
+		mIsBoundingBoxQuery = false;
+	}
+
+	query->EndQuery();
+	
+	return query;
+}
+//-----------------------------------------------------------------------
+GtpVisibility::OcclusionQuery *PlatformHierarchyInterface::IssuePatchOcclusionQuery(
+	GtpVisibility::Patch *patch)
+{
+	// get next available test id
+	GtpVisibility::OcclusionQuery *query = GetNextOcclusionQuery();
+
+	//-- the actual query test
+	query->BeginQuery();
+	
+	RenderPatch(patch);
+
+	query->EndQuery();
+
+	return query;
+}
+//-----------------------------------------------------------------------
+GtpVisibility::OcclusionQuery *PlatformHierarchyInterface::IssueMeshOcclusionQuery(
+	GtpVisibility::Mesh *mesh)
+{
+	// get next available test id
+	GtpVisibility::OcclusionQuery *query = GetNextOcclusionQuery();
+
+	//-- the actual query test
+	query->BeginQuery();
+	
+	RenderGeometry(mesh);
+
+	query->EndQuery();
+
+	return query;
+}
+//-----------------------------------------------------------------------
+/*void PlatformHierarchyInterface::SetOcclusionPass()
+{
+    // disable vertex and fragment program
+	mRenderSystem->unbindGpuProgram(GPT_VERTEX_PROGRAM);
+	mRenderSystem->unbindGpuProgram(GPT_FRAGMENT_PROGRAM);
+	
+	// disable lighting
+	mRenderSystem->setLightingEnabled(false);
+
+    // Disable remaining texture units
+    mRenderSystem->_disableTextureUnitsFrom(0);
+
+    //--Set up non-texture related material settings
+   
+	// Depth buffer settings
+	mRenderSystem->_setDepthBufferParams(true, false, CMPF_LESS_EQUAL);
+	// Set colour write mode off
+	mRenderSystem->_setColourBufferWriteEnabled(false, false, false, false);
+}*/
+//-----------------------------------------------------------------------
+SolidBoundingBox *PlatformHierarchyInterface::GetSolidBoundingBox()
+{
+	if (!mSolidBoundingBox)
+		mSolidBoundingBox = new SolidBoundingBox;
+
+	return mSolidBoundingBox;
+}
+//-----------------------------------------------------------------------
+void PlatformHierarchyInterface::SetOnlyShadowCasters(bool onlyShadowCasters)
+{
+	mOnlyShadowCasters = onlyShadowCasters;
+}
+//-----------------------------------------------------------------------
+bool PlatformHierarchyInterface::GetOnlyShadowCasters()
+{
+	return mOnlyShadowCasters;
+}
+//-----------------------------------------------------------------------
+bool PlatformHierarchyInterface::GetTestGeometryForVisibleLeaves()
+{
+	return mTestGeometryForVisibleLeaves;
+}
+//-----------------------------------------------------------------------
+bool PlatformHierarchyInterface::IsBoundingBoxQuery()
+{
+	return mIsBoundingBoxQuery;
+}
+//-----------------------------------------------------------------------
+void PlatformHierarchyInterface::RenderGeometry(GtpVisibility::Mesh *geom)
+{
+	mSceneManager->_renderMovableObject(geom, mLeavePassesInQueue);
+}
+//-----------------------------------------------------------------------
+void PlatformHierarchyInterface::RenderPatch(GtpVisibility::Patch *patch)
+{
+	mSceneManager->_renderSingleRenderable(patch);
+}
+//-----------------------------------------------------------------------
+SceneManager *PlatformHierarchyInterface::GetSceneManager()
+{
+	return mSceneManager;
+}
+//-----------------------------------------------------------------------
+RenderSystem *PlatformHierarchyInterface::GetRenderSystem()
+{
+	return mRenderSystem;
+}
+
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSolidHalfBoundingBox.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSolidHalfBoundingBox.cpp	(revision 117)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSolidHalfBoundingBox.cpp	(revision 117)
@@ -0,0 +1,105 @@
+#include "OgreStableHeaders.h"
+#include "OgreSolidHalfBoundingBox.h"
+
+#include "OgreSimpleRenderable.h"
+#include "OgreHardwareBufferManager.h"
+#include "OgreCamera.h"
+#include "OgreMaterialManager.h"
+
+
+namespace Ogre {
+
+#define POSITION_BINDING 0
+//-----------------------------------------------------------------------
+SolidHalfBoundingBox::SolidHalfBoundingBox()
+{
+	SetOcclusionQueryMaterial();
+	
+	mRenderOp.vertexData->vertexCount = 8;
+    mRenderOp.operationType = RenderOperation::OT_TRIANGLE_FAN; 
+}
+//-----------------------------------------------------------------------
+void SolidHalfBoundingBox::SetupBoundingBoxVertices(const AxisAlignedBox& aab, 
+													const bool isFirstHalf) 
+{
+	const Vector3& min = aab.getMinimum();
+    const Vector3& max = aab.getMaximum();
+
+	// fill the vertex buffer: 12 lines with 2 endpoints each make up a box
+    HardwareVertexBufferSharedPtr vbuf =
+        mRenderOp.vertexData->vertexBufferBinding->getBuffer(POSITION_BINDING);     
+
+    float* pPos = static_cast<float*>(vbuf->lock(HardwareBuffer::HBL_DISCARD));
+
+	//     5+------+7
+	//     /|     /|
+	//    / |    / |
+	//   / 1+---/--+3
+	// 2+------+6 /    y   z
+	//  | /    | /     |  /
+	//  |/     |/      |/
+	// 0+------+4      *---x
+
+	// fan 1
+	if (isFirstHalf)
+	{
+		*pPos++ = min.x; *pPos++ = max.y; *pPos++ = max.z; //011
+		*pPos++ = min.x; *pPos++ = min.y; *pPos++ = max.z; //001
+		*pPos++ = max.x; *pPos++ = min.y; *pPos++ = max.z; //101
+		*pPos++ = max.x; *pPos++ = max.y; *pPos++ = max.z; //111
+		
+		*pPos++ = max.x; *pPos++ = max.y; *pPos++ = min.z; //110
+		*pPos++ = min.x; *pPos++ = max.y; *pPos++ = min.z; //010
+		*pPos++ = min.x; *pPos++ = min.y; *pPos++ = min.z; //000
+		*pPos++ = min.x; *pPos++ = min.y; *pPos++ = max.z; //001
+	}
+	else
+	// fan 2
+	{
+		*pPos++ = max.x; *pPos++ = min.y; *pPos++ = min.z; //100
+		*pPos++ = min.x; *pPos++ = min.y; *pPos++ = min.z; //000 					
+		*pPos++ = min.x; *pPos++ = max.y; *pPos++ = min.z; //010
+		*pPos++ = max.x; *pPos++ = max.y; *pPos++ = min.z; //110
+
+		*pPos++ = max.x; *pPos++ = max.y; *pPos++ = max.z; //111
+		*pPos++ = max.x; *pPos++ = min.y; *pPos++ = max.z; //101
+		*pPos++ = min.x; *pPos++ = min.y; *pPos++ = max.z; //001
+		*pPos++ = min.x; *pPos++ = min.y; *pPos++ = min.z; //000
+	}
+
+    vbuf->unlock();
+}
+//-----------------------------------------------------------------------
+void SolidHalfBoundingBox::SetupBoundingBox(const AxisAlignedBox& aab, 
+											const bool isFirstHalf) 
+{
+	// init the vertices to the aabb
+	SetupBoundingBoxVertices(aab, isFirstHalf);
+
+	Real sqLen = std::max(aab.getMaximum().squaredLength(), 
+						  aab.getMinimum().squaredLength());
+    mRadius = Math::Sqrt(sqLen);
+
+    // setup the bounding box of this SimpleRenderable
+	setBoundingBox(aab);
+}
+//-----------------------------------------------------------------------
+void SolidHalfBoundingBox::SetOcclusionQueryMaterial( void )
+{
+	m_pMaterial = MaterialManager::getSingleton().getByName("Visibility/QueryMaterial");
+
+	if (m_pMaterial.isNull())
+	{
+		m_pMaterial = MaterialManager::getSingleton().
+			create("Visibility/QueryMaterial", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+	}
+
+	m_pMaterial->setColourWriteEnabled(false);
+	m_pMaterial->setDepthWriteEnabled(false);
+	m_pMaterial->setLightingEnabled(false);
+
+	setMaterial("Visibility/QueryMaterial");
+}
+
+} // namespace Ogre
+
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgrePlatformQueryManager.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgrePlatformQueryManager.cpp	(revision 316)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgrePlatformQueryManager.cpp	(revision 316)
@@ -0,0 +1,236 @@
+#include "OgrePlatformQueryManager.h"
+#include "OcclusionQuery.h"
+#include <OgreSceneManager.h>
+#include <OgreLogManager.h>
+#include <OgreStringConverter.h>
+#include <vector>
+#include <OgreSubEntity.h>
+
+
+namespace Ogre {
+
+//----------------------------------------------------------------------- 
+PlatformQueryManager::PlatformQueryManager(PlatformHierarchyInterface *hierarchyInterface, 
+										   Viewport *vp, int queryModes):
+QueryManager(hierarchyInterface, queryModes), 
+mViewport(vp), 
+mWasInitialised(false)
+{
+}
+//-----------------------------------------------------------------------
+bool PlatformQueryManager::ShootRay(const Ray &ray, std::vector<Mesh *> *visibleMeshes, bool isGlobalLine)
+{
+    // run OGRE ray shooting query
+    return false;
+}
+//-----------------------------------------------------------------------
+void PlatformQueryManager::ComputeFromPointVisibility(const Vector3 &point,
+			       GtpVisibility::NodeInfoContainer *visibleNodes,
+			       GtpVisibility::MeshInfoContainer *visibleGeometry,
+				   GtpVisibility::PatchInfoContainer *visiblePatches,
+			       bool relativeVisibility)
+{
+	SceneManager *sm = dynamic_cast<PlatformHierarchyInterface *>
+		(mHierarchyInterface)->GetSceneManager();
+
+	// create a camera for the point query
+	Camera *cam = sm->createCamera("PointQueryCam");	
+
+	//save old camera
+	Camera *savedCam = mViewport->getCamera();
+	
+	// --- initialise new camera
+	mViewport->setCamera(cam);
+	cam->setPosition(point);
+
+	cam->setNearClipDistance(savedCam->getNearClipDistance());
+	cam->setFarClipDistance(savedCam->getFarClipDistance());
+
+	// set frustum to 45 degrees so all the scene can be captured with 6 shots
+	cam->setAspectRatio(1.0);
+	cam->setFOVy(Radian(Math::HALF_PI));
+
+	int sign = -1;
+	
+	// ---- capture visibility from all 6 directions
+	for (int dir=0; dir < 6; dir++)	
+	{
+		sign *= -1;
+		
+		// Print camera details
+      	std::stringstream d;
+		d << "Point query camera: " + StringConverter::toString(cam->getDerivedPosition()) + 
+			" " + "O: " + StringConverter::toString(cam->getDerivedOrientation());
+		LogManager::getSingleton().logMessage(d.str());
+
+		// prevent from initialising geometry / node array again
+		if (dir > 0)
+		{
+			mWasInitialised = true;
+		}
+
+		ComputeCameraVisibility(*cam, visibleNodes, visibleGeometry, visiblePatches, 
+			                    relativeVisibility);
+		//mViewport->getTarget()->update(); for(int j=0; j<10000000; j++)	printf("wait");
+
+		// permute directions
+		Vector3 direction(0,0,0);
+		direction[dir/2] = sign;
+
+		cam->setDirection(direction);
+	}
+	
+	// reset camera
+	mViewport->setCamera(savedCam);
+}
+//-----------------------------------------------------------------------
+void PlatformQueryManager::ComputeCameraVisibility(const Camera &camera,
+			    GtpVisibility::NodeInfoContainer *visibleNodes,
+			    GtpVisibility::MeshInfoContainer *visibleGeometry,
+				GtpVisibility::PatchInfoContainer *visiblePatches,
+			    bool relativeVisibility)
+{
+	// we need access to the scene manager and the rendersystem
+	PlatformHierarchyInterface *pfHierarchyInterface = 
+		dynamic_cast<PlatformHierarchyInterface *>(mHierarchyInterface);
+
+	SceneManager *sm = pfHierarchyInterface->GetSceneManager();
+
+
+	// const_cast allowed because camera is not changed in renderScene
+	Camera *pCam = const_cast<Camera *>(&camera); 
+
+	// disable overlays, reset them later
+	bool overlayEnabled = mViewport->getOverlaysEnabled();
+	mViewport->setOverlaysEnabled(false);
+	
+	// clear background with black (i.e., not a valid item id)
+	ColourValue bg = mViewport->getBackgroundColour();
+	mViewport->setBackgroundColour(ColourValue(0, 0, 0, 0));
+	//pfHierarchyInterface->GetRenderSystem()->clearFrameBuffer(FBT_COLOUR | FBT_DEPTH);
+
+	// initialise item buffer (if not already initialised)
+	InitItemBuffer(visibleGeometry, visiblePatches);
+
+	//-- render scene with item buffer (i.e., objects with their id as color codes)
+
+	// enable item buffer (must be provided by scene manager)
+	bool useItemBuffer = true;
+	sm->setOption("UseItemBuffer", &useItemBuffer);
+
+
+	sm->_renderScene(pCam, mViewport, false); // render item buffer
+   
+
+	//-- collect results
+	CollectItemBufferResults(visibleGeometry, visiblePatches);
+
+	//-- reset options
+
+	useItemBuffer = false; // don't need item buffer anymore
+	sm->setOption("UseItemBuffer", &useItemBuffer);
+
+	mWasInitialised = false; // reset initialised - flag
+	mViewport->setOverlaysEnabled(overlayEnabled); // reset old overlay status
+	mViewport->setBackgroundColour(bg); // reset background color
+}
+//-----------------------------------------------------------------------
+void PlatformQueryManager::CollectItemBufferResults(
+				GtpVisibility::MeshInfoContainer *visibleGeometry,
+				GtpVisibility::PatchInfoContainer *visiblePatches)
+{
+	int dimx = 0;
+	int dimy = 0;
+
+	// copy frame buffer 
+	uchar *buf = mViewport->getTarget()->getBufferContents(dimx, dimy);
+
+	//std::stringstream d; d << "dimx: " << dimx << ", dimy: " << dimy; LogManager::getSingleton().logMessage(d.str());
+
+	// loop through frame buffer and collect visible pixels
+	for (int idx = 0; idx < dimy * dimx * 3; idx += 3)
+	{
+		//-- decode color code to receive id
+		int id = buf[idx] << 16;
+		id += buf[idx + 1] << 8;
+		id += buf[idx + 2];
+
+		//std::stringstream d; d << "myid: " << (int)buf[idx] << " " << (int)buf[idx + 1] << " " << (int)buf[idx + 2]; LogManager::getSingleton().logMessage(d.str());
+
+		// if valid id <= add visibility (id values start at 1)
+		if (mQueryModes == PATCH_VISIBILITY)
+		{	
+			if ((id > 0) && (id < (int)visiblePatches->size()))
+			{
+				((*visiblePatches)[id]).AddVisibility(1, 0);
+			}
+		}
+		else if (mQueryModes == GEOMETRY_VISIBILITY)
+		{
+			if ((id > 0) && (id < (int)visibleGeometry->size()))
+			{
+				((*visibleGeometry)[id]).AddVisibility(1, 0);
+			}
+		}
+	}
+
+	delete [] buf;
+}
+
+//-----------------------------------------------------------------------
+void PlatformQueryManager::InitItemBuffer(
+				GtpVisibility::MeshInfoContainer *visibleGeometry,
+				GtpVisibility::PatchInfoContainer *visiblePatches)
+{
+	if (mWasInitialised)
+		return;
+
+	mWasInitialised = true;
+
+	SceneManager *sm = 
+		dynamic_cast<PlatformHierarchyInterface *>(mHierarchyInterface)->GetSceneManager();
+
+	SceneManager::EntityIterator it = sm->getEntityIterator();
+
+	// TODO: make the function more efficient
+
+	visibleGeometry->clear();
+	visiblePatches->clear();
+
+	int id = 0;
+
+	/* We can either use patches or meshes. If patches are used, an unique id must
+	   be given each patch. Otherwise the same id must be given to all patches belonging
+	   to the same mesh.
+    */
+	while (it.hasMoreElements())
+	{
+		Entity *ent = it.getNext();
+
+		for (int i = 0; i < (int)ent->getNumSubEntities(); ++i)
+		{
+			SubEntity *subEnt = ent->getSubEntity(i);
+
+			if (mQueryModes == PATCH_VISIBILITY)
+			{
+				++ id;
+				visiblePatches->push_back(GtpVisibility::PatchInfo(subEnt, 0, 0));
+			}
+				
+			subEnt->setId(id);
+			//subEnt->setId((41 << 16) + (4 << 8) + 60);
+		}
+			
+		if (mQueryModes == GEOMETRY_VISIBILITY)
+		{
+			visibleGeometry->push_back(GtpVisibility::MeshInfo(ent, 0, 0));
+			++ id;
+		}
+	}
+}
+//-----------------------------------------------------------------------
+void PlatformQueryManager::SetViewport(Viewport *vp)
+{
+	mViewport = vp;
+}
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityBspSceneManager.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityBspSceneManager.cpp	(revision 59)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityBspSceneManager.cpp	(revision 59)
@@ -0,0 +1,108 @@
+#include "OgreVisibilityBspSceneManager.h"
+#include <OgreMath.h>
+#include <OgreIteratorWrappers.h>
+#include <OgreRenderSystem.h>
+#include <OgreCamera.h>
+
+#include <windows.h>
+
+namespace Ogre {
+
+//-----------------------------------------------------------------------
+VisibilityBspSceneManager::VisibilityBspSceneManager(
+	GtpVisibility::Manager *visManager): mVisibilityManager(visManager)
+{
+	mHierarchyInterface = 
+		new BspHierarchyInterface(this, mDestRenderSystem);
+
+	//mDisplayNodes = true;
+	//mShowBoundingBoxes = true;
+	//mShowBoxes = true;
+	//mMaxDepth = 20;
+}
+//-----------------------------------------------------------------------
+VisibilityBspSceneManager::~VisibilityBspSceneManager()
+{
+	delete mHierarchyInterface;
+}
+//-----------------------------------------------------------------------
+void VisibilityBspSceneManager::_renderVisibleObjects()
+{
+	//-- render background
+	clearSpecialCaseRenderQueues();
+	addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND);
+	addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY);
+
+	setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE);
+	SceneManager::_renderVisibleObjects( );
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	_deleteRenderedQueueGroups();
+#endif
+
+	//-- render visible objects (i.e., all but overlay)
+	clearSpecialCaseRenderQueues();
+	addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY);
+	setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE);
+
+	mHierarchyInterface->InitFrame(mSceneRoot, mCameraInProgress);
+	mVisibilityManager->ApplyVisibilityCulling();
+
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	_deleteRenderedQueueGroups();
+#endif
+
+	//-- render rest, e.g., overlay
+	clearSpecialCaseRenderQueues();
+	SceneManager::_renderVisibleObjects();
+	//_deleteRenderedQueueGroups();
+}
+//-----------------------------------------------------------------------
+void VisibilityBspSceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters)
+{
+	// must be empty because objects are found and rendered in an interleaved fashion
+	// in _renderVisibibleObjects 
+}
+//-----------------------------------------------------------------------
+void VisibilityBspSceneManager::_updateSceneGraph(Camera* cam)
+{
+	//mOcclusionBspHierarchyInterface->setNumSceneNodes((int)mSceneNodes.size());
+	mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface);
+	mHierarchyInterface->SetRenderSystem(mDestRenderSystem);
+
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+    mHierarchyInterface->SetNumOctreeNodes(mNumOctreeNodes);
+#endif
+	BspSceneManager::_updateSceneGraph(cam);
+}
+//-----------------------------------------------------------------------
+bool VisibilityBspSceneManager::setOption(const String & key, const void * val)
+{
+	return /*mVisibilitySceneTraverser->setOption( key, val) || */BspSceneManager::setOption( key, val );
+}
+//-----------------------------------------------------------------------
+bool VisibilityBspSceneManager::getOption(const String & key, void *val)
+{
+	return /*mVisibilitySceneTraverser->getOption( key, val) || */BspSceneManager::getOption(key, val);
+}
+//-----------------------------------------------------------------------
+bool VisibilityBspSceneManager::getOptionValues(const String & key, StringVector  &refValueList)
+{
+	return BspSceneManager::getOptionValues( key, refValueList );
+}
+//-----------------------------------------------------------------------
+bool VisibilityBspSceneManager::getOptionKeys(StringVector & refKeys)
+{
+	return /*mVisibilitySceneTraverser->getOptionKeys ( refKeys ) || */BspSceneManager::getOptionKeys(refKeys);
+}
+//-----------------------------------------------------------------------
+void VisibilityBspSceneManager::setVisibilityManager(GtpVisibility::Manager *visManager)
+{
+    mVisibilityManager = visManager;
+}
+//-----------------------------------------------------------------------
+GtpVisibility::Manager *VisibilityBspSceneManager::getVisibilityManager()
+{
+	return mVisibilityManager;
+}
+
+}   // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreTerrainContentGenerator.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreTerrainContentGenerator.cpp	(revision 164)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreTerrainContentGenerator.cpp	(revision 164)
@@ -0,0 +1,104 @@
+#include "OgreTerrainContentGenerator.h"
+
+
+namespace Ogre {
+
+/*************************************************/
+/*         RayQueryExecutor implementation       */
+/*************************************************/
+
+//-----------------------------------------------------------------------
+RayQueryExecutor::RayQueryExecutor(SceneManager *sm)
+{
+	mRaySceneQuery = sm->createRayQuery(Ray());
+}
+//-----------------------------------------------------------------------
+RayQueryExecutor::~RayQueryExecutor()
+{
+	OGRE_DELETE(mRaySceneQuery);
+}
+//-----------------------------------------------------------------------
+bool RayQueryExecutor::executeRayQuery(Vector3 *result, const Vector3 &pos, 
+									   const Vector3 &dir)
+{
+	return executeRayQuery(result, Ray(pos, dir));
+}
+//-----------------------------------------------------------------------
+bool RayQueryExecutor::executeRayQuery(Vector3 *result, const Ray &ray)
+{
+    mRaySceneQuery->setRay(ray);
+
+    // Perform the scene query
+    RaySceneQueryResult &queryResult = mRaySceneQuery->execute();
+    RaySceneQueryResult::iterator it = queryResult.begin();
+
+	if (it != queryResult.end() && it->worldFragment)
+	{
+		SceneQuery::WorldFragment* wf = it->worldFragment;
+
+		*result = wf->singleIntersection; 
+		return true;
+	}
+
+	return false;
+}
+
+/*******************************************************/
+/*     TerrainContentGenerator implementation          */
+/*******************************************************/
+
+//-----------------------------------------------------------------------
+TerrainContentGenerator::TerrainContentGenerator(SceneManager *sm):
+SceneContentGenerator(sm), mOffset(0)
+{
+	mMinPos = Vector3(0.0f, MAX_HEIGHT, 0.0f);
+	mMaxPos = Vector3(3000.0f, MAX_HEIGHT, 3000.0f);
+
+	mMinAngle = Vector3(0.0f, 0.0f, 0.0f);
+	mMaxAngle = Vector3(360.0f, 0.0f, 0.0f);
+
+	mRayQueryExecutor = new RayQueryExecutor(sm);
+}
+//-----------------------------------------------------------------------
+TerrainContentGenerator::~TerrainContentGenerator()
+{
+	delete mRayQueryExecutor;
+}
+//-----------------------------------------------------------------------
+SceneNode *TerrainContentGenerator::GenerateSceneObject(const Vector3 &position, 
+					 const Vector3 &rotation, const String& objName, const bool clampToTerrain)
+{	
+	if (clampToTerrain)
+		return GenerateSceneObject(position, rotation, objName);
+	
+	return SceneContentGenerator::GenerateSceneObject(position, rotation, objName);
+}
+//-----------------------------------------------------------------------
+SceneNode *TerrainContentGenerator::GenerateSceneObject(const Vector3 &position, 
+					 const Vector3 &rotation, const String& objName)
+{
+	Vector3 queryResult;
+	// set y to max height so we are sure to be over terrain
+	Vector3 pos(position.x, MAX_HEIGHT, position.z);
+
+	if (mRayQueryExecutor->executeRayQuery(&queryResult, position, Vector3::NEGATIVE_UNIT_Y))
+	{
+		// reject if height is too high
+		if (queryResult.y < mMaxPos.y)
+		{
+			// add offset so object is over terrain
+			queryResult.y += mOffset;
+
+			return SceneContentGenerator::GenerateSceneObject(queryResult, rotation, objName);
+		}
+	}
+	
+	return NULL;
+}
+//-----------------------------------------------------------------------
+void TerrainContentGenerator::SetOffset(Real offset)
+{
+	mOffset = offset;
+}
+
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityDotSceneManager.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityDotSceneManager.cpp	(revision 59)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityDotSceneManager.cpp	(revision 59)
@@ -0,0 +1,107 @@
+#include <OgreVisibilityDotSceneManager.h>
+#include <OgreMath.h>
+#include <OgreIteratorWrappers.h>
+#include <OgreRenderSystem.h>
+#include <OgreCamera.h>
+
+//#include <windows.h>
+
+namespace Ogre {
+
+//-----------------------------------------------------------------------
+VisibilityDotSceneManager::VisibilityDotSceneManager(GtpVisibility::VisibilityManager *visManager)
+:mVisibilityManager(visManager)
+{
+	mHierarchyInterface = 
+		new SceneNodeHierarchyInterface(this, mDestRenderSystem);
+	
+	mShowBoundingBoxes = true;
+	
+	//mDisplayNodes = true;
+	//mShowBoxes = true;
+}
+//-----------------------------------------------------------------------
+VisibilityDotSceneManager::~VisibilityDotSceneManager()
+{
+	delete mHierarchyInterface;
+}
+//-----------------------------------------------------------------------
+void VisibilityDotSceneManager::_renderVisibleObjects(void)
+{
+	//-- render background
+	clearSpecialCaseRenderQueues();
+	addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND);
+	addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY);
+
+	setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE);
+	DotSceneManager::_renderVisibleObjects();
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	_deleteRenderedQueueGroups();
+#endif
+	//-- render visible objects (i.e., all but overlay)
+	clearSpecialCaseRenderQueues();
+	addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY);
+	setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE);
+
+	mHierarchyInterface->InitFrame(mSceneRoot, mCameraInProgress);
+
+	mVisibilityManager->ApplyVisibilityCulling();
+
+#ifdef GTP_VISIBILITY_MODIFIED_OGRE
+	_deleteRenderedQueueGroups();
+#endif
+
+	//-- render overlay
+	clearSpecialCaseRenderQueues();
+	DotSceneManager::_renderVisibleObjects( );
+
+	clearSpecialCaseRenderQueues();
+}
+//-----------------------------------------------------------------------
+void VisibilityDotSceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters)
+{
+	// must be empty because objects are found and rendered in an interleaved fashion
+	// in _renderVisibibleObjects 
+}
+//-----------------------------------------------------------------------
+void VisibilityDotSceneManager::_updateSceneGraph(Camera* cam)
+{
+	//mVisibilitySceneTraverser->setNumSceneNodes((int)mSceneNodes.size());
+	mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface);
+	mHierarchyInterface->SetRenderSystem(mDestRenderSystem);
+		        	
+	DotSceneManager::_updateSceneGraph(cam);
+}
+//-----------------------------------------------------------------------
+bool VisibilityDotSceneManager::setOption(const String & key, const void * val)
+{
+	return /*mVisibilitySceneTraverser->setOption( key, val) || */DotSceneManager::setOption(key, val);
+}
+//-----------------------------------------------------------------------
+bool VisibilityDotSceneManager::getOption(const String & key, void *val)
+{
+	return /*mVisibilitySceneTraverser->getOption( key, val) || */DotSceneManager::getOption(key, val);
+}
+//-----------------------------------------------------------------------
+bool VisibilityDotSceneManager::getOptionValues(const String & key, StringVector  &refValueList)
+{
+	return DotSceneManager::getOptionValues(key, refValueList);
+}
+//-----------------------------------------------------------------------
+bool VisibilityDotSceneManager::getOptionKeys(StringVector & refKeys)
+{
+	return /*mVisibilitySceneTraverser->getOptionKeys ( refKeys ) || */DotSceneManager::getOptionKeys( refKeys );
+}
+//-----------------------------------------------------------------------
+void VisibilityDotSceneManager::setVisibilityManager(GtpVisibility::VisibilityManager *visManager)
+{
+	mVisibilityManager = visManager;
+}
+//-----------------------------------------------------------------------
+GtpVisibility::VisibilityManager *VisibilityDotSceneManager::getVisibilityManager()
+{
+	return mVisibilityManager;
+}
+
+//} // namespace GtpVisibility
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSolidBoundingBox.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSolidBoundingBox.cpp	(revision 118)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreSolidBoundingBox.cpp	(revision 118)
@@ -0,0 +1,170 @@
+#include "OgreStableHeaders.h"
+#include "OgreSolidBoundingBox.h"
+
+#include <OgreSimpleRenderable.h>
+#include <OgreHardwareBufferManager.h>
+#include <OgreCamera.h>
+#include <OgreMaterialManager.h>
+#include <OgreMaterial.h>
+#include <OgrePass.h>
+#include <OgreTechnique.h>
+
+namespace Ogre {
+
+#define POSITION_BINDING 0
+//-----------------------------------------------------------------------
+SolidBoundingBox::SolidBoundingBox()
+{
+	 mRenderOp.vertexData = new VertexData();
+	 mRenderOp.indexData = new IndexData();
+
+	 mRenderOp.indexData->indexStart = 0;
+	 mRenderOp.vertexData->vertexStart = 0;
+
+	 mRenderOp.vertexData->vertexCount = 8;
+	 mRenderOp.indexData->indexCount  = 36;
+
+	 mRenderOp.operationType = RenderOperation::OT_TRIANGLE_LIST; 
+	 mRenderOp.useIndexes = true; 
+
+     VertexDeclaration* decl = mRenderOp.vertexData->vertexDeclaration;
+     VertexBufferBinding* bind = mRenderOp.vertexData->vertexBufferBinding;
+
+     decl->addElement(POSITION_BINDING, 0, VET_FLOAT3, VES_POSITION);
+	 //decl->addElement(INDEX_BINDING, 0, VET_, VES_POSITION);
+
+	 // create the vertex buffer
+     HardwareVertexBufferSharedPtr vbuf = 
+            HardwareBufferManager::getSingleton().createVertexBuffer(
+                decl->getVertexSize(POSITION_BINDING),
+                mRenderOp.vertexData->vertexCount,
+                HardwareBuffer::HBU_STATIC_WRITE_ONLY);
+
+     // Bind buffer
+     bind->setBinding(POSITION_BINDING, vbuf);
+
+	 //-- index buffer
+	 unsigned short faces[36] = 
+	 {
+        0,2,3,
+        0,1,2,
+        1,6,2,
+        1,5,6,
+        4,6,5,
+        4,7,6,
+        0,7,4,
+        0,3,7,
+        0,5,1,
+        0,4,5,
+        2,7,3,
+        2,6,7
+	 };
+
+	 /// Allocate index buffer of the requested number of vertices 
+     HardwareIndexBufferSharedPtr ibuf = HardwareBufferManager::getSingleton().
+         createIndexBuffer(
+             HardwareIndexBuffer::IT_16BIT, 
+             mRenderOp.indexData->indexCount, 
+             HardwareBuffer::HBU_STATIC_WRITE_ONLY);
+
+	 /// Upload the index data to the card
+	 ibuf->writeData(0, ibuf->getSizeInBytes(), faces, true);
+	 //mRenderOp.useSharedVertices = true;
+	 mRenderOp.indexData->indexBuffer = ibuf;
+	 // set material with no lighting, no color, no depth write
+	 SetOcclusionQueryMaterial();
+	 //setMaterial("BaseWhiteNoLighting");
+}
+//-----------------------------------------------------------------------
+SolidBoundingBox::~SolidBoundingBox() 
+{
+	delete mRenderOp.vertexData;
+	delete mRenderOp.indexData;
+}
+//-----------------------------------------------------------------------
+void SolidBoundingBox::SetupBoundingBoxVertices(const AxisAlignedBox& aab) 
+{
+	const Vector3& min = aab.getMinimum();
+    const Vector3& max = aab.getMaximum();
+
+	// fill the vertex buffer: 12 lines with 2 endpoints each make up a box
+    HardwareVertexBufferSharedPtr vbuf =
+        mRenderOp.vertexData->vertexBufferBinding->getBuffer(POSITION_BINDING);     
+
+    float* pPos = static_cast<float*>(vbuf->lock(HardwareBuffer::HBL_DISCARD));
+
+	*pPos++ = min.x; *pPos++ = max.y; *pPos++ = min.z; 
+	*pPos++ = max.x; *pPos++ = max.y; *pPos++ = min.z; 
+	*pPos++ = max.x; *pPos++ = min.y; *pPos++ = min.z; 
+	*pPos++ = min.x; *pPos++ = min.y; *pPos++ = min.z; 
+		
+	*pPos++ = min.x; *pPos++ = max.y; *pPos++ = max.z; 
+	*pPos++ = max.x; *pPos++ = max.y; *pPos++ = max.z; 
+	*pPos++ = max.x; *pPos++ = min.y; *pPos++ = max.z; 
+	*pPos++ = min.x; *pPos++ = min.y; *pPos++ = max.z;
+
+    vbuf->unlock();
+}
+//-----------------------------------------------------------------------
+void SolidBoundingBox::SetupBoundingBox(const AxisAlignedBox& aab)
+{
+	// init the vertices to the aabb
+	SetupBoundingBoxVertices(aab);
+
+	Real sqLen = std::max(aab.getMaximum().squaredLength(), 
+						  aab.getMinimum().squaredLength());
+    mRadius = Math::Sqrt(sqLen);
+
+    // setup the bounding box of this SimpleRenderable
+	setBoundingBox(aab);
+}
+//-----------------------------------------------------------------------
+void SolidBoundingBox::SetOcclusionQueryMaterial()
+{
+	m_pMaterial = MaterialManager::getSingleton().getByName("Visibility/QueryMaterial");
+
+	if (m_pMaterial.isNull())
+	{
+		m_pMaterial = MaterialManager::getSingleton().
+			create("Visibility/QueryMaterial", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+
+		Pass *queryPass = m_pMaterial->getTechnique(0)->getPass(0);
+		queryPass->setColourWriteEnabled(false);
+		queryPass->setDepthWriteEnabled(false);
+		queryPass->setLightingEnabled(false);
+	}
+
+	setMaterial("Visibility/QueryMaterial");
+}
+
+// Override this method to prevent parent transforms (rotation,translation,scale)
+void SolidBoundingBox::getWorldTransforms(Matrix4* xform) const
+{
+	// return identity matrix to prevent parent transforms
+    *xform = Matrix4::IDENTITY;
+}
+//-----------------------------------------------------------------------
+const Quaternion& SolidBoundingBox::getWorldOrientation() const
+{
+	return Quaternion::IDENTITY;
+}
+//-----------------------------------------------------------------------
+const Vector3& SolidBoundingBox::getWorldPosition() const
+{
+	return Vector3::ZERO;
+}
+
+Real SolidBoundingBox::getSquaredViewDepth(const Camera* cam) const
+{
+	Vector3 min, max, mid, dist;
+
+	min = mBox.getMinimum();
+	max = mBox.getMaximum();
+	mid = ((min - max) * 0.5) + min;
+	dist = cam->getDerivedPosition() - mid;
+
+	return dist.squaredLength();
+}
+
+} // namespace Ogre
+
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreItemBufferQueryManager.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreItemBufferQueryManager.cpp	(revision 171)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreItemBufferQueryManager.cpp	(revision 171)
@@ -0,0 +1,175 @@
+#include "OgreItemBufferQueryManager.h"
+#include <OgreLogManager.h>
+#include <OgreStringConverter.h>
+#include <vector>
+#include <OgreSubEntity.h>
+
+namespace Ogre {
+
+//----------------------------------------------------------------------- 
+ItemBufferQueryManager::ItemBufferQueryManager(PlatformHierarchyInterface *hierarchyInterface, 
+											   Viewport *vp,
+											   const bool renderPatches):
+PlatformQueryManager(hierarchyInterface, vp), mRenderPatchesForItemBuffer(renderPatches)
+{
+}
+//-----------------------------------------------------------------------
+void ItemBufferQueryManager::ComputeCameraVisibility(const Camera &camera,
+			    InfoContainer<GtpVisibility::NodeInfo> *visibleNodes,
+			    InfoContainer<GtpVisibility::MeshInfo> *visibleGeometry,
+				InfoContainer<GtpVisibility::PatchInfo> *visiblePatches,
+			    bool relativeVisibility)
+{
+	// we need access to the scene manager and the rendersystem
+	PlatformHierarchyInterface *pfHierarchyInterface = 
+		dynamic_cast<PlatformHierarchyInterface *>(mHierarchyInterface);
+
+	SceneManager *sm = pfHierarchyInterface->GetSceneManager();
+
+
+	// const_cast allowed because camera is not changed in renderScene
+	Camera *pCam = const_cast<Camera *>(&camera); 
+
+	// disable overlays, reset them later
+	bool overlayEnabled = mViewport->getOverlaysEnabled();
+	mViewport->setOverlaysEnabled(false);
+	
+	// clear background with black (i.e., not a valid item id)
+	ColourValue bg = mViewport->getBackgroundColour();
+	mViewport->setBackgroundColour(ColourValue(0, 0, 0, 0));
+	//pfHierarchyInterface->GetRenderSystem()->clearFrameBuffer(FBT_COLOUR | FBT_DEPTH);
+
+
+	//-- render scene with item buffer (i.e., objects with their id as color codes)
+
+	// enable item buffer (must be provided by scene manager)
+	bool useItemBuffer = true;
+	sm->setOption("UseItemBuffer", &useItemBuffer);
+	sm->_renderScene(pCam, mViewport, false); // render item buffer
+   
+
+	//-- collect results
+	
+	// initialise item buffer (if not already initialised)
+	InitItemBuffer(visibleNodes, visibleGeometry, visiblePatches);
+
+	int dimx = 0;
+	int dimy = 0;
+
+	// copy frame buffer 
+	uchar *buf = mViewport->getTarget()->getBufferContents(dimx, dimy);
+
+	int n = mRenderPatchesForItemBuffer ? 
+		(int)visiblePatches->size() : (int)visibleGeometry->size();
+
+	//std::stringstream d; d << "dimx: " << dimx << ", dimy: " << dimy; LogManager::getSingleton().logMessage(d.str());
+
+	// loop through frame buffer and collect visible pixels
+	for (int idx = 0; idx < dimy * dimx * 3; idx += 3)
+	{
+		//-- decode color code to receive id
+		int id = buf[idx] << 16;
+		id += buf[idx + 1] << 8;
+		id += buf[idx + 2];
+
+		//std::stringstream d; d << "myid: " << (int)buf[idx] << " " << (int)buf[idx + 1] << " " << (int)buf[idx + 2]; LogManager::getSingleton().logMessage(d.str());
+
+		// if valid id <= add visibility (id values start at 1)
+		if ((id > 0) && (id < n))
+		{
+			if (mRenderPatchesForItemBuffer)
+			{
+				((*visiblePatches)[id]).AddVisibility(1, 1);
+			}
+			else
+			{
+				((*visibleGeometry)[id]).AddVisibility(1, 1);
+			}
+		}
+	}
+
+
+	//-- reset options
+
+	useItemBuffer = false; // don't need item buffer anymore
+	sm->setOption("UseItemBuffer", &useItemBuffer);
+
+	mWasInitialised = false; // reset initialised - flag
+	mViewport->setOverlaysEnabled(overlayEnabled); // reset old overlay status
+	mViewport->setBackgroundColour(bg); // reset background color
+
+	delete [] buf; 	// delete copy of the frame buffer
+}
+//-----------------------------------------------------------------------
+void ItemBufferQueryManager::InitItemBuffer(
+				InfoContainer<GtpVisibility::NodeInfo> *visibleNodes,
+			    InfoContainer<GtpVisibility::MeshInfo> *visibleGeometry,
+				InfoContainer<GtpVisibility::PatchInfo> *visiblePatches)
+{
+	if (mWasInitialised)
+		return;
+
+	mWasInitialised = true;
+
+	SceneManager *sm = 
+		dynamic_cast<PlatformHierarchyInterface *>(mHierarchyInterface)->GetSceneManager();
+
+	SceneManager::EntityIterator it = sm->getEntityIterator();
+
+	// TODO: make this more efficient
+	visibleGeometry->clear();
+	visibleNodes->clear();
+	visiblePatches->clear();
+
+	int id = 0;
+
+	/* We can either use patches or meshes. If patches are used, an unique id must
+	   be given each patch. Otherwise the same id must be given to all patches belonging
+	   to the same mesh.
+    */
+	while (it.hasMoreElements())
+	{
+		Entity *ent = it.getNext();
+
+		for (int i = 0; i < (int)ent->getNumSubEntities(); ++i)
+		{
+			SubEntity *subEnt = ent->getSubEntity(i);
+
+			if (mRenderPatchesForItemBuffer)
+			{
+				++ id;
+				visiblePatches->push_back(GtpVisibility::PatchInfo(subEnt, 0, 0));
+			}
+				
+			subEnt->setId(id);
+			//subEnt->setId((41 << 16) + (4 << 8) + 60);
+			//subEnt->setId((2 << 16) + (4 << 8) + 60);
+		}
+			
+		if (!mRenderPatchesForItemBuffer)
+		{
+			visibleGeometry->push_back(GtpVisibility::MeshInfo(ent, 0, 0));
+			++ id;
+		}
+	}
+}
+
+/*
+//-----------------------------------------------------------------------
+Entity* VisibilityOctreeSceneManager::createEntity(const String& entityName, 
+													const String& meshName)
+{
+	Entity *ent = SceneManager::createEntity(entityName, meshName);
+
+	for (int i = 0; i < (int)ent->getNumSubEntities(); ++i)
+	{
+		ent->getSubEntity(i)->setId(mCurrentEntityId);
+	}
+
+	// increase counter of entity id values
+	++ mCurrentEntityId;
+
+	return ent;
+}
+*/
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOcclusionQueriesQueryManager.cpp
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOcclusionQueriesQueryManager.cpp	(revision 370)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOcclusionQueriesQueryManager.cpp	(revision 370)
@@ -0,0 +1,483 @@
+#include "OgreOcclusionQueriesQueryManager.h"
+#include <OgreLogManager.h>
+#include <OgreStringConverter.h>
+#include <vector>
+#include <OgreSubEntity.h>
+
+
+namespace Ogre {
+
+//----------------------------------------------------------------------- 
+OcclusionQueriesQueryManager::OcclusionQueriesQueryManager(
+							PlatformHierarchyInterface *hierarchyInterface, 
+							Viewport *vp,
+							int queryModes,
+							int itemBufferMode):
+PlatformQueryManager(hierarchyInterface, vp, queryModes), 
+mItemBufferMode(itemBufferMode)
+{
+}
+//-----------------------------------------------------------------------
+void OcclusionQueriesQueryManager::ComputeCameraVisibility(const Camera &camera,
+			    GtpVisibility::NodeInfoContainer *visibleNodes,
+			    GtpVisibility::MeshInfoContainer *visibleGeometry,
+				GtpVisibility::PatchInfoContainer *visiblePatches,
+			    bool relativeVisibility)
+{
+	// we need access to the scene manager and the rendersystem
+	PlatformHierarchyInterface *pfHierarchyInterface = 
+		dynamic_cast<PlatformHierarchyInterface *>(mHierarchyInterface);
+
+	// disable overlays, reset them later
+	bool overlayEnabled = mViewport->getOverlaysEnabled();
+
+	//-- render scene with item buffer (i.e., objects with their id as color codes)
+//mItemBufferMode = 0;
+	if ((mItemBufferMode && mQueryModes) != 0)
+	{
+		int savedQueryModes = mQueryModes;
+		mQueryModes = mItemBufferMode;
+		
+		PlatformQueryManager::ComputeCameraVisibility(camera, visibleNodes,
+			    visibleGeometry, visiblePatches, relativeVisibility);
+		
+		// overlays cause false visibility
+		mViewport->setOverlaysEnabled(false);
+		mQueryModes = savedQueryModes;
+	}
+	else
+	{
+   		// const_cast allowed because camera is not changed in renderScene
+		Camera *pCam = const_cast<Camera *>(&camera); 
+		mViewport->setOverlaysEnabled(false);
+
+		//-- Render scene to get conservative visibility and fill depth buffer
+		pfHierarchyInterface->GetSceneManager()->_renderScene(pCam, mViewport, false);
+	}
+
+	
+	/* 	Two query lists for projected pixels and for visibile pixels:
+		We test queries after a rendering pass 
+		to get exact visibility with regard to the current camera.
+		We issue all queries at once to avoid starvation & stalls.
+	*/
+	GtpVisibility::QueryList queryList[2];
+	
+	// rendered visibile hierarchy nodes from previous rendering
+	GtpVisibility::NodeVector *visNodes = mHierarchyInterface->GetVisibleNodes();
+	GtpVisibility::NodeVector::iterator visNodesIt, visNodesIt_end = visNodes->end();
+
+    GtpVisibility::NodeVector nodeList;
+
+	if (mQueryModes & NODE_VISIBILITY)
+	{
+		for (visNodesIt = visNodes->begin(); visNodesIt != visNodesIt_end; ++visNodesIt)
+		{
+			nodeList.push_back((*visNodesIt));
+		}
+	}
+
+	GtpVisibility::NodeVector::iterator nodeIt, nodeIt_end = nodeList.end();
+
+	// vector for storing entities of meshes
+	GtpVisibility::GeometryVector geometryList;
+	
+	// store geometry of the hierarchy nodes in a geometry list
+	if (mQueryModes & GEOMETRY_VISIBILITY)
+	{	
+		for (visNodesIt = visNodes->begin(); visNodesIt != visNodesIt_end; ++visNodesIt)	
+		{
+			mHierarchyInterface->GetNodeGeometryList(*visNodesIt, &geometryList, false);
+		}
+	}
+	
+	// geometry list iterator
+	GtpVisibility::GeometryVector::iterator geometryIt, geometryIt_end = geometryList.end();
+
+	// vector for storing subentities of meshes
+	GtpVisibility::PatchVector patchList;
+
+	// store patchges of the geometries in a patch list
+	if (mQueryModes & PATCH_VISIBILITY)
+	{
+		for (visNodesIt = visNodes->begin(); visNodesIt != visNodesIt_end; ++visNodesIt)	
+		{
+			GetNodePatchList(*visNodesIt, &patchList);
+		}
+	}
+
+	GtpVisibility::PatchVector::iterator patchIt, patchIt_end = patchList.end();
+
+	// to obtain the correct number of projected pixels, depth write must be disabled
+	bool enableDepthWrite = false;
+	// this option must be provided by the scene manager
+	pfHierarchyInterface->GetSceneManager()->setOption("DepthWrite", &enableDepthWrite);
+
+
+	/* relative visiblity:
+	   1) get visible pixels count of objects
+	   2) clear frame buffer
+	   3) get projected visible pixels count:
+	      test all objects again without depth write (set as option in scene manager)
+	   4) calculate ratio between visible vs. projected pixels
+	*/
+		
+	// for relative visibility we need 2 rendering passes
+	int n = relativeVisibility ? 2 : 1;
+	if (mItemBufferMode > 0)
+		LogManager::getSingleton().logMessage("item buffer");
+
+	for (int i = 0; i < n; ++i)
+	{
+		//-- queries for hierarchy nodes
+		for (nodeIt = nodeList.begin(); nodeIt != nodeIt_end; ++nodeIt)		
+		{
+			// TODO: DELETE QUERIES FROM PREVIOUS RENDER
+			queryList[i].push_back(mHierarchyInterface->IssueNodeOcclusionQuery(*nodeIt, false));
+		}
+
+		//-- queries for geometry: if item buffer, capture only projected visibility
+		if ((mItemBufferMode != GEOMETRY_VISIBILITY) || (i == 1))
+		{			
+			for (geometryIt = geometryList.begin(); geometryIt != geometryIt_end; ++geometryIt)
+			{
+				queryList[i].push_back(pfHierarchyInterface->IssueMeshOcclusionQuery(*geometryIt));
+			}
+		}
+		
+		//-- queries for patches: if item buffer, capture only projected visibility
+		if ((mItemBufferMode != PATCH_VISIBILITY) || (i == 1))
+		{
+			for (patchIt = patchList.begin(); patchIt != patchIt_end; ++patchIt)
+			{
+				queryList[i].push_back(pfHierarchyInterface->IssuePatchOcclusionQuery(*patchIt));
+			}
+		}
+
+		pfHierarchyInterface->GetRenderSystem()->clearFrameBuffer(FBT_DEPTH);
+	}
+
+	
+	//-- collect results
+	GtpVisibility::QueryList::iterator visQueryIt = queryList[0].begin();
+	GtpVisibility::QueryList::iterator projQueryIt = queryList[1].begin();
+	
+	// collect occlusion queries for hierarchy nodes
+	CollectNodeVisibility(visQueryIt, projQueryIt, &nodeList, visibleNodes, relativeVisibility);
+
+
+	// collect occlusion queries for geometry
+	if ((mItemBufferMode == GEOMETRY_VISIBILITY) && relativeVisibility)
+	{
+		// if visibility was established using the item buffer,
+		// the array is organized different (e.g., ordered by id, all possible objects)
+		CollectRelativeGeometryVisibilityForItemBuffer(projQueryIt, &geometryList, visibleGeometry);
+	}
+	else if (mItemBufferMode != GEOMETRY_VISIBILITY)
+	{
+		CollectGeometryVisibility(visQueryIt, projQueryIt, &geometryList, visibleGeometry, 
+								  relativeVisibility);
+	}
+
+
+	// collect occlusion queries for patches
+	if ((mItemBufferMode == PATCH_VISIBILITY) && relativeVisibility)
+	{
+		CollectRelativePatchVisibilityForItemBuffer(projQueryIt, &patchList, visiblePatches);
+	}
+	else if (mItemBufferMode != PATCH_VISIBILITY)
+	{
+		CollectPatchVisibility(visQueryIt, projQueryIt, &patchList, visiblePatches, relativeVisibility);
+	}	
+
+		
+	//-- reset options
+	enableDepthWrite = true;
+	// this option must be provided by the scene manager
+	pfHierarchyInterface->GetSceneManager()->setOption("DepthWrite", &enableDepthWrite);
+	// reset old overlay status
+	mViewport->setOverlaysEnabled(overlayEnabled);
+
+	mWasInitialised = false;
+}
+//-----------------------------------------------------------------------
+void OcclusionQueriesQueryManager::ComputeFromPointVisibility(const Vector3 &point,
+			       GtpVisibility::NodeInfoContainer *visibleNodes,
+			       GtpVisibility::MeshInfoContainer *visibleGeometry,
+				   GtpVisibility::PatchInfoContainer *visiblePatches,
+			       bool relativeVisibility)
+{
+	PlatformQueryManager::ComputeFromPointVisibility(point, visibleNodes, 
+		visibleGeometry, visiblePatches, relativeVisibility);
+
+	// adds up their visibility and removes duplicates 
+	// (duplicates occur if an object is on the edge of the viewport)
+	RemoveDuplicateNodes(visibleNodes);
+	
+	if (mItemBufferMode != GEOMETRY_VISIBILITY)
+	{
+		RemoveDuplicateGeometry(visibleGeometry);
+	}
+	
+	if (mItemBufferMode != PATCH_VISIBILITY)
+	{
+		RemoveDuplicatePatches(visiblePatches);
+	}
+}
+//------j-----------------------------------------------------------------
+void  OcclusionQueriesQueryManager::CollectNodeVisibility(
+						GtpVisibility::QueryList::iterator &visQueryIt, 
+						GtpVisibility::QueryList::iterator &projQueryIt,
+						GtpVisibility::NodeVector *nodeList,  
+						GtpVisibility::NodeInfoContainer *visibleNodes,
+						bool relativeVisibility)
+{
+	GtpVisibility::NodeVector::iterator nodeIt;
+
+	//-- queries for nodes
+	for (nodeIt = nodeList->begin(); nodeIt != nodeList->end(); ++nodeIt)
+	{
+		unsigned int visiblePixels = 0;
+		(*visQueryIt)->GetQueryResult(visiblePixels, true);
+	
+		unsigned int projectedPixels = 0;
+
+		if (relativeVisibility)
+		{
+			(*projQueryIt)->GetQueryResult(projectedPixels, true);
+		
+			++projQueryIt;
+		}
+
+		++visQueryIt;
+		
+		// node with visibilty 0 in queue (e.g., if node is intersected by near plane)
+		if (visiblePixels > 0)
+		{
+			visibleNodes->push_back(GtpVisibility::NodeInfo(*nodeIt, visiblePixels, 
+				projectedPixels));
+		}
+	}
+}
+//-----------------------------------------------------------------------
+void OcclusionQueriesQueryManager::CollectRelativeGeometryVisibilityForItemBuffer(
+									GtpVisibility::QueryList::iterator &projQueryIt,
+									GtpVisibility::GeometryVector *geometryList, 
+									GtpVisibility::MeshInfoContainer *visibleGeometry)
+{
+	GtpVisibility::GeometryVector::iterator geometryIt;
+
+	//-- queries for geometry
+	for (geometryIt = geometryList->begin(); geometryIt != geometryList->end(); ++ geometryIt)
+	{
+		unsigned int projectedPixels = 0;
+
+		(*projQueryIt)->GetQueryResult(projectedPixels, true);
+
+		++projQueryIt;
+		int id = (*geometryIt)->getSubEntity(0)->getId();
+
+		if ((id > 0) && (id < (int)visibleGeometry->size()))
+		{
+			(*visibleGeometry)[id].AddVisibility(0, projectedPixels);
+		}
+	}
+}
+//-----------------------------------------------------------------------
+void OcclusionQueriesQueryManager::CollectRelativePatchVisibilityForItemBuffer(
+									GtpVisibility::QueryList::iterator &projQueryIt,
+									GtpVisibility::PatchVector *patchList, 
+									GtpVisibility::PatchInfoContainer *visiblePatches)
+{
+	GtpVisibility::PatchVector::iterator patchIt;
+
+	//-- queries for geometry
+	for (patchIt = patchList->begin(); patchIt != patchList->end(); ++ patchIt)
+	{
+		unsigned int projectedPixels = 0;
+
+		(*projQueryIt)->GetQueryResult(projectedPixels, true);
+
+		++projQueryIt;
+		int id = (*patchIt)->getId();
+
+		if ((id > 0) && (id < (int)visiblePatches->size()))
+		{
+			(*visiblePatches)[id].AddVisibility(0, projectedPixels);
+		}
+	}
+}
+//-----------------------------------------------------------------------
+void  OcclusionQueriesQueryManager::CollectGeometryVisibility(
+							GtpVisibility::QueryList::iterator &visQueryIt, 
+							GtpVisibility::QueryList::iterator &projQueryIt,
+							GtpVisibility::GeometryVector *geometryList, 
+							GtpVisibility::MeshInfoContainer *visibleGeometry,
+							bool relativeVisibility)
+{
+	GtpVisibility::GeometryVector::iterator geometryIt;
+
+	//-- queries for geometry
+	for (geometryIt = geometryList->begin(); geometryIt != geometryList->end(); ++ geometryIt)
+	{
+		unsigned int visiblePixels = 0;
+		(*visQueryIt)->GetQueryResult(visiblePixels, true);
+		
+		unsigned int projectedPixels = 0;
+
+		if (relativeVisibility)
+		{
+			(*projQueryIt)->GetQueryResult(projectedPixels, true);
+			++ projQueryIt;
+		}
+
+		++ visQueryIt;
+
+		// WARNING: approximate depth ordering during rendering => 
+		// geometry maybe occluded
+		if (visiblePixels > 0)
+		{			 
+			visibleGeometry->push_back(GtpVisibility::MeshInfo(*geometryIt, visiblePixels, 
+				projectedPixels));
+		}
+	}
+}
+//-----------------------------------------------------------------------
+void  OcclusionQueriesQueryManager::CollectPatchVisibility(
+							GtpVisibility::QueryList::iterator &visQueryIt, 
+							GtpVisibility::QueryList::iterator &projQueryIt,
+							GtpVisibility::PatchVector *patchList, 
+							GtpVisibility::PatchInfoContainer *visiblePatches,
+							bool relativeVisibility)
+{
+	GtpVisibility::PatchVector::iterator patchIt;
+
+	//-- queries for patch
+	for (patchIt = patchList->begin(); patchIt != patchList->end(); ++ patchIt)
+	{
+		unsigned int visiblePixels = 0;
+		(*visQueryIt)->GetQueryResult(visiblePixels, true);
+		
+		unsigned int projectedPixels = 0;
+
+		if (relativeVisibility)
+		{
+			(*projQueryIt)->GetQueryResult(projectedPixels, true);
+			++ projQueryIt;
+		}
+
+		++ visQueryIt;
+
+		// WARNING: approximate depth ordering during rendering => 
+		// patch maybe occluded
+		if (visiblePixels > 0)
+		{			 
+			visiblePatches->push_back(GtpVisibility::PatchInfo(*patchIt, visiblePixels, 
+				projectedPixels));
+		}
+	}
+}
+//-----------------------------------------------------------------------
+void  OcclusionQueriesQueryManager::RemoveDuplicateNodes(
+					GtpVisibility::NodeInfoContainer *visibleNodes)
+{
+	stable_sort(visibleNodes->begin(), visibleNodes->end()/*, nodeinfo_lt*/);
+
+	GtpVisibility::NodeInfoContainer::iterator visibleNodesIt,
+		visibleNodesIt_end = visibleNodes->end();
+	
+	GtpVisibility::NodeInfo *nodeInfo = NULL;
+
+	for (visibleNodesIt = visibleNodes->begin(); visibleNodesIt != visibleNodesIt_end; 
+		++visibleNodesIt)
+	{
+		if (!nodeInfo || (nodeInfo->GetSource() != (*visibleNodesIt).GetSource()))
+		{
+			nodeInfo = &(*visibleNodesIt);
+		}
+		else // add visibility
+		{			
+			nodeInfo->AddVisibility(*visibleNodesIt);
+		}
+	}
+	
+	// physically delete duplicates
+	visibleNodes->erase(std::unique(visibleNodes->begin(), visibleNodes->end()),
+						visibleNodes->end());
+}
+//-----------------------------------------------------------------------
+void  OcclusionQueriesQueryManager::RemoveDuplicateGeometry(
+				GtpVisibility::MeshInfoContainer *visibleGeometry)
+{
+	stable_sort(visibleGeometry->begin(), visibleGeometry->end());
+	
+	GtpVisibility::MeshInfoContainer::iterator visibleGeomIt,
+			visibleGeomIt_end = visibleGeometry->end();
+
+	GtpVisibility::MeshInfo *geomInfo = NULL;
+
+	for (visibleGeomIt = visibleGeometry->begin(); visibleGeomIt != visibleGeomIt_end; 
+		++visibleGeomIt)
+	{
+		if (!geomInfo || (geomInfo->GetSource() != (*visibleGeomIt).GetSource()))
+		{
+			geomInfo = &(*visibleGeomIt);
+		}
+		else // info points to same mesh, just add visibility
+		{
+			geomInfo->AddVisibility(*visibleGeomIt);
+		}
+	}
+
+	// physically delete duplicates
+	visibleGeometry->erase(std::unique(visibleGeometry->begin(), visibleGeometry->end()), 
+						   visibleGeometry->end());
+}
+//-----------------------------------------------------------------------
+void  OcclusionQueriesQueryManager::RemoveDuplicatePatches(
+				GtpVisibility::PatchInfoContainer *visiblePatches)
+{
+	stable_sort(visiblePatches->begin(), visiblePatches->end());
+	
+	GtpVisibility::PatchInfoContainer::iterator visiblePatchIt,
+			visiblePatchIt_end = visiblePatches->end();
+
+	GtpVisibility::PatchInfo *patchInfo = NULL;
+
+	for (visiblePatchIt = visiblePatches->begin(); visiblePatchIt != visiblePatchIt_end; 
+		++visiblePatchIt)
+	{
+		if (!patchInfo || (patchInfo->GetSource() != (*visiblePatchIt).GetSource()))
+		{
+			patchInfo = &(*visiblePatchIt);
+		}
+		else // info points to same mesh, just add visibility
+		{
+			patchInfo->AddVisibility(*visiblePatchIt);
+		}
+	}
+
+	// physically delete duplicates
+	visiblePatches->erase(std::unique(visiblePatches->begin(), visiblePatches->end()), 
+						  visiblePatches->end());
+}
+//-----------------------------------------------------------------------
+void OcclusionQueriesQueryManager::GetNodePatchList(GtpVisibility::HierarchyNode *node,	
+					 			 					GtpVisibility::PatchVector *patchList)
+{
+	GtpVisibility::GeometryVector geomList;
+	mHierarchyInterface->GetNodeGeometryList(node, &geomList, false);
+
+	// geometry list iterator
+	GtpVisibility::GeometryVector::iterator geomIt, geomIt_end = geomList.end();
+
+	for (geomIt = geomList.begin(); geomIt != geomIt_end; ++geomIt)
+	{
+		for	(int i = 0; i < (int)(*geomIt)->getNumSubEntities(); ++i)
+		{
+			patchList->push_back((*geomIt)->getSubEntity(i));
+		}
+	}
+}
+
+} // namespace Ogre
Index: /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/misc/OgreVisibilitySceneManager.def
===================================================================
--- /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/misc/OgreVisibilitySceneManager.def	(revision 74)
+++ /GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/misc/OgreVisibilitySceneManager.def	(revision 74)
@@ -0,0 +1,4 @@
+LIBRARY Plugin_VisibilitySceneManager
+EXPORTS	
+	dllStartPlugin
+	dllStopPlugin
