//========= Copyright Valve Corporation, All rights reserved. ============// // //=======================================================================================// #ifndef REPLAYRENDERER_H #define REPLAYRENDERER_H #ifdef _WIN32 #pragma once #endif //----------------------------------------------------------------------------- #include "fmtstr.h" #include "movieobjects/timeutils.h" #include "replay/ireplaymovierenderer.h" #include "replay/rendermovieparams.h" //----------------------------------------------------------------------------- class CReplay; class CReplayPerformance; class IQuickTimeMovieMaker; class CReplayRenderOverlay; class IVideoRecorder; //----------------------------------------------------------------------------- class CReplayRenderer : public IReplayMovieRenderer { public: CReplayRenderer(CReplayRenderOverlay *pOverlay); ~CReplayRenderer(); const CReplayPerformance *GetPerformance() const; const char *GetMovieFilename() const; static int GetNumMotionBlurTimeSteps(int nQuality); // // IReplayMovieRenderer interface // virtual bool SetupRenderer(RenderMovieParams_t ¶ms, IReplayMovie *pMovie); virtual void ShutdownRenderer(); virtual void RenderVideo(); virtual void RenderAudio(unsigned char *pBuffer, int nSize, int nNumSamples); virtual void SetAudioSyncFrame(bool isSync = false); virtual bool IsAudioSyncFrame(); virtual float GetRecordingFrameDuration(); private: bool IsDepthOfFieldEnabled() const; bool IsAntialiasingEnabled() const; bool IsHDR() const; bool IsMotionBlurEnabled() const; int GetMotionBlurQuality() const; int GetDepthOfFieldQuality() const; int NumMotionBlurTimeSteps() const; float GetFramerate() const; void ComputeSampleCounts(int *pNSamplesPerTimeStep, int *pNTotalSamples) const; float GetViewModelFOVOffset(); void SetupDOFMatrixSkewView(const Vector &pos, const QAngle &angles, int nSample, CViewSetup &viewSetup); void BeginRenderingSample(int nSample, int x, int y, int nWidth, int nHeight, float fTonemapScale); void EndRendering(); void SetupSampleView(int x, int y, int w, int h, int nSample, CViewSetup &viewSetup); void InitBuffers(const RenderMovieParams_t ¶ms); void DrawResolvingQuad(int nWidth, int nHeight); float GetRenderLength(const CReplay *pReplay); void CompositeAndLayoffFrame(int nFrame); void RenderLayoffFrame(DmeTime_t time, int nCurSample, int nNumTotalSamples); void ResolveSamples(int nSample, DmeTime_t frametime, int x, int y, int nWidth, int nHeight, bool bShowUser, float flBloomScale); void LayoffFrame(int nFrame); double GetShutterSpeed() const; void ClearToBlack(CTextureReference &buf, int x, int y, int nWidth, int nHeight); bool SetupJitterTable(); void GetViewSetup(CViewSetup &viewsetup); bool m_bIsAudioSyncFrame; const Vector2D *m_pJitterTable; int m_nNumJitterSamples; IVideoRecorder *m_pMovieMaker; bool m_bCacheFullSceneState; BGRA8888_t *m_pLayoffBuf; IReplayMovie *m_pMovie; RenderMovieParams_t m_RenderParams; CTextureReference m_AccumBuffSample; CTextureReference m_LayoffResult; CTextureReference m_AccumBuffPingPong[2]; // Buffers and materials for // ping-pong accumulation buffer CMaterialReference m_FourSampleResolveMatRef; bool m_bForceCheapDoF; bool m_bShutterClosed; int m_nCurrentPingPong; int m_nFrame; ConVar *m_pViewmodelFov; ConVar *m_pDefaultFov; int m_nTimeStep; int m_nCurSample; DmeTime_t m_curSampleTime; int m_iTgaFrame; CFmtStr m_fmtTgaRenderDirName; CReplayRenderOverlay *m_pRenderOverlay; }; //----------------------------------------------------------------------------- #endif // REPLAYRENDERER_H