corruption fix

This commit is contained in:
2025-09-07 22:06:52 -05:00
parent 28e639c87d
commit 07fde47bed

View File

@@ -17,35 +17,31 @@ ALLEGRO_BITMAP* _al_load_qoi_f(ALLEGRO_FILE* file, int flags) {
uint8_t* file_bytes = malloc(al_fsize(file));
memset(file_bytes, 0, al_fsize(file));
void* file_pos = file_bytes;
int bytes_read = 0;
#define chunk_size 1024
al_fseek(file, 0, SEEK_SET);
while (!al_feof(file)) {
bytes_read = al_fread(file, file_pos, chunk_size);
file_pos += bytes_read;
}
while (!al_feof(file))
file_pos += al_fread(file, file_pos, chunk_size);
void* data = qoi_decode(file_bytes, al_fsize(file), &meta, 0);
free(file_bytes); if (!data) return NULL;
int oldflags = al_get_new_bitmap_flags();
al_set_new_bitmap_flags(flags);
//ALLEGRO_PIXEL_FORMAT oldfmt = al_get_new_bitmap_format();
//al_set_new_bitmap_format(ALLEGRO_PIXEL_FORMAT_ABGR_8888);
ALLEGRO_BITMAP* bmp = al_create_bitmap(meta.width, meta.height);
ALLEGRO_LOCKED_REGION* lock = al_lock_bitmap(
bmp,
ALLEGRO_PIXEL_FORMAT_ABGR_8888,
ALLEGRO_LOCK_WRITEONLY
bmp,
ALLEGRO_PIXEL_FORMAT_ABGR_8888,
ALLEGRO_LOCK_WRITEONLY
);
if (!lock) return NULL;
al_set_new_bitmap_flags(oldflags);
//al_set_new_bitmap_format(oldfmt);
if (!lock) return NULL;
lock->data = data;
const int qoi_pitch = meta.width * meta.channels;
for (int i = 0; i < meta.height; i++)
memcpy(lock->data + lock->pitch*i, data + qoi_pitch*i, qoi_pitch);
al_unlock_bitmap(bmp);
return bmp;
free(data); return bmp;
}
ALLEGRO_BITMAP* _al_load_qoi(const char* filename, int flags) {