diff options
Diffstat (limited to 'thirdparty/thekla_atlas/nvimage/Image.h')
-rw-r--r-- | thirdparty/thekla_atlas/nvimage/Image.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/thirdparty/thekla_atlas/nvimage/Image.h b/thirdparty/thekla_atlas/nvimage/Image.h new file mode 100644 index 0000000000..4c5748cb00 --- /dev/null +++ b/thirdparty/thekla_atlas/nvimage/Image.h @@ -0,0 +1,89 @@ +// This code is in the public domain -- castanyo@yahoo.es + +#pragma once +#ifndef NV_IMAGE_IMAGE_H +#define NV_IMAGE_IMAGE_H + +#include "nvimage.h" +#include "nvcore/Debug.h" + +namespace nv +{ + class Color32; + + /// 32 bit RGBA image. + class NVIMAGE_CLASS Image + { + public: + + enum Format + { + Format_RGB, + Format_ARGB, + }; + + Image(); + Image(const Image & img); + ~Image(); + + const Image & operator=(const Image & img); + + + void allocate(uint w, uint h, uint d = 1); + void acquire(Color32 * data, uint w, uint h, uint d = 1); + //bool load(const char * name); + + void resize(uint w, uint h, uint d = 1); + + void wrap(void * data, uint w, uint h, uint d = 1); + void unwrap(); + + uint width() const; + uint height() const; + uint depth() const; + + const Color32 * scanline(uint h) const; + Color32 * scanline(uint h); + + const Color32 * pixels() const; + Color32 * pixels(); + + const Color32 & pixel(uint idx) const; + Color32 & pixel(uint idx); + + const Color32 & pixel(uint x, uint y, uint z = 0) const; + Color32 & pixel(uint x, uint y, uint z = 0); + + Format format() const; + void setFormat(Format f); + + void fill(Color32 c); + + private: + void free(); + + private: + uint m_width; + uint m_height; + uint m_depth; + Format m_format; + Color32 * m_data; + }; + + + inline const Color32 & Image::pixel(uint x, uint y, uint z) const + { + nvDebugCheck(x < m_width && y < m_height && z < m_depth); + return pixel((z * m_height + y) * m_width + x); + } + + inline Color32 & Image::pixel(uint x, uint y, uint z) + { + nvDebugCheck(x < m_width && y < m_height && z < m_depth); + return pixel((z * m_height + y) * m_width + x); + } + +} // nv namespace + + +#endif // NV_IMAGE_IMAGE_H |