#pragma once

// Reconstructed C++ declarations from IDA Local Types and PDB/DIA metadata.
// Original PDB header: w:\tech5\engine\renderer\rendersystem_local.h
// Recovered logical types: 1
// Signatures retain Xbox 360 ABI evidence and may still require manual review.


// IDA Local Type ordinal 19102; PDB kind: class.
class __declspec(align(8)) idRenderSystemLocal : public idRenderSystem
{
public:
  // Recovered virtual interface; IDA vtable ordinal 19104.
  virtual ~idRenderSystemLocal();
  virtual void Init();
  virtual void Init2();
  virtual void Shutdown();
  virtual idRenderWorld *AllocRenderWorld(const char *, bool);
  virtual void RenderFrame(void *const, const idRenderFrameInfo *, const bool, const bool, const bool);
  virtual void EndFrame(void *, int, int, idRenderWorld *, idRenderModel **, int, bool, bool, bool, int);
  virtual void ToolEndFrame(void *, int, int, idRenderWorld *, const renderView_t *, idRenderModel *, int);
  virtual int FrameNumber();
  virtual bool SyncRenderThread(bool);
  virtual void BeginBinkVideo(void *, const char *const, const videoFlags_t, idRenderVideoOverlay *);
  virtual bool BinkVideoIsLoaded();
  virtual bool BinkVideoIsPlaying();
  virtual void FreeBinkVideo();
  virtual void AllowBackgroundSwaps(bool);
  virtual void BeginAutomaticBackgroundSwaps(void *, bool);
  virtual void EndAutomaticBackgroundSwaps();
  virtual void SetLoadingIconInfo(float, float, float, float);
  virtual void RegenerateReferences();
  virtual void InhibitEndFrameRendering(int);
  virtual bool IsEndFrameRenderingInhibited();
  virtual int GetNumRenderWorlds();
  virtual idRenderWorld *RenderWorldForIndex(int);
  virtual int GetNextRenderView(idRenderWorld *const);
  virtual int GetNumMonitors();
  virtual void GetMonitorSize(int, int *, int *);
  virtual int GetCurrentMonitor();
  virtual bool GPUTranscodeAvailable();
  virtual void EnableGPUTranscode(bool);
  virtual bool GPUTranscodeIsEnabled();
  virtual bool SwapTearAvailable();
  virtual void ClearOutOfMemory();
  virtual bool CheckOutOfMemory();
  virtual void *GetGameWindow();
  virtual void Restart();
  virtual void SwapBuffers(void *, bool);
  virtual void SetBlackLevel(const float);
  virtual void SetGamma(unsigned __int16 *, unsigned __int16 *, unsigned __int16 *);
  virtual bool MakeCurrent(void *);
  virtual int GetWidth();
  virtual int GetHeight();
  virtual float GetPixelAspect();
  virtual float GetScreenAspect();
  virtual int GetScanoutWidth();
  virtual int GetScanoutHeight();
  virtual stereoRenderMode_t GetStereoRenderMode();
  virtual int GetNumMultisamples();
  virtual int GetMaxSupportedMultisamples();
  virtual bool IgnoreSizeMessages();
  virtual void WindowSizeDragged(int, int);
  virtual bool WindowChangeMultisamples(const int);
  virtual bool EnumerateModes(int, int *, int *, int *);
  virtual void (__fastcall *ExtensionPointer(const char *))();
  virtual void SetPixelFormat(void *);
  virtual void ShowGameWindow();
  virtual void HideGameWindow();
  virtual bool IsFullscreen();
  virtual void GoWindowed();
  virtual void GoFullScreen();
  virtual void SetStudioMode(bool);
  virtual void InitContext();

  bool insideEndFrame;
  bool automaticBackgroundSwapsEnabled;
  bool renderLoadingIcon;
  bool renderingIsReadyForSwapbuffers;
  bool allowBackgroundSwaps;
  volatile bool renderSynced;
  int frameCount;
  int inhibitRendering;
  float loadingIconPosX;
  float loadingIconPosY;
  float loadingIconScale;
  float loadingIconSpeed;
  idRenderWorldLocal *worlds;
  idRenderWorldLocal *primaryWorld;
  idRenderWorldLocal *performanceCounterLogWorld;
  int performanceCounterLogWorldFrame;
  idRenderWorldLocal *testWorld;
  idImage *testImage;
  idImage *testCubeImage;
  const idMaterial *testMaterial;
  performanceCounters_t pc;
  idRenderVideoOverlay *videoOverlay;
  const idMaterial *mtrDefault;
  const idMaterial *mtrDefaultPointLight;
  const idMaterial *mtrDefaultProjectedLight;
  const idMaterial *mtrDefaultParallelLight;
  const idMaterial *mtrDefaultPointBlendLight;
  const idMaterial *mtrDefaultProjectedBlendLight;
  const idMaterial *mtrDefaultParallelBlendLight;
  const idDeclRenderProg *progGauss;
  const idDeclRenderProg *progGlareScale;
  const idDeclRenderProg *progOverlappedDownSample;
  const idDeclRenderProg *progFeedbackDownSample;
  const idDeclRenderProg *progBloomThreshold;
  const idDeclRenderProg *progLuminosity;
  const idDeclRenderProg *progAdaptiveGlareGauss;
  const idDeclRenderProg *progPostProcess;
  const idDeclRenderProg *progDepthOnly;
  const idDeclRenderProg *progColorOnly;
  const idDeclRenderProg *progColorParmOnly;
  const idDeclRenderProg *progWireFrame;
  const idDeclRenderProg *progTextureOnly;
  const idDeclRenderProg *progCubeImageOnly;
  const idDeclRenderProg *progTestImage;
  const idDeclRenderProg *progTestImageShadow;
  const idDeclRenderProg *progTestImageMultisample;
  const idDeclRenderProg *progBasicBlend;
  const idDeclRenderProg *progEnvironmentBlend;
  const idDeclRenderProg *progOccluderDepthOnly;
  const idDeclRenderProg *progOccluderUnique;
  const idDeclRenderProg *progLandUniqueBump;
  const idDeclRenderProg *progLandUniqueDiffuseOnly;
  const idDeclRenderProg *progBlendedLightDebugDraw;
  const idDeclRenderProg *progDeferredPointLight;
  const idDeclRenderProg *progDeferredSpotLight;
  const idDeclRenderProg *progDeferredParallelLight;
  const idDeclRenderProg *progVarianceShadowMap;
  const idDeclRenderProg *progGlobalFog;
  const idDeclRenderProg *progCreateGodRayMask;
  const idDeclRenderProg *progDrawGodRay;
  const idDeclRenderParm *rpGlareMap;
  const idDeclRenderParm *rpGlareStep;
  const idDeclRenderParm *rpDistortionMap;
  const idDeclRenderParm *rpGrainMap;
  const idDeclRenderParm *rpDynamicEnvMap;
  const idDeclRenderParm *rpPowerMip;
  const idDeclRenderParm *rpFrameNumber;
  const idDeclRenderParm *rpVirtualTextureFeedbackFloat;
  const idDeclRenderParm *rpPageTableMap;
  const idDeclRenderParm *rpVmtrPageTableMap;
  const idDeclRenderParm *rpDepthOfField2;
  const idDeclRenderParm *rpGodRayQuadScaleBias;
  const idDeclRenderParm *rpGodRaySourceScaleBias;
  const idDeclRenderParm *rpGodRaysColor;
  const idDeclRenderParm *rpAdaptiveGlareMap;
  const idDeclRenderParm *rpAdaptiveGlareMapAlt;
  const idDeclRenderParm *rpLuminosityMap;
  const idDeclRenderParm *rpLuminosityMapAlt;
  const idDeclRenderParm *rpAdaptiveLuminance;
  const idDeclRenderParm *rpAdaptiveGlareBlurMap;
  const idDeclRenderParm *rpAdaptiveGlareBlurStep;
  const idDeclRenderParm *rpAdaptiveGlareParms;
  const idDeclTable *declHighlightTable;
  const idDeclTable *declHighlightExplodeTable;
  const idStaticModel *defaultCubeModel;
  const idStaticModel *unitCubeModel;
  const idStaticModel *zeroOneCubeModel;
  const idStaticModel *extrudeBoxModel;
  const idStaticModel *unitSquareModel;
  const idStaticModel *zeroOneSquareModel;
  idTriangles *unitSquareTris;
  idTriangles *unitSquareGuiTris;
  idImage *imgViewColor[2];
  idImage *imgViewDepth;
  idImage *imgColorGradingLUT[2];
  idImage *imgDistortion[2];
  idImage *imgScreenMip3;
  idImage *imgScreenMip3Alt;
  idImage *imgGui;
  idImage *imgDynamicEnvironment[2];
  idImage *imgGrain;
  idImage *imgLuminosity;
  idImage *imgLuminosityAlt;
  idRenderDestination *renderDestViewColor[2];
  idRenderDestination *renderDestViewDepth;
  idRenderDestination *renderDestMip1;
  idRenderDestination *renderDestMip3;
  idRenderDestination *renderDestMip3Alt;
  idRenderDestination *renderDestDistortion[2];
  idRenderDestination *renderDestGui;
  idRenderDestination *renderDestDynamicEnv[2];
  idRenderDestination *renderDestDimShadow;
  idRenderDestination *renderDestLuminosity;
  idRenderDestination *renderDestLuminosityAlt;
  int windowWidth;
  int windowHeight;
  int renderWidth;
  int renderHeight;
  idRenderFrameInfo currentRenderFrameInfo;
  idRenderView *currentRenderView;
  unsigned __int16 gammaTable[256];
  float blackLevel[2];
  bool updateGammaTable;
  idGaugeMetric drawsMetric;
  idGaugeMetric trisMetric;
  idGaugeMetric vertsMetric;
  idRenderThread *renderThread;
};
