CrystalSpace

Public API Reference

csplugincommon/rendermanager/renderview.h
Go to the documentation of this file.
00001 /*
00002     Copyright (C) 2007-2008 by Marten Svanfeldt
00003                   1998-2001 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_CSPLUGINCOMMON_RENDERMANAGER_RENDERVIEW_H__
00021 #define __CS_CSPLUGINCOMMON_RENDERMANAGER_RENDERVIEW_H__
00022 
00027 #include "csutil/pooledscfclass.h"
00028 #include "csutil/scf_implementation.h"
00029 #include "iengine/engine.h"
00030 #include "iengine/portal.h"
00031 #include "iengine/rview.h"
00032 #include "ivaria/view.h"
00033 #include "cstool/rviewclipper.h"
00034 #include "csutil/refcount.h"
00035 #include "csutil/weakref.h"
00036 
00037 namespace CS
00038 {
00039 namespace RenderManager
00040 {
00041 
00047   class CS_CRYSTALSPACE_EXPORT RenderView : 
00048     public scfImplementationPooled<scfImplementation1<RenderView, iRenderView> >
00049   {
00050   private:
00055     uint32 context_id;
00056 
00058     csRenderContext* ctxt;
00059 
00061     iEngine* engine;
00063     iGraphics3D* g3d;
00065     iGraphics2D* g2d;
00069     iCamera* original_camera;
00070 
00072     float leftx, rightx, topy, boty;
00073 
00077     void UpdateFrustum ();
00082     void SetFrustumFromBox (const csBox2& box);
00083     
00085     int viewWidth, viewHeight;
00086 
00088     CS::Utility::MeshFilter meshFilter;
00089   public:
00091     RenderView ();
00093     RenderView (iCamera* c);
00095     RenderView (iCamera* c, iClipper2D* v, iGraphics3D* ig3d);
00097     RenderView (iView* v);
00099     RenderView (const RenderView& other);
00101     RenderView (const RenderView& other, bool keepCamera);
00102 
00103     virtual ~RenderView ();
00104 
00106     void InitialiseFromView (iView* view);
00107 
00109     void InitialiseFromCamera (iCamera* camera);
00110 
00112     void SetEngine (iEngine* engine);
00114     void SetCamera (iCamera* camera);
00116     void SetOriginalCamera (iCamera* camera);
00118     virtual iCamera* GetOriginalCamera () const { return original_camera; }
00119 
00121     csRenderContext* GetCsRenderContext () const { return ctxt; }
00123     void SetCsRenderContext (csRenderContext* c) { ctxt = c; }
00124 
00132     void CreateRenderContext ();
00138     void RestoreRenderContext ();
00139 
00145     iCamera* CreateNewCamera ();
00146 
00150     void SetPreviousSector (iSector* s) { ctxt->previous_sector = s; }
00154     void SetThisSector (iSector* s) { ctxt->this_sector = s; }
00155 
00159     int GetRenderRecursionLevel () const { return ctxt->draw_rec_level; }
00163     void SetRenderRecursionLevel (int rec)
00164     {
00165       ctxt->draw_rec_level = rec;
00166     }
00168     void SetLastPortal (iPortal* por)
00169     {
00170       ctxt->last_portal = por;
00171     }
00173     void SetClipper (iClipper2D* clip);
00175     void SetFrustum (float lx, float rx, float ty, float by);
00176 
00178     void UseClipPlane (bool u) { ctxt->do_clip_plane = u; }
00180     void UseClipFrustum (bool u) { ctxt->do_clip_frustum = u; }
00184     void SetClipPlane (const csPlane3& p) { ctxt->clip_plane = p; }
00191     bool GetClipPlane (csPlane3& pl) const
00192     {
00193       pl = ctxt->clip_plane;
00194       return ctxt->do_clip_plane;
00195     }
00197     const csPlane3& GetClipPlane () const
00198     {
00199       return ctxt->clip_plane;
00200     }
00202     csPlane3& GetClipPlane ()
00203     {
00204       return ctxt->clip_plane;
00205     }
00212     bool IsClipperRequired () const { return ctxt->do_clip_frustum; }
00213 
00219     csFogInfo* GetFirstFogInfo () { return ctxt->fog_info; }
00223     void SetFirstFogInfo (csFogInfo* fi)
00224     {
00225       ctxt->fog_info = fi;
00226       ctxt->added_fog_info = true;
00227     }
00231     bool AddedFogInfo () const { return ctxt->added_fog_info; }
00235     void ResetFogInfo () { ctxt->added_fog_info = false; }
00236 
00238     virtual csRenderContext* GetRenderContext () { return ctxt; }
00239 
00241     virtual iEngine* GetEngine ();
00243     virtual iGraphics2D* GetGraphics2D () { return g2d; }
00245     virtual iGraphics3D* GetGraphics3D () { return g3d; }
00247     virtual void GetFrustum (float& lx, float& rx, float& ty, float& by)
00248     {
00249       lx = leftx;
00250       rx = rightx;
00251       ty = topy;
00252       by = boty;
00253     }
00254     
00256     int GetViewWidth() const { return viewWidth; }
00258     int GetViewHeight() const { return viewHeight; }
00263     void SetViewDimensions (int w, int h) { viewWidth = w; viewHeight = h; }
00264 
00265     //-----------------------------------------------------------------
00266     // The following functions operate on the current render context.
00267     //-----------------------------------------------------------------
00268 
00270     virtual iClipper2D* GetClipper () { return ctxt->iview; }
00271 
00275     virtual iCamera* GetCamera () { return ctxt->icamera; }
00276 
00280     virtual iSector* GetThisSector () { return ctxt->this_sector; }
00281 
00285     virtual iSector* GetPreviousSector () { return ctxt->previous_sector; }
00286 
00288     virtual iPortal* GetLastPortal () { return ctxt->last_portal; }
00289 
00291     virtual uint GetCurrentFrameNumber () const;
00292 
00294     virtual void DestroyRenderContext (csRenderContext* context);
00295 
00297     const CS::Utility::MeshFilter& GetMeshFilter () const { return meshFilter; }
00298 
00300     void SetMeshFilter (const CS::Utility::MeshFilter& filter);
00301   };
00302 
00306   class CS_CRYSTALSPACE_EXPORT RenderViewCache
00307   {
00308   public:
00310     RenderView* GetRenderView (iView* view);
00311 
00313     RenderView* GetRenderView (RenderView* view, iPortal* portal, iCamera* camera);
00314 
00316     csPtr<RenderView> CreateRenderView ();
00317 
00319     csPtr<RenderView> CreateRenderView (RenderView* view);
00320 
00322     csPtr<RenderView> CreateRenderView (RenderView* view, bool keepCamera);
00323 
00324   private:
00326     RenderView::Pool renderViewPool;
00327 
00328     struct View2RenderView : public csRefCount
00329     {
00330       csWeakRef<iView> view;
00331       csRef<RenderView> rview;
00332 
00333       View2RenderView (iView* view, CS::RenderManager::RenderView* rview)
00334         : view (view), rview (rview) {}
00335     };
00336 
00338     csRefArray<View2RenderView> iView2RenderViews;
00339 
00340     struct RViewPortal2RenderView : public csRefCount
00341     {
00342       csWeakRef<RenderView> view;
00343       csWeakRef<iPortal> portal;
00344       csRef<RenderView> rview;
00345 
00346       RViewPortal2RenderView (RenderView* view, iPortal* portal, CS::RenderManager::RenderView* rview)
00347         : view (view), portal (portal), rview (rview) {}
00348     };
00349 
00351     csRefArray<RViewPortal2RenderView> rViewPortal2RenderViews;
00352   };
00353 
00354 }
00355 }
00356 
00357 #endif

Generated for Crystal Space 2.0 by doxygen 1.7.6.1