Browse Source

Treat image data as array of unsigned chars.

Arithmetic on void* is not defined, this helps a little with various
conversions.
pull/278/head
Vladimír Vondruš 13 years ago
parent
commit
872ef12ebd
  1. 2
      src/Image.cpp
  2. 8
      src/Image.h
  3. 10
      src/ImageWrapper.h
  4. 8
      src/Trade/ImageData.h

2
src/Image.cpp

@ -31,7 +31,7 @@ template<UnsignedInt dimensions> void Image<dimensions>::setData(const typename
_format = format;
_type = type;
_size = size;
_data = reinterpret_cast<char*>(data);
_data = reinterpret_cast<unsigned char*>(data);
}
template class Image<1>;

8
src/Image.h

@ -55,7 +55,7 @@ template<UnsignedInt dimensions> class Image: public AbstractImage {
* Note that the image data are not copied on construction, but they
* are deleted on class destruction.
*/
inline explicit Image(const typename DimensionTraits<Dimensions, Int>::VectorType& size, Format format, Type type, GLvoid* data): AbstractImage(format, type), _size(size), _data(reinterpret_cast<char*>(data)) {}
inline explicit Image(const typename DimensionTraits<Dimensions, Int>::VectorType& size, Format format, Type type, GLvoid* data): AbstractImage(format, type), _size(size), _data(reinterpret_cast<unsigned char*>(data)) {}
/**
* @brief Constructor
@ -74,8 +74,8 @@ template<UnsignedInt dimensions> class Image: public AbstractImage {
inline typename DimensionTraits<Dimensions, Int>::VectorType size() const { return _size; }
/** @brief Pointer to raw data */
inline void* data() { return _data; }
inline const void* data() const { return _data; } /**< @overload */
inline unsigned char* data() { return _data; }
inline const unsigned char* data() const { return _data; } /**< @overload */
/**
* @brief Set image data
@ -91,7 +91,7 @@ template<UnsignedInt dimensions> class Image: public AbstractImage {
private:
Math::Vector<Dimensions, Int> _size;
char* _data;
unsigned char* _data;
};
#ifndef DOXYGEN_GENERATING_OUTPUT

10
src/ImageWrapper.h

@ -62,7 +62,7 @@ template<UnsignedInt dimensions> class ImageWrapper: public AbstractImage {
* Note that the image data are not copied on construction, but they
* are deleted on class destruction.
*/
inline explicit ImageWrapper(const typename DimensionTraits<Dimensions, Int>::VectorType& size, Format format, Type type, GLvoid* data): AbstractImage(format, type), _size(size), _data(reinterpret_cast<char*>(data)) {}
inline explicit ImageWrapper(const typename DimensionTraits<Dimensions, Int>::VectorType& size, Format format, Type type, GLvoid* data): AbstractImage(format, type), _size(size), _data(reinterpret_cast<unsigned char*>(data)) {}
/**
* @brief Constructor
@ -79,8 +79,8 @@ template<UnsignedInt dimensions> class ImageWrapper: public AbstractImage {
inline typename DimensionTraits<Dimensions, Int>::VectorType size() const { return _size; }
/** @brief Pointer to raw data */
inline void* data() { return _data; }
inline const void* data() const { return _data; } /**< @overload */
inline unsigned char* data() { return _data; }
inline const unsigned char* data() const { return _data; } /**< @overload */
/**
* @brief Set image data
@ -91,12 +91,12 @@ template<UnsignedInt dimensions> class ImageWrapper: public AbstractImage {
* destruction.
*/
inline void setData(GLvoid* data) {
_data = reinterpret_cast<char*>(data);
_data = reinterpret_cast<unsigned char*>(data);
}
private:
Math::Vector<Dimensions, Int> _size;
char* _data;
unsigned char* _data;
};
/** @brief One-dimensional image wrapper */

8
src/Trade/ImageData.h

@ -55,7 +55,7 @@ template<UnsignedInt dimensions> class ImageData: public AbstractImage {
* Note that the image data are not copied on construction, but they
* are deleted on class destruction.
*/
inline explicit ImageData(const typename DimensionTraits<Dimensions, Int>::VectorType& size, Format format, Type type, GLvoid* data): AbstractImage(format, type), _size(size), _data(reinterpret_cast<char*>(data)) {}
inline explicit ImageData(const typename DimensionTraits<Dimensions, Int>::VectorType& size, Format format, Type type, GLvoid* data): AbstractImage(format, type), _size(size), _data(reinterpret_cast<unsigned char*>(data)) {}
/** @brief Destructor */
inline ~ImageData() { delete[] _data; }
@ -64,12 +64,12 @@ template<UnsignedInt dimensions> class ImageData: public AbstractImage {
inline typename DimensionTraits<Dimensions, Int>::VectorType size() const { return _size; }
/** @brief Pointer to raw data */
inline void* data() { return _data; }
inline const void* data() const { return _data; } /**< @overload */
inline unsigned char* data() { return _data; }
inline const unsigned char* data() const { return _data; } /**< @overload */
private:
Math::Vector<Dimensions, Int> _size;
char* _data;
unsigned char* _data;
};
/** @brief One-dimensional image */

Loading…
Cancel
Save