X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-scene3d%2Fpublic-api%2Floader%2Fmaterial-definition.cpp;h=724565278d1851fcdc63ae2fb0f38c8ffd0eb887;hb=35ea9a04faa2f2fdca4d8d4a378ac4524896e15b;hp=9becc3a7a4dfd8f0a8f80f2fe305a69f9d48373b;hpb=9c86dc1ea5d8ec24c79da0abf05c5c23301c8a3a;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-scene3d/public-api/loader/material-definition.cpp b/dali-scene3d/public-api/loader/material-definition.cpp index 9becc3a..7245652 100644 --- a/dali-scene3d/public-api/loader/material-definition.cpp +++ b/dali-scene3d/public-api/loader/material-definition.cpp @@ -100,9 +100,11 @@ Sampler SamplerFlags::MakeSampler(Type flags) return sampler; } -TextureDefinition::TextureDefinition(const std::string& imageUri, SamplerFlags::Type samplerFlags) +TextureDefinition::TextureDefinition(const std::string& imageUri, SamplerFlags::Type samplerFlags, ImageDimensions minImageDimensions, SamplingMode::Type samplingMode) : mImageUri(imageUri), - mSamplerFlags(samplerFlags) + mSamplerFlags(samplerFlags), + mMinImageDimensions(minImageDimensions), + mSamplingMode(samplingMode) { } @@ -113,8 +115,8 @@ MaterialDefinition::LoadRaw(const std::string& imagesPath) const const bool hasTransparency = MaskMatch(mFlags, TRANSPARENCY); // Why we add additional count here? - uint32_t numBuffers = mTextureStages.size() + (hasTransparency ? !CheckTextures(ALBEDO) + !CheckTextures(METALLIC | ROUGHNESS) + !CheckTextures(NORMAL) - : !CheckTextures(ALBEDO | METALLIC) + !CheckTextures(NORMAL | ROUGHNESS)); + uint32_t numBuffers = static_cast(mTextureStages.size()) + (hasTransparency ? !CheckTextures(ALBEDO) + !CheckTextures(METALLIC | ROUGHNESS) + !CheckTextures(NORMAL) + : !CheckTextures(ALBEDO | METALLIC) + !CheckTextures(NORMAL | ROUGHNESS)); if(numBuffers == 0) { return raw; @@ -130,12 +132,12 @@ MaterialDefinition::LoadRaw(const std::string& imagesPath) const // Check for compulsory textures: Albedo, Metallic, Roughness, Normal if(checkStage(ALBEDO | METALLIC)) { - raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri, iTexture->mTexture.mMinImageDimensions, FittingMode::DEFAULT, iTexture->mTexture.mSamplingMode, true), iTexture->mTexture.mSamplerFlags}); ++iTexture; if(checkStage(NORMAL | ROUGHNESS)) { - raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri, iTexture->mTexture.mMinImageDimensions, FittingMode::DEFAULT, iTexture->mTexture.mSamplingMode, true), iTexture->mTexture.mSamplerFlags}); ++iTexture; } else // single value normal-roughness @@ -149,7 +151,7 @@ MaterialDefinition::LoadRaw(const std::string& imagesPath) const { if(checkStage(ALBEDO)) { - raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri, iTexture->mTexture.mMinImageDimensions, FittingMode::DEFAULT, iTexture->mTexture.mSamplingMode, true), iTexture->mTexture.mSamplerFlags}); ++iTexture; } else if(mNeedAlbedoTexture) // single value albedo, albedo-alpha or albedo-metallic @@ -183,7 +185,7 @@ MaterialDefinition::LoadRaw(const std::string& imagesPath) const const bool createMetallicRoughnessAndNormal = hasTransparency || std::distance(mTextureStages.begin(), iTexture) > 0; if(checkStage(METALLIC | ROUGHNESS)) { - raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri, iTexture->mTexture.mMinImageDimensions, FittingMode::DEFAULT, iTexture->mTexture.mSamplingMode, true), iTexture->mTexture.mSamplerFlags}); ++iTexture; } else if(createMetallicRoughnessAndNormal && mNeedMetallicRoughnessTexture) @@ -197,7 +199,7 @@ MaterialDefinition::LoadRaw(const std::string& imagesPath) const if(checkStage(NORMAL)) { - raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri, iTexture->mTexture.mMinImageDimensions, FittingMode::DEFAULT, iTexture->mTexture.mSamplingMode, true), iTexture->mTexture.mSamplerFlags}); ++iTexture; } else if(mNeedNormalTexture) @@ -220,19 +222,31 @@ MaterialDefinition::LoadRaw(const std::string& imagesPath) const // Extra textures. if(checkStage(SUBSURFACE)) { - raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri, iTexture->mTexture.mMinImageDimensions, FittingMode::DEFAULT, iTexture->mTexture.mSamplingMode, true), iTexture->mTexture.mSamplerFlags}); ++iTexture; } if(checkStage(OCCLUSION)) { - raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri, iTexture->mTexture.mMinImageDimensions, FittingMode::DEFAULT, iTexture->mTexture.mSamplingMode, true), iTexture->mTexture.mSamplerFlags}); ++iTexture; } if(checkStage(EMISSIVE)) { - raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri), iTexture->mTexture.mSamplerFlags}); + raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri, iTexture->mTexture.mMinImageDimensions, FittingMode::DEFAULT, iTexture->mTexture.mSamplingMode, true), iTexture->mTexture.mSamplerFlags}); + ++iTexture; + } + + if(checkStage(SPECULAR)) + { + raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri, iTexture->mTexture.mMinImageDimensions, FittingMode::DEFAULT, iTexture->mTexture.mSamplingMode, true), iTexture->mTexture.mSamplerFlags}); + ++iTexture; + } + + if(checkStage(SPECULAR_COLOR)) + { + raw.mTextures.push_back({SyncImageLoader::Load(imagesPath + iTexture->mTexture.mImageUri, iTexture->mTexture.mMinImageDimensions, FittingMode::DEFAULT, iTexture->mTexture.mSamplingMode, true), iTexture->mTexture.mSamplerFlags}); ++iTexture; } @@ -261,7 +275,7 @@ TextureSet MaterialDefinition::Load(const EnvironmentDefinition::Vector& environ } // Assign textures to slots -- starting with 2D ones, then cubemaps, if any. - if(mEnvironmentIdx < environments.size()) + if(mEnvironmentIdx < static_cast(environments.size())) { auto& envTextures = environments[mEnvironmentIdx].second; // If pre-computed brdf texture is defined, set the texture.