diff --git a/panda/src/pnmimage/pnmImage.I b/panda/src/pnmimage/pnmImage.I index 30a0222917..6c8b3e28ba 100644 --- a/panda/src/pnmimage/pnmImage.I +++ b/panda/src/pnmimage/pnmImage.I @@ -900,6 +900,82 @@ apply_exponent(double red_exponent, double green_exponent, double blue_exponent) } +//////////////////////////////////////////////////////////////////// +// Function: PNMImage::get_array +// Access: Public +// Description: Directly access the underlying PNMImage array. Know +// what you are doing! +//////////////////////////////////////////////////////////////////// +INLINE xel *PNMImage:: +get_array() { + return _array; +} + +//////////////////////////////////////////////////////////////////// +// Function: PNMImage::get_array +// Access: Public +// Description: Directly access the underlying PNMImage array. Know +// what you are doing! +//////////////////////////////////////////////////////////////////// +INLINE const xel *PNMImage:: +get_array() const { + return _array; +} + +//////////////////////////////////////////////////////////////////// +// Function: PNMImage::get_alpha_array +// Access: Public +// Description: Directly access the underlying PNMImage array of +// alpha values. Know what you are doing! +//////////////////////////////////////////////////////////////////// +INLINE xelval *PNMImage:: +get_alpha_array() { + return _alpha; +} + +//////////////////////////////////////////////////////////////////// +// Function: PNMImage::get_alpha_array +// Access: Public +// Description: Directly access the underlying PNMImage array of +// alpha values. Know what you are doing! +//////////////////////////////////////////////////////////////////// +INLINE const xelval *PNMImage:: +get_alpha_array() const { + return _alpha; +} + +//////////////////////////////////////////////////////////////////// +// Function: PNMImage::take_array +// Access: Public +// Description: Returns the underlying PNMImage array and removes it +// from the PNMImage. You become the owner of this +// array and must eventually free it with +// PANDA_FREE_ARRAY() (or pass it to another PNMImage +// with set_array()). Know what you are doing! +//////////////////////////////////////////////////////////////////// +INLINE xel *PNMImage:: +take_array() { + xel *array = _array; + _array = NULL; + return array; +} + +//////////////////////////////////////////////////////////////////// +// Function: PNMImage::take_alpha_array +// Access: Public +// Description: Returns the underlying PNMImage array and removes it +// from the PNMImage. You become the owner of this +// array and must eventually free it with +// PANDA_FREE_ARRAY() (or pass it to another PNMImage +// with set_alpha_array()). Know what you are doing! +//////////////////////////////////////////////////////////////////// +INLINE xelval *PNMImage:: +take_alpha_array() { + xelval *alpha = _alpha; + _alpha = NULL; + return alpha; +} + //////////////////////////////////////////////////////////////////// // Function: PNMImage::allocate_array // Access: Private diff --git a/panda/src/pnmimage/pnmImage.cxx b/panda/src/pnmimage/pnmImage.cxx index 453ed13b02..465e11dc83 100644 --- a/panda/src/pnmimage/pnmImage.cxx +++ b/panda/src/pnmimage/pnmImage.cxx @@ -716,6 +716,46 @@ blend(int x, int y, double r, double g, double b, double alpha) { } } +//////////////////////////////////////////////////////////////////// +// Function: PNMImage::set_array +// Access: Public +// Description: Replaces the underlying PNMImage array with the +// indicated pointer. Know what you are doing! The new +// array must be the correct size and must have been +// allocated via PANDA_MALLOC_ARRAY(). The PNMImage +// object becomes the owner of this pointer and will +// eventually free it with PANDA_FREE_ARRAY(). The +// previous array, if any, will be freed with +// PANDA_FREE_ARRAY() when this call is made. +//////////////////////////////////////////////////////////////////// +void PNMImage:: +set_array(xel *array) { + if (_array != (xel *)NULL) { + PANDA_FREE_ARRAY(_array); + } + _array = array; +} + +//////////////////////////////////////////////////////////////////// +// Function: PNMImage::set_alpha_array +// Access: Public +// Description: Replaces the underlying PNMImage alpha array with the +// indicated pointer. Know what you are doing! The new +// array must be the correct size and must have been +// allocated via PANDA_MALLOC_ARRAY(). The PNMImage +// object becomes the owner of this pointer and will +// eventually free it with PANDA_FREE_ARRAY(). The +// previous array, if any, will be freed with +// PANDA_FREE_ARRAY() when this call is made. +//////////////////////////////////////////////////////////////////// +void PNMImage:: +set_alpha_array(xelval *alpha) { + if (_alpha != (xelval *)NULL) { + PANDA_FREE_ARRAY(_alpha); + } + _alpha = alpha; +} + //////////////////////////////////////////////////////////////////// // Function: PNMImage::copy_sub_image // Access: Published diff --git a/panda/src/pnmimage/pnmImage.h b/panda/src/pnmimage/pnmImage.h index ea57f86263..33822a7261 100644 --- a/panda/src/pnmimage/pnmImage.h +++ b/panda/src/pnmimage/pnmImage.h @@ -252,6 +252,19 @@ PUBLISHED: LColord get_average_xel_a() const; double get_average_gray() const; +public: + // Know what you are doing if you access the underlying data arrays + // directly. + INLINE xel *get_array(); + INLINE const xel *get_array() const; + INLINE xelval *get_alpha_array(); + INLINE const xelval *get_alpha_array() const; + + INLINE xel *take_array(); + INLINE xelval *take_alpha_array(); + void set_array(xel *array); + void set_alpha_array(xelval *alpha); + private: INLINE void allocate_array(); INLINE void allocate_alpha();