Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/msdfgen/core/Bitmap.hpp
9902 views
1
2
#include "Bitmap.h"
3
4
#include <cstdlib>
5
#include <cstring>
6
7
namespace msdfgen {
8
9
template <typename T, int N>
10
Bitmap<T, N>::Bitmap() : pixels(NULL), w(0), h(0) { }
11
12
template <typename T, int N>
13
Bitmap<T, N>::Bitmap(int width, int height) : w(width), h(height) {
14
pixels = new T[N*w*h];
15
}
16
17
template <typename T, int N>
18
Bitmap<T, N>::Bitmap(const BitmapConstRef<T, N> &orig) : w(orig.width), h(orig.height) {
19
pixels = new T[N*w*h];
20
memcpy(pixels, orig.pixels, sizeof(T)*N*w*h);
21
}
22
23
template <typename T, int N>
24
Bitmap<T, N>::Bitmap(const Bitmap<T, N> &orig) : w(orig.w), h(orig.h) {
25
pixels = new T[N*w*h];
26
memcpy(pixels, orig.pixels, sizeof(T)*N*w*h);
27
}
28
29
#ifdef MSDFGEN_USE_CPP11
30
template <typename T, int N>
31
Bitmap<T, N>::Bitmap(Bitmap<T, N> &&orig) : pixels(orig.pixels), w(orig.w), h(orig.h) {
32
orig.pixels = NULL;
33
orig.w = 0, orig.h = 0;
34
}
35
#endif
36
37
template <typename T, int N>
38
Bitmap<T, N>::~Bitmap() {
39
delete [] pixels;
40
}
41
42
template <typename T, int N>
43
Bitmap<T, N> &Bitmap<T, N>::operator=(const BitmapConstRef<T, N> &orig) {
44
if (pixels != orig.pixels) {
45
delete [] pixels;
46
w = orig.width, h = orig.height;
47
pixels = new T[N*w*h];
48
memcpy(pixels, orig.pixels, sizeof(T)*N*w*h);
49
}
50
return *this;
51
}
52
53
template <typename T, int N>
54
Bitmap<T, N> &Bitmap<T, N>::operator=(const Bitmap<T, N> &orig) {
55
if (this != &orig) {
56
delete [] pixels;
57
w = orig.w, h = orig.h;
58
pixels = new T[N*w*h];
59
memcpy(pixels, orig.pixels, sizeof(T)*N*w*h);
60
}
61
return *this;
62
}
63
64
#ifdef MSDFGEN_USE_CPP11
65
template <typename T, int N>
66
Bitmap<T, N> &Bitmap<T, N>::operator=(Bitmap<T, N> &&orig) {
67
if (this != &orig) {
68
delete [] pixels;
69
pixels = orig.pixels;
70
w = orig.w, h = orig.h;
71
orig.pixels = NULL;
72
}
73
return *this;
74
}
75
#endif
76
77
template <typename T, int N>
78
int Bitmap<T, N>::width() const {
79
return w;
80
}
81
82
template <typename T, int N>
83
int Bitmap<T, N>::height() const {
84
return h;
85
}
86
87
template <typename T, int N>
88
T *Bitmap<T, N>::operator()(int x, int y) {
89
return pixels+N*(w*y+x);
90
}
91
92
template <typename T, int N>
93
const T *Bitmap<T, N>::operator()(int x, int y) const {
94
return pixels+N*(w*y+x);
95
}
96
97
template <typename T, int N>
98
Bitmap<T, N>::operator T *() {
99
return pixels;
100
}
101
102
template <typename T, int N>
103
Bitmap<T, N>::operator const T *() const {
104
return pixels;
105
}
106
107
template <typename T, int N>
108
Bitmap<T, N>::operator BitmapRef<T, N>() {
109
return BitmapRef<T, N>(pixels, w, h);
110
}
111
112
template <typename T, int N>
113
Bitmap<T, N>::operator BitmapConstRef<T, N>() const {
114
return BitmapConstRef<T, N>(pixels, w, h);
115
}
116
117
}
118
119