00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __IENGINE_RVIEW_H__
00020 #define __IENGINE_RVIEW_H__
00021
00022 #include "csutil/scf.h"
00023 #include "csgeom/plane3.h"
00024 #include "csgeom/transfrm.h"
00025 #include "csgeom/box.h"
00026 #include "ivideo/graph3d.h"
00027 #include "iengine/engine.h"
00028
00029 struct iEngine;
00030 struct iClipper2D;
00031 struct iGraphics2D;
00032 struct iGraphics3D;
00033 struct iCamera;
00034 struct iSector;
00035 struct iPolygon3D;
00036 struct csFog;
00037 class csRenderView;
00038 class csReversibleTransform;
00039 class csVector3;
00040 class csSphere;
00041
00049 class csFogInfo
00050 {
00051 public:
00053 csFogInfo* next;
00054
00056 csPlane3 incoming_plane;
00058 csPlane3 outgoing_plane;
00063 bool has_incoming_plane;
00064
00070 bool has_outgoing_plane;
00071
00073 csFog* fog;
00074 };
00075
00080 class csRenderContextFrustum
00081 {
00082 class csRenderContext;
00083 friend class csRenderContext;
00084
00085 private:
00086 int ref_count;
00087
00088 ~csRenderContextFrustum () { }
00089
00090 public:
00095 csVector3 frustum[4];
00096
00097 csRenderContextFrustum () : ref_count (1) { }
00098 void IncRef () { ref_count++; }
00099 void DecRef () { --ref_count; if (ref_count <= 0) delete this; }
00100 };
00101
00108 class csRenderContext
00109 {
00110 friend class csRenderView;
00111
00112 private:
00116 void* rcdata;
00117
00118 public:
00120 iCamera* icamera;
00122 iClipper2D* iview;
00124 csRenderContextFrustum* iview_frustum;
00125
00127 iPolygon3D* portal_polygon;
00129 iSector* previous_sector;
00131 iSector* this_sector;
00132
00137 csPlane3 clip_plane;
00138
00149 bool do_clip_plane;
00150
00159 bool do_clip_frustum;
00160
00165 csFogInfo* fog_info;
00166
00171 bool added_fog_info;
00172
00178 int draw_rec_level;
00179 };
00180
00181 SCF_VERSION (iRenderView, 0, 2, 2);
00182
00187 struct iRenderView : public iBase
00188 {
00190 virtual csRenderContext* GetRenderContext () = 0;
00198 virtual void CreateRenderContext () = 0;
00204 virtual void RestoreRenderContext (csRenderContext* original) = 0;
00210 virtual iCamera* CreateNewCamera () = 0;
00211
00213 virtual iEngine* GetEngine () = 0;
00215 virtual iGraphics2D* GetGraphics2D () = 0;
00217 virtual iGraphics3D* GetGraphics3D () = 0;
00219 virtual void SetFrustum (float lx, float rx, float ty, float by) = 0;
00221 virtual void GetFrustum (float& lx, float& rx, float& ty, float& by) = 0;
00223 virtual csRenderContextFrustum* GetTopFrustum () = 0;
00224
00225
00226
00227
00228
00230 virtual iClipper2D* GetClipper () = 0;
00232 virtual void SetClipper (iClipper2D* clip) = 0;
00239 virtual bool IsClipperRequired () = 0;
00246 virtual bool GetClipPlane (csPlane3& pl) = 0;
00248 virtual csPlane3& GetClipPlane () = 0;
00252 virtual void SetClipPlane (const csPlane3& pl) = 0;
00254 virtual void UseClipPlane (bool u) = 0;
00256 virtual void UseClipFrustum (bool u) = 0;
00257
00263 virtual csFogInfo* GetFirstFogInfo () = 0;
00267 virtual void SetFirstFogInfo (csFogInfo* fi) = 0;
00271 virtual bool AddedFogInfo () = 0;
00275 virtual void ResetFogInfo () = 0;
00279 virtual iCamera* GetCamera () = 0;
00283 virtual void CalculateFogPolygon (G3DPolygonDP& poly) = 0;
00287 virtual void CalculateFogPolygon (G3DPolygonDPFX& poly) = 0;
00294 virtual void CalculateFogMesh (const csTransform& tr_o2c,
00295 G3DTriangleMesh& mesh) = 0;
00296
00302 virtual bool TestBSphere (const csReversibleTransform& o2c,
00303 const csSphere& sphere) = 0;
00312 virtual bool ClipBSphere (const csReversibleTransform& o2c,
00313 const csSphere& sphere,
00314 int& clip_portal, int& clip_plane, int& clip_z_plane) = 0;
00315
00323 virtual bool ClipBBox (const csBox2& sbox, const csBox3& cbox,
00324 int& clip_portal, int& clip_plane, int& clip_z_plane) = 0;
00325
00329 virtual iSector* GetThisSector () = 0;
00330
00334 virtual void SetThisSector (iSector* s) = 0;
00335
00339 virtual iSector* GetPreviousSector () = 0;
00340
00344 virtual void SetPreviousSector (iSector* s) = 0;
00345
00349 virtual iPolygon3D* GetPortalPolygon () = 0;
00350
00354 virtual void SetPortalPolygon (iPolygon3D* poly) = 0;
00355
00359 virtual int GetRenderRecursionLevel () = 0;
00363 virtual void SetRenderRecursionLevel (int rec) = 0;
00364
00368 virtual void AttachRenderContextData (void* key, iBase* data) = 0;
00372 virtual iBase* FindRenderContextData (void* key) = 0;
00377 virtual void DeleteRenderContextData (void* key) = 0;
00378
00383 virtual void SetCallback (iDrawFuncCallback* cb) = 0;
00387 virtual iDrawFuncCallback* GetCallback () = 0;
00391 virtual void CallCallback (int type, void* data) = 0;
00392 };
00393
00394 #endif
00395