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
00111 class SoDataCompositor : public SoNode {
00112 SO_NODE_HEADER( SoDataCompositor );
00113
00114 public:
00115
00120 SoDataCompositor();
00121
00125 enum DataType {
00127 UNSIGNED_BYTE = SbDataType::UNSIGNED_BYTE,
00129 UNSIGNED_SHORT = SbDataType::UNSIGNED_SHORT,
00131 UNSIGNED_INT32 = SbDataType::UNSIGNED_INT32,
00133 SIGNED_BYTE = SbDataType::SIGNED_BYTE,
00135 SIGNED_SHORT = SbDataType::SIGNED_SHORT,
00137 SIGNED_INT32 = SbDataType::SIGNED_INT32,
00139 FLOAT = SbDataType::FLOAT
00140 };
00141
00148 SoSFEnum dataType;
00149
00157 SoSFShort numSigBits;
00158
00164 SoSFBool rgbaMode;
00165
00169 enum PreDefCompositor {
00171 NONE ,
00173 MINUS,
00175 ADD,
00177 MULTIPLY
00178 };
00179
00188 SoSFEnum preDefCompositor;
00189
00197 SoSFBool convert;
00198
00217 virtual void compose(int numDataSet, const SbVec3i32& tileDimension,
00218 int* vdid, SoBufferObject** inputBuffer,
00219 SoBufferObject* outputBuffer);
00220
00234 virtual void compose(int numDataSet, const SbVec3i32& tileDimension,
00235 int* vdid, SoBufferObject** inputBuffer, SoDataCompositor::DataType* dataTypes,
00236 SoBufferObject* outputBuffer);
00237
00242 static SbBool isDataSigned( DataType dataType );
00243
00247 int getDataSize() const;
00248
00252 int getNumSigBits() const;
00253
00257 DataType getDataType()const;
00258
00259 #if 1 SoDEPRECATED
00262 virtual void compose(int numDataSet, const SbVec3i32& tileDimension,
00263 int* vdid, void** inputBuffer,
00264 void* outputBuffer);
00265 SoDEPRECATED
00267 virtual void compose(int numDataSet, const SbVec3i32& tileDimension,
00268 int* vdid, void** inputBuffer, SoDataCompositor::DataType* dataTypes,
00269 void* outputBuffer);
00270
00271 #endif
00273 private:
00274
00275 virtual void doAction( SoAction *action );
00276 virtual void callback( SoCallbackAction *action );
00277 virtual void GLRender( SoGLRenderAction *action );
00278 virtual void write(SoWriteAction *action);
00279 virtual void getBoundingBox(SoGetBoundingBoxAction *action);
00280 virtual void pick(SoPickAction *action) ;
00281
00282
00283 private:
00284 static void initClass();
00285 static void exitClass();
00286
00287 void preDefCompose(int numDataSet, const SbVec3i32& tileDimension,
00288 int* vdid, SoBufferObject** inputBuffer,
00289 SoBufferObject* outputBuffer);
00290
00291 private:
00292
00293 virtual ~SoDataCompositor();
00294
00295 private:
00296
00297
00298
00299
00300 void minus(int numDataSet, const SbVec3i32& tileDimension,
00301 int* vdid, SoBufferObject** inputBuffer,
00302 SoCpuBufferObject* outputBuffer);
00303 void add(int numDataSet, const SbVec3i32& tileDimension,
00304 int* vdid, SoBufferObject** inputBuffer,
00305 SoCpuBufferObject* outputBuffer);
00306 void multiply(int numDataSet, const SbVec3i32& tileDimension,
00307 int* vdid, SoBufferObject** inputBuffer,
00308 SoCpuBufferObject* outputBuffer);
00309
00310
00311 void minus(int numDataSet, const SbVec3i32& tileDimension,
00312 int* vdid, SoBufferObject** inputBuffer,
00313 SoBufferObject* outputBuffer);
00314 void add(int numDataSet, const SbVec3i32& tileDimension,
00315 int* vdid, SoBufferObject** inputBuffer,
00316 SoBufferObject* outputBuffer);
00317 void multiply(int numDataSet, const SbVec3i32& tileDimension,
00318 int* vdid, SoBufferObject** inputBuffer,
00319 SoBufferObject* outputBuffer);
00320 };
00321
00322
00323 #endif // _SO_DATA_COMPOSITOR__
00324
00325
00326