3. グラフィックスの初期化

-節の内容-

ウィンドウの表示の次はグラフィックスの初期化です。
グラフィックスの初期化を行うことで、様々なグラフィックス描画機能を使うことができるようになります。
この節では、グラフィックスの初期化を行って、次節以降の準備をします。


-サンプルコード-

//-----------------------------------------------------
// ファイル名 : main.cpp
// 更新日 : 2011.11.12 (Sat) 9:33
// 作成者 : ぬっち
// 概要 : 「3. グラフィックスの初期化」のサンプルファイル。
//-----------------------------------------------------

//-----------------------------------------------------
// インクルード
//-----------------------------------------------------

#include <MAPIL/MAPIL.h>

//-----------------------------------------------------
// メイン関数
//-----------------------------------------------------

int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow )
{
	// MAPILライブラリの機能を使えるようにする。
	using namespace MAPIL;

	// GUIデバイスの作成。
	IGUIDevice guiDev = CreateGUIDevice( GUI_API_WIN32API );

	// GUIファクトリーの作成。
	GUIFactory* pGUIFactory = CreateGUIFactory( guiDev );

	
	// グラフィックスデバイスの作成
	IGraphicsDevice graphicsDev = CreateGraphicsDevice( GRAPHICS_API_DIRECT3D );
	
	
	// グラフィックスファクトリーの作成
	GraphicsFactory* pGraphicsFactory = CreateGraphicsFactory( graphicsDev );
	
	
	// ウィンドウリソースの取得。
	IWindow window = pGUIFactory->CreateWnd( TSTR( "Window" ) );

	
	// グラフィックスコンテキストの取得。
	IGraphicsContext graphicsContext = pGUIFactory->CreateGraphicsContext( TSTR( "Graphics Context" ) );
	
	
	// GUIデバイスのインスタンス化
	guiDev->Create();
	

	// ウィンドウのインスタンス化。
	window->Create( TSTR( "MAPIL Sample" ), 640, 480 );

	
	// グラフィックスコンテキストのインスタンス化。
	graphicsContext->Create( TSTR( "Graphics Context" ), 640, 480, window );
	
	
	// グラフィックスデバイスのインスタンス化
	graphicsDev->Create( graphicsContext );
	
	
	// グラフィックスコントローラの取得
	IGraphicsController graphicsController = pGraphicsFactory->CreateGraphicsController( TSTR( "Graphics Controller" ) );
	
	
	// グラフィックスコントローラのインスタンス化
	graphicsController->Create( graphicsContext );
	

	// メインループ
	while( !window->ProcessMessage() ){
		
		// 描画開始
		graphicsController->BeginRendering();
		
		
		// 描画処理をここに記述する
		
		
		// 描画修了
		graphicsController->EndRendering();
		
	}

	// 後始末。
	
	SafeDelete( pGraphicsFactory );
	
	SafeDelete( pGUIFactory );

	return 0;
}

ソースコード
main.cpp


-サンプルコードの説明-

グラフィックス機能を使うにあたって、追加されたコードは多いですが、基本的な流れはウィンドウの作成とほぼ同じです。
GUIデバイスとGUIファクトリーの作成については、前節で紹介しましたので説明は省略します。
続いて、グラフィックスデバイスとグラフィックスファクトリーの作成です。
IGraphicsDevice graphicsDev = CreateGraphicsDevice( GRAPHICS_API_DIRECT3D );
今回のサンプルでは、グラフィックス機能としてDirect3Dを用いていますが、OpenGLを使用したい方は、GRAPHICS_API_DIRECT3Dではなく、GRAPHICS_API_OPENGLを引数として指定してください。
続いてグラフィックスファクトリーの作成です。
GraphicsFactory* pGraphicsFactory = CreateGraphicsFactory( graphicsDev );
引数には、先程作成した、IGraphicsDevice型のグラフィックスデバイスを渡します。
続いて、
IGraphicsContext graphicsContext = pGUIFactory->CreateGraphicsContext( TSTR( "Graphics Context" ) );
により、グラフィックスコンテキストを作成します。
引数はウィンドウの作成の時と同じ意味を持ちます。
グラフィックスコンテキストは、グラフィックス機能によって描画することのできる子ウィンドウです。
グラフィックスコンテキストを作成した後は、グラフィックスコンテキストのインスタンス化です。
graphicsContext->Create( TSTR( "Graphics Context" ), 640, 480, window );
第4引数に、親ウィンドウであるIWindow型の変数を渡している点に注意してください。
第1引数はウィンドウ名、第2引数はウィンドウの横幅、第3引数はウィンドウの縦幅なのは、ウィンドウのインスタンス化と同じです。
そして、グラフィックスデバイスのインスタンス化を行います。
graphicsDev->Create( graphicsContext );
引数には、先程作成したIGraphicsContext型のグラフィックスコンテキストを渡します。
続いてグラフィックスの機能を制御する、グラフィックスコントローラの作成をします。
IGraphicsController graphicsController = pGraphicsFactory->CreateGraphicsController( TSTR( "Graphics Controller" ) );
グラフィックスファクトリーから作成している点に注意してください。
その他については、GUIファクトリーからウィンドウやグラフィックスコンテキストを作成する方法と同じです。
グラフィックスコントローラは、アルファブレンドやライティングだけでなく、描画の開始と終了を受け持つ必要不可欠なものです。
次にグラフィックスコントローラをインスタンス化します。
graphicsController->Create( graphicsContext );
引数には、IGraphicsContext型のグラフィックスコントローラを渡してください。
いよいよ描画処理に入ります。
描画処理は、
graphicsController->BeginRendering();
graphicsController->EndRendering();
の間で行います。
最後に、グラフィックスファクトリーの解放をしています。
SafeDelete( pGraphicsFactory );
次の節では、実際に画面に描画させて見ましょう。


-実行結果-

上記のサンプルを実行すると、前回の真っ白なウィンドウとは違って真っ黒な画面が表示されます。
前回同様×ボタンを押すことで、プログラムを終わらせることが出来ます。

3節 サンプル 実行結果

inserted by FC2 system