mThreadDistanceField->CancelRequest(id);
}
+Integration::ResourcePointer ResourceBitmapRequester::LoadResourceSynchronously( const Integration::ResourceType& resourceType, const std::string& resourcePath )
+{
+ // TODO - Refactor common code out of thread
+ return mThreadImage->LoadResourceSynchronously( resourceType, resourcePath );
+}
+
void ResourceBitmapRequester::GetClosestImageSize( const std::string& filename,
const ImageAttributes& attributes,
Vector2 &closestSize )
{
+ // TODO - Refactor common code out of thread
mThreadImage->GetClosestImageSize(filename, attributes, closestSize );
}
const ImageAttributes& attributes,
Vector2 &closestSize )
{
+ // TODO - Refactor common code out of thread
mThreadImage->GetClosestImageSize(resourceBuffer, attributes, closestSize );
}
virtual void CancelLoad(Integration::ResourceId id, Integration::ResourceTypeId typeId);
/**
+ * @copydoc ResourceLoader::LoadResourceSynchronously()
+ */
+ Integration::ResourcePointer LoadResourceSynchronously( const Integration::ResourceType& resourceType, const std::string& resourcePath );
+
+ /**
* @copydoc PlatformAbstraction::GetClosestImageSize()
*/
void GetClosestImageSize( const std::string& filename,
}
}
+ ResourcePointer LoadResourceSynchronously( const Integration::ResourceType& resourceType, const std::string& resourcePath )
+ {
+ ResourcePointer ptr;
+ ResourceRequesterBase* requester = GetRequester(resourceType.id);
+ if( requester )
+ {
+ ptr = requester->LoadResourceSynchronously( resourceType, resourcePath );
+ }
+ return ptr;
+ }
+
void SaveResource(const ResourceRequest& request)
{
ResourceRequesterBase* requester = GetRequester( request.GetType()->id );
mImpl->LoadResource(request);
}
+ResourcePointer ResourceLoader::LoadResourceSynchronously(const Integration::ResourceType& resourceType, const std::string& resourcePath)
+{
+ return mImpl->LoadResourceSynchronously( resourceType, resourcePath );
+}
+
void ResourceLoader::SaveResource(const ResourceRequest& request)
{
mImpl->SaveResource(request);
void LoadResource(const Integration::ResourceRequest& request);
/**
+ * @copydoc PlatformAbstraction::LoadResourceSynchronously()
+ */
+ Integration::ResourcePointer LoadResourceSynchronously( const Integration::ResourceType& resourceType, const std::string& resourcePath);
+
+ /**
* @copydoc PlatformAbstraction::SaveResource()
*/
void SaveResource(const Integration::ResourceRequest& request);
mThreadModel->AddRequest(request, ResourceThreadBase::RequestLoad);
}
+ResourcePointer ResourceModelRequester::LoadResourceSynchronously( const Integration::ResourceType& type, const std::string& path )
+{
+ DALI_ASSERT_ALWAYS( 0 && "Cannot load models synchronously" );
+ return NULL;
+}
+
LoadStatus ResourceModelRequester::LoadFurtherResources( ResourceRequest& request, LoadedResource partialResource )
{
// Nothing to do
virtual void LoadResource( Integration::ResourceRequest& request );
/**
+ * @copydoc ResourceRequester::LoadResourceSynchronously()
+ */
+ virtual Integration::ResourcePointer LoadResourceSynchronously( const Integration::ResourceType& type, const std::string& path );
+
+ /**
* @copydoc ResourceRequester::LoadFurtherResources()
*/
virtual Integration::LoadStatus LoadFurtherResources( Integration::ResourceRequest& request, LoadedResource partialResource );
#include <platform-abstractions/slp/resource-loader/resource-loader.h>
#include <dali/integration-api/resource-request.h>
+#include <dali/integration-api/resource-cache.h>
namespace Dali
{
virtual void LoadResource( Integration::ResourceRequest& request ) = 0;
/**
+ * Load a resource synchronously.
+ * @param[in] type The type of resource
+ * @param[in] path The path to the resource
+ * @return A pointer to the resource
+ */
+ virtual Integration::ResourcePointer LoadResourceSynchronously( const Integration::ResourceType& type, const std::string& path ) = 0;
+
+ /**
* Load more resources (for partial loading)
* @param[in] request The initial load request
* @param[in] partialResource The resources loaded by the last request
mThreadShader->AddRequest(request, ResourceThreadBase::RequestLoad);
}
+ResourcePointer ResourceShaderRequester::LoadResourceSynchronously( const Integration::ResourceType& type, const std::string& path )
+{
+ DALI_ASSERT_ALWAYS( 0 && "Cannot load shaders synchronously" );
+ return NULL;
+}
+
Integration::LoadStatus ResourceShaderRequester::LoadFurtherResources( Integration::ResourceRequest& request, LoadedResource partialResource )
{
// Nothing to do
virtual void LoadResource( Integration::ResourceRequest& request );
/**
+ * @copydoc ResourceRequester::LoadResourceSynchronously()
+ */
+ virtual Integration::ResourcePointer LoadResourceSynchronously( const Integration::ResourceType& type, const std::string& path );
+
+ /**
* @copydoc ResourceRequester::LoadFurtherResources()
*/
virtual Integration::LoadStatus LoadFurtherResources( Integration::ResourceRequest& request, LoadedResource partialResource );
}
}
+ResourcePointer ResourceTextRequester::LoadResourceSynchronously( const Integration::ResourceType& type, const std::string& path )
+{
+ DALI_ASSERT_ALWAYS( 0 && "Cannot load text synchronously" );
+ return NULL;
+}
+
LoadStatus ResourceTextRequester::LoadFurtherResources( ResourceRequest& request, LoadedResource partialResource )
{
// nothing to do
virtual void LoadResource( Integration::ResourceRequest& request );
/**
+ * @copydoc ResourceRequester::LoadResourceSynchronously()
+ */
+ virtual Integration::ResourcePointer LoadResourceSynchronously( const Integration::ResourceType& type, const std::string& path );
+
+ /**
* @copydoc ResourceRequester::LoadFurtherResources()
*/
virtual Integration::LoadStatus LoadFurtherResources( Integration::ResourceRequest& request, LoadedResource partialResource );
#include <dali/integration-api/bitmap.h>
#include <dali/integration-api/debug.h>
#include <dali/integration-api/resource-cache.h>
+#include <dali/integration-api/resource-types.h>
#include "loader-bmp.h"
#include "loader-gif.h"
{
}
+ResourcePointer ResourceThreadImage::LoadResourceSynchronously( const Integration::ResourceType& resourceType, const std::string& resourcePath )
+{
+ ResourcePointer resource;
+ BitmapPtr bitmap = 0;
+
+ FILE * const fp = fopen( resourcePath.c_str(), "rb" );
+ if( fp != NULL )
+ {
+ bool result = ConvertStreamToBitmap( resourceType, resourcePath, fp, bitmap );
+ if( result && bitmap )
+ {
+ resource.Reset(bitmap.Get());
+ }
+ }
+ return resource;
+}
+
+
void ResourceThreadImage::GetClosestImageSize( const std::string& filename,
const ImageAttributes& attributes,
Vector2 &closestSize )
bool file_not_found = false;
BitmapPtr bitmap = 0;
+ bool result = false;
FILE * const fp = fopen( request.GetPath().c_str(), "rb" );
if( fp != NULL )
{
- bitmap = ConvertStreamToBitmap( request, fp );
- if( !bitmap )
+ result = ConvertStreamToBitmap( *request.GetType(), request.GetPath(), fp, bitmap );
+ if( result && bitmap )
+ {
+ // Construct LoadedResource and ResourcePointer for image data
+ LoadedResource resource( request.GetId(), request.GetType()->id, ResourcePointer( bitmap.Get() ) );
+ // Queue the loaded resource
+ mResourceLoader.AddLoadedResource( resource );
+ }
+ else
{
DALI_LOG_WARNING( "Unable to decode %s\n", request.GetPath().c_str() );
}
FILE * const fp = fmemopen(blobBytes, blobSize, "rb");
if ( fp != NULL )
{
- bitmap = ConvertStreamToBitmap(request, fp);
- }
- if ( !bitmap )
- {
- DALI_LOG_WARNING( "Unable to decode bitmap supplied as in-memory blob.\n" );
+ bool result = ConvertStreamToBitmap( *request.GetType(), request.GetPath(), fp, bitmap );
+
+ if ( result && bitmap )
+ {
+ // Construct LoadedResource and ResourcePointer for image data
+ LoadedResource resource( request.GetId(), request.GetType()->id, ResourcePointer( bitmap.Get() ) );
+ // Queue the loaded resource
+ mResourceLoader.AddLoadedResource( resource );
+ }
+ else
+ {
+ DALI_LOG_WARNING( "Unable to decode bitmap supplied as in-memory blob.\n" );
+ }
}
}
}
}
-BitmapPtr ResourceThreadImage::ConvertStreamToBitmap(const ResourceRequest& request, FILE * const fp)
+bool ResourceThreadImage::ConvertStreamToBitmap(const ResourceType& resourceType, std::string path, FILE * const fp, BitmapPtr& ptr)
{
DALI_LOG_TRACE_METHOD(mLogFilter);
- DALI_ASSERT_DEBUG( request.GetType() && ResourceBitmap == request.GetType()->id );
+ DALI_ASSERT_DEBUG( ResourceBitmap == resourceType.id );
bool result = false;
BitmapPtr bitmap = 0;
- std::string path = request.GetPath();
if (fp != NULL)
{
- // Only png, jpg, bmp, gif, and compressed-data-containing ktx files are supported.
LoadBitmapFunction function;
LoadBitmapHeaderFunction header;
Bitmap::Profile profile;
if ( GetBitmapLoaderFunctions( fp,
- GetFormatHint( request.GetPath() ),
+ GetFormatHint( path ),
function,
header,
profile ) )
{
bitmap = Bitmap::New(profile, true);
- DALI_LOG_SET_OBJECT_STRING(bitmap, request.GetPath());
- BitmapResourceType& resType = static_cast<BitmapResourceType&>(*(request.GetType()));
- ImageAttributes& attributes = resType.imageAttributes;
+ DALI_LOG_SET_OBJECT_STRING(bitmap, path);
+ const BitmapResourceType& resType = static_cast<const BitmapResourceType&>(resourceType);
+ ImageAttributes attributes = resType.imageAttributes;
result = function(fp, *bitmap, attributes);
if (!result)
{
- DALI_LOG_WARNING("Unable to decode %s\n", path.c_str());
+ DALI_LOG_WARNING("Unable to convert %s\n", path.c_str());
bitmap = 0;
}
}
fclose(fp); ///! Not exception safe, but an exception on a resource thread will bring the process down anyway.
}
- if ( result )
- {
- // Construct LoadedResource and ResourcePointer for image data
- LoadedResource resource( request.GetId(), request.GetType()->id, ResourcePointer( bitmap.Get() ) );
- // Queue the loaded resource
- mResourceLoader.AddLoadedResource( resource );
- }
- return bitmap;
+ ptr.Reset( bitmap.Get() );
+ return result;
}
//
#include <dali/integration-api/resource-cache.h>
-
+#include <dali/integration-api/resource-types.h>
+#include <dali/integration-api/bitmap.h>
#include "resource-thread-base.h"
namespace Dali
virtual ~ResourceThreadImage();
/**
+ * @copydoc ResourceLoader::LoadResourceSynchronously()
+ * Note, this is not threaded, but is called synchronously.
+ */
+ Integration::ResourcePointer LoadResourceSynchronously( const Integration::ResourceType& resourceType, const std::string& resourcePath );
+
+ /**
* @copydoc ResourceLoader::GetClosestImageSize()
* Note, this is not threaded, but is called synchronously.
*/
private:
/**
* Convert the file stream into a bitmap.
- * @param[in] request
+ * @param[in] resourceType The type of resource to convert.
+ * @param[in] path The path to the resource.
* @param[in] fp File Pointer. Closed on exit.
- * @return Null on failure or a valid BitmapPtr on success. */
- Integration::BitmapPtr ConvertStreamToBitmap( const Integration::ResourceRequest& request,
- FILE * const fp );
+ * @param[out] bitmap Pointer to write bitmap to
+ * @return true on success, false on failure
+ */
+ bool ConvertStreamToBitmap( const Integration::ResourceType& resourceType,
+ std::string path,
+ FILE * const fp,
+ Integration::BitmapPtr& ptr );
+
}; // class ResourceThreadImage
#include <dali/integration-api/debug.h>
#include <dali/integration-api/bitmap.h>
+#include <dali/integration-api/resource-types.h>
#include "resource-loader/resource-loader.h"
#include "resource-loader/loader-jpeg.h"
}
}
+Integration::ResourcePointer SlpPlatformAbstraction::LoadResourceSynchronously(const Integration::ResourceType& resourceType, const std::string& resourcePath)
+{
+ Integration::ResourcePointer resource;
+
+ if (mResourceLoader)
+ {
+ resource = mResourceLoader->LoadResourceSynchronously( resourceType, resourcePath );
+ }
+ return resource;
+}
+
+
void SlpPlatformAbstraction::SaveResource(const Integration::ResourceRequest& request)
{
if (mResourceLoader)
//
#include <dali/integration-api/platform-abstraction.h>
+#include <dali/integration-api/resource-cache.h>
#include <dali/public-api/common/dali-common.h>
#include <ft2build.h>
virtual void LoadResource(const Integration::ResourceRequest& request);
/**
+ * @copydoc PlatformAbstraction::LoadResourceSynchronously()
+ */
+ virtual Integration::ResourcePointer LoadResourceSynchronously(const Integration::ResourceType& resourceType, const std::string& resourcePath);
+
+ /**
* @copydoc PlatformAbstraction::SaveResource()
*/
virtual void SaveResource(const Integration::ResourceRequest& request);