summaryrefslogtreecommitdiff
path: root/thirdparty/thekla_atlas/nvimage/Image.h
blob: 4c5748cb0036a154344e601d184a76bc5d3a0b3c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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