C#は電気羊の夢を見るか?(引っ越し中)

dtiブログが閉鎖とのことでhttp://tanocs.blog.fc2.com/へ引っ越します。

Radeonの問題点

非常に悔しい思いをした。

出張先で携帯のバッテリーが切れたとき、
コンビニで充電器を買わねばならぬあの悔しさと同じ感覚だ。

そんなわけで、とうとうRadeonをデバッグ環境として購入しました。
”そんなわけ”というのは、公開したゲームが一部のRadeonで動かないんじゃボケというご報告が多かったから

HD4850とかもう型落ちも良い所の不良在庫品を
8000円弱の値を払って買うハメになるとは・・トホホ。

生まれてはじめて買ったRadeonが、まさかこんな形になろうとは思いよらなんだ。


閑話休題


Windows向けにXNAのゲームを公開している人が
一体どれくらいこの世の中に存在するのか知らないが、
私と同じようにRadeonを買わされる人が居なくなるように、
今回手に入れたノウハウを、非常に稀有な人にむけて発信する。


SpriteBatchの挙動
これはもう、どこに文句を言ったらいいか解らないので愚痴っておく。

SpriteBatchでエフェクトを使う、みたいな解説を見ると
大抵レジストリ0番に値があるのを期待してエフェクトを書くような解説になっているのだが、
残念ながらこれが超危険な行為であることがわかった。

RadeonのHD4xxx系とHD6xxx系は、どうやらこれをやると正常に動作しない模様。
原因や、挙動を予測しようとすると、夜に寝られなくなるくらい不思議な現象だが、
事実そうなるんだから仕方ない。


対処法は公式のブルームサンプルにある
DrawFullScreenQuadで代用が効くので、こちらに移行することを強くオススメする。


▲謄スチャの寿命
たしかXNA4.0ではこの心配は不要になったはずなので、XNA3.1で開発してる人向け。

texture2d.SetData時にテクスチャの寿命を明示的に指定してやらないと
Radeonはこれを即効でぶち壊す。

特にTexSkinningSampleのテクスチャアニメーション使ってる人は要注意。


こういった挙動を見て思うんだが、Radeonってのは一体どんな設計になってるんだろうか(;;
多くのゲームがRadeonに不具合を抱えている原因も、こういった変態的な動作の性だともう。
このエントリーをはてなブックマークに追加
LINEで送る

苦手意識

苦手意識というのがある。
こいつは食わず嫌いのように、やってみれば大したことないのに、
何故か出来ないような気がして手が出ない心理的に非常に厄介な状態。
自分にとってそんな感じだった物にdelegateがある。

なんとなくjavascriptの、関数を変数のように扱うイメージはあったものの、なぁんとなく手が出せずにいた。
理由はよく解らない物を使ってバグを引き起こすわけにはいかない為、普段使い慣れていないものを嫌っていたのだと思う。

ところが先日、どうにもスパゲティになっていたソースを修正する機会があり、苦手意識を克服することができた。


件のソースは、オブジェクト分割は疎か、関数への分割も殆ど行われておらず、
一つのイベントだけで3千行以上書いてある有様で、
一つのソースファイルに1万行以上のコードが記されている超大作であった。

こいつをどうにかして、ソースの全体を見渡せる状態を作りたかったために、処理を整理していったのだが
ちょっとの判定の差が影響して、似たような二重ループが量産されているのが目についた。

その二重ループの大半が描画処理であったため、とりあえず関数化して別ソースに避けていったのだが、それでもまだ同じようなソースコードが大量に存在している状態であった。

こいつをどうにかしてまとめたいという欲求から、デリゲートのお世話になってみることにした。


ところがデリゲートを使ってみるとその大量にあった二重ループのソースは約1/10程度まで減り、かなりすっきりと全容を見渡せるようになった。

使ってみればイメージ通りの挙動をしてくれるし、今まで全く理解できなかったラムダ式もサクサク使えるようになった。

逆にラムダ式が読めない人には、何のことかさっぱり読めないソースコードになったような気がしないでもない・・・


しかしながら、これは非常に便利だと思った。
便利でコーディングはかなり楽になるけど、使い過ぎると可読性が落ちて非常に危険なんじゃないだろうか・・


ラムダ式にたいする一般的な見識というのを見かけたことがないので、多用に対する注意や可読性に対する見解はどうなってるんじゃろなぁ・・

とりあえず、デリゲートが理解できたので、これで並列処理も書いていけるようになりそう。



蛇足:こいつぁは便利だー!って書きまくって思ったんだけど、
デリゲートってオーバーロード出来ないんじゃろか・・
感覚的に書いたらエラー出て、ちょっと調べた感じじゃなさそうだったので。

そこまで仮想化すると、元がなんなのかわからなくなってしまうような気がしないでもない・・
このエントリーをはてなブックマークに追加
LINEで送る

 | HOME | 

PAGE TOP ▲

Appendix

■春条

■春条

生息地は愛知
車と甘い物が好きな31歳
特技は無限昼寝

MONOからSharpDXを使う
変態的な手法で、
.NET Frameworkを使わずに
ゲーム作りやってます。

Search

Calender

« | 2011-05 | »
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

Twitter

Recent Entries

DTIブログポータルへ
このブログを通報
Report Abuse

利用規約