# define RGB_COLOR(r, g, b) (((uint32)(r) << 24) | ((uint32)(g) << 16) | ((uint32)(b) << 8))
typedef uint32 scrntype;
# elif defined(_RGBA888)
-//# define RGB_COLOR(r, g, b) (((uint32)(r) << 24) | ((uint32)(g) << 16) | ((uint32)(b) << 8)) | ((uint32)0xff << 0)
-# define RGB_COLOR(r, g, b) (((uint32)(b) << 24) | ((uint32)(g) << 16) | ((uint32)(r) << 8)) | ((uint32)0xff << 0)
+# define RGB_COLOR(r, g, b) (((uint32)(r) << 24) | ((uint32)(g) << 16) | ((uint32)(b) << 8)) | ((uint32)0xff << 0)
+//# define RGB_COLOR(r, g, b) (((uint32)(b) << 24) | ((uint32)(g) << 16) | ((uint32)(r) << 8)) | ((uint32)0xff << 0)
typedef uint32 scrntype;
# endif
# define RGB_COLOR(r, g, b) (((uint32)(r) << 16) | ((uint32)(g) << 8) | ((uint32)(b) << 0))
typedef uint32 scrntype;
# elif defined(_RGBA888)
-//# define RGB_COLOR(r, g, b) (((uint32)(r) << 16) | ((uint32)(g) << 8) | ((uint32)(b) << 0)) | ((uint32)0xff << 24)
-# define RGB_COLOR(r, g, b) (((uint32)(b) << 16) | ((uint32)(g) << 8) | ((uint32)(r) << 0)) | ((uint32)0xff << 24)
+# define RGB_COLOR(r, g, b) (((uint32)(r) << 16) | ((uint32)(g) << 8) | ((uint32)(b) << 0)) | ((uint32)0xff << 24)
+//# define RGB_COLOR(r, g, b) (((uint32)(b) << 16) | ((uint32)(g) << 8) | ((uint32)(r) << 0)) | ((uint32)0xff << 24)
typedef uint32 scrntype;
# endif
void DrawThreadClass::doWork(const QString ¶m)
{
}
+
+
+
extfunc->glTexSubImage2D(GL_TEXTURE_2D, 0,
0, 0,
p->width(), p->height(),
- GL_RGBA, GL_UNSIGNED_BYTE, p->constBits());
+ GL_BGRA, GL_UNSIGNED_BYTE, p->constBits());
extfunc->glBindTexture(GL_TEXTURE_2D, 0);
//this->deleteTexture(uVramTextureID);
} else {
drawUpdateTexture(imgptr);
crt_flag = false;
}
+ SaveToPixmap(); // If save requested, then Save to Pixmap.
+
extfunc->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
extfunc->glEnable(GL_DEPTH_TEST);
extfunc->glDisable(GL_BLEND);
extfunc->glDisable(GL_BLEND);
drawGrids();
extfunc->glFlush();
+
}
#ifndef GL_MULTISAMPLE
#endif
{
+ save_pixmap_req = false;
+ filename_screen_pixmap.clear();
+
#if defined(_USE_GLAPI_QT5_4)
uVramTextureID = new QOpenGLTexture(QOpenGLTexture::Target2D);
#else
# ifdef USE_BITMAP
void drawBitmapTexture(void);
#endif
+ QString filename_screen_pixmap;
+ bool save_pixmap_req;
+ void SaveToPixmap(void);
public:
GLDrawClass(QWidget *parent = 0);
void SetBrightRGB(float r, float g, float b);
void InitFBO(void);
void closeEvent(QCloseEvent *event);
-
public slots:
void initKeyCode(void);
void releaseKeyCode(void);
void setEmuPtr(EMU *p);
void enterEvent(QEvent *);
void leaveEvent(QEvent *);
-
+ void do_save_frame_screen(void);
+
signals:
void update_screenChanged(int tick);
void do_notify_move_mouse(int x, int y);
#include <GL/glu.h>
#include "qt_gldraw.h"
#include <QEvent>
+#include <QDateTime>
void GLDrawClass::enterEvent(QEvent *event)
{
{
//emit sig_finished();
}
+
+void GLDrawClass::do_save_frame_screen(void)
+{
+ if(!save_pixmap_req) {
+ save_pixmap_req = true;
+ QDateTime nowTime = QDateTime::currentDateTime();
+ QString tmps = QString::fromUtf8("Screen_Save_emu");
+ tmps = tmps + QString::fromUtf8(CONFIG_NAME);
+ tmps = tmps + QString::fromUtf8("_");
+ tmps = tmps + nowTime.toString(QString::fromUtf8("yyyy-MM-dd_hh-mm-ss.zzz"));
+ tmps = tmps + QString::fromUtf8(".png");
+ filename_screen_pixmap = QString::fromUtf8(p_emu->bios_path(tmps.toUtf8().constData()));
+ }
+}
#include <omp.h>
#endif //_OPENMP
#include <QGLContext>
+#include <QImage>
//extern const char *cl_render;
}
bGL_PIXEL_UNPACK_BUFFER_BINDING = false;
}
+
+void GLDrawClass::SaveToPixmap(void)
+{
+ if(save_pixmap_req) {
+ if(!filename_screen_pixmap.isEmpty()) {
+ QImage snapshot = this->grabFrameBuffer();
+ snapshot.save(filename_screen_pixmap);
+ }
+ save_pixmap_req = false;
+ filename_screen_pixmap.clear();
+ }
+}
connect(hDrawEmu, SIGNAL(sig_draw_frames(int)), hRunEmu, SLOT(print_framerate(int)));
connect(hDrawEmu, SIGNAL(message_changed(QString)), this, SLOT(message_status_bar(QString)));
connect(hDrawEmu, SIGNAL(sig_update_screen(QImage *)), glv, SLOT(update_screen(QImage *)), Qt::QueuedConnection);
-
+ connect(actionCapture_Screen, SIGNAL(triggered()), glv, SLOT(do_save_frame_screen()));
+
connect(hRunEmu, SIGNAL(sig_draw_thread()), hDrawEmu, SLOT(doDraw()));
//connect(hRunEmu, SIGNAL(quit_draw_thread()), hDrawEmu, SLOT(doExit()));
connect(this, SIGNAL(quit_draw_thread()), hDrawEmu, SLOT(doExit()));