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)); uint8_t* file_bytes = malloc(al_fsize(file));
memset(file_bytes, 0, al_fsize(file)); memset(file_bytes, 0, al_fsize(file));
void* file_pos = file_bytes; void* file_pos = file_bytes;
int bytes_read = 0;
#define chunk_size 1024 #define chunk_size 1024
al_fseek(file, 0, SEEK_SET); al_fseek(file, 0, SEEK_SET);
while (!al_feof(file)) { while (!al_feof(file))
bytes_read = al_fread(file, file_pos, chunk_size); file_pos += al_fread(file, file_pos, chunk_size);
file_pos += bytes_read;
}
void* data = qoi_decode(file_bytes, al_fsize(file), &meta, 0); void* data = qoi_decode(file_bytes, al_fsize(file), &meta, 0);
free(file_bytes); if (!data) return NULL; free(file_bytes); if (!data) return NULL;
int oldflags = al_get_new_bitmap_flags(); int oldflags = al_get_new_bitmap_flags();
al_set_new_bitmap_flags(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_BITMAP* bmp = al_create_bitmap(meta.width, meta.height);
ALLEGRO_LOCKED_REGION* lock = al_lock_bitmap( ALLEGRO_LOCKED_REGION* lock = al_lock_bitmap(
bmp, bmp,
ALLEGRO_PIXEL_FORMAT_ABGR_8888, ALLEGRO_PIXEL_FORMAT_ABGR_8888,
ALLEGRO_LOCK_WRITEONLY ALLEGRO_LOCK_WRITEONLY
); );
if (!lock) return NULL;
al_set_new_bitmap_flags(oldflags); 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); al_unlock_bitmap(bmp);
return bmp; free(data); return bmp;
} }
ALLEGRO_BITMAP* _al_load_qoi(const char* filename, int flags) { ALLEGRO_BITMAP* _al_load_qoi(const char* filename, int flags) {