したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

技術情報交換スレ

4Mystle </b><font color=#FF0000>(M.B.S.4s)</font><b>:2004/06/16(水) 23:55
>>3
21g/h ではこんなふうに書いてたわけですが

// フックした Direct3DDevice->EndScene() 関数
HRESULT WINAPI Nisemono_EndScene(LPDIRECT3DDEVICE7 *lpD3DDevice)
{
  HRESULT hRes1, hRes2;
  hDC hDC;
  
  /*
  // 色々と3Dなお絵かき
  lpD3DDevice->SetRenderState();
  lpD3DDevice->SetTexture();
  lpD3DDevice->DrawPrimitive();
  */
  
  // 本物を呼び出し (ここで3D命令がグラボに飛ぶの?)
  hRes1 = Honmono_EndScene(lpD3DDevice);
  
  // プライマリサーフェス (LPDIRECTDRAWSURFACE7 lpPrimarySurface) は
  // 別箇所 (CreateSurface()のフック関数) で取得・保持しています
  if (lpPrimarySurface)
  {
    hRes2 = lpPrimarySurface->lpVtbl->GetDC(lpPrimarySurface, &hDC);
    
    if (hRes2 == S_OK)
    {
      /*
      // 色々と2Dなお絵かき
      TextOut();
      Ellipse();
      */
      
      lpPrimarySurface->lpVtbl->ReleaseDC(lpPrimarySurface, hDC);
    }
  }
  return hRes1;
}

*lpD3DDevice自体はプライマリサーフェイスから生成されてますから、Honmono_Endscene() を
呼ぶ前に2D描画を試みてもGetDC()自体が成功しません。でこんな順序に。
でもこれだとガクブルするということで

21fでは if (lpPrimarySurface) { ... } のブロックがそっくり 偽Blt() の中にありまして、
Nisemono_EndScene() はRTXの3D描画を終えた後すみやかに
  return Honmono_EndScene(lpD3DDevice);
してますた。これだとガクブルしない、と




掲示板管理者へ連絡 無料レンタル掲示板