Make FileAccess and DirAccess classes reference counted.
This commit is contained in:
@@ -36,18 +36,16 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
Error ImageLoaderPNG::load_image(Ref<Image> p_image, FileAccess *f, bool p_force_linear, float p_scale) {
|
||||
Error ImageLoaderPNG::load_image(Ref<Image> p_image, Ref<FileAccess> f, bool p_force_linear, float p_scale) {
|
||||
const uint64_t buffer_size = f->get_length();
|
||||
Vector<uint8_t> file_buffer;
|
||||
Error err = file_buffer.resize(buffer_size);
|
||||
if (err) {
|
||||
f->close();
|
||||
return err;
|
||||
}
|
||||
{
|
||||
uint8_t *writer = file_buffer.ptrw();
|
||||
f->get_buffer(writer, buffer_size);
|
||||
f->close();
|
||||
}
|
||||
const uint8_t *reader = file_buffer.ptr();
|
||||
return PNGDriverCommon::png_to_image(reader, buffer_size, p_force_linear, p_image);
|
||||
|
||||
@@ -40,7 +40,7 @@ private:
|
||||
static Ref<Image> load_mem_png(const uint8_t *p_png, int p_size);
|
||||
|
||||
public:
|
||||
virtual Error load_image(Ref<Image> p_image, FileAccess *f, bool p_force_linear, float p_scale);
|
||||
virtual Error load_image(Ref<Image> p_image, Ref<FileAccess> f, bool p_force_linear, float p_scale);
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
ImageLoaderPNG();
|
||||
};
|
||||
|
||||
@@ -52,20 +52,16 @@ Error ResourceSaverPNG::save_image(const String &p_path, const Ref<Image> &p_img
|
||||
Vector<uint8_t> buffer;
|
||||
Error err = PNGDriverCommon::image_to_png(p_img, buffer);
|
||||
ERR_FAIL_COND_V_MSG(err, err, "Can't convert image to PNG.");
|
||||
FileAccess *file = FileAccess::open(p_path, FileAccess::WRITE, &err);
|
||||
Ref<FileAccess> file = FileAccess::open(p_path, FileAccess::WRITE, &err);
|
||||
ERR_FAIL_COND_V_MSG(err, err, vformat("Can't save PNG at path: '%s'.", p_path));
|
||||
|
||||
const uint8_t *reader = buffer.ptr();
|
||||
|
||||
file->store_buffer(reader, buffer.size());
|
||||
if (file->get_error() != OK && file->get_error() != ERR_FILE_EOF) {
|
||||
memdelete(file);
|
||||
return ERR_CANT_CREATE;
|
||||
}
|
||||
|
||||
file->close();
|
||||
memdelete(file);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user