Skip to content

Commit

Permalink
Merge branch 'feature/prevent-loading' into 'dev'
Browse files Browse the repository at this point in the history
Feature/prevent loading



See merge request !43
  • Loading branch information
warrenseine committed Jun 1, 2016
2 parents d6aa47d + 81bddd6 commit ac166fb
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 2 deletions.
18 changes: 18 additions & 0 deletions framework/include/minko/file/Options.hpp
Expand Up @@ -61,6 +61,7 @@ namespace minko
typedef std::function<EffectPtr(EffectPtr)> EffectFunction;
typedef std::function<render::TextureFormat(const TextureFormatSet&)> TextureFormatFunction;
typedef std::function<void(NodePtr, const std::string&, const std::string&)> AttributeFunction;
typedef std::function<bool(const std::string&)> PreventLoadingFunction;

enum class FileStatus
{
Expand Down Expand Up @@ -113,6 +114,7 @@ namespace minko
TextureFormatFunction _textureFormatFunction;
AttributeFunction _attributeFunction;
FileStatusFunction _fileStatusFunction;
PreventLoadingFunction _preventLoadingFunction;
int _seekingOffset;
int _seekedLength;

Expand Down Expand Up @@ -724,6 +726,22 @@ namespace minko
return shared_from_this();
}

inline
const PreventLoadingFunction&
preventLoadingFunction() const
{
return _preventLoadingFunction;
}

inline
Ptr
preventLoadingFunction(const PreventLoadingFunction& func)
{
_preventLoadingFunction = func;

return shared_from_this();
}

inline
int
seekingOffset() const
Expand Down
9 changes: 9 additions & 0 deletions framework/src/minko/file/Options.cpp
Expand Up @@ -120,6 +120,7 @@ Options::Options(const Options& copy) :
_textureFormatFunction(copy._textureFormatFunction),
_attributeFunction(copy._attributeFunction),
_fileStatusFunction(copy._fileStatusFunction),
_preventLoadingFunction(copy._preventLoadingFunction),
_loadAsynchronously(copy._loadAsynchronously),
_seekingOffset(copy._seekingOffset),
_seekedLength(copy._seekedLength)
Expand Down Expand Up @@ -333,6 +334,14 @@ Options::initializeDefaultFunctions()
};

_parserFunction = nullptr;

if (!_preventLoadingFunction)
{
_preventLoadingFunction = [](const std::string& filename) -> bool
{
return false;
};
}
}

void
Expand Down
3 changes: 3 additions & 0 deletions plugin/serializer/src/minko/extension/StreamingExtension.cpp
Expand Up @@ -687,6 +687,9 @@ StreamingExtension::getStreamedAssetHeader(unsigned short

linkedAsset = dependency->getLinkedAssetReference(linkedAssetId);

if (options->preventLoadingFunction()(linkedAsset->filename()))
return false;

const auto assetHeaderSize = MINKO_SCENE_HEADER_SIZE + 2;

auto linkedAssetResolutionSuccessful = true;
Expand Down
24 changes: 22 additions & 2 deletions plugin/serializer/src/minko/file/AbstractSerializerParser.cpp
Expand Up @@ -148,13 +148,25 @@ AbstractSerializerParser::deserializeAsset(SerializedAsset& asset,
AssetLibraryPtr assetLibrary,
std::shared_ptr<Options> options)
{
if (asset.get<0>() == serialize::AssetType::GEOMETRY_ASSET ||
asset.get<0>() == serialize::AssetType::TEXTURE_ASSET ||
asset.get<0>() == serialize::AssetType::MATERIAL_ASSET ||
asset.get<0>() == serialize::AssetType::TEXTURE_PACK_ASSET ||
asset.get<0>() == serialize::AssetType::EFFECT_ASSET
)
{
if (options->preventLoadingFunction()(asset.get<2>()))
return;
}

std::vector<unsigned char> data;
std::string assetCompletePath = "";
std::string resolvedPath = "";
unsigned short metaData = (asset.get<0>() & 0xFFFF0000) >> 16;

asset.get<0>() = asset.get<0>() & 0x000000FF;

// Is this an external asset?
if (asset.get<0>() < 10)
{
assetCompletePath += asset.get<2>();
Expand Down Expand Up @@ -341,19 +353,27 @@ AbstractSerializerParser::deserializeAsset(SerializedAsset& asset,

auto linkedAssetOffset = linkedAssetdata.get<0>();
auto linkedAssetFilename = linkedAssetdata.get<2>();
auto linkedAssetAbsoluteFilename = linkedAssetFilename;

if (linkedAssetFilename == "")
linkedAssetAbsoluteFilename = _resolvedFilename;
else
linkedAssetAbsoluteFilename = File::extractPrefixPathFromFilename(_resolvedFilename) + "/" + linkedAssetAbsoluteFilename;

const auto linkedAssetLinkType = static_cast<LinkedAsset::LinkType>(linkedAssetdata.get<4>());

if (linkedAssetLinkType == LinkedAsset::LinkType::Internal)
{
linkedAssetOffset += internalLinkedContentOffset();

linkedAssetFilename = assetCompletePath + File::removePrefixPathFromFilename(_resolvedFilename);
if (linkedAssetFilename != "")
linkedAssetAbsoluteFilename = assetCompletePath + File::removePrefixPathFromFilename(_resolvedFilename);
}

auto linkedAsset = LinkedAsset::create()
->offset(linkedAssetOffset)
->length(linkedAssetdata.get<1>())
->filename(linkedAssetFilename)
->filename(linkedAssetAbsoluteFilename)
->data(linkedAssetdata.get<3>())
->linkType(linkedAssetLinkType);

Expand Down

0 comments on commit ac166fb

Please sign in to comment.