[openjk] 71/130: JO: Fix saved game and regular screenshots
Simon McVittie
smcv at debian.org
Fri Oct 28 11:09:20 UTC 2016
This is an automated email from the git hooks/post-receive script.
smcv pushed a commit to branch debian/master
in repository openjk.
commit 87b551f97685254b58fb22aadad32810d455bfee
Author: bibendovsky <bibendovsky at hotmail.com>
Date: Thu Aug 11 22:14:42 2016 +0300
JO: Fix saved game and regular screenshots
---
code/rd-common/tr_common.h | 2 +-
code/rd-common/tr_image_jpg.cpp | 16 ++++++++++++----
code/rd-common/tr_public.h | 2 +-
code/server/sv_savegame.cpp | 9 ++++++++-
4 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/code/rd-common/tr_common.h b/code/rd-common/tr_common.h
index becdf10..4d70883 100644
--- a/code/rd-common/tr_common.h
+++ b/code/rd-common/tr_common.h
@@ -79,7 +79,7 @@ void LoadJPGFromBuffer( byte *inputBuffer, size_t len, byte **pic, int *width, i
================================================================================
*/
// Convert raw image data to JPEG format and store in buffer.
-size_t RE_SaveJPGToBuffer( byte *buffer, size_t bufSize, int quality, int image_width, int image_height, byte *image_buffer, int padding );
+size_t RE_SaveJPGToBuffer( byte *buffer, size_t bufSize, int quality, int image_width, int image_height, byte *image_buffer, int padding, bool flip_vertical );
// Save raw image data as JPEG image file.
void RE_SaveJPG( const char * filename, int quality, int image_width, int image_height, byte *image_buffer, int padding );
diff --git a/code/rd-common/tr_image_jpg.cpp b/code/rd-common/tr_image_jpg.cpp
index 4bc19ed..a3ddb84 100644
--- a/code/rd-common/tr_image_jpg.cpp
+++ b/code/rd-common/tr_image_jpg.cpp
@@ -339,7 +339,7 @@ void LoadJPGFromBuffer( byte *inputBuffer, size_t len, unsigned char **pic, int
* Here the array is only one element long, but you could ask for
* more than one scanline at a time if that's more convenient.
*/
- buf = ((out+(row_stride*cinfo.output_scanline)));
+ buf = ((out+(row_stride*(cinfo.output_height - cinfo.output_scanline - 1))));
buffer = &buf;
(void) jpeg_read_scanlines(&cinfo, buffer, 1);
}
@@ -492,7 +492,7 @@ Expects RGB input data
=================
*/
size_t RE_SaveJPGToBuffer(byte *buffer, size_t bufSize, int quality,
- int image_width, int image_height, byte *image_buffer, int padding)
+ int image_width, int image_height, byte *image_buffer, int padding, bool flip_vertical)
{
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
@@ -543,7 +543,15 @@ size_t RE_SaveJPGToBuffer(byte *buffer, size_t bufSize, int quality,
* Here the array is only one element long, but you could pass
* more than one scanline at a time if that's more convenient.
*/
- row_pointer[0] = &image_buffer[((cinfo.image_height-1)*row_stride)-cinfo.next_scanline * row_stride];
+
+ int row_index = cinfo.next_scanline;
+
+ if (!flip_vertical)
+ {
+ row_index = cinfo.image_height - cinfo.next_scanline - 1;
+ }
+
+ row_pointer[0] = &image_buffer[row_index * row_stride];
(void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
}
@@ -569,7 +577,7 @@ void RE_SaveJPG(const char * filename, int quality, int image_width, int image_h
bufSize = image_width * image_height * 3;
out = (byte *) R_Malloc( bufSize, TAG_TEMP_WORKSPACE, qfalse );
- bufSize = RE_SaveJPGToBuffer(out, bufSize, quality, image_width, image_height, image_buffer, padding);
+ bufSize = RE_SaveJPGToBuffer(out, bufSize, quality, image_width, image_height, image_buffer, padding, false);
ri.FS_WriteFile(filename, out, bufSize);
R_Free(out);
diff --git a/code/rd-common/tr_public.h b/code/rd-common/tr_public.h
index 73e96aa..850a68f 100644
--- a/code/rd-common/tr_public.h
+++ b/code/rd-common/tr_public.h
@@ -209,7 +209,7 @@ typedef struct {
void (*GetScreenShot)(byte *data, int w, int h);
#ifdef JK2_MODE
- size_t (*SaveJPGToBuffer)(byte *buffer, size_t bufSize, int quality, int image_width, int image_height, byte *image_buffer, int padding );
+ size_t (*SaveJPGToBuffer)(byte *buffer, size_t bufSize, int quality, int image_width, int image_height, byte *image_buffer, int padding, bool flip_vertical );
void (*LoadJPGFromBuffer)( byte *inputBuffer, size_t len, byte **pic, int *width, int *height );
#endif
diff --git a/code/server/sv_savegame.cpp b/code/server/sv_savegame.cpp
index 0711779..d3c4635 100644
--- a/code/server/sv_savegame.cpp
+++ b/code/server/sv_savegame.cpp
@@ -977,7 +977,14 @@ static void SG_WriteScreenshot(qboolean qbAutosave, const char *psMapName)
size_t iJPGDataSize = 0;
size_t bufSize = SG_SCR_WIDTH * SG_SCR_HEIGHT * 3;
byte *pJPGData = (byte *)Z_Malloc( static_cast<int>(bufSize), TAG_TEMP_WORKSPACE, qfalse, 4 );
- iJPGDataSize = re.SaveJPGToBuffer(pJPGData, bufSize, JPEG_IMAGE_QUALITY, SG_SCR_WIDTH, SG_SCR_HEIGHT, pbRawScreenShot, 0 );
+
+#ifdef JK2_MODE
+ bool flip_vertical = true;
+#else
+ bool flip_vertical = false;
+#endif // JK2_MODE
+
+ iJPGDataSize = re.SaveJPGToBuffer(pJPGData, bufSize, JPEG_IMAGE_QUALITY, SG_SCR_WIDTH, SG_SCR_HEIGHT, pbRawScreenShot, 0, flip_vertical );
if ( qbAutosave )
delete[] byBlank;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/openjk.git
More information about the Pkg-games-commits
mailing list