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_DATA_COMPOSITOR__
00026 #define _SO_DATA_COMPOSITOR__
00027
00028 #include <Inventor/fields/SoSFEnum.h>
00029 #include <Inventor/fields/SoSFShort.h>
00030 #include <Inventor/fields/SoSFBool.h>
00031 #include <Inventor/nodes/SoNode.h>
00032 #include <Inventor/SbDataType.h>
00033 #include <Inventor/SbVec.h>
00034 #include <LDM/SoLDM.h>
00035
00036 class SoBufferObject;
00037 class SoCpuBufferObject;
00038
00110 class SoDataCompositor : public SoNode {
00111 SO_NODE_HEADER( SoDataCompositor );
00112
00113 public:
00114
00119 SoDataCompositor();
00120
00124 enum DataType {
00126 UNSIGNED_BYTE = SbDataType::UNSIGNED_BYTE,
00128 UNSIGNED_SHORT = SbDataType::UNSIGNED_SHORT,
00130 UNSIGNED_INT32 = SbDataType::UNSIGNED_INT32,
00132 SIGNED_BYTE = SbDataType::SIGNED_BYTE,
00134 SIGNED_SHORT = SbDataType::SIGNED_SHORT,
00136 SIGNED_INT32 = SbDataType::SIGNED_INT32,
00138 FLOAT = SbDataType::FLOAT
00139 };
00140
00147 SoSFEnum dataType;
00148
00156 SoSFShort numSigBits;
00157
00163 SoSFBool rgbaMode;
00164
00168 enum PreDefCompositor {
00170 NONE ,
00172 MINUS,
00174 ADD,
00176 MULTIPLY
00177 };
00178
00187 SoSFEnum preDefCompositor;
00188
00196 SoSFBool convert;
00197
00216 virtual void compose(int numDataSet, const SbVec3i32& tileDimension,
00217 int* vdid, SoBufferObject** inputBuffer,
00218 SoBufferObject* outputBuffer);
00219
00233 virtual void compose(int numDataSet, const SbVec3i32& tileDimension,
00234 int* vdid, SoBufferObject** inputBuffer, SoDataCompositor::DataType* dataTypes,
00235 SoBufferObject* outputBuffer);
00236
00241 static SbBool isDataSigned( DataType dataType );
00242
00246 int getDataSize() const;
00247
00251 int getNumSigBits() const;
00252
00256 DataType getDataType()const;
00257
00258 #if 1 SoDEPRECATED
00261 virtual void compose(int numDataSet, const SbVec3i32& tileDimension,
00262 int* vdid, void** inputBuffer,
00263 void* outputBuffer);
00264 SoDEPRECATED
00266 virtual void compose(int numDataSet, const SbVec3i32& tileDimension,
00267 int* vdid, void** inputBuffer, SoDataCompositor::DataType* dataTypes,
00268 void* outputBuffer);
00269
00270 #endif
00272 private:
00273
00274 virtual void doAction( SoAction *action );
00275 virtual void callback( SoCallbackAction *action );
00276 virtual void GLRender( SoGLRenderAction *action );
00277 virtual void write(SoWriteAction *action);
00278 virtual void getBoundingBox(SoGetBoundingBoxAction *action);
00279 virtual void pick(SoPickAction *action) ;
00280
00281
00282 private:
00283 static void initClass();
00284 static void exitClass();
00285
00286 void preDefCompose(int numDataSet, const SbVec3i32& tileDimension,
00287 int* vdid, SoBufferObject** inputBuffer,
00288 SoBufferObject* outputBuffer);
00289
00290 private:
00291
00292 virtual ~SoDataCompositor();
00293
00294 private:
00295
00296
00297
00298
00299 void minus(int numDataSet, const SbVec3i32& tileDimension,
00300 int* vdid, SoBufferObject** inputBuffer,
00301 SoCpuBufferObject* outputBuffer);
00302 void add(int numDataSet, const SbVec3i32& tileDimension,
00303 int* vdid, SoBufferObject** inputBuffer,
00304 SoCpuBufferObject* outputBuffer);
00305 void multiply(int numDataSet, const SbVec3i32& tileDimension,
00306 int* vdid, SoBufferObject** inputBuffer,
00307 SoCpuBufferObject* outputBuffer);
00308
00309
00310 void minus(int numDataSet, const SbVec3i32& tileDimension,
00311 int* vdid, SoBufferObject** inputBuffer,
00312 SoBufferObject* outputBuffer);
00313 void add(int numDataSet, const SbVec3i32& tileDimension,
00314 int* vdid, SoBufferObject** inputBuffer,
00315 SoBufferObject* outputBuffer);
00316 void multiply(int numDataSet, const SbVec3i32& tileDimension,
00317 int* vdid, SoBufferObject** inputBuffer,
00318 SoBufferObject* outputBuffer);
00319 };
00320
00321
00322 #endif // _SO_DATA_COMPOSITOR__
00323
00324
00325