トップページ⇒tech
21コメント6KB

DirectDrawで質問

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。NGNG
サーフェスを作成する時なのですが、
こちらからサーフェスメモリを示すポインタを指定する
方法はないでしょうか。
自分で作成した配列にサーフェスを組み込みたいのです。
御教授よろしくお願いします。
0002名無しさん@お腹いっぱい。NGNG
無理
00031NGNG
>2
そ、そんなあっさり言わないでも。
以前はDDSD_LPSURFACEフラグを立てて指定できたみたいだし。
0004>1NGNG
MSDNの「クライアントメモリサーフェスの作成」ってところみろ。
0005名無しさん@お腹いっぱい。NGNG
>1
ちなみに、どんな得があるの?
00061NGNG
>5
指定されたアドレスがありそこで
サーフェスを作らなければならないという前提があるからなのですが。
メリットといえば、BltFastを使った画像転送が早いということでしょうか。
memcpyでは話にならないくらい遅いので。
0007ヽ(?´ー`?)ノNGNG
DDrawのHALの実装を以前仕事でやった経験から推し量ると、
SystemMemoryにバッファとられたら、memcpyライクに処理するしかない気がするっス。
DMAサポートしてても、処理速度自体が上がるわけじゃないし。

想像するに、その「指定されたアドレス」とやらにグラフィックチップから
のアクセスがなんらかの方法で最適化されてるっていう環境なのかな。
でもそれってフレームバッファとどう違うんだろう
00081NGNG
>7
なんか難しそうですが。
前提条件として、ある配列に画像データが収められていて、
それをDirectDrawで表示させたいのですが、memcpyでサーフェスに放り込むと
パフォーマンスが悪くなるため、その配列をサーフェスに組み込みたいわけです。
その配列のアドレスは別プログラムが指定するため
サーフェス作成時にアドレス指定したいのです。
どうも後からポインタの変更はできないみたいですし。
0009名無しさん@お腹いっぱい。NGNG
>memcpyでサーフェスに放り込むとパフォーマンスが悪くなるため、

何でパフォーマンスが悪くなるの?
プログラムスタート時に一回この処理を行うだけでしょ?
あとは普通にサーフェイスを使うわけだし。
00101NGNG
>9
それが、元の画像データはカメラ映像の如く逐次更新されてしまうのですよ。
更新するたびにmemcpyしてたらBLTに比べたら遅くて遅くて。
0011名無しさん@お腹いっぱい。NGNG
memcpyはヤヴァイよ。確かバイトでコピーしてたはず。
REP MOVSD使いましょ。
00121NGNG
>11
アセンブラですか、やったことないですが
試してみます。
0013名無しさん@お腹いっぱい。NGNG
>>8@`>>10 納得。Bltは普通ドライバで最適化されてるしね。
0014名無しさん@お腹いっぱい。NGNG
結局、1は>>4のところをみて、メモリをサーフィスでラップできたのか?
それができれば、アセンブラなど使わなくていいぞ。
00151NGNG
>14
返事遅れてすみません、
DDSD_LPSURFACEフラグを立てて見たのですが
どうもアドレス指定ができません。DD_OKは返すのですが。
NT4.0上でプログラムしてるのですが、
DDSURFACEDESC2 構造体はNT5.0以降対応ということでショックを受けました。
0016名無しさん@お腹いっぱい。NGNG
ヘルプにはDDSD_LPSURFACEを立てて、SetSurfaceDescすればできるようなことが書いてあるね。
0017名無しさん@お腹いっぱい。NGNG
>>11
無茶苦茶なことをいう厨房が・・・
確かめもせず何故そういう嘘八百を・・・
リリースモードでコンパイル結果を確かめてください
自分がいかに馬鹿なことを逝ったのか分かるでしょう

コンパイラの最適化を馬鹿にしてはいけません
VCの場合は条件さえ整えばfor文でさえrepに置き換えます
001811NGNG
>17
見てみたら本当だ。デバッグモードでも十分激しいことやってるね。
嘘言ってスマソ。
0019名無しさん@お腹いっぱい。NGNG
でもさ
486以降ってrepの方が遅かったりしなかったっけ?
よく覚えてないんで、すまむ
0020名無しさん@お腹いっぱい。NGNG
MOV を Unroll したり(486)、
FPU Resister 使ったり(pentium)、
MMX Resister 使ったり(pentium mmx)、
SSE 使ったり(pentium2)、したほうが
速かったりしますが、そんな対してかわらんので
安定して速度のでる rep movsd でしょう。
0021名無しさん@お腹いっぱい。NGNG
rep 語長が小さいよね。手軽さでは一番のような。
アンロールはキャッシュミスりそう。
FPU MMX SSE はタスクまたはスレッド並列時に致命的。
あってる?間違ってたら訂正きぼーん。
■ このスレッドは過去ログ倉庫に格納されています