Nagarei

Results 117 comments of Nagarei

> ScreenクラスはTexcure2Dを継承するべきである ここは少し粘らせてください。 1. MakeScreenで作られたハンドルはグラフィックハンドルである(is-a関係が成り立つ) 2. 「作成したhandleを描画対象にする為」にはMakeScreen一択なので、ScreenクラスはMakeScreenで作成したものを示すクラスである。 3. よってScreenクラスはグラフィックハンドルを表すクラスである。 さらに、以下のようなDxLibなら通るコードが通らないのは直感的ではないですよね? ``` cpp //左右に並べて表示 void DrawDouble(const dxle::Texture2D& graph_left, const dxle::Texture2D& graph_right) { graph_left .DrawExtendGraph( 0, 0, 320, 480, false); graph_right.DrawExtendGraph(320, 0,...

そういえば`operator=`ですが、さすがに画像のコピーという重い動作を`=`だけでできるようにするのはどうなんでしょうか?僕は`operator=`を`= delete`にして`clone`メンバ関数でも作るべきだと思うのですが...。 ``` cpp //使用イメージ void f(){ dxle::Texcure2D a; dxle::Texcure2D b = a.clone(); } ``` また、コピーのときに`NotUse3DFlag`や`UseAlphaChannel`といった引数のオプションを取得する方法が現状ないのをどう処理すれば良いでしょうか? 1. デフォルトの値を使う 2. メンバ変数に保存しておいて、それを使う 3. DXライブラリの管理人様にお願いして取得関数を作ってもらう 僕が思いつくのはこれくらいですが...。

> operator= 失礼しました。コピーコンストラクタ、コピー代入演算子両方ともdeleteのつもりです。 > マルチスレッドとか非同期処理が絡むと 失念していました。 まずスレッドセーフ保証に関する提案ですが、 1. このライブラリ全体のスレッドセーフ保証は、DXライブラリがスレッドセーフに動作する場合(コンパイルオプションDX_THREAD_SAFEが有効になっている場合など) 2. C++のスレッドセーフ保証の基本「[全てが読み込み操作ならば排他制御は不要である](http://yohhoy.hatenablog.jp/entry/2013/12/15/204116)」に従い、 3. そうでないならば、スレッドセーフ保証はない で良いでしょうか? これを前提に考えると、 - コピー元が非同期読み込み中の場合はランタイムエラー(例外を投げるべきかは要検討) - コピー先が非同期読み込み中の場合は正常動作(読み込みを中止し、破棄) で大丈夫だと思います。 > クラスで持っている値が正しいとは限らなくなるケース クラスで持っている値が変更されるのは「書き込み動作」に当たるので、「クラスで持っている値が正しいとは限らなくなる」タイミングで値を読み込んでうまく動かなかったとしても、それはスレッドセーフ保証が保証する範囲の外となるので問題ないです。 > noexcept boostはBOOST_NOEXCEPT_IFみたいな関数形式マクロを作っていました。

グラフィックの複製ですが...。 描画対象にできないグラフィックを複製する場合、BltDrawValidGraphは使えないので、結局のところScreenに描くしかないです...。結果3D用のカメラ設定のリセットが隠れたところで行われるという非常にいやらしい関数になってしまいます。どうせScreenに描くならばdraw関数(名称要検討)とDrawGraphを使えば簡単にできるので、Texcure2Dクラスにはclone関数を付けなくてもよいでしょうか?(複製はできなくなりますが...) なお、Screenクラスには作ります。

画像のサイズを取得する関数をオーバーロードしようと思うのですが... std::pairを戻り値にするのとpointi(point_c)を戻り値にするのどちらが良いでしょうか? point_cはあくまで座標を表すクラスなのでやはりstd::pairの方が良いですかね?

とりあえず作りかけがコンパイルできたのでアップ。 細部に突っ込みどころがいろいろありますが...。 サイズ取得関数の引数なしのオーバーロードの戻り値がpointiになってたり、 draw関数(DrawnOn関数というのはどうでしょう(自信なし))がなかったり、 point_cをとるオーバーロードが一つもなかったり。

[http://hpcgi2.nifty.com/natupaji/aska.cgi](http://hpcgi2.nifty.com/natupaji/aska.cgi)の4236番のサンプルではSetDrawScreenが使われているので、僕の三つ前のコメントに書いたような理由で使えないですね...。 > pointとsize2つ作ってしまうのも手かもしれません それが良いと思います。これは...やって実装継承ですかね。別クラスにしたほうが良いと思います。

> 3つまえというと 結果3D用のカメラ設定のリセットが隠れたところで行われるという非常にいやらしい関数になってしまいます。 これですかね? そうです。舌足らずでした。

> 公開を要望してみるのも手だと思うんですがどうでしょう? 他の人の需要もありそうですし、要望を出していただきたいです。

異議はないです。 ブランチを乱立するのもどうかと思うので、Releaseするときに上記部分だけを抜き出すで良いですかね?