#pragma once

#include "GlInclude.h"


namespace lib_gl
{


// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//! ピクセルフォーマット設定機能
class CPixelFormat
{
public:
	//! よく使用する一般的な設定のピクセルフォーマットを返す
	static const PIXELFORMATDESCRIPTOR& GetStandardPFD(void);

	//! 指定したデバイスコンテキストに対してピクセルフォーマットを設定する
	static bool SetPFD( HDC i_hdc , const PIXELFORMATDESCRIPTOR& i_pfd );
	//! ピクセルフォーマットをGetStandardPFDで設定する
	static bool SetPFD( HDC i_hdc );
};



inline
const PIXELFORMATDESCRIPTOR& CPixelFormat::GetStandardPFD(void)
{
	static const PIXELFORMATDESCRIPTOR default_pfd =
	{
		sizeof (PIXELFORMATDESCRIPTOR),  //構造体のサイズ
		1,                               //OpenGL バージョン
		PFD_DRAW_TO_WINDOW |             //ウィンドウスタイル
		PFD_SUPPORT_OPENGL |             //OpenGL を使う
		PFD_DOUBLEBUFFER,                //ダブルバッファ使用可能
		PFD_TYPE_RGBA,                   //ピクセルのカラーデータ
		32,                              //色のビット数
		0, 0,                            //RGBAのビットとシフト設定
		0, 0,                            //G
		0, 0,                            //B
		0, 0,                            //A
		0,                               //アキュムレーションバッファ
		0, 0, 0, 0,                      //RGBAアキュムレーションバッファ
		32,                              //デプスバッファ     のピクセル当りのビット数
		8,                               //ステンシルバッファ のピクセル当りのビット数
		0,                               //補助バッファ       のピクセル当りのビット数
		PFD_MAIN_PLANE,                  //レイヤータイプ
		0,                               //予約 
		0, 0, 0                          //未使用
	};

	return default_pfd;
}


inline
bool CPixelFormat::SetPFD( HDC i_hdc , const PIXELFORMATDESCRIPTOR& i_pfd )
{
	int pixelformat = ChoosePixelFormat( i_hdc , &i_pfd );
	if( pixelformat == 0 ) return false;

	if( SetPixelFormat( i_hdc , pixelformat , &i_pfd ) == FALSE ) return false;

	return true;
}

inline
bool CPixelFormat::SetPFD( HDC i_hdc )
{
	return SetPFD( i_hdc , GetStandardPFD() );
}


}
