BGE modifier: generate correct physic shape, share static derived mesh, share display...
[blender-staging.git] / source / gameengine / Rasterizer / RAS_OpenGLRasterizer / RAS_ListRasterizer.h
1 #ifndef __RAS_LISTRASTERIZER_H__
2 #define __RAS_LISTRASTERIZER_H__
3
4 #include "RAS_MaterialBucket.h"
5 #include "RAS_VAOpenGLRasterizer.h"
6 #include <vector>
7 #include <map>
8
9 class RAS_ListRasterizer;
10 class RAS_ListSlot : public KX_ListSlot
11 {
12         friend class RAS_ListRasterizer;
13         unsigned int m_list;
14         unsigned int m_flag;
15         RAS_ListRasterizer* m_rasty;
16 public:
17         RAS_ListSlot(RAS_ListRasterizer* rasty);
18         virtual ~RAS_ListSlot();
19         virtual void SetModified(bool mod);
20         virtual int Release();
21
22         void RemoveList();
23         void DrawList();
24         void EndList();
25         bool End();
26
27 };
28
29 enum RAS_ListSlotFlags  {
30         LIST_CREATE             =1,
31         LIST_MODIFY             =2,
32         LIST_STREAM             =4,
33         LIST_NOCREATE   =8,
34         LIST_BEGIN              =16,
35         LIST_END                =32,
36         LIST_REGEN              =64,
37         LIST_DERIVEDMESH=128,
38 };
39
40 struct DerivedMesh;
41
42 typedef std::map<RAS_DisplayArrayList, RAS_ListSlot*> RAS_ArrayLists;
43 typedef std::map<DerivedMesh*, RAS_ListSlot*>             RAS_DerivedMeshLists;
44
45 class RAS_ListRasterizer : public RAS_VAOpenGLRasterizer
46 {
47         bool mUseVertexArrays;
48         bool mATI;
49         RAS_ArrayLists mArrayLists;
50         RAS_DerivedMeshLists mDerivedMeshLists;
51
52         RAS_ListSlot* FindOrAdd(class RAS_MeshSlot& ms);
53         void ReleaseAlloc();
54
55 public:
56         void RemoveListSlot(RAS_ListSlot* list);
57         RAS_ListRasterizer(RAS_ICanvas* canvas, bool useVertexArrays=false, bool lock=false);
58         virtual ~RAS_ListRasterizer();
59
60         virtual void    IndexPrimitives(class RAS_MeshSlot& ms);
61         virtual void    IndexPrimitivesMulti(class RAS_MeshSlot& ms);
62
63         virtual bool    Init();
64         virtual void    Exit();
65
66         virtual void    SetDrawingMode(int drawingmode);
67
68         virtual bool    QueryLists(){return true;}
69 };
70
71 #endif