반응형
범용성을 위해 Color클래스를 만들어봤다.
class ColorF
{
private:
float rgba[4];
public:
ColorF(float r = 0.0f, float g = 0.0f, float b = 0.0f, float a = 1.0f)
: r(rgba[0]), g(rgba[1]), b(rgba[2]), a(rgba[3]) // 참조 초기화
{
rgba[0] = r; rgba[1] = g; rgba[2] = b; rgba[3] = a;
}
// 아니 참조도 메모리 차지하는거 처음암 ㅁㅊ
const float& r;
const float& g;
const float& b;
const float& a;
UINT32 GetRGB()
{
UINT8 r = static_cast<UINT8>(rgba[0] * 255.0f);
UINT8 g = static_cast<UINT8>(rgba[1] * 255.0f);
UINT8 b = static_cast<UINT8>(rgba[2] * 255.0f);
return (r << 16) | (g << 8) | (b);
}
operator const float* () const { return rgba; }
operator const Vector4() const { return Vector4(r, g, b, a); }
ColorF& operator=(const ColorF& _val)
{
rgba[0] = _val.rgba[0];
rgba[1] = _val.rgba[1];
rgba[2] = _val.rgba[2];
rgba[3] = _val.rgba[3];
return *this;
}
#ifdef _D2D1_H_
operator D3DCOLORVALUE()
{
return D3DCOLORVALUE(r, g, b, a);
}
#endif
};
처음 만들때 정말 바보같은 생각을 함. 답답해도 들어보삼
처음만들때 한생각 : float4개를 배열로 만든다음(배열은 연속적인 메모리니까?) r,g,b,a가 각각 배열을 가리키게 하면 메모리도 4X4 16바이트 쓸 수 있겠지? (참조는 메모리 안먹는줄 암)
근데 다 만들고 보니까 구조체가 48바이트를 잡아먹는거임. 뭐지? 하고 보니까 참조도 메모리를 차지함. 당연한건데 왜 그 생각을 못했지? (심지어 참조는 주소를 가지고있어야 해서 8바이트임ㅋㅋ)
그리고 어차피 float 배열로 안해도 구조체는 연속적인 메모리로 정리되기 때문에 그냥 r, g, b, a 각각 float로 만들면 됨.... 이러면 더 명확하고 간단한데.... 자꾸 생각에 잡아먹혀서 간단하게 못짠듯
다시 짜본 Color클래스
#pragma once
class ColorF
{
public:
ColorF(float _r = 0.0f, float _g = 0.0f, float _b = 0.0f, float _a = 1.0f)
: r(_r), g(_g), b(_b), a(_a) {}
public:
float r, g, b, a;
UINT32 GetRGB()
{
UINT8 r_ = static_cast<UINT8>(r * 255.0f);
UINT8 g_ = static_cast<UINT8>(g * 255.0f);
UINT8 b_ = static_cast<UINT8>(b * 255.0f);
return (r_ << 16) | (g_ << 8) | (b_);
}
operator const float* () const { return &r; }
operator const Vector4() const { return Vector4(r, g, b, a); }
#ifdef _D2D1_H_
operator D3DCOLORVALUE()
{
return D3DCOLORVALUE(r, g, b, a);
}
#endif
};
초 - 간 - 단
r주소 반환해주면 구조체는 연속적인 메모리로 정리되어있기때문에 rgba에 접근할 수 있다.
굿ㅋㅋ
생각에 잡아먹히지 말자...ㅇㅅㅇ
반응형
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 오늘의 삽질_inline 키워드에 대하여. (3) | 2024.12.19 |
---|---|
[C++] 2진 리터럴(Binary literals)에 대해 알아보자.araboza (C++14) (2) | 2024.09.16 |
[C++] auto의 타입 추론에 대하여 알아보자.araboza (C++11) (0) | 2024.09.13 |
[C++] 복사 생성자(+복사 대입 연산자)를 알아보자.araboza (4) | 2024.09.12 |
[C++] is_base_of<> 특정 클래스를 상속 받았는지 확인하는 함수 (2) | 2024.09.08 |