121 lines
4.1 KiB
C++
121 lines
4.1 KiB
C++
//========= 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
|