「 2010年05月 」一覧

VisualStudio2010でのWinSxS

VisualStudio2010では、またサイドバイサイド(Side by Side:SxS)の状況が変わっていた。どうやら、WinSxSを使っていないようです!
C:WindowsWinSxs の中を見ても vc100用のランタイムは入っていませんでしたし、
VS2010インストールフォルダ内のdll群をチェックしてみても、
埋め込みマニフェストすら入っていませんでした。

さらには、2010で作成されるexeの中の埋め込みマニフェストをみてみても
ランタイムのバージョンに関するものは記載がありませんでした。

ちなみに、VS2005/2008では、世間で有名になっているとおり
サイドバイサイドが使用されており、ランタイムの単純コピーでは動作しないようになっていました(一般的には)。
ユーザーはマイクロソフトより再配布ランタイムのパッケージをダウンロードして、インストールする必要がありました。

今回の2010での変更は、従来のdll単純コピーで済ますことが出来るという点では手軽になったと思います。
しかし、懸念されるのは一昔前のDLL-HELLです。また同じ状況が起こる可能性があります。

所感

WinSxSがそうとう厄介問題だったのは知っていましたが、
新バージョンで取りやめるほどとは思いませんでした。

以前のランタイムもマイナーバージョン間では単なるリダイレクトになっていたし、
全て新バージョンのランタイムで置き換えてきた現実からこのような方法に変更になったのかもしれません。
「今までも全て新しいものに置き換えてきた。今後も大丈夫だろう。
VCではWinSxSを廃止して、dll直配置を認めた方がサポートも楽になる。」
というような思惑だったりするのかも、と思ってます。

昔のようなバージョン依存は現在となっては低そうということでしょうか。


インデックスバッファ

DirectX9では16bitインデックスバッファが主流だったように思います。しかし、DirectX10以降はインデックスバッファも32bitインデックスとなってしまったようです。
生成時に16bitであると設定するものが見あたらない…。

DirectX9から10以降まで1つのAPIセットで対応するライブラリ作ってますが、
このような違いってどうしたものやら。

  1. フォーマット指定を追加。使えない環境(DX10世代)ならエラーにする
  2. あくまでフォーマット指定はヒント。
    1. 書き込み時とかには生成された結果フラグをみてUSHORT, UINTでインデックスを書き込み

どちらの方法にしてもキレイにならない気がします…。

  • 過去日記に同じようにこの情報を書いていました。10環境では16bitインデックスがなくなった、と。

VS2010対応 – ゲームプログラマになる前に~のやつ –

「ゲームプログラマになる前に覚えておきたい技術」に付属しているソース類で、
VisualC++2010用に変換したプロジェクトおよびソースコードを用意してみました。手元の環境でデバッグ/リリース構成のビルドを確認しています。2011/02 新バージョンを公開しました。
こちらからどうぞ

プロジェクト変換について

  • ライブラリの全体最適化を無効化してあります。
  • ワーニングレベルを3に落としたものがいくつかあります。
  • 算術関連(sin,cos,tan,など)を名前空間付きに変更しました。

サンプルコードによっては、全体最適化適用による不具合のため、
exe用のプロジェクトでも無効化してあるものがあります。

なお、変換に用いたのはVisulStudio2010Professionalです。
ですが、expressエディションでも開くことは可能かと思われます。

注意事項

公開しているアーカイブの再配布を禁止します。
また、公開したアーカイブを使用したことによる損害については、
筆者および公開した私自身がその責務を負わないこととします。
利用する際には、自己責任でご利用下さい。

ダウンロード、および、使用方法

CDROM内にある、VisualStudio2008用のソースコードを展開した後、
srcフォルダでダウンロードしたファイルを上書きで展開してください。

2011/02 新バージョンを公開しました。
こちらからどうぞ

注意事項に同意のうえ、ダウンロードする

このファイル中にソースコードが一部含まれますが、
これについては著者の許可をもらって公開しております。

動作確認環境

  • Windows7 Ultimate x64環境
  • VisualStudio2010Professional
  • PentiumDualCore E6500
  • Geforce9800GT

この環境で、含まれるサンプルソースコードの実行等を確認しております。
少なくともこのプロジェクト類を用いて 64bit環境での動作を確認できております。


ミップマップについて

どうやらミップマップが使われるためには、
射影行列(透視変換行列)適用してからじゃないとダメな模様。行列適用しないで、通常の射影空間(0-1)に収まるように頂点を準備して、
テクスチャ貼り付けてみたけど、これではミップマップがポリゴンの面積に応じて使われることがなかった。

しかしその準備した頂点で作られるポリゴンの面積によっては、
ミップマップが使われたりしたが、頂点単位?でしか判定していないのか?

一方、透視変換行列適用してみると、
ピクセルごとにどのミップマップレベルを使用するかが判定されており、
画面に描画してみるとその使用状況がわかった。

根本的に何が原因だったのかはわからんなぁ…。


アルファブレンディングについて【教えてほしい】

アルファブレンドで下記の合成はわかった

  • 通常合成(1*srcColor + 0*destColor)
  • 加算合成(1*srcColor + 1*destColor)
  • 半加算合成(srcA * srcColor + 1*destColor)
  • 半透明合成(srcA * srcColor + (1-srcA) * destColor)

しかしこれらがアルファ値だけ別の計算が出来るという仕組みが用意されていたりする。
これの有効な利用が思いつかない。

OpenGLやDirectXではアルファブレンドセパレートとして機能があったりするが。

D3DRS_SEPARATEALPHABLENDENABLE を有効化して
なにかやっているサンプルもまた見つからなかったし。
有効に使えている例、使える例を知っている人は是非教えてください。


Windows7のエディション選択

Windows7のエディションでは上位エディションが
下位エディションの内容を包含するようになった。
Vistaの頃のHomeとBusinessでバラバラになった機能があったことを考えるとわかりやすくなったと思う。

Windows7 Home Premium

  • Media Centerを搭載。
  • XPModeが使用できない。
  • リモートデスクトップ接続先となることができない。
    • 逆にほかの端末へのリモートデスクトップ接続は可能。
    • 他からのアクセスを出来るように考えるならこのエディションは選ばない方が無難。
  • オフラインフォルダが使えない。
    • 2台のPCでデータを共有してオフライン時アクセスを可能にしてくれる機能。
    • 同期が取れているならデータが2台のPCに書き込まれることになっているわけで、バックアップとしても使えそう。
  • ネットワークバックアップ機能が使えない
    • ネットワークに接続されたHDDにバックアップファイルを書き込むことが出来ない。
    • Home Premiumではローカルに接続されたHDDにのみバックアップが可能

Windows7 Professional

  • WindowsServerへのドメイン参加が可能。
  • 他のPCからリモートデスクトップ接続を受け付けられる。
  • オフラインフォルダが使用可能。
  • ネットワークバックアップ機能が使用可能。
  • XPModeが使用できる。
  • セキュリティに関することが出来ない。
    • AppLocker,BitLocker
      • BitLockerはハードディスク暗号化、AppLockerはアプリケーションの実行を禁止する機能
  • DirectAccessが使えない。
  • 仮想HDDからの起動が出来ない。
    • VHDファイルから起動ができないということ。

Windows7 Enterprise

企業向けエディション。普通購入は出来ない。
これらの機能を個人で使用するためにはUltimateを購入する必要がある。

  • DirectAccessが使用可能
  • 仮想HDDから起動ができる。
  • セキュリティに関する機能(AppLocker,BitLocker)が使えるようになる。

Windows7 Ultimate

Enterpriseと同機能を備えている。
意外なことにProのエディションよりサポート期間が短い。

どれを選択すべきか

個人で使う環境を考えたときにどうエディションを選んでいくべきか考えてみました。

Home Premiumで良い

  • PCが1台のみ。
  • PCが複数台あるけど使うのはファイルやプリンタ共有程度。
  • ネットワークも単にWebをみたりメール使ったりするだけという状況。

これらの状況に当てはまるならHome Premiumでよいでしょう。

Professionalが良い

  • 複数のPCを使用していて、リモートデスクトップを便利に使いたい場合
  • Windowsドメインを使いたい環境の場合
  • バックアップ機能を有意義に使いたい場合
  • XPModeを使いたい

これらの条件で満足出来る人はProfessionalを選ぶべきかも。

Ultimateが良い

  • 全ての機能を使いたい人向け
  • BitLocker/AppLockerなどセキュリティを向上させたい場合
  • DirectAccessを使用したい場合。
    • たとえば出先から自宅PCにアクセスする場合には有効でしょう。
  • 仮想HDDを有効に活用していきたい人向け
    • 環境ごとに起動するHDDファイルを切り替えて動かせるというメリットがあります。

上記の条件に当てはまるならUltimateがよいでしょう。

Home Premium vs Professional

リモートデスクトップの機能と、XPModeを使用するか否かが選択基準になりそうです。

Windows7をインストールしたPCは唯一でそれがメインPCとなる場合、
他からアクセスすることはなく、むしろ他のPCへのリモートデスクトップが出来ればよい、という状況ならHome Premiumで良さそうです。
もしも2台目以降でのWindows7が必要になったらそのときにはProfessionalを選択すればいいでしょうし。

Professional vs Ultimate

セキュリティ関連機能を使いたい場合はUltimateでしょう。
Ultimateでは仮想HDDファイルから起動できるため、環境を切り替えて使うことが可能です。
外からノートPC等で自宅PCに安全に手軽にアクセスしたいという要求があるなら、Ultimateでしょう。

感想

万人にお勧めできるのがUltimateとは言い切れないのが判明。
ほとんどの人はHomePremiumかProで十分そうです。
またライトユーザーならほぼHome Premiumで良さそうです。
Professionalの魅力と思われるドメイン参加とXPMode、リモートデスクトップがありますが
ドメイン参加機能以外は別のソフトで代替が可能でしょう。

  • XPMode代替としてはVMPlayerかVirtualBoxとか。
    • 別途XPのライセンスが必要にはなりますが、持っている人も多いでしょうし。
  • リモートデスクトップもいろいろなソフトで代替が利きます

また、割高にはなりますが、とりあえず導入ならHomePremiumを選んでおいて、
必要な機能が出てきたときにProfessionalを選択するという手段もとれそうです。

自分が今使っている環境はUltimateですが、
使用状況を考えるとProfessionalでも十分みたいでした。

おまけ

DSP版では32bit/64bitを購入時に選択購入になるけど、
パッケージでの購入ならば32bit/64bit両方とも含まれているようです。
再インストールという形にはなりますが、それぞれを試してみるという使い方もできるようです。
(ただしライセンス違反には注意。同時に使えるのは片方のみ)


テクスチャアドレッシングモード

テクスチャアドレッシングモード

テクスチャを張ったときに、1.0以上の値をどう扱って、
テクスチャを張るかのモード設定です。

出来ることの代表的なものとして、

  • 繰り返し貼る(リピート)
  • 反転しながら貼る(ミラー)
  • 繰り返さずに残った部分は引き延ばし

というのがあります。

OpenGL vs DirectX

で今回感じたのが、OpenGLとDirectXでこれらの機能の差違。
同じ挙動をする設定でも、画面の描画結果が違うということになりました。
もっとも大まかな挙動という点では一緒で、
今回の違いというのは、描画ピクセルが完全一致しないということを示しています。

どうも境界あたりの処理でそれぞれ差違が出ていました。
GL_CLAMP_TO_EDGEやGL_CLAMP_TO_BORDERなど標準機能ではなく
拡張機能で試したのですがうまくいきませんでした。

どうでもいいこと

テクスチャラッピングモードというとまた別のことを指すようです。
少しわかりにくい気がするのは自分だけでしょうか…