Add screencapture method for OpenGL

This commit is contained in:
Mahmood(Thunder07) 2017-04-04 21:42:28 +01:00
parent 6d4a78b3da
commit cee812eb02
4 changed files with 22 additions and 1 deletions

View File

@ -2135,6 +2135,15 @@ void CGSH_OpenGL::ReadFramebuffer(uint32 width, uint32 height, void* buffer)
#endif
}
Framework::CBitmap CGSH_OpenGL::GetScreenshot()
{
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
auto imgbuffer = Framework::CBitmap(viewport[2], viewport[3], 32);
glReadPixels(viewport[0], viewport[1], viewport[2], viewport[3], GL_RGBA, GL_UNSIGNED_BYTE, imgbuffer.GetPixels());
return imgbuffer.FlipVertical();
}
/////////////////////////////////////////////////////////////
// Framebuffer
/////////////////////////////////////////////////////////////

View File

@ -29,6 +29,8 @@ public:
void ProcessClutTransfer(uint32, uint32) override;
void ReadFramebuffer(uint32, uint32, void*) override;
Framework::CBitmap GetScreenshot() override;
protected:
void PalCache_Flush();
void LoadPreferences();

View File

@ -375,7 +375,7 @@ void CGSHandler::Flip(bool showOnly)
void CGSHandler::FlipImpl()
{
OnFlipComplete();
}
void CGSHandler::MarkNewFrame()
@ -1660,3 +1660,8 @@ void CGSHandler::ThreadProc()
}
}
}
Framework::CBitmap CGSHandler::GetScreenshot()
{
throw std::runtime_error("Screenshot feature is not implemented in current backend.");
}

View File

@ -7,6 +7,7 @@
#include <array>
#include <boost/signals2.hpp>
#include "bitmap/Bitmap.h"
#include "Types.h"
#include "Convertible.h"
#include "../MailBox.h"
@ -629,6 +630,10 @@ public:
bool GetCrtIsInterlaced() const;
bool GetCrtIsFrameMode() const;
virtual Framework::CBitmap GetScreenshot();
boost::signals2::signal<void()> OnFlipComplete;
boost::signals2::signal<void (uint32)> OnNewFrame;
protected: