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));
|
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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user