2007年09月02日

PTM-UBTSETについてアレコレ

main_photo1.jpg
メーカーHPへ

Skypeを使って知り合いなどと電話することが多く、結構夜遅くまで話すこともしばし。
寝転がりながら話をする場合に、有線のヘッドセットでは、結構コードが邪魔になる。
そこでBluetoothによる無線のヘッドセットを、秋葉原に行ったときに買ってきた。
値段は4980円。この値段の内訳は、Bluetoothアダプタが高いのではなく、どうもヘッドセットの本体のようだ。
メーカーを問わないならBluetoothのアダプタ自体は1000円程度で手に入る。

使ってみて思ったことがいくつか。
●とりあえず無線なので非常に快適
●そこそこ遠くまで電波が届く。自宅は2DKの軽量鉄骨造り。
寝室にパソコンを置き、台所へお茶をとりに行く程度なら問題なし。
●無線LANとの電波干渉あり。
ノートPCではPCカードタイプの無線LANアダプタを使っているが、直ぐ近くの
USBポートにBluetoothアダプタを挿して使ったところ、激しくノイズがのった。
●ヘッドセット側を充電する必要があるのが不便。
連続通話時間は2時間らしいので、通話中に充電が切れることがしばし。

んで話し相手に、無線のヘッドセットにしてからノイズ音が酷くなったといわれたのがちょっとショック。
・・まぁどうやら有線のほうが聞く側に優しそう。ノートPC小道具としてしまっておくか。

DirectX 9: デバイスがロストした時の復旧方法

DirectX 9にで、フルスクリーンからウィンドウへ戻ったときや、非アクティブ状態から復帰した場合に、デバイスの再構築が必要となる。

DirectX 8にて解説を行っているサイトでは、単純にReset()を呼べば良いと書かれているが、どうも上手くいかないので色々調べてみたところ、どうやら「ロストしたデバイスをリセットできない状態」というタイミングが存在するらしく、適切な関数でリセットできる状態かどうかを調べる必要があるらしい。以下にその手順を示す

if(DeviceLost){
  if(FAILED(hr = pDevice->TestCooperativeLevel())){
    if(hr == D3DERR_DEVICENOTRESET){
      //デバイスのリセットを行う処理を書く。具体的には
      //pDevice->Reset(&d3dpp)
      //を呼び出してリセットを行うが、当然d3dppはDirect3Dを
      //初期化するときに記述した形でもう一度記述を行う。
    }
  }else{
    DeviceLost  = false;
  }
}else{
  if(FAILED(pDevice->Present( NULL, NULL, NULL, NULL ))){
    DeviceLost  = true;
  }
}

まず、ロストするとPresent()が失敗するので、それをチェックする。次にTestCooperativeLevel()でデバイスをリセットできるかどうか確認を行う。もしTestCooperativeLevel()の戻り値がD3DERR_DEVICENOTRESETであれば、ロストしたデバイスの復旧が可能となり、Reset()が可能となる。