[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