Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2012-01-28 15:54:57 +0000
committerStijn Buys <ingar@osirion.org>2012-01-28 15:54:57 +0000
commit986ca13bdbc90bccf8c3e7c05e5c809dea1551fc (patch)
treeaa91eb5678fd8b63d50cb23c904e4ada3f24a888 /src/render
parent47c565443b9a09344f58a0639d0de5693fbaec31 (diff)
Added function to write savegame screenshots,
moved client notification from the individual image loaders to the screenshot function.
Diffstat (limited to 'src/render')
-rw-r--r--src/render/jpgfile.cc5
-rw-r--r--src/render/pngfile.cc6
-rw-r--r--src/render/screenshot.cc58
-rw-r--r--src/render/screenshot.h1
-rw-r--r--src/render/tgafile.cc7
5 files changed, 59 insertions, 18 deletions
diff --git a/src/render/jpgfile.cc b/src/render/jpgfile.cc
index 25093b0..5a0fb7b 100644
--- a/src/render/jpgfile.cc
+++ b/src/render/jpgfile.cc
@@ -17,7 +17,6 @@ http://www.zarb.org/~gc/html/libpng.html
#include "sys/sys.h"
#include "filesystem/filesystem.h"
#include "render/jpgfile.h"
-#include "core/application.h"
// work-around for a jpeglib problem, needed on win32 and osx
#ifdef HAVE_STDLIB_H
@@ -116,10 +115,6 @@ void JPG::save(const char *filename, Image & image, int jpeg_quality)
jpeg_destroy_compress(&jpeg_compression_info);
//con_print << "Wrote " << filename << std::endl;
- std::string message;
- message.assign("Wrote ");
- message.append(filename);
- core::application()->notify_message(core::Message::Info, message);
}
}
diff --git a/src/render/pngfile.cc b/src/render/pngfile.cc
index da786ec..70833f3 100644
--- a/src/render/pngfile.cc
+++ b/src/render/pngfile.cc
@@ -20,7 +20,6 @@ http://www.zarb.org/~gc/html/libpng.html
#include "sys/sys.h"
#include "filesystem/filesystem.h"
#include "render/pngfile.h"
-#include "core/application.h"
namespace render
{
@@ -194,11 +193,6 @@ void PNG::save(const char *filename, Image & image)
fclose(png_file);
png_destroy_write_struct(&png_ptr, &info_ptr);
- //con_print << "Wrote " << filename << std::endl;
- std::string message;
- message.assign("Wrote ");
- message.append(filename);
- core::application()->notify_message(core::Message::Info, message);
}
}
diff --git a/src/render/screenshot.cc b/src/render/screenshot.cc
index 9018a7d..2fd7e9a 100644
--- a/src/render/screenshot.cc
+++ b/src/render/screenshot.cc
@@ -8,7 +8,10 @@
#include "auxiliary/functions.h"
#include "core/core.h"
+#include "core/application.h"
#include "filesystem/filesystem.h"
+#include "render/camera.h"
+#include "render/draw.h"
#include "render/state.h"
#include "render/screenshot.h"
#include "render/image.h"
@@ -17,6 +20,8 @@
#include "render/tgafile.h"
#include "render/gl.h"
+#include <SDL/SDL.h>
+
namespace render
{
@@ -27,6 +32,53 @@ core::Cvar *Screenshot::screenshotquality = 0;
int Screenshot::current_number = 0;
int Screenshot::current_date = 0;
+void Screenshot::savegameshot(const std::string & filename)
+{
+ // TODO do the actual drawing
+
+ // Clear the color and depth buffers.
+ gl::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ // set camera transformation
+ Camera::frame(0.0f);
+
+ render::Camera::frustum();
+
+ // draw the world
+ draw(0.0f);
+
+ gl::disable(GL_TEXTURE_2D);
+ gl::disable(GL_BLEND);
+
+ // swap GL buffers
+ SDL_GL_SwapBuffers();
+
+ int w = State::width();
+ int h = State::height();
+
+ // round image size down to a multiplier of 16
+ w -= w % 16;
+ h -= h % 16;
+
+ if ((w > 0) && (h > 0)) {
+ // read pixels into an image instance
+ render::Image image(w, h, 3);
+
+ glReadPixels(
+ (GLsizei) ((State::width() - w) / 2),
+ (GLsizei) ((State::height() - h) / 2),
+ w,
+ h,
+ GL_RGB, GL_UNSIGNED_BYTE, (void *) image.ptr()
+ );
+
+ image.flip_vertical();
+
+ con_debug << "Saving " << filename << std::endl;
+
+ render::JPG::save(filename.c_str(), image, 85);
+ }
+}
void Screenshot::save()
{
std::string filename;
@@ -114,6 +166,12 @@ void Screenshot::save()
} else if (filetype == TYPETGA) {
render::TGA::save(filename.c_str(), image);
}
+
+ // send a notification
+ std::string message;
+ message.assign("Wrote ");
+ message.append(filename);
+ core::application()->notify_message(core::Message::Info, message);
}
} // namsepace render
diff --git a/src/render/screenshot.h b/src/render/screenshot.h
index 5c0e22c..2c6568c 100644
--- a/src/render/screenshot.h
+++ b/src/render/screenshot.h
@@ -16,6 +16,7 @@ class Screenshot
{
public:
static void save();
+ static void savegameshot(const std::string & filename);
static core::Cvar *screenshotformat;
static core::Cvar *screenshotquality;
diff --git a/src/render/tgafile.cc b/src/render/tgafile.cc
index efb86e9..15447df 100644
--- a/src/render/tgafile.cc
+++ b/src/render/tgafile.cc
@@ -34,7 +34,6 @@
#include "sys/sys.h"
#include "filesystem/filesystem.h"
#include "render/tgafile.h"
-#include "core/application.h"
const unsigned char TGA_NONE = 0;
const unsigned char TGA_TRUECOLOR = 2;
@@ -361,12 +360,6 @@ void TGA::save(const char *filename, Image & image)
// close file
ofs.close();
-
- //con_print << "Wrote " << filename << std::endl;
- std::string message;
- message.assign("Wrote ");
- message.append(filename);
- core::application()->notify_message(core::Message::Info, message);
}
}