반응형

범용성을 위해 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에 접근할 수 있다.

의도대로 16바이트로 나옴

굿ㅋㅋ

 

생각에 잡아먹히지 말자...ㅇㅅㅇ

반응형

+ Recent posts