OROCHI
 
Loading...
Searching...
No Matches
GxColor.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_CORE_NAMESPACE_BEGIN()
14
15struct GxColorHDR;
16
17//===========================================================================
19//===========================================================================
20struct GxColor : public GxStructBase
21{
22 //-------------------------------------------------------------
24 //-------------------------------------------------------------
26public:
27 GX_RTTI_STRUCT(GxColor)
28
29 static const GxColor BLACK;
30 static const GxColor RED;
31 static const GxColor BLUE;
32 static const GxColor MAGENTA;
33 static const GxColor GREEN;
34 static const GxColor YELLOW;
35 static const GxColor CYAN;
36 static const GxColor ORANGE;
37 static const GxColor WHITE;
38
39 static const GxColor DARK_RED;
40 static const GxColor DARK_BLUE;
41 static const GxColor DARK_MAGENTA;
42 static const GxColor DARK_GREEN;
43 static const GxColor DARK_YELLOW;
44 static const GxColor DARK_CYAN;
45 static const GxColor DARK_GRAY;
46
47 static const GxColor LIGHT_RED;
48 static const GxColor LIGHT_BLUE;
49 static const GxColor LIGHT_MAGENTA;
50 static const GxColor LIGHT_GREEN;
51 static const GxColor LIGHT_YELLOW;
52 static const GxColor LIGHT_CYAN;
53 static const GxColor LIGHT_GRAY;
54
55 static const GxColor SYSTEM_AXIS_X;
56 static const GxColor SYSTEM_AXIS_Y;
57 static const GxColor SYSTEM_AXIS_Z;
58
59#if GX_COLOR_RGB_SWAP
60 static constexpr u32 MASK_RED = 0x00FF0000;
61 static constexpr u32 MASK_BLUE = 0x000000FF;
62#else //GX_COLOR_RGB_SWAP
63 static constexpr u32 MASK_RED = 0x000000FF;
64 static constexpr u32 MASK_BLUE = 0x00FF0000;
65#endif // !GX_COLOR_RGB_SWAP
66 static constexpr u32 MASK_GREEN = 0x0000FF00;
67 static constexpr u32 MASK_ALPHA = 0xFF000000;
68
70 //-------------------------------------------------------------
72 //-------------------------------------------------------------
74
76 GxColor(void) {}
78 GX_FORCE_INLINE GxColor(u32 red, u32 green, u32 blue, u32 alpha = 255);
80 GX_FORCE_INLINE GxColor(const GxColor color, u32 alpha);
82 GX_FORCE_INLINE GxColor(const GxColorHDR& color);
83
85 GX_FORCE_INLINE GxColor(const GxColor& color);
86
88 //-------------------------------------------------------------
90 //-------------------------------------------------------------
92
94 GX_FORCE_INLINE GxColor& operator = (const GxColor color);
96 GX_FORCE_INLINE GxColor& operator += (u32 scalar);
98 GX_FORCE_INLINE GxColor& operator -= (u32 scalar);
100 GX_FORCE_INLINE GxColor& operator *= (f32 scalar);
102 GX_FORCE_INLINE GxColor& operator /= (f32 scalar);
104 GX_FORCE_INLINE GxColor& operator += (const GxColor color);
106 GX_FORCE_INLINE GxColor& operator -= (const GxColor color);
108 GX_FORCE_INLINE GxColor& operator *= (const GxColor color);
110 friend GX_FORCE_INLINE const GxColor operator + (const GxColor color, u32 scalar);
112 friend GX_FORCE_INLINE const GxColor operator - (const GxColor color, u32 scalar);
114 friend GX_FORCE_INLINE const GxColor operator * (const GxColor color, f32 scalar);
116 friend GX_FORCE_INLINE const GxColor operator * (f32 scalar, const GxColor color);
118 friend GX_FORCE_INLINE const GxColor operator / (const GxColor color, f32 scalar);
120 friend GX_FORCE_INLINE const GxColor operator + (const GxColor color0, const GxColor color1);
122 friend GX_FORCE_INLINE const GxColor operator - (const GxColor color0, const GxColor color1);
124 friend GX_FORCE_INLINE const GxColor operator * (const GxColor color0, const GxColor color1);
126 friend GX_FORCE_INLINE b32 operator == (const GxColor color0, const GxColor color1);
128 friend GX_FORCE_INLINE b32 operator != (const GxColor color0, const GxColor color1);
129
131 //-------------------------------------------------------------
133 //-------------------------------------------------------------
135
137 constexpr void getPropertyRed(void* const pValue) const { *static_cast<u8*>(pValue) = _red; }
139 constexpr void setPropertyRed(const void* const pValue) { _red = *static_cast<u8*>(const_cast<void*>(pValue)); }
141 constexpr void getPropertyGreen(void* const pValue) const { *static_cast<u8*>(pValue) = _green; }
143 constexpr void setPropertyGreen(const void* const pValue) { _green = *static_cast<u8*>(const_cast<void*>(pValue)); }
145 constexpr void getPropertyBlue(void* const pValue) const { *static_cast<u8*>(pValue) = _blue; }
147 constexpr void setPropertyBlue(const void* const pValue) { _blue = *static_cast<u8*>(const_cast<void*>(pValue)); }
149 constexpr void getPropertyAlpha(void* const pValue) const { *static_cast<u8*>(pValue) = _alpha; }
151 constexpr void setPropertyAlpha(const void* const pValue) { _alpha = *static_cast<u8*>(const_cast<void*>(pValue)); }
152
154 GX_FORCE_INLINE GxColor getInvert(void) const { GxColor color; color._color = _color ^ (MASK_RED | MASK_GREEN | MASK_BLUE); return color; }
156 constexpr f32 getLuminance(void) const { return 0.29891f * static_cast<f32>(_red) + 0.58661f * static_cast<f32>(_green) + 0.11448f * static_cast<f32>(_blue); }
157
159 static GX_FORCE_INLINE const GxColor& getAddScalar(GxColor& dst, const GxColor color, u32 scalar);
161 static GX_FORCE_INLINE const GxColor& getSubScalar(GxColor& dst, const GxColor color, u32 scalar);
163 static GX_FORCE_INLINE const GxColor& getMulScalar(GxColor& dst, const GxColor color, f32 scalar);
165 static GX_FORCE_INLINE const GxColor& getDivScalar(GxColor& dst, const GxColor color, f32 scalar);
167 static GX_FORCE_INLINE const GxColor& getAddColor(GxColor& dst, const GxColor color0, const GxColor color1);
169 static GX_FORCE_INLINE const GxColor& getSubColor(GxColor& dst, const GxColor color0, const GxColor color1);
171 static GX_FORCE_INLINE const GxColor& getMulColor(GxColor& dst, const GxColor color0, const GxColor color1);
173 static GX_FORCE_INLINE GxColor getLerp(const GxColor color0, const GxColor color1, f32 t);
175 static GX_FORCE_INLINE const GxColor& getLerp(GxColor& dst, const GxColor color0, const GxColor color1, f32 t);
176
178 //-----------------------------------------------------------
180 //-----------------------------------------------------------
182
184 GX_FORCE_INLINE const GxColor& addScalar(u32 scalar);
186 GX_FORCE_INLINE const GxColor& subScalar(u32 scalar);
188 GX_FORCE_INLINE const GxColor& mulScalar(f32 scalar);
190 GX_FORCE_INLINE const GxColor& divScalar(f32 scalar);
192 GX_FORCE_INLINE const GxColor& addColor(const GxColor color);
194 GX_FORCE_INLINE const GxColor& subColor(const GxColor color);
196 GX_FORCE_INLINE const GxColor& mulColor(const GxColor color);
197
199 static GxColor createColor(GX_CSTR string);
201 static GxColor createColor(u32 value);
202
204 static GX_FORCE_INLINE GxColor convertPs3ToWindows(const GxColor ps3Color);
205
207 static GX_FORCE_INLINE GxColor convertWindowsToPs3(const GxColor windowsColor);
208
210 //-------------------------------------------------------------
212 //-------------------------------------------------------------
214
215 union
216 {
217 struct
218 {
219#if GX_COLOR_RGB_SWAP
220 u32 _blue : 8;
221 u32 _green : 8;
222 u32 _red : 8;
223 u32 _alpha : 8;
224#else //GX_COLOR_RGB_SWAP
225 u32 _red : 8;
226 u32 _green : 8;
227 u32 _blue : 8;
228 u32 _alpha : 8;
229#endif // !GX_COLOR_RGB_SWAP
230 };
231 u32 _color;
232 };
233
235};
236
237//===========================================================================
239//===========================================================================
241{
242 //-------------------------------------------------------------
244 //-------------------------------------------------------------
246public:
247 GX_RTTI_STRUCT(GxColorHDR)
248
249
250 //-------------------------------------------------------------
252 //-------------------------------------------------------------
254
256 GxColorHDR(void) : _red(0.f), _green(0.f), _blue(0.f), _alpha(0.f){}
258 GX_FORCE_INLINE GxColorHDR(f32 red, f32 green, f32 blue, f32 alpha = 1.0f);
260 GX_FORCE_INLINE GxColorHDR(const GxColor color);
261
263 GX_FORCE_INLINE GxColorHDR(const GxColorHDR& color);
264
266 //-------------------------------------------------------------
268 //-------------------------------------------------------------
270
272 GX_FORCE_INLINE GxColorHDR& operator = (const GxColorHDR& color);
274 GX_FORCE_INLINE GxColorHDR& operator += (f32 scalar);
276 GX_FORCE_INLINE GxColorHDR& operator -= (f32 scalar);
278 GX_FORCE_INLINE GxColorHDR& operator *= (f32 scalar);
280 GX_FORCE_INLINE GxColorHDR& operator /= (f32 scalar);
282 GX_FORCE_INLINE GxColorHDR& operator += (const GxColorHDR& color);
284 GX_FORCE_INLINE GxColorHDR& operator -= (const GxColorHDR& color);
286 GX_FORCE_INLINE GxColorHDR& operator *= (const GxColorHDR& color);
288 friend GX_FORCE_INLINE const GxColorHDR operator + (const GxColorHDR& color, f32 scalar);
290 friend GX_FORCE_INLINE const GxColorHDR operator - (const GxColorHDR& color, f32 scalar);
292 friend GX_FORCE_INLINE const GxColorHDR operator * (const GxColorHDR& color, f32 scalar);
294 friend GX_FORCE_INLINE const GxColorHDR operator * (f32 scalar, const GxColorHDR& color);
296 friend GX_FORCE_INLINE const GxColorHDR operator / (const GxColorHDR& color, f32 scalar);
298 friend GX_FORCE_INLINE const GxColorHDR operator + (const GxColorHDR& color0, const GxColorHDR& color1);
300 friend GX_FORCE_INLINE const GxColorHDR operator - (const GxColorHDR& color0, const GxColorHDR& color1);
302 friend GX_FORCE_INLINE const GxColorHDR operator * (const GxColorHDR& color0, const GxColorHDR& color1);
304 friend GX_FORCE_INLINE b32 operator == (const GxColorHDR& color0, const GxColorHDR& color1);
306 friend GX_FORCE_INLINE b32 operator != (const GxColorHDR& color0, const GxColorHDR& color1);
307
309 //-------------------------------------------------------------
311 //-------------------------------------------------------------
313
315 constexpr f32 getLuminance(void) const { return 0.29891f * _red + 0.58661f * _green + 0.11448f * _blue; }
316
318 static GX_FORCE_INLINE const GxColorHDR& getAddScalar(GxColorHDR& dst, const GxColorHDR& color, f32 scalar);
320 static GX_FORCE_INLINE const GxColorHDR& getSubScalar(GxColorHDR& dst, const GxColorHDR& color, f32 scalar);
322 static GX_FORCE_INLINE const GxColorHDR& getMulScalar(GxColorHDR& dst, const GxColorHDR& color, f32 scalar);
324 static GX_FORCE_INLINE const GxColorHDR& getDivScalar(GxColorHDR& dst, const GxColorHDR& color, f32 scalar);
326 static GX_FORCE_INLINE const GxColorHDR& getAddColor(GxColorHDR& dst, const GxColorHDR& color0, const GxColorHDR& color1);
328 static GX_FORCE_INLINE const GxColorHDR& getSubColor(GxColorHDR& dst, const GxColorHDR& color0, const GxColorHDR& color1);
330 static GX_FORCE_INLINE const GxColorHDR& getMulColor(GxColorHDR& dst, const GxColorHDR& color0, const GxColorHDR& color1);
332 static GX_FORCE_INLINE const GxColorHDR& getLerp(GxColorHDR& dst, const GxColorHDR& color0, const GxColorHDR& color1, f32 t);
333
335 //-----------------------------------------------------------
337 //-----------------------------------------------------------
339
341 GX_FORCE_INLINE const GxColorHDR& addScalar(f32 scalar);
343 GX_FORCE_INLINE const GxColorHDR& subScalar(f32 scalar);
345 GX_FORCE_INLINE const GxColorHDR& mulScalar(f32 scalar);
347 GX_FORCE_INLINE const GxColorHDR& divScalar(f32 scalar);
349 GX_FORCE_INLINE const GxColorHDR& addColor(const GxColorHDR& color);
351 GX_FORCE_INLINE const GxColorHDR& subColor(const GxColorHDR& color);
353 GX_FORCE_INLINE const GxColorHDR& mulColor(const GxColorHDR& color);
354
356 //-------------------------------------------------------------
358 //-------------------------------------------------------------
360public:
361 f32 _red;
362 f32 _green;
363 f32 _blue;
364 f32 _alpha;
365
367};
368
369//===========================================================================
371//===========================================================================
373{
374 //-------------------------------------------------------------
376 //-------------------------------------------------------------
378public:
379 GX_RTTI_STRUCT(GxColorHSV)
380
381
382 //-------------------------------------------------------------
384 //-------------------------------------------------------------
386
388 GxColorHSV(void) : _hue(0.f), _saturation(0.f), _value(0.f), _alpha(0.f){}
390 GX_FORCE_INLINE GxColorHSV(f32 hue, f32 saturation, f32 value, f32 alpha = 1.0f);
392 GX_FORCE_INLINE GxColorHSV(const GxColorHDR& colorHDR);
393
395 GX_FORCE_INLINE GxColorHSV(const GxColorHSV& color);
396
398 //-------------------------------------------------------------
400 //-------------------------------------------------------------
402
404 GX_FORCE_INLINE GxColorHSV& operator = (const GxColorHSV& color);
406 friend GX_FORCE_INLINE b32 operator == (const GxColorHSV& color0, const GxColorHSV& color1);
408 friend GX_FORCE_INLINE b32 operator != (const GxColorHSV& color0, const GxColorHSV& color1);
409
411 //-------------------------------------------------------------
413 //-------------------------------------------------------------
415
417 GX_FORCE_INLINE void setRgb(const GxColorHDR& color);
419 GX_FORCE_INLINE GxColorHDR getRgb(void) const;
420
422 static GX_FORCE_INLINE const GxColorHSV& getInvertHue(GxColorHSV& dst, const GxColorHSV& color);
423
425 //-----------------------------------------------------------
427 //-----------------------------------------------------------
429
431 static void hsv2rgb(const GxColorHSV& hsv, GxColorHDR& rgb);
433 static void rgb2hsv(const GxColorHDR& rgb, GxColorHSV& hsv);
434
436 //-------------------------------------------------------------
438 //-------------------------------------------------------------
440public:
441 f32 _hue;
443 f32 _value;
444 f32 _alpha;
445
447};
448
449GX_CORE_NAMESPACE_END()
GX_FORCE_INLINE const GxColor operator*(const GxColor color, f32 scalar)
Definition GxColor.inl:202
GX_FORCE_INLINE b32 operator==(const GxColor color0, const GxColor color1)
Definition GxColor.inl:274
GX_FORCE_INLINE const GxColor operator/(const GxColor color, f32 scalar)
Definition GxColor.inl:226
GX_FORCE_INLINE const GxColor operator+(const GxColor color, u32 scalar)
Definition GxColor.inl:178
GX_FORCE_INLINE b32 operator!=(const GxColor color0, const GxColor color1)
Definition GxColor.inl:285
GX_FORCE_INLINE const GxColor operator-(const GxColor color, u32 scalar)
Definition GxColor.inl:190
色(HDR)
Definition GxColor.h:241
static GX_FORCE_INLINE const GxColorHDR & getDivScalar(GxColorHDR &dst, const GxColorHDR &color, f32 scalar)
スカラ除算を取得
Definition GxColor.inl:1027
GX_FORCE_INLINE const GxColorHDR & subColor(const GxColorHDR &color)
カラー減算
Definition GxColor.inl:1185
static GX_FORCE_INLINE const GxColorHDR & getSubScalar(GxColorHDR &dst, const GxColorHDR &color, f32 scalar)
スカラ減算を取得
Definition GxColor.inl:993
friend GX_FORCE_INLINE const GxColorHDR operator*(const GxColorHDR &color, f32 scalar)
スカラ乗算
Definition GxColor.inl:881
static GX_FORCE_INLINE const GxColorHDR & getSubColor(GxColorHDR &dst, const GxColorHDR &color0, const GxColorHDR &color1)
カラー減算を取得
Definition GxColor.inl:1063
GX_FORCE_INLINE const GxColorHDR & mulScalar(f32 scalar)
スカラ乗算
Definition GxColor.inl:1141
GX_FORCE_INLINE GxColorHDR & operator-=(f32 scalar)
スカラ減算代入
Definition GxColor.inl:790
GX_FORCE_INLINE const GxColorHDR & addColor(const GxColorHDR &color)
カラー加算
Definition GxColor.inl:1171
GX_FORCE_INLINE GxColorHDR & operator/=(f32 scalar)
スカラ除算代入
Definition GxColor.inl:812
friend GX_FORCE_INLINE b32 operator!=(const GxColorHDR &color0, const GxColorHDR &color1)
不一致
Definition GxColor.inl:964
friend GX_FORCE_INLINE b32 operator==(const GxColorHDR &color0, const GxColorHDR &color1)
一致
Definition GxColor.inl:953
GX_FORCE_INLINE GxColorHDR & operator*=(f32 scalar)
スカラ乗算代入
Definition GxColor.inl:801
constexpr f32 getLuminance(void) const
輝度を取得
Definition GxColor.h:315
GX_FORCE_INLINE const GxColorHDR & divScalar(f32 scalar)
スカラ除算
Definition GxColor.inl:1155
GX_FORCE_INLINE GxColorHDR & operator=(const GxColorHDR &color)
代入
Definition GxColor.inl:765
static GX_FORCE_INLINE const GxColorHDR & getAddColor(GxColorHDR &dst, const GxColorHDR &color0, const GxColorHDR &color1)
カラー加算を取得
Definition GxColor.inl:1046
static GX_FORCE_INLINE const GxColorHDR & getAddScalar(GxColorHDR &dst, const GxColorHDR &color, f32 scalar)
スカラ加算を取得
Definition GxColor.inl:976
f32 _green
緑(0.0f~1.0f)
Definition GxColor.h:362
f32 _blue
青(0.0f~1.0f)
Definition GxColor.h:363
friend GX_FORCE_INLINE const GxColorHDR operator/(const GxColorHDR &color, f32 scalar)
スカラ除算
Definition GxColor.inl:905
static GX_FORCE_INLINE const GxColorHDR & getLerp(GxColorHDR &dst, const GxColorHDR &color0, const GxColorHDR &color1, f32 t)
補間値を取得
Definition GxColor.inl:1098
GX_FORCE_INLINE const GxColorHDR & addScalar(f32 scalar)
スカラ加算
Definition GxColor.inl:1113
GxColorHDR(void)
デフォルトコンストラクタ
Definition GxColor.h:256
f32 _red
赤(0.0f~1.0f)
Definition GxColor.h:361
friend GX_FORCE_INLINE const GxColorHDR operator+(const GxColorHDR &color, f32 scalar)
スカラ加算
Definition GxColor.inl:857
GX_FORCE_INLINE const GxColorHDR & subScalar(f32 scalar)
スカラ減算
Definition GxColor.inl:1127
static GX_FORCE_INLINE const GxColorHDR & getMulScalar(GxColorHDR &dst, const GxColorHDR &color, f32 scalar)
スカラ乗算を取得
Definition GxColor.inl:1010
f32 _alpha
不透明度(0.0f~1.0f)
Definition GxColor.h:364
friend GX_FORCE_INLINE const GxColorHDR operator-(const GxColorHDR &color, f32 scalar)
スカラ減算
Definition GxColor.inl:869
GX_FORCE_INLINE const GxColorHDR & mulColor(const GxColorHDR &color)
カラー乗算
Definition GxColor.inl:1199
static GX_FORCE_INLINE const GxColorHDR & getMulColor(GxColorHDR &dst, const GxColorHDR &color0, const GxColorHDR &color1)
カラー乗算を取得
Definition GxColor.inl:1080
GX_FORCE_INLINE GxColorHDR & operator+=(f32 scalar)
スカラ加算代入
Definition GxColor.inl:779
色(HSV)
Definition GxColor.h:373
GX_FORCE_INLINE void setRgb(const GxColorHDR &color)
RGBを設定
Definition GxColor.inl:1288
f32 _value
明度(0.0f~1.0f)
Definition GxColor.h:443
GxColorHSV(void)
デフォルトコンストラクタ
Definition GxColor.h:388
GX_FORCE_INLINE GxColorHSV & operator=(const GxColorHSV &color)
代入
Definition GxColor.inl:1253
static void rgb2hsv(const GxColorHDR &rgb, GxColorHSV &hsv)
RGBをHSVに変換
Definition GxColor.cpp:221
friend GX_FORCE_INLINE b32 operator!=(const GxColorHSV &color0, const GxColorHSV &color1)
不一致
Definition GxColor.inl:1279
f32 _hue
色相(0.0f~360.0f)
Definition GxColor.h:441
friend GX_FORCE_INLINE b32 operator==(const GxColorHSV &color0, const GxColorHSV &color1)
一致
Definition GxColor.inl:1268
static void hsv2rgb(const GxColorHSV &hsv, GxColorHDR &rgb)
HSVをRGBに変換
Definition GxColor.cpp:159
GX_FORCE_INLINE GxColorHDR getRgb(void) const
RGBを取得
Definition GxColor.inl:1298
f32 _alpha
不透明度(0.0f~1.0f)
Definition GxColor.h:444
static GX_FORCE_INLINE const GxColorHSV & getInvertHue(GxColorHSV &dst, const GxColorHSV &color)
反転色(色相だけ)を取得
Definition GxColor.inl:1312
f32 _saturation
彩度(0.0f~1.0f)
Definition GxColor.h:442
Definition GxColor.h:21
constexpr void setPropertyGreen(const void *const pValue)
緑設定
Definition GxColor.h:143
constexpr void getPropertyGreen(void *const pValue) const
緑取得
Definition GxColor.h:141
constexpr void setPropertyBlue(const void *const pValue)
青設定
Definition GxColor.h:147
u32 _green
Definition GxColor.h:226
constexpr void setPropertyAlpha(const void *const pValue)
α設定
Definition GxColor.h:151
constexpr void setPropertyRed(const void *const pValue)
赤設定
Definition GxColor.h:139
u32 _red
Definition GxColor.h:225
u32 _blue
Definition GxColor.h:227
constexpr void getPropertyBlue(void *const pValue) const
青取得
Definition GxColor.h:145
u32 _alpha
アルファ
Definition GxColor.h:228
constexpr f32 getLuminance(void) const
輝度を取得
Definition GxColor.h:156
constexpr void getPropertyAlpha(void *const pValue) const
α取得
Definition GxColor.h:149
GX_FORCE_INLINE GxColor getInvert(void) const
反転色(補色)を取得
Definition GxColor.h:154
GxColor(void)
デフォルトコンストラクタ
Definition GxColor.h:76
constexpr void getPropertyRed(void *const pValue) const
赤取得
Definition GxColor.h:137
Definition GxBase.h:24
32bitブーリアン
Definition GxDefine.h:173