aboutsummaryrefslogtreecommitdiffstats
path: root/src/utils/rgb_color.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/rgb_color.cpp')
-rw-r--r--src/utils/rgb_color.cpp64
1 files changed, 62 insertions, 2 deletions
diff --git a/src/utils/rgb_color.cpp b/src/utils/rgb_color.cpp
index ea8327e1..2e8954c0 100644
--- a/src/utils/rgb_color.cpp
+++ b/src/utils/rgb_color.cpp
@@ -27,15 +27,47 @@
namespace usdx
{
RgbColor::RgbColor(int red, int green, int blue)
- : red(red / 255.0f), green(green / 255.0f), blue(blue / 255.0f)
+ : red(red / 255.0f), green(green / 255.0f), blue(blue / 255.0f),
+ array(NULL), array_length(0)
{
}
RgbColor::RgbColor(float red, float green, float blue)
- : red(red), green(green), blue(blue)
+ : red(red), green(green), blue(blue), array(NULL), array_length(0)
{
}
+ RgbColor::RgbColor(const RgbColor& color)
+ : red(color.red), green(color.green), blue(color.blue), array(NULL),
+ array_length(0)
+ {
+ }
+
+ RgbColor::~RgbColor()
+ {
+ if (array != NULL) {
+ delete[] array;
+ array = NULL;
+ }
+ }
+
+ RgbColor& RgbColor::operator=(const RgbColor& color)
+ {
+ if (this != &color) {
+ red = color.red;
+ green = color.green;
+ blue = color.blue;
+ array_length = 0;
+
+ if (array != NULL) {
+ delete[] array;
+ array = NULL;
+ }
+ }
+
+ return *this;
+ }
+
float RgbColor::get_red(void) const
{
return red;
@@ -50,4 +82,32 @@ namespace usdx
{
return blue;
}
+
+ const GLubyte* RgbColor::get_array(size_t len) const
+ {
+ if (array_length != len && array != NULL) {
+ delete[] array;
+ array = NULL;
+ array_length = 0;
+ }
+
+ if (array == NULL) {
+ int components = get_array_comonent_count();
+ array = new GLubyte[len * components];
+ array_length = len;
+
+ for (size_t i = 0; i < len; i++) {
+ array[i*components] = red * 255.0f;
+ array[(i*components) + 1] = green * 255.0f;
+ array[(i*components) + 2] = blue * 255.0f;
+ }
+ }
+
+ return array;
+ }
+
+ int RgbColor::get_array_comonent_count(void) const
+ {
+ return 3;
+ }
};