#pragma once

//! @file Mix/Scene/ICamera.h
//! @brief カメラインターフェースインクルードファイル

#include "Mix/Scene/IRendererObject.h"
#include "Mix/Geometry/Frustum.h"

namespace Mix{ namespace Scene{

	//! @class ICamera
	//! @brief カメラインターフェースインクルードファイル
	class ICamera : public Mix::Scene::IRendererObject
	{
	public:
		//! @struct VISIBILITY_SETTINGS
		//! @brief 視界設定構造体
		struct VISIBILITY_SETTINGS
		{
			//! @brief ローカルライトによるライティングの限界距離( 0.0f〜正の無限大 )
			Float32 loLimitDistance;
			//! @brief ローカルライトによるライティングが限界距離に達する前のフォールオフに要する距離( 0.0f〜正の無限大 )
			Float32 loFalloffAmount;

			//! @brief プランターの描画限界距離( 0.0f〜正の無限大 )
			Float32 plLimitDistance;
			//! @brief プランターの描画限界距離に達する前のフォールオフに要する距離( 0.0f〜正の無限大 )
			Float32 plFalloffAmount;
			//! @brief プランターのフォールオフ距離の敷居( 0.0f〜1.0f )
			//! @note
			//! プランターはフォールオフを開始する距離( plLimitDistance - plFalloffDistance )を超えた際に、<br>
			//! ( plLimitDistance - plFalloffDistance * plFalloffThreshold )を敷居とし、最大２段階に分けてポリゴン数を減らしていきます。
			Float32 plFalloffThreshold;

			//! @brief パーティクルの描画限界距離( 0.0f〜正の無限大 )
			Float32 paLimitDistance;
			//! @brief パーティクルの描画限界距離に達する前のフォールオフを開始する範囲の大きさ( 0.0f〜paLimitDistance ) <b>※現在機能しません</b>
			//! @note 範囲 = ( paLimitDistance - paFalloffAmount ) 〜 paLimitDistance
			Float32 paFalloffAmount;
			//! @brief パーティクルのフォールオフに要する時間( 秒単位 ) <b>※現在機能しません</b>
			Float32 paFalloffDuration;

			//! @brief アクターモデルの描画限界距離( 0.0f〜正の無限大 )
			Float32 amLimitDistance;
			//! @brief アクターモデルの描画限界距離に達する前のフォールオフを開始する範囲の大きさ( 0.0f〜amLimitDistance ) <b>※現在機能しません</b>
			//! @note 範囲 = ( amLimitDistance - amFalloffAmount ) 〜 amLimitDistance
			Float32 amFalloffAmount;
			//! @brief アクターモデルのフォールオフに要する時間( 秒単位 ) <b>※現在機能しません</b>
			Float32 amFalloffDuration;

			//! @brief 影の描画限界距離( 0.0f〜正の無限大 )
			Float32 sdwLimitDistance;
			//! @brief 影の描画限界距離に達する前のフォールオフに要する距離( 0.0f〜正の無限大 )
			Float32 sdwFalloffAmount;
		};

		//! @struct AMBIENT_OCCLUSION_SETTINGS
		//! @brief アンビエントオクルージョン設定構造体
		struct AMBIENT_OCCLUSION_SETTINGS
		{
			Float32 radius;			//!< 遮断を検索する範囲の半径( 0.0f〜正の無限大 )
			Float32 threshold;		//!< 遮断されていると判断する深度の閾値( 0.0f〜正の無限大 )
			Float32 dist;			//!< 遮断されていると判断する深度の距離( 0.0f〜正の無限大 )
			Float32 intensity;		//!< 強度( 0.0f〜正の無限大 )
			Mix::Scene::BLUR blur;	//!< スムージンに使用するブラー
		};

		//! @enum SHADOW_MAPPING_PCF_SIZE
		//! @brief シャドウマッピングＰＣＦサイズ列挙定数
		enum SHADOW_MAPPING_PCF_SIZE
		{
			SMPS_3 = 0,	//!< 3x3サンプル
			SMPS_5 = 1,	//!< 5x5サンプル
			SMPS_7 = 2,	//!< 7x7サンプル
		};

		//! @struct SHADOW_MAPPING_SETTINGS
		//! @brief シャドウマッピング設定構造体
		struct SHADOW_MAPPING_SETTINGS
		{
			Float32 depthBias;			//!< 深度バイアス
			Float32 depthSlopeScale;	//!< 深度傾斜のスケール( 0.0f〜1.0f )
			Float32 depthBiasClamp;		//!< 深度バイアスの上限( 0.0f〜1.0f )

			Mix::Scene::ICamera::SHADOW_MAPPING_PCF_SIZE pcfSize; //!< スムージングを行う影の縁(ボーダー)の太さ

			Mix::Scene::BLUR blur;		//!< スムージングに使用するブラー
			Float32 tint;				//!< 濃淡( 0.0f〜1.0f )
		};

		//! @enum LUMINOSITY_FLAG
		//! @brief ルミノシティフラグ列挙定数
		enum LUMINOSITY_FLAG
		{
			//! @brief トーンマッピング
			LUM_TONE_MAPPING			= 0x00000001,

			//! @brief ブルーシフト
			//! @note
			//! このフラグを設定した場合、全体に青みがかった感じになります。<br>
			//! 夜などの時間帯や暗闇に対して有効な設定です。
			LUM_BLUE_SHIFT			= 0x00000002,

			//! @brief スタティックミドルグレイ
			//! @note このフラグを設定した場合は、中間の明るさ( LUMINANCE_OPERATION_SETTINGS::middleGray ) の値を設定する必要があります。
			LUM_STATIC_MIDDLE_GRAY	= 0x00000004,
		};

		//! @struct LUMINOSITY_SETTINGS
		//! @brief ルミノシティ設定構造体
		struct LUMINOSITY_SETTINGS
		{
			UInt32 flags;	//!< Mix::Scene::ICamera::LUMINOSITY_FLAG 列挙定数の組み合わせ

			Float32 minLum;	//!< 順応できる最低輝度( maxLum >= ( 0.0f <= minLum <= 2.0f ) )
			Float32 maxLum;	//!< 順応できる最大輝度( minLum <= ( minLum <= maxLum <= 2.0f ) )

			//! @brief 明順応の速さ( 0.0f〜1.0f )
			//! @note この値が高いほど、明順応に要する時間が短くなり、暗順応に要する時間が長くなります。
			Float32 rods;
			//! @brief 順応の速さ( 0.0f〜1.0f )
			//! @note この値が高いほど、順応に要する時間が短くなります。
			Float32 cones;

			//! @brief 中間の明るさ( 0.0f〜正の無限大 )
			//! @note flags に LUM_OP_STATIC_MIDDLE_GRAY が設定されている場合に値を設定する必要があります。
			Float32 middleGray;
			//! @brief 白く表示される明るさ( 0.0f〜正の無限大 )
			Float32 white;
		};

		//! @struct BLOOM_OVERFLOW
		//! @brief ブルームオーバーフロウ構造体
		struct BLOOM_OVERFLOW
		{
			Mix::Scene::BLUR blur;					//!< ブラー
			Float32 intensity;						//!< 強度( 0.0f〜正の無限大 )
		};

		//! @struct BLOOM_SETTINGS
		//! @brief ブルーム設定構造体
		struct BLOOM_SETTINGS
		{
			Mix::Scene::BRIGHT_PASS brightPass;		//!< ブライトパス
			Mix::Graphics::BLEND_TYPE blendType;	//!< ブレンドタイプ
			Float32 intensity;						//!< 強度( 0.0f〜正の無限大 )
		};

		//! @enum LIGHT_SHAFTS_SAMPLES
		//! @brief ライトシャフトサンプル数列挙定数
		enum LIGHT_SHAFTS_SAMPLES
		{
			LS_32,	//!< 32サンプル
			LS_64,	//!< 64サンプル
			LS_128,	//!< 128サンプル
		};

		//! @struct LIGHT_SHAFTS_SETTINGS
		//! @brief ライトシャフト設定構造体
		struct LIGHT_SHAFTS_SETTINGS
		{
			Mix::Scene::BRIGHT_PASS brightPass;	//!< ブライトパス

			Float32 whiteness; //!< 白さ( 0.0f〜1.0f )

			//! @brief サンプリング数
			//! @note この値を変更した場合は、濃度( density )を調整する必要があります。
			Mix::Scene::ICamera::LIGHT_SHAFTS_SAMPLES samples;

			//! @brief 濃度( 0.0f〜1.0f )
			//! @note サンプリングする際のステップ量に依存します
			Float32 density;
			Float32 decay;		//!< 衰退( 0.0f〜1.0f )
			Float32 exposure;	//!< 露光( 0.0f〜正の無限大 )

			Float32 start;		//!< フェードインが開始する距離( 0.0f〜正の無限大 )
			Float32 end;		//!< フェードインが終了する距離( start〜正の無限大 )
		};

		//! @struct LENS_FLARE_SETTINGS
		//! @brief レンズフレア設定構造体
		struct LENS_FLARE_SETTINGS
		{
			Mix::Scene::BRIGHT_PASS brightPass;	//!< ブライトパス

			UInt32 ghostNum;		//!< 残像の数( 1〜32 )
			Float32 ghostWeight;	//!< 残像のウェイト( 1.0f〜正の無限大 )
			Float32 ghostDispersal;	//!< 残像のばらつき( 0.0f 〜 1.0f )

			Float32 haloWeight;	//!< 虹輪のウェイト( 1.0f〜正の無限大 )
			Float32 haloWidth;	//!< 虹輪は大きさ( 0.0f 〜 1.0f )

			Float32 distortion;	//!< 色収差の強さ( 0.0f〜正の無限大 )

			Float32 brustSharpness;	//!< 放射線の鮮明さ( 1.0f〜正の無限大 )
			Float32 brustIntensity;	//!< 放射線の強さ( 0.0f〜正の無限大 )

			Float32 dirtSharpness;	//!< 汚れの鮮明さ( 1.0f〜正の無限大 )
			Float32 dirtIntensity;	//!< 汚れの強さ( 0.0f〜正の無限大 )

			Mix::Scene::BLUR blur;	//!< ブラー

			Float32 intensity;	//!< 強度( 0.0f〜正の無限大 )
		};

		//! @enum LENS_FLARE_TEXTURE_TYPE
		//! @brief レンズフレア : テクスチャ列挙定数
		enum LENS_FLARE_TEXTURE_TYPE
		{
			LFT_COLOR	= 0,	//!< カラーテクスチャ( 残像の色 )
			LFT_BRUST	= 1,	//!< ブラストテクスチャ( 虹輪の放射 )
			LFT_DIRT	= 2,	//!< ダートテクスチャ( レンズの汚れ )
		};

		//! @enum FILMIC_TYPE
		//! @brief フィルミックタイプ列挙定数
		enum FILMIC_TYPE
		{
			FI_NONE		= 0,	//!< 無効
			FI_HEJL		= 1,	//!< Jim Hejl
			FI_HABLE	= 2,	//!< John Hable
		};

		//! @struct FILMIC_HABLE_SETTINGS
		//! @brief フィルミック HABLE パラメータ構造体
		struct FILMIC_HABLE_SETTINGS
		{
			Float32 exposureBias;
			Float32 shoulderStrength;
			Float32 linearStrength;
			Float32 linearAngle;
			Float32 toeStrength;
			Float32 toeNumerator;
			Float32 toeDenominator;
			Float32 linearWhitePointValue;
		};

		//! @enum MOTION_BLUR_QUALITY
		//! @brief モーションブラー品質列挙定数
		enum MOTION_BLUR_QUALITY
		{
			MBQ_LOW		= 0,	//!< 最低品質( 8サンプル )
			MBQ_MIDDLE	= 1,	//!< 通常品質( 16サンプル )
			MBQ_HIGH	= 2,	//!< 最高品質( 24サンプル )
		};

		//! @struct MOTION_BLUR_SETTINGS
		//! @brief モーションブラー設定構造体
		struct MOTION_BLUR_SETTINGS
		{
			Float32 minAngularVelocity;	//!< 活動状態になる最小回転速度( 0.0f( 0度 )〜1.0f( 180度 ) )
			Float32 maxAngularVelocity;	//!< 活動状態になる最大回転速度( minAngularVelocity〜1.0f( 180度 ) )
			Float32 minLinearVelocity;	//!< 活動状態になる最小移動速度( 0.0f〜正の無限大 )
			Float32 maxLinearVelocity;	//!< 活動状態になる最大移動速度( minLinearVelocity〜正の無限大 )

			UInt32 amount;	//!< 状態を保持するフレーム量( 1〜4 )
			Float32 echoTimeLength;	//!< 非活動状態に移行した際の残像のフェードアウト時間( 秒単位 )

			Mix::Scene::ICamera::MOTION_BLUR_QUALITY quality;	//!< 品質

			Float32 dist;		//!< 残像を描画する深度の奥への許容範囲( 0.0f〜正の無限大 )
			Float32 damping;	//!< ブラーの減衰値( 0.0f〜1.0f )
			Float32 scale;		//!< ブラーのスケール( 0.0f〜1.0f )
			Float32 intensity;	//!< ブラーの強さ( 0.0f〜正の無限大 )
		};

		//! @struct DISTORTION_SETTINGS
		//! @brief 歪曲パラメータ構造体
		struct DISTORTION_SETTINGS
		{
			Float32 k;		//!< 基準値( -1.0f 〜 +1.0f )
			Float32 kCube;	//!< 補間値( -1.0f 〜 +1.0f )
			Float32 scale;	//!< スケール( 0.0f 以上 )
		};

		//! @struct CHROMATISM_SETTINGS
		//! @brief 色収差設定構造体
		struct CHROMATISM_SETTINGS
		{
			DISTORTION_SETTINGS distortion;	//!< 歪曲パラメータ
			Mix::Vector4 colorFactor;		//!< 色ずれファクタ

			Mix::Scene::BLUR blur;			//!< ブラー

			//! @brief ウェイト( 1.0f 以上 )
			//! @note この値が高いほど、効果が外よりになります。
			Float32 weight;
			Float32 fiStartZ;				//!< 効果を開始する距離
			Float32 fiEndZ;					//!< 効果が最大になる距離
		};

		//! @struct DOF_SETTINGS
		//! @brief 被写界深度設定構造体
		struct DOF_SETTINGS
		{
			Float32 nearZ;				//!< 効果範囲を表す手前の位置( 0.0f < nearZ )
			Float32 nearDist;			//!< 効果が最大になる手間への距離( nearZ >= nearDist )

			Float32 farZ;				//!< 効果範囲を表す奥の位置( nearZ < farZ )
			Float32 farDist;			//!< 効果が最大になる奥への距離( 0.0f <= farDist )

			Mix::Scene::BLUR blur1;		//!< ブラー1
			Mix::Scene::BLUR blur2;		//!< ブラー2
			Float32 blurThreshold;		//!< ブラー1と2を混合(中間)の閾値( 0.0f〜1.0f )
		};

		//! @struct VIGNETTE_SETTINGS
		//! @brief ヴィネット設定構造体
		struct VIGNETTE_SETTINGS
		{
			Float32 start;		//!< 開始位置( 0.0f〜1.0f )
			Float32 end;		//!< 終了位置( start〜1.0f )
			Mix::Vector4 color;	//!< 色
		};

		//! @enum ANTIALIASING_TYPE
		//! @brief アンチエイリアシングタイプ列挙定数
		enum ANTIALIASING_TYPE
		{
			AA_NONE	= 0,	//!< 無し
			AA_FXAA	= 1,	//!< FXAA
		};

		//! @struct DEBUG_DRAW_FILIMIC_SETTINGS
		//! @brief デバッグ : フィルミック描画設定構造体
		struct DEBUG_DRAW_FILIMIC_SETTINGS
		{
			Mix::Rectangle rect;	//!< グラフを描画する矩形
			Int32 padding;			//!< グラフのパディング

			Float32 valueMax;		//!< 最大値
			Float32 valueStep;		//!< 値のステップ量

			Int32 memNum;			//!< メモリの数

			Float32 errValue;		//!< エラー値
		};

	protected:
		//! @brief デストラクタ
		virtual ~ICamera( void ){}

	public:
		//! @name 基本
		//! @{

		//! @brief 識別子を取得します
		//! @return 識別子を返します
		//! @note
		//! 識別子は 0〜16 の範囲になります。<br>
		//! また、既に破棄されている場合の値は 0xFFFFFFFF になります。
		virtual UInt32 GetID( void ) const = 0;

		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::CAMERA_CONFIG 構造体を返します
		virtual const Mix::Scene::CAMERA_CONFIG& GetConfig( void ) const = 0;
		//! @brief 設定をします
		//! @param[in] config 設定を表す const Mix::Scene::CAMERA_CONFIG 構造体
		//! @return 成功した場合は True を返します
		virtual Boolean SetConfig( const Mix::Scene::CAMERA_CONFIG& config ) = 0;

		//! @brief 垂直方向の画角を取得します
		//! @return 垂直方向の画角( ラジアン単位 )
		virtual Float32 GetFovY( void ) const = 0;
		//! @brief デフォルトのアスペクト比を取得します
		//! @return アスペクト比
		virtual Float32 GetDefaultAspect( void ) const = 0;
		//! @brief アスペクト比を取得します
		//! @return アスペクト比
		virtual Float32 GetAspect( void ) const = 0;
		//! @brief 手前のクリップ値を取得します
		//! @return 手前のクリップ値
		virtual Float32 GetNearZ( void ) const = 0;
		//! @brief 奥のクリップ値を取得します
		//! @return 奥のクリップ値
		virtual Float32 GetFarZ( void ) const = 0;
		//! @brief 射影行列を取得します
		//! @return 射影行列を表す Mix::Matrix4x4 クラスを返します
		virtual const Mix::Matrix4x4& GetProjectionMatrix( void ) const = 0;
		//! @brief プロジェクションを設定します
		//! @param[in] fovY 視野の垂直方向の画角( ラジアン単位 )
		//! @param[in] nearZ 手間のクリップ値
		//! @param[in] farZ 奥のクリップ値
		virtual void SetProjection( Float32 fovY, Float32 nearZ, Float32 farZ ) = 0;
		//! @brief プロジェクションを設定します
		//! @param[in] fovY 視野の垂直方向の画角( ラジアン単位 )
		//! @param[in] aspect アスペクト比
		//! @param[in] nearZ 手間のクリップ値
		//! @param[in] farZ 奥のクリップ値
		virtual void SetProjection( Float32 fovY, Float32 aspect, Float32 nearZ, Float32 farZ ) = 0;
		//! @brief 射影行列を設定します
		//! @param[in] fovY 視野の垂直方向の画角( ラジアン単位 )
		//! @param[in] width 画面の幅
		//! @param[in] height 画面の高さ
		//! @param[in] nearZ 手間のクリップ値
		//! @param[in] farZ 奥のクリップ値
		virtual void SetProjection( Float32 fovY, UInt32 width, UInt32 height, Float32 nearZ, Float32 farZ ) = 0;

		//! @brief 更新します
		//! @param[in] dt デルタタイム
		//! @note モーションブラーを使用しない場合は、デルタタイムを指定する必要はありません。
		virtual void Update( Float32 dt = 0.016f ) = 0;

		//! @brief 視点を取得します
		//! @return 視点の座標を表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetEye( void ) const = 0;
		//! @brief 注視点を取得します
		//! @return 注視点の座標を表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetAt( void ) const = 0;
		//! @brief ビューのベクトル(正規化されていない)を取得します
		//! @return ビューのベクトルを表す Mix::Vector3 クラス
		virtual const Mix::Vector3& GetViewVector( void ) const = 0;
		//! @brief ビューの前方向(正規化されている)を取得します
		//! @return 方向を表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetViewForward( void ) const = 0;
		//! @brief ビューの上方向(正規化されている)を取得します
		//! @return 方向を表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetViewUpward( void ) const = 0;
		//! @brief ビューの横方向(正規化されている)を取得します
		//! @return 方向を表す Mix::Vector3 クラスを返します
		virtual const Mix::Vector3& GetViewCrossDirection( void ) const = 0;
		//! @brief ビュー行列を取得します
		//! @return ビュー行列を表す Mix::Matrix4x4 クラスを返します
		virtual const Mix::Matrix4x4& GetViewMatrix( void ) const = 0;

		//! @brief フラスタムを取得します
		//! @return フラスタムを表す Mix::Geometry::Frustum クラス
		virtual const Mix::Geometry::Frustum& GetFrustum( void ) const = 0;

		//! @brief 透視変換行列を取得します
		//! @return 透視変換行列を表す Mix::Matrix4x4 クラスを返します
		virtual const Mix::Matrix4x4& GetViewProjectionMatrix( void ) const = 0;
		//! @brief 逆透視変換行列を取得します
		//! @return 逆透視変換行列を表す Mix::Matrix4x4 クラスを返します
		virtual const Mix::Matrix4x4& GetInvViewProjectionMatrix( void ) const = 0;

		//! @brief ビルボード行列を取得します
		//! @return ビルボード行列を表す Mix::Matrix4x4 クラスを返します
		virtual const Mix::Matrix4x4& GetBillboardMatrix( void ) const = 0;
		//! @brief Y軸固定のビルボード行列を取得します
		//! @return Y軸固定のビルボード行列を表す Mix::Matrix4x4 クラスを返します
		virtual const Mix::Matrix4x4& GetBillboardMatrixY( void ) const = 0;

		//! @brief ワールド座標をスクリーン座標へ変換します
		//! @param[in] pos ワールド座標を表す Mix::Vector3 クラス
		//! @return スクリーン座標を表す Mix::Point クラスを返します
		virtual Mix::Point Project( const Mix::Vector3& pos ) const = 0;
		//! @brief ワールド座標をスクリーン座標へ変換します
		//! @param[in] viewPos ビューポートの左上の座標を表す Mix::Point クラス
		//! @param[in] pos ワールド座標を表す Mix::Vector3 クラス
		//! @return スクリーン座標を表す Mix::Point クラスを返します
		virtual Mix::Point Project( const Mix::Point& viewPos, const Mix::Vector3& pos ) const = 0;
		//! @brief ワールド座標をスクリーン座標へ変換します
		//! @param[in] viewRect ビューポートの矩形を表す Mix::Rectangle クラス
		//! @param[in] pos ワールド座標を表す Mix::Vector3 クラス
		//! @return スクリーン座標を表す Mix::Point クラスを返します
		virtual Mix::Point Project( const Mix::Rectangle& viewRect, const Mix::Vector3& pos ) const = 0;

		//! @brief スクリーン座標をワールド座標へ変換します
		//! @param[in] pos スクリーンの座標を表す Mix::Point クラス
		//! @param[in] z 深度( 0.0f〜1.0f );
		//! @return ワールド座標を表す Mix::Vector3 クラスを返します
		virtual Mix::Vector3 Unproject( const Mix::Point& pos, Float32 z ) const = 0;
		//! @brief スクリーン座標をワールド座標へ変換します
		//! @param[in] viewPos ビューポートの左上の座標を表す Mix::Point クラス
		//! @param[in] pos スクリーンの座標を表す Mix::Point クラス
		//! @param[in] z 深度( 0.0f〜1.0f );
		//! @return ワールド座標を表す Mix::Vector3 クラスを返します
		virtual Mix::Vector3 Unproject( const Mix::Point& viewPos, const Mix::Point& pos, Float32 z ) const = 0;
		//! @brief スクリーン座標をワールド座標へ変換します
		//! @param[in] viewRect ビューポートの矩形を表す Mix::Rectangle クラス
		//! @param[in] pos スクリーンの座標を表す Mix::Point クラス
		//! @param[in] z 深度( 0.0f〜1.0f );
		//! @return ワールド座標を表す Mix::Vector3 クラスを返します
		virtual Mix::Vector3 Unproject( const Mix::Rectangle& viewRect, const Mix::Point& pos, Float32 z ) const = 0;

		//! @brief シーン内のオブジェクトをドラッグします
		//! @param[in] pos スクリーン上の位置を表す Mix::Point クラス
		//! @return ドラッグに成功した場合は True を返します
		//! @note 現在ドラッグできるものはコライダー(リジッドボディがデフォルト状態)を所持しているものに限定されます
		virtual Boolean DragObject( const Mix::Point& pos ) = 0;
		//! @brief シーン内のオブジェクトをドラッグします
		//! @param[in] screenPos スクリーンの左上の位置を表す Mix::Point クラス
		//! @param[in] pos スクリーン上の位置を表す Mix::Point クラス
		//! @return ドラッグに成功した場合は True を返します
		//! @note 現在ドラッグできるものはコライダー(リジッドボディがデフォルト状態)を所持しているものに限定されます
		virtual Boolean DragObject( const Mix::Point& screenPos, const Mix::Point& pos ) = 0;
		//! @brief シーン内のオブジェクトをドラッグします
		//! @param[in] screenRect スクリーンの矩形を表す Mix::Rectangle クラス
		//! @param[in] pos スクリーン上の位置を表す Mix::Point クラス
		//! @return ドラッグに成功した場合は True を返します
		//! @note 現在ドラッグできるものはコライダー(リジッドボディがデフォルト状態)を所持しているものに限定されます
		virtual Boolean DragObject( const Mix::Rectangle& screenRect, const Mix::Point& pos ) = 0;

		//! @brief バックグラウンドカラーを取得します
		//! @return カラーを表す Mix::Vector4 クラスを返します
		virtual const Mix::Vector4& GetBackgroundColor( void ) const = 0;
		//! @brief バックグラウンドカラーを設定します
		//! @param[in] color カラーを表す Mix::Vector4 クラス
		virtual void SetBackgroundColor( const Mix::Vector4& color ) = 0;

		//! @brief フィルターのタイプを取得します
		//! @return タイプを表す Mix::Graphics::TEXTURE_FILTER_TYPE 列挙定数を返します
		virtual Mix::Graphics::TEXTURE_FILTER_TYPE GetFilterType( void ) const = 0;
		//! @brief フィルターのタイプを設定します
		//! @param[in] type タイプを表す Mix::Graphics::TEXTURE_FILTER_TYPE 列挙定数
		virtual void SetFilterType( Mix::Graphics::TEXTURE_FILTER_TYPE type ) = 0;

		//! @brief 描画します
		//! @return 成功した場合は True を返します
		virtual Boolean Draw( void ) = 0;

		//! @brief 水中にいるかどうかを確認します
		//! @return 水中にいる場合は True を返します
		//! @note 水中にいるかどうかの判定は Draw で行われます。
		virtual Boolean IsUnderWater( void ) const = 0;

		//! @}

		//! @name 視界
		//! @{

		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::VISIBILITY_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::VISIBILITY_SETTINGS& GetVisiblitySettings( void ) const = 0;
		//! @brief 設定をします
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::VISIBILITY_SETTINGS 構造体
		virtual void SetVisiblitySettings( const Mix::Scene::ICamera::VISIBILITY_SETTINGS& settings ) = 0;

		//! @}

		//! @name アンビエントオクルージョン
		//! @{

		//! @brief 有効かどうかを確認します
		//! @return 有効な場合は True を返します
		virtual Boolean IsAmbientOcclusionEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetAmbientOcclusionEnabled( Boolean state ) = 0;
		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::AMBIENT_OCCLUSION_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::AMBIENT_OCCLUSION_SETTINGS& GetAmbientOcclusionSettings( void ) const = 0;
		//! @brief 設定をします
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::AMBIENT_OCCLUSION_SETTINGS 構造体
		virtual void SetAmbientOcclusionSettings( const Mix::Scene::ICamera::AMBIENT_OCCLUSION_SETTINGS& settings ) = 0;
		//! @brief テクスチャを取得します。
		//! @param[out] ppTex 取得したテクスチャを渡す Mix::Graphics::ITexture インターフェースのポインタのアドレス
		//! @return 取得に成功した場合は True を返します。
		virtual Boolean GetAmbientOcclusionTexture( Mix::Graphics::ITexture** ppTex ) = 0;
		//! @brief テクスチャを設定します。
		//! @param[in] pTex 設定するテクスチャを表す Mix::Graphics::ITexture インターフェースのポインタ
		//! @note
		//! ここで設定されるテクスチャは、遮断を判定する際の光線を乱反射 ( reflect ) させるために使用されます。<br>
		//! RGB に法線が書き込まれた、バンプテクスチャを用意してください。
		virtual void SetAmbientOcclusionTexture( Mix::Graphics::ITexture* pTex ) = 0;

		//! @}

		//! @name シャドウマッピング
		//! @{

		//! @brief 有効かどうかを確認します
		//! @return 有効な場合は True を返します
		virtual Boolean IsShadowMappingEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetShadowMappingEnabled( Boolean state ) = 0;
		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::SHADOW_MAPPING_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::SHADOW_MAPPING_SETTINGS& GetShadowMappingSettings( void ) const = 0;
		//! @brief 設定をします
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::SHADOW_MAPPING_SETTINGS 構造体
		virtual void SetShadowMappingSettings( const Mix::Scene::ICamera::SHADOW_MAPPING_SETTINGS& settings ) = 0;

		//! @}

		//! @name ルミノシティ
		//! @{

		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::LUMINOSITY_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::LUMINOSITY_SETTINGS& GetLuminositySettings( void ) const = 0;
		//! @brief 設定をします
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::LUMINOSITY_ADAPTATION_SETTINGS 構造体
		virtual void SetLuminositySettings( const Mix::Scene::ICamera::LUMINOSITY_SETTINGS& settings ) = 0;
		//! @brief 輝度順応のサスペンドカウントを１減らします
		//! @return このメソッドを呼び出す前のサスペンドカウントを返します
		virtual UInt32 ResumeLuminosityAdaptation( void ) = 0;
		//! @brief 輝度順応のサスペンドカウントを１増やします
		//! @return このメソッドを呼び出す前のサスペンドカウントを返します
		virtual UInt32 SusupendLuminosityAdaptation( void ) = 0;
		//! @brief 輝度順応のサスペンドカウントを取得します
		//! @return サスペンドカウントを返します
		virtual UInt32 GetLuminosityAdaptationSuspendCount( void ) const = 0;
		//! @brief 強制的に現在の輝度に順応させます
		virtual void ForceLuminosityAdaptation( void ) = 0;
		//! @brief 指定した輝度に順応させます
		//! @param[in] lum 輝度( 0.0f〜1.0f )
		virtual void SetLuminosityAdaptation( Float32 lum ) = 0;

		//! @}

		//! @name ブルーム
		//! @{

		//! @brief 有効かどうかを確認します
		//! @return 有効な場合は True を返します
		virtual Boolean IsBloomEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetBloomEnabled( Boolean state ) = 0;
		//! @brief オーバーフローの数を取得します
		//! @return 数を返します
		virtual UInt32 GetBloomOverflowNum( void ) const = 0;
		//! @brief オーバーフローを取得します
		//! @param[in] index 取得するオーバーフローのインデックス
		//! @return オーバーフローを表す Mix::Scene::ICamera::BLOOM_OVERFLOW 構造体
		virtual const Mix::Scene::ICamera::BLOOM_OVERFLOW& GetBloomOverflow( UInt32 index ) const = 0;
		//! @brief オーバーフローを設定します
		//! @param[in] index 設定するオーバーフローのインデックス
		//! @param[in] overflow オーバーフローを表す Mix::Scene::ICamera::BLOOM_OVERFLOW 構造体
		virtual void SetBloomOverflow( UInt32 index, const Mix::Scene::ICamera::BLOOM_OVERFLOW& overflow ) = 0;
		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::BLOOM_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::BLOOM_SETTINGS& GetBloomSettings( void ) const = 0;
		//! @brief 設定をします
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::BLOOM_SETTINGS 構造体
		virtual void SetBloomSettings( const Mix::Scene::ICamera::BLOOM_SETTINGS& settings ) = 0;

		//! @}

		//! @name ライトシャフト
		//! @{

		//! @brief 有効かどうかを確認します
		//! @return 有効な場合は True を返します
		virtual Boolean IsLightShaftsEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetLightShaftsEnabled( Boolean state ) = 0;
		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::LIGHT_SHAFTS_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::LIGHT_SHAFTS_SETTINGS& GetLightShaftsSettings( void ) const = 0;
		//! @brief 設定をします
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::LIGHT_SHAFTS_SETTINGS 構造体
		virtual void SetLightShaftsSettings( const Mix::Scene::ICamera::LIGHT_SHAFTS_SETTINGS& settings ) = 0;
		//! @brief テクスチャを取得します。
		//! @param[out] ppTex 取得したテクスチャを渡す Mix::Graphics::ITexture インターフェースのポインタのアドレス
		//! @return 取得に成功した場合は True を返します。
		virtual Boolean GetLightShaftsTexture( Mix::Graphics::ITexture** ppTex ) = 0;
		//! @brief テクスチャを設定します。
		//! @param[in] pTex 設定するテクスチャを表す Mix::Graphics::ITexture インターフェースのポインタ
		//! @note
		//! ここで設定されるテクスチャは、ライトシャフト( 光芒 )に筋を入れ、鋭利に見せるために使用されます。<br>
		//! RGB にモノクロのノイズが書き込まれたテクスチャを用意してください。<br>
		virtual void SetLightShaftsTexture( Mix::Graphics::ITexture* pTex ) = 0;

		//! @}

		//! @name レンズフレア
		//! @{

		//! @brief 有効かどうかを確認します
		//! @return 有効な場合は True を返します
		virtual Boolean IsLensFlareEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetLensFlareEnabled( Boolean state ) = 0;
		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::LENS_FLARE_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::LENS_FLARE_SETTINGS& GetLensFlareSettings( void ) const = 0;
		//! @brief 設定をします
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::LENS_FLARE_SETTINGS 構造体
		virtual void SetLensFlareSettings( const Mix::Scene::ICamera::LENS_FLARE_SETTINGS& settings ) = 0;
		//! @brief 装飾するテクスチャを取得します
		//! @param[in] type テクスチャのタイプを表す Mix::Scene::ICamera::LENS_FLARE_TEXTURE_TYPE 列挙定数
		//! @param[in] ppTexture 取得したテクスチャを渡す Mix::Graphics::ITexture インターフェースのポインタのアドレス
		//! @return 成功した場合は True を返します
		virtual Boolean GetLensFlareTexture( Mix::Scene::ICamera::LENS_FLARE_TEXTURE_TYPE type, Mix::Graphics::ITexture** ppTexture ) = 0;
		//! @brief 装飾するテクスチャを設定します
		//! @param[in] type テクスチャのタイプを表す Mix::Scene::ICamera::LENS_FLARE_TEXTURE_TYPE 列挙定数
		//! @param[in] pTexture 設定するテクスチャを表す Mix::Graphics::ITexture インターフェースのポインタ( NULL 指定可能 )
		virtual void SetLensFlareTexture( Mix::Scene::ICamera::LENS_FLARE_TEXTURE_TYPE type, Mix::Graphics::ITexture* pTexture ) = 0;

		//! @}

		//! @name フィルミック
		//! @{

		//! @brief 有効かどうかを確認します。
		//! @return 有効な場合は True を返します。
		virtual Boolean IsFilmicEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します。
		//! @param[in] state 有効にする場合は True
		virtual void SetFilmicEnabled( Boolean state ) = 0;
		//! @brief タイプを取得します
		//! @return タイプを表す Mix::Scene::ICamera::FILMIC_TYPE 列挙定数を返します
		virtual Mix::Scene::ICamera::FILMIC_TYPE GetFilmicType( void ) const = 0;
		//! @brief パラメータを取得します
		//! @param[in] pSettings 設定のコピー先のポインタ
		//! @param[in] size 設定のコピー先のサイズ
		//! @return 成功した場合は True を返します
		virtual Boolean GetFilmicSettings( void* pSettings, UInt32 size ) const = 0;
		//! @brief タイプを設定します
		//! @param[in] type タイプを表す Mix::Scene::ICamera::FILMIC_TYPE 列挙定数
		//! @param[in] pSettings 設定のポインタ
		//! @param[in] size 設定のサイズ( バイト単位 )
		//! @return 成功した場合は True を返します
		//! @note
		//! タイプが FI_HABLE の場合は、パラメータを設定することができます。<br>
		//! パラメータの設定に使用する構造体は Mix::Scene::ICamera::FILMIC_HABLE_SETTINGS になります。<br>
		//! また pSettings = NULL、paramSize = 0 の場合は、デフォルト値が設定されます。<br>
		//! <br>
		//! exposureBias = 2.0f<br>
		//! shoulderStrength = 0.22f<br>
		//! linearStrength = 0.3f<br>
		//! linearAngle = 0.1f<br>
		//! toeStrength = 0.2f<br>
		//! toeNumerator = 0.01f<br>
		//! toeDenominator = 0.3f<br>
		//! linearWhitePointValue = 11.2f<br>
		virtual Boolean SetFilmicType( Mix::Scene::ICamera::FILMIC_TYPE type, const void* pSettings = NULL, UInt32 size = 0 ) = 0;

		//! @}

		//! @name ガンマ
		//! @{

		//! @brief 有効かどうかを確認します
		//! @return 有効な場合は True を返します
		virtual Boolean IsGammaEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetGammaEnabled( Boolean state ) = 0;
		//! @brief 値を取得します
		//! @return 値を表す Mix::Vector3 クラス
		virtual const Mix::Vector3& GetGammaValue( void ) const = 0;
		//! @brief 値を設定します
		//! @param[in] value 値( 0.0f以上 )を表す Mix::Vector3 クラス
		virtual void SetGammaValue( const Mix::Vector3& value ) = 0;
		//! @brief 値を設定します
		//! @param[in] value 値( 0.0f以上 )
		virtual void SetGammaValue( Float32 value ) = 0;

		//! @}

		//! @name モーションブラー
		//! @{

		//! @brief 有効かどうかを確認します
		//! @return 友好な場合は True を返します
		virtual Boolean IsMotionBlurEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetMotionBlurEnabled( Boolean state ) = 0;
		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::MOTION_BLUR_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::MOTION_BLUR_SETTINGS& GetMotionBlurSettings( void ) const = 0;
		//! @brief 設定をします
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::MOTION_BLUR_SETTINGS 構造体
		virtual void SetMotionBlurSettings( const Mix::Scene::ICamera::MOTION_BLUR_SETTINGS& settings ) = 0;
		//! @brief 活動状態かどうかを確認します
		//! @return 活動状態の場合は True を返します
		//! @note 活動状態とはモーションブラーの処理が行われている状態のことを表します。
		virtual Boolean IsMotionBlurActivated( void ) const = 0;
		//! @brief 現在保持されている状態の数を取得します
		//! @return 保持されている状態の数を返します
		virtual UInt32 GetMotionBlurCurrentAmount( void ) const = 0;

		//! @}

		//! @name 色収差
		//! @{

		//! @brief 有効かどうかを確認します
		//! @return 有効な場合は True を返します
		virtual Boolean IsChromatismEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetChromatismEnabled( Boolean state ) = 0;
		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::CHROMATISM_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::CHROMATISM_SETTINGS& GetChromatismSettings( void ) const = 0;
		//! @brief 設定します
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::CHROMATISM_SETTINGS 構造体
		virtual void SetChromatismSettings( const Mix::Scene::ICamera::CHROMATISM_SETTINGS& settings ) = 0;

		//! @}

		//! @name 被写界深度
		//! @{

		//! @brief 有効かどうかを確認します
		//! @return 有効な場合は True を返します
		virtual Boolean IsDofEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetDofEnabled( Boolean state ) = 0;
		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::DOF_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::DOF_SETTINGS& GetDofSettings( void ) const = 0;
		//! @brief 設定します
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::DOF_SETTINGS 構造体
		virtual void SetDofSettings( const Mix::Scene::ICamera::DOF_SETTINGS& settings ) = 0;

		//! @}

		//! @name 歪曲収差
		//! @{

		//! @brief 有効かどうかを確認します
		//! @return 有効な場合は True を返します
		virtual Boolean IsLensDistortionEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetLensDistortionEnabled( Boolean state ) = 0;
		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::DISTORTION_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::DISTORTION_SETTINGS& GetLendDistortionSettings( void ) const = 0;
		//! @brief 設定します
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::DISTORTION_SETTINGS 構造体
		virtual void SetLendDistortionSettings( const Mix::Scene::ICamera::DISTORTION_SETTINGS& settings ) = 0;

		//! @}

		//! @name ヴィネット
		//! @{

		//! @brief 有効かどうかを確認します
		//! @return 有効な場合は True を返します
		virtual Boolean IsVignetteEnabled( void ) const = 0;
		//! @brief 有効にするかどうかを設定します
		//! @param[in] state 有効にする場合は True
		virtual void SetVignetteEnabled( Boolean state ) = 0;
		//! @brief 設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::VIGNETTE_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::VIGNETTE_SETTINGS& GetVignetteSettings( void ) const = 0;
		//! @brief 設定をします
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::VIGNETTE_SETTINGS 構造体
		virtual void SetVignetteSettings( const Mix::Scene::ICamera::VIGNETTE_SETTINGS& settings ) = 0;

		//! @}

		//! @name アンチエイリアシング
		//! @{

		//! @brief タイプを取得します
		//! @return タイプを表す Mix::Scene::ICamera::ANTIALIASING_TYPE 列挙定数を返します
		virtual Mix::Scene::ICamera::ANTIALIASING_TYPE GetAntiAliasingType( void ) const = 0;
		//! @brief タイプを設定します
		//! @param[in] type タイプを表す Mix::Scene::ICamera::ANTIALIASING_TYPE 列挙定数
		virtual void SetAntiAliasingType( Mix::Scene::ICamera::ANTIALIASING_TYPE type ) = 0;

		//! @}

		//! @name デバッグ
		//! @{

		//! @brief フィルタイプを設定します
		//! @param[in] type フィルタイプを表す Mix::Graphics::FILL_TYPE 列挙定数
		virtual void Debug_SetFillType( Mix::Graphics::FILL_TYPE type ) = 0;
		//! @brief フィルタイプを取得します
		//! @return フィルタイプを表す Mix::Graphics::FILL_TYPE 列挙定数を返します
		virtual Mix::Graphics::FILL_TYPE Debug_GetFillType( void ) const = 0;

		//! @brief 描画メソッドを設定します
		//! @param[in] method 描画メソッドを表す Mix::Scene:::DEBUG_DRAW_METHOD 列挙定数
		virtual void Debug_SetDrawMethod( Mix::Scene::DEBUG_DRAW_METHOD method ) = 0;
		//! @brief 描画メソッドを取得します
		//! @return 描画メソッドを表す Mix::Scene::DEBUG_DRAW_METHOD 列挙定数を返します
		virtual Mix::Scene::DEBUG_DRAW_METHOD Debug_GetDrawMethod( void ) const = 0;

		//! @brief 描画フラグを設定します
		//! @param[in] flags 描画フラグを表す Mix::Scene::DEBUG_DRAW_FLAG 列挙定数の組み合わせ
		virtual void Debug_SetDrawFlags( UInt32 flags ) = 0;
		//! @brief 描画フラグを取得します
		//! @return 描画フラグを表す Mix::Scene::DEBUG_DRAW_FLAG 列挙定数の組み合わせを返します
		virtual UInt32 Debug_GetDrawFlags( void ) const = 0;

		//! @brief フィルミックの描画設定を取得します
		//! @return 設定を表す Mix::Scene::ICamera::DEBUG_DRAW_FILIMIC_SETTINGS 構造体を返します
		virtual const Mix::Scene::ICamera::DEBUG_DRAW_FILIMIC_SETTINGS& Debug_GetDrawFilmicSettings( void ) const = 0;
		//! @brief フィルミックの描画設定をします
		//! @param[in] settings 設定を表す Mix::Scene::ICamera::DEBUG_DRAW_FILIMIC_SETTINGS 構造体
		virtual void Debug_SetDrawFilmicSettings( const Mix::Scene::ICamera::DEBUG_DRAW_FILIMIC_SETTINGS& settings ) = 0;

		//! @brief プロファイルを取得します
		//! @param[in] type タイプを表す Mix::Scene::DEBUG_PROFILE_TYPE 列挙定数
		//! @param[out] pProf プロファイルのコピー先のポインタ
		//! @param[in] size プロファイルのコピー先のサイズ
		//! @return コピーしたサイズを返します
		//! @note
		//! プロファイルのタイプとコピー先になる構造体の組み合わせは以下のようになります。<br>
		//! <table>
		//!   <tr>
		//!     <th>タイプ</th>
		//!     <th>構造体</th>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_GENERAL</td>
		//!     <td>DEBUG_PROFILE_CAMERA_GENERAL</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_OCTREE</td>
		//!     <td>DEBUG_PROFILE_CAMERA_OCTREE</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_LIGHT</td>
		//!     <td>DEBUG_PROFILE_CAMERA_LIGHT</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_WATER_POOL</td>
		//!     <td>DEBUG_PROFILE_CAMERA_WATER_POOL</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_WIDGET</td>
		//!     <td>DEBUG_PROFILE_CAMERA_WIDGET</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_ACTOR_MODEL</td>
		//!     <td>DEBUG_PROFILE_CAMERA_MODEL</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_TERRAIN_MODEL</td>
		//!     <td>DEBUG_PROFILE_CAMERA_MODEL</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_PROJ_SHADOW</td>
		//!     <td>DEBUG_PROFILE_CAMERA_PROJ_SHADOW</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_DRAW_OPACITY</td>
		//!     <td>DEBUG_PROFILE_CAMERA_DRAW_OPACITY</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_DRAW_NEUTRALITY</td>
		//!     <td>DEBUG_PROFILE_CAMERA_DRAW_NEUTRALITY</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_DRAW_REFRACT</td>
		//!     <td>DEBUG_PROFILE_CAMERA_DRAW_REFRACT</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_DRAW_TRANSPARENCY</td>
		//!     <td>DEBUG_PROFILE_CAMERA_DRAW_TRANSPARENCY</td>
		//!   </tr>
		//!   <tr>
		//!     <td>DPT_POST_PROCESS</td>
		//!     <td>DEBUG_PROFILE_CAMERA_POST_PROCESS</td>
		//!   </tr>
		//! </table>
		virtual UInt32 Debug_GetProfile( UInt32 type, void* pProf, UInt32 size ) const = 0;

		//! @brief イメージの数を取得します
		//! @param[in] type タイプを表す Mix::Scene::DEBUG_IMAGE_TYPE 列挙定数
		//! @return 数を返します
		virtual UInt32 Debug_GetImageNum( UInt32 type ) const = 0;
		//! @brief イメージを取得します
		//! @param[in] type タイプを表す Mix::Scene::DEBUG_IMAGE_TYPE 列挙定数
		//! @param[in] index インデックス( 0〜Debug_GetImageNum( type ) - 1 )
		//! @param[out] ppTexture 取得したイメージを渡す Mix::Graphics::ITexture インターフェースのポインタのアドレス
		//! @return 成功した場合は True を返します
		virtual Boolean Debug_GetImage( UInt32 type, UInt32 index, Mix::Graphics::ITexture** ppTexture ) = 0;

		//! @}
	};

}}
