皆さんこんにちは。最近、初めてのファンメールをもらいました。
『おめ~のソースはうごかねぇんだよ!!』
という、心温かいお便りです1。
私は GeForce3 しかもっていなかったので
(正確には、GeForce2MX を持っているのですが、部屋の中から発掘できません)、分からなかったのですが、
GeForce1/2 では、ハードウェア Vertex Shader のバージョン1.0 をサポートしていないので、
ソースを実行できないとのことです。
本当は、DirectX がやるべきだと思うのですが、そうもいってられません。
教えてもらった情報を元に、プログラムを修正します。
ということで、今回は、いわゆる機種依存性のお話です。
1:彼の名誉のためにことわっておきますが、
本当は、とても暖かな応援のメールをいただきました。
ここでは、とても、おおげさに脚色しています。
今後、とても汚い言葉を発するかも知れませんが、そんなキャラだと思って暖かく見守ってください。
なお、不愉快な思いをされた方はメールをお願いします。
納得の上、誠意を持って対処させていただきます。
2001 年 7月 25 日以前にソースをダウンロードした人にしか分からないのですが、 次のファイルをアップデートしました。
違いは、main.cpp です。
全てのソースに関して同じファイルを使っています。
その中の、CreateDevice の周辺を修正しました。
D3DCAPS8 caps; pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps); if(caps.VertexShaderVersion < D3DVS_VERSION(1,0)){ //vertex shader 1.0 をhwサポートしない場合はD3DCREATE_SOFTWARE_VERTEXPROCESSINGする必要があります if(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&s_d3dpp,&s_lpD3DDEV))){ if(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE,&s_d3dpp,&s_lpD3DDEV))){ return FALSE; } } }else{ // デバイスの作成 - T&L HAL if (FAILED(s_lpD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&s_d3dpp,&s_lpD3DDEV))){ // 失敗したので HAL で試行 if (FAILED(s_lpD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&s_d3dpp,&s_lpD3DDEV))){ // 失敗したので REF で試行 if (FAILED(s_lpD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&s_d3dpp,&s_lpD3DDEV))){ // 結局失敗した MessageBox(NULL,"Direct3D の初期化に失敗しました。",CAPTION,MB_OK | MB_ICONSTOP); return E_FAIL; } } } }
追加した場所は、いつもの様に、色を変えています。
まず、GetDeviceCaps を使って、環境を調べます。
次に、ここで使っている vertex shader 1.0 がサポートされていなかった場合には、D3DCREATE_HARDWARE_VERTEXPROCESSING を使わないようにします。
これで、サポートしていないときには、ソフトウェアT&Lが働くので、今まで動かなかった環境でも動くと思います。
機種依存性は、PCではとても大事なことです。
DirectX8 になって簡単になったとはいっても、
全員の環境が異なるので、どうしても複雑になりがちです。
これからもこの手の話題は発生するかとは思いますが、
このページでは、できるだけ複雑にならないように、対応していきたいと思います。
こんなのは、やりたくないんじゃ~~~~
こんなのをユーザーが考えないようにMSは頑張れや~~~~(ほかもな)
今回は、山口様からのメールが元になっています。
至らない点をご指摘いただいて、ありがとうございました。