/// @file ModelMaker.h
#ifndef OBJECTMAKER_H
#define OBJECTMAKER_H

#include "../LayerInfo.h"
#define D3DFVF_CustomVertex	( D3DFVF_XYZ | D3DFVF_TEX1 )

struct CustomVertex {
	float fX, fY, fZ;
	float fU, fV;
};

/**
	@brief 렌더링을 위한 모델클래스

	모델이라는 개념을 렌더링을 위한 개념입니다.\n
	실제 게임객체중 이러한 모델을 가지는 객체를 MObject라고 합니다.\n
	이 객체는 MObject의 구성이며, 모델생성함수의 매개변수로 이용됩니다.\n
	따로 new로 생성되는것은 금지되어 있습니다.\n
	ModelMaker클래스의 멤버함수를 통해 생성되며 관리(소멸)은 RenderMObject가 담당합니다.
*/
class Model {
	public:
		LPDIRECT3DVERTEXBUFFER9 pVB; ///< 버텍스 버퍼
		LPDIRECT3DINDEXBUFFER9  pIB; ///< 인덱스 버퍼
		LPDIRECT3DTEXTURE9      pTexture; ///< 텍스쳐
		int numVertices;
		int numPolygons;

	private:
		static void* operator new(size_t size);
		static void* operator new[](size_t size);
		static void operator delete(void *ptr);
		static void operator delete[](void *ptr);
};

/**
	@brief Model 생성 클래스

	모델을 생성하는데 필요한 객체입니다.\n
	모든 멤버함수는 static함수이며 Model객체를 생성합니다.
*/
class ModelMaker {
	public:
		static void createCubeModel(LPDIRECT3DDEVICE9 _pD3DDevice, Model* _pModel, const char* _pTextureName, const int _scale);
};
#endif