Elbeem: fix memory leak and add guarded allocator directives
[blender.git] / intern / elbeem / intern / ntl_geometryshader.h
1 /** \file elbeem/intern/ntl_geometryshader.h
2  *  \ingroup elbeem
3  */
4 /******************************************************************************
5  *
6  * El'Beem - Free Surface Fluid Simulation with the Lattice Boltzmann Method
7  * Copyright 2003-2006 Nils Thuerey
8  *
9  * Interface for a geometry shader
10  *
11  *****************************************************************************/
12 #ifndef NTL_GEOMETRYSHADER_H
13 #define NTL_GEOMETRYSHADER_H
14
15 #include "ntl_geometryclass.h"
16
17 #ifdef WITH_CXX_GUARDEDALLOC
18 #  include "MEM_guardedalloc.h"
19 #endif
20
21 class ntlGeometryObject;
22 class ntlRenderGlobals;
23
24 class ntlGeometryShader : 
25         public ntlGeometryClass
26 {
27
28         public:
29
30                 //! Default constructor
31                 inline ntlGeometryShader() :
32                         ntlGeometryClass(), mOutFilename("")
33                         {};
34                 //! Default destructor
35                 virtual ~ntlGeometryShader() {};
36
37                 //! Return type id
38                 virtual int getTypeId() { return GEOCLASSTID_SHADER; }
39
40                 /*! Initialize object, should return !=0 upon error */
41                 virtual int initializeShader() = 0;
42
43                 /*! Do further object initialization after all geometry has been constructed, should return !=0 upon error */
44                 virtual int postGeoConstrInit(ntlRenderGlobals *glob) { glob=NULL; /*unused*/ return 0; };
45
46                 /*! Get start iterator for all objects */
47                 virtual vector<ntlGeometryObject *>::iterator getObjectsBegin() { return mObjects.begin(); }
48                 /*! Get end iterator for all objects */
49                 virtual vector<ntlGeometryObject *>::iterator getObjectsEnd() { return mObjects.end(); }
50                 
51                 /*! notify object that dump is in progress (e.g. for field dump) */
52                 virtual void notifyShaderOfDump(int dumptype, int frameNr,char *frameNrStr,string outfilename) = 0;
53
54                 /*! get output filename, returns global render outfile if empty */
55                 string getOutFilename( void ) { return mOutFilename; }
56
57         protected:
58
59                 //! vector for the objects
60                 vector<ntlGeometryObject *> mObjects;
61
62
63                 /*! surface output name for this simulation */
64                 string mOutFilename; 
65
66 private:
67 #ifdef WITH_CXX_GUARDEDALLOC
68         MEM_CXX_CLASS_ALLOC_FUNCS("ELBEEM:ntlGeometryShader")
69 #endif
70 };
71
72 #endif
73