OpenGL: fix cropping
This commit is contained in:
		| @@ -520,6 +520,8 @@ bool RasterizerOpenGL::AccelerateDisplay(const Tegra::FramebufferConfig& config, | |||||||
|     // ASSERT_MSG(image_view->size.width == config.width, "Framebuffer width is different"); |     // ASSERT_MSG(image_view->size.width == config.width, "Framebuffer width is different"); | ||||||
|     // ASSERT_MSG(image_view->size.height == config.height, "Framebuffer height is different"); |     // ASSERT_MSG(image_view->size.height == config.height, "Framebuffer height is different"); | ||||||
|  |  | ||||||
|  |     screen_info.texture.width = image_view->size.width; | ||||||
|  |     screen_info.texture.height = image_view->size.height; | ||||||
|     screen_info.display_texture = image_view->Handle(Shader::TextureType::Color2D); |     screen_info.display_texture = image_view->Handle(Shader::TextureType::Color2D); | ||||||
|     screen_info.display_srgb = VideoCore::Surface::IsPixelFormatSRGB(image_view->format); |     screen_info.display_srgb = VideoCore::Surface::IsPixelFormatSRGB(image_view->format); | ||||||
|     return true; |     return true; | ||||||
|   | |||||||
| @@ -208,6 +208,8 @@ void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuf | |||||||
|     // Framebuffer orientation handling |     // Framebuffer orientation handling | ||||||
|     framebuffer_transform_flags = framebuffer.transform_flags; |     framebuffer_transform_flags = framebuffer.transform_flags; | ||||||
|     framebuffer_crop_rect = framebuffer.crop_rect; |     framebuffer_crop_rect = framebuffer.crop_rect; | ||||||
|  |     framebuffer_width = framebuffer.width; | ||||||
|  |     framebuffer_height = framebuffer.height; | ||||||
|  |  | ||||||
|     const VAddr framebuffer_addr{framebuffer.address + framebuffer.offset}; |     const VAddr framebuffer_addr{framebuffer.address + framebuffer.offset}; | ||||||
|     screen_info.was_accelerated = |     screen_info.was_accelerated = | ||||||
| @@ -480,9 +482,12 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) { | |||||||
|     ASSERT_MSG(framebuffer_crop_rect.top == 0, "Unimplemented"); |     ASSERT_MSG(framebuffer_crop_rect.top == 0, "Unimplemented"); | ||||||
|     ASSERT_MSG(framebuffer_crop_rect.left == 0, "Unimplemented"); |     ASSERT_MSG(framebuffer_crop_rect.left == 0, "Unimplemented"); | ||||||
|  |  | ||||||
|  |     f32 scale_u = static_cast<f32>(framebuffer_width) / static_cast<f32>(screen_info.texture.width); | ||||||
|  |     f32 scale_v = | ||||||
|  |         static_cast<f32>(framebuffer_height) / static_cast<f32>(screen_info.texture.height); | ||||||
|  |  | ||||||
|     // Scale the output by the crop width/height. This is commonly used with 1280x720 rendering |     // Scale the output by the crop width/height. This is commonly used with 1280x720 rendering | ||||||
|     // (e.g. handheld mode) on a 1920x1080 framebuffer. |     // (e.g. handheld mode) on a 1920x1080 framebuffer. | ||||||
|     f32 scale_u = 1.f, scale_v = 1.f; |  | ||||||
|     if (framebuffer_crop_rect.GetWidth() > 0) { |     if (framebuffer_crop_rect.GetWidth() > 0) { | ||||||
|         scale_u = static_cast<f32>(framebuffer_crop_rect.GetWidth()) / |         scale_u = static_cast<f32>(framebuffer_crop_rect.GetWidth()) / | ||||||
|                   static_cast<f32>(screen_info.texture.width); |                   static_cast<f32>(screen_info.texture.width); | ||||||
|   | |||||||
| @@ -137,6 +137,8 @@ private: | |||||||
|     /// Used for transforming the framebuffer orientation |     /// Used for transforming the framebuffer orientation | ||||||
|     Service::android::BufferTransformFlags framebuffer_transform_flags{}; |     Service::android::BufferTransformFlags framebuffer_transform_flags{}; | ||||||
|     Common::Rectangle<int> framebuffer_crop_rect; |     Common::Rectangle<int> framebuffer_crop_rect; | ||||||
|  |     u32 framebuffer_width; | ||||||
|  |     u32 framebuffer_height; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| } // namespace OpenGL | } // namespace OpenGL | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user