69 lines
1.8 KiB
C
69 lines
1.8 KiB
C
/**
|
|
* Copyright (c) 2021 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#include "texture.h"
|
|
|
|
assetmanageritem_t * assetManagerLoadTexture(
|
|
assetmanager_t *manager, assetmanagerowner_t owner, char *fileName
|
|
) {
|
|
assetmanageritem_t *item;
|
|
item = assetManagerItemGet(manager, fileName);
|
|
if(item == NULL) {
|
|
item = assetManagerItemAdd(manager, fileName);
|
|
item->type = ASSET_MANAGER_TYPE_TEXTURE;
|
|
item->data.texture.fileName = fileName;
|
|
}
|
|
assetManagerItemGetOrAddHolder(item, owner);
|
|
|
|
return item;
|
|
}
|
|
|
|
bool _assetManagerLoaderTextureAsync(assetmanageritem_t *item) {
|
|
assetbuffer_t *buffer;
|
|
int channels;
|
|
stbi_io_callbacks OPENGL_STBI_CALLBACKS;
|
|
|
|
buffer = assetBufferOpen(item->data.texture.fileName);
|
|
if(buffer == NULL) return false;
|
|
|
|
// Setup the interface for STBI
|
|
OPENGL_STBI_CALLBACKS.read = &assetBufferRead;
|
|
OPENGL_STBI_CALLBACKS.skip = &assetBufferSkip;
|
|
OPENGL_STBI_CALLBACKS.eof = &assetBufferEnd;
|
|
|
|
// Buffer the image
|
|
channels = 0;
|
|
item->data.texture.data = (pixel_t *)stbi_load_from_callbacks(
|
|
&OPENGL_STBI_CALLBACKS, buffer,
|
|
&item->data.texture.width, &item->data.texture.height,
|
|
&channels, STBI_rgb_alpha
|
|
);
|
|
|
|
// Close the buffer
|
|
assetBufferClose(buffer);
|
|
if(item->data.texture.data == NULL) return false;
|
|
return true;
|
|
}
|
|
|
|
bool _assetManagerLoaderTextureSync(assetmanageritem_t *item) {
|
|
// Turn into a texture.
|
|
textureInit(
|
|
&item->data.texture.texture,
|
|
item->data.texture.width,
|
|
item->data.texture.height,
|
|
item->data.texture.data
|
|
);
|
|
|
|
// Cleanup
|
|
stbi_image_free(item->data.texture.data);
|
|
return true;
|
|
}
|
|
|
|
bool _assetManagerLoaderTextureDispose(assetmanageritem_t *item) {
|
|
textureDispose(&item->data.texture.texture);
|
|
return true;
|
|
} |