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 _SO_SHADER_PARAMETER_H_
00026 #define _SO_SHADER_PARAMETER_H_
00027
00028 #include <Inventor/SbBasic.h>
00029 #include <Inventor/nodes/SoNode.h>
00030 #include <Inventor/nodes/SoNode.h>
00031 #include <Inventor/fields/SoSFBufferObject.h>
00032 #include <Inventor/fields/SoSFString.h>
00033 #include <Inventor/fields/SoSFFloat.h>
00034 #include <Inventor/fields/SoSFInt32.h>
00035 #include <Inventor/fields/SoSFVec2f.h>
00036 #include <Inventor/fields/SoSFVec2i32.h>
00037 #include <Inventor/fields/SoSFVec3f.h>
00038 #include <Inventor/fields/SoSFVec3i32.h>
00039 #include <Inventor/fields/SoSFVec4f.h>
00040 #include <Inventor/fields/SoSFVec4i32.h>
00041 #include <Inventor/fields/SoSFBool.h>
00042 #include <Inventor/fields/SoMFFloat.h>
00043 #include <Inventor/fields/SoMFInt32.h>
00044 #include <Inventor/fields/SoMFShort.h>
00045 #include <Inventor/fields/SoMFVec2f.h>
00046 #include <Inventor/fields/SoMFVec2s.h>
00047 #include <Inventor/fields/SoMFVec2i32.h>
00048 #include <Inventor/fields/SoMFVec3f.h>
00049 #include <Inventor/fields/SoMFVec3s.h>
00050 #include <Inventor/fields/SoMFVec3i32.h>
00051 #include <Inventor/fields/SoMFVec4f.h>
00052 #include <Inventor/fields/SoMFVec4i32.h>
00053 #include <Inventor/fields/SoMFVec4s.h>
00054 #include <Inventor/fields/SoMFVec4b.h>
00055 #include <Inventor/fields/SoMFVec4ui32.h>
00056 #include <Inventor/fields/SoMFVec4us.h>
00057 #include <Inventor/fields/SoMFVec4ub.h>
00058 #include <Inventor/fields/SoSFMatrix.h>
00059 #include <Inventor/fields/SoMFMatrix.h>
00060 #include <Inventor/fields/SoSFNode.h>
00061 #include <Inventor/fields/SoMFNode.h>
00062 #include <Inventor/fields/SoSFEnum.h>
00063
00064 typedef unsigned int GLenum;
00065
00066 class SoGLShaderObject ;
00067 class SoShaderObject ;
00068 class SoShaderProgram ;
00069
00070 typedef WINGDIAPI void APIENTRY SoVPCacheFunc(const char *const);
00071 typedef WINGDIAPI void APIENTRY SoVPCacheFunc2(int, const char *const);
00072
00073
00074
00137 class SoShaderParameter : public SoNode {
00138
00139 SO_NODE_ABSTRACT_HEADER(SoShaderParameter);
00140
00141 public:
00146 SoSFString name;
00147
00152 SoSFInt32 identifier;
00153
00154
00155 private:
00156 static void initClass() ;
00157 static void exitClass() ;
00158
00159 SbBool isInternal() const;
00160
00161 private:
00165 SoShaderParameter();
00166
00167
00168 virtual ~SoShaderParameter();
00169
00170 };
00171
00314 class SoUniformShaderParameter : public SoShaderParameter {
00315
00316 SO_NODE_ABSTRACT_HEADER(SoUniformShaderParameter);
00317 public:SoDEPRECATED enum
00322 ShaderType {
00327 VERTEX,
00332 FRAGMENT
00333 };
00334
00343 SoSFEnum SoDEPRECATED shaderType;
00344
00345 virtual bool isEqual(const SoUniformShaderParameter* param) const = 0;
00346
00347 private:
00348 static void initClass() ;
00349 static void exitClass() ;
00350
00351
00352 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj)=0;
00353
00354
00355
00356
00357
00358
00359 SbBool isRegularBehavior() const
00360 { return m_isRegularBehavior ; }
00361 private:
00362 void GLRender(SoGLRenderAction *action);
00363
00364 private:
00368 SoUniformShaderParameter();
00369
00370 SbBool m_isRegularBehavior ;
00371
00372
00373 virtual ~SoUniformShaderParameter();
00374
00375 };
00376
00377
00418 class SoShaderParameter1f : public SoUniformShaderParameter {
00419
00420 SO_NODE_HEADER(SoShaderParameter1f);
00421
00422 public:
00423
00428 SoSFFloat value;
00429
00433 SoShaderParameter1f();
00434
00438 virtual bool isEqual(const SoUniformShaderParameter* param) const;
00439
00440 private:
00441
00442 static void initClass() ;
00443 static void exitClass() ;
00444
00445
00446 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
00447
00448 private:
00449
00450 virtual ~SoShaderParameter1f();
00451 };
00452
00453
00494 class SoShaderParameter1i : public SoUniformShaderParameter {
00495
00496 SO_NODE_HEADER(SoShaderParameter1i);
00497
00498 public:
00502 SoSFInt32 value;
00503
00507 SoShaderParameter1i();
00508
00509 virtual bool isEqual(const SoUniformShaderParameter* param) const;
00510
00511 private:
00512 static void initClass() ;
00513 static void exitClass() ;
00514
00515
00516 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
00517
00518 private:
00519
00520 virtual ~SoShaderParameter1i();
00521 };
00522
00523
00564 class SoShaderParameter2f : public SoUniformShaderParameter {
00565
00566 SO_NODE_HEADER(SoShaderParameter2f);
00567
00568 public:
00572 SoSFVec2f value;
00573
00577 SoShaderParameter2f();
00578
00579 virtual bool isEqual(const SoUniformShaderParameter* param) const;
00580
00581 private:
00582 static void initClass() ;
00583 static void exitClass() ;
00584
00585
00586 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
00587
00588 private:
00589
00590 virtual ~SoShaderParameter2f();
00591 };
00592
00593
00634 class SoShaderParameter2i : public SoUniformShaderParameter {
00635
00636 SO_NODE_HEADER(SoShaderParameter2i);
00637
00638 public:
00642 SoSFVec2i32 value;
00643
00647 SoShaderParameter2i();
00648
00649 virtual bool isEqual(const SoUniformShaderParameter* param) const;
00650
00651 private:
00652 static void initClass() ;
00653 static void exitClass() ;
00654
00655
00656 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
00657
00658 private:
00659
00660 virtual ~SoShaderParameter2i();
00661 };
00662
00663
00704 class SoShaderParameter3f : public SoUniformShaderParameter {
00705
00706 SO_NODE_HEADER(SoShaderParameter3f);
00707
00708 public:
00712 SoSFVec3f value;
00713
00717 SoShaderParameter3f();
00718
00719 virtual bool isEqual(const SoUniformShaderParameter* param) const;
00720
00721 private:
00722 static void initClass() ;
00723 static void exitClass() ;
00724
00725
00726 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
00727
00728 private:
00729
00730 virtual ~SoShaderParameter3f();
00731 };
00732
00733
00774 class SoShaderParameter3i : public SoUniformShaderParameter {
00775
00776 SO_NODE_HEADER(SoShaderParameter3i);
00777
00778 public:
00782 SoSFVec3i32 value;
00783
00787 SoShaderParameter3i();
00788
00789 virtual bool isEqual(const SoUniformShaderParameter* param) const;
00790
00791 private:
00792 static void initClass() ;
00793 static void exitClass() ;
00794
00795
00796 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
00797
00798 private:
00799
00800 virtual ~SoShaderParameter3i();
00801
00802 };
00803
00804
00845 class SoShaderParameter4f : public SoUniformShaderParameter {
00846
00847 SO_NODE_HEADER(SoShaderParameter4f);
00848
00849 public:
00853 SoSFVec4f value;
00854
00858 SoShaderParameter4f();
00859
00860 virtual bool isEqual(const SoUniformShaderParameter* param) const;
00861
00862 private:
00863 static void initClass() ;
00864 static void exitClass() ;
00865
00866
00867 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
00868
00869 private:
00870
00871 virtual ~SoShaderParameter4f();
00872 };
00873
00874
00915 class SoShaderParameter4i : public SoUniformShaderParameter {
00916
00917 SO_NODE_HEADER(SoShaderParameter4i);
00918
00919 public:
00923 SoSFVec4i32 value;
00924
00928 SoShaderParameter4i();
00929
00930 virtual bool isEqual(const SoUniformShaderParameter* param) const;
00931
00932 private:
00933 static void initClass() ;
00934 static void exitClass() ;
00935
00936
00937 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
00938
00939 private:
00940
00941 virtual ~SoShaderParameter4i();
00942 };
00943
00944
00987 class SoShaderParameterArray1f : public SoUniformShaderParameter {
00988
00989 SO_NODE_HEADER(SoShaderParameterArray1f);
00990
00991 public:
00995 SoMFFloat value;
00996
01000 SoShaderParameterArray1f();
01001
01002 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01003
01004 private:
01005 static void initClass() ;
01006 static void exitClass() ;
01007
01008
01009 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01010
01011 private:
01012
01013 virtual ~SoShaderParameterArray1f();
01014 };
01015
01016
01059 class SoShaderParameterArray1i : public SoUniformShaderParameter {
01060
01061 SO_NODE_HEADER(SoShaderParameterArray1i);
01062
01063 public:
01067 SoMFInt32 value;
01068
01072 SoShaderParameterArray1i();
01073
01074 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01075
01076 private:
01077 static void initClass() ;
01078 static void exitClass() ;
01079
01080
01081 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01082
01083 private:
01084
01085 virtual ~SoShaderParameterArray1i();
01086 };
01087
01088
01131 class SoShaderParameterArray2f : public SoUniformShaderParameter {
01132
01133 SO_NODE_HEADER(SoShaderParameterArray2f);
01134
01135 public:
01139 SoMFVec2f value;
01140
01144 SoShaderParameterArray2f();
01145
01146 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01147
01148 private:
01149 static void initClass() ;
01150 static void exitClass() ;
01151
01152
01153 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01154
01155 private:
01156
01157 virtual ~SoShaderParameterArray2f();
01158 };
01159
01160
01203 class SoShaderParameterArray2i : public SoUniformShaderParameter {
01204
01205 SO_NODE_HEADER(SoShaderParameterArray2i);
01206
01207 public:
01211 SoMFVec2i32 value;
01212
01216 SoShaderParameterArray2i();
01217
01218 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01219
01220 private:
01221 static void initClass() ;
01222 static void exitClass() ;
01223
01224
01225 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01226
01227 private:
01228
01229 virtual ~SoShaderParameterArray2i();
01230 };
01231
01232
01275 class SoShaderParameterArray3f : public SoUniformShaderParameter {
01276
01277 SO_NODE_HEADER(SoShaderParameterArray3f);
01278
01279 public:
01283 SoMFVec3f value;
01284
01288 SoShaderParameterArray3f();
01289
01290 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01291
01292 private:
01293 static void initClass() ;
01294 static void exitClass() ;
01295
01296
01297 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01298
01299 private:
01300
01301 virtual ~SoShaderParameterArray3f();
01302 };
01303
01304
01348 class SoShaderParameterArray3i : public SoUniformShaderParameter {
01349
01350 SO_NODE_HEADER(SoShaderParameterArray3i);
01351
01352 public:
01356 SoMFVec3i32 value;
01357
01361 SoShaderParameterArray3i();
01362
01363 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01364
01365 private:
01366 static void initClass() ;
01367 static void exitClass() ;
01368
01369
01370 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01371
01372 private:
01373
01374 virtual ~SoShaderParameterArray3i();
01375 };
01376
01377
01421 class SoShaderParameterArray4f : public SoUniformShaderParameter {
01422
01423 SO_NODE_HEADER(SoShaderParameterArray4f);
01424
01425 public:
01429 SoMFVec4f value;
01430
01434 SoShaderParameterArray4f();
01435
01436 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01437
01438 private:
01439 static void initClass() ;
01440 static void exitClass() ;
01441
01442
01443 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01444
01445 private:
01446
01447 virtual ~SoShaderParameterArray4f();
01448
01449 };
01450
01451
01496 class SoShaderParameterArray4i : public SoUniformShaderParameter {
01497
01498 SO_NODE_HEADER(SoShaderParameterArray4i);
01499
01500 public:
01504 SoMFVec4i32 value;
01505
01509 SoShaderParameterArray4i();
01510
01511 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01512
01513 private:
01514 static void initClass() ;
01515 static void exitClass() ;
01516
01517
01518 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01519
01520 private:
01521
01522 virtual ~SoShaderParameterArray4i();
01523 };
01524
01525
01574 class SoShaderParameterMatrix : public SoUniformShaderParameter {
01575
01576 SO_NODE_HEADER(SoShaderParameterMatrix);
01577
01578 public:
01582 SoSFMatrix value;
01583
01587 SoShaderParameterMatrix();
01588
01589 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01590
01591 private:
01592 static void initClass() ;
01593 static void exitClass() ;
01594
01595
01596 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01597
01598 private:
01599
01600 virtual ~SoShaderParameterMatrix();
01601
01602 };
01603
01604
01649 class SoShaderParameterMatrixArray : public SoUniformShaderParameter {
01650
01651 SO_NODE_HEADER(SoShaderParameterMatrixArray);
01652
01653 public:
01657 SoMFMatrix value;
01658
01662 SoShaderParameterMatrixArray();
01663
01664 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01665
01666 private:
01667 static void initClass() ;
01668 static void exitClass() ;
01669
01670
01671 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01672
01673 private:
01674
01675 virtual ~SoShaderParameterMatrixArray();
01676 };
01677
01678
01732 class SoShaderStateMatrixParameter : public SoUniformShaderParameter {
01733
01734 SO_NODE_HEADER(SoShaderStateMatrixParameter);
01735
01736 public:
01737
01739 enum MatrixType {
01743 MODELVIEW,
01744
01748 PROJECTION,
01749
01753 TEXTURE,
01754
01758 MODELVIEW_PROJECTION
01759 };
01760
01762 enum MatrixTransform {
01766 IDENTITY,
01767
01771 TRANSPOSE,
01772
01776 INVERSE,
01777
01781 INVERSE_TRANSPOSE
01782 };
01783
01787 SoSFEnum matrixType;
01788
01792 SoSFEnum matrixTransform;
01793
01797 SoShaderStateMatrixParameter();
01798
01799 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01800
01801 private:
01802 static void initClass() ;
01803 static void exitClass() ;
01804
01805
01806 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01807
01808 private:
01809
01810 virtual ~SoShaderStateMatrixParameter();
01811
01812 };
01813
01814
01855 class SoShaderParameterStruct : public SoUniformShaderParameter {
01856
01857 SO_NODE_HEADER(SoShaderParameterStruct);
01858
01859 public:
01863 SoShaderParameterStruct();
01867 SoMFNode value;
01868
01869 virtual bool isEqual(const SoUniformShaderParameter* param) const;
01870
01871 private:
01872 static void initClass();
01873 static void exitClass();
01874
01875
01876 virtual void updateParameter(SoGLRenderAction* action, SoGLShaderObject *glShadObj);
01877
01878 private:
01879
01880 virtual ~SoShaderParameterStruct();
01881 };
01882
01883
01884
01993 class SoVertexShaderParameter : public SoShaderParameter {
01994
01995 SO_NODE_ABSTRACT_HEADER(SoVertexShaderParameter);
01996
01997 private:
01998 virtual void doAction(SoAction *action);
01999 virtual void GLRender(SoGLRenderAction *action);
02000 virtual void callback(SoCallbackAction *action);
02001 virtual void getBoundingBox( SoGetBoundingBoxAction *action );
02002 virtual void rayPick(SoRayPickAction *action );
02003 virtual void getPrimitiveCount(SoGetPrimitiveCountAction *action );
02004
02005 private:
02006 static void initClass();
02007 static void exitClass();
02008
02009 static SbBool areVertexAttribFuncAvailable();
02010 static SbBool areVertexAttribDivisorFuncAvailable();
02011
02012 void getVertexAttribIndex(SoState * state, int& firstInd, int& size);
02013
02014 virtual SoVPCacheFunc2 * getVertexAttribFunc() = 0;
02015
02016 virtual const char * getVertexAttribPtr(int i=0) = 0;
02017 virtual size_t getVertexAttribStride() = 0;
02018 virtual int getVertexAttribNum() = 0;
02019 virtual GLenum getVertexAttribType() = 0;
02020 virtual int getVertexAttribSize() = 0;
02021 virtual SbBool getVertexAttribIsToNormalize() = 0;
02022 virtual unsigned int getVertexAttribDivisor() { return 0; }
02023 private:
02027 SoVertexShaderParameter();
02028
02029
02030 virtual ~SoVertexShaderParameter();
02031
02032 };
02033
02034
02070 class SoVertexShaderParameter1f : public SoVertexShaderParameter {
02071
02072 SO_NODE_HEADER(SoVertexShaderParameter1f);
02073
02074 public:
02078 SoVertexShaderParameter1f();
02079
02083 SoMFFloat value;
02084
02085 private:
02086 static void initClass();
02087 static void exitClass();
02088
02089 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02090
02091 virtual const char * getVertexAttribPtr( int ) { return (char *)value.getValues(0); }
02092 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02093 virtual int getVertexAttribNum() { return value.getNum(); }
02094 virtual GLenum getVertexAttribType();
02095 virtual int getVertexAttribSize() { return 1; }
02096 virtual SbBool getVertexAttribIsToNormalize() { return FALSE; }
02097
02098 private:
02099
02100 virtual ~SoVertexShaderParameter1f();
02101 };
02102
02103
02104
02140 class SoVertexShaderParameter1s : public SoVertexShaderParameter {
02141
02142 SO_NODE_HEADER(SoVertexShaderParameter1s);
02143
02144 public:
02148 SoVertexShaderParameter1s();
02149
02153 SoMFShort value;
02154
02155 private:
02156 static void initClass();
02157 static void exitClass();
02158
02159 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02160
02161 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
02162 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02163 virtual int getVertexAttribNum() { return value.getNum(); }
02164 virtual GLenum getVertexAttribType();
02165 virtual int getVertexAttribSize() { return 1; }
02166 virtual SbBool getVertexAttribIsToNormalize() { return FALSE; }
02167
02168 private:
02169
02170 virtual ~SoVertexShaderParameter1s();
02171 };
02172
02173
02174
02210 class SoVertexShaderParameter2f : public SoVertexShaderParameter {
02211
02212 SO_NODE_HEADER(SoVertexShaderParameter2f);
02213
02214 public:
02218 SoVertexShaderParameter2f();
02219
02223 SoMFVec2f value;
02224
02225 private:
02226 static void initClass();
02227 static void exitClass();
02228
02229 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02230
02231 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
02232 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02233 virtual int getVertexAttribNum() { return value.getNum(); }
02234 virtual GLenum getVertexAttribType();
02235 virtual int getVertexAttribSize() { return 2; }
02236 virtual SbBool getVertexAttribIsToNormalize() { return FALSE; }
02237
02238 private:
02239
02240 virtual ~SoVertexShaderParameter2f();
02241 };
02242
02243
02244
02280 class SoVertexShaderParameter2s : public SoVertexShaderParameter {
02281
02282 SO_NODE_HEADER(SoVertexShaderParameter2s);
02283
02284 public:
02288 SoVertexShaderParameter2s();
02289
02293 SoMFVec2s value;
02294
02295 private:
02296 static void initClass();
02297 static void exitClass();
02298
02299 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02300
02301 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
02302 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02303 virtual int getVertexAttribNum() { return value.getNum(); }
02304 virtual GLenum getVertexAttribType();
02305 virtual int getVertexAttribSize() { return 2; }
02306 virtual SbBool getVertexAttribIsToNormalize() { return FALSE; }
02307
02308 private:
02309
02310 virtual ~SoVertexShaderParameter2s();
02311 };
02312
02313
02314
02350 class SoVertexShaderParameter3f : public SoVertexShaderParameter {
02351
02352 SO_NODE_HEADER(SoVertexShaderParameter3f);
02353
02354 public:
02358 SoVertexShaderParameter3f();
02359
02363 SoMFVec3f value;
02364
02365 private:
02366 static void initClass();
02367 static void exitClass();
02368
02369 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02370
02371 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
02372 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02373 virtual int getVertexAttribNum() { return value.getNum(); }
02374 virtual GLenum getVertexAttribType();
02375 virtual int getVertexAttribSize() { return 3; }
02376 virtual SbBool getVertexAttribIsToNormalize() { return FALSE; }
02377
02378 private:
02379
02380 virtual ~SoVertexShaderParameter3f();
02381 };
02382
02383
02384
02420 class SoVertexShaderParameter3s : public SoVertexShaderParameter {
02421
02422 SO_NODE_HEADER(SoVertexShaderParameter3s);
02423
02424 public:
02428 SoVertexShaderParameter3s();
02429
02433 SoMFVec3s value;
02434
02435 private:
02436 static void initClass();
02437 static void exitClass();
02438
02439 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02440
02441 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
02442 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02443 virtual int getVertexAttribNum() { return value.getNum(); }
02444 virtual GLenum getVertexAttribType();
02445 virtual int getVertexAttribSize() { return 3; }
02446 virtual SbBool getVertexAttribIsToNormalize() { return FALSE; }
02447
02448 private:
02449
02450 virtual ~SoVertexShaderParameter3s();
02451 };
02452
02453
02454
02490 class SoVertexShaderParameter4f : public SoVertexShaderParameter {
02491
02492 SO_NODE_HEADER(SoVertexShaderParameter4f);
02493
02494 public:
02498 SoVertexShaderParameter4f();
02499
02503 SoMFVec4f value;
02504
02505 private:
02506 static void initClass();
02507 static void exitClass();
02508
02509 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02510
02511 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
02512 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02513 virtual int getVertexAttribNum() { return value.getNum(); }
02514 virtual GLenum getVertexAttribType();
02515 virtual int getVertexAttribSize() { return 4; }
02516 virtual SbBool getVertexAttribIsToNormalize() { return FALSE; }
02517
02518 private:
02519
02520 virtual ~SoVertexShaderParameter4f();
02521 };
02522
02523
02524
02567 class SoVertexShaderParameter4i : public SoVertexShaderParameter {
02568
02569 SO_NODE_HEADER(SoVertexShaderParameter4i);
02570
02571 public:
02575 SoVertexShaderParameter4i();
02576
02580 SoMFVec4i32 value;
02581
02585 SoSFBool rangeScaling;
02586
02587 private:
02588 static void initClass();
02589 static void exitClass();
02590
02591 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02592
02593 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
02594 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02595 virtual int getVertexAttribNum() { return value.getNum(); }
02596 virtual GLenum getVertexAttribType();
02597 virtual int getVertexAttribSize() { return 4; }
02598 virtual SbBool getVertexAttribIsToNormalize() { return rangeScaling.getValue(); }
02599
02600 private:
02601
02602 virtual ~SoVertexShaderParameter4i();
02603 };
02604
02605
02606
02649 class SoVertexShaderParameter4s : public SoVertexShaderParameter {
02650
02651 SO_NODE_HEADER(SoVertexShaderParameter4s);
02652
02653 public:
02657 SoVertexShaderParameter4s();
02658
02662 SoMFVec4s value;
02663
02667 SoSFBool rangeScaling;
02668
02669 private:
02670 static void initClass();
02671 static void exitClass();
02672
02673 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02674
02675 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
02676 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02677 virtual int getVertexAttribNum() { return value.getNum(); }
02678 virtual GLenum getVertexAttribType();
02679 virtual int getVertexAttribSize() { return 4; }
02680 virtual SbBool getVertexAttribIsToNormalize() { return rangeScaling.getValue(); }
02681
02682 private:
02683
02684 virtual ~SoVertexShaderParameter4s();
02685 };
02686
02687
02688
02731 class SoVertexShaderParameter4b : public SoVertexShaderParameter {
02732
02733 SO_NODE_HEADER(SoVertexShaderParameter4b);
02734
02735 public:
02739 SoVertexShaderParameter4b();
02740
02744 SoMFVec4b value;
02745
02749 SoSFBool rangeScaling;
02750
02751 private:
02752 static void initClass();
02753 static void exitClass();
02754
02755 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02756
02757 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
02758 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02759 virtual int getVertexAttribNum() { return value.getNum(); }
02760 virtual GLenum getVertexAttribType();
02761 virtual int getVertexAttribSize() { return 4; }
02762 virtual SbBool getVertexAttribIsToNormalize() { return rangeScaling.getValue(); }
02763
02764 private:
02765
02766 virtual ~SoVertexShaderParameter4b();
02767 };
02768
02769
02770
02813 class SoVertexShaderParameter4ui : public SoVertexShaderParameter {
02814
02815 SO_NODE_HEADER(SoVertexShaderParameter4ui);
02816
02817 public:
02821 SoVertexShaderParameter4ui();
02822
02826 SoMFVec4ui32 value;
02827
02831 SoSFBool rangeScaling;
02832
02833 private:
02834 static void initClass();
02835 static void exitClass();
02836
02837 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02838
02839 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
02840 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02841 virtual int getVertexAttribNum() { return value.getNum(); }
02842 virtual GLenum getVertexAttribType();
02843 virtual int getVertexAttribSize() { return 4; }
02844 virtual SbBool getVertexAttribIsToNormalize() { return rangeScaling.getValue(); }
02845
02846 private:
02847
02848 virtual ~SoVertexShaderParameter4ui();
02849 };
02850
02851
02852
02896 class SoVertexShaderParameter4us : public SoVertexShaderParameter {
02897
02898 SO_NODE_HEADER(SoVertexShaderParameter4us);
02899
02900 public:
02904 SoVertexShaderParameter4us();
02905
02909 SoMFVec4us value;
02910
02914 SoSFBool rangeScaling;
02915
02916 private:
02917 static void initClass();
02918 static void exitClass();
02919
02920 virtual SoVPCacheFunc2 * getVertexAttribFunc();
02921
02922 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
02923 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
02924 virtual int getVertexAttribNum() { return value.getNum(); }
02925 virtual GLenum getVertexAttribType();
02926 virtual int getVertexAttribSize() { return 4; }
02927 virtual SbBool getVertexAttribIsToNormalize() { return rangeScaling.getValue(); }
02928
02929 private:
02930
02931 virtual ~SoVertexShaderParameter4us();
02932 };
02933
02934
02935
02979 class SoVertexShaderParameter4ub : public SoVertexShaderParameter {
02980
02981 SO_NODE_HEADER(SoVertexShaderParameter4ub);
02982
02983 public:
02987 SoVertexShaderParameter4ub();
02988
02992 SoMFVec4ub value;
02993
02997 SoSFBool rangeScaling;
02998
02999 private:
03000 static void initClass();
03001 static void exitClass();
03002
03003 virtual SoVPCacheFunc2 * getVertexAttribFunc();
03004
03005 virtual const char * getVertexAttribPtr(int) { return (char *)value.getValues(0); }
03006 virtual size_t getVertexAttribStride() { return value.getValueSize(); }
03007 virtual int getVertexAttribNum() { return value.getNum(); }
03008 virtual GLenum getVertexAttribType();
03009 virtual int getVertexAttribSize() { return 4; }
03010 virtual SbBool getVertexAttribIsToNormalize() { return rangeScaling.getValue(); }
03011
03012 private:
03013
03014 virtual ~SoVertexShaderParameter4ub();
03015 };
03016
03017
03018
03057 class SoVertexShaderParameterMatrix : public SoVertexShaderParameter {
03058
03059 SO_NODE_HEADER(SoVertexShaderParameterMatrix);
03060
03061 public:
03065 SoVertexShaderParameterMatrix();
03066
03070 SoMFMatrix value;
03071
03072 private:
03073 virtual void doAction(SoAction *action);
03074
03075 private:
03076 static void initClass();
03077 static void exitClass();
03078
03079 virtual SoVPCacheFunc2 * getVertexAttribFunc();
03080
03081 virtual const char * getVertexAttribPtr(int i=0);
03082 virtual size_t getVertexAttribStride() { return sizeof(SbMat); }
03083 virtual int getVertexAttribNum() { return value.getNum(); }
03084 virtual GLenum getVertexAttribType();
03085 virtual int getVertexAttribSize() { return 4; }
03086 virtual SbBool getVertexAttribIsToNormalize() { return FALSE; }
03087
03088 private:
03089
03090 virtual ~SoVertexShaderParameterMatrix();
03091
03092 private:
03093
03094
03095
03096
03097 SbMat * m_columnMajorOrderMatrices;
03098 int m_matricesNumber;
03099 void storeColumnMajorOrderMatrices(int startIndex);
03100 };
03101
03102
03103
03104
03143 class SoVertexShaderParameterBufferObject : public SoVertexShaderParameter {
03144
03145 SO_NODE_HEADER(SoVertexShaderParameterBufferObject);
03146
03147 public:
03151 SoVertexShaderParameterBufferObject();
03152
03156 SoSFBufferObject value;
03157
03162 SoSFInt32 components;
03163
03168 SoSFEnum type;
03169
03174 SoSFInt32 offset;
03175
03181 SoSFInt32 stride;
03182
03187 SoSFBool shouldBeNormalized;
03188
03189 private:
03190 virtual void doAction(SoAction *action);
03191
03192 private:
03193
03194 static void initClass();
03195 static void exitClass();
03196
03197 virtual SoVPCacheFunc2 * getVertexAttribFunc();
03198
03199 virtual const char * getVertexAttribPtr(int)
03200 {
03201 uintptr_t castedOffest = (uintptr_t)offset.getValue();
03202 return reinterpret_cast<char*>(castedOffest);
03203 }
03204 virtual size_t getVertexAttribStride();
03205 virtual int getVertexAttribNum();
03206 virtual GLenum getVertexAttribType();
03207 virtual int getVertexAttribSize() { return components.getValue(); }
03208 virtual SbBool getVertexAttribIsToNormalize() { return shouldBeNormalized.getValue(); }
03209
03210 private:
03211
03212 virtual ~SoVertexShaderParameterBufferObject();
03213 };
03214
03215
03216
03217
03218
03219 #endif
03220
03221