Fix texture resource reload bug
If a non-imported texture resource file (e.g. DDS) gets updated the editor
doesn't reload it. The cause of the problem is two-fold:
First, the code of ImageTexture assumes that textures are always imported
from an image, but that's not the case for e.g. DDS. This change thus adds
code to issue a resource reload in case an image reload is not possible
(which is the case for non-imported texture resources).
Second, the code is filled with bogus calls to Image::get_image_data_size()
to determine the mipmap offset when that should be done using
Image::get_image_mipmap_offset(). Previous code literally passed the integer
mip level value to Image::get_image_data_size() where that actually expects
a boolean. Thus this part of the change might actually solve some other
issues as well.
To be pedantic, the texture_get_data() funciton of the rasterizer drivers is
still quite a mess, as it only ever returns the whole mipchain when
GLES_OVER_GL is set (practically only on desktop builds) but this change does
not attempt to resolve that.
(cherry picked from commit e34eb5c26c)
This commit is contained in:
committed by
Rémi Verschelde
parent
c3fd38027e
commit
a670c66457
@ -774,10 +774,7 @@ Ref<Image> RasterizerStorageGLES2::texture_get_data(RID p_texture, int p_layer)
|
||||
|
||||
for (int i = 0; i < texture->mipmaps; i++) {
|
||||
|
||||
int ofs = 0;
|
||||
if (i > 0) {
|
||||
ofs = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, real_format, i - 1);
|
||||
}
|
||||
int ofs = Image::get_image_mipmap_offset(texture->alloc_width, texture->alloc_height, real_format, i);
|
||||
|
||||
if (texture->compressed) {
|
||||
glPixelStorei(GL_PACK_ALIGNMENT, 4);
|
||||
|
||||
@ -1209,10 +1209,7 @@ Ref<Image> RasterizerStorageGLES3::texture_get_data(RID p_texture, int p_layer)
|
||||
|
||||
for (int i = 0; i < texture->mipmaps; i++) {
|
||||
|
||||
int ofs = 0;
|
||||
if (i > 0) {
|
||||
ofs = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, real_format, i - 1);
|
||||
}
|
||||
int ofs = Image::get_image_mipmap_offset(texture->alloc_width, texture->alloc_height, real_format, i);
|
||||
|
||||
if (texture->compressed) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user