00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef __GRINDER_CRANK_DOT_H
00028 #define __GRINDER_CRANK_DOT_H
00029
00030 #include <simBase/simBase.h>
00031 #include <stateGlift.h>
00032 #include "Tape.h"
00033 #include <volume/Volume.h>
00034 #include <mathGutz.h>
00035 #include "GrinderKeys.h"
00036 #include "GrinderKinds.h"
00037 #include "MetaProg.h"
00038 #include <arrayGutz.h>
00039
00040 class Crank : public SimBase {
00041 public:
00042 virtual ~Crank() {}
00043
00044
00045 int getKind() const { return _kind; }
00046
00047
00048 virtual glift::VertexShaderSP getVertShader()
00049 { return glift::VertexShaderSP(0); }
00050
00051
00052 virtual glift::PixelShaderSP getPixelShader()
00053 { return glift::PixelShaderSP(0); }
00054
00055
00056 virtual glift::ProgShaderSP getShader()
00057 { return glift::ProgShaderSP(0); }
00058
00059
00060
00061 int addMP(MetaProgSP m);
00062 int insertMP(int idx, MetaProgSP m);
00063 void setMP(SNameType name, MetaProgSP m);
00064 void setMP(int idx, MetaProgSP m);
00065 MetaProgSP getMP(int idx);
00066 MetaProgSP getMP(SNameType name);
00067 int getMPIdx(SNameType name);
00068 int getMPIdx(MetaProgSP m);
00069 MetaProgSP delMP(int idx);
00070 MetaProgSP delMP(SNameType name);
00071 MetaProgSP delMP(MetaProgSP m);
00072
00073 protected:
00074 Crank() : _kind(GK_UNKNOWN), _lastCh(1,-1) {}
00075 Crank(int kind) : _kind(kind) {}
00076 Crank(const Crank &c);
00077
00078
00079
00080
00081
00082
00083
00084
00085 virtual bool checkKind(MetaProgSP m)
00086 {
00087 if(_kind == GK_UNKNOWN) return false;
00088 if(m.isNull()) return true;
00089 if(m->getKind() == GK_UNKNOWN) return false;
00090 return !(_kind == m->getKind());
00091 }
00092
00093
00094 virtual void kindErr(const char *where = 0)
00095 {
00096 derr("Invalid Kind", where);
00097 }
00098
00099 bool mpsChanged();
00100 gutz::arrayo1i _lastCh;
00101
00102
00103 void addTape(TapeSPVec &v, TapeSP t);
00104 void insertTape(TapeSPVec &v, int i, TapeSP t);
00105 void setTape(TapeSPVec &v, int i, TapeSP t);
00106 TapeSP getTape(TapeSPVec &v, int i);
00107 void delTape(TapeSPVec &v, int i);
00108 void delTape(TapeSPVec &v, TapeSP t);
00109
00110 virtual GrinderKeysSP buildFPEnvKeys();
00111
00112 MetaProgSPVec _mprogs;
00113
00114 int _kind;
00115 };
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 class VPCrank : public Crank {
00126 public:
00127 virtual ~VPCrank() {}
00128
00129 virtual glift::VertexShaderSP getVertShader() = 0;
00130
00131 protected:
00132 VPCrank() : Crank(GK_VERTEX) {}
00133 VPCrank(const VPCrank &vpc);
00134
00135 glift::VertexShaderSP _lastVP;
00136 };
00137
00138
00139
00140
00141
00142 class FPCrank : public Crank {
00143 public:
00144 virtual ~FPCrank() {}
00145
00146 virtual glift::PixelShaderSP getPixelShader() = 0;
00147
00148 protected:
00149 FPCrank() : Crank(GK_FRAGMENT) {}
00150 FPCrank(const FPCrank &vpc);
00151
00152 glift::PixelShaderSP _lastPS;
00153 };
00154
00155 #endif