Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/gameengine/BlenderRoutines/KX_BlenderGL.cpp')
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderGL.cpp39
1 files changed, 24 insertions, 15 deletions
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp b/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
index f808b1b7272..ebf788024c5 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
@@ -60,6 +60,7 @@
#include "DNA_image_types.h"
#include "DNA_view3d_types.h"
#include "DNA_material_types.h"
+#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h"
#include "BKE_global.h"
@@ -68,6 +69,7 @@
#include "BKE_image.h"
#include "BLI_path_util.h"
+#include "BLI_string.h"
extern "C" {
#include "IMB_imbuf_types.h"
@@ -270,8 +272,6 @@ void BL_NormalMouse(wmWindow *win)
{
WM_cursor_set(win, CURSOR_STD);
}
-#define MAX_FILE_LENGTH 512
-
/* get shot from frontbuffer sort of a copy from screendump.c */
static unsigned int *screenshot(ScrArea *curarea, int *dumpsx, int *dumpsy)
{
@@ -296,27 +296,36 @@ static unsigned int *screenshot(ScrArea *curarea, int *dumpsx, int *dumpsy)
}
/* based on screendump.c::screenshot_exec */
-void BL_MakeScreenShot(ScrArea *curarea, const char *filename)
+void BL_MakeScreenShot(bScreen *screen, ScrArea *curarea, const char *filename)
{
- char path[MAX_FILE_LENGTH];
- strcpy(path,filename);
-
unsigned int *dumprect;
int dumpsx, dumpsy;
- dumprect= screenshot(curarea, &dumpsx, &dumpsy);
+ dumprect = screenshot(curarea, &dumpsx, &dumpsy);
+
if (dumprect) {
- ImBuf *ibuf;
+ /* initialize image file format data */
+ Scene *scene = (screen)? screen->scene: NULL;
+ ImageFormatData im_format;
+
+ if(scene)
+ im_format = scene->r.im_format;
+ else
+ BKE_imformat_defaults(&im_format);
+
+ /* create file path */
+ char path[FILE_MAX];
+ BLI_strncpy(path, filename, sizeof(path));
BLI_path_abs(path, G.main->name);
- /* BKE_add_image_extension() checks for if extension was already set */
- BKE_add_image_extension_from_type(path, R_IMF_IMTYPE_PNG); /* scene->r.im_format.imtype */
- ibuf= IMB_allocImBuf(dumpsx, dumpsy, 24, 0);
- ibuf->rect= dumprect;
- ibuf->ftype= PNG;
+ BKE_add_image_extension_from_type(path, im_format.imtype);
+
+ /* create and save imbuf */
+ ImBuf *ibuf = IMB_allocImBuf(dumpsx, dumpsy, 24, 0);
+ ibuf->rect = dumprect;
- IMB_saveiff(ibuf, path, IB_rect);
+ BKE_imbuf_write_as(ibuf, path, &im_format, false);
- ibuf->rect= NULL;
+ ibuf->rect = NULL;
IMB_freeImBuf(ibuf);
MEM_freeN(dumprect);
}