Я пытаюсь добиться эффекта, подобного программе Fraps, которая накладывается поверх игры, и для этого я перехватываю функцию IDirect3DDevice9::EndScene
и выполняю рендеринг перед вызовом исходной функции. Однако, когда я рендерим вещи, они портят эффекты, которые уже нарисованы в игре, и не рисуют себя правильно. Мой крючок просто выглядит как
HRESULT __stdcall endscene_hook(IDirect3DDevice9* id3d_device) {
if (pGameOverlay) {
pGameOverlay->Render();
}
return endscene_orig(dev);
}
, где pGameOverlay
- это просто указатель на класс, чей метод Render
просто рисует некоторые вещи на устройстве, с которым он был настроен ранее (не показан). Есть ли что-то еще, что я должен делать?
Я где-то читал, что Fraps на самом деле перехватывает метод Present
вместо EndScene
. Это правильно, и если да, то почему? И вы не можете иметь только одну BeginScene
/ EndScene
пару между вызовами на Present
?