home *** CD-ROM | disk | FTP | other *** search
- //**********************************************************************
- // DIVE Laboratories, Inc.
- // Copyright(c) 1995
- // All rights reserved.
- // FILE: AMBER.HPP
- //
- // DESCRIPTION
- // This file provides the function prototypes for the amberClass
- //
- // Author: M. Doucet
- //
- // Modification History:
- // 4/28/95 Created
- //
- //**********************************************************************
- #ifndef _AMBER_HPP
- #define _AMBER_HPP
-
- #include "messages.hpp"
- #include "vrtypes.hpp"
- #include "position.hpp"
- #include "quat.hpp"
- #include "vector.hpp"
- #include "vertex.hpp"
- #include "line.hpp"
- #include "triangle.hpp"
- #include "polygon.hpp"
- #include "geometry.hpp"
- #include "slink.hpp"
- #include "univ.hpp"
- #include "channel.hpp"
- #include "sim.hpp"
-
- #define MAX_VERTS 60000
- #define MAX_POLYS 20000
- #define MAX_GEOS 2000
- #define MAX_CHANS 25
- #define MAX_UNIVS 20
-
- class amberPrivateClass;
-
- class amberClass {
-
- friend class geometryClass;
- friend class geometryPrivateClass;
- friend class universeClass;
- friend class vertexClass;
- friend class polygonClass;
- friend class channelClass;
- friend class materialClass;
- friend class textureClass;
-
- private:
-
- amberPrivateClass *data;
-
- public:
- #ifdef AMBER_3DR
- void *currentGC;
- unsigned long currentRC;
- #endif
-
- int getUnusedDisplayListIndex();
-
- int addVertex(vertexClass *in);
- int addPolygon(polygonClass *in);
- int addGeometry(geometryClass *in);
- void addGeoToAll(geometryClass *in);
- int addChannel(channelClass *in);
- int addUniverse(universeClass *in);
-
- int getNextVertexIndex();
- int getNextPolygonIndex();
- int getNextGeometryIndex();
- int getNextChannelIndex();
- int getNextUniverseIndex();
-
- // These routines get the objects stored in amber arrays
- //
- vertexClass *getVertex(int index);
- polygonClass *getPolygon(int index);
- geometryClass *getGeometry(int index);
- channelClass *getChannel(int index);
- universeClass *getUniverse(int index);
-
- // These routines determine the universe we are using
- //
- universeClass *getCurrentUniverse();
- int getCurrentUniverseIndex();
- void setCurrentUniverse(int index);
-
- // Texuture Management
- textureClass *amberClass::findTexture(char *name);
-
- // Material Management
- materialClass *amberClass::findMaterial(char *name);
-
- // Memory Management
- //
- void deleteAllTextures(); // Deletes all textures
- void deleteAllMaterials(); // Deletes all materials
- void deleteAllGeos(); // Deletes all loaded geometries, polygons, and vertices
- void deleteAllChannels(); // Deletes all channels
- void deleteAllUniverses(); // Deletes all universes
-
- #ifdef INDIGO2
- void *getAppContext();
- #endif
-
- // This routine is used by the amber thread
- //
- #ifndef AMBERRT
- void setRenderChannel(channelClass *channel);
- channelClass *getCurrentChannel();
- #endif
- void executeThread();
-
- #ifdef SHAREWARE
- amberClass();
- #else
- amberClass(int maxVertice =MAX_VERTS,
- int maxPolygon =MAX_POLYS,
- int maxGeometry=MAX_GEOS,
- int maxChannel =MAX_CHANS,
- int maxUniverse=MAX_UNIVS);
- #endif
- ~amberClass();
-
- };
-
- extern amberClass *getDLLamber();
-
- #endif
-
- #ifdef _AMBER_OBJ
- amberClass *amber=(amberClass *)NULL;
- #else
- extern amberClass *amber;
- #endif
-
-