mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-12-16 15:21:02 +00:00
133 lines
3.3 KiB
C++
133 lines
3.3 KiB
C++
#ifndef __GL_FRAMEBUFFER
|
|
#define __GL_FRAMEBUFFER
|
|
|
|
#ifdef _WIN32
|
|
#include "win32iface.h"
|
|
#include "win32gliface.h"
|
|
#endif
|
|
|
|
#include <memory>
|
|
|
|
class FHardwareTexture;
|
|
class FSimpleVertexBuffer;
|
|
class FGLDebug;
|
|
|
|
extern long gl_frameMS;
|
|
extern long gl_frameCount;
|
|
#ifdef _WIN32
|
|
class OpenGLFrameBuffer : public Win32GLFrameBuffer
|
|
{
|
|
typedef Win32GLFrameBuffer Super;
|
|
DECLARE_CLASS(OpenGLFrameBuffer, Win32GLFrameBuffer)
|
|
#else
|
|
#include "sdlglvideo.h"
|
|
class OpenGLFrameBuffer : public SDLGLFB
|
|
{
|
|
// typedef SDLGLFB Super; //[C]commented, DECLARE_CLASS defines this in linux
|
|
DECLARE_CLASS(OpenGLFrameBuffer, SDLGLFB)
|
|
#endif
|
|
|
|
|
|
public:
|
|
|
|
explicit OpenGLFrameBuffer() {}
|
|
OpenGLFrameBuffer(void *hMonitor, int width, int height, int bits, int refreshHz, bool fullscreen) ;
|
|
~OpenGLFrameBuffer();
|
|
|
|
void InitializeState();
|
|
void Update();
|
|
|
|
// Color correction
|
|
bool SetGamma (float gamma);
|
|
bool SetBrightness(float bright);
|
|
bool SetContrast(float contrast);
|
|
void DoSetGamma();
|
|
|
|
void UpdatePalette();
|
|
void GetFlashedPalette (PalEntry pal[256]);
|
|
PalEntry *GetPalette ();
|
|
bool SetFlash(PalEntry rgb, int amount);
|
|
void GetFlash(PalEntry &rgb, int &amount);
|
|
int GetPageCount();
|
|
bool Begin2D(bool copy3d);
|
|
void GameRestart();
|
|
|
|
// Retrieves a buffer containing image data for a screenshot.
|
|
// Hint: Pitch can be negative for upside-down images, in which case buffer
|
|
// points to the last row in the buffer, which will be the first row output.
|
|
virtual void GetScreenshotBuffer(const BYTE *&buffer, int &pitch, ESSType &color_type);
|
|
|
|
// Releases the screenshot buffer.
|
|
virtual void ReleaseScreenshotBuffer();
|
|
|
|
// 2D drawing
|
|
void DrawTextureParms(FTexture *img, DrawParms &parms);
|
|
void DrawLine(int x1, int y1, int x2, int y2, int palcolor, uint32 color);
|
|
void DrawPixel(int x1, int y1, int palcolor, uint32 color);
|
|
void Clear(int left, int top, int right, int bottom, int palcolor, uint32 color);
|
|
void Dim(PalEntry color=0);
|
|
void Dim (PalEntry color, float damount, int x1, int y1, int w, int h);
|
|
void FlatFill (int left, int top, int right, int bottom, FTexture *src, bool local_origin=false);
|
|
|
|
void FillSimplePoly(FTexture *tex, FVector2 *points, int npoints,
|
|
double originx, double originy, double scalex, double scaley,
|
|
DAngle rotation, FDynamicColormap *colormap, PalEntry flatcolor, int lightlevel, int bottomclip);
|
|
|
|
FNativePalette *CreatePalette(FRemapTable *remap);
|
|
|
|
bool WipeStartScreen(int type);
|
|
void WipeEndScreen();
|
|
bool WipeDo(int ticks);
|
|
void WipeCleanup();
|
|
void Swap();
|
|
bool Is8BitMode() { return false; }
|
|
bool IsHWGammaActive() const { return HWGammaActive; }
|
|
|
|
void SetVSync(bool vsync);
|
|
|
|
private:
|
|
PalEntry Flash;
|
|
|
|
// Texture creation info
|
|
int cm;
|
|
int translation;
|
|
bool iscomplex;
|
|
bool needsetgamma;
|
|
bool swapped;
|
|
|
|
PalEntry SourcePalette[256];
|
|
BYTE *ScreenshotBuffer;
|
|
|
|
class Wiper
|
|
{
|
|
|
|
protected:
|
|
FSimpleVertexBuffer *mVertexBuf;
|
|
|
|
void MakeVBO(OpenGLFrameBuffer *fb);
|
|
|
|
public:
|
|
Wiper();
|
|
virtual ~Wiper();
|
|
virtual bool Run(int ticks, OpenGLFrameBuffer *fb) = 0;
|
|
};
|
|
|
|
class Wiper_Melt; friend class Wiper_Melt;
|
|
class Wiper_Burn; friend class Wiper_Burn;
|
|
class Wiper_Crossfade; friend class Wiper_Crossfade;
|
|
|
|
Wiper *ScreenWipe;
|
|
FHardwareTexture *wipestartscreen;
|
|
FHardwareTexture *wipeendscreen;
|
|
|
|
bool HWGammaActive = false;
|
|
|
|
std::shared_ptr<FGLDebug> mDebug;
|
|
|
|
public:
|
|
AActor * LastCamera;
|
|
int palette_brightness;
|
|
};
|
|
|
|
|
|
#endif //__GL_FRAMEBUFFER
|