ページ 1 / 1
早いコード + BytePtr
Posted: 2006年12月05日(火) 17:12
by MML
ゆちボンです.
最近ゲームらしきものを作っているんですが、GetPixelが遅いということを聞いたことがあるので、HSPでは、VRAMというやつをいじくればOKとは聞いたことがあるのですが
ABではやったことがないので、知っている方、教えてください。
あと、PCによってはBitBltが遅いということを聞いたのでどうすれば早くなるか、教えてください。
それと、
BytePtrの使いかたってこんな感じでいいんですか?
コード: 全て選択
Dim A As BytePtr
'↓ここはcallocがいいんですか?mallocがいいんですか?
A=malloc(10)
'10バイト入れる
lstrcpy(A,"ABCDEFGHIJ")
'再度入れる
free(A)
A=malloc(15)
'15バイト入れる
lstrcpy(A,"ABCDEFGHIJKLMNO")
free(A)
Posted: 2006年12月05日(火) 20:07
by イグトランス
GetPixelは遅かったとしても,それが問題になるまでは気にする必要はないと思いませんか。
まずは作ってみて,それが我慢ならないほどだったら,そのときに改めて考え直せばいいのです。
それよりもゲームだったらいかにいいものを作るかということに力を注いだほうがいいと思いますよ。
BytePtrについてですが,文字列の終わりを表すヌル文字(\0)が1文字を占めるので,それぞれ1ずつ確保するメモリの量が足りませんが,それ以外の扱い方は間違っていません。
すぐにlstrcpyで中身を書き込むのでわざわざcallocを使う必要はありません。
Posted: 2006年12月05日(火) 20:16
by konisi
GetPixelは確かにVRAMを直接叩くよりは遅いですが、VRAMのどの位置に欲しいデータが在るのかと言った計算に、現在のウインドウの位置を取得する必要があるのでGetWindowRect呼び出してABで掛け算やってとしていると逆に遅くなるかもしれません(w
ウインドウの描画領域が最大化していればそこそこスピードは出ますが、そっちより他の事で最適化が必要な言語なので、他の部分で色々試してみてください。
http://smile.poosan.net/perl-bin/hsp/ve ... 050010.txt
此処あたりが参考になります。僕はABでの方法は分かりません。
BytePtrのほうは、何度も再確保する場合はReallocというすばらしい関数があるので調べてみてください。
Posted: 2006年12月06日(水) 17:11
by MML
>GetPixelは遅かったとしても,それが問題になるまでは気にする必要はないと思いませんか。
>まずは作ってみて,それが我慢ならないほどだったら,そのときに改めて考え直せばいいのです。
>それよりもゲームだったらいかにいいものを作るかということに力を注いだほうがいいと思いますよ。
はい。わかりました。
>BytePtrについてですが,文字列の終わりを表すヌル文字(\0)が1文字を占めるので,それぞれ1ずつ確保するメモリの量が足りませんが,それ以外の扱い方は間違っていません。
>すぐにlstrcpyで中身を書き込むのでわざわざcallocを使う必要はありません。
ということは...
コード: 全て選択
Dim A As BytePtr
A=malloc(11)
'10バイト入れる
lstrcpy(A,"ABCDEFGHIJ")
'再度入れる
A=realloc(16)
'15バイト入れる
lstrcpy(A,"ABCDEFGHIJKLMNO")
free(A)
でいいんでしょうか?
> GetPixelは確かにVRAMを直接叩くよりは遅いですが、VRAMのどの位置に欲しいデータが在るのかと言った計算に、現在のウインドウの位置を取得する必要があるのでGetWindowRect呼び出してABで掛け算やってとしていると逆に遅くなるかもしれません(w
> ウインドウの描画領域が最大化していればそこそこスピードは出ますが、そっちより他の事で最適化が必要な言語なので、他の部分で色々試してみてください。
>
>
http://smile.poosan.net/perl-bin/hsp/ve ... 050010.txt
> 此処あたりが参考になります。僕はABでの方法は分かりません。
HSPではわかるんですが、、、やめておきましょう。
> BytePtrのほうは、何度も再確保する場合はReallocというすばらしい関数があるので調べてみてください。
探しました。これは、、、freeを使わなくていいんですよね?
あと、もし知っている方がいれば、教えてください。
HSPで「gsquare」見たいなことができるWinAPIまたはDLLがあるんでしょうか?
Posted: 2006年12月06日(水) 18:44
by OverTaker
イグトランス さんが書きました:すぐにlstrcpyで中身を書き込むのでわざわざcallocを使う必要はありません。
これはおそらく、再確保する必要がないと言ってるんだと思います。確保は基本的に時間のかかる動作ですので、問題がなければ、最初から必要な分のメモリを一気に確保しておくべきだと思います。
コード: 全て選択
Dim A As BytePtr
A=calloc(100) '余裕を持って確保
lstrcpy(A,"ABCDEFGHIJ")
lstrcpy(A,"ABCDEFGHIJKLMNO")
free(A)
Posted: 2006年12月06日(水) 18:48
by MML
OverTakerさん、返信ありがとうございます。
>
イグトランス さんが書きました:すぐにlstrcpyで中身を書き込むのでわざわざcallocを使う必要はありません。
> これはおそらく、再確保する必要がないと言ってるんだと思います。確保は基本的に時間のかかる動作ですので、問題がなければ、最初から必要な分のメモリを一気に確保しておくべきだと思います。
>
コード: 全て選択
Dim A As BytePtr
>
> A=calloc(100) '余裕を持って確保
>
> lstrcpy(A,"ABCDEFGHIJ")
>
> lstrcpy(A,"ABCDEFGHIJKLMNO")
> free(A)
ほうあ!そんな方法があったとは..
Stringから抜け出して、 BytePtrを勉強してみると、なかなか面白いですね!
どうもありがとうございました。