Skip to content

Commit 9669966

Browse files
committed
Add JPEGQuality option to Options.ini (default 80)
Move W3DScreenshot implementation to game-specific directories Fix include order for VC6 precompiled headers Remove default parameter from function definition Move STB implementation to separate file to avoid PCH issues Include screenshot implementation directly in W3DDisplay.cpp to avoid PCH issues Use Windows constants and switch statement in screenshot code Use vcpkg for stb dependency with FetchContent fallback
1 parent 149cc52 commit 9669966

File tree

34 files changed

+312
-103
lines changed

34 files changed

+312
-103
lines changed

Core/GameEngineDevice/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,6 @@ set(GAMEENGINEDEVICE_SRC
174174
# Source/W3DDevice/GameClient/W3DTerrainVisual.cpp
175175
# Source/W3DDevice/GameClient/W3DTreeBuffer.cpp
176176
Source/W3DDevice/GameClient/W3DVideoBuffer.cpp
177-
Source/W3DDevice/GameClient/W3DScreenshot.cpp
178177
# Source/W3DDevice/GameClient/W3DView.cpp
179178
# Source/W3DDevice/GameClient/W3dWaypointBuffer.cpp
180179
# Source/W3DDevice/GameClient/W3DWebBrowser.cpp

Core/GameEngineDevice/Include/W3DDevice/GameClient/W3DScreenshot.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,7 @@
1818

1919
#pragma once
2020

21-
enum ScreenshotFormat
22-
{
23-
SCREENSHOT_JPEG,
24-
SCREENSHOT_PNG
25-
};
21+
#include "GameClient/Display.h"
2622

2723
void W3D_TakeCompressedScreenshot(ScreenshotFormat format, int quality = 80);
2824

Generals/Code/GameEngine/Include/Common/GlobalData.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ class GlobalData : public SubsystemInterface
139139
Int m_terrainLODTargetTimeMS;
140140
Bool m_useAlternateMouse;
141141
Bool m_rightMouseAlwaysScrolls;
142+
Int m_jpegQuality;
142143
Bool m_useWaterPlane;
143144
Bool m_useCloudPlane;
144145
Bool m_useShadowVolumes;

Generals/Code/GameEngine/Include/Common/MessageStream.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,8 @@ class GameMessage : public MemoryPoolObject
257257
MSG_META_BEGIN_PREFER_SELECTION, ///< The Shift key has been depressed alone
258258
MSG_META_END_PREFER_SELECTION, ///< The Shift key has been released.
259259

260-
MSG_META_TAKE_SCREENSHOT, ///< take screenshot (JPEG)
261-
MSG_META_TAKE_SCREENSHOT_PNG, ///< take PNG screenshot
260+
MSG_META_TAKE_SCREENSHOT, ///< take JPEG screenshot (F12)
261+
MSG_META_TAKE_SCREENSHOT_JPEG, ///< take PNG screenshot (CTRL+F12, lossless)
262262
MSG_META_ALL_CHEER, ///< Yay! :)
263263
MSG_META_TOGGLE_ATTACKMOVE, ///< enter attack-move mode
264264

Generals/Code/GameEngine/Include/Common/UserPreferences.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ class OptionPreferences : public UserPreferences
9191
void setOnlineIPAddress(UnsignedInt IP); // convenience function
9292
Bool getArchiveReplaysEnabled() const; // convenience function
9393
Bool getAlternateMouseModeEnabled(void); // convenience function
94+
Int getJPEGQuality(void); // convenience function
9495
Real getScrollFactor(void); // convenience function
9596
Bool getDrawScrollAnchor(void);
9697
Bool getMoveScrollAnchor(void);

Generals/Code/GameEngine/Include/GameClient/Display.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@
3535

3636
class View;
3737

38+
enum ScreenshotFormat
39+
{
40+
SCREENSHOT_JPEG,
41+
SCREENSHOT_PNG
42+
};
43+
3844
struct ShroudLevel
3945
{
4046
Short m_currentShroud; ///< A Value of 1 means shrouded. 0 is not. Negative is the count of people looking.
@@ -168,8 +174,7 @@ class Display : public SubsystemInterface
168174
virtual void preloadModelAssets( AsciiString model ) = 0; ///< preload model asset
169175
virtual void preloadTextureAssets( AsciiString texture ) = 0; ///< preload texture asset
170176

171-
virtual void takeScreenShotCompressed(void) = 0; ///< saves JPEG screenshot
172-
virtual void takeScreenShotPNG(void) = 0; ///< saves PNG screenshot
177+
virtual void takeScreenShot(ScreenshotFormat format) = 0; ///< saves screenshot in specified format
173178
virtual void toggleMovieCapture(void) = 0; ///< starts saving frames to an avi or frame sequence
174179
virtual void toggleLetterBox(void) = 0; ///< enabled letter-boxed display
175180
virtual void enableLetterBox(Bool enable) = 0; ///< forces letter-boxed display on/off

Generals/Code/GameEngine/Source/Common/GlobalData.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,6 +1180,7 @@ void GlobalData::parseGameDataDefinition( INI* ini )
11801180
// override INI values with user preferences
11811181
OptionPreferences optionPref;
11821182
TheWritableGlobalData->m_useAlternateMouse = optionPref.getAlternateMouseModeEnabled();
1183+
TheWritableGlobalData->m_jpegQuality = optionPref.getJPEGQuality();
11831184
TheWritableGlobalData->m_keyboardScrollFactor = optionPref.getScrollFactor();
11841185
TheWritableGlobalData->m_drawScrollAnchor = optionPref.getDrawScrollAnchor();
11851186
TheWritableGlobalData->m_moveScrollAnchor = optionPref.getMoveScrollAnchor();

Generals/Code/GameEngine/Source/Common/MessageStream.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ const char *GameMessage::getCommandTypeAsString(GameMessage::Type t)
364364
CASE_LABEL(MSG_META_BEGIN_PREFER_SELECTION)
365365
CASE_LABEL(MSG_META_END_PREFER_SELECTION)
366366
CASE_LABEL(MSG_META_TAKE_SCREENSHOT)
367-
CASE_LABEL(MSG_META_TAKE_SCREENSHOT_PNG)
367+
CASE_LABEL(MSG_META_TAKE_SCREENSHOT_JPEG)
368368
CASE_LABEL(MSG_META_ALL_CHEER)
369369
CASE_LABEL(MSG_META_TOGGLE_ATTACKMOVE)
370370
CASE_LABEL(MSG_META_BEGIN_CAMERA_ROTATE_LEFT)

Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,17 @@ Bool OptionPreferences::getAlternateMouseModeEnabled(void)
335335
return FALSE;
336336
}
337337

338+
Int OptionPreferences::getJPEGQuality(void)
339+
{
340+
OptionPreferences::const_iterator it = find("JPEGQuality");
341+
if (it == end())
342+
return 80;
343+
344+
Int quality = atoi(it->second.str());
345+
if (quality < 1) quality = 1;
346+
if (quality > 100) quality = 100;
347+
return quality;
348+
}
338349

339350
Real OptionPreferences::getScrollFactor(void)
340351
{

Generals/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3410,14 +3410,14 @@ GameMessageDisposition CommandTranslator::translateGameMessage(const GameMessage
34103410
case GameMessage::MSG_META_TAKE_SCREENSHOT:
34113411
{
34123412
if (TheDisplay)
3413-
TheDisplay->takeScreenShotCompressed();
3413+
TheDisplay->takeScreenShot(SCREENSHOT_JPEG);
34143414
break;
34153415
}
34163416

3417-
case GameMessage::MSG_META_TAKE_SCREENSHOT_PNG:
3417+
case GameMessage::MSG_META_TAKE_SCREENSHOT_JPEG:
34183418
{
34193419
if (TheDisplay)
3420-
TheDisplay->takeScreenShotPNG();
3420+
TheDisplay->takeScreenShot(SCREENSHOT_PNG);
34213421
disp = DESTROY_MESSAGE;
34223422
break;
34233423
}

0 commit comments

Comments
 (0)