Browse Source
Merge pull request #7389 from ameerj/screenshot-1x
Fix screenshot dimensions when at 1x scale
pull/15/merge
bunnei
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with
8 additions and
20 deletions
-
src/core/frontend/framebuffer_layout.cpp
-
src/core/frontend/framebuffer_layout.h
-
src/video_core/video_core.cpp
-
src/video_core/video_core.h
-
src/yuzu/bootmanager.cpp
|
|
|
@ -25,7 +25,12 @@ FramebufferLayout DefaultFrameLayout(u32 width, u32 height) { |
|
|
|
ASSERT(height > 0); |
|
|
|
// The drawing code needs at least somewhat valid values for both screens
|
|
|
|
// so just calculate them both even if the other isn't showing.
|
|
|
|
FramebufferLayout res{width, height, false, {}}; |
|
|
|
FramebufferLayout res{ |
|
|
|
.width = width, |
|
|
|
.height = height, |
|
|
|
.screen = {}, |
|
|
|
.is_srgb = false, |
|
|
|
}; |
|
|
|
|
|
|
|
const float window_aspect_ratio = static_cast<float>(height) / static_cast<float>(width); |
|
|
|
const float emulation_aspect_ratio = EmulationAspectRatio( |
|
|
|
|
|
|
|
@ -35,17 +35,8 @@ enum class AspectRatio { |
|
|
|
struct FramebufferLayout { |
|
|
|
u32 width{ScreenUndocked::Width}; |
|
|
|
u32 height{ScreenUndocked::Height}; |
|
|
|
bool is_srgb{}; |
|
|
|
|
|
|
|
Common::Rectangle<u32> screen; |
|
|
|
|
|
|
|
/** |
|
|
|
* Returns the ration of pixel size of the screen, compared to the native size of the undocked |
|
|
|
* Switch screen. |
|
|
|
*/ |
|
|
|
float GetScalingRatio() const { |
|
|
|
return static_cast<float>(screen.GetWidth()) / ScreenUndocked::Width; |
|
|
|
} |
|
|
|
bool is_srgb{}; |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
@ -55,10 +55,4 @@ std::unique_ptr<Tegra::GPU> CreateGPU(Core::Frontend::EmuWindow& emu_window, Cor |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
float GetResolutionScaleFactor(const RendererBase& renderer) { |
|
|
|
return Settings::values.resolution_info.active |
|
|
|
? Settings::values.resolution_info.up_factor |
|
|
|
: renderer.GetRenderWindow().GetFramebufferLayout().GetScalingRatio(); |
|
|
|
} |
|
|
|
|
|
|
|
} // namespace VideoCore
|
|
|
|
@ -25,6 +25,4 @@ class RendererBase; |
|
|
|
/// Creates an emulated GPU instance using the given system context. |
|
|
|
std::unique_ptr<Tegra::GPU> CreateGPU(Core::Frontend::EmuWindow& emu_window, Core::System& system); |
|
|
|
|
|
|
|
float GetResolutionScaleFactor(const RendererBase& renderer); |
|
|
|
|
|
|
|
} // namespace VideoCore |
|
|
|
@ -630,7 +630,7 @@ void GRenderWindow::ReleaseRenderTarget() { |
|
|
|
|
|
|
|
void GRenderWindow::CaptureScreenshot(const QString& screenshot_path) { |
|
|
|
auto& renderer = system.Renderer(); |
|
|
|
const f32 res_scale = VideoCore::GetResolutionScaleFactor(renderer); |
|
|
|
const f32 res_scale = Settings::values.resolution_info.up_factor; |
|
|
|
|
|
|
|
const Layout::FramebufferLayout layout{Layout::FrameLayoutFromResolutionScale(res_scale)}; |
|
|
|
screenshot_image = QImage(QSize(layout.width, layout.height), QImage::Format_RGB32); |
|
|
|
|