corruption fix
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user