トップページ > 過去ログ > 記事閲覧
マスク関連
名前:憂煉 日時: 2008/05/10 21:59

マスクスクリーンを複数使用する事は可能でしょうか? 下記のようなクラスを作っているのですが、マスクスクリーンを複数使えるとありがたいので… class cDraw2 //内部に描画可能グラフィックを保持し、それに対して描画を行う。表、裏画面などに直接描画も可能。 //描画命令を使ってもすぐには描画されず、DrawAll関数を呼ぶことで初めて描画される。その際に描画命令の第一引数の順に実際の描画が行われる。 //640x480の画面に描画する事を前提として計算した座標を渡す必要がある。保持するスクリーンの大きさが640x480以外の場合は引き伸ばしが行われる。 //第一引数が追加されている以外はDXライブラリで用いられる描画関数とほぼ同じに扱う事ができるようになっている。 { //内部で使う変数や関数がたくさん public: const int sxsize,sysize;//保持しているスクリーンのサイズ cDraw2(int data_max=1024);//DXライブラリが保持している現在の描画先を描画先にする。 cDraw2(int X,int Y,int data_max=1024);//第一、第二引数に指定された大きさを持つスクリーンを作成し、描画先とする。 ~cDraw2(void); int GetDrawScreenGraph();//このクラスが保持する描画可能グラフィックハンドルを返す。 void SetDrawBright(int r,int g,int b); void SetDrawBlendMode(int mode,int a=255); void DrawAll(int DeletePrevDataFlag=1);//描画実行命令。引数にFALSEを渡すと前回の描画結果を破棄せずに上書きする。 //描画関数 int DrawGraph(int prio,int x,int y,int gh,int trans); int DrawGraphF(int prio,float x,float y,int gh,int trans); int DrawTurnGraph(int prio,int x,int y,int gh,int trans); int DrawTurnGraphF(int prio,float x,float y,int gh,int trans); int DrawExtendGraph(int prio, int x1, int y1, int x2, int y2,int gh , int trans ) ; int DrawExtendGraphF(int prio,float x1,float y1,float x2,float y2,int gh , int trans ) ; int DrawRotaGraph(int prio, int x, int y,float ExtRate, float Angle,int GrHandle , int TransFlag , int TurnFlag =0) ; int DrawRotaGraphF(int prio, float x,float y,float ExtRate, float Angle,int GrHandle , int TransFlag , int TurnFlag =0) ; int DrawRotaGraph2(int prio, int x, int y,int cx, int cy,float ExtRate, float Angle,int GrHandle, int TransFlag, int TurnFlag =0) ; int DrawRotaGraph2F(int prio, float x,float y,float cx, float cy,float ExtRate, float Angle,int GrHandle, int TransFlag, int TurnFlag =0) ; int DrawModiGraph(int prio, int x1, int y1, int x2, int y2,int x3, int y3, int x4, int y4,int GrHandle , int TransFlag ); int DrawModiGraphF(int prio, float x1, float y1,float x2, float y2,float x3,float y3, float x4, float y4,int GrHandle , int TransFlag ); int DrawRectGraph(int prio, int DestX, int DestY,int SrcX, int SrcY, int Width, int Height,int GraphHandle, int TransFlag, int TurnFlag=0 ) ; int DrawRectGraphF(int prio, float DestX, float DestY,int SrcX, int SrcY, int Width, int Height,int GraphHandle, int TransFlag, int TurnFlag =0) ; }; 備考 一部の関数では座標の補正にSSE命令セットによる高速化をしてある。したつもりだ。したにちがいない。 ただし、内部でGetUseSSEFlag関数を使っているのでDXライブラリのバージョンが2.24cの時のテスト版以降である必要がある。 また、実際に高速化できているか検証していない。

Page: 1 |

Re: マスク関連 ( No.1 )
名前:管理人 日時:2008/05/11 00:11

マスクスクリーンを複数にすることは出来ません。 現在のマスク処理は Direct3D との相性が悪く、負荷も高く(恐らく通常描画の数倍〜数十倍の 負荷が掛かる)使う上での取っ付きも悪いので、現状以上に機能を強化する気はありません・・・ 申し訳ありませんが一つのマスクスクリーンを使いまわすようにして下さい。m(_ _;m
Re: マスク関連 ( No.2 )
名前:憂煉 日時:2008/05/11 07:12

素早い回答をありがとうございます。 相性の問題できついのですね…了解です。 可能かどうかわかりませんが、GetMaskSurfaceをうまく使ってマスク画面のデータを退避できるようにがんばってみます。

Page: 1 |