/* ----------------------------------------------------------------------------- GSFramework Copyright 2001-2013 Emmanuel Julien. All Rights Reserved. ----------------------------------------------------------------------------- */ #include "binding_helpers.h" #include "script_squirrel/cobject/matrix_decl.h" #include "core/resource_factories.h" #include "core/graphic_resource_factory.h" #include "core/render_resource_factory.h" #include "core/mixer_resource_factory.h" #include "core/raster_font.h" using namespace GS; using namespace GS::Core; using namespace GS::Script; using namespace GS::Render; //------------------------------------------------------------------------------ SQInteger ResourceFactoryLoadPicture(HSQUIRRELVM vm) { __SQ_GETSTART(2) __SQ_GETSAFEPTR(f, ResourceFactories, typetag_ResourceFactories) __SQ_GETSTRING(name) Picture *p = f->graphic->LoadPicture(name); __SQ_GETEND __SQ_RETURNSAFEPTR(p, typetag_Picture) } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ SQInteger ResourceFactoryLoadRasterFont(HSQUIRRELVM vm) { __SQ_GETSTART(3) __SQ_GETSAFEPTR(f, ResourceFactories, typetag_ResourceFactories) __SQ_GETSTRING(base) __SQ_GETSTRING(name) RasterFont *font = new RasterFont; if (!font) return sq_throwerror(vm, "Failed to allocate raster font object."); font->Load(*f->render, base, name); __SQ_GETEND __SQ_RETURNMANAGEDSAFEPTR(font, typetag_RasterFont) } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ SQInteger ResourceFactoryNewTexture(HSQUIRRELVM vm) { __SQ_GETSINGLESAFEPTR(f, ResourceFactories, typetag_ResourceFactories) Texture *t = f->render->NewTexture(); __SQ_RETURNSAFEPTR(t, typetag_Texture) } SQInteger ResourceFactoryLoadTexture(HSQUIRRELVM vm) { __SQ_GETSTART(2) __SQ_GETSAFEPTR(f, ResourceFactories, typetag_ResourceFactories) __SQ_GETSTRING(name) Texture *t = f->render->LoadTexture(name); if (!t) return sq_throwerror(vm, String::Format("Texture '%s' not found.", name)); __SQ_GETEND __SQ_RETURNSAFEPTR(t, typetag_Texture) } SQInteger ResourceFactoryLoadTextureEx(HSQUIRRELVM vm) { __SQ_GETSTART(3) __SQ_GETSAFEPTR(f, ResourceFactories, typetag_ResourceFactories) __SQ_GETSTRING(name) __SQ_GETBOOL(bypass_cache) Texture *t = f->render->LoadTexture(name, asbool(bypass_cache)); if (!t) return sq_throwerror(vm, String::Format("Texture '%s' not found.", name)); __SQ_GETEND __SQ_RETURNSAFEPTR(t, typetag_Texture) } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ SQInteger ResourceFactoryLoadShader(HSQUIRRELVM vm) { __SQ_GETSTART(2) __SQ_GETSAFEPTR(f, ResourceFactories, typetag_ResourceFactories) __SQ_GETSTRING(name) Render::Shader *s = f->render->LoadShader(name); __SQ_GETEND __SQ_RETURNSAFEPTR(s, typetag_Shader) } SQInteger ResourceFactoryLoadShaderEx(HSQUIRRELVM vm) { __SQ_GETSTART(3) __SQ_GETSAFEPTR(f, ResourceFactories, typetag_ResourceFactories) __SQ_GETSTRING(name) __SQ_GETBOOL(bypass_cache) Render::Shader *s = f->render->LoadShader(name, asbool(bypass_cache)); __SQ_GETEND __SQ_RETURNSAFEPTR(s, typetag_Shader) } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ SQInteger ResourceFactoryLoadGeometry(HSQUIRRELVM vm) { __SQ_GETSTART(2) __SQ_GETSAFEPTR(f, ResourceFactories, typetag_ResourceFactories) __SQ_GETSTRING(name) Render::Geometry *g = f->render->LoadGeometry(name); __SQ_GETEND __SQ_RETURNSAFEPTR(g, typetag_Geometry) } SQInteger ResourceFactoryLoadGeometryEx(HSQUIRRELVM vm) { __SQ_GETSTART(3) __SQ_GETSAFEPTR(f, ResourceFactories, typetag_ResourceFactories) __SQ_GETSTRING(name) __SQ_GETBOOL(bypass_cache) Render::Geometry *g = f->render->LoadGeometry(name, asbool(bypass_cache)); __SQ_GETEND __SQ_RETURNSAFEPTR(g, typetag_Geometry) } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ SQInteger ResourceFactoryLoadMaterial(HSQUIRRELVM vm) { __SQ_GETSTART(2) __SQ_GETSAFEPTR(f, ResourceFactories, typetag_ResourceFactories) __SQ_GETSTRING(name) Render::Material *m = f->render->LoadMaterial(name); __SQ_GETEND __SQ_RETURNSAFEPTR(m, typetag_Material) } SQInteger ResourceFactoryLoadMaterialEx(HSQUIRRELVM vm) { __SQ_GETSTART(3) __SQ_GETSAFEPTR(f, ResourceFactories, typetag_ResourceFactories) __SQ_GETSTRING(name) __SQ_GETBOOL(bypass_cache) Render::Material *m = f->render->LoadMaterial(name, asbool(bypass_cache)); __SQ_GETEND __SQ_RETURNSAFEPTR(m, typetag_Material) } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ SQInteger ResourceFactoryLoadSound(HSQUIRRELVM vm) { __SQ_GETSTART(2) __SQ_GETSAFEPTR(f, ResourceFactories, typetag_ResourceFactories) __SQ_GETSTRING(name) Audio::Sound *s = f->audio->LoadSound(name); __SQ_GETEND __SQ_RETURNSAFEPTR(s, typetag_Sound) } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ SQInteger ResourceFactoryPurge(HSQUIRRELVM vm) { __SQ_GETSINGLESAFEPTR(f, ResourceFactories, typetag_ResourceFactories) uint purged = 0; purged += f->graphic->PurgeCache(); purged += f->render->PurgeCache(); // purged += f->mixer->PurgeCache(); __SQ_RETURNINT(purged) } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void RegisterResourceFactoryBinding(HSQUIRRELVM vm) { /*# Topic: Resource Factory Desc: A resource factory caches all graphic and render resources used by a project. You can access your project resource factory from any script by using the global variable g_factory. Type: ResourceFactory #*/ /*# Section: ResourceFactoryGeneral Desc: Resource Factory General #*/ /*# Func: ResourceFactoryPurge Proto: int:ResourceFactory Desc: Call this function to unload from memory all cached resources that are not currently in use. Example: local purged_count = ResourceFactoryPurge(g_factory) print("Resource unloaded: " + purged_count) #*/ sq_register(vm, ResourceFactoryPurge, "ResourceFactoryPurge", _SC(".x")); /*# Section: GraphicResourceFactory Desc: Graphic Resources #*/ /*# Func: ResourceFactoryLoadPicture Proto: Picture:ResourceFactory,String name Desc: Load a picture from a graphic resource factory, this function use the resource cache to prevent redundant loads of the same resource. See: PictureLoad #*/ sq_register(vm, ResourceFactoryLoadPicture, "ResourceFactoryLoadPicture", _SC(".xs")); /*# Section: RenderResourceFactory Desc: Render Resources #*/ /*# Func: ResourceFactoryLoadRasterFont Proto: RasterFont:ResourceFactory,String name Desc: Load a raster font from a resource factory. #*/ sq_register(vm, ResourceFactoryLoadRasterFont, "ResourceFactoryLoadRasterFont", _SC(".xss")); /*# Func: ResourceFactoryNewTexture Proto: Texture:ResourceFactory Desc: Create a new texture from a resource factory. #*/ sq_register(vm, ResourceFactoryNewTexture, "ResourceFactoryNewTexture", _SC(".x")); /*# Func: ResourceFactoryLoadShader Proto: Shader:ResourceFactory,String name Desc: Load a shader from a resource factory. #*/ sq_register(vm, ResourceFactoryLoadShader, "ResourceFactoryLoadShader", _SC(".xs")); /*# Func: ResourceFactoryLoadShaderEx Proto: Shader:ResourceFactory,String name,bool bypass_cache Desc: Load a shader from a resource factory, optionally bypassing the factory cache. #*/ sq_register(vm, ResourceFactoryLoadShaderEx, "ResourceFactoryLoadShaderEx", _SC(".xsb")); /*# Func: ResourceFactoryLoadTexture Proto: Texture:ResourceFactory,String name Desc: Load a texture from a resource factory. #*/ sq_register(vm, ResourceFactoryLoadTexture, "ResourceFactoryLoadTexture", _SC(".xs")); /*# Func: ResourceFactoryLoadTextureEx Proto: Texture:ResourceFactory,String name,bool bypass_cache Desc: Load a texture from a resource factory, optionally bypassing the factory cache. #*/ sq_register(vm, ResourceFactoryLoadTextureEx, "ResourceFactoryLoadTextureEx", _SC(".xsb")); /*# Func: ResourceFactoryLoadGeometry Proto: Texture:ResourceFactory,String name Desc: Load a geometry from a resource factory. #*/ sq_register(vm, ResourceFactoryLoadGeometry, "ResourceFactoryLoadGeometry", _SC(".xs")); /*# Func: ResourceFactoryLoadGeometryEx Proto: Texture:ResourceFactory,String name,bool bypass_cache Desc: Load a geometry from a resource factory, optionally bypassing the factory cache. #*/ sq_register(vm, ResourceFactoryLoadGeometryEx, "ResourceFactoryLoadGeometryEx", _SC(".xsb")); /*# Func: ResourceFactoryLoadMaterial Proto: Material:ResourceFactory,String name Desc: Load a material from a resource factory. #*/ sq_register(vm, ResourceFactoryLoadMaterial, "ResourceFactoryLoadMaterial", _SC(".xs")); /*# Func: ResourceFactoryLoadMaterialEx Proto: Material:ResourceFactory,String name,bool bypass_cache Desc: Load a material from a resource factory, optionally bypassing the factory cache. #*/ sq_register(vm, ResourceFactoryLoadMaterialEx, "ResourceFactoryLoadMaterialEx", _SC(".xsb")); /*# Section: MixerResourceFactory Desc: Mixer Resources #*/ /*# Func: ResourceFactoryLoadSound Proto: Sound:ResourceFactory,String name Desc: Load a sound from a resource factory. #*/ sq_register(vm, ResourceFactoryLoadSound, "ResourceFactoryLoadSound", _SC(".xs")); } //------------------------------------------------------------------------------