feat(screenshot): Add threaded JPEG/PNG screenshots without game stalls#1785
feat(screenshot): Add threaded JPEG/PNG screenshots without game stalls#1785bobtista wants to merge 26 commits intoTheSuperHackers:mainfrom
Conversation
20a3df1 to
37bd840
Compare
|
Some initial thoughts:
|
|
Agree with Stubbjax. JPG 90 is big file. Better make it default 80. Replace BMP screenshot with PNG screenshot. PNG is lossless compressed and always better than BMP. Make F12 take JPG 80 screenshot. Make CTRL+F12 take PNG screenshot. Make JPG Quality adjustable. Remove the old BMP code(s) and only use the new code for screenshot. |
|
Regarding Github formatting: When you write
Then it will not close this report when this is merged. Please read up on it here: |
RE moving logic to core, I moved what I could to core - but there are a lot more files that need to be moved to core before this can be moved there eg WWVegas/WW3D2/* |
3535e1e to
efc773f
Compare
Generals/Code/GameEngineDevice/Include/W3DDevice/GameClient/W3DDisplay.h
Outdated
Show resolved
Hide resolved
Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScreenshot.cpp
Outdated
Show resolved
Hide resolved
Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScreenshot.cpp
Outdated
Show resolved
Hide resolved
Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScreenshot.cpp
Outdated
Show resolved
Hide resolved
977a6dc to
f8162f3
Compare
d7e8a8d to
d197bdd
Compare
d197bdd to
9669966
Compare
|
Needs rebase. |
9669966 to
4897b0b
Compare
Done |
Core/GameEngineDevice/Include/W3DDevice/GameClient/W3DScreenshot.h
Outdated
Show resolved
Hide resolved
Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/stb_image_write_impl.cpp
Outdated
Show resolved
Hide resolved
Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScreenshot.cpp
Show resolved
Hide resolved
Generals/Code/GameEngine/Source/GameClient/MessageStream/MetaEvent.cpp
Outdated
Show resolved
Hide resolved
Generals/Code/GameEngine/Source/GameClient/MessageStream/MetaEvent.cpp
Outdated
Show resolved
Hide resolved
Generals/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp
Outdated
Show resolved
Hide resolved
9c99306 to
de35e57
Compare
| @@ -0,0 +1,19 @@ | |||
| # TheSuperHackers @bobtista 02/11/2025 | |||
There was a problem hiding this comment.
Date in comment (02/11/2025) is from the past; should be updated to 2026
| # TheSuperHackers @bobtista 02/11/2025 | |
| # TheSuperHackers @bobtista 02/24/2026 |
Context Used: Rule from dashboard - What: Flag newly created code comments that reference dates prior to the current year (2026).
Why: ... (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: cmake/stb.cmake
Line: 1
Comment:
Date in comment (02/11/2025) is from the past; should be updated to 2026
```suggestion
# TheSuperHackers @bobtista 02/24/2026
```
**Context Used:** Rule from `dashboard` - What: Flag newly created code comments that reference dates prior to the current year (2026).
Why: ... ([source](https://app.greptile.com/review/custom-context?memory=fd72a556-4fd8-4db4-8b08-8e51516a64ad))
How can I resolve this? If you propose a fix, please make it concise.Add takeScreenShotCompressed() to Display interface
Implement threaded JPEG screenshot for Generals Link stb library to GameEngineDevice targets Remove excessive comments from screenshot implementation
Add shared screenshot implementation in Core
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
…ince it's included in W3DDisplay.cpp
Move stb_image_write_impl.cpp from game-specific directories to Core since it's identical between Generals and GeneralsMD and contains only STB library implementation code with no game-specific logic.
…o nullptr, strcpy to strlcpy, fix thread leak
…on unit instead of #including it
…mpty CMake blocks
8779ab1 to
b709c32
Compare
| Int quality = atoi(it->second.str()); | ||
| if (quality < 1) quality = 1; | ||
| if (quality > 100) quality = 100; |
Summary
Replaces the old BMP screenshot with compressed JPEG screenshots that don't stall the game, and adds PNG support.
Closes #1555
Closes #106 ... sort of
Adds a new screenshot function using the stb_image_write library with background threading:
Notes
Testing