レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
技術情報交換スレ
-
>>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);
してますた。これだとガクブルしない、と
掲示板管理者へ連絡
無料レンタル掲示板