2011-01-19 3 views
1

나는 Fraps와 같은 효과를 얻으 려합니다. Fraps는 게임 위에 오버레이가되어, 원래 함수를 호출하기 전에 IDirect3DDevice9::EndScene 함수와 렌더링 물건을 연결합니다. 그러나 물건을 렌더링하면 게임이 이미 그린 효과를 망칠 수 있으며 올바르게 그려지지 않습니다. 내 후크는Direct3D hook overlay

pGameOverlay 누구 Render 방법 그냥 이전에 설정 한 장치에 몇 가지 물건을 그립니다 클래스에 단지 포인터입니다 wherer
HRESULT __stdcall endscene_hook(IDirect3DDevice9* id3d_device) { 
    if (pGameOverlay) { 
     pGameOverlay->Render(); 
    } 

    return endscene_orig(dev); 
} 

처럼 (도시하지 않음)에 보인다. 내가해야 할 일이 있니?

나는 Fraps가 EndScene 대신 Present 메서드를 실제로 후킹한다고 읽었습니다. 이것이 맞습니까? 그렇다면 왜입니까? 그리고 Present을 호출하는 사이에 BeginScene/EndScene 쌍을 하나만 가질 수 있습니까?

+0

후크 그 자체가 혼란을 야기하지 않는지를 기본적으로 확인하는 것처럼 : pGameOverlay-> Render()를 생략하면 모든 것이 정상적으로 보입니까? – Suma

+0

@Suma 그래, 내 물건을 렌더링하지 않으면 모든 것이 정상적으로 렌더링됩니다. –

답변

4

각 Present마다 여러 개의 BeginScene/EndScene을 가질 수 있습니다. 실제로는 매우 일반적인 관행입니다. 일반적으로 BeginScene/EndScene 쌍이 각 개별 렌더링 타겟에 사용됩니다. 추가 렌더 타겟의 한 예는 미러 일 수도 있지만, 섀도우 버퍼와 같은 여러 렌더 타겟, 또는 포스트 프로세스 효과를위한 전용 깊이 타겟과 같은 다른 많은 용도가 있습니다.

후킹 현재는 사용자에게 수행 된 모든 작업을 실제로 "표시"(표시)하기 때문에 훨씬 안전합니다. 따라서 매우 명확한 정의에서 프레임 당 하나의 현재가 있습니다. 이것은 프레임을 정의한다).

+0

고마워, 그게 내가 알아야 할거야. –