mirror of
https://github.com/godotengine/godot-angle-static.git
synced 2026-01-06 02:09:55 +03:00
Fix read size validation for RGBX formats.
GL_RGBX8_ANGLE is the only format where the upload format is 3-channel RGB, whilethe download format is 4-channel RGBX. As such, the internal format corresponding to format+type expects 3-byte input/output. The format is fixed here for readPixels to output 4 bytes per pixel. Bug: chromium:1458046 Change-Id: Iec737ed64bade003cfab50dc5f595eb4875e81e4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4706957 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
This commit is contained in:
committed by
Angle LUCI CQ
parent
938ee1e80f
commit
430a4f559c
@@ -1702,7 +1702,15 @@ const InternalFormat &GetInternalFormatInfo(GLenum internalFormat, GLenum type)
|
||||
GLuint InternalFormat::computePixelBytes(GLenum formatType) const
|
||||
{
|
||||
const auto &typeInfo = GetTypeInfo(formatType);
|
||||
GLuint components = typeInfo.specialInterpretation ? 1u : componentCount;
|
||||
GLuint components = componentCount;
|
||||
if (sizedInternalFormat == GL_RGBX8_ANGLE)
|
||||
{
|
||||
components = 4;
|
||||
}
|
||||
else if (typeInfo.specialInterpretation)
|
||||
{
|
||||
components = 1;
|
||||
}
|
||||
return components * typeInfo.bytes;
|
||||
}
|
||||
|
||||
|
||||
@@ -813,15 +813,6 @@ angle::Result FramebufferVk::readPixels(const gl::Context *context,
|
||||
gl::Buffer *packBuffer,
|
||||
void *pixels)
|
||||
{
|
||||
// Note that GL_RGBX8_ANGLE is the only format where the upload format is 3-channel RGB, while
|
||||
// the download format is 4-channel RGBX. As such, the internal format corresponding to
|
||||
// format+type expects 3-byte input/output. The format is fixed here for readPixels to output
|
||||
// 4 bytes per pixel.
|
||||
if (format == GL_RGBX8_ANGLE)
|
||||
{
|
||||
format = GL_RGBA8;
|
||||
}
|
||||
|
||||
// Clip read area to framebuffer.
|
||||
const gl::Extents &fbSize = getState().getReadPixelsAttachment(format)->getSize();
|
||||
const gl::Rectangle fbRect(0, 0, fbSize.width, fbSize.height);
|
||||
|
||||
Reference in New Issue
Block a user