//------------------------------------------------------------------------------
// Lamp : Open source game middleware
// Copyright (C) 2004  Junpei Ohtani ( Email : junpee@users.sourceforge.jp )
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//------------------------------------------------------------------------------

/** @file
 * RGBA8ビットピクチャヘッダ
 * @author Junpee
 */

#ifndef PICTURE_RGBA8_H_
#define PICTURE_RGBA8_H_

#include <Graphics/Picture/Picture.h>

namespace Lamp{

//------------------------------------------------------------------------------
/**
 * RGBA8ビットピクチャ
 */
class PictureRGBA8 : public Picture{
friend class PictureManager;
public:
	/**
	 * RGBA8ビットピクチャかどうか
	 * @return RGBA8ビットピクチャならtrue
	 */
	virtual bool isPictureRGBA8() const{ return true; }

	//--------------------------------------------------------------------------
	/**
	 * コピー
	 * @return コピーされたピクチャ
	 */
	virtual Picture* copy() const{ return copyPictureRGBA8(); }

	/**
	 * RGBA8ビットピクチャのコピー
	 * @return コピーされたピクチャ
	 */
	virtual PictureRGBA8* copyPictureRGBA8() const;

	//--------------------------------------------------------------------------
	/**
	 * デバイスオブジェクトの初期化
	 * @return 成功したらtrueを返す
	 */
	virtual bool initializeGraphicsDeviceObjects(){ return compile(); }

	/**
	 * デバイスオブジェクトの削除
	 */
	virtual void deleteGraphicsDeviceObjects(){ SafeRelease(d3dTexture_); }

	//--------------------------------------------------------------------------
	/**
	 * サイズの設定
	 * @param size サイズ
	 */
	virtual void setSize(const DimensionI& size);

	/**
	 * イメージバッファの取得
	 * @return イメージバッファ
	 */
	virtual Color4c* getImageBuffer(){ return image_; }

	//--------------------------------------------------------------------------
	/**
	 * イメージの設定
	 * @param image 設定するイメージ
	 */
	virtual void setImage(const Color4c* image);

	/**
	 * イメージの取得
	 * @return イメージ
	 */
	virtual const Color4c* getImage() const{ return image_; }

	//--------------------------------------------------------------------------
protected:
	/**
	 * コンストラクタ
	 * @param name 名前
	 * @param scene シーン
	 */
	PictureRGBA8(const String& name, Scene* scene);

	/**
	 * デストラクタ
	 */
	virtual ~PictureRGBA8();

	/**
	 * D3Dテクスチャの取得
	 * @return D3Dテクスチャの取得
	 */
	virtual Direct3DTexture* getD3DTexture();

	/**
	 * コンパイル
	 * @return 成功すればtrueを返す
	 */
	virtual bool compile();

	/**
	 * イメージのコンパイル
	 */
	virtual bool compileImage(
		const Color4c* image, const DimensionI& size, int mipmapLevel);

	/**
	 * ミップマップのコンパイル
	 */
	virtual bool compileMipmap(
		const Color4c* image, const DimensionI& size, int mipmapLevel);

private:
	// Direct3Dテクスチャ
	Direct3DTexture* d3dTexture_;
	// イメージ
	Color4c* image_;
};

//------------------------------------------------------------------------------
} // End of namespace Lamp
#endif // End of PICTURE_RGBA8_H_
//------------------------------------------------------------------------------

