diff --git a/src/hwr2/screen_capture.cpp b/src/hwr2/screen_capture.cpp index 8bf34b71c..7f6645f4d 100644 --- a/src/hwr2/screen_capture.cpp +++ b/src/hwr2/screen_capture.cpp @@ -34,7 +34,7 @@ void ScreenshotPass::capture(Rhi& rhi, Handle ctx) packed_data_.clear(); // Pixel data must be in pack alignment (4) so a stride of non-multiple 4 must align to 4 uint32_t stride = width_ * 3; - uint32_t read_stride = ((width_ + (kPixelRowPackAlignment - 1)) & ~(kPixelRowPackAlignment - 1)) * 3; + uint32_t read_stride = ((stride + (kPixelRowPackAlignment - 1)) & ~(kPixelRowPackAlignment - 1)); pixel_data_.resize(read_stride * height_); // 3 bytes per pixel for RGB8 packed_data_.resize(stride * height_); diff --git a/src/rhi/gl2/gl2_rhi.cpp b/src/rhi/gl2/gl2_rhi.cpp index 6d9024358..1740c0fa0 100644 --- a/src/rhi/gl2/gl2_rhi.cpp +++ b/src/rhi/gl2/gl2_rhi.cpp @@ -1759,9 +1759,9 @@ void Gl2Rhi::read_pixels(Handle ctx, const Rect& rect, PixelFor GLint size = std::get<2>(gl_format); // Pack alignment comes into play. - uint32_t pack_aligned_w = (rect.w + (kPixelRowPackAlignment - 1)) & ~(kPixelRowPackAlignment - 1); + uint32_t pack_stride = (rect.w * size + (kPixelRowPackAlignment - 1)) & ~(kPixelRowPackAlignment - 1); - SRB2_ASSERT(out.size_bytes() == pack_aligned_w * rect.h * size); + SRB2_ASSERT(out.size_bytes() == pack_stride * rect.h); bool is_back; Rect src_dim;