| Version 5 (modified by mosa, 5 years ago) |
|---|
GSD
概要
ゲーム画面上に任意の画像を表示させるライブラリです
オマケとしてフレームレートを制限する機能が付いています
Source
Download
- Binary
svn export http://svn.coderepos.org/share/lang/c/GSD/trunk GSD
使い方
gsd.dllの初期化・終了
gsd.dllの以下の関数を呼び出すことで初期化・終了処理ができます
int _cdecl SetHook(void *reserve, DWORD *maxTextureSize); void _cdecl FreeHook();
SetHook()の戻り値は、成功した場合 0を返し、失敗した場合は 0以外の値を返します
maxTextureSizeにはテクスチャの最大サイズが格納されます
sTexInfo::texSizeはこれ以下の値でなければなりません
gsd.dllでの画像表示方法
テクスチャデータ、及び設定用データには共有メモリによってアクセスすることができます
各共有メモリへアクセスする場合は必ずミューテックスで排他処理してください
排他処理後に各共有メモリのサイズ、設定等に矛盾がないようにしてください
(sSettings::pixelsDataSizeと実際のテクスチャ用共有メモリのサイズが食い違っている、等)
共有メモリ名・ミューテックス名は以下の通りです
- gsd_pixelsX
-
テクスチャ用共有メモリ
XにはsSettings::pixelsRevisionの値が入ります。gsd_pixels1、gsd_pixels2、・・・
テクスチャのカラーフォーマットはアルファ付32bit色(ARGB)です サイズ:sSettings::pixelsDataSize - gsd_settings
-
設定用共有メモリ
サイズ:sSettings構造体のサイズ - gsd_mutex
- ミューテックス
設定用共有メモリの内容は以下の通りです
// 8バイトアライメント
struct sTexInfo
{
BOOL active; // 表示するか否か (TRUE、FALSE)
DWORD texSize; // テクスチャのサイズ、2のべき乗でなければならない (ピクセル単位) 0ならテクスチャ削除
DWORD offset; // テクスチャ用共有メモリの先頭からのオフセット (バイト単位)
DWORD revision; // テクスチャを作成、更新した場合は必ずインクリメントする
int x, y; // テクスチャの位置 (alignの値によって基準位置が変わる)
DWORD color; // 基本色 (通常は白 0xffffffff)
DWORD align; // テクスチャの配置 (DT_LEFT、DT_CENTER、DT_RIGHT、DT_TOP、DT_VCENTER、DT_BOTTOM)
DWORD reserve1, reserve2, reserve3, reserve4;
};
struct sSettings
{
DWORD pixelsDataSize; // テクスチャ用共有メモリのサイズ (バイト単位)
DWORD pixelsRevision; // テクスチャ用共有メモリを作成、再作成した場合はインクリメントする
sTexInfo texInfo[32]; // テクスチャの設定情報
DWORD lastUpdate; // 最後にゲーム画面が更新された時間 (UNIX時間)
double fpsLimit; // FPS制限の値 0.0で無効
__int64 orgTime; // FPS制限の基準時間 (QueryPerformanceCounterの値)
BOOL showFPS; // FPS表示の有無 (TRUE、FALSE)
DWORD fpsAlign; // FPS表示の配置 (DT_XXX)
BOOL updateOnActive; // アクティブ時のみ更新 (TRUE、FALSE)
DWORD reserve1, reserve2, reserve3, reserve4;
};
ToDo
- Direct3D10のゲームに対応する
- DirectDraw、Direct3D7以前のゲームに対応する
- 64bitのゲームに対応する
- 似たようなコードが散在しているので一箇所にまとめたい
- 共有メモリを直接弄らなくていいようにAPIを追加する
- 高速化
既知の問題点
- extAddRef、extReleaseが適当なので何とかしたい
- OpenGLでのテクスチャ消失の検知が適当なので何とかしたい
- 一部のDirect3D8ゲーム(UT2003等)で CaptureStateBlock を呼び出すと例外が発生する
- 一部のOpenGLゲーム(いずもる3D地図等)で頂点色が効かない
- Steamコミュニティーを使用するゲームで終了時にリソースを開放しようとすると例外が発生する
改良歓迎
上で挙げたToDoや問題点も、自分の力だけで解決できるか怪しいです
「俺が直してやんよ」という方は、是非CodeReposのComitterになり開発に参加してください
Author
License
LGPLに準じます
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)