Coin Logo http://www.sim.no
http://www.coin3d.org

SoShaderParameter.h

00001 #ifndef COIN_SOSHADERPARAMETER_H
00002 #define COIN_SOSHADERPARAMETER_H
00003 
00004 /**************************************************************************\
00005  *
00006  *  This file is part of the Coin 3D visualization library.
00007  *  Copyright (C) 1998-2007 by Systems in Motion.  All rights reserved.
00008  *
00009  *  This library is free software; you can redistribute it and/or
00010  *  modify it under the terms of the GNU General Public License
00011  *  ("GPL") version 2 as published by the Free Software Foundation.
00012  *  See the file LICENSE.GPL at the root directory of this source
00013  *  distribution for additional information about the GNU GPL.
00014  *
00015  *  For using Coin with software that can not be combined with the GNU
00016  *  GPL, and for taking advantage of the additional benefits of our
00017  *  support services, please contact Systems in Motion about acquiring
00018  *  a Coin Professional Edition License.
00019  *
00020  *  See http://www.coin3d.org/ for more information.
00021  *
00022  *  Systems in Motion, Postboks 1283, Pirsenteret, 7462 Trondheim, NORWAY.
00023  *  http://www.sim.no/  sales@sim.no  coin-support@coin3d.org
00024  *
00025 \**************************************************************************/
00026 
00027 #include <Inventor/nodes/SoNode.h>
00028 #include <Inventor/nodes/SoSubNode.h>
00029 #include <Inventor/fields/SoSFString.h>
00030 #include <Inventor/fields/SoSFFloat.h>
00031 #include <Inventor/fields/SoSFInt32.h>
00032 #include <Inventor/fields/SoSFVec2f.h>
00033 #include <Inventor/fields/SoSFVec3f.h>
00034 #include <Inventor/fields/SoSFVec4f.h>
00035 #include <Inventor/fields/SoMFFloat.h>
00036 #include <Inventor/fields/SoMFInt32.h>
00037 #include <Inventor/fields/SoMFVec2f.h>
00038 #include <Inventor/fields/SoMFVec3f.h>
00039 #include <Inventor/fields/SoMFVec4f.h>
00040 #include <Inventor/fields/SoSFMatrix.h>
00041 #include <Inventor/fields/SoMFMatrix.h>
00042 #include <Inventor/fields/SoSFNode.h>
00043 #include <Inventor/fields/SoSFEnum.h>
00044 #include <Inventor/fields/SoSFImage.h>
00045 
00046 #include <Inventor/fields/SoSFVec2i32.h>
00047 #include <Inventor/fields/SoSFVec3i32.h>
00048 #include <Inventor/fields/SoSFVec4i32.h>
00049 #include <Inventor/fields/SoMFVec2i32.h>
00050 #include <Inventor/fields/SoMFVec3i32.h>
00051 #include <Inventor/fields/SoMFVec4i32.h>
00052 
00053 class SoGLShaderParameter;
00054 class SoGLShaderObject;
00055 
00056 // *************************************************************************
00057 
00058 // FIXME: split to one header file for each class? 20050120 mortene.
00059 
00060 /* **************************************************************************
00061  * *** SoShaderParameter ***
00062  * **************************************************************************/
00063 
00064 class COIN_DLL_API SoShaderParameter : public SoNode {
00065   typedef SoNode inherited;
00066   SO_NODE_ABSTRACT_HEADER(SoShaderParameter);
00067 
00068 public:
00069   SoSFString name;
00070   SoSFInt32 identifier;
00071 
00072   SoINTERNAL public:
00073   static void initClass();
00074 
00075 protected:
00076   SoShaderParameter();
00077   virtual ~SoShaderParameter();
00078 };
00079 
00080 /* **************************************************************************
00081  * *** SoUniformShaderParameter ***
00082  * **************************************************************************/
00083 class SoUniformShaderParameterP;
00084 
00085 class COIN_DLL_API SoUniformShaderParameter : public SoShaderParameter {
00086   typedef SoShaderParameter inherited;
00087   SO_NODE_ABSTRACT_HEADER(SoUniformShaderParameter);
00088 
00089   SoINTERNAL public:
00090   static void initClass(void);
00091   virtual void updateParameter(SoGLShaderObject *shaderObject) = 0;
00092   SbBool isRegularBehavior() const { return isRegularBehaviorFlag; }
00093 
00094 protected:
00095   SoUniformShaderParameter();
00096   virtual ~SoUniformShaderParameter();
00097 
00098   SbBool isRegularBehaviorFlag;
00099 
00100   SoGLShaderParameter * getGLShaderParameter(const uint32_t cachecontext);
00101   void ensureParameter(SoGLShaderObject * shader);
00102 
00103 private:
00104   SoUniformShaderParameterP * pimpl;
00105 };
00106 
00107 /* **************************************************************************
00108  * *** SoShaderParameter1f ***
00109  * **************************************************************************/
00110 
00111 class COIN_DLL_API SoShaderParameter1f : public SoUniformShaderParameter {
00112   typedef SoUniformShaderParameter inherited;
00113   SO_NODE_HEADER(SoShaderParameter1f);
00114 
00115 public:
00116   SoSFFloat value;
00117   SoShaderParameter1f();
00118 
00119   SoINTERNAL public:
00120   static void initClass();
00121   virtual void updateParameter(SoGLShaderObject *shaderObject);
00122 
00123 protected:
00124   virtual ~SoShaderParameter1f();
00125 };
00126 
00127 /* **************************************************************************
00128  * *** SoShaderParameter1i ***
00129  * **************************************************************************/
00130 
00131 class COIN_DLL_API SoShaderParameter1i : public SoUniformShaderParameter {
00132   typedef SoUniformShaderParameter inherited;
00133   SO_NODE_HEADER(SoShaderParameter1i);
00134 
00135 public:
00136   SoSFInt32 value;
00137   SoShaderParameter1i();
00138 
00139   SoINTERNAL public:
00140   static void initClass();
00141   virtual void updateParameter(SoGLShaderObject *shaderObject);
00142 
00143 protected:
00144   virtual ~SoShaderParameter1i();
00145 };
00146 
00147 /* **************************************************************************
00148  * *** SoShaderParameter2f ***
00149  * **************************************************************************/
00150 
00151 class COIN_DLL_API SoShaderParameter2f : public SoUniformShaderParameter {
00152   typedef SoUniformShaderParameter inherited;
00153   SO_NODE_HEADER(SoShaderParameter2f);
00154 
00155 public:
00156   SoSFVec2f value;
00157   SoShaderParameter2f();
00158 
00159   SoINTERNAL public:
00160   static void initClass();
00161   virtual void updateParameter(SoGLShaderObject *shaderObject);
00162 
00163 protected:
00164   virtual ~SoShaderParameter2f();
00165 };
00166 
00167 /* **************************************************************************
00168  * *** SoShaderParameter2i ***
00169  * **************************************************************************/
00170 
00171 class COIN_DLL_API SoShaderParameter2i : public SoUniformShaderParameter {
00172   typedef SoUniformShaderParameter inherited;
00173   SO_NODE_HEADER(SoShaderParameter2i);
00174 
00175 public:
00176   SoSFVec2i32 value;
00177   SoShaderParameter2i();
00178 
00179   SoINTERNAL public:
00180   static void initClass();
00181   virtual void updateParameter(SoGLShaderObject *shaderObject);
00182 
00183 protected:
00184   virtual ~SoShaderParameter2i();
00185 };
00186 
00187 /* **************************************************************************
00188  * *** SoShaderParameter3f ***
00189  * **************************************************************************/
00190 
00191 class COIN_DLL_API SoShaderParameter3f : public SoUniformShaderParameter {
00192   typedef SoUniformShaderParameter inherited;
00193   SO_NODE_HEADER(SoShaderParameter3f);
00194 
00195 public:
00196   SoSFVec3f value;
00197 
00198   SoShaderParameter3f();
00199 
00200   SoINTERNAL public:
00201   static void initClass();
00202   virtual void updateParameter(SoGLShaderObject *shaderObject);
00203 
00204 protected:
00205   virtual ~SoShaderParameter3f();
00206 };
00207 
00208 /* **************************************************************************
00209  * *** SoShaderParameter3i ***
00210  * **************************************************************************/
00211 
00212 class COIN_DLL_API SoShaderParameter3i : public SoUniformShaderParameter {
00213   typedef SoUniformShaderParameter inherited;
00214   SO_NODE_HEADER(SoShaderParameter3i);
00215 
00216 public:
00217   SoSFVec3i32 value;
00218 
00219   SoShaderParameter3i();
00220 
00221   SoINTERNAL public:
00222   static void initClass();
00223   virtual void updateParameter(SoGLShaderObject *shaderObject);
00224 
00225 protected:
00226   virtual ~SoShaderParameter3i();
00227 };
00228 
00229 /* **************************************************************************
00230  * *** SoShaderParameter4f ***
00231  * **************************************************************************/
00232 
00233 class COIN_DLL_API SoShaderParameter4f : public SoUniformShaderParameter {
00234   typedef SoUniformShaderParameter inherited;
00235   SO_NODE_HEADER(SoShaderParameter4f);
00236 
00237 public:
00238   SoSFVec4f value;
00239 
00240   SoShaderParameter4f();
00241 
00242   SoINTERNAL public:
00243   static void initClass();
00244   virtual void updateParameter(SoGLShaderObject *shaderObject);
00245 
00246 protected:
00247   virtual ~SoShaderParameter4f();
00248 };
00249 
00250 /* **************************************************************************
00251  * *** SoShaderParameter4i ***
00252  * **************************************************************************/
00253 
00254 class COIN_DLL_API SoShaderParameter4i : public SoUniformShaderParameter {
00255   typedef SoUniformShaderParameter inherited;
00256   SO_NODE_HEADER(SoShaderParameter4i);
00257 
00258 public:
00259   SoSFVec4i32 value;
00260 
00261   SoShaderParameter4i();
00262 
00263   SoINTERNAL public:
00264   static void initClass();
00265   virtual void updateParameter(SoGLShaderObject *shaderObject);
00266 
00267 protected:
00268   virtual ~SoShaderParameter4i();
00269 };
00270 
00271 /* **************************************************************************
00272  * *** SoShaderParameterArray1f ***
00273  * **************************************************************************/
00274 
00275 class COIN_DLL_API SoShaderParameterArray1f : public SoUniformShaderParameter {
00276   typedef SoUniformShaderParameter inherited;
00277   SO_NODE_HEADER(SoShaderParameterArray1f);
00278 
00279 public:
00280   SoMFFloat value;
00281 
00282   SoShaderParameterArray1f();
00283 
00284   SoINTERNAL public:
00285   static void initClass();
00286   virtual void updateParameter(SoGLShaderObject *shaderObject);
00287 
00288 protected:
00289   virtual ~SoShaderParameterArray1f();
00290 };
00291 
00292 /* **************************************************************************
00293  * *** SoShaderParameterArray1i ***
00294  * **************************************************************************/
00295 
00296 class COIN_DLL_API SoShaderParameterArray1i : public SoUniformShaderParameter {
00297   typedef SoUniformShaderParameter inherited;
00298   SO_NODE_HEADER(SoShaderParameterArray1i);
00299 
00300 public:
00301   SoMFInt32 value;
00302 
00303   SoShaderParameterArray1i();
00304 
00305   SoINTERNAL public:
00306   static void initClass();
00307   virtual void updateParameter(SoGLShaderObject *shaderObject);
00308 
00309 protected:
00310   virtual ~SoShaderParameterArray1i();
00311 };
00312 
00313 /* **************************************************************************
00314  * *** SoShaderParameterArray2f ***
00315  * **************************************************************************/
00316 
00317 class COIN_DLL_API SoShaderParameterArray2f : public SoUniformShaderParameter {
00318   typedef SoUniformShaderParameter inherited;
00319   SO_NODE_HEADER(SoShaderParameterArray2f);
00320 
00321 public:
00322   SoMFVec2f value;
00323 
00324   SoShaderParameterArray2f();
00325 
00326   SoINTERNAL public:
00327   static void initClass();
00328   virtual void updateParameter(SoGLShaderObject *shaderObject);
00329 
00330 protected:
00331   virtual ~SoShaderParameterArray2f();
00332 };
00333 
00334 /* **************************************************************************
00335  * *** SoShaderParameterArray2i ***
00336  * **************************************************************************/
00337 class COIN_DLL_API SoShaderParameterArray2i : public SoUniformShaderParameter {
00338   typedef SoUniformShaderParameter inherited;
00339   SO_NODE_HEADER(SoShaderParameterArray2i);
00340 
00341 public:
00342   SoMFVec2i32 value;
00343 
00344   SoShaderParameterArray2i();
00345 
00346   SoINTERNAL public:
00347   static void initClass();
00348   virtual void updateParameter(SoGLShaderObject *shaderObject);
00349 
00350 protected:
00351   virtual ~SoShaderParameterArray2i();
00352 };
00353 
00354 /* **************************************************************************
00355  * *** SoShaderParameterArray3f ***
00356  * **************************************************************************/
00357 
00358 class COIN_DLL_API SoShaderParameterArray3f : public SoUniformShaderParameter {
00359   typedef SoUniformShaderParameter inherited;
00360   SO_NODE_HEADER(SoShaderParameterArray3f);
00361 
00362 public:
00363   SoMFVec3f value;
00364 
00365   SoShaderParameterArray3f();
00366 
00367   SoINTERNAL public:
00368   static void initClass();
00369   virtual void updateParameter(SoGLShaderObject *shaderObject);
00370 
00371 protected:
00372   virtual ~SoShaderParameterArray3f();
00373 };
00374 
00375 /* **************************************************************************
00376  * *** SoShaderParameterArray3i ***
00377  * **************************************************************************/
00378 
00379 class COIN_DLL_API SoShaderParameterArray3i : public SoUniformShaderParameter {
00380   typedef SoUniformShaderParameter inherited;
00381   SO_NODE_HEADER(SoShaderParameterArray3i);
00382 
00383 public:
00384   SoMFVec3i32 value;
00385 
00386   SoShaderParameterArray3i();
00387 
00388   SoINTERNAL public:
00389   static void initClass();
00390   virtual void updateParameter(SoGLShaderObject *shaderObject);
00391 
00392 protected:
00393   virtual ~SoShaderParameterArray3i();
00394 };
00395 
00396 /* **************************************************************************
00397  * *** SoShaderParameterArray4f ***
00398  * **************************************************************************/
00399 
00400 class COIN_DLL_API SoShaderParameterArray4f : public SoUniformShaderParameter {
00401   typedef SoUniformShaderParameter inherited;
00402   SO_NODE_HEADER(SoShaderParameterArray4f);
00403 
00404 public:
00405   SoMFVec4f value;
00406 
00407   SoShaderParameterArray4f();
00408 
00409   SoINTERNAL public:
00410   static void initClass();
00411   virtual void updateParameter(SoGLShaderObject *shaderObject);
00412 
00413 protected:
00414   virtual ~SoShaderParameterArray4f();
00415 
00416 };
00417 
00418 /* **************************************************************************
00419  * *** SoShaderParameterArray4i ***
00420  * **************************************************************************/
00421 
00422 class COIN_DLL_API SoShaderParameterArray4i : public SoUniformShaderParameter {
00423   typedef SoUniformShaderParameter inherited;
00424   SO_NODE_HEADER(SoShaderParameterArray4i);
00425 
00426 public:
00427   SoMFVec4i32 value;
00428 
00429   SoShaderParameterArray4i();
00430 
00431   SoINTERNAL public:
00432   static void initClass();
00433   virtual void updateParameter(SoGLShaderObject *shaderObject);
00434 
00435 protected:
00436   virtual ~SoShaderParameterArray4i();
00437 };
00438 
00439 /* **************************************************************************
00440  * *** SoShaderParameterMatrix ***
00441  * **************************************************************************/
00442 
00443 class COIN_DLL_API SoShaderParameterMatrix : public SoUniformShaderParameter {
00444   typedef SoUniformShaderParameter inherited;
00445   SO_NODE_HEADER(SoShaderParameterMatrix);
00446 
00447 public:
00448   SoSFMatrix value;
00449 
00450   SoShaderParameterMatrix();
00451 
00452   SoINTERNAL public:
00453   static void initClass();
00454   virtual void updateParameter(SoGLShaderObject *shaderObject);
00455 
00456 protected:
00457   virtual ~SoShaderParameterMatrix();
00458 };
00459 
00460 /* **************************************************************************
00461  * *** SoShaderParameterMatrixArray ***
00462  * **************************************************************************/
00463 
00464 class COIN_DLL_API SoShaderParameterMatrixArray : public SoUniformShaderParameter {
00465   typedef SoUniformShaderParameter inherited;
00466   SO_NODE_HEADER(SoShaderParameterMatrixArray);
00467 
00468 public:
00469   SoMFMatrix value;
00470 
00471   SoShaderParameterMatrixArray();
00472 
00473   SoINTERNAL public:
00474   static void initClass();
00475   virtual void updateParameter(SoGLShaderObject *shaderObject);
00476 
00477 protected:
00478   virtual ~SoShaderParameterMatrixArray();
00479 };
00480 
00481 /* **************************************************************************
00482  * *** SoShaderStateMatrixParameter ***
00483  * **************************************************************************/
00484 
00485 class COIN_DLL_API SoShaderStateMatrixParameter : public SoUniformShaderParameter {
00486   typedef SoUniformShaderParameter inherited;
00487   SO_NODE_HEADER(SoShaderStateMatrixParameter);
00488 
00489 public:
00490 
00491   enum MatrixType {
00492     MODELVIEW,
00493     PROJECTION,
00494     TEXTURE,
00495     MODELVIEW_PROJECTION
00496   };
00497 
00498   enum MatrixTransform{
00499     IDENTITY,
00500     TRANSPOSE,
00501     INVERSE,
00502     INVERSE_TRANSPOSE
00503   };
00504 
00505   SoSFEnum matrixType;
00506   SoSFEnum matrixTransform;
00507 
00508   SoShaderStateMatrixParameter();
00509   virtual ~SoShaderStateMatrixParameter();
00510 
00511   static void initClass(void);
00512   virtual void updateParameter(SoGLShaderObject *shaderObject);
00513 };
00514 
00515 #endif /* ! COIN_SOSHADERPARAMETER_H */

Copyright © 1998-2007 by Systems in Motion AS. All rights reserved.

Generated on Mon Feb 23 16:33:31 2009 for Coin by Doxygen. 1.5.8