2013-06-23 07:49:34 +00:00
|
|
|
#ifndef __GL_RENDERER_H
|
|
|
|
#define __GL_RENDERER_H
|
|
|
|
|
|
|
|
#include "r_defs.h"
|
|
|
|
#include "v_video.h"
|
|
|
|
#include "vectors.h"
|
|
|
|
#include "r_renderer.h"
|
2017-11-25 12:51:09 +00:00
|
|
|
#include "r_data/matrix.h"
|
2018-10-29 12:56:17 +00:00
|
|
|
#include "gl/renderer/gl_renderbuffers.h"
|
2018-06-23 11:25:23 +00:00
|
|
|
#include "hwrenderer/scene/hw_portal.h"
|
2018-10-28 16:09:22 +00:00
|
|
|
#include "hwrenderer/dynlights/hw_shadowmap.h"
|
2018-01-06 04:11:12 +00:00
|
|
|
#include <functional>
|
2013-06-23 07:49:34 +00:00
|
|
|
|
2018-04-25 19:02:50 +00:00
|
|
|
#ifdef _MSC_VER
|
|
|
|
#pragma warning(disable:4244)
|
|
|
|
#endif
|
|
|
|
|
2013-06-23 07:49:34 +00:00
|
|
|
struct particle_t;
|
|
|
|
class FCanvasTexture;
|
2018-10-27 12:42:24 +00:00
|
|
|
class FFlatVertexBuffer;
|
2014-06-13 23:24:28 +00:00
|
|
|
class FSkyVertexBuffer;
|
2013-06-23 07:49:34 +00:00
|
|
|
class FShaderManager;
|
2018-10-24 05:49:06 +00:00
|
|
|
class HWPortal;
|
2014-08-01 18:59:39 +00:00
|
|
|
class FLightBuffer;
|
2016-06-17 15:21:42 +00:00
|
|
|
class DPSprite;
|
2016-07-26 19:27:02 +00:00
|
|
|
class FGLRenderBuffers;
|
|
|
|
class FPresentShader;
|
2016-10-09 17:05:50 +00:00
|
|
|
class FPresent3DCheckerShader;
|
|
|
|
class FPresent3DColumnShader;
|
2016-10-02 16:24:37 +00:00
|
|
|
class FPresent3DRowShader;
|
2018-03-27 19:44:58 +00:00
|
|
|
class FGL2DDrawer;
|
2016-08-23 07:18:18 +00:00
|
|
|
class FHardwareTexture;
|
2017-03-01 02:33:53 +00:00
|
|
|
class FShadowMapShader;
|
2018-04-05 21:08:09 +00:00
|
|
|
class SWSceneDrawer;
|
2018-08-11 16:25:15 +00:00
|
|
|
class GLViewpointBuffer;
|
2018-06-20 11:14:50 +00:00
|
|
|
struct FRenderViewpoint;
|
2018-10-28 21:36:52 +00:00
|
|
|
class FPresentShaderBase;
|
2018-10-29 12:56:17 +00:00
|
|
|
|
|
|
|
namespace OpenGLRenderer
|
|
|
|
{
|
|
|
|
class FSamplerManager;
|
|
|
|
class FCustomPostProcessShaders;
|
|
|
|
class OpenGLFrameBuffer;
|
|
|
|
|
2018-06-13 18:30:51 +00:00
|
|
|
#define NOQUEUE nullptr // just some token to be used as a placeholder
|
2013-06-23 07:49:34 +00:00
|
|
|
|
|
|
|
class FGLRenderer
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
OpenGLFrameBuffer *framebuffer;
|
2018-08-11 16:25:15 +00:00
|
|
|
int mMirrorCount = 0;
|
|
|
|
int mPlaneMirrorCount = 0;
|
|
|
|
FShaderManager *mShaderManager = nullptr;
|
|
|
|
FSamplerManager *mSamplerManager = nullptr;
|
2013-06-23 07:49:34 +00:00
|
|
|
unsigned int mFBID;
|
2016-04-26 14:26:34 +00:00
|
|
|
unsigned int mVAOID;
|
2018-06-23 11:25:23 +00:00
|
|
|
unsigned int PortalQueryObject;
|
2018-10-23 20:32:00 +00:00
|
|
|
unsigned int mStencilValue = 0;
|
2018-06-23 11:25:23 +00:00
|
|
|
|
2016-04-30 13:29:22 +00:00
|
|
|
int mOldFBID;
|
2013-06-23 07:49:34 +00:00
|
|
|
|
2018-08-11 16:25:15 +00:00
|
|
|
FGLRenderBuffers *mBuffers = nullptr;
|
|
|
|
FGLRenderBuffers *mScreenBuffers = nullptr;
|
|
|
|
FGLRenderBuffers *mSaveBuffers = nullptr;
|
|
|
|
FPresentShader *mPresentShader = nullptr;
|
|
|
|
FPresent3DCheckerShader *mPresent3dCheckerShader = nullptr;
|
|
|
|
FPresent3DColumnShader *mPresent3dColumnShader = nullptr;
|
|
|
|
FPresent3DRowShader *mPresent3dRowShader = nullptr;
|
|
|
|
FShadowMapShader *mShadowMapShader = nullptr;
|
|
|
|
FCustomPostProcessShaders *mCustomPostProcessShaders = nullptr;
|
2016-07-26 19:27:02 +00:00
|
|
|
|
2018-06-19 21:16:22 +00:00
|
|
|
//FRotator mAngles;
|
2013-06-23 07:49:34 +00:00
|
|
|
|
2018-04-05 21:08:09 +00:00
|
|
|
SWSceneDrawer *swdrawer = nullptr;
|
2013-06-23 07:49:34 +00:00
|
|
|
|
2013-08-18 13:41:52 +00:00
|
|
|
FGLRenderer(OpenGLFrameBuffer *fb);
|
2013-06-23 07:49:34 +00:00
|
|
|
~FGLRenderer() ;
|
|
|
|
|
2016-08-08 12:24:48 +00:00
|
|
|
void Initialize(int width, int height);
|
2013-06-23 07:49:34 +00:00
|
|
|
|
|
|
|
void ClearBorders();
|
|
|
|
|
2018-04-08 06:03:46 +00:00
|
|
|
void ResetSWScene();
|
2013-06-23 07:49:34 +00:00
|
|
|
|
2018-06-24 11:39:14 +00:00
|
|
|
void PresentStereo();
|
2016-08-08 14:06:02 +00:00
|
|
|
void RenderScreenQuad();
|
2018-01-06 04:11:12 +00:00
|
|
|
void PostProcessScene(int fixedcm, const std::function<void()> &afterBloomDrawEndScene2D);
|
2018-06-21 18:54:34 +00:00
|
|
|
void AmbientOccludeScene(float m5);
|
2016-08-25 17:58:50 +00:00
|
|
|
void ClearTonemapPalette();
|
2017-03-14 23:11:13 +00:00
|
|
|
void BlurScene(float gameinfobluramount);
|
2018-05-12 15:23:56 +00:00
|
|
|
void CopyToBackbuffer(const IntRect *bounds, bool applyGamma);
|
|
|
|
void DrawPresentTexture(const IntRect &box, bool applyGamma);
|
2016-09-07 19:52:43 +00:00
|
|
|
void Flush();
|
2018-03-28 19:38:00 +00:00
|
|
|
void Draw2D(F2DDrawer *data);
|
2018-04-03 22:21:25 +00:00
|
|
|
void RenderTextureView(FCanvasTexture *tex, AActor *Viewpoint, double FOV);
|
|
|
|
void WriteSavePic(player_t *player, FileWriter *file, int width, int height);
|
2018-05-05 09:20:37 +00:00
|
|
|
sector_t *RenderView(player_t *player);
|
2018-04-29 18:15:19 +00:00
|
|
|
void BeginFrame();
|
2018-06-20 10:57:41 +00:00
|
|
|
|
|
|
|
sector_t *RenderViewpoint (FRenderViewpoint &mainvp, AActor * camera, IntRect * bounds, float fov, float ratio, float fovratio, bool mainview, bool toscreen);
|
|
|
|
|
2013-06-23 07:49:34 +00:00
|
|
|
|
|
|
|
bool StartOffscreen();
|
|
|
|
void EndOffscreen();
|
2018-10-28 16:09:22 +00:00
|
|
|
void UpdateShadowMap();
|
2013-06-23 07:49:34 +00:00
|
|
|
|
2018-07-14 11:05:49 +00:00
|
|
|
void BindToFrameBuffer(FMaterial *mat);
|
2018-10-28 21:36:52 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
|
2018-10-29 11:54:10 +00:00
|
|
|
void DrawScene(HWDrawInfo *di, int drawmode);
|
2018-10-28 21:36:52 +00:00
|
|
|
bool QuadStereoCheckInitialRenderContextState();
|
|
|
|
void PresentAnaglyph(bool r, bool g, bool b);
|
|
|
|
void PresentSideBySide();
|
|
|
|
void PresentTopBottom();
|
|
|
|
void prepareInterleavedPresent(FPresentShaderBase& shader);
|
|
|
|
void PresentColumnInterleaved();
|
|
|
|
void PresentRowInterleaved();
|
|
|
|
void PresentCheckerInterleaved();
|
|
|
|
void PresentQuadStereo();
|
|
|
|
|
2013-06-23 07:49:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct TexFilter_s
|
|
|
|
{
|
|
|
|
int minfilter;
|
|
|
|
int magfilter;
|
|
|
|
bool mipmapping;
|
|
|
|
} ;
|
|
|
|
|
|
|
|
|
|
|
|
extern FGLRenderer *GLRenderer;
|
|
|
|
|
2018-10-29 12:56:17 +00:00
|
|
|
}
|
2018-04-24 08:30:26 +00:00
|
|
|
#endif
|