/* ====================================================================
* 파    일 :	DepthPlane.h
* 목    적 :	2D, 2.5D 랜더링 기본 객체
* 작 성 자 :	이법석
* 작 성 일 :	2007.3
* 주의사항 :	2.5D 객체를 멤버로 가지고 관리하려는 클래스가 꼭 상속받아야 할 객체
* =================================================================== */

#pragma once

///
class cPlane
{
public:
	virtual ~cPlane() {}

	virtual void Draw() = 0;

	/// 좌표 변환 ( world pos -> Screen pos )
	static void WorldPtToScreenPt( NiCamera* pCam, const NiPoint3& pt, float& posX, float& posY, bool InScreen = true );

protected:
	cPlane() {}
};

class cDepthPlaneObject;

///
class cDepthPlane
{
public:
	virtual ~cDepthPlane();

	/// 출력함수를 제공
	void Render( NiRenderer* pRenderer );
	virtual void Render2D() {}

	/// RenderedTexture를 구성하는 함수
	void Compose( NiDX9Renderer* pRenderer );

	/// 보여져야 하는 경우 처리
	void OnUpdate( NiCamera* pCamera, const NiPoint3& pos, float scale = 1.0f );

	inline NiGeometry* GetPlane() { return (NiGeometry*)mpRenderTargetPlane; }

protected:
	virtual void RenderFrame() = 0;

protected:
	cDepthPlane( unsigned int width, unsigned int height );

protected:
	cDepthPlaneObject*			mpRenderTargetPlane;

	NiColorA					mBackColor;

	NiRenderedTexturePtr		mpRenderedTexture;
	NiRenderTargetGroupPtr		mpRenderTargetGroup;
};