00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef NL_MESH_VERTEX_PROGRAM_H
00027 #define NL_MESH_VERTEX_PROGRAM_H
00028
00029 #include "nel/misc/types_nl.h"
00030 #include "nel/misc/stream.h"
00031 #include "nel/misc/smart_ptr.h"
00032
00033 #include "3d/material.h"
00034
00035
00036 namespace NLMISC
00037 {
00038 class CMatrix;
00039 }
00040
00041 namespace NL3D
00042 {
00043
00044
00045 class IDriver;
00046 class CScene;
00047 class CMeshBaseInstance;
00048 class CLight;
00049 class CVertexBuffer;
00050 class IVertexBufferHard;
00051
00052
00059 class IMeshVertexProgram : public NLMISC::IStreamable, public NLMISC::CRefCount
00060 {
00061 public:
00062
00064 IMeshVertexProgram() {}
00065 virtual ~IMeshVertexProgram() {}
00066
00069 virtual void initInstance(CMeshBaseInstance *mbi) =0;
00070
00071
00082 virtual bool begin(IDriver *drv,
00083 CScene *scene,
00084 CMeshBaseInstance *mbi,
00085 const NLMISC::CMatrix &invertedModelMat,
00086 const NLMISC::CVector &viewerPos
00087 ) =0;
00090 virtual void end(IDriver *drv) =0;
00091
00095 virtual void setupForMaterial(const CMaterial &mat,
00096 IDriver *drv,
00097 CScene *scene,
00098 CVertexBuffer *vb) = 0;
00100 virtual void setupForMaterial(const CMaterial &mat,
00101 IDriver *drv,
00102 CScene *scene,
00103 IVertexBufferHard *vb) = 0;
00104
00105
00106 virtual bool needTangentSpace() const { return false; }
00107 };
00108
00109
00110 }
00111
00112
00113 #endif // NL_MESH_VERTEX_PROGRAM_H
00114
00115