f43df6539e62503795464176f3e7892daefd873a
[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 class ntlGeometryObject;
17 class ntlRenderGlobals;
18
19 class ntlGeometryShader : 
20         public ntlGeometryClass
21 {
22
23         public:
24
25                 //! Default constructor
26                 inline ntlGeometryShader() :
27                         ntlGeometryClass(), mOutFilename("")
28                         {};
29                 //! Default destructor
30                 virtual ~ntlGeometryShader() {};
31
32                 //! Return type id
33                 virtual int getTypeId() { return GEOCLASSTID_SHADER; }
34
35                 /*! Initialize object, should return !=0 upon error */
36                 virtual int initializeShader() = 0;
37
38                 /*! Do further object initialization after all geometry has been constructed, should return !=0 upon error */
39                 virtual int postGeoConstrInit(ntlRenderGlobals *glob) { glob=NULL; /*unused*/ return 0; };
40
41                 /*! Get start iterator for all objects */
42                 virtual vector<ntlGeometryObject *>::iterator getObjectsBegin() { return mObjects.begin(); }
43                 /*! Get end iterator for all objects */
44                 virtual vector<ntlGeometryObject *>::iterator getObjectsEnd() { return mObjects.end(); }
45                 
46                 /*! notify object that dump is in progress (e.g. for field dump) */
47                 virtual void notifyShaderOfDump(int dumptype, int frameNr,char *frameNrStr,string outfilename) = 0;
48
49                 /*! get output filename, returns global render outfile if empty */
50                 string getOutFilename( void ) { return mOutFilename; }
51
52         protected:
53
54                 //! vector for the objects
55                 vector<ntlGeometryObject *> mObjects;
56
57
58                 /*! surface output name for this simulation */
59                 string mOutFilename; 
60 };
61
62 #endif
63