iengine/engine.h Source File (Crystal Space 2.0 Public API Reference)

| ## Public API Reference

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

- 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/collection.h"
    00036 #include "iengine/light.h"
    00037 #include "iutil/threadmanager.h"
    00038 #include "ivideo/rendermesh.h"
    00039
    00040 class csBox3;
    00041 class csColor;
    00042 class csFrustum;
    00043
    00044 struct iCacheManager;
    00045 struct iCamera;
    00046 struct iCameraPosition;
    00047 struct iCameraPositionList;
    00048 struct iClipper2D;
    00049 struct iCustomMatrixCamera;
    00050 struct iDataBuffer;
    00051 struct iLight;
    00052 struct iLightIterator;
    00053 struct iLoaderContext;
    00054 struct iMaterial;
    00055 struct iMaterialList;
    00056 struct iMaterialWrapper;
    00057 struct iMeshFactoryList;
    00058 struct iMeshFactoryWrapper;
    00059 struct iMeshList;
    00060 struct iMeshObject;
    00061 struct iMeshObjectFactory;
    00062 struct iMeshObjectType;
    00063 struct iMeshWrapper;
    00064 struct iMeshWrapperIterator;
    00065 struct iObject;
    00066 struct iObjectIterator;
    00067 struct iObjectWatcher;
    00068 struct iPerspectiveCamera;
    00069 struct iPortal;
    00070 struct iProgressMeter;
    00071 struct iRenderLoop;
    00072 struct iRenderLoopManager;
    00073 struct iRenderManager;
    00074 struct iRenderView;
    00075 struct iSector;
    00076 struct iSectorIterator;
    00077 struct iSectorList;
    00078 struct iSharedVariableList;
    00079 struct iTextureHandle;
    00080 struct iTextureList;
    00081 struct iTextureWrapper;
    00082 struct iThreadedLoader;
    00083
    00084 struct iEngine;
    00085
    00088 enum csRenderPrioritySorting
    00089 {
    00093   CS_RENDPRI_SORT_NONE = 0,
    00094
    00098   CS_RENDPRI_SORT_BACK2FRONT = 1,
    00099
    00103   CS_RENDPRI_SORT_FRONT2BACK = 2
    00104 };
    00107 namespace CS
    00108 {
    00110   enum RenderPriorityGrouping
    00111   {
    00118     rpgByLayer = 0,
    00125     rpgByMesh = 1
    00126   };
    00127 } // namespace CS
    00128
    00136 struct iEngineFrameCallback : public virtual iBase
    00137 {
    00138   SCF_INTERFACE(iEngineFrameCallback,1,0,0);
    00142   virtual void StartFrame (iEngine* engine, iRenderView* rview) = 0;
    00143 };
    00144
    00152 struct iEngineSectorCallback : public virtual iBase
    00153 {
    00154   SCF_INTERFACE(iEngineSectorCallback,2,0,0);
    00158   virtual void NewSector (iEngine* engine, iSector* sector) = 0;
    00159
    00163   virtual void RemoveSector (iEngine* engine, iSector* sector) = 0;
    00164 };
    00165
    00166
    00181 struct iEngine : public virtual iBase
    00182 {
    00183   SCF_INTERFACE(iEngine, 8, 0, 1);
    00184
    00186   virtual iObject *QueryObject() = 0;
    00187
    00208   virtual bool Prepare (iProgressMeter* meter = 0) = 0;
    00209
    00217   virtual void PrepareTextures () = 0;
    00218
    00224   virtual void PrepareMeshes () = 0;
    00225
    00238   virtual void SetCacheManager (iCacheManager* cache_mgr) = 0;
    00239
    00246   virtual void SetVFSCacheManager (const char* vfspath = 0) = 0;
    00247
    00251   virtual iCacheManager* GetCacheManager () = 0;
    00252
    00296   virtual void RegisterRenderPriority (const char* name, uint priority,
    00297         csRenderPrioritySorting rendsort = CS_RENDPRI_SORT_NONE,
    00298         CS::RenderPriorityGrouping grouping = CS::rpgByLayer) = 0;
    00303   virtual void RegisterDefaultRenderPriorities () = 0;
    00304
    00311   virtual CS::Graphics::RenderPriority GetRenderPriority (const char* name) const = 0;
    00313   virtual csRenderPrioritySorting GetRenderPrioritySorting (
    00314         const char* name) const = 0;
    00316   virtual csRenderPrioritySorting GetRenderPrioritySorting (
    00317         CS::Graphics::RenderPriority priority) const = 0;
    00319
    00320   virtual CS::RenderPriorityGrouping GetRenderPriorityGrouping (
    00321         const char* name) const = 0;
    00322   virtual CS::RenderPriorityGrouping GetRenderPriorityGrouping (
    00323         CS::Graphics::RenderPriority priority) const = 0;
    00325
    00326   virtual CS::Graphics::RenderPriority GetSkyRenderPriority () = 0;
    00328   virtual CS::Graphics::RenderPriority GetPortalRenderPriority () = 0;
    00330   virtual CS::Graphics::RenderPriority GetWallRenderPriority () = 0;
    00332   virtual CS::Graphics::RenderPriority GetObjectRenderPriority () = 0;
    00334   virtual CS::Graphics::RenderPriority GetAlphaRenderPriority () = 0;
    00336   virtual void ClearRenderPriorities () = 0;
    00338   virtual size_t GetRenderPriorityCount () const = 0;
    00340   virtual const char* GetRenderPriorityName (CS::Graphics::RenderPriority priority) const = 0;
    00341
    00356   virtual csPtr<iMaterial> CreateBaseMaterial (iTextureWrapper* txt) = 0;
    00357
    00363   virtual iMaterialWrapper* CreateMaterial (const char *name,
    00364         iTextureWrapper* texture) = 0;
    00365
    00367   virtual iMaterialList* GetMaterialList () const = 0;
    00368
    00382   virtual iMaterialWrapper* FindMaterial (const char* name,
    00383         iCollection* collection = 0) = 0;
    00384
    00406   virtual iTextureWrapper* CreateTexture (const char *name,
    00407         const char *fileName, csColor *transp, int flags) = 0;
    00408
    00419   virtual iTextureWrapper* CreateBlackTexture (const char *name,
    00420         int w, int h, csColor *transp, int flags) = 0;
    00421
    00426   virtual int GetTextureFormat () const = 0;
    00427
    00429   virtual iTextureList* GetTextureList () const = 0;
    00430
    00443   virtual iTextureWrapper* FindTexture (const char* name,
    00444         iCollection* collection = 0) = 0;
    00445
    00472   virtual csPtr<iLight> CreateLight (const char* name, const csVector3& pos,
    00473         float radius, const csColor& color,
    00474         csLightDynamicType dyntype = CS_LIGHT_DYNAMICTYPE_STATIC) = 0;
    00475
    00480   virtual iLight* FindLight (const char *Name, bool RegionOnly = false)
    00481     const = 0;
    00482
    00487   virtual iLight* FindLightID (const char* light_id) const = 0;
    00488
    00495   virtual csPtr<iLightIterator> GetLightIterator (iCollection* collection = 0) = 0;
    00496
    00507   virtual void RemoveLight (iLight* light) = 0;
    00508
    00513   virtual void SetAmbientLight (const csColor &) = 0;
    00515   virtual void GetAmbientLight (csColor &) const = 0;
    00517   virtual void GetDefaultAmbientLight (csColor &c) const = 0;
    00518
    00530   virtual int GetNearbyLights (iSector* sector, const csVector3& pos,
    00531         iLight** lights, int max_num_lights) = 0;
    00532
    00544   virtual int GetNearbyLights (iSector* sector, const csBox3& box,
    00545         iLight** lights, int max_num_lights) = 0;
    00546
    00556   virtual iSector *CreateSector (const char *name, bool addToList = true) = 0;
    00557
    00559   virtual iSectorList* GetSectors () = 0;
    00560
    00573   virtual iSector* FindSector (const char* name,
    00574         iCollection* collection = 0) = 0;
    00575
    00584   virtual csPtr<iSectorIterator> GetNearbySectors (iSector* sector,
    00585         const csVector3& pos, float radius) = 0;
    00586
    00595   virtual csPtr<iSectorIterator> GetNearbySectors (iSector* sector,
    00596         const csBox3& box) = 0;
    00597
    00602   virtual void AddEngineFrameCallback (iEngineFrameCallback* cb) = 0;
    00603
    00607   virtual void RemoveEngineFrameCallback (iEngineFrameCallback* cb) = 0;
    00608
    00613   virtual void AddEngineSectorCallback (iEngineSectorCallback* cb) = 0;
    00614
    00618   virtual void RemoveEngineSectorCallback (iEngineSectorCallback* cb) = 0;
    00619
    00638   virtual csPtr<iMeshWrapper> CreateMeshWrapper (iMeshFactoryWrapper* factory,
    00639         const char* name, iSector* sector = 0, const csVector3& pos = csVector3 (0, 0, 0),
    00640     bool addToList = true) = 0;
    00641
    00654   virtual csPtr<iMeshWrapper> CreateMeshWrapper (iMeshObject* meshobj,
    00655         const char* name, iSector* sector = 0, const csVector3& pos = csVector3 (0, 0, 0),
    00656     bool addToList = true) = 0;
    00657
    00676   virtual csPtr<iMeshWrapper> CreateMeshWrapper (const char* classid,
    00677         const char* name, iSector* sector = 0, const csVector3& pos = csVector3 (0, 0, 0),
    00678     bool addToList = true) = 0;
    00679
    00684   virtual csPtr<iMeshWrapper> CreateMeshWrapper (const char* name, bool addToList = true) = 0;
    00685
    00700   virtual csPtr<iMeshWrapper> LoadMeshWrapper (
    00701         const char* name, const char* loaderClassId,
    00702         iDataBuffer* input, iSector* sector, const csVector3& pos) = 0;
    00703
    00708   THREADED_INTERFACE1(AddMeshAndChildren, iMeshWrapper* mesh);
    00709
    00716   virtual csPtr<iMeshWrapperIterator> GetNearbyMeshes (iSector* sector,
    00717     const csVector3& pos, float radius, bool crossPortals = true) = 0;
    00718
    00726   virtual csPtr<iMeshWrapperIterator> GetNearbyMeshes (iSector* sector,
    00727     const csBox3& box, bool crossPortals = true) = 0;
    00728
    00736   virtual csPtr<iMeshWrapperIterator> GetNearbyMeshes (iSector* sector,
    00737     const csVector3& start, const csVector3& end,
    00738     bool crossPortals = true) = 0;
    00739
    00741   virtual iMeshList* GetMeshes () = 0;
    00742
    00755   virtual iMeshWrapper* FindMeshObject (const char* name,
    00756         iCollection* collection = 0) = 0;
    00757
    00764   virtual void WantToDie (iMeshWrapper* mesh) = 0;
    00765
    00784   virtual csPtr<iMeshFactoryWrapper> CreateMeshFactory (const char* classId,
    00785         const char* name, bool addToList = true) = 0;
    00786
    00794   virtual csPtr<iMeshFactoryWrapper> CreateMeshFactory (
    00795         iMeshObjectFactory * factory, const char* name,
    00796     bool addToList = true) = 0;
    00797
    00803   virtual csPtr<iMeshFactoryWrapper> CreateMeshFactory (const char* name,
    00804     bool addToList = true) = 0;
    00805
    00813   virtual csPtr<iMeshFactoryWrapper> LoadMeshFactory (
    00814         const char* name, const char* loaderClassId,
    00815         iDataBuffer* input, bool addToList = true) = 0;
    00816
    00829   virtual iMeshFactoryWrapper* FindMeshFactory (const char* name,
    00830         iCollection* collection = 0) = 0;
    00831
    00833   virtual iMeshFactoryList* GetMeshFactories () = 0;
    00834
    00843   virtual iCollection* CreateCollection (const char* name) = 0;
    00844
    00848   virtual iCollection* GetCollection (const char* name) const = 0;
    00849
    00853   virtual csPtr<iCollectionArray> GetCollections () = 0;
    00854
    00858   virtual void RemoveCollection (iCollection* collect) = 0;
    00859
    00863   virtual void RemoveCollection (const char* name) = 0;
    00864
    00868   virtual void RemoveAllCollections () = 0;
    00869
    00879   CS_DEPRECATED_METHOD_MSG("Use CreatePerspectiveCamera instead")
    00880   virtual csPtr<iCamera> CreateCamera () = 0;
    00881
    00894   virtual iCameraPosition* FindCameraPosition (const char* name,
    00895         iCollection* collection = 0) = 0;
    00896
    00898   virtual iCameraPositionList* GetCameraPositions () = 0;
    00899
    00924   virtual csPtr<iMeshWrapper> CreatePortal (
    00925         const char* name,
    00926         iMeshWrapper* parentMesh, iSector* destSector,
    00927         csVector3* vertices, int num_vertices,
    00928         iPortal*& portal) = 0;
    00929
    00949   virtual csPtr<iMeshWrapper> CreatePortal (
    00950         const char* name,
    00951         iSector* sourceSector, const csVector3& pos,
    00952         iSector* destSector,
    00953         csVector3* vertices, int num_vertices,
    00954         iPortal*& portal) = 0;
    00955
    00969   virtual csPtr<iMeshWrapper> CreatePortalContainer (const char* name,
    00970         iSector* sector = 0, const csVector3& pos = csVector3 (0, 0, 0)) = 0;
    00971
    00989   CS_DEPRECATED_METHOD_MSG("Z buffer clearing handled by the rendermanager.")
    00990   virtual void SetClearZBuf (bool yesno) = 0;
    00991
    00995   CS_DEPRECATED_METHOD_MSG("Z buffer clearing handled by the rendermanager.")
    00996   virtual bool GetClearZBuf () const = 0;
    00997
    00999   CS_DEPRECATED_METHOD_MSG("Z buffer clearing handled by the rendermanager.")
    01000   virtual bool GetDefaultClearZBuf () const = 0;
    01001
    01014   CS_DEPRECATED_METHOD_MSG("Screen clearing handled by the rendermanager.")
    01015   virtual void SetClearScreen (bool yesno) = 0;
    01016
    01020   CS_DEPRECATED_METHOD_MSG("Screen clearing handled by the rendermanager.")
    01021   virtual bool GetClearScreen () const = 0;
    01022
    01024   CS_DEPRECATED_METHOD_MSG("Screen clearing handled by the rendermanager.")
    01025   virtual bool GetDefaultClearScreen () const = 0;
    01026
    01033   CS_DEPRECATED_METHOD_MSG("Screen and Z buffer clearing handled by the rendermanager.")
    01034   virtual int GetBeginDrawFlags () const = 0;
    01035
    01039   virtual iRenderView* GetTopLevelClipper () const = 0;
    01040
    01044   virtual void PrecacheMesh (iMeshWrapper* s) = 0;
    01045
    01054   virtual void PrecacheDraw (iCollection* collection = 0) = 0;
    01055
    01067   virtual void Draw (iCamera* c, iClipper2D* clipper,
    01068       iMeshWrapper* mesh = 0) = 0;
    01069
    01075   virtual void SetContext (iTextureHandle* ctxt) = 0;
    01077   virtual iTextureHandle *GetContext () const = 0;
    01078
    01082   virtual iRenderLoopManager* GetRenderLoopManager () = 0;
    01083
    01096   virtual iRenderLoop* GetCurrentDefaultRenderloop () = 0;
    01097
    01104   virtual bool SetCurrentDefaultRenderloop (iRenderLoop* loop) = 0;
    01105
    01109   virtual uint GetCurrentFrameNumber () const = 0;
    01110
    01114   virtual void UpdateNewFrame () = 0;
    01123   virtual void EnableAdaptiveLODs(bool enable, float target_fps) = 0;
    01124
    01128   virtual void UpdateAdaptiveLODs() = 0;
    01129
    01133   virtual float GetAdaptiveLODsMultiplier() const = 0;
    01148   virtual void SetSaveableFlag (bool enable) = 0;
    01149
    01153   virtual bool GetSaveableFlag () = 0;
    01154
    01163   virtual csPtr<iLoaderContext> CreateLoaderContext (
    01164         iCollection* collection = 0, bool searchCollectionOnly = true) = 0;
    01165
    01169   virtual void SetDefaultKeepImage (bool enable) = 0;
    01170
    01175   virtual bool GetDefaultKeepImage () = 0;
    01176
    01194   virtual csPtr<iObjectIterator> GetNearbyObjects (iSector* sector,
    01195     const csVector3& pos, float radius, bool crossPortals = true ) = 0;
    01196
    01197
    01198
    01208   virtual csPtr<iObjectIterator> GetVisibleObjects (iSector* sector,
    01209     const csVector3& pos) = 0;
    01210
    01217   virtual csPtr<iMeshWrapperIterator> GetVisibleMeshes (iSector* sector,
    01218     const csVector3& pos) = 0;
    01219
    01229   virtual csPtr<iObjectIterator> GetVisibleObjects (iSector* sector,
    01230     const csFrustum& frustum) = 0;
    01231
    01238   virtual csPtr<iMeshWrapperIterator> GetVisibleMeshes (iSector* sector,
    01239     const csFrustum& frustum) = 0;
    01240
    01245   virtual csPtr<iObjectWatcher> CreateObjectWatcher () = 0;
    01246
    01248   virtual iSharedVariableList* GetVariableList () const = 0;
    01249
    01265   virtual bool RemoveObject (iBase* object) = 0;
    01266
    01275   virtual void DelayedRemoveObject (csTicks delay, iBase* object) = 0;
    01276
    01282   virtual void RemoveDelayedRemoves (bool remove = false) = 0;
    01283
    01285   THREADED_INTERFACE(DeleteAll);
    01286
    01294   virtual void ResetWorldSpecificSettings() = 0;
    01295
    01298
    01299   virtual void FireStartFrame (iRenderView* rview) = 0;
    01300
    01307   virtual csPtr<iPerspectiveCamera> CreatePerspectiveCamera () = 0;
    01308
    01314   virtual csPtr<iCustomMatrixCamera> CreateCustomMatrixCamera (
    01315     iCamera* copyFrom = 0) = 0;
    01320
    01321   virtual iRenderManager* GetRenderManager () = 0;
    01326   virtual void SetRenderManager (iRenderManager*) = 0;
    01327
    01332   virtual void ReloadRenderManager() = 0;
    01335   // @{
    01339   THREADED_INTERFACE1(SyncEngineLists, csRef<iThreadedLoader> loader);
    01340   virtual void SyncEngineListsNow(csRef<iThreadedLoader> loader) = 0;
    01341   // @}
    01342
    01345
    01346   virtual float GetDefaultNearClipDistance () const = 0;
    01348   virtual void SetDefaultNearClipDistance (float dist) = 0;
    01350 };
    01351
    01354 #endif // __CS_IENGINE_ENGINE_H__