iengine/sector.h
Go to the documentation of this file.00001 /* 00002 Crystal Space 3D engine 00003 Copyright (C) 1998-2001 by Jorrit Tyberghein 00004 2004 by Marten Svanfeldt 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License as published by the Free Software Foundation; either 00009 version 2 of the License, or (at your option) any later version. 00010 00011 This library is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Library General Public License for more details. 00015 00016 You should have received a copy of the GNU Library General Public 00017 License along with this library; if not, write to the Free 00018 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00019 */ 00020 00021 #ifndef __CS_IENGINE_SECTOR_H__ 00022 #define __CS_IENGINE_SECTOR_H__ 00023 00031 #include "ivideo/rendermesh.h" 00032 00033 #include "csutil/cscolor.h" 00034 #include "csutil/scf.h" 00035 #include "csutil/set.h" 00036 #include "csgeom/vector3.h" 00037 #include "csgeom/aabbtree.h" 00038 00039 #include "iutil/threadmanager.h" 00040 00041 struct iMeshWrapper; 00042 struct iMeshGenerator; 00043 struct iMeshList; 00044 struct iLightList; 00045 struct iLight; 00046 struct iPortal; 00047 struct iVisibilityCuller; 00048 00049 struct iObject; 00050 00051 struct iRenderView; 00052 struct iRenderLoop; 00053 struct iSector; 00054 struct iDocumentNode; 00055 00056 struct iShaderVariableContext; 00057 00058 class csBox3; 00059 class csRenderMeshList; 00060 class csReversibleTransform; 00061 class csVector3; 00062 00063 00064 enum csFogMode 00065 { 00066 CS_FOG_MODE_NONE = 0, 00067 CS_FOG_MODE_LINEAR, 00068 CS_FOG_MODE_CRYSTALSPACE, 00069 CS_FOG_MODE_EXP, // Not implemented 00070 CS_FOG_MODE_EXP2 // Not implemented 00071 }; 00072 00076 struct csFog 00077 { 00079 float density; 00081 csColor4 color; 00083 float start; 00085 float end; 00087 float limit; 00089 csFogMode mode; 00090 00091 csFog() : density (0), color (0, 0, 0, 1.0f), start (0), end (0), limit (0), 00092 mode (CS_FOG_MODE_NONE) {} 00093 }; 00094 00103 struct iSectorCallback : public virtual iBase 00104 { 00105 SCF_INTERFACE (iSectorCallback, 0, 0, 1); 00106 00111 virtual void Traverse (iSector* sector, iBase* context) = 0; 00112 }; 00113 00121 struct iSectorMeshCallback : public virtual iBase 00122 { 00123 SCF_INTERFACE (iSectorMeshCallback, 0, 0, 1); 00124 00129 virtual void NewMesh (iSector* sector, iMeshWrapper* mesh) = 0; 00130 00134 virtual void RemoveMesh (iSector* sector, iMeshWrapper* mesh) = 0; 00135 }; 00136 00143 struct iLightVisibleCallback : public virtual iBase 00144 { 00145 SCF_INTERFACE (iLightVisibleCallback, 0, 0, 1); 00146 00148 virtual void LightVisible (iSector* sector, iLight* light) = 0; 00149 }; 00150 00155 struct csSectorHitBeamResult 00156 { 00158 iMeshWrapper* mesh; 00159 00161 csVector3 isect; 00162 00164 int polygon_idx; 00165 00170 iSector* final_sector; 00171 }; 00172 00176 struct csSectorVisibleRenderMeshes 00177 { 00179 iMeshWrapper* imesh; 00181 int num; 00183 csRenderMesh** rmeshes; 00184 }; 00185 00209 struct iSector : public virtual iBase 00210 { 00211 SCF_INTERFACE(iSector,4,1,0); 00213 virtual iObject *QueryObject () = 0; 00214 00217 00218 virtual iMeshList* GetMeshes () = 0; 00219 00226 virtual csRenderMeshList* GetVisibleMeshes (iRenderView *) = 0; 00227 00234 virtual const csSet<csPtrKey<iMeshWrapper> >& GetPortalMeshes () const = 0; 00235 00242 virtual void UnlinkObjects () = 0; 00243 00248 virtual void AddSectorMeshCallback (iSectorMeshCallback* cb) = 0; 00249 00253 virtual void RemoveSectorMeshCallback (iSectorMeshCallback* cb) = 0; 00258 00259 virtual void Draw (iRenderView* rview) = 0; 00260 00265 virtual void PrepareDraw (iRenderView* rview) = 0; 00266 00270 virtual int GetRecLevel () const = 0; 00271 00275 virtual void IncRecLevel () = 0; 00276 00280 virtual void DecRecLevel () = 0; 00281 00286 THREADED_INTERFACE1(SetRenderLoop, iRenderLoop* rl); 00287 00293 virtual iRenderLoop* GetRenderLoop () = 0; 00301 virtual iMeshGenerator* CreateMeshGenerator (const char* name) = 0; 00302 00306 virtual size_t GetMeshGeneratorCount () const = 0; 00307 00311 virtual iMeshGenerator* GetMeshGenerator (size_t idx) = 0; 00312 00316 virtual iMeshGenerator* GetMeshGeneratorByName (const char* name) = 0; 00317 00321 virtual void RemoveMeshGenerator (size_t idx) = 0; 00322 00326 virtual void RemoveMeshGenerator (const char* name) = 0; 00327 00331 virtual void RemoveMeshGenerators () = 0; 00336 00337 virtual bool HasFog () const = 0; 00339 virtual const csFog& GetFog () const = 0; 00341 virtual void SetFog (float density, const csColor& color) = 0; 00343 virtual void SetFog (const csFog& fog) = 0; 00345 virtual void DisableFog () = 0; 00353 virtual iLightList* GetLights () = 0; 00354 00358 THREADED_INTERFACE1(AddLight, csRef<iLight> light); 00359 00364 virtual void SetDynamicAmbientLight (const csColor& color) = 0; 00365 00367 virtual csColor GetDynamicAmbientLight () const = 0; 00368 00373 virtual uint GetDynamicAmbientVersion () const = 0; 00383 virtual void CalculateSectorBBox (csBox3& bbox, 00384 bool do_meshes) const = 0; 00385 00395 virtual bool SetVisibilityCullerPlugin (const char* name, 00396 iDocumentNode* culler_params = 0) = 0; 00402 virtual iVisibilityCuller* GetVisibilityCuller () = 0; 00403 00414 virtual csSectorHitBeamResult HitBeamPortals (const csVector3& start, 00415 const csVector3& end) = 0; 00416 00426 virtual csSectorHitBeamResult HitBeam (const csVector3& start, 00427 const csVector3& end, bool accurate = false) = 0; 00428 00465 virtual iSector* FollowSegment (csReversibleTransform& t, 00466 csVector3& new_position, bool& mirror, bool only_portals = false, 00467 iPortal** crossed_portals = 0, iMeshWrapper** portal_meshes = 0, 00468 int firstIndex = 0, int* lastIndex = 0) = 0; 00477 THREADED_INTERFACE1(SetSectorCallback, csRef<iSectorCallback> cb); 00478 00482 THREADED_INTERFACE1(RemoveSectorCallback, csRef<iSectorCallback> cb); 00483 00485 virtual int GetSectorCallbackCount () const = 0; 00486 00488 virtual iSectorCallback* GetSectorCallback (int idx) const = 0; 00501 virtual void SetLightCulling (bool enable) = 0; 00503 virtual bool IsLightCullingEnabled () const = 0; 00508 virtual void AddLightVisibleCallback (iLightVisibleCallback* cb) = 0; 00512 virtual void RemoveLightVisibleCallback (iLightVisibleCallback* cb) = 0; 00515 00516 virtual iShaderVariableContext* GetSVContext() = 0; 00517 00522 virtual void PrecacheDraw () = 0; 00523 00527 virtual void CallSectorCallbacks (iRenderView* rview) = 0; 00528 00532 virtual csSectorVisibleRenderMeshes* GetVisibleRenderMeshes (int& num, 00533 iMeshWrapper* mesh, iRenderView *rview, uint32 frustum_mask) = 0; 00534 }; 00535 00536 00547 struct iSectorList : public virtual iBase 00548 { 00549 SCF_INTERFACE(iSectorList, 2,0,0); 00551 virtual int GetCount () const = 0; 00552 00554 virtual iSector *Get (int n) const = 0; 00555 00560 virtual int Add (iSector *obj) = 0; 00561 00566 virtual bool Remove (iSector *obj) = 0; 00567 00572 virtual bool Remove (int n) = 0; 00573 00575 virtual void RemoveAll () = 0; 00576 00582 virtual int Find (iSector *obj) const = 0; 00583 00588 virtual iSector *FindByName (const char *Name) const = 0; 00589 }; 00590 00591 00599 struct iSectorIterator : public virtual iBase 00600 { 00601 SCF_INTERFACE(iSectorIterator,2,0,0); 00603 virtual bool HasNext () const = 0; 00604 00609 virtual iSector* Next () = 0; 00610 00615 virtual const csVector3& GetLastPosition () const = 0; 00616 00618 virtual void Reset () = 0; 00619 }; 00620 00623 #endif // __CS_IENGINE_SECTOR_H__
Generated for Crystal Space 2.0 by doxygen 1.6.1