D3DXCreateEffectについて – CompileEffect


マクロで有効・無効のブロックを切り替えるにはどうしたらいいんだーということで調べてました。
ピクセルシェーダーコードでは、以下のようにして挙動をチェックしていました。

[code lang=”cpp”]
#ifdef _TEST_
return float4(1,1,1,1);
#else
return float4(0,0,1,1);
#endif
[/code]

これをEffectでやるのにネックだったのは、マクロ定義変数の部分でした。

解決策はこう。

[code lang=”cpp”]
D3DXMACRO d3dxMacros[2] = { //マクロ マクロ名
"_TEST_","", <– ここで定義する部分を設定して
0, 0 <– ここで終端を示すようにヌルターミネートしておく
};
[/code]

通りでマクロの設定長を示す引数がないわけだ。

探してみてもこの辺でつまずく人はいないのか、記述が見あたらず。
また、ほとんどの場合このマクロ設定部分NULLにしちゃうし、使う状況ってないのかなぁ。

自分では多用していこうと思っていますが。


DirectX吸収レイヤー


現在、次の作品へ向けて作業中。リフレクションの部分をとりあえず切り上げて、次はDirectXの吸収レイヤーを作成開始。

とりあえず、デバイスロスト自動復帰とデバッグレイヤー相当品を入れるべく作成中。DirectX10なら普通にデバッグレイヤーあるらしいけど、DirectX9には使い勝手のよいものがないし。
きっと、このレイヤー取り替えるだけで DirectX9, 10, 11 と対応アプリ切り替えられそうな予感。
そろそろDX10いっておかないと、次DirectX11のときに泣きを見そう?!

 

ドラマ感想

漫画喫茶都市伝説 呪いのマンナさん をみた。
うーん、最後まで微妙だった。謎が全て明かされていないし、中途半端。
これは出演者を鑑賞するためのドラマでしょうか。

絶対彼氏

ようやく今年1月のやつの2つめ。もう夏も越したのに、こんな感じです。今のところ、割とおもしろい。

 


コミケいってきた


とりあえず、HeartyBreakers完売。公式Web見つからないと話があったので、こちらから貼ってみることにします。

http://codingcafe.hp.infoseek.co.jp/index.html

 

ずっと座っていただけで、ノートPCもってムービー流していただけ。たったそれだけのために今日、がんばった。そして、周りの人々はなぜかドタキャンっぽく・・・。それみて、あぁこれはいけない、と実感。こうなってはダメですね。

Googleで検索したら、CodingCafe のページ(移転後)のが引っかかる。一応、作品からは検索可能なようだ。今丼さんもきっとこれで安心してくれるに違いない。

 


BDドライブかった


とうとう念願の記録型BDドライブを購入&取り付けました。
初焼きをしてみましたけど、10Gオーバーでもディスクの半分くらいまでしか色が変わらなかったので、まだまだ余裕を実感させてくれます。25Gのメディアでも余裕を感じるし、50Gならなおいっそう。今後もしばらくは安心できそうです。

しかし、焼きにはそこそこ時間がかかりました。2xだったのとベリファイ入れたのがダメだったのか。約1時間ほど取られてしまった。次は、25GBの6xで出来るモノならチャレンジしたいところです。

 


動かないコード


最近は動かないコードばかり書いてます。コンパイルを通してニヤリ、として終了です。
コンパイル時にすでに判定や計算が終わっている、とか、プリプロセッサ終了時に状態確定とか、そんなことばっかりやってました。

ふと、覗いてみるとどうやらBoostのPreprocessorが分野的に近い。そして、templateで色々とごちゃごちゃやったことは、メタプログラミング、という分野にいるっぽいことがわかりました。

こうやってできたコード、少なくとも人に読ませられるコードじゃないなぁと実感してます。数ヶ月後の自分でも怪しい・・・。

 


昨日の答え。


意外にも日を変えて再度悩んでみると思いつくものである。
とりあえず下記コードでやりたいことはできた。
しかし、T,Sなど1文字の型引数にしておくと、次みたときに相当わからないなぁ…

しかしこのコード、少なくとも今年一番イケてると自負してます

 


(no title)


メンバ変数で配列で…

メンバ変数のポインタを利用して、型情報取得できないか色々と思案中。メンバ変数のポインタ型をテンプレートの型として受け取るまではいけるものの、その型からさらに固定配列だった場合には長さを知りたい。

うーん、できるんだろうか…。

[code lang=”cpp”]
class A {
int a[100];
int b;
};
[/code]

このようなクラスがあって、 &A::a, &A::b という状態からその型と配列情報がテンプレートで展開できれば、目的のことが達成できるのに…。しばし悩んでみます。

 


OS再インストール中


いろいろとやることがあって大変な時期に、OSから再インストール中・・・。
もちろん、Vista x64版で。しかしながら色々とトラブルに見舞われ。

トラブルの点を列挙すると

  • MSDNのOSアクティベーションが上限超えた…。
  • DaemonToolsがインストールでこける

前者はもうしょうがないので、放置。そして、DaemonToolsの件はどうやらウィルスバスター2008のせい。
リアルタイムの検索を切ってみたら、それだけでインストールは成功しました。きっとほかの誰かも同じようにできなくなっているのじゃないかと思います。

MSDNのアクティベーションが上限超えたのはどうしようか。次の更新時期で更新せず、新規で契約しちゃおうかと考え中です。


XBOX360のゲームパッド


入力管理モジュール

Vista x64環境であっても XBOX360のゲームパッド非公式ドライバが存在していたので早速導入。 しかし、x64なので非公式ドライバは署名がない…。そのため起動時には、F8を押して、「ドライバ署名の強制を無効にする」を選択しなくてはならない。とりあえずそれで動作をチェックしてみたところ、やはりちゃんと動きました。

Vistaでの公式ドライバ名

XBOX 360 For Windows(Controller)

Vistaでの非公式ドライバ名

Microsoft Xbox360 Controller

だそうです。これの違いを見て自前で処理を振り分けとかしないとダメかも知れませんね。

 


smbclient


WindowsPCのほうにデータをコピー(バックアップ)したくて、久々にLinuxからWindowsの共有をマウントする、ということをしてみました。

そこで驚いたのが、いつの間にかコマンドやオプションが無くなっていること。
mount -t smbfsではそんなタイプ知らないといわれるし、 smbmountコマンドやろうとしたらそれも無いと言われる。

一方、smbclientは入っていたりするので謎でした。
結果は最近のものは、mount -t cifsとしてマウントさせるとのこと。
さらにこの状態では日本語フォルダをコピーしたり出来ないので、適切にオプションを設定してやることが必要

 

これで何とか出来るようになりました。ちなみにWindowsはVista, LinuxはEUCで保存するようにしているのでこんな感じに。