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 #ifndef VRS_NVIDIA_VERTEXPROGRAMNV_H_
00026 #define VRS_NVIDIA_VERTEXPROGRAMNV_H_
00027
00028 #include <vrs/monoattribute.h>
00029 #include <vrs/callback.h>
00030 #include <vrs/container/array.h>
00031 #include <vrs/opengl/openglconfig.h>
00032
00033 namespace VRS {
00034
00036 class VRS_CORE_API VertexProgramNV : public MonoAttribute {
00037 public:
00038 VertexProgramNV(const char* program = "",
00039 Callback* configure = NULL, Callback* cleanUp = NULL
00040 );
00051 void setProgram(const char* program);
00052 const char* getProgram() const;
00055 void setConfigureCallback(Callback* configure);
00056 Callback* getConfigureCallback() const;
00060 void setCleanUpCallback(Callback* cleanup);
00061 Callback* getCleanUpCallback() const;
00063
00064 struct MatrixTracking {
00066 MatrixTracking(GLenum m, GLenum t, unsigned int r) : matrix(m), transform(t), reg(r) {}
00067 GLenum matrix;
00068 GLenum transform;
00069 unsigned int reg;
00070 };
00071 void setMatrixTracking(GLenum matrix, GLenum transform, unsigned int targetRegister);
00077 Iterator<MatrixTracking*>* matrixTracking() const;
00079
00080 struct VertexParameter {
00082 VertexParameter(double x, double y, double z, double w, unsigned int targetRegister)
00083 : reg(targetRegister) { param[0] = x; param[1] = y; param[2] = z; param[3] = w; }
00084 double param[4];
00085 unsigned int reg;
00086 };
00087 void setVertexParameter(double x, double y, double z, double w, unsigned int targetRegister);
00093 Iterator<VertexParameter*>* vertexParameter() const;
00095
00096 VRS_TYPEINFO(VertexProgramNV, MonoAttribute);
00097 VRS_SERIALIZABLE(VertexProgramNV);
00098
00099 private:
00100
00101 friend class VertexProgramPainterNV;
00102
00103 std::string str_;
00104 SO<Callback> configure_;
00105 SO<Callback> cleanUp_;
00106
00107 SO<NonPersistentArray<MatrixTracking*> > matrices_;
00108 SO<NonPersistentArray<VertexParameter*> > params_;
00109
00110 TransactionNo lastChange_;
00111
00112 TransactionNo lastUpdate_;
00113 };
00114
00115 inline Callback* VertexProgramNV::getConfigureCallback() const { return configure_; }
00116
00117 inline Callback* VertexProgramNV::getCleanUpCallback() const { return cleanUp_; }
00118
00119 }
00120
00121 #endif // VRS_NVIDIA_VERTEXPROGRAMNV_H_