CrystalSpace

Public API Reference

iengine/rview.h

Go to the documentation of this file.
00001 /*
00002     Copyright (C) 2000 by Jorrit Tyberghein
00003 
00004     This library is free software; you can redistribute it and/or
00005     modify it under the terms of the GNU Library General Public
00006     License as published by the Free Software Foundation; either
00007     version 2 of the License, or (at your option) any later version.
00008 
00009     This library is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012     Library General Public License for more details.
00013 
00014     You should have received a copy of the GNU Library General Public
00015     License along with this library; if not, write to the Free
00016     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00017 */
00018 
00019 #ifndef __CS_IENGINE_RVIEW_H__
00020 #define __CS_IENGINE_RVIEW_H__
00021 
00029 #include "csutil/scf.h"
00030 
00031 #include "csgeom/plane3.h"
00032 
00033 struct iCamera;
00034 struct iClipper2D;
00035 struct iEngine;
00036 struct iGraphics2D;
00037 struct iGraphics3D;
00038 struct iPortal;
00039 struct iSector;
00040 
00041 struct csFog;
00042 
00043 class csBox3;
00044 class csRenderView;
00045 class csReversibleTransform;
00046 class csSphere;
00047 class csVector3;
00048 
00056 class csFogInfo
00057 {
00058 public:
00060   csFogInfo* next;
00061 
00063   csPlane3 incoming_plane;
00065   csPlane3 outgoing_plane;
00070   bool has_incoming_plane;
00071 
00077   bool has_outgoing_plane;
00078 
00080   csFog* fog;
00081 };
00082 
00089 class csRenderContext
00090 {
00091   friend class csRenderView;
00092 
00093 public:
00095   csRenderContext* previous;
00096 
00098   csRef<iCamera> icamera;
00100   csRef<iClipper2D> iview;
00102   csPlane3 frustum[5];
00103 
00105   csPlane3 clip_planes[7];
00107   uint32 clip_planes_mask;
00108 
00110   iPortal* last_portal;
00112   iSector* previous_sector;
00114   iSector* this_sector;
00115 
00120   csPlane3 clip_plane;
00121 
00132   bool do_clip_plane;
00133 
00142   bool do_clip_frustum;
00143 
00148   csFogInfo* fog_info;
00149 
00154   bool added_fog_info;
00155 
00161   int draw_rec_level;
00162 
00168   uint32 context_id;
00169 };
00170 
00181 struct iRenderView : public virtual iBase
00182 {
00183   SCF_INTERFACE(iRenderView, 2,0,0);
00185   virtual csRenderContext* GetRenderContext () = 0;
00186 
00188   virtual iEngine* GetEngine () = 0;
00190   virtual iGraphics2D* GetGraphics2D () = 0;
00192   virtual iGraphics3D* GetGraphics3D () = 0;
00194   virtual void GetFrustum (float& lx, float& rx, float& ty, float& by) = 0;
00195 
00196   //-----------------------------------------------------------------
00197   // The following functions operate on the current render context.
00198   //-----------------------------------------------------------------
00199 
00201   virtual iClipper2D* GetClipper () = 0;
00202 
00206   virtual iCamera* GetCamera () = 0;
00207 
00211   virtual void CalculateClipSettings (uint32 frustum_mask,
00212     int &clip_portal, int &clip_plane, int &clip_z_plane) = 0;
00213 
00219   virtual bool TestBSphere (const csReversibleTransform& w2c,
00220         const csSphere& sphere) = 0;
00221 
00233   virtual bool ClipBBox (csPlane3* planes, uint32& frustum_mask,
00234         const csBox3& obox,
00235         int& clip_portal, int& clip_plane, int& clip_z_plane) = 0;
00236 
00242   virtual void SetupClipPlanes (const csReversibleTransform& tr_o2c,
00243         csPlane3* planes, uint32& frustum_mask) = 0;
00244 
00248   virtual iSector* GetThisSector () = 0;
00249 
00253   virtual iSector* GetPreviousSector () = 0;
00254 
00258   virtual iPortal* GetLastPortal () = 0;
00259 
00264   virtual iCamera* GetOriginalCamera () const = 0;
00265 
00269   virtual uint GetCurrentFrameNumber () const = 0;
00270 
00278   virtual bool ClipBSphere (
00279         const csSphere &cam_sphere,
00280         const csSphere &world_sphere,
00281         int& clip_portal, int& clip_plane, int& clip_z_plane) = 0;
00282   
00283 
00284 
00285   // @@@ ADDED B/C OF FATLOOP PORTAL HACKING
00286   // @@@ REMOVE AGAIN ASAP
00287   virtual void CreateRenderContext () = 0;
00288   virtual int GetRenderRecursionLevel () const = 0;
00289   virtual void SetRenderRecursionLevel (int rec) = 0;
00290   virtual void SetClipper (iClipper2D* clip) = 0;
00291   virtual void ResetFogInfo () = 0;
00292   virtual void SetPreviousSector (iSector* s) = 0;
00293   virtual void SetClipPlane (const csPlane3& p) = 0;
00294   virtual bool GetClipPlane (csPlane3& pl) const = 0;
00295   virtual const csPlane3& GetClipPlane () const = 0;
00296   virtual csPlane3& GetClipPlane () = 0;
00297   virtual void UseClipPlane (bool u) = 0;
00298   virtual void UseClipFrustum (bool u) = 0;
00299   virtual void SetLastPortal (iPortal* por) = 0;
00300   virtual bool IsClipperRequired () const = 0;
00301   virtual iCamera* CreateNewCamera () = 0;
00302   virtual void RestoreRenderContext () = 0;
00303   virtual void SetThisSector (iSector* s) = 0;
00304   virtual void SetupClipPlanes () = 0;
00305 };
00306 
00309 #endif // __CS_IENGINE_RVIEW_H__
00310 

Generated for Crystal Space by doxygen 1.4.7