// Copyright (c) 2014 Alex Diener. All rights reserved. #include "watertowerclassic/ResourceWiring.h" #include "glbitmapfont/GLBitmapFont.h" #include "gltexture/GLTexture.h" #include "gltexture/GLTextureAtlas.h" #include "jsonserialization/JSONDeserializationContext.h" #include "pngimageio/PNGImageIO.h" #include "utilities/IOUtilities.h" #include "vorbisaudioio/VorbisAudioIO.h" #include #include void * loadPNGFlip(const char * resourceName, void * context) { return PNGImageIO_loadPNGFile(resourceName, PNG_PIXEL_FORMAT_AUTOMATIC, true); } void * loadTexture(const char * resourceName, void * context) { ResourceManager * resourceManager = context; JSONDeserializationContext * deserializationContext; GLTexture * texture; BitmapImage * image; deserializationContext = JSONDeserializationContext_createWithFile(resourceName); if (deserializationContext->status != SERIALIZATION_ERROR_OK) { fprintf(stderr, "Error: Couldn't load %s as a json file (error %d)\n", resourceName, deserializationContext->status); return NULL; } texture = GLTexture_deserialize(deserializationContext); if (texture == NULL) { fprintf(stderr, "Error: Couldn't load %s as a texture metadata file (error %d)\n", resourceName, deserializationContext->status); deserializationContext->dispose(deserializationContext); return NULL; } deserializationContext->dispose(deserializationContext); image = resourceManager->referenceResource(resourceManager, "png_flip", texture->imageName); if (image == NULL) { fprintf(stderr, "Error: Couldn't load %s as a png file\n", texture->imageName); texture->dispose(texture); return NULL; } texture->setImage(texture, 0, image->width, image->height, image->bytesPerRow, image->pixels); resourceManager->releaseResource(resourceManager, "png_flip", texture->imageName); return texture; } void * loadTextureAtlas(const char * resourceName, void * context) { ResourceManager * resourceManager = context; JSONDeserializationContext * deserializationContext; GLTextureAtlas * textureAtlas; GLTexture * texture; deserializationContext = JSONDeserializationContext_createWithFile(resourceName); if (deserializationContext->status != SERIALIZATION_ERROR_OK) { fprintf(stderr, "Error: Couldn't load %s as a json file (error %d)\n", resourceName, deserializationContext->status); return NULL; } textureAtlas = GLTextureAtlas_deserialize(deserializationContext); if (textureAtlas == NULL) { fprintf(stderr, "Error: Couldn't load %s as a texture atlas file (error %d)\n", resourceName, deserializationContext->status); deserializationContext->dispose(deserializationContext); return NULL; } deserializationContext->dispose(deserializationContext); texture = resourceManager->referenceResource(resourceManager, "texture", textureAtlas->textureName); if (texture == NULL) { textureAtlas->dispose(textureAtlas); return NULL; } GLTextureAtlas_setTexture(textureAtlas, texture, false); return textureAtlas; } void * loadBitmapFont(const char * resourceName, void * context) { ResourceManager * resourceManager = context; JSONDeserializationContext * deserializationContext; GLBitmapFont * font; GLTextureAtlas * atlas; deserializationContext = JSONDeserializationContext_createWithFile(resourceName); if (deserializationContext->status != SERIALIZATION_ERROR_OK) { fprintf(stderr, "Error: Couldn't load %s as a json file (error %d)\n", resourceName, deserializationContext->status); return NULL; } font = GLBitmapFont_deserialize(deserializationContext); if (font == NULL) { fprintf(stderr, "Error: Couldn't load %s as a font metadata file (error %d)\n", resourceName, deserializationContext->status); deserializationContext->dispose(deserializationContext); return NULL; } deserializationContext->dispose(deserializationContext); atlas = resourceManager->referenceResource(resourceManager, "texture_atlas", font->atlasName); if (atlas == NULL) { font->dispose(font); return NULL; } GLBitmapFont_setTextureAtlas(font, atlas, false); return font; } void * loadOggVorbis(const char * resourceName, void * context) { return VorbisAudioIO_loadOggVorbisFile(resourceName); } void unloadPNG(void * resource, void * context) { BitmapImage * image = resource; image->dispose(image); } void unloadTexture(void * resource, void * context) { GLTexture * texture = resource; texture->dispose(texture); } void unloadTextureAtlas(void * resource, void * context) { GLTextureAtlas * textureAtlas = resource; ResourceManager * resourceManager = context; resourceManager->releaseResource(resourceManager, "texture", textureAtlas->textureName); textureAtlas->dispose(textureAtlas); } void unloadBitmapFont(void * resource, void * context) { GLBitmapFont * font = resource; ResourceManager * resourceManager = context; resourceManager->releaseResource(resourceManager, "texture_atlas", font->atlasName); font->dispose(font); } void unloadOggVorbis(void * resource, void * context) { PCMAudio * audio = resource; audio->dispose(audio); }