FLYING

/* TODO: 気の利いた説明を書く */

OpenGLを扱うプログラムがThinkPad X61で動かない

OpenGLを扱うプログラムを書いて,ThinkPad X61GPU:GMA X3100,OS:Windows7 64bit)で実行してみたところ,何度やっても3Dのキャンバス部分が描画されない*1。ところが,プログラム記述に間違いはない……ということでここ数日悩んでいて,ドライバの問題だと気付いたのが一昨日の話。で,マニュアル通りにIntel 965 ExpressチップセットVGAドライバ(最新版)を入れても直らず,Windows標準のドライバ(名前に「WDDM 1.1」って付いている奴)に戻したら動いた!というのが昨日の話。ただこれだと,OpenGL 1.1までのAPIしか使えない*2ので,なんだかなあということで試行錯誤してみた。

最終的には,Intel 4シリーズのVGAドライバに少し手を入れてインストールしたら上手く行った。手順を以下に詳しく記す。

注意

違うVGAのドライバをインストールすることになる上,ドライバの設定ファイルを書き換える必要があるので,当然ながら自己責任で試してね。

Intelから最新のドライバをDLする

IntelのサイトからIntel 4シリーズの最新VGAドライバをDLする*3。今回DLしたドライバのバージョンは15.17.18.64.2555で,ファイル名はWin7Vista_64_151718.zip。ファイル名からも分かる通り,Windows Vista及びWindows 7の64bit版に対応したドライバになっている。

ドライバに含まれるinfファイルを編集する

DLしたドライバのアーカイブを展開し,Graphicsディレクトリの中にあるigdlh64infというファイルを編集する。このファイルはplain textなので,適当なテキストエディタで編集できる。編集するのは55行目付近のDriver informationのセクション。

[IntelGfx.NTamd64.6.0]
%iCNTG0% = iCNT0, PCI\VEN_8086&DEV_2A42
%iCNTG1% = iCNT1, PCI\VEN_8086&DEV_2A43
%iEGLG0% = iEGL0, PCI\VEN_8086&DEV_2E02
%iEGLG1% = iEGL1, PCI\VEN_8086&DEV_2E03

上記のような箇所があるので,これを下記のように書き換えて保存する。

[IntelGfx.NTamd64.6.0]
%iCNTG0% = iCNT0, PCI\VEN_8086&DEV_2A02
%iCNTG1% = iCNT1, PCI\VEN_8086&DEV_2A03
%iEGLG0% = iEGL0, PCI\VEN_8086&DEV_2A12
%iEGLG1% = iEGL1, PCI\VEN_8086&DEV_2A13

デバイスマネージャからドライバをインストールする

デバイスマネージャを開き,ディスプレイアダプターの項目を右クリックして「ドライバソフトウェアの更新」を選ぶ。コンピュータを参照→一覧から選択→ディスク使用と進んで,先ほど編集したinfファイルを選ぶ。「互換性のあるハードウェアを表示」のチェックを外して,「Mobile Intel 4 Series Express Chipset Family」を選ぶ。

インストールを進めると何回か怖い色*4で警告されるが,いずれも無視して先に進む。ファイルの編集に失敗していないければ,問題なくインストールが終了するはず。

インストール終了後に再起動すると(成功していれば)OpenGLを扱うプログラムが動作するようになっているはず。試しに,GL_VERSION*5を文字列として出力するプログラムを書いて実行してみると,「2.1.0 - Build 8.15.10.2555」という出力を得た。めでたしめでたし。

結論

新しいマシンを導入した方が早い。

追記(2012-02-24T10:00)

紹介した構成だとWindows Media Playerとドライバ付属の設定画面がうまく動かない様子……

*1:シングルディスプレイ環境だと全く動かず,デュアルディスプレイ環境だと片方のディスプレイでだけ描画されるという謎挙動に遭遇した

*2:X3100はカタログスペックとしてはOpenGL 2.0をサポートしている

*3:本来ならば965 ExpressチップセットVGAドライバを入手するところだが,敢えて後発チップセットのドライバを使う

*4:黄色でデジタル署名が無いぞと言われたり,赤色で互換性があるかどうかわからないぞと言われたりする

*5:そのシステムがサポートするOpenGLのバージョンを示す