(57)【特許請求の範囲】
【請求項１】
ベクタ画像を描画するためのメイン関数から呼び出されるサブ関数の呼び出しの順序に基づいて、呼び出し元の組み合わせが共通するサブ関数のすべてが連続して呼び出されるサブ関数の群をグループとして当該グループに含まれる前記サブ関数によって描画されたベクトル部分画像をラスタ画像としてキャッシュするためのキャッシュ関数を前記メイン関数に付加して新たに改良メイン関数を生成する改良メイン関数生成手段を備えることを特徴とする情報処理支援装置。
【請求項２】
請求項１に記載の情報処理支援装置であって、
ベクタ画像を描画するためのメイン関数から呼び出されるサブ関数の呼び出しの順序を求める呼出順抽出手段と、
呼び出し元の組み合わせが共通するサブ関数のすべてが連続して呼び出されるサブ関数の群をグループとして抽出するグループ抽出手段と、
を備えることを特徴とする情報処理支援装置。
【請求項３】
請求項１又は２に記載の情報処理支援装置であって、
前記改良メイン関数生成手段は、前記キャッシュ関数によって既にキャッシュされたラスタ画像があれば当該ラスタ画像を読み出して使用するラスタ画像描画関数を前記改良メイン関数にさらに付加することを特徴とする情報処理支援装置。
【請求項４】
請求項１〜３のいずれか１項に記載の情報処理支援装置であって、
外部の情報処理装置から前記メイン関数へのアクセスがあった場合に、前記改良メイン関数を生成して前記情報処理装置へ送信することを特徴とする情報処理支援装置。
【請求項５】
ベクタ画像を描画するためのメイン関数から呼び出されるサブ関数の呼び出しの順序に基づいて、呼び出し元の組み合わせが共通するサブ関数のすべてが連続して呼び出されるサブ関数の群をグループとして当該グループに含まれる前記サブ関数によって描画されたベクトル部分画像をラスタ画像としてキャッシュするためのキャッシュ関数を前記メイン関数に付加して新たに改良メイン関数を生成する改良メイン関数生成手段を備える情報処理支援装置から前記改良メイン関数を受信し、
前記改良メイン関数によって前記ベクタ画像を描画した際に前記キャッシュ関数を用いて前記ベクトル部分画像をメモリにキャッシュすることを特徴とする情報処理装置。
【請求項６】
コンピュータを、
ベクタ画像を描画するためのメイン関数から呼び出されるサブ関数の呼び出しの順序に基づいて、呼び出し元の組み合わせが共通するサブ関数のすべてが連続して呼び出されるサブ関数の群をグループとして当該グループに含まれる前記サブ関数によって描画されたベクトル部分画像をラスタ画像としてキャッシュするためのキャッシュ関数を前記メイン関数に付加して新たに改良メイン関数を生成する改良メイン関数生成手段として機能させることを特徴とする情報処理支援プログラム。
【請求項７】
請求項６に記載の情報処理支援プログラムであって、
前記コンピュータを、
ベクタ画像を描画するためのメイン関数から呼び出されるサブ関数の呼び出しの順序を求める呼出順抽出手段と、
前記呼出順抽出手段で求められた呼び出しの順序が連続すると共に、呼び出し元の組み合わせが共通する前記サブ関数をグループとして抽出するグループ抽出手段と、
して機能させることを特徴とする情報処理支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像データをキャッシュする情報処理支援装置、情報処理装置及び情報処理支援プログラムに関する。
【背景技術】
【０００２】
電子ゲーム等のソフトウェアでは様々な画像を用いて情報処理が行われる。画像データは、ビットマップ形式等のように走査線の集まりで表現するラスタ形式の画像データと、線分の起終点の座標（位置）、方向、距離、曲線の曲がり方、太さ、色、線分に囲まれた面の色、それらの変化等で表現するベクタ形式の画像データに分けられる。
【０００３】
ベクタ画像は、拡大や縮小しても画質が維持されるという利点がある一方、描画に時間が掛るという問題がある。そこで、情報端末において画像を表示する際は、描画されたベクタ画像をビットマップ等のラスタ画像としてメモリに保存して、同じ画像を表示する際にはメモリからラスタ画像を読み出して表示させることで処理を効率化している。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、電子ゲーム等では画像の一部のみが変更されることが多く、従来のラスタ画像を保存する方法では保存したラスタ画像をそのまま使用することができない場合が多く、キャッシュしておく効果が小さい。また、一部のみが変更された画像に対してその画像全体のラスタ画像を保存するためにはメモリ容量が多く必要であり、情報処理装置のメモリ領域を圧迫してしまう。
【０００５】
本発明は、メモリ消費を抑制しつつ、画像の表示速度を高めることを可能とする情報処理支援装置、情報処理装置及び情報処理支援プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の１つの態様は、ベクタ画像を描画するためのメイン関数から呼び出されるサブ関数の呼び出しの順序に基づいて、呼び出し元の組み合わせが共通するサブ関数のすべてが連続して呼び出されるサブ関数の群をグループとして当該グループに含まれる前記サブ関数によって描画されたベクトル部分画像をラスタ画像としてキャッシュするためのキャッシュ関数を前記メイン関数に付加して新たに改良メイン関数を生成する改良メイン関数生成手段を備えることを特徴とする情報処理支援装置である。
【０００７】
本発明の別の態様は、ベクタ画像を描画するためのメイン関数から呼び出されるサブ関数の呼び出しの順序に基づいて、呼び出し元の組み合わせが共通するサブ関数のすべてが連続して呼び出されるサブ関数の群をグループとして当該グループに含まれる前記サブ関数によって描画されたベクトル部分画像をラスタ画像としてキャッシュするためのキャッシュ関数を前記メイン関数に付加して新たに改良メイン関数を生成する改良メイン関数生成手段を備える情報処理支援装置から前記改良メイン関数を受信し、前記改良メイン関数によって前記ベクタ画像を描画した際に前記キャッシュ関数を用いて前記ベクトル部分画像をメモリにキャッシュすることを特徴とする情報処理装置である。
【０００８】
本発明の別の態様は、コンピュータを、ベクタ画像を描画するためのメイン関数から呼び出されるサブ関数の呼び出しの順序に基づいて、呼び出し元の組み合わせが共通するサブ関数のすべてが連続して呼び出されるサブ関数の群をグループとして当該グループに含まれる前記サブ関数によって描画されたベクトル部分画像をラスタ画像としてキャッシュするためのキャッシュ関数を前記メイン関数に付加して新たに改良メイン関数を生成する改良メイン関数生成手段として機能させることを特徴とする情報処理支援プログラムである。
【０００９】
ここで、ベクタ画像を描画するためのメイン関数から呼び出されるサブ関数の呼び出しの順序を求める呼出順抽出手段と、呼び出し元の組み合わせが共通するサブ関数のすべてが連続して呼び出されるサブ関数の群をグループとして抽出するグループ抽出手段と、を備えることが好適である。
【００１０】
また、前記改良メイン関数生成手段は、前記キャッシュ関数によって既にキャッシュされたラスタ画像があれば当該ラスタ画像を読み出して使用するラスタ画像描画関数を前記改良メイン関数にさらに付加することが好適である。
【００１１】
また、外部の情報処理装置から前記メイン関数へのアクセスがあった場合に、前記改良メイン関数を生成して前記情報処理装置へ送信することが好適である。
【発明の効果】
【００１２】
本発明によれば、メモリ消費を抑制しつつ、画像の表示速度を高めることを可能とする画像データのキャッシュ方法を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態における情報処理システムの構成を示す図である。
【図２】本発明の実施の形態における情報端末の構成を示す図である。
【図３】本発明の実施の形態におけるサーバの構成を示す図である。
【図４】本発明の実施の形態における情報処理支援方法を示すフローチャートである。
【図５】本発明の実施の形態におけるベクタ画像の構成例を示す図である。
【図６】本発明の実施の形態におけるメイン関数の例を示す図である。
【図７】本発明の実施の形態におけるサブ関数呼出リストの例を示す図である。
【図８】本発明の実施の形態における改良メイン関数の例を示す図である。
【図９】本発明の実施の形態における更新時の情報処理支援方法を示すフローチャートである。
【図１０】本発明の実施の形態における更新されたメイン関数の例を示す図である。
【図１１】本発明の実施の形態における更新されたサブ関数呼出リストの例を示す図である。
【図１２】本発明の実施の形態における更新された改良メイン関数の例を示す図である。
【発明を実施するための形態】
【００１４】
＜基本構成＞
本発明の実施の形態における情報処理システムは、図１に示すように、情報端末１００及びサーバ１０２を含んで構成される。サーバ１０２は、情報通信網１０４を介して、情報端末１００と互いに通信可能に接続される。
【００１５】
情報端末１００は、図２に示すように、処理部１０、記憶部１２、入力部１４、出力部１６及び通信部１８を含んで構成される。情報端末１００は、携帯電話、スマートフォン、タブレット端末等の通信可能な携帯端末の基本構成を備えている。
【００１６】
処理部１０は、ＣＰＵ等の演算処理を行う手段を含む。処理部１０は、記憶部１２に記憶されている電子ゲームプログラムを実行することによって、情報端末１００において電子ゲーム等の処理を実現する情報処理装置として機能する。特に、電子ゲームプログラムに含まれる画像処理用の関数（メイン関数）を実行することによって、電子ゲームで使用される画像を描画する処理を行う。ただし、情報端末１００において実行されるプログラムは電子ゲームプログラムに限定されるものではなく、画像処理を伴うものであればよい。記憶部１２は、半導体メモリやメモリカード等の記憶手段を含む。記憶部１２は、処理部１０とアクセス可能に接続され、電子ゲームプログラム、処理に必要なデータ等の情報を記憶する。入力部１４は、情報端末１００に情報を入力する手段を含む。入力部１４は、例えば、ユーザからの入力を受けるタッチパネルやボタン等を備える。出力部１６は、ユーザから入力情報を受け付けるためのユーザインターフェース画面（ＵＩ）等や情報端末１００での処理結果を出力する手段を含む。出力部１６は、例えば、ユーザに対して画像を呈示するディスプレイを備える。通信部１８は、情報通信網１０４を介して、他の情報通信機器と情報をやり取りするためのインターフェースを含んで構成される。通信部１８による通信は有線及び無線を問わない。
【００１７】
サーバ１０２は、図３に示すように、処理部２０、記憶部２２、入力部２４、出力部２６及び通信部２８を含んで構成される。サーバ１０２は、通信機能を備えたコンピュータの基本構成を備えている。
【００１８】
処理部２０は、ＣＰＵ等の演算処理を行う手段を含む。処理部２０は、記憶部２２に記憶されているプログラムを実行することによって、情報端末１００と協働して情報処理を行う。特に、情報処理支援プログラムを実行することによって、電子ゲームプログラム等で使用される画像処理用の関数を生成して情報端末１００に送信する情報処理支援装置として機能する。記憶部２２は、半導体メモリ、ハードディスク等の記憶手段を含む。記憶部２２は、処理部２０とアクセス可能に接続され、情報処理支援プログラム、電子ゲームプログラム（画像処理用の関数を含む）、情報処理において利用されるデータ等の情報を記憶する。入力部２４は、サーバ１０２に情報を入力する手段を含む。入力部２４は、例えば、ユーザからの入力を受けるキーボード等を備える。出力部２６は、ユーザから入力情報を受け付けるためのユーザインターフェース画面（ＵＩ）等やサーバ１０２での処理結果を出力する手段を含む。出力部２６は、例えば、ユーザに対して画像を呈示するディスプレイを備える。通信部２８は、情報通信網１０４を介して、情報端末１００や他の情報通信機器と情報をやり取りするためのインターフェースを含んで構成される。通信部２８による通信は有線及び無線を問わない。
【００１９】
なお、本実施の形態では、情報端末１００及びサーバ１０２が協働して画像描画処理を行う例について説明する。画像描画処理は、例えば、電子ゲームにおいてゲーム画面を表示する際に利用される。
【００２０】
＜基本処理＞
本実施の形態では、サーバ１０２は、ベクタ画像を表示させるメイン関数を改良する情報処理支援プログラムを実行する。情報端末１００は、電子ゲームのアプリケーションを実行する際にサーバ１０２にアクセスし、電子ゲームプログラム（アプリケーションプログラム）を取得して実行する。電子ゲームにおける画像表示は、電子ゲームプログラムに含まれる又は付帯する画像描画プログラムを実行することによって行われる。以下では、画像描画プログラムは関数（メイン関数と呼ぶ）によって表現されているものとして説明を行うが、本発明の適用範囲はこれに限定されるものではない。
【００２１】
サーバ１０２は、情報処理支援プログラムが実行され、画像描画のためのメイン関数を改良し、改良メイン関数を生成する情報処理支援方法を実行する。以下、図４のフローチャートを参照して、本実施の形態における情報処理支援方法について説明する。これによって、サーバ１０２は情報処理支援装置として機能する。
【００２２】
ステップＳ１０では、メイン関数が読み出される。サーバ１０２の処理部２０は、記憶部２２に記憶されているメイン関数を読み出す。メイン関数は、ベクタ画像を表示するために記述されたプログラムである。メイン関数は、Ｊａｖａ・Ｓｃｒｉｐｔ（登録商標）等によって記述される。
【００２３】
ベクタ画像は、線分の起終点の座標（位置）、方向、距離、曲線の曲がり方、太さ、色、線分に囲まれた面の色、それらの変化等で表現される。例えば、図５に示すように、ベクタ画像Ａは、線分の組み合わせでベクタ画像Ａの輪郭を表現するベクタ部分画像Ｂと、ベクタ部分画像Ｂの線分に囲まれた領域を色で塗りつぶしたベクタ部分画像Ｃの組み合わせとして表現される。
【００２４】
メイン関数（図形描画プログラム）は、線分の起終点の座標（位置）、方向、距離、曲線の曲がり方、太さ、色、線分に囲まれた面の色、それらの変化を描画するサブ関数の組み合わせとして記述される。
【００２５】
例えば、図６に示すように、メインルーチン、サブルーチン１及びサブルーチン２から構成されるメイン関数によってベクタ画像が描画される。図６の例では、メインルーチンのClearRect関数によって描画領域がクリアされ、DrawEdge関数及びFillMoon関数を呼び出すことによってベクタ部分画像を描画する。そして、ベクタ部分画像が組み合わされてベクタ画像全体が描画される。
【００２６】
DrawEdge関数は、サブルーチン１において定義されたサブ関数であり、ベクタ画像に含まれるベクタ部分画像を描画するための関数である。ここでは、DrawEdge関数は、図５に示したベクタ部分画像Ｂのようにベクタ画像Ａに含まれる線分で表現される輪郭を描画する関数として定義されている。DrawEdge関数は、曲線を描画するためのDrawCurve関数＋Stroke関数や直線を描画するためのDrawLine関数＋Stroke関数等の一般定義関数を含む。FillMoon関数は、サブルーチン２において定義されたサブ関数であり、ベクタ画像に含まれるベクタ部分画像を描画するための関数である。ここでは、FillMoon関数は、図５に示したベクタ部分画像Ｃのようにベクタ画像Ａに含まれる塗りつぶし領域を描画する関数として定義されている。FillMoon関数は、領域を塗りつぶすためのDrawCurve関数＋Fill関数等の一般定義関数を含む。
【００２７】
ステップＳ１２では、メイン関数におけるサブ関数の呼び出しの順序が求められる。このステップでの処理が呼出順抽出手段に相当する。サーバ１０２の処理部２０は、ステップＳ１０にて読み出したメイン関数から呼び出されるサブ関数の呼び出しの順番を調べる。呼び出しの順番は、サブ関数呼出リストとして記憶部２２に記憶される。処理部２０は、メイン関数を最初から処理したときに呼び出されるサブ関数を呼び出し元となる関数名と共に順にサブ関数呼出リストに登録する。
【００２８】
例えば、図６のメイン関数（DrawGameCharacter）の例では、まずClearRect関数が呼び出される。このとき、図７に示すように、呼び出し元となる関数、すなわちメイン関数（DrawGameCharacter）の名前に関連付けてClearRect関数がサブ関数呼出リストに登録される。
【００２９】
次に、DrawEdge関数が呼び出される。そこで、図７に示すように、呼び出し元となる関数、すなわちメイン関数（DrawGameCharacter）の名前に関連付けてDrawEdge関数がサブ関数呼出リストに登録される。
【００３０】
このとき、DrawEdge関数では、その内部処理においてさらに関数が呼び出されるのでそれらの関数についてもサブ関数呼出リストに登録する。すなわちDrawEdge関数では、DrawCurve関数、Stroke関数、DrawLine関数、Stroke関数が順に呼び出されるので、図７に示すように、これらの関数に呼び出し元となる関数であるサブ関数（DrawEdge）及びさらにその元の呼び出し元となる関するであるメイン関数（DrawGameCharacter）を関連付けて呼び出し順にサブ関数呼出リストに登録する。
【００３１】
次に、FillMoon関数が呼び出される。そこで、図７に示すように、呼び出し元となる関数、すなわちメイン関数（DrawGameCharacter）の名前に関連付けてFillMoon関数がサブ関数呼出リストに登録される。
【００３２】
このとき、FillMoon関数では、その内部処理においてさらに関数が呼び出されるのでそれらの関数についてもサブ関数呼出リストに登録する。すなわちFillMoon関数では、DrawCurve関数、Fill関数が順に呼び出されるので、図７に示すように、これらの関数に呼び出し元となる関数であるサブ関数（FillMoon）及びさらにその元の呼び出し元となる関するであるメイン関数（DrawGameCharacter）を関連付けて呼び出し順にサブ関数呼出リストに登録する。
【００３３】
どの階層のサブ関数まで考慮して順序を抽出するかは予め定めておけばよい。また、電子ゲームプログラムにおいて定義されるユーザ定義関数ではなく、システムに予め用意されている一般定義関数が呼び出されるまで考慮するようにしてもよい。
【００３４】
ステップＳ１４では、呼び出し元となる関数に基づいて呼び出された関数がグループに分けられる。このステップでの処理がグループ抽出手段に相当する。サーバ１０２の処理部２０は、ステップＳ１２で求められたサブ関数の呼び出し順序に基づいて、呼び出し元の組み合わせが共通するサブ関数のうち、すべてが連続して呼び出されるサブ関数の群を１つのグループとして抽出する。
【００３５】
例えば、図７のサブ関数呼出リストが生成された場合、メイン関数（DrawGameCharacter）のみから呼び出される関数の群としてClearRect関数、DrawEdge関数及びFillMoon関数がある。ここで、メイン関数（DrawGameCharacter）のみから呼び出される関数の群に含まれるClearRect関数、DrawEdge関数及びFillMoon関数のすべては連続して呼び出されない、すなわちFillMoon関数はDrawEdge関数に対して連続的に呼び出されないので、これらの関数はグループ化されない。
【００３６】
次に、メイン関数（DrawGameCharacter）とサブ関数（DrawEdge）とから呼び出される関数の群としてDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数がある。ここで、メイン関数（DrawGameCharacter）とサブ関数（DrawEdge）とから呼び出される関数の群に含まれるDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数のすべてが連続して呼び出される。したがって、これらのDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数が１つのグループとして抽出される。
【００３７】
さらに、メイン関数（DrawGameCharacter）とサブ関数（FillMoon）とから呼び出される関数の群としてDrawCurve関数及びFill関数がある。ここで、メイン関数（DrawGameCharacter）とサブ関数（FillMoon）とから呼び出される関数の群に含まれるDrawCurve関数及びFill関数のすべてが連続して呼び出される。したがって、これらのDrawCurve関数及びFill関数が１つのグループとして抽出される。
【００３８】
本実施の形態では、このようにしてサブ関数をグループ化し、グループ化されたそれぞれのサブ関数の群で表現されるベクタ部分画像を描画したうえでラスタ画像のデータとしてキャッシュし、次にそのベクタ部分画像の描画処理の関数が呼び出された場合にはキャッシュされているラスタ画像を読み出して用いるようにメイン関数を書き替える処理を行う。
【００３９】
ステップＳ１６では、メイン関数へのキャッシュ関数の埋め込み処理が行われる。このステップ及び後述するステップＳ１８での処理が改良メイン関数生成手段に相当する。サーバ１０２の処理部２０は、ステップＳ１４においてグループ化されたサブ関数の群の各々によってベクタ部分画像が描画された場合にその画像をラスタ画像としてキャッシュするためのキャッシュ関数を埋め込む処理を行う。
【００４０】
例えば、図６のメイン関数の例では、DrawEdge関数に含まれるDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数がグループ化されたので、DrawEdge関数内のDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数の後にこれらの関数によって描画されたベクタ部分画像をラスタ画像としてキャッシュするためのAddCache関数を埋め込む。また、FillMoon関数に含まれるDrawCurve関数及びFill関数がグループ化されたので、FillMoon関数内のDrawCurve関数及びFill関数の後にこれらの関数によって描画されたベクタ部分画像をラスタ画像としてキャッシュするためのAddCache関数を埋め込む。
【００４１】
ここで、AddCache関数は、引数として指定された画像をラスタ画像として記憶部にキャッシュさせるためのキャッシュ関数である。図８の例では、AddCache([2],[3],[4],[5]);によってDrawEdge関数内のDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数によって描画されたベクタ部分画像がラスタ画像としてキャッシュされることを表現している。ここで、［２］，［３］，［４］及び［５］は、それぞれDrawEdge関数内のDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数によって描画された画像データを意味する。また、AddCache([7],[8]);によってFillMoon関数内のDrawCurve関数及びFill関数によって描画されたベクタ部分画像がラスタ画像としてキャッシュされることを表現している。ここで、［７］及び［８］は、それぞれFillMoon関数内のDrawCurve関数及びFill関数によって描画された画像データを意味する。
【００４２】
このようなキャッシュ関数の埋め込みによって、メイン関数が一度でも実行されると、グループ化されたサブ関数の群の各々によって描画されたベクトル部分画像毎にラスタ画像がキャッシュされることになる。
【００４３】
ステップＳ１８では、メイン関数へのラスタ画像描画関数の埋め込み処理が行われる。サーバ１０２の処理部２０は、ステップＳ１４においてグループ化されたサブ関数の群について既にラスタ画像がキャッシュされている場合、ベクタ画像を再度描画する代わりに、キャッシュされているラスタ画像を読み出して利用するためのラスタ画像描画関数をメイン関数に埋め込む処理を行う。
【００４４】
図６のメイン関数の例では、DrawEdge関数に含まれるDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数がグループ化され、ステップＳ１６にて、これらの関数の群によってベクタ部分画像の描画が行われた場合にはラスタ画像としてキャッシュする処理を行うキャッシュ関数が埋め込まれる。そこで、ラスタ画像としてキャッシュが行われていれば、次にこれらの関数によるベクタ画像の描画の処理が呼び出された場合、ベクタ画像を描画する代わりに、キャッシュされたラスタ画像を読み出して使用するためのラスタ画像描画関数を埋め込む。
【００４５】
本実施の形態では、DrawEdge関数内のDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数の前に、キャッシュされたラスタ画像があれば当該ラスタ画像のデータを読み出して描画し、キャッシュされたラスタ画像がなければDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数によるベクタ画像を描画させるような関数をラスタ画像描画関数として埋め込む。具体的には、もしラスタ画像がキャッシュされていれば当該ラスタ画像を読み出して描画させ、呼び出し元の関数に戻るようにする。また、もしラスタ画像がキャッシュされていなければDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数によってベクタ部分画像を描画し、当該画像をラスタ画像としてキャッシュした後に呼び出し元の関数に戻るようにする。
【００４６】
図８の例では、if(CacheToBitmap([2],[3],[4],[5]),DrawBitmap([2],[3],[4],[5]);,return;)というコードをDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数の前に埋め込んでいる。さらに、CacheToBitmap関数を外部関数として定義している。
【００４７】
これらのコード及び関数が実行されると以下の処理が行われることになる。CacheToBitmap関数は、if関数の条件式としてCache関数を適用し、CacheToBitmap関数の引数とされたラスタ画像のキャッシュデータが保存されていれば当該ラスタ画像のデータを返し、ラスタ画像のキャッシュデータが保存されていなければnullを返す。ここでは、［２］，［３］，［４］及び［５］という画像データを特定する識別子を引数としてCacheToBitmap関数が呼び出される。CacheToBitmap関数では、if(Cache([2],[3],[4],[5]),return code;, return null;)というコードが埋め込まれており、Cache([2],[3],[4],[5])は［２］，［３］，［４］及び［５］で特定される画像データがキャッシュされているか否かを調べる関数であり、もし［２］，［３］，［４］及び［５］で特定される画像データがキャッシュされていればreturn codeによって画像データを戻り値として返し、キャッシュされていなければreturn nullによってnullを戻り値として返す。CacheToBitmap関数の呼び出し元では、戻り値がnullでなければ、DrawBitmap([2],[3],[4],[5])によってラスタ画像を描画させて、DrawEdge関数の呼び出し元の関数に処理を戻す。戻り値がnullであれば、if関数を抜けて、DrawCurve関数、Stroke関数、DrawLine関数及びStroke関数によってベクタ部分画像を描画し、AddCache関数により当該画像をラスタ画像としてキャッシュした後に呼び出し元の関数に処理を戻す。
【００４８】
また、図６のメイン関数の例では、FillMoon関数に含まれるDrawCurve関数及びFill関数がグループ化され、ステップＳ１６にて、これらの関数の群によってベクタ部分画像の描画が行われた場合にはラスタ画像としてキャッシュする処理を行うキャッシュ関数が埋め込まれる。そこで、ラスタ画像としてキャッシュが行われていれば、次にこれらの関数によるベクタ画像の描画の処理が呼び出された場合、ベクタ画像を描画する代わりに、キャッシュされたラスタ画像を読み出して使用するためのラスタ画像描画関数を埋め込む。
【００４９】
本実施の形態では、FillMoon関数内のDrawCurve関数及びFill関数の前に、キャッシュされたラスタ画像があれば当該ラスタ画像のデータを読み出して描画し、キャッシュされたラスタ画像がなければDrawCurve関数及びFill関数によるベクタ画像を描画させるような関数をラスタ画像描画関数として埋め込む。具体的には、もしラスタ画像がキャッシュされていれば当該ラスタ画像を読み出して描画させ、呼び出し元の関数に戻るようにする。また、もしラスタ画像がキャッシュされていなければDrawCurve関数及びFill関数によってベクタ部分画像を描画し、当該画像をラスタ画像としてキャッシュした後に呼び出し元の関数に戻るようにする。
【００５０】
図８の例では、if(CacheToBitmap([7],[8]),DrawBitmap([7],[8]);,return;)というコードをDrawCurve関数及びFill関数の前に埋め込んでいる。CacheToBitmap関数では、if関数の条件式としてCache関数を適用し、CacheToBitmap関数の引数とされたラスタ画像のキャッシュデータが保存されていれば当該ラスタ画像のデータを返し、ラスタ画像のキャッシュデータが保存されていなければnullを返す。ここでは、［７］及び［８］という画像データを特定する識別子を引数としてCacheToBitmap関数が呼び出される。そして、CacheToBitmap関数では、if(Cache([7],[8]),return code;, return null;)というコードが埋め込まれており、Cache([7],[8])は［７］及び［８］で特定される画像データがキャッシュされているか否かを調べる関数であり、もし［７］及び［８］で特定される画像データがキャッシュされていればreturn codeによって画像データを戻り値として返し、キャッシュされていなければreturn nullによってnullを戻り値として返す。CacheToBitmap関数の呼び出し元では、戻り値がnullでなければ、DrawBitmap([7],[8])によってラスタ画像を描画させて、DrawEdge関数の呼び出し元の関数に処理を戻す。戻り値がnullであれば、if関数を抜けて、DrawCurve関数及びFill関数によってベクタ部分画像を描画し、AddCache関数により当該画像をラスタ画像としてキャッシュした後に呼び出し元の関数に処理を戻す。
【００５１】
以上のように、メイン関数にラスタ画像をキャッシュして保存するためのキャッシュ関数及びキャッシュされたラスタ画像を読み出して使用するためのラスタ画像描画関数の埋め込み処理が行われる。
【００５２】
このようなメイン関数は、情報端末１００からの要求に応じてサーバ１０２から情報端末１００へ送信され、情報端末１００において実行することができる。例えば、情報端末１００において処理される電子ゲームプログラムの一部にメイン関数を組み込んでおけば、メイン関数が呼び出されてベクトル画像の描画が一旦行われた後、次に同じメイン関数が呼び出されたときにベクタ画像を描画する処理を再度行うことなく、キャッシュされたラスタ画像を読み出して用いることができる。これによって、同一のベクタ画像を描画する処理を何度も繰り返すことなく、情報端末１００での処理の負担を軽減できる。また、画像描画処理を高速化させることができる。
【００５３】
＜更新処理＞
本実施の形態では、ベクタ画像全体ではなく、それを構成するベクタ部分画像毎にグループ化してラスタ画像としてキャッシュするので、もし一部のベクタ部分画像に変更が生じた場合、その部分のみ変更したメイン関数を準備すれば、変更がないベクタ部分画像については再度描画することなくキャッシュされたラスタ画像を用いることができる。
【００５４】
例えば、電子ゲームプログラムが改良されてメイン関数が更新された場合について、図９のフローチャートを参照して説明する。図９のフローチャートは、ステップＳ２０を除いて、図４のフローチャートと同一である。
【００５５】
なお、ここでは、図１０に示すように、DrawEdge関数のDrawCurve関数、Stroke関数、DrawLine関数及びStroke関数に新たにDrawCurve関数及びStroke関数が加えられた場合を例に説明する。
【００５６】
ステップＳ１２では、図１１に示すようなサブ関数呼出リストが生成される。ステップＳ１４では、DrawEdge関数内のDrawCurve関数、Stroke関数、DrawLine関数、Stroke関数、DrawCurve関数及びStroke関数がグループ化され、FillMoon関数内のDrawCurve関数及びFill関数がグループ化される。
【００５７】
ステップＳ２０では、新たなキャッシュ関数及びラスタ画像描画関数の埋め込み処理が必要なグループが判定される。サーバ１０２の処理部２０は、更新前のメイン関数と同じ内容のグループについてはステップＳ１６以降の処理によって新たなキャッシュ関数及びラスタ画像描画関数は行う必要はなく従来のキャッシュ関数及びラスタ画像描画関数を埋め込めばよく、更新があったグループについてのみ新たなキャッシュ関数及びラスタ画像描画関数の埋め込み対象とする。
【００５８】
ステップＳ１６では、メイン関数へのキャッシュ関数の埋め込み処理が行われる。このとき、ステップＳ２０において従来のキャッシュ関数及びラスタ画像描画関数を埋め込めばよいと判断されたグループについては、従来と同様のキャッシュ関数を埋め込む。図１０の例では、FillMoon関数のDrawCurve関数及びFill関数については更新がなかったので、図１２に示すように、メイン関数の更新前と同じキャッシュ関数を埋め込む。
【００５９】
一方、ステップＳ２０において新たなキャッシュ関数及びラスタ画像描画関数を埋め込む必要があると判断されたグループについては、新たなキャッシュ関数を埋め込む。図１０の例では、DrawEdge関数内のDrawCurve関数、Stroke関数、DrawLine関数、Stroke関数、DrawCurve関数及びStroke関数については更新があったので、図１２に示すように、新たなキャッシュ関数を埋め込む。
【００６０】
ステップＳ１８では、メイン関数へのラスタ画像描画関数の埋め込み処理が行われる。このとき、ステップＳ２０において従来のキャッシュ関数及びラスタ画像描画関数を埋め込めばよいと判断されたグループについては、従来と同様のラスタ画像描画関数を埋め込む。図１０の例では、FillMoon関数のDrawCurve関数及びFill関数については更新がなかったので、図１２に示すように、メイン関数の更新前と同じラスタ画像描画関数を埋め込む。
【００６１】
一方、ステップＳ２０において新たなキャッシュ関数及びラスタ画像描画関数を埋め込む必要があると判断されたグループについては、新たなラスタ画像描画関数を埋め込む。図１０の例では、DrawEdge関数内のDrawCurve関数、Stroke関数、DrawLine関数、Stroke関数、DrawCurve関数及びStroke関数については更新があったので、図１２に示すように、新たなラスタ画像描画関数を埋め込む。
【００６２】
このように、メイン関数が更新された場合であっても、更新前と変更がなかったグループについては更新前と同じキャッシュ関数及びラスタ画像描画関数を埋め込む。したがって、更新されたメイン関数を情報端末１００に送り、情報端末１００においてそのメイン関数を実行したときに変更がなかったグループについては既にキャッシュされているラスタ画像をそのまま利用して画像の描画処理を行うことができる。
【００６３】
一方、更新前から変更があったグループについては、更新された内容に応じた新たなキャッシュ関数及びラスタ画像描画関数を埋め込む。したがって、更新されたメイン関数を情報端末１００に送り、情報端末１００においてそのメイン関数を実行したときに変更があったグループについてはキャッシュされたラスタ画像は使用せず、新たにベクタ部分画像の描画処理が行われる。そして、ベクタ部分画像の描画処理が一度行われた後は、新たなベクタ部分画像がラスタ画像としてキャッシュされ、次からはキャッシュされたラスタ画像を利用することができる。
【００６４】
以上のように、本実施の形態によれば、メモリ消費を抑制しつつ、画像の表示速度を高めることを可能とする画像データのキャッシュ方法を提供することができる。
【００６５】
＜変形例＞
なお、上記実施の形態では、サーバ１０２においてサブ関数の呼び出しの順序を求める呼出順抽出処理、連続して呼び出されるサブ関数の群をグループとして抽出するグループ抽出処理及びグループに含まれるサブ関数によって描画されたベクトル部分画像をラスタ画像としてキャッシュするためのキャッシュ関数をメイン関数に付加する改良メイン関数生成処理のすべてを行う態様について説明した。
【００６６】
しかしながら、これらの処理をすべてサーバ１０２で行う必要はなく、その一部を情報端末１００において行わせるようにしてもよい。具体的には、サーバ１０２において、ゲームプログラム自体に呼出順抽出処理、グループ抽出処理及び改良メイン関数生成処理のいずれかを行うためのプログラムを埋め込み、それを情報端末１００に送信した上で情報端末１００において埋め込まれたプログラムを実行させるようにすればよい。
【００６７】
例えば、ゲームプログラムがＨＴＭＬのファイル”ｇａｍｅ．ｈｔｍｌ”及びＪａｖａＳｃｒｉｐｔのファイル”ｇａｍｅ．ｊｓ”から構成されると仮定すると以下の手順で処理すればよい。本例では、上記実施の形態と同様に”ｇａｍｅ．ｊｓ”に含まれる関数を解析して呼出順抽出処理、グループ抽出処理及び改良メイン関数生成を行うＪａｖａＳｃｒｉｐｔのファイル"ｌｏａｄｅｒ．ｊｓ”を用いる。
（１）”ｇａｍｅ．ｈｔｍｌ”から”ｇａｍｅ．ｊｓ”のかわりにローダ”ｌｏａｄｅｒ．ｊｓ”をロードする。
（２）”ｌｏａｄｅｒ．ｊｓ”は”ｇａｍｅ．ｊｓ”をロードする。
（３）”ｌｏａｄｅｒ．ｊｓ”は”ｇａｍｅ．ｊｓ”においてベクタ画像を描画する関数を上記実施の形態と同様に解析して、呼出順抽出処理、グループ抽出処理及び改良メイン関数生成処理を実行してキャッシュ関数を”ｇａｍｅ．ｊｓ”に付加する。
（４）”ｌｏａｄｅｒ．ｊｓ”は改変後の”ｇａｍｅ．ｊｓ”を実行する。
【００６８】
このようにして、情報端末１００において呼出順抽出処理、グループ抽出処理及び改良メイン関数生成処理を行うことができる。
【符号の説明】
【００６９】
１０  処理部、１２  記憶部、１４  入力部、１６  出力部、１８  通信部、２０  処理部、２２  記憶部、２４  入力部、２６  出力部、２８  通信部、１００  情報端末、１０２  サーバ、１０４  情報通信網。
【図１】
0005842029.tif 000002
【図２】
0005842029.tif 000003
【図３】
0005842029.tif 000004
【図４】
0005842029.tif 000005
【図５】
0005842029.tif 000006
【図６】
0005842029.tif 000007
【図７】
0005842029.tif 000008
【図８】
0005842029.tif 000009
【図９】
0005842029.tif 000010
【図１０】
0005842029.tif 000011
【図１１】
0005842029.tif 000012
【図１２】
0005842029.tif 000013