## Public API Reference

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Related Pages

- File List
- File Members

# iengine/engine.h

Go to the documentation of this file.

    00001 /*
    00002     Crystal Space 3D Engine
    00003     Copyright (C) 1998-2002 by Jorrit Tyberghein
    00004
    00005     This library is free software; you can redistribute it and/or
    00006     modify it under the terms of the GNU Library General Public
    00007     License as published by the Free Software Foundation; either
    00008     version 2 of the License, or (at your option) any later version.
    00009
    00010     This library is distributed in the hope that it will be useful,
    00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00013     Library General Public License for more details.
    00014
    00015     You should have received a copy of the GNU Library General Public
    00016     License along with this library; if not, write to the Free
    00017     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    00018 */
    00019
    00020 #ifndef __CS_IENGINE_ENGINE_H__
    00021 #define __CS_IENGINE_ENGINE_H__
    00022
    00031 #include "csutil/scf_interface.h"
    00032
    00033 #include "csgeom/vector3.h"
    00034
    00035 #include "iengine/light.h"
    00036
    00037 class csBox3;
    00038 class csColor;
    00039 class csFrustum;
    00040
    00041 struct iCacheManager;
    00042 struct iCamera;
    00043 struct iCameraPosition;
    00044 struct iCameraPositionList;
    00045 struct iClipper2D;
    00046 struct iCollection;
    00047 struct iCollectionList;
    00048 struct iDataBuffer;
    00049 struct iFrustumView;
    00050 struct iLight;
    00051 struct iLightIterator;
    00052 struct iLoaderContext;
    00053 struct iMaterial;
    00054 struct iMaterialList;
    00055 struct iMaterialWrapper;
    00056 struct iMeshFactoryList;
    00057 struct iMeshFactoryWrapper;
    00058 struct iMeshList;
    00059 struct iMeshObject;
    00060 struct iMeshObjectFactory;
    00061 struct iMeshObjectType;
    00062 struct iMeshWrapper;
    00063 struct iMeshWrapperIterator;
    00064 struct iObject;
    00065 struct iObjectIterator;
    00066 struct iObjectWatcher;
    00067 struct iPortal;
    00068 struct iProgressMeter;
    00069 struct iRegion;
    00070 struct iRegionList;
    00071 struct iRenderLoop;
    00072 struct iRenderLoopManager;
    00073 struct iRenderView;
    00074 struct iSector;
    00075 struct iSectorIterator;
    00076 struct iSectorList;
    00077 struct iSharedVariableList;
    00078 struct iTextureHandle;
    00079 struct iTextureList;
    00080 struct iTextureWrapper;
    00081
    00082 struct iEngine;
    00083
    00089 #define CS_ENGINE_CACHE_READ 1
    00090
    00094 #define CS_ENGINE_CACHE_WRITE 2
    00095
    00099 #define CS_ENGINE_CACHE_NOUPDATE 4
    00100
    00104 enum csRenderPrioritySorting
    00105 {
    00109   CS_RENDPRI_SORT_NONE = 0,
    00110
    00114   CS_RENDPRI_SORT_BACK2FRONT = 1,
    00115
    00119   CS_RENDPRI_SORT_FRONT2BACK = 2
    00120 };
    00128 struct iEngineFrameCallback : public virtual iBase
    00129 {
    00130   SCF_INTERFACE(iEngineFrameCallback,1,0,0);
    00134   virtual void StartFrame (iEngine* engine, iRenderView* rview) = 0;
    00135 };
    00136
    00141 struct iEngineSectorCallback : public virtual iBase
    00142 {
    00143   SCF_INTERFACE(iEngineSectorCallback,2,0,0);
    00147   virtual void NewSector (iEngine* engine, iSector* sector) = 0;
    00148
    00152   virtual void RemoveSector (iEngine* engine, iSector* sector) = 0;
    00153 };
    00154
    00155
    00170 struct iEngine : public virtual iBase
    00171 {
    00172   SCF_INTERFACE(iEngine,2,0,0);
    00173
    00175   virtual iObject *QueryObject() = 0;
    00176
    00195   virtual bool Prepare (iProgressMeter* meter = 0) = 0;
    00196
    00204   virtual void PrepareTextures () = 0;
    00205
    00211   virtual void PrepareMeshes () = 0;
    00212
    00228   virtual void ForceRelight (iRegion* region = 0,
    00229         iProgressMeter* meter = 0) = 0;
    00230
    00243   virtual void ForceRelight (iLight* light, iRegion* region = 0) = 0;
    00244
    00255   virtual void ShineLights (iRegion* region = 0,
    00256         iProgressMeter* meter = 0) = 0;
    00257
    00270   virtual void SetLightingCacheMode (int mode) = 0;
    00271
    00273   virtual int GetLightingCacheMode () = 0;
    00274
    00287   virtual void SetCacheManager (iCacheManager* cache_mgr) = 0;
    00288
    00295   virtual void SetVFSCacheManager (const char* vfspath = 0) = 0;
    00296
    00300   virtual iCacheManager* GetCacheManager () = 0;
    00301
    00308   virtual void SetMaxLightmapSize (int w, int h) = 0;
    00309
    00314   virtual void GetMaxLightmapSize (int& w, int& h) = 0;
    00315
    00320   virtual void GetDefaultMaxLightmapSize (int& w, int& h) = 0;
    00321
    00323   virtual int GetMaxLightmapAspectRatio () const = 0;
    00324
    00351   virtual void RegisterRenderPriority (const char* name, long priority,
    00352         csRenderPrioritySorting rendsort = CS_RENDPRI_SORT_NONE) = 0;
    00353
    00361   virtual long GetRenderPriority (const char* name) const = 0;
    00363   virtual csRenderPrioritySorting GetRenderPrioritySorting (
    00364         const char* name) const = 0;
    00366   virtual csRenderPrioritySorting GetRenderPrioritySorting (
    00367         long priority) const = 0;
    00369   virtual long GetSkyRenderPriority () = 0;
    00371   virtual long GetPortalRenderPriority () = 0;
    00373   virtual long GetWallRenderPriority () = 0;
    00375   virtual long GetObjectRenderPriority () = 0;
    00377   virtual long GetAlphaRenderPriority () = 0;
    00379   virtual void ClearRenderPriorities () = 0;
    00381   virtual int GetRenderPriorityCount () const = 0;
    00383   virtual const char* GetRenderPriorityName (long priority) const = 0;
    00384
    00399   virtual csPtr<iMaterial> CreateBaseMaterial (iTextureWrapper* txt) = 0;
    00400
    00406   virtual iMaterialWrapper* CreateMaterial (const char *name,
    00407         iTextureWrapper* texture) = 0;
    00408
    00410   virtual iMaterialList* GetMaterialList () const = 0;
    00411
    00424   virtual iMaterialWrapper* FindMaterial (const char* name,
    00425         iRegion* region = 0) = 0;
    00426
    00448   virtual iTextureWrapper* CreateTexture (const char *name,
    00449         const char *fileName, csColor *transp, int flags) = 0;
    00450
    00461   virtual iTextureWrapper* CreateBlackTexture (const char *name,
    00462         int w, int h, csColor *transp, int flags) = 0;
    00463
    00468   virtual int GetTextureFormat () const = 0;
    00469
    00471   virtual iTextureList* GetTextureList () const = 0;
    00472
    00485   virtual iTextureWrapper* FindTexture (const char* name,
    00486         iRegion* region = 0) = 0;
    00487
    00514   virtual csPtr<iLight> CreateLight (const char* name, const csVector3& pos,
    00515         float radius, const csColor& color,
    00516         csLightDynamicType dyntype = CS_LIGHT_DYNAMICTYPE_STATIC) = 0;
    00517
    00522   virtual iLight* FindLight (const char *Name, bool RegionOnly = false)
    00523     const = 0;
    00524
    00529   virtual iLight* FindLightID (const char* light_id) const = 0;
    00530
    00537   virtual csPtr<iLightIterator> GetLightIterator (iRegion* region = 0) = 0;
    00538
    00549   virtual void RemoveLight (iLight* light) = 0;
    00550
    00555   virtual void SetAmbientLight (const csColor &) = 0;
    00557   virtual void GetAmbientLight (csColor &) const = 0;
    00559   virtual void GetDefaultAmbientLight (csColor &c) const = 0;
    00560
    00572   virtual int GetNearbyLights (iSector* sector, const csVector3& pos,
    00573         iLight** lights, int max_num_lights) = 0;
    00574
    00586   virtual int GetNearbyLights (iSector* sector, const csBox3& box,
    00587         iLight** lights, int max_num_lights) = 0;
    00588
    00598   virtual iSector *CreateSector (const char *name) = 0;
    00599
    00601   virtual iSectorList* GetSectors () = 0;
    00602
    00615   virtual iSector* FindSector (const char* name,
    00616         iRegion* region = 0) = 0;
    00617
    00623   virtual csPtr<iSectorIterator> GetNearbySectors (iSector* sector,
    00624         const csVector3& pos, float radius) = 0;
    00625
    00630   virtual void AddEngineFrameCallback (iEngineFrameCallback* cb) = 0;
    00631
    00635   virtual void RemoveEngineFrameCallback (iEngineFrameCallback* cb) = 0;
    00636
    00641   virtual void AddEngineSectorCallback (iEngineSectorCallback* cb) = 0;
    00642
    00646   virtual void RemoveEngineSectorCallback (iEngineSectorCallback* cb) = 0;
    00647
    00666   virtual csPtr<iMeshWrapper> CreateMeshWrapper (iMeshFactoryWrapper* factory,
    00667         const char* name, iSector* sector = 0,
    00668         const csVector3& pos = csVector3 (0, 0, 0)) = 0;
    00669
    00682   virtual csPtr<iMeshWrapper> CreateMeshWrapper (iMeshObject* meshobj,
    00683         const char* name, iSector* sector = 0,
    00684         const csVector3& pos = csVector3 (0, 0, 0)) = 0;
    00685
    00705   virtual csPtr<iMeshWrapper> CreateMeshWrapper (const char* classid,
    00706         const char* name, iSector* sector = 0,
    00707         const csVector3& pos = csVector3 (0, 0, 0)) = 0;
    00708
    00713   virtual csPtr<iMeshWrapper> CreateMeshWrapper (const char* name) = 0;
    00714
    00725   virtual csPtr<iMeshWrapper> CreateSectorWallsMesh (iSector* sector,
    00726       const char* name) = 0;
    00727
    00737   virtual csPtr<iMeshWrapper> CreateThingMesh (iSector* sector,
    00738         const char* name) = 0;
    00739
    00754   virtual csPtr<iMeshWrapper> LoadMeshWrapper (
    00755         const char* name, const char* loaderClassId,
    00756         iDataBuffer* input, iSector* sector, const csVector3& pos) = 0;
    00757
    00762   virtual void AddMeshAndChildren (iMeshWrapper* mesh) = 0;
    00763
    00770   virtual csPtr<iMeshWrapperIterator> GetNearbyMeshes (iSector* sector,
    00771     const csVector3& pos, float radius, bool crossPortals = true ) = 0;
    00772
    00780   virtual csPtr<iMeshWrapperIterator> GetNearbyMeshes (iSector* sector,
    00781     const csBox3& box, bool crossPortals = true ) = 0;
    00782
    00784   virtual iMeshList* GetMeshes () = 0;
    00785
    00798   virtual iMeshWrapper* FindMeshObject (const char* name,
    00799         iRegion* region = 0) = 0;
    00800
    00807   virtual void WantToDie (iMeshWrapper* mesh) = 0;
    00808
    00827   virtual csPtr<iMeshFactoryWrapper> CreateMeshFactory (const char* classId,
    00828         const char* name) = 0;
    00829
    00837   virtual csPtr<iMeshFactoryWrapper> CreateMeshFactory (
    00838         iMeshObjectFactory * factory, const char* name) = 0;
    00839
    00845   virtual csPtr<iMeshFactoryWrapper> CreateMeshFactory (const char* name) = 0;
    00846
    00854   virtual csPtr<iMeshFactoryWrapper> LoadMeshFactory (
    00855         const char* name, const char* loaderClassId,
    00856         iDataBuffer* input) = 0;
    00857
    00870   virtual iMeshFactoryWrapper* FindMeshFactory (const char* name,
    00871         iRegion* region = 0) = 0;
    00872
    00874   virtual iMeshFactoryList* GetMeshFactories () = 0;
    00875
    00887   virtual iRegion* CreateRegion (const char* name) = 0;
    00889   virtual iRegionList* GetRegions () = 0;
    00890
    00900   virtual csPtr<iCamera> CreateCamera () = 0;
    00901
    00914   virtual iCameraPosition* FindCameraPosition (const char* name,
    00915         iRegion* region = 0) = 0;
    00916
    00918   virtual iCameraPositionList* GetCameraPositions () = 0;
    00919
    00944   virtual csPtr<iMeshWrapper> CreatePortal (
    00945         const char* name,
    00946         iMeshWrapper* parentMesh, iSector* destSector,
    00947         csVector3* vertices, int num_vertices,
    00948         iPortal*& portal) = 0;
    00949
    00969   virtual csPtr<iMeshWrapper> CreatePortal (
    00970         const char* name,
    00971         iSector* sourceSector, const csVector3& pos,
    00972         iSector* destSector,
    00973         csVector3* vertices, int num_vertices,
    00974         iPortal*& portal) = 0;
    00975
    00989   virtual csPtr<iMeshWrapper> CreatePortalContainer (const char* name,
    00990         iSector* sector = 0, const csVector3& pos = csVector3 (0, 0, 0)) = 0;
    00991
    01009   virtual void SetClearZBuf (bool yesno) = 0;
    01010
    01014   virtual bool GetClearZBuf () const = 0;
    01015
    01017   virtual bool GetDefaultClearZBuf () const = 0;
    01018
    01031   virtual void SetClearScreen (bool yesno) = 0;
    01032
    01036   virtual bool GetClearScreen () const = 0;
    01037
    01039   virtual bool GetDefaultClearScreen () const = 0;
    01040
    01047   virtual int GetBeginDrawFlags () const = 0;
    01048
    01052   virtual iRenderView* GetTopLevelClipper () const = 0;
    01053
    01062   virtual void PrecacheDraw (iRegion* region = 0) = 0;
    01063
    01071   virtual void Draw (iCamera* c, iClipper2D* clipper) = 0;
    01072
    01078   virtual void SetContext (iTextureHandle* ctxt) = 0;
    01080   virtual iTextureHandle *GetContext () const = 0;
    01081
    01085   virtual iRenderLoopManager* GetRenderLoopManager () = 0;
    01086
    01099   virtual iRenderLoop* GetCurrentDefaultRenderloop () = 0;
    01100
    01107   virtual bool SetCurrentDefaultRenderloop (iRenderLoop* loop) = 0;
    01108
    01112   virtual uint GetCurrentFrameNumber () const = 0;
    01113
    01128   virtual void SetSaveableFlag (bool enable) = 0;
    01129
    01133   virtual bool GetSaveableFlag () = 0;
    01134
    01143   virtual csPtr<iLoaderContext> CreateLoaderContext (
    01144         iRegion* region = 0, bool curRegOnly = true) = 0;
    01145
    01163   virtual csPtr<iObjectIterator> GetNearbyObjects (iSector* sector,
    01164     const csVector3& pos, float radius, bool crossPortals = true ) = 0;
    01165
    01166
    01167
    01177   virtual csPtr<iObjectIterator> GetVisibleObjects (iSector* sector,
    01178     const csVector3& pos) = 0;
    01179
    01186   virtual csPtr<iMeshWrapperIterator> GetVisibleMeshes (iSector* sector,
    01187     const csVector3& pos) = 0;
    01188
    01198   virtual csPtr<iObjectIterator> GetVisibleObjects (iSector* sector,
    01199     const csFrustum& frustum) = 0;
    01200
    01207   virtual csPtr<iMeshWrapperIterator> GetVisibleMeshes (iSector* sector,
    01208     const csFrustum& frustum) = 0;
    01209
    01216   virtual csPtr<iFrustumView> CreateFrustumView () = 0;
    01217
    01222   virtual csPtr<iObjectWatcher> CreateObjectWatcher () = 0;
    01223
    01225   virtual iSharedVariableList* GetVariableList () const = 0;
    01226
    01228   virtual iCollectionList* GetCollections () = 0;
    01229
    01242   virtual iCollection* FindCollection (const char* name,
    01243         iRegion* region = 0) = 0;
    01244
    01260   virtual bool RemoveObject (iBase* object) = 0;
    01261
    01263   virtual void DeleteAll () = 0;
    01264
    01272   virtual void ResetWorldSpecificSettings() = 0;
    01273
    01275 };
    01276
    01279 #endif // __CS_IENGINE_ENGINE_H__