> ・アプリのスリープ → スリープ解除 → アプリ再表示
> ・実機のディスプレイOFF → 再度ON → アプリ再表示
> ・Homeキー押下でHomeを表示 → タスク一覧からアプリを選択 → アプリ再表示
Androidではこれらの操作を行った場合、OpenGL ES のオブジェクトが全て破棄されて
しまうので、内部では破棄された画像などを自動で画像ファイルから再読み込みする
という処理を行っています
なので
画像ファイルA を LoadGraph で読み込み、グラフィックハンドルBに画像を保存
↓
GraphFilter で グラフィックハンドルB にフィルター効果を掛ける
↓
スリープ ( スリープしたことでグラフィックハンドルBの『フィルター効果が掛かった画像A』が失われる )
↓
スリープ解除
↓
アプリ再表示( 画像情報が失われたグラフィックハンドルBに画像ファイルAの内容を自動で再読み込み )
↓
結果、グラフィックハンドルBの内容は『フィルター効果が掛かっていない画像A』になる
↑こちらのような経過でフィルター効果が掛かっていない状態になってしまいます
なので、下記のサンプルのように MakeScreen で作成した画像と同じサイズの
グラフィックハンドルに毎フレーム GraphFilterBlt でフィルター効果を掛けた画像を
転送するようにしてください m(_ _;m
#include "DxLib.h"
int android_main( void )
{
int GrHandle ;
int TempHandle ;
int SizeX, SizeY ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
return -1 ;
// 画像を読み込む
GrHandle = LoadGraph( "Src1.bmp" ) ;
// 画像のサイズを取得
GetGraphSize( GrHandle, &SizeX, &SizeY ) ;
// 画像と同サイズのグラフィックハンドルを作成
TempHandle = MakeScreen( SizeX, SizeY, TRUE ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
while( ProcessMessage() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// フィルターを掛けた画像を TempHandle に転送
GraphFilterBlt( GrHandle, TempHandle, DX_GRAPH_FILTER_HSB, 0, 100, 90, -60 ) ;
// フィルターを掛けた画像を描画
DrawGraph( 0, 0, TempHandle, TRUE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
return 0 ;
}