diff --git a/src/patches/0005-tmp-do-not-use-GL_PIXEL_PACK_BUFFER.patch b/src/patches/0005-tmp-do-not-use-GL_PIXEL_PACK_BUFFER.patch new file mode 100644 index 0000000..4aeab68 --- /dev/null +++ b/src/patches/0005-tmp-do-not-use-GL_PIXEL_PACK_BUFFER.patch @@ -0,0 +1,132 @@ +From c6782c2ba842c47b6e35299b31d35663645647c7 Mon Sep 17 00:00:00 2001 +From: Sergey Lapin +Date: Thu, 20 Mar 2025 12:33:50 +0300 +Subject: [PATCH] tmp: do not use GL_PIXEL_PACK_BUFFER + +--- + drivers/gles2/rasterizer_storage_gles2.cpp | 26 +++++++------------- + drivers/gles3/rasterizer_storage_gles3.cpp | 28 ++++++++-------------- + 2 files changed, 19 insertions(+), 35 deletions(-) + +diff --git a/drivers/gles2/rasterizer_storage_gles2.cpp b/drivers/gles2/rasterizer_storage_gles2.cpp +index 5caae7cf2c..a649925d75 100644 +--- a/drivers/gles2/rasterizer_storage_gles2.cpp ++++ b/drivers/gles2/rasterizer_storage_gles2.cpp +@@ -805,22 +805,29 @@ Ref RasterizerStorageGLES2::texture_get_data(RID p_texture, int p_layer) + return texture->images[p_layer]; + } + +-#ifdef GLES_OVER_GL +- + Image::Format real_format; + GLenum gl_format; + GLenum gl_internal_format; + GLenum gl_type; + bool compressed; ++#ifdef GLES_OVER_GL + _get_gl_image_and_format(Ref(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed, false); ++#else ++ _get_gl_image_and_format(Ref(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed, texture->resize_to_po2); ++#endif + + PoolVector data; + ++#ifdef GLES_OVER_GL + int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, real_format, texture->mipmaps > 1); ++#else ++ int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, Image::FORMAT_RGBA8, false); ++#endif + + data.resize(data_size * 2); //add some memory at the end, just in case for buggy drivers + PoolVector::Write wb = data.write(); + ++#if 0 + gl_wrapper.gl_active_texture(GL_TEXTURE0); + + glBindTexture(texture->target, texture->tex_id); +@@ -847,21 +854,6 @@ Ref RasterizerStorageGLES2::texture_get_data(RID p_texture, int p_layer) + + return Ref(img); + #else +- +- Image::Format real_format; +- GLenum gl_format; +- GLenum gl_internal_format; +- GLenum gl_type; +- bool compressed; +- _get_gl_image_and_format(Ref(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed, texture->resize_to_po2); +- +- PoolVector data; +- +- int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, Image::FORMAT_RGBA8, false); +- +- data.resize(data_size * 2); //add some memory at the end, just in case for buggy drivers +- PoolVector::Write wb = data.write(); +- + GLuint temp_framebuffer; + glGenFramebuffers(1, &temp_framebuffer); + +diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp +index 6fdd8c466d..42ca35746f 100644 +--- a/drivers/gles3/rasterizer_storage_gles3.cpp ++++ b/drivers/gles3/rasterizer_storage_gles3.cpp +@@ -1165,23 +1165,31 @@ Ref RasterizerStorageGLES3::texture_get_data(RID p_texture, int p_layer) + return Ref(img); + } + +-#ifdef GLES_OVER_GL +- + Image::Format real_format; + GLenum gl_format; + GLenum gl_internal_format; + GLenum gl_type; + bool compressed; + bool srgb; ++#ifdef GLES_OVER_GL ++ + _get_gl_image_and_format(Ref(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed, srgb, false); ++#else ++ _get_gl_image_and_format(Ref(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed, srgb, texture->is_npot_repeat_mipmap); ++#endif + + PoolVector data; + ++#ifdef GLES_OVER_GL + int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, real_format, texture->mipmaps > 1); ++#else ++ int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, Image::FORMAT_RGBA8, false); ++#endif + + data.resize(data_size * 2); //add some memory at the end, just in case for buggy drivers + PoolVector::Write wb = data.write(); + ++#if 0 + gl_wrapper.gl_active_texture(GL_TEXTURE0); + + glBindTexture(texture->target, texture->tex_id); +@@ -1232,22 +1240,6 @@ Ref RasterizerStorageGLES3::texture_get_data(RID p_texture, int p_layer) + + return Ref(img); + #else +- +- Image::Format real_format; +- GLenum gl_format; +- GLenum gl_internal_format; +- GLenum gl_type; +- bool compressed; +- bool srgb; +- _get_gl_image_and_format(Ref(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed, srgb, texture->is_npot_repeat_mipmap); +- +- PoolVector data; +- +- int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, Image::FORMAT_RGBA8, false); +- +- data.resize(data_size * 2); //add some memory at the end, just in case for buggy drivers +- PoolVector::Write wb = data.write(); +- + GLuint temp_framebuffer; + glGenFramebuffers(1, &temp_framebuffer); + +-- +2.34.1 +