00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_IMESH_GENMESH_H__
00020 #define __CS_IMESH_GENMESH_H__
00021
00026 #include "csutil/scf_interface.h"
00027 #include "ivideo/rendermesh.h"
00028
00029 struct iDocumentNode;
00030 struct iGenMeshAnimationControl;
00031 struct iGenMeshAnimationControlFactory;
00032 struct iMaterialWrapper;
00033 struct iRenderBuffer;
00034 struct iMeshObject;
00035 struct iString;
00036
00040 class csBox3;
00041 class csColor;
00042 class csColor4;
00043 struct csTriangle;
00044 class csVector2;
00045 class csVector3;
00046 class csEllipsoid;
00047
00051 struct iGeneralFactorySubMesh : public virtual iBase
00052 {
00053 SCF_INTERFACE (iGeneralFactorySubMesh, 1, 0, 3);
00054
00056 virtual void ClearSlidingWindows() = 0;
00057
00059 virtual int GetSlidingWindowSize() const = 0;
00060
00062 virtual void AddSlidingWindow(int start_index, int end_index) = 0;
00063
00065 virtual void GetSlidingWindow(unsigned int index, int& out_start_index, int& out_end_index) const = 0;
00066 };
00067
00071 struct iGeneralFactorySubMeshObject : public virtual iBase
00072 {
00073 SCF_INTERFACE (iGeneralFactorySubMeshObject, 1, 0, 3);
00074
00076 virtual void ForceProgLODLevel(int level) = 0;
00077
00079 virtual int GetForcedProgLODLevel() = 0;
00080 };
00081
00085 struct iGeneralMeshSubMesh : public virtual iBase
00086 {
00087 SCF_INTERFACE (iGeneralMeshSubMesh, 1, 0, 3);
00088
00090 virtual iRenderBuffer* GetIndices () = 0;
00091
00093 virtual void SetIndices(iRenderBuffer* newIndices) = 0;
00094
00096 virtual iMaterialWrapper* GetMaterial () const = 0;
00097
00099 virtual const char* GetName () const = 0;
00100
00102 virtual uint GetMixmode () const = 0;
00103
00105 virtual void SetMaterial (iMaterialWrapper* material) = 0;
00106
00108 virtual csZBufMode GetZMode () const = 0;
00109
00111 virtual void SetZMode (csZBufMode mode) = 0;
00112
00114 virtual CS::Graphics::RenderPriority GetRenderPriority () const = 0;
00115
00117 virtual void SetRenderPriority (CS::Graphics::RenderPriority prio) = 0;
00118
00120 virtual void SetMixmode (uint mode) = 0;
00121
00126 virtual void SetBack2Front (bool enable) = 0;
00127
00129 virtual bool GetBack2Front () const = 0;
00130 };
00131
00137 struct iGeneralMeshCommonState : public virtual iBase
00138 {
00139 SCF_INTERFACE (iGeneralMeshCommonState, 1, 2, 2);
00140
00145 CS_DEPRECATED_METHOD_MSG("Deprecated by change to shader-based lighting.")
00146 virtual void SetLighting (bool l) = 0;
00151 CS_DEPRECATED_METHOD_MSG("Deprecated by change to shader-based lighting.")
00152 virtual bool IsLighting () const = 0;
00158 virtual void SetManualColors (bool m) = 0;
00160 virtual bool IsManualColors () const = 0;
00166 CS_DEPRECATED_METHOD_MSG("Deprecated by change to shader-based lighting.")
00167 virtual void SetShadowCasting (bool m) = 0;
00172 CS_DEPRECATED_METHOD_MSG("Deprecated by change to shader-based lighting.")
00173 virtual bool IsShadowCasting () const = 0;
00183 CS_DEPRECATED_METHOD_MSG("Deprecated by change to shader-based lighting.")
00184 virtual void SetShadowReceiving (bool m) = 0;
00189 CS_DEPRECATED_METHOD_MSG("Deprecated by change to shader-based lighting.")
00190 virtual bool IsShadowReceiving () const = 0;
00191
00197 virtual bool AddRenderBuffer (const char *name, iRenderBuffer* buffer) = 0;
00198
00202 virtual bool RemoveRenderBuffer (const char *name) = 0;
00203
00207 virtual int GetRenderBufferCount () const = 0;
00208
00212 virtual iRenderBuffer* GetRenderBuffer (int index) = 0;
00213
00217 virtual csRef<iString> GetRenderBufferName (int index) const = 0;
00218
00222 virtual iRenderBuffer* GetRenderBuffer (const char* name) = 0;
00223
00227 virtual bool AddRenderBuffer (csRenderBufferName name, iRenderBuffer* buffer) = 0;
00228
00232 virtual bool RemoveRenderBuffer (csRenderBufferName name) = 0;
00233
00237 virtual iRenderBuffer* GetRenderBuffer (csRenderBufferName name) = 0;
00239 };
00240
00255 struct iGeneralMeshState : public virtual iGeneralMeshCommonState
00256 {
00257 SCF_INTERFACE (iGeneralMeshState, 2, 0, 1);
00258
00263 virtual void SetAnimationControl (iGenMeshAnimationControl* anim_ctrl) = 0;
00264
00268 virtual iGenMeshAnimationControl* GetAnimationControl () const = 0;
00269
00281 virtual iGeneralMeshSubMesh* FindSubMesh (const char* name) const = 0;
00288 virtual void ForceProgLODLevel(int level) = 0;
00289 };
00290
00313 struct iGeneralFactoryState : public virtual iGeneralMeshCommonState
00314 {
00315 SCF_INTERFACE (iGeneralFactoryState, 2, 0, 2);
00316
00318 virtual void SetColor (const csColor& col) = 0;
00320 virtual const csColor& GetColor () const = 0;
00321
00327 virtual void AddVertex (const csVector3& v,
00328 const csVector2& uv, const csVector3& normal,
00329 const csColor4& color) = 0;
00330
00338 virtual void SetVertexCount (int n) = 0;
00340 virtual int GetVertexCount () const = 0;
00346 virtual csVector3* GetVertices () = 0;
00352 virtual csVector2* GetTexels () = 0;
00361 virtual csVector3* GetNormals () = 0;
00369 virtual csColor4* GetColors () = 0;
00370
00376 virtual void AddTriangle (const csTriangle& tri) = 0;
00377
00385 virtual void SetTriangleCount (int n) = 0;
00387 virtual int GetTriangleCount () const = 0;
00393 virtual csTriangle* GetTriangles () = 0;
00394
00401 virtual void Invalidate () = 0;
00402
00408 virtual void CalculateNormals (bool compress = true) = 0;
00409
00414 virtual void Compress () = 0;
00415
00421 virtual void GenerateBox (const csBox3& box) = 0;
00422
00429 virtual void GenerateCapsule (float l, float r, uint sides) = 0;
00430
00442 virtual void GenerateSphere (const csEllipsoid& ellips, int rim_vertices,
00443 bool cyl_mapping = false,
00444 bool toponly = false,
00445 bool reversed = false) = 0;
00446
00447
00448
00454 virtual void SetBack2Front (bool b2f) = 0;
00455
00459 virtual bool IsAutoNormals () const = 0;
00460
00464 virtual bool IsBack2Front () const = 0;
00465
00470 virtual void SetAnimationControlFactory (
00471 iGenMeshAnimationControlFactory* anim_ctrl) = 0;
00472
00476 virtual iGenMeshAnimationControlFactory* GetAnimationControlFactory ()
00477 const = 0;
00478
00484 virtual void ClearSubMeshes () = 0;
00502 virtual iGeneralMeshSubMesh* AddSubMesh (iRenderBuffer* indices,
00503 iMaterialWrapper *material, const char* name, uint mixmode = (uint)~0) = 0;
00504
00509 virtual iGeneralMeshSubMesh* FindSubMesh (const char* name) const = 0;
00510
00514 virtual void DeleteSubMesh (iGeneralMeshSubMesh* mesh) = 0;
00515
00517 virtual size_t GetSubMeshCount () const = 0;
00518
00520 virtual iGeneralMeshSubMesh* GetSubMesh (size_t index) const = 0;
00529 virtual void DisableAutoNormals () = 0;
00530
00537 virtual void GenerateCylinder (float l, float r, uint sides) = 0;
00538
00545 virtual int GetNumProgLODLevels() const = 0;
00546
00551 virtual void GetProgLODDistances(float& out_min, float& out_max) const = 0;
00552
00558 virtual void SetProgLODDistances(float min, float max) = 0;
00560 };
00561
00579 struct iGenMeshAnimationControl : public virtual iBase
00580 {
00581 SCF_INTERFACE(iGenMeshAnimationControl, 2, 0, 1);
00582
00584 virtual bool AnimatesVertices () const = 0;
00586 virtual bool AnimatesTexels () const = 0;
00588 virtual bool AnimatesNormals () const = 0;
00590 virtual bool AnimatesColors () const = 0;
00591
00601 virtual void Update (csTicks current, int num_verts,
00602 uint32 version_id) = 0;
00603
00616 virtual const csVector3* UpdateVertices (csTicks current,
00617 const csVector3* verts, int num_verts, uint32 version_id) = 0;
00618
00631 virtual const csVector2* UpdateTexels (csTicks current,
00632 const csVector2* texels, int num_texels, uint32 version_id) = 0;
00633
00646 virtual const csVector3* UpdateNormals (csTicks current,
00647 const csVector3* normals, int num_normals, uint32 version_id) = 0;
00648
00663 virtual const csColor4* UpdateColors (csTicks current,
00664 const csColor4* colors, int num_colors, uint32 version_id) = 0;
00665
00667 virtual bool AnimatesBBoxRadius () const = 0;
00668
00678 virtual const csBox3& UpdateBoundingBox (csTicks current, uint32 version_id, const csBox3& bbox) = 0;
00679
00689 virtual const float UpdateRadius (csTicks current, uint32 version_id, const float radius) = 0;
00690
00700 virtual const csBox3* UpdateBoundingBoxes (csTicks current, uint32 version_id) = 0;
00701 };
00702
00715 struct iGenMeshAnimationControlFactory : public virtual iBase
00716 {
00717 SCF_INTERFACE(iGenMeshAnimationControlFactory, 2, 0, 0);
00718
00722 virtual csPtr<iGenMeshAnimationControl> CreateAnimationControl (
00723 iMeshObject *mesh) = 0;
00724
00729 virtual const char* Load (iDocumentNode* node) = 0;
00730
00735 virtual const char* Save (iDocumentNode* parent) = 0;
00736 };
00737
00752 struct iGenMeshAnimationControlType : public virtual iBase
00753 {
00754 SCF_INTERFACE(iGenMeshAnimationControlType, 2, 0, 0);
00755
00759 virtual csPtr<iGenMeshAnimationControlFactory> CreateAnimationControlFactory
00760 () = 0;
00761 };
00762
00765 #endif // __CS_IMESH_GENMESH_H__