00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #if !defined SOCPUBUFFERBITSET_H
00024 #define SOCPUBUFFERBITSET_H
00025
00026
00027 #include <Inventor/devices/SoCpuBufferObject.h>
00028 #include <Inventor/devices/SoGLBufferObject.h>
00029
00030
00031 #include <LDM/tiles/SoBufferPropertiesInterface.h>
00032 #include <LDM/tiles/SoLDMBufferObjectInterface.h>
00033 #include <LDM/tiles/SoCpuBufferCompressed.h>
00034 #include <Inventor/algorithms/SoConversion.h>
00035
00036 class SoDataCompressor;
00037 class SoCpuBufferUniform;
00038 class SoCpuBufferBitSet;
00039
00040 #ifdef _MSC_VER
00041 #pragma warning( push )
00042 #pragma warning(disable:4251)
00043 #endif
00044
00059 class SoCpuBufferBitSet: public SoCpuBufferObject, public SoBufferPropertiesInterface, public SoLDMBufferObjectInterface
00060 {
00061 SO_TYPED_CLASS_HEADER();
00062
00063
00064 public:
00065
00069 SoCpuBufferBitSet();
00070
00074 SoCpuBufferBitSet(SoCpuBufferObject* cpuBuffer);
00075
00081 virtual SoBufferObject* createInstance() const;
00082
00094 virtual void map( SoBufferObject* targetBufferObject, AccessMode accessMode, size_t startPosition = 0, size_t mappingSize = SO_BUFFER_SIZE_ALL );
00095
00101 virtual void map( SoCpuBufferObject* targetBufferObject, AccessMode accessMode, size_t startPosition = 0, size_t mappingSize = SO_BUFFER_SIZE_ALL);
00102
00108 virtual void map( SoGLBufferObject* targetBufferObject, AccessMode accessMode, size_t startPosition = 0, size_t mappingSize = SO_BUFFER_SIZE_ALL);
00109
00116 virtual void* map( AccessMode accessMode, size_t offset = 0, size_t count = SO_BUFFER_SIZE_ALL );
00117
00126 virtual void unmap( SoCpuBufferObject* bufferObject );
00127
00136 virtual void unmap( SoGLBufferObject* bufferObject );
00137
00146 virtual void unmap( SoBufferObject* bufferObject );
00147
00153 virtual void unmap();
00154
00156 virtual void memcpy( SoBufferObject* sourceBufferObject, size_t destOffset = 0, size_t sourceOffset = 0, size_t copySize = SO_BUFFER_SIZE_ALL );
00157
00170 virtual void memset( void* value, size_t valueSize = 1, size_t offset = 0, size_t count = SO_BUFFER_SIZE_ALL );
00171
00180 virtual bool getMinMax ( double& min, double& max);
00181
00188 virtual void setMinMax ( const double& min, const double& max);
00189
00195 virtual size_t getRealSize() const;
00196
00203 virtual bool setSize( size_t size );
00204
00205 #if 1 SoDEPRECATED
00211 SoCpuBufferBitSet(SoDataCompressor* compressor);
00212 SoDEPRECATED
00219 virtual void setCompressor( SoDataCompressor* compressor );
00220 SoDEPRECATED
00228 virtual void setBufferUncompress( unsigned char* dataBuffer, size_t bufferSize );
00229
00230 #endif
00232 private:
00233
00236 void memcpy( SoCpuBufferBitSet* sourceBufferObject, size_t destOffset = 0, size_t sourceOffset = 0, size_t copySize = SO_BUFFER_SIZE_ALL );
00237
00240 void memcpy( SoCpuBufferUniform* sourceBufferObject, size_t destOffset = 0, size_t sourceOffset = 0, size_t copySize = SO_BUFFER_SIZE_ALL );
00241
00244 void memcpyInternal( SoBufferObject* sourceBufferObject, size_t dataSize, size_t destOffset = 0, size_t sourceOffset = 0, size_t copySize = SO_BUFFER_SIZE_ALL );
00245
00248 unsigned char* mapRawBitSet(AccessMode accessMode);
00249
00251 void unmapRawBitSet();
00252
00254 static inline unsigned char getBit(unsigned char* dataPtr, const int pos)
00255 { return (((dataPtr[pos>>0x3]) >> (7- (pos & 0x7))) & 1); }
00256
00257
00258 virtual void setCacheSignature(const uint64_t& cacheSignature);
00259
00261 static inline void setBit(unsigned char* dataPtr, const int pos, bool v)
00262 {
00263 unsigned char& val = dataPtr[pos/8];
00264 const unsigned char mask = 0x80 >> pos%8;
00265 const unsigned char bitChar = (unsigned char)v << (7 - pos%8);
00266 val = (val & ~mask) | bitChar;
00267 }
00268
00269 private:
00273 virtual ~SoCpuBufferBitSet();
00274
00275 private:
00277 void setBitSetData(SoCpuBufferObject* buffer);
00278
00280 void updateUnpackBuffer(AccessMode accessMode);
00281
00282 SoCpuBufferObject* m_tempBitSetBuffer;
00283 SoCpuBufferObject* m_unpackedBuffer;
00284
00287 SoRef<SoCpuBufferObject> m_bitSetBuffer;
00288 };
00289
00290 #ifdef _MSC_VER
00291 #pragma warning( pop )
00292 #endif
00293
00294 #endif //SOCPUBUFFERBITSET_H
00295
00296